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