При доработке типовой конфигурации «1С:Управление торговлей 10.3» (или аналогичных решений на обычных формах, таких как КА 1.1 и УПП 1.3) разработчики часто сталкиваются с ситуацией, когда в модуле объекта документа Требование-накладная отсутствуют явные строки записи в регистр накопления Затраты. При попытке установить точку останова в коде или в модуле набора записей регистра отладчик не останавливается, хотя движения в информационной базе успешно создаются. Разберем архитектуру партионного учета, определим точное место формирования движений и выясним, как правильно настроить отладку на платформе 1С:Предприятие 8.3.
В конфигурации УТ 10.3 проведение складских документов разделено на два ключевых этапа: оперативный количественный учет и стоимостный партионный учет.
ТоварыНаСкладах и СписанныеТовары. Непосредственной записи в регистр Затраты в модуле документа нет.УправлениеЗапасамиПартионныйУчет. Точкой входа служит процедура ДвижениеПартийТоваров, которая анализирует строки списания и вызывает специализированные алгоритмы.Затраты формируются в процедуре СформироватьДвиженияСписаниеНаПостоянныеЗатратыУпр (а также в сопутствующих процедурах распределения производственных и косвенных расходов в зависимости от характера статьи затрат).Рассмотрим типовой пример модификации алгоритма, когда в регистр Затраты добавлено новое пользовательское измерение, которое требуется заполнить при списании материальных ценностей:
// Фрагмент процедуры СформироватьДвиженияСписаниеНаПостоянныеЗатратыУпр
// Общий модуль: УправлениеЗапасамиПартионныйУчет
Движение = Движения.Затраты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = СтруктураШапкиДокумента.Дата;
Движение.СтатьяЗатрат = ВыборкаПоТоварам.СтатьяЗатрат;
Движение.НоменклатурнаяГруппа = ВыборкаПоТоварам.НоменклатурнаяГруппа;
// Заполнение добавленного пользовательского измерения
Движение.НовоеИзмерение = ВыборкаПоТоварам.НовоеИзмерение;
Движение.Количество = ВыборкаПоТоварам.Количество;
Движение.Сумма = Стоимость;
Если движения по регистру Затраты не формируются вовсе, проверим следующие параметры учета:
Проведение по партиям.Основная причина, по которой отладчик игнорирует точки останова в модуле УправлениеЗапасамиПартионныйУчет — исполнение кода на стороне сервера при отключенном режиме серверной отладки. Общий модуль имеет установленные флаги исполнения на сервере, поэтому при переходе с платформы 8.2 на 8.3 требуется заново активировать отладку серверных вызовов.
Разберем по шагам, как восстановить работу точек останова:
В операционной системе Windows откроем редактор реестра (regedit) и перейдем в ветку службы агента сервера:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...
В строковом параметре ImagePath добавим ключ -debug к команде запуска ragent.exe и перезапустим службу 1С:Предприятия.
В среде Linux проверим конфигурационный файл /etc/init.d/srv1cv83 или systemd-юнит службы, указав параметр SRV1CV8_DEBUG=1.
Откроем меню Отладка → Подключение → Настройка автоматического подключения.
Установим флаги напротив пунктов «Серверные контексты» (или «Серверные процедуры») и «Фоновые задания». Без этих флагов Конфигуратор не будет перехватывать вызовы, выполняемые в серверных модулях кластера.
Если после динамического обновления конфигурации точки останова остаются неактивными (серыми), выполним полный перезапуск рабочих процессов сервера (rphost) и очистим локальный кэш конфигуратора на рабочем месте разработчика.
После включения ключа -debug и настройки автоматического подключения серверных контекстов точка останова в процедуре СформироватьДвиженияСписаниеНаПостоянныеЗатратыУпр будет гарантированно срабатывать при проведении документа Требование-накладная.