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