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