При организации обмена между информационными базами 1С (например, между двумя конфигурациями «Управление производственным предприятием» или при интеграции учетных систем) часто возникает задача: в базе-источнике учет ведется по нескольким организациям (например, четырем), а в базе-приемнике — только по одной. В результате при выгрузке документов реквизит Организация либо не заполняется, либо переносится некорректно, нарушая логику учета.
Разберем подробно, как правильно настроить правила конвертации данных (КД 2), переопределить организацию в документах и избежать типичных ошибок синхронизации связанных реквизитов.
По умолчанию в правилах конвертации объектов (ПКО) справочника Организации сопоставление выполняется по коду или по уникальному идентификатору (GUID). Если документ выгружается из базы с организацией «А», а в базе-приемнике есть только организация «Д» с другим кодом и GUID, типовой механизм поиска не находит соответствия. В результате реквизит Организация в загруженном документе остается пустым.
Рассмотрим несколько способов настройки правил обмена в конфигурации «Конвертация данных 2.1» для решения этой задачи.
Самый прямой способ — отключить передачу значения реквизита из базы-источника и явно заполнить целевую организацию программно при загрузке документа в базу-приемник.
Разберем по шагам, как это реализовать:
ПоступлениеТоваровУслуг или РеализацияТоваровУслуг) найдем правило конвертации свойства (ПКС) для реквизита Организация и снимем признак выгрузки/передачи значения из источника.
Объект.Организация = Справочники.Организации.НайтиПоКоду("000000001");
Однако если в одном сеансе обмена загружается множество документов, вызов метода НайтиПоКоду() на каждый документ будет создавать избыточные запросы к базе данных. Чтобы оптимизировать скорость загрузки, выполним предварительную инициализацию целевой организации в глобальных параметрах обмена.
Для ускорения процесса загрузки целевую организацию можно найти один раз в момент старта обмена и сохранить в глобальную структуру Параметры.
Параметры.Вставить("ОсновнаяОрганизация", Справочники.Организации.НайтиПоКоду("000000001"));
Если ЗначениеЗаполнено(Параметры.ОсновнаяОрганизация) Тогда
Объект.Организация = Параметры.ОсновнаяОрганизация;
КонецЕсли;
Если мы хотим, чтобы подмена организации работала универсально во всех документах и зависимых справочниках без написания программного кода в каждом документе, воспользуемся стандартным механизмом правил конвертации значений (ПКЗ) справочника Организации.
Проанализируем этот подход:
Организации переходим на вкладку «Правила конвертации значений».При подмене организации в документах необходимо учитывать, что в типовых конфигурациях многие реквизиты связаны с организацией владельца. Просто изменить поле Организация в шапке документа недостаточно, так как это может привести к ошибкам проведения:
ДоговорыКонтрагентов подчинен конкретной организации. Если в документе указать организацию «Д», а в реквизите ДоговорКонтрагента останется договор, привязанный к организации «А», проведение документа по взаиморасчетам завершится ошибкой. В правилах обмена для договоров также необходимо переопределять реквизит Организация либо синхронизировать договоры по наименованию и владельцу.БанковскийСчетОрганизации и Касса привязаны к конкретному юридическому лицу. При замене организации их необходимо очищать либо подставлять основной счет/кассу целевой организации.Если настроен двусторонний обмен, возникает обратная проблема: при выгрузке документа из базы с одной организацией база-приемник не знает, к какой из четырех организаций документ должен относиться.
Для решения обратного маршрута применяют следующие варианты:
ПередЗагрузкой базы-приемника организация вычисляется по закрепленному партнеру или складу.ПриОтправкеДанныхПодчиненному / ПриОтправкеДанныхГлавному исключают регистрацию документов, чтобы избежать перезаписи данных и коллизий синхронизации.