Как передать таблицу значений из ПКО в табличную часть ПКС при конвертации данных?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Понимание архитектуры передачи данных

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

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

  1. В обработчике ПКО мы формируем ТаблицаЗначений.
  2. Передаем эту таблицу в структуру ВходящиеДанные.
  3. В настройках ПКС (для нашей табличной части) указываем программе «получать данные из входящих данных».

Шаг 1: Формирование таблицы значений в ПКО

В правиле конвертации объекта необходимо создать ТаблицаЗначений и заполнить ее данными. Важно помнить, что названия колонок в этой таблице должны в точности соответствовать названиям реквизитов в табличной части объекта-приемника.

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


КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов.НоваяКолонка("Номенклатура");

Справочник = СоздатьОбъект("Справочник.СерийныеНомера");
Справочник.ИспользоватьВладельца(Источник);
Справочник.ВыбратьЭлементы();

Пока Справочник.ПолучитьЭлемент() = 1 Цикл
    КоллекцияОбъектов.НоваяСтрока();
    КоллекцияОбъектов.Номенклатура = Справочник.ТекущийЭлемент();
КонецЦикла;

После того как таблица заполнена, нам нужно сделать её доступной для ПКС. Для этого создадим объект СписокЗначений (так как в 1С 7.7 структуры нет) и добавим туда нашу таблицу с ключом, который совпадает с именем табличной части в приемнике.


ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("ИмяТвоейТабличнойЧасти", КоллекцияОбъектов);

Шаг 2: Настройка правил конвертации свойств (ПКС)

Теперь, когда данные подготовлены, необходимо правильно настроить ПКС в интерфейсе Конвертации данных:

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

Альтернативный способ: работа с переменной КоллекцияОбъектов

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

В обработчике Перед обработкой для ПКС (в самой табличной части) можно написать код:


КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов.НоваяКолонка("Номенклатура");
// Здесь заполняем таблицу данными через цикл по Источнику
// ... код заполнения ...

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

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

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

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

← На главную