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

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

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

Процедура или функция с указанным именем не определена (СоздатьОбъект)

Разберем причины возникновения этой ошибки и подробно рассмотрим правильные способы конвертации данных регистра сведений в табличную часть на платформе «1С:Предприятие 8».

Причина возникновения ошибки «СоздатьОбъект не определена»

Конструкция СоздатьОбъект("ТаблицаЗначений") относится исключительно к синтаксису платформы «1С:Предприятие 7.7». В конфигурациях и обработках обмена для платформы 8.х данный метод отсутствует, что и приводит к ошибке при выполнении правил выгрузки.

Если выгрузка выполняется из базы на платформе 8.х, создание и заполнение таблицы значений должно осуществляться штатными средствами объектной модели «1С:Предприятие 8» через конструктор Новый ТаблицаЗначений.

Способ 1. Заполнение коллекции через запрос в обработчике ПКГС (Рекомендуемый)

Наиболее производительный и правильный способ выгрузки данных регистра в табличную часть — использование запроса в обработчике «Перед обработкой» Правила конвертации группы свойств (ПКГС). Результат запроса сразу передается в предопределенный параметр КоллекцияОбъектов.

Разберем по шагам порядок настройки:

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

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Значения.Свойство КАК Свойство,
    |	Значения.Значение КАК Значение
    |ИЗ
    |	РегистрСведений.ЗначенияСвойствОбъектов КАК Значения
    |ГДЕ
    |	Значения.Объект = &Объект
    |	И НЕ Значения.Свойство.ПометкаУдаления";

Запрос.УстановитьПараметр("Объект", Источник);
КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();

Важно: Имена полей в запросе (псевдонимы) должны строго совпадать с именами свойств источника, указанными в подчиненных ПКС.

Способ 2. Ручное формирование таблицы значений в ПКГС

Если по каким-либо причинам требуется сформировать таблицу вручную, необходимо использовать синтаксис платформы 8.х. Посмотрим на пример заполнения КоллекцияОбъектов:


КоллекцияОбъектов = Новый ТаблицаЗначений;
КоллекцияОбъектов.Колонки.Добавить("Свойство");
КоллекцияОбъектов.Колонки.Добавить("Значение");

НоваяСтрока = КоллекцияОбъектов.Добавить();
НоваяСтрока.Свойство = Источник.Свойство;
НоваяСтрока.Значение = Источник.Значение;

Способ 3. Передача данных через структуру ВходящиеДанные

В некоторых сценариях данные регистра удобнее собрать заранее на уровне ПКО (например, в обработчике «Перед выгрузкой» или «При выгрузке») и передать их в ПКГС.

  1. В обработчике ПКО «Перед выгрузкой» выбираем данные регистра и помещаем таблицу в структуру ВходящиеДанные:

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Значения.Свойство КАК Свойство,
    |	Значения.Значение КАК Значение
    |ИЗ
    |	РегистрСведений.ЗначенияСвойствОбъектов КАК Значения
    |ГДЕ
    |	Значения.Объект = &Объект";

Запрос.УстановитьПараметр("Объект", Источник);

ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("ДополнительныеРеквизиты", Запрос.Выполнить().Выгрузить());
  1. В настройках ПКГС включаем флаг «Получить из входящих данных». В этом случае КД 2.1 автоматически возьмет готовую таблицу значений из структуры ВходящиеДанные по имени группы свойств.

Особенности переноса дополнительных реквизитов (БСП)

Проанализируем специфику типовой табличной части ДополнительныеРеквизиты библиотек стандартных подсистем (БСП):

  1. Строковые и текстовые значения: Если дополнительный реквизит имеет тип «Строка», в конфигурациях на БСП значение нередко записывается в отдельный реквизит табличной части — ТекстоваяСтрока. В таком случае в ПКГС рекомендуется добавить колонку ТекстоваяСтрока и настроить соответствующее ПКС.
  2. Помеченные на удаление свойства: Чтобы не переносить устаревшие и удаленные реквизиты, обязательно добавляйте в запрос условие отсечения помеченных на удаление элементов плана видов характеристик (ГДЕ НЕ Значения.Свойство.ПометкаУдаления).
← На главную