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