Как выгрузить состав бригады из одного реквизита в список ФизЛиц в базе-приемнике средствами КД 2.0?

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

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

Метод 1: Программный вызов «ВыгрузитьПоПравилу»

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

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

Рассмотрим пример кода, который вы можете адаптировать под свою задачу:


// В обработчике ПослеВыгрузки документа-источника
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ФизЛицо ИЗ Справочник.Бригады.Состав ГДЕ Ссылка = &Бригада";
Запрос.УстановитьПараметр("Бригада", Источник.Бригада);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    ВходящиеДанные = Новый Структура;
    ВходящиеДанные.Вставить("ФизЛицо", Выборка.ФизЛицо);
    ВходящиеДанные.Вставить("Владелец", ОбъектКоллекции); // Ссылка на приемник
    
    ВыгрузитьПоПравилу(,, ВходящиеДанные,, "СправочникФизЛица");
КонецЦикла;

Метод 2: Работа с входящими данными и флагом «Получить из входящих данных»

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

Шаг 1: Настройка ПКС. В правилах конвертации свойств (ПКС) для табличной части документа в приемнике установите флаг Получить из входящих данных. Это скажет системе Конвертация данных, что данные не нужно искать по стандартному алгоритму ссылок, а нужно взять их из переданной вами структуры.

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

Проанализируем преимущества этого метода:

Важные рекомендации при реализации

При выполнении данной задачи рекомендуем обратить внимание на следующие аспекты, которые помогут избежать ошибок:

Оптимизация производительности: Если документов много, а состав бригад часто дублируется, не делайте запрос к базе-источнику внутри цикла выгрузки каждого документа. Используйте параметры конвертации или кэшируйте состав бригад в СписокЗначений или Соответствие в обработчике ПередВыгрузкойДанных всей конвертации.

Поиск объектов: Помните, что при «раскрытии» бригады важно не допустить дублирования физических лиц. Убедитесь, что в правилах для Справочник.ФизическиеЛица верно настроены поля поиска (например, Код, ИНН или СНИЛС). Если вы используете входящие данные, механизм поиска отработает по заданным вами правилам автоматически.

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

Следуя этим шагам, вы сможете корректно реализовать сложную логику «один-ко-многим» в Конвертации данных 2.0 и обеспечить точный перенос состава ваших бригад.

← На главную