Как зарегистрировать документ в плане обмена при отражении в регламентированном учете в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При разработке обменов данными между конфигурацией 1С:ERP Управление предприятием (или 1С:Комплексная автоматизация) и внешними учетными системами разработчики часто сталкиваются со спецификой архитектуры проведения документов. Если в конфигурациях предыдущих поколений (например, УПП 1.3 или Бухгалтерия предприятия) проведение по оперативным регистрам и формирование бухгалтерских проводок происходят одновременно в одной транзакции, то в 1С:ERP эти процессы разделены во времени.

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

Причина разделения проведения и отражения в учете

Проанализируем архитектуру подсистемы регламентированного учета в 1С:ERP:

  1. Оперативное проведение: при нажатии кнопки проведения формируются движения по оперативным регистрам (накопления, сведений). На этом этапе проводки по регистру бухгалтерии не создаются, а в регистр сведений ОтражениеДокументовВРеглУчете записывается статус К отражению.
  2. Отражение в регл. учете: специализированный регламентный механизм (вручную из рабочего места или по расписанию в фоновом задании) обрабатывает очередь документов, настраивает счета по правилам и формирует движения в регистре бухгалтерии Хозрасчетный.
  3. Фоновое выполнение: процедура формирования проводок запускается в многопоточных фоновых заданиях на сервере. При этом реквизиты и табличные части самого документа-регистратора не модифицируются, из-за чего стандартные подписки на событие ПриЗаписи самого документа не срабатывают повторно.

Способ 1. Подписка на событие записи набора записей регистра бухгалтерии

Наиболее надежный и прямой способ отследить появление или изменение проводок — перехватить момент записи движений в регистр бухгалтерии. Рассмотрим по шагам, как это реализовать:

  1. В дереве метаданных создадим новую подписку на события (например, ЗарегистрироватьДокументПоРегиструБухгалтерииПриЗаписи).
  2. В свойстве Источник выберем объект РегистрБухгалтерииНаборЗаписей.Хозрасчетный.
  3. В свойстве Событие укажем ПриЗаписи.
  4. В общем серверном модуле напишем обработчик, извлекающий документ-регистратор и отправляющий его в план обмена.

Посмотрим на пример программного кода обработчика подписки:


Процедура ЗарегистрироватьДокументПоРегиструБухгалтерииПриЗаписи(Источник, Отказ) Экспорт

    // Проверяем флаг загрузки обмена во избежание зацикливания
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Проверяем наличие отбора по регистратору
    Если Источник.Отбор.Найти("Регистратор") = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Если Источник.Отбор.Регистратор.Использование И ЗначениеЗаполнено(Источник.Отбор.Регистратор.Значение) Тогда
        ДокументСсылка = Источник.Отбор.Регистратор.Значение;
        
        // Получаем узел или массив узлов плана обмена
        УзлыОбмена = ПланыОбмена.ОбменERP_УПП.Выбрать();
        Пока УзлыОбмена.Следующий() Цикл
            Если УзлыОбмена.Ссылка = ПланыОбмена.ОбменERP_УПП.ЭтотУзел() Тогда
                Продолжить;
            КонецЕсли;
            
            // Регистрируем документ для передачи с новыми проводками
            ПланыОбмена.ЗарегистрироватьИзменения(УзлыОбмена.Ссылка, ДокументСсылка);
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры

Способ 2. Подписка на изменение статуса в регистре сведений

Другой подход заключается в отслеживании изменения состояния отражения документа через специализированный регистр сведений ОтражениеДокументовВРеглУчете. В нем хранится статус документа (например, Отражен, Отражен вручную или Требует подтверждения).

Рассмотрим логику реализации:

  1. Создаем подписку на событие ПриЗаписи для объекта РегистрСведенийНаборЗаписей.ОтражениеДокументовВРеглУчете.
  2. В коде проверяем, изменился ли статус документа на Перечисления.СтатусыОтраженияВРегламентированномУчете.Отражен.
  3. При подтверждении успешного отражения регистрируем документ-распоряжение в плане обмена.

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

Способ 3. Настройка Правил регистрации объектов (ПРО)

Чтобы избежать ситуации, когда документ выгружается в базу-приемник в «сыром» виде (без проводок), рекомендуется скорректировать Правила регистрации объектов в конфигурации Конвертация данных 2.0:

  1. Открываем правило регистрации для выгружаемого документа.
  2. В обработчике Перед обработкой или При обработке добавляем проверку: отражен ли документ в регламентированном учете.
  3. Если документ еще не отражен, устанавливаем Отказ = Истина;.

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

Особенности отладки и распространенная ошибка

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

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

Для корректной отладки выполним следующие действия:

  1. Откроем меню Отладка → Подключение....
  2. Нажмем кнопку Настройка автоматического подключения.
  3. Установим флаг Фоновые задания.
  4. Повторим процесс отражения документа в учете — точка останова в подписке на РегистрБухгалтерииНаборЗаписей успешно сработает.

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

← На главную