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

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

При разработке обработок и документов в 1С часто возникает задача скопировать одну или несколько строк из одной таблицы значений в другую. Начинающие разработчики иногда сталкиваются с ситуацией, когда код добавления строки выполняется без ошибок, но данные в приемнике не появляются или не отображаются на форме. Рассмотрим подробнее причину этой проблемы и разберем правильные способы решения задачи.

Выясним причину проблемы

Основная причина, по которой функция ЗаполнитьЗначенияСвойств() не копирует данные — это отсутствие колонок у таблицы-приемника. Функция ЗаполнитьЗначенияСвойств() сопоставляет реквизиты источника и приемника по их именам. Если в целевой таблице значений нет соответствующих колонок, перенос данных не происходит.

Кроме того, следует учитывать порядок обновления элементов формы. Если вызвать метод СоздатьКолонки() для элемента формы до подготовки самой структуры данных, то элемент управления останется пустым или потеряет связь с таблицей значений.

Способ 1. Использование метода СкопироватьКолонки()

Разберем наиболее красивый и быстрый метод копирования структуры. Если целевая таблица значений пустая, создадим в ней точно такую же колонку и структуру типов, как и у исходной таблицы, при помощи метода СкопироватьКолонки().

Посмотрим на пример кода:


// Создаем структуру колонок целевой ТЗ на основе исходной
ТЗ2 = ТЗ1.СкопироватьКолонки();

// Добавляем новую строку и заполняем ее данными из текущей строки
ЗаполнитьЗначенияСвойств(ТЗ2.Добавить(), ЭлементыФормы.ТабПоле1.ТекущиеДанные);

// Связываем элемент формы с обновленным объектом и формируем колонки
ЭлементыФормы.ТабПоле2.Значение = ТЗ2;
ЭлементыФормы.ТабПоле2.СоздатьКолонки();

Способ 2. Скопировать всю таблицу и очистить строки

Альтернативный вариант — полностью скопировать исходную таблицу значений вместе с данными и колонками, а затем очистить строки. В результате мы получим пустую таблицу значений с идентичной структурой.

Проанализируем этот подход на примере:


// Копируем таблицу целиком и очищаем ее строки
ТЗ2 = ТЗ1.Скопировать();
ТЗ2.Очистить();

// Переносим выбранные данные
НоваяСтрока = ТЗ2.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементыФормы.ТабПоле1.ТекущиеДанные);

// Обновляем отображение на форме
ЭлементыФормы.ТабПоле2.Значение = ТЗ2;
ЭлементыФормы.ТабПоле2.СоздатьКолонки();

Способ 3. Перенос конкретных строк через Скопировать()

Платформа 1С позволяет передать массив конкретных строк в метод Скопировать(). В этом случае платформа автоматически создаст новую таблицу значений с нужной структурой и сразу заполнит её переданными строками.

Рассмотрим по шагам данный алгоритм:

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

МассивСтрок = Новый Массив;
МассивСтрок.Добавить(ЭлементыФормы.ТабПоле1.ТекущиеДанные);

// Создается новая ТЗ с нужной структурой и переданной строкой
ТЗ2 = ТЗ1.Скопировать(МассивСтрок);

// Обновляем визуальное отображение
ЭлементыФормы.ТабПоле2.Значение = ТЗ2;
ЭлементыФормы.ТабПоле2.СоздатьКолонки();

Важные особенности при работе с элементами формы

При работе с обычными формами важно помнить следующие правила:

  1. Методы Скопировать() и СкопироватьКолонки() всегда создают новый объект в памяти. По этой причине необходимо заново переназначать свойство Значение у элемента формы (ТабличноеПоле).
  2. Вызов метода СоздатьКолонки() следует выполнять после того, как структура таблицы значений сформирована и элемент формы перепривязан к актуальному объекту.
← На главную