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

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

При настройке правил конвертации данных (КД 2.1) разработчики нередко сталкиваются с ситуацией, когда одни и те же правила работают по-разному в обработке Универсальный обмен данными XML и в типовой подсистеме обмена данными по планам обмена. Рассмотрим типовой сценарий: при прямой выгрузке через универсальную обработку зависимый справочник (например, ДолжностиОрганизаций) выгружается со всеми назначенными полями поиска (Наименование, Код, ПометкаУдаления) и сопоставляется корректно. Однако при переносе правил в типовую настройку обмена с регистрацией на плане обмена в файл выгрузки попадают служебные поля {КлючПоискаВИБИсточнике}, {ИмяТипаВИБИсточнике}, {ИмяТипаВИБПриемнике}, а в базе-приемнике элементы задваиваются и создаются без части реквизитов.

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

Выясним причину различия в выгрузке данных

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

  1. Выгрузка объекта vs выгрузка ссылки: Если для справочника не создано собственное Правило выгрузки данных (ПВД) и он не зарегистрирован на узле плана обмена, типовой механизм считает такой объект зависимым ссылочным реквизитом. При формировании сообщения обмена типовая подсистема выгружает облегченный узел ссылки, отсекая второстепенные реквизиты (такие как Код и ПометкаУдаления), чтобы минимизировать объем передаваемого сообщения.
  2. Приоритет регистра сопоставления объектов: При обмене по планам обмена типовые конфигурации используют регистр сведений СоответствиеОбъектовДляОбмена (или СоответствияОбъектовИнформационныхБаз). Служебные параметры в фигурных скобках как раз предназначены для сопоставления по этому регистру. Если соответствие по внутреннему ключу уже зафиксировано, алгоритм сопоставляет объекты по нему, минуя поиск по наименованию, описанный в ПКО.
  3. Отключение поиска по идентификатору: Если в ПКО отключен поиск по уникальному идентификатору (GUID), а ссылка выгружается только со служебными ключами и без полного набора реквизитов, база-приемник не может сопоставить элемент по полям поиска и создает дубликат без заполненных свойств.

Способ 1. Принудительное определение полей поиска в ПКО

Чтобы гарантировать поиск объекта по заданным реквизитам при выгрузке по ссылке, переопределим поля поиска программно в правилах конвертации объектов.

Рассмотрим алгоритм настройки в конфигурации «Конвертация данных»:

  1. Откроем необходимое ПКО (например, ДолжностиОрганизаций).
  2. Перейдем на закладку Обработчики событий и откроем событие ПоляПоиска.
  3. Пропишем явное указание свойств, по которым должен выполняться поиск, и установим флаг завершения стандартной обработки поиска:
    
    СтрокаИменСвойствПоиска = "Наименование";
    ПрекратитьПоиск = Истина;
    
  4. Убедимся, что для свойства Наименование в ПКС установлен флаг Искать объект приемника по этому свойству, а флаг Искать объект приемника по внутреннему идентификатору в заголовке ПКО снят.

Способ 2. Очистка регистра сопоставления объектов в базе-приемнике

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

Разберем порядок действий:

  1. Откроем базу-приемник и перейдем к регистру сведений СоответствиеОбъектовДляОбмена (или СоответствияОбъектовИнформационныхБаз).
  2. Установим отбор по узлу обмена и типу объекта (справочник ДолжностиОрганизаций).
  3. Удалим некорректные записи соответствий для должностей, которые задвоились или сопоставились неверно.
  4. Повторим процедуру загрузки данных.

Способ 3. Создание ПВД и регистрация объектов на узле обмена

Если требуется, чтобы справочник гарантированно выгружался как полноценный объект со всеми реквизитами (код, наименование, пометка удаления), а не как зависимая ссылка, включим его в регламентный состав выгрузки.

  1. В плане обмена конфигурации-источника включим справочник ДолжностиОрганизаций в состав плана обмена (с автоматической или выборочной регистрацией изменений).
  2. В правилах конвертации данных создадим отдельное Правило выгрузки данных (ПВД) для данного справочника и сопоставим его с нашим ПКО.
  3. При изменении и проведении кадровых документов обеспечим регистрацию используемых должностей на соответствующем узле обмена.

Способ 4. Программная выгрузка объекта по правилу

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

Посмотрим на пример кода в обработчике ПередВыгрузкой ПКС табличной части или реквизита документа:


Если ЗначениеЗаполнено(Источник.Должность) Тогда
    ВыгрузитьПоПравилу(Источник.Должность, , , , "ДолжностиОрганизаций");
КонецЕсли;

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

Рекомендации по настройке загрузки дублирующихся позиций

В ситуациях, когда в источнике одно и то же наименование должности представлено несколькими элементами с разными кодами, а в приемнике требуется объединить их в один элемент, настроим обработчик ПриЗагрузке в ПКО справочника:


Если ОбъектНайден Тогда
    // Запрещаем перезапись реквизитов существующего в приемнике элемента
    НеЗамещатьОбъект = Истина;
КонецЕсли;

В этом случае при нахождении должности по наименованию существующий в базе-приемнике объект не будет перезаписан реквизитами из очередного элемента источника, что исключит затирание кодов и лишние модификации данных.

← На главную