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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Причина возникновения проблемы с пустыми организациями

По умолчанию в правилах конвертации объектов (ПКО) справочника Организации сопоставление выполняется по коду или по уникальному идентификатору (GUID). Если документ выгружается из базы с организацией «А», а в базе-приемнике есть только организация «Д» с другим кодом и GUID, типовой механизм поиска не находит соответствия. В результате реквизит Организация в загруженном документе остается пустым.

Рассмотрим несколько способов настройки правил обмена в конфигурации «Конвертация данных 2.1» для решения этой задачи.

Способ 1. Использование обработчика «После загрузки» в ПКО документов

Самый прямой способ — отключить передачу значения реквизита из базы-источника и явно заполнить целевую организацию программно при загрузке документа в базу-приемник.

Разберем по шагам, как это реализовать:

  1. Откроем правила конвертации в конфигурации «Конвертация данных».
  2. В правиле конвертации объекта (ПКО) нужного документа (например, ПоступлениеТоваровУслуг или РеализацияТоваровУслуг) найдем правило конвертации свойства (ПКС) для реквизита Организация и снимем признак выгрузки/передачи значения из источника.
  3. В обработчике события «После загрузки» для данного ПКО напишем код переопределения реквизита:

Объект.Организация = Справочники.Организации.НайтиПоКоду("000000001");

Однако если в одном сеансе обмена загружается множество документов, вызов метода НайтиПоКоду() на каждый документ будет создавать избыточные запросы к базе данных. Чтобы оптимизировать скорость загрузки, выполним предварительную инициализацию целевой организации в глобальных параметрах обмена.

Способ 2. Оптимизация через глобальные параметры правил

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

  1. В обработчике правил «Перед загрузкой данных» (в глобальных обработчиках конвертации) находим организацию и записываем ее в параметры:

Параметры.Вставить("ОсновнаяОрганизация", Справочники.Организации.НайтиПоКоду("000000001"));
  1. Затем в обработчике ПКО «После загрузки» для документов подставляем значение из готового параметра:

Если ЗначениеЗаполнено(Параметры.ОсновнаяОрганизация) Тогда
    Объект.Организация = Параметры.ОсновнаяОрганизация;
КонецЕсли;

Способ 3. Использование правил конвертации значений (ПКЗ)

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

Проанализируем этот подход:

  1. В ПКО справочника Организации переходим на вкладку «Правила конвертации значений».
  2. Создаем соответствия, где для каждого значения источника (организации А, Б, В, Г) в качестве значения приемника выбирается единственная организация Д.
  3. В этом случае платформа автоматически сопоставит организацию во всех документах и реквизитах при конвертации ссылок.

Важные нюансы: ссылочная целостность и зависимые реквизиты

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

  1. Договоры контрагентов: Справочник ДоговорыКонтрагентов подчинен конкретной организации. Если в документе указать организацию «Д», а в реквизите ДоговорКонтрагента останется договор, привязанный к организации «А», проведение документа по взаиморасчетам завершится ошибкой. В правилах обмена для договоров также необходимо переопределять реквизит Организация либо синхронизировать договоры по наименованию и владельцу.
  2. Банковские счета и кассы: Реквизиты БанковскийСчетОрганизации и Касса привязаны к конкретному юридическому лицу. При замене организации их необходимо очищать либо подставлять основной счет/кассу целевой организации.
  3. Подразделения: Если подразделения ведутся в разрезе организаций, их сопоставление также требует переопределения.

Организация обратного обмена (из 1 организации в 4)

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

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

  1. Определение по контрагенту или складу: Если в компании четко разделены клиенты или склады между организациями, в обработчике ПередЗагрузкой базы-приемника организация вычисляется по закрепленному партнеру или складу.
  2. Односторонний обмен документами: Если обратная передача этих документов не требуется, в правилах регистрации объектов (ПРО) или обработчиках планов обмена ПриОтправкеДанныхПодчиненному / ПриОтправкеДанныхГлавному исключают регистрацию документов, чтобы избежать перезаписи данных и коллизий синхронизации.
← На главную