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

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

При настройке типового обмена данными между конфигурациями (например, 1С:Управление торговлей и 1С:Бухгалтерия предприятия) специалисты часто сталкиваются со ситуацией: при переносе зарегистрированного документа или элемент справочника в целевой базе появляются битые ссылки вида «Объект не найден» или голые УИДы (GUID) вместо реквизитов. Разберем, почему так происходит, штатное ли это поведение системы и как принудительно заставить 1С выгружать связанные ссылочные объекты.

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

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

По этой причине по умолчанию в правилах обмена отключена полная выгрузка данных по ссылкам: передается только идентификатор (УИД). Если объект с таким УИД отсутствует в базе-приемнике и не был зарегистрирован к отправке отдельно, реквизит остается не запущенным или формирует некорректную ссылку.

Решение 1. Принудительный вызов правил выгрузки в «Конвертации данных 2.1» (КД 2)

Проанализируем практический случай: при выгрузке справочника Номенклатура требуется, чтобы связанный с ним справочник ВидыНоменклатуры выгружался полностью, а не только передавал свой УИД.

Для решения этой задачи в «Конвертации данных 2.1» используется процедура ВыгрузитьПоПравилу. Добавлять вызов процедуры необходимо в обработчик «Перед выгрузкой» соответствующего Правила Конвертации Объектов (ПКО).

Рассмотрим по шагам написание кода в обработчике «Перед выгрузкой» ПКО Номенклатура:

  1. Откроем правила конвертации в конфигурации «Конвертация данных».
  2. Перейдем в ПКО источника (например, Номенклатура) в обработчик Перед выгрузкой.
  3. Пропишем явный вызов выгрузки ссылочного реквизита по наименованию его ПКО:

ИмяПКО = "ВидыНоменклатуры";
УзелСсылки = Неопределено;
ВыгрузитьПоПравилу(Источник.ВидНоменклатуры, , ВходящиеДанные, ИсходящиеДанные, ИмяПКО, УзелСсылки);

Разберем ключевые параметры функции ВыгрузитьПоПравилу:

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

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


ВыгрузитьПоПравилу(Источник.БазоваяЕдиницаИзмерения, , ВходящиеДанные, ИсходящиеДанные, "КлассификаторЕдиницИзмерения");
ВыгрузитьПоПравилу(Источник.ОсновнойОтветственный, , ВходящиеДанные, ИсходящиеДанные, "Пользователи");

Решение 2. Управление выгрузкой в «Конвертации данных 3.0» (КД 3 / EnterpriseData)

Посмотрим, как аналогичная задача решается при обмене через универсальный формат данных EnterpriseData в КД 3. В обработке выгрузки за логику отбора отвечает функция ВыгружатьОбъектПоНеобходимости. Чтобы принудительно выгружать связанные ссылки при регистрации родительского документа или справочника, в модуль добавляется проверка конвертационного параметра:


Функция ВыгружатьОбъектПоНеобходимости(КомпонентыОбмена, Объект)
    
    Если КомпонентыОбмена.ПараметрыКонвертации.ВыгружатьСвязанныеСсылки Тогда
        Возврат Истина;
    КонецЕсли;
    
    // Штатная логика проверки регистрации...
КонецФункции

В этом случае при регистрации документа система проверяет флаг ВыгружатьСвязанныеСсылки и вместе с документом отправляет все связанные реквизиты справочников.

Решение 3. Регистрация связанных объектов через ПРД и штатные средства

Если редактировать код правил нежелательно, рассмотрим административные способы исключения «голых» УИД:

  1. Настройка правил регистрации данных (ПРД): В «Конвертации данных» для правил регистрации на вкладке «Связанные объекты» можно настроить автоматическую регистрацию подчиненных справочников на узле обмена при записи основного объекта.
  2. Предварительная выгрузка НСИ: Перед выгрузкой документов выполнить полную регистрацию нормативно-справочной информации через обработку Регистрация изменений для обмена данными.
← На главную