При переносе данных между конфигурациями 1С часто возникает ситуация, когда структура метаданных в источнике и приемнике различается. Одной из типичных задач является «раскрытие» состава бригады: в источнике это всего лишь один реквизит Бригада, а в приемнике требуется отразить каждого участника этой бригады как отдельный объект (например, в табличной части или как набор связанных записей). Давайте разберем, как реализовать такую задачу средствами Конвертации данных 2.0.
Это самый гибкий и универсальный способ, позволяющий полностью контролировать процесс переноса данных. Суть метода заключается в перехвате процесса выгрузки документа и принудительном создании новых объектов для каждого сотрудника бригады.
ПослеВыгрузки. Именно здесь мы будем «довыгружать» состав бригады.Бригады).ВыгрузитьПоПравилу в цикле для каждого участника.Рассмотрим пример кода, который вы можете адаптировать под свою задачу:
// В обработчике ПослеВыгрузки документа-источника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ФизЛицо ИЗ Справочник.Бригады.Состав ГДЕ Ссылка = &Бригада";
Запрос.УстановитьПараметр("Бригада", Источник.Бригада);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("ФизЛицо", Выборка.ФизЛицо);
ВходящиеДанные.Вставить("Владелец", ОбъектКоллекции); // Ссылка на приемник
ВыгрузитьПоПравилу(,, ВходящиеДанные,, "СправочникФизЛица");
КонецЦикла;
Если вы хотите автоматизировать заполнение табличной части в документе-приемнике, воспользуйтесь механизмом входящих данных. Этот подход позволяет передать уже готовую структуру данных непосредственно в правило выгрузки.
Шаг 1: Настройка ПКС. В правилах конвертации свойств (ПКС) для табличной части документа в приемнике установите флаг Получить из входящих данных. Это скажет системе Конвертация данных, что данные не нужно искать по стандартному алгоритму ссылок, а нужно взять их из переданной вами структуры.
Шаг 2: Формирование данных. В обработчике ПередОбработкой или ПослеВыгрузки источника сформируйте переменную КоллекцияОбъектов. Это может быть ТаблицаЗначений или массив структур, где каждая строка содержит данные для создания новой записи в приемнике.
Проанализируем преимущества этого метода:
КД 2.0 сама корректно обрабатывает структуру, если вы правильно определили поля во входящих данных.При выполнении данной задачи рекомендуем обратить внимание на следующие аспекты, которые помогут избежать ошибок:
Оптимизация производительности: Если документов много, а состав бригад часто дублируется, не делайте запрос к базе-источнику внутри цикла выгрузки каждого документа. Используйте параметры конвертации или кэшируйте состав бригад в СписокЗначений или Соответствие в обработчике ПередВыгрузкойДанных всей конвертации.
Поиск объектов: Помните, что при «раскрытии» бригады важно не допустить дублирования физических лиц. Убедитесь, что в правилах для Справочник.ФизическиеЛица верно настроены поля поиска (например, Код, ИНН или СНИЛС). Если вы используете входящие данные, механизм поиска отработает по заданным вами правилам автоматически.
Контекст выполнения: Всегда помните, что вызов ВыгрузитьПоПравилу внутри обработчика документа выполняется в контексте выгружаемого объекта. Если вы передаете во входящих данных ссылку на документ-приемник, обязательно проверяйте, что этот объект уже создан или известен системе, чтобы избежать ошибок нарушения ссылочной целостности.
Следуя этим шагам, вы сможете корректно реализовать сложную логику «один-ко-многим» в Конвертации данных 2.0 и обеспечить точный перенос состава ваших бригад.