При переходе на современные конфигурации линейки «1С:Предприятие 8.3» (1С:ERP 2, 1С:Комплексная автоматизация 2, 1С:Управление торговлей 11) разработчики часто сталкиваются с вопросом: где именно сосредоточен код формирования движений? В типовых конфигурациях старого поколения вся логика проведения традиционно располагалась в процедуре ОбработкаПроведения модуля объекта. В ERP применена оптимизированная многоуровневая архитектура, распределяющая нагрузку между модулями и различными этапами учета. Разберем детально, как устроена эта система и где искать алгоритмы проведения.
Проанализируем структуру проведения на уровне самого документа. В ERP логика разделена на две ключевые части:
ОбработкаПроведения): выполняет исключительно роль диспетчера и координатора. Она не содержит прямых переборов табличных частей и явного заполнения наборов записей. Ее задача — передать управление общим сервисным механизмам проведения (например, через вызовы процедур общего модуля ПроведениеСервер).Посмотрим на типовую структуру модуля менеджера документа. Формирование движений разбито на функции с названиями вида ТекстЗапросаТаблица_<ИмяРегистра> или реализовано в общем методе инициализации данных проведения:
// Пример структуры методов в Модуле менеджера документа
Функция ТекстЗапросаТаблица_СвободныеОстатки() Экспорт
ТекстЗапроса =
"ВЫБРАТЬ
| Документ.Номенклатура КАК Номенклатура,
| Документ.Склад КАК Склад,
| Документ.Количество КАК Количество
|ИЗ
| ДокументТабличнаяЧасть КАК Документ";
Возврат ТекстЗапроса;
КонецФункции
Все сформированные тексты запросов по регистрам объединяются в единый пакетный запрос. Механизм общего модуля ПроведениеСервер выполняет этот пакет за одно обращение к СУБД, помещает результаты во временные таблицы структуры ДополнительныеСвойства.ДляПроведения и разом записывает наборы записей в соответствующие регистры накопления и сведений.
Выясним важную архитектурную особенность ERP: движения документа формируются не одномоментно. Они разделены на три независимых контура:
СебестоимостьТоваров и ПартииТоваровПереданные при оперативном проведении не рассчитывают стоимостные оценки. Окончательные стоимостные движения формируются регламентным документом «Расчет себестоимости товаров» в рамках процедуры закрытия месяца методом решения систем линейных уравнений (СЛУ).Хозрасчетный никак не связаны напрямую с процедурой ОбработкаПроведения. При проведении документ только регистрируется к отражению. Формирование проводок выполняется отдельным механизмом «Отражение документов в регл. учете» на основании настроенных правил и шаблонов проводок в фоновом режиме или вручную.Рассмотрим, как правильно вносить изменения в движения документов в ERP:
ОбработкаПроведения: изменение тела процедуры проведения в модуле объекта нарушает стандартный конвейер и блокировочный механизм 1С.&ИзменениеИКонтроль или переопределяйте структуру заполнения наборов записей.Хозрасчетный в обход типового механизма настройки счетов учета, так как это нарушит сверку регламентированного и оперативного контуров ERP.