Ошибка при создании «Перемещения товаров» из «Заказа на перемещение» и исправление через расширение. УТ 11.5.27.88

23.09.26

Разработка - Механизмы типовых конфигураций

В УТ 11.5.27.88 обнаружена ошибка типового кода при создании документа «Перемещение товаров» на основании «Заказа на перемещение»: пакетная обработка падает с «Несовместимые типы ВЫРАЗИТЬ». Ошибка возникает даже при отключенной функциональной опции «Контроль качества товаров». Разбираю реальную причину в новом механизме контроля качества и показываю проверенное точечное исправление через расширение без снятия конфигурации с поддержки.

После обновления рабочей базы с 1С:Управление торговлей 11.5.25.77 на УТ 11.5.27.88 обнаружилась ошибка в совершенно типовом сценарии: создании документа «Перемещение товаров» на основании «Заказа на перемещение».

Особенность проблемы в том, что падает код нового механизма «Контроль качества товаров», хотя сама функциональная опция «Использовать контроль качества товаров» отключена.

В этой статье разберем не только рабочее исправление, но и причину ошибки: откуда появляется действие ЗаполнитьКонтролируемуюПартиюОтправителя, почему пакетный запрос вообще выполняется при отключенном контроле качества, при чем здесь реквизит ЗаказНаПеремещение и как исправить конкретный сценарий через расширение, не изменяя основную конфигурацию.

Ошибка подтверждена на УТ 11.5.27.88. Проверенное в рабочей базе исправление приведено ниже.

 

Как воспроизводится ошибка

Исходный сценарий максимально простой и полностью типовой:

  1. Открываем проведенный документ «Заказ на перемещение».
  2. Выбираем команду «Ввести на основании».
  3. Создаем документ «Перемещение товаров».
  4. Во время заполнения нового документа получаем исключение пакетной обработки табличной части.

В рассматриваемом случае используется платформа:

1С:Предприятие 8.3.27.1859

Конфигурация до обновления:

Управление торговлей 11.5.25.77

Конфигурация после обновления:

Управление торговлей 11.5.27.88

 

Текст ошибки

Ключевая часть исключения выглядит так:

Не удалось выполнить пакетную обработку строк таблицы.
Выполняемые действия:
ЗаполнитьКонтролируемуюПартиюОтправителя

По причине:
Ошибка при вызове метода контекста (ВыполнитьПакет)

{ОбщийМодуль.ОбщегоНазначенияУТ.Модуль(5395)}:
    Результаты = Запрос.ВыполнитьПакет();

{ОбщийМодуль.ОбщегоНазначенияУТ.Модуль(5433)}:
    Результаты = ВыполнитьПакетЗапросов(...);

{ОбщийМодуль.ПакетнаяОбработкаТабличнойЧастиСервер.Модуль(4199)}:
    Таблицы = ОбщегоНазначенияУТ.ВыгрузитьРезультатыЗапроса(...);

{ОбщийМодуль.ПакетнаяОбработкаТабличнойЧастиСервер.Модуль(108)}:
    ИнициализироватьПакетнуюОбработку(...);

{ОбщийМодуль.ПакетнаяОбработкаТабличнойЧастиСервер.Модуль(268)}:
    ОбработатьСтрокиТЧ(...);

{Документ.ПеремещениеТоваров.МодульМенеджера(1687)}:
    ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(...);

{Документ.ПеремещениеТоваров.МодульОбъекта(450)}:
    Документы.ПеремещениеТоваров.ЗаполнитьШапкуДокументаПоЗаказу(...);

{Документ.ПеремещениеТоваров.МодульОбъекта(254)}:
    ЗаполнитьПоЗаказу(...);

по причине:

{(22, 7)}: Несовместимые типы "ВЫРАЗИТЬ"

И ВЫРАЗИТЬ(
    &КонтрольКачестваЗаказНаПеремещение
    КАК Документ.ЗаказНаПеремещение
).ПеремещениеЗаблокированныхТоваров

По стеку легко уйти не туда и начать разбирать ОбщегоНазначенияУТ.ВыполнитьПакетЗапросов() или сам общий механизм пакетной обработки.

Но это только исполнитель. Причина появляется раньше, когда формируется действие контроля качества и его параметры.

 

Но контроль качества в базе вообще выключен

Первое, что имеет смысл проверить при такой ошибке, - действительно ли включена функциональность контроля качества.

В рассматриваемой базе она не включена.

Функциональная опция называется:

ИспользоватьКонтрольКачестваТоваров

Ее хранилище в метаданных:

Константа.ИспользоватьКонтрольКачестваТоваров

Значение константы:

ИспользоватьКонтрольКачестваТоваров = Ложь

То есть это не ситуация, когда флажок формы отображается неправильно, а в данных сохранено другое значение.

Сам источник функциональной опции действительно содержит Ложь. Тем не менее при обычном создании «Перемещения товаров» выполняется действие:

ЗаполнитьКонтролируемуюПартиюОтправителя

Именно это и стало главным признаком того, что проблема находится не в настройке базы, а в интеграции нового механизма контроля качества с существующим алгоритмом документа.

 

Что происходит внутри типового кода

В модуле менеджера документа ПеремещениеТоваров есть функция:

КонтрольКачестваПараметрыДействий(Объект)

Она создает описание действий нового механизма контроля качества. В частности, там безусловно формируется описание действия:

ИмяДействия = "ЗаполнитьКонтролируемуюПартиюОтправителя";

ПараметрыДействия =
    КонтрольКачества.НовыйПараметрыДействия(ИмяДействия);

ПараметрыДействия.ЧитаемыеПоля =
    "ЗаказНаПеремещение";

ПараметрыДействия.ИзменяемыеПоля =
    "КонтролируемаяПартияОтправителя";

В параметры будущего запроса также помещается значение реквизита документа:

ПараметрыДействия.ПараметрыЗапроса.Вставить(
    "КонтрольКачестваЗаказНаПеремещение",
    Объект.ЗаказНаПеремещение);

После этого формируется запрос, содержащий следующий фрагмент:

КОГДА
    &КонтрольКачестваПеремещениеПоЗаказам

    И &КонтрольКачестваЗаказНаПеремещение
        <> ЗНАЧЕНИЕ(Документ.ЗаказНаПеремещение.ПустаяСсылка)

    И Таблица.ЗаказНаПеремещение =
        ЗНАЧЕНИЕ(Документ.ЗаказНаПеремещение.ПустаяСсылка)

    И ВЫРАЗИТЬ(
        &КонтрольКачестваЗаказНаПеремещение
        КАК Документ.ЗаказНаПеремещение
    ).ПеремещениеЗаблокированныхТоваров

ТОГДА

    ВЫРАЗИТЬ(
        &КонтрольКачестваЗаказНаПеремещение
        КАК Документ.ЗаказНаПеремещение
    ).КонтролируемаяПартияОтправителя

Именно на первом ВЫРАЗИТЬ() пакет запросов в нашем сценарии завершается ошибкой типов.

 

Почему условие перед ВЫРАЗИТЬ не спасает

На первый взгляд можно ожидать, что выражение:

ВЫРАЗИТЬ(
    &КонтрольКачестваЗаказНаПеремещение
    КАК Документ.ЗаказНаПеремещение
)

не будет вычислено, если предыдущие условия конструкции КОГДА не выполняются.

Но проблема возникает раньше фактического выполнения этой ветки. Пакет запросов должен быть разобран и скомпилирован. Если тип параметра несовместим с указанным в ВЫРАЗИТЬ типом, компиляция запроса завершается ошибкой.

То есть логическое условие внутри запроса не заменяет корректную подготовку параметров и не может исправить несовместимый тип параметра.

 

Первый дефект: отключенная функциональность все равно попадает в обработку

В самом общем модуле КонтрольКачества видно, что разработчики предусматривали отключение механизма функциональной опцией.

Функция получения кэша выглядит так:

Функция КэшДанныхМеханизма(
    Объект,
    МенеджерОбъекта = Неопределено) Экспорт

    Если МенеджерОбъекта = Неопределено Тогда
        МенеджерОбъекта =
            ОбщегоНазначения.МенеджерОбъектаПоСсылке(
                Объект.Ссылка);
    КонецЕсли;

    Результат =
        МенеджерОбъекта.КонтрольКачестваПараметрыДействий(
            Объект);

    ОтключитьЕслиВыключенаФО(Результат);

    Возврат Результат;

КонецФункции

То есть архитектурно функциональная опция учтена. Кэш параметров действительно проходит через ОтключитьЕслиВыключенаФО().

Однако вызывающий код документа все равно помещает само действие ЗаполнитьКонтролируемуюПартиюОтправителя в СтруктураДействий и передает ее универсальному механизму пакетной обработки.

А универсальная функция:

ТребуетсяВыполнитьДействие()

проверяет прежде всего наличие соответствующего действия в СтруктураДействий.

В итоге получается неприятная ситуация: внутреннее описание механизма знает, что функциональная опция выключена, но само действие уже зарегистрировано как требуемое к обработке.

По крайней мере в рассматриваемом сценарии этого недостаточно, чтобы остановить построение и выполнение соответствующего пакетного запроса.

 

Второй подозрительный участок: порядок заполнения ЗаказНаПеремещение

Еще интереснее выглядит порядок кода непосредственно в:

Документ.ПеремещениеТоваров.МодульМенеджера

ЗаполнитьШапкуДокументаПоЗаказу()

Типовой код сначала запускает пакетное заполнение контролируемой партии:

// Заполнение серий.
КонтрольКачестваКэш =
    КонтрольКачества.КэшДанныхМеханизма(Объект);

СтруктураДействий = Новый Структура();

СтруктураДействий.Вставить(
    "ЗаполнитьКонтролируемуюПартиюОтправителя",
    КонтрольКачестваКэш);

ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(
    Объект.Товары,
    СтруктураДействий);

А заполнение заказа в шапке выполняет после этого:

// Заполнение заказа(-ов) в шапке.
Если МассивЗаказов.Количество() = 1 Тогда

    Объект.ЗаказНаПеремещение =
        МассивЗаказов[0];

Иначе

    ЗаказыСервер.
        ЗаполнитьЗаказВШапкеПоЗаказамВТабличнойЧасти(
            Объект.ЗаказНаПеремещение,
            Объект.Товары,
            ПараметрыЗаполнения.ИмяПоляЗаказ);

КонецЕсли;

При этом выше мы уже видели, что при создании параметров действия читается именно:

Объект.ЗаказНаПеремещение

и передается в параметр:

КонтрольКачестваЗаказНаПеремещение

Получается как минимум очень опасный порядок инициализации: механизм использует значение реквизита до того, как эта же процедура заполняет реквизит фактическим заказом из МассивЗаказов.

Для сценария создания перемещения по одному заказу логичнее сначала заполнить Объект.ЗаказНаПеремещение, а уже затем передавать объект механизму, использующему этот реквизит.

 

Почему я не стал исправлять общий пакетный механизм

Можно было бы пойти глубже и изменить общий модуль ПакетнаяОбработкаТабличнойЧастиСервер или центральные процедуры КонтрольКачества.

Но для оперативного исправления рабочей базы это слишком широкая область воздействия. Пакетная обработка используется большим количеством документов и совершенно разных прикладных механизмов.

Для конкретного подтвержденного сценария есть значительно более безопасная точка изменения:

Документ.ПеремещениеТоваров
    ->
Модуль менеджера
    ->
ЗаполнитьШапкуДокументаПоЗаказу()

Исправление состоит из двух частей: сначала заполняем заказ в шапке, затем вообще не запускаем механизм контроля качества, если функциональная опция выключена.

 

Исправление через расширение

Основную конфигурацию изменять не требуется.

В расширение заимствуем:

Документ.ПеремещениеТоваров
Модуль менеджера
Процедура ЗаполнитьШапкуДокументаПоЗаказу

Для метода используем штатный механизм расширений «Изменение и контроль».

Важно: заголовок изменяемого метода удобнее сформировать средствами конфигуратора. Ниже приведена именно замена фрагмента процедуры с использованием директив #Удаление и #Вставка.

Фрагмент для удаления

#Удаление
    // Заполнение серий.
    КонтрольКачестваКэш =
        КонтрольКачества.КэшДанныхМеханизма(Объект);

    СтруктураДействий = Новый Структура();

    СтруктураДействий.Вставить(
        "ЗаполнитьКонтролируемуюПартиюОтправителя",
        КонтрольКачестваКэш);

    ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(
        Объект.Товары,
        СтруктураДействий);

    ПараметрыУказанияСерий =
        НоменклатураСервер.ПараметрыУказанияСерий(
            Объект,
            Документы.ПеремещениеТоваров);

    НоменклатураСервер.ЗаполнитьСерииПоFEFO(
        Объект,
        ПараметрыУказанияСерий,
        Ложь);

    // Заполнение заказа(-ов) в шапке.
    Если МассивЗаказов.Количество() = 1 Тогда

        Объект.ЗаказНаПеремещение =
            МассивЗаказов[0];

    Иначе

        ЗаказыСервер.
            ЗаполнитьЗаказВШапкеПоЗаказамВТабличнойЧасти(
                Объект.ЗаказНаПеремещение,
                Объект.Товары,
                ПараметрыЗаполнения.ИмяПоляЗаказ);

    КонецЕсли;
#КонецУдаления

Исправленный вариант

#Вставка
    // Сначала заполняем заказ в шапке.
    // Значение используется механизмом контроля качества ниже.
    Если МассивЗаказов.Количество() = 1 Тогда

        Объект.ЗаказНаПеремещение =
            МассивЗаказов[0];

    Иначе

        ЗаказыСервер.
            ЗаполнитьЗаказВШапкеПоЗаказамВТабличнойЧасти(
                Объект.ЗаказНаПеремещение,
                Объект.Товары,
                ПараметрыЗаполнения.ИмяПоляЗаказ);

    КонецЕсли;

    // Не запускаем механизм контроля качества,
    // когда соответствующая функциональная опция выключена.
    Если ПолучитьФункциональнуюОпцию(
            "ИспользоватьКонтрольКачестваТоваров") Тогда

        КонтрольКачестваКэш =
            КонтрольКачества.КэшДанныхМеханизма(Объект);

        СтруктураДействий = Новый Структура();

        СтруктураДействий.Вставить(
            "ЗаполнитьКонтролируемуюПартиюОтправителя",
            КонтрольКачестваКэш);

        ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(
            Объект.Товары,
            СтруктураДействий);

    КонецЕсли;

    // Штатное заполнение серий оставляем независимо
    // от использования контроля качества.
    ПараметрыУказанияСерий =
        НоменклатураСервер.ПараметрыУказанияСерий(
            Объект,
            Документы.ПеремещениеТоваров);

    НоменклатураСервер.ЗаполнитьСерииПоFEFO(
        Объект,
        ПараметрыУказанияСерий,
        Ложь);
#КонецВставки

 

Почему исправление сделано именно так

Здесь принципиально важно не просто убрать строку, на которой возникает исключение.

Если в базе функциональность контроля качества не используется, то правильное поведение для этого сценария простое: действие контроля качества вообще не должно запускаться.

Поэтому при:

ИспользоватьКонтрольКачестваТоваров = Ложь

до универсальной пакетной обработки больше не доходит действие:

ЗаполнитьКонтролируемуюПартиюОтправителя

и не формируется проблемный запрос.

Одновременно исправляется порядок заполнения шапки: Объект.ЗаказНаПеремещение получает фактическое значение до возможного использования механизмом контроля качества.

При этом обычное заполнение серий через:

НоменклатураСервер.ЗаполнитьСерииПоFEFO()

не отключается и остается штатным.

 

Результат

После установки расширения исходный сценарий:

Заказ на перемещение
    ->
Ввести на основании
    ->
Перемещение товаров

снова отрабатывает нормально.

В рабочей базе функциональная опция «Использовать контроль качества товаров» осталась выключенной.

То есть для обхода ошибки не пришлось ни включать ненужную подсистему, ни изменять типовую конфигурацию, ни вмешиваться в общий механизм ВыполнитьПакет().

 

Связанный симптом: права на справочник «Контролируемые партии»

При переходе на новый релиз проявился еще один симптом того же класса.

У пользователей, которым не была назначена роль нового механизма контроля качества, отсутствовало чтение:

Справочник.КонтролируемыеПартии

и некоторые обычные операции с документами могли завершаться ошибкой доступа, несмотря на то что контроль качества товаров в базе выключен.

Если выдать пользователю право чтения справочника, конкретная ошибка доступа может исчезнуть.

Но это именно обход симптома, а не хорошее исправление причины. Если функциональность не используется, рядовому пользователю не должны требоваться права на ее внутренние объекты только потому, что ненужная ветка типового алгоритма продолжает выполняться.

Поэтому после обновления я бы особенно внимательно относился к неожиданным ошибкам доступа к:

Справочник.КонтролируемыеПартии

у пользователей, для которых механизм контроля качества вообще не предназначен.

 

Может ли подобная ошибка быть в других документах

Подтвержденный и фактически исправленный сценарий этой статьи относится именно к:

ЗаказНаПеремещение
    ->
ПеремещениеТоваров
    ->
ЗаполнитьШапкуДокументаПоЗаказу()

Но сам механизм КонтрольКачества является общим. Он обслуживает несколько действий пакетного заполнения:

Действие Назначение
ЗаполнитьКонтролируемуюПартиюОтправителя Заполнение контролируемой партии отправителя
ЗаполнитьПроконтролироватьКачествоДатаПодтвержденияКачества Заполнение признака контроля и даты подтверждения качества
ЗаполнитьПодлежитРазблокировкеДатаПодтвержденияКачества Заполнение данных разблокировки партии

Поэтому наличие аналогичного класса ошибки в других местах вполне возможно, но без конкретного воспроизведения я бы не называл любой найденный вызов ошибочным.

Если после обновления другой документ начинает обращаться к объектам контроля качества при выключенной функциональной опции, для диагностики полезно искать в его коде:

КонтрольКачества.КэшДанныхМеханизма(

КонтрольКачестваПараметрыДействий(

ЗаполнитьКонтролируемуюПартиюОтправителя

ЗаполнитьПроконтролироватьКачествоДатаПодтвержденияКачества

ЗаполнитьПодлежитРазблокировкеДатаПодтвержденияКачества

Справочник.КонтролируемыеПартии

Особенно подозрительна последовательность, когда сначала формируется СтруктураДействий с действием контроля качества, затем вызывается:

ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ()

и при этом отсутствует раннее условие:

Если ПолучитьФункциональнуюОпцию(
        "ИспользоватьКонтрольКачестваТоваров") Тогда

    ...

КонецЕсли;

Также стоит проверить порядок заполнения реквизитов шапки, если эти реквизиты передаются в ПараметрыЗапроса.

 

Что проверять после установки исправления

Проверка Ожидаемый результат
Функциональная опция контроля качества выключена Обычное перемещение продолжает работать
Создание перемещения из одного заказа Документ создается без ошибки ВЫРАЗИТЬ
Заполнение ЗаказНаПеремещение В шапке указана исходная ссылка заказа
Табличная часть товаров Строки заказа переносятся штатно
Серийный учет Штатное ЗаполнитьСерииПоFEFO продолжает выполняться
Запись и проведение документа Документ проводится без обращения к неиспользуемому механизму качества
Обычный пользователь без роли контроля качества Для данного сценария не требуется выдавать лишние права только ради обхода ошибки

 

Чего делать не стоит

Я бы не исправлял эту ошибку изменением:

ОбщегоНазначенияУТ.ВыполнитьПакетЗапросов()

или

ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ()

Это слишком низкий и общий уровень. Там уже только исполняется пакет, сформированный прикладным кодом.

Также не стоит просто ловить исключение вокруг Запрос.ВыполнитьПакет(). Проблемный запрос не должен был появляться в этом сценарии изначально.

Не лучший вариант и постоянная выдача всем пользователям чтения Справочник.КонтролируемыеПартии, если сама подсистема контроля качества в компании не используется.

И наконец, включать функциональную опцию «Контроль качества товаров» только для того, чтобы обойти дефект выключенного состояния, тоже не требуется. Это изменит функциональное поведение рабочей базы вместо устранения причины.

 

Почему расширение удобнее изменения основной конфигурации

Исправление хорошо помещается в расширение: меняется одна подтвержденная точка типового алгоритма, а основная конфигурация остается на поддержке.

Использование режима «Изменение и контроль» здесь особенно полезно. При следующем обновлении конфигурации станет видно, что поставщик изменил исходный фрагмент процедуры, и локальное исправление можно будет перепроверить относительно нового типового кода.

Это лучше, чем копировать всю процедуру в расширение без контроля и потом годами не замечать изменения типового алгоритма.

 

Итог

В УТ 11.5.27.88 подтверждена ошибка типового сценария создания «Перемещения товаров» на основании «Заказа на перемещение».

При выключенной функциональной опции ИспользоватьКонтрольКачестваТоваров в обработку все равно попадало действие:

ЗаполнитьКонтролируемуюПартиюОтправителя

и формировался запрос новой подсистемы контроля качества.

Одновременно в типовой процедуре ЗаполнитьШапкуДокументаПоЗаказу() виден опасный порядок инициализации: механизм получает объект документа до того, как Объект.ЗаказНаПеремещение заполняется фактическим заказом из МассивЗаказов.

В результате пакет запросов доходит до выражения:

ВЫРАЗИТЬ(
    &КонтрольКачестваЗаказНаПеремещение
    КАК Документ.ЗаказНаПеремещение
)

и завершается ошибкой:

Несовместимые типы "ВЫРАЗИТЬ"

Практическое исправление через расширение: сначала заполнить заказ в шапке, затем запускать действие контроля качества только при действительно включенной функциональной опции.

После этой правки исходный сценарий на УТ 11.5.27.88 в рабочей базе снова выполняется нормально.

Если после обновления на новые релизы появляются другие ошибки, связанные с КонтролируемыеПартии, ЗаполнитьКонтролируемуюПартиюОтправителя или неожиданной необходимостью прав на подсистему контроля качества при выключенной функциональности, стоит проверять тот же класс проблемы: ненужное действие нового механизма попадает в общий типовой алгоритм, хотя по функциональной опции выполняться не должно.

Вступайте в нашу телеграмм-группу Инфостарт

УТ 11.5.27.88 УТ 11.5 1С Управление торговлей Перемещение товаров Заказ на перемещение Контроль качества товаров Контролируемые партии Несовместимые типы ВЫРАЗИТЬ ЗаполнитьКонтролируемуюПартиюОтправителя ошибка обновления 1С исправление УТ 11 расширение 1С ИзменениеИКонтроль

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Механизмы типовых конфигураций Разработчик 1С:Предприятие 8 Абонемент ($m)

Использование переопределяемых процедур в 1С на управляемых формах.

1 стартмани

01.09.2026    3685    waider    3    

15

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Разработчик 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данное расширение — это механизм, сделанный при помощи двух модулей из БСП (3.1.11.415), который позволяет динамически добавлять команды (кнопки и не только при желании) на формы управляемого приложения без изменения конфигурации. На примере данного механизма удобно рассмотреть некоторые возможности для расширения функционала объектов, которые подключены к механизму библиотеки стандартных подсистем.

1 стартмани

20.03.2026    4728    InFlach    0    

5

Механизмы типовых конфигураций Разработчик Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    6472    AlexeyPROSTO_1C    5    

21

Механизмы типовых конфигураций Разработчик Стажер 1С 8.3 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    4175    YA_1100893639    1    

9
Для отправки сообщения требуется регистрация/авторизация