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

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

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

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

Способ 1. Отключение ПВД и корректная настройка ссылочной выгрузки

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

Выполним следующие действия:

  1. Отключаем или удаляем ПВД для связанного справочника. В дереве правил выгрузки данных находим правило для зависимого справочника (например, Организации) и отключаем его (снимаем активность) или удаляем. Правило конвертации объекта (ПКО) при этом обязательно оставляем.
  2. Проверяем флаг запрета выгрузки по ссылкам в основном ПКО. Открываем ПКО ведущего справочника (например, Номенклатура). На вкладке общих настроек проверяем, чтобы флаг «Не выгружать объекты свойств источника по ссылкам» был выключен (снят). Если этот флаг взведен, платформа передаст только строковый идентификатор ссылки без данных самого объекта.
  3. Проверяем привязку ПКО в правилах конвертации свойств (ПКС). В основном ПКО в строке реквизита (например, Производитель) должно быть явно указано соответствующее правило конвертации (ПКО_Организации).
  4. Настраиваем поля поиска в зависимом ПКО. В ПКО подчиненного справочника обязательно должны быть отмечены флаги «Поля поиска» (например, по ИНН, Код или Наименование). Если поля поиска не заданы, объект в приемнике не сможет сопоставиться и создаться. Также убедимся, что снят флаг «Не создавать новый объект в приемнике, если он не найден».

Способ 2. Принудительная программная выгрузка через метод ВыгрузитьПоПравилу

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

Разберем пример кода в обработчике ПослеВыгрузки основного ПКО (например, Номенклатура):


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

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

Частые ошибки при выгрузке связанных данных

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

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