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