Почему при синхронизации ЗУП и БП параметр ОбменДанными.Загрузка равен Ложь

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

При настройке и сопровождении типовой синхронизации между конфигурациями «Зарплата и управление персоналом 3» (ЗУП) и «Бухгалтерия предприятия 3.0» (БП) разработчики часто сталкиваются с неожиданным поведением системы. В частности, при поступлении документа ОтражениеЗарплатыВБухучете в базу Бухгалтерии программный код в обработчиках событий (например, ПередЗаписью или ПриЗаписи) показывает, что свойство ОбменДанными.Загрузка имеет значение Ложь. На первый взгляд это кажется ошибкой, так как объект поступает из внешней системы, и логично было бы ожидать режим загрузки. Разберем детально, почему это происходит и какая логика заложена в современные механизмы обмена данными.

Механика обмена через Enterprise Data

Для начала проанализируем ситуацию с точки зрения архитектуры обмена. В современных редакциях 1С используется универсальный формат Enterprise Data (ED). В отличие от старых обменов через правила конвертации (XML), где объекты просто «зеркалились» из одной базы в другую, ED предполагает более сложную бизнес-логику при приемке данных.

Рассмотрим подробнее процесс загрузки. Когда в БП 3.0 поступает пакет данных из ЗУП, система не просто записывает набор полей в таблицу базы данных. Она инициирует процесс интеграции объекта в текущую информационную среду. Для документа ОтражениеЗарплатыВБухучете это критически важно по нескольким причинам:

  1. Отсутствие плана счетов в ЗУП: В базе зарплаты нет бухгалтерских счетов. ЗУП оперирует понятиями «Способы отражения зарплаты в бухучете», которые являются простыми строковыми или справочными наименованиями.
  2. Дообогащение данными: Только в базе «Бухгалтерия предприятия» настроено соответствие этих способов конкретным счетам (20, 26, 44, 70, 69) и их аналитике (субконто).
  3. Формирование движений: Чтобы документ сформировал проводки, он должен пройти через процедуру проведения с включенной бизнес-логикой.

Влияние параметра ОбменДанными.Загрузка на логику системы

Выясним причину, по которой платформа 1С:Предприятие принудительно устанавливает ОбменДанными.Загрузка = Ложь. Свойство Загрузка = Истина сообщает платформе и конфигурации, что:

Поскольку ЗУП не передает сами проводки (регистры бухгалтерии), а передает только данные для их формирования, документ в БП обязан «провестись» самостоятельно. Если бы обмен установил Загрузка = Истина, документ был бы просто записан как «пустая оболочка», и бухгалтер не увидел бы никаких проводок до момента ручного перепроведения.

Автоматическое проведение при обмене

Проанализируем настройки синхронизации. В типовых сценариях обмена через Enterprise Data существует опция «Автоматически проводить документы при загрузке». Когда эта опция включена, Библиотека Стандартных Подсистем (БСП) вызывает метод объекта:

ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

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

Роль флага подтверждения бухгалтером

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

  1. Документ приходит из ЗУП в БП в статусе «Не подтвержден».
  2. Программа записывает его с Загрузка = Ложь, чтобы подставились счета учета.
  3. Главный бухгалтер проверяет документ и ставит галочку подтверждения.
  4. При записи подтвержденного документа информация об этом изменении должна уйти обратно в ЗУП при следующем сеансе связи.

Для того чтобы система регистрации изменений (Планы обмена) поняла, что объект изменился и его нужно отправить обратно, запись также должна происходить в обычном режиме, а не в режиме загрузки. Если использовать Загрузка = Истина, механизмы регистрации изменений могут вести себя иначе, что нарушит цикл двусторонней синхронизации.

Как обрабатывать это в коде?

Если вы пишете собственный обработчик или расширение и вам нужно определить, что запись инициирована именно обменом, но при этом Загрузка равна Ложь, рекомендуется анализировать дополнительные свойства. В БСП при обмене данными часто заполняются дополнительные свойства объекта. Посмотрим на пример кода, который позволяет более точно определить контекст:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимЗагрузки)
    // Стандартная проверка
    Если РежимЗагрузки Тогда
        Возврат;
    КонецЕсли;

    // Проверка на контекст обмена через дополнительные свойства
    Если ДополнительныеСвойства.Свойство("СостояниеОбмена") 
       Или ДополнительныеСвойства.Свойство("ДанныеЗагружаются") Тогда
        // Здесь мы понимаем, что это обмен, хотя РежимЗагрузки = Ложь
        // Можно пропустить специфические интерактивные проверки
    КонецЕсли;
КонецПроцедуры

Резюме

Подводя итог, можно утверждать: значение Ложь для параметра ОбменДанными.Загрузка при типовом обмене ЗУП — БП является штатным поведением системы. Это не баг, а архитектурное решение, обеспечивающее:

При разработке собственных механизмов в этих конфигурациях следует учитывать эту особенность и не полагаться исключительно на флаг Загрузка, а анализировать структуру ДополнительныеСвойства объекта, которую заполняют модули обмена БСП.

← На главную