1С. Копирование таблицы значений (расположенной в объекте на форме)

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


Такие таблицы значений (расположенные на форме как реквизиты формы/объекта) по факту имеют тип - ДанныеФормыКоллекция.
Для них не работает/отсутствует типовой метод таблиц значений - Скопировать().
В случае работы с ДанныеФормыКоллекция нужно использовать методы Выгрузить/Загрузить.

Пример: на форме две ТЗ со схожим набором колонок:



Если нужно полностью скопировать строки из одной ТЗ (Пользователи1ССлужебный) в другую (Пользователи1С), то можно указать следующий код:

//&НаСервере
Объект.Пользователи1С.Очистить();
Объект.Пользователи1С.Загрузить(Объект.Пользователи1ССлужебный.Выгрузить());

Такой код работает только на сервере.
Будут скопированы только те колонки, которые в обеих таблицах совпадают.

При выгрузке можно задать условия, что выгружать.

1) Выгрузить только определенные колонки:
Выгрузить(, "Колонка1, Колонка2, Колонка3")

2) Выгрузить только определенные строки:
Выгрузить(МассивВыгружаемыхСтрок, )

3) Выгрузить только определенные колонки из определенных строк:
Выгрузить(МассивВыгружаемыхСтрок, "Колонка1, Колонка2, Колонка3")

4) Выгрузить только строки по определенному отбору/фильтру:
Выгрузить(Новый Структура("Колонка1", ЗначениеОтбораКолонки), ) 

5) Выгрузить только определенные колонки из строк по определенному отбору/фильтру:

Выгрузить(Новый Структура("Колонка1", ЗначениеОтбораКолонки), "Колонка1, Колонка2, Колонка3")

Примечание: Если указан отбор, то только строки из отбора будут выгружены. Если отбор не указан, то будут выгружены все строки коллекции. Если указаны колонки, то только эти колонки будут выгружены. Иначе, будут выгружены все колонки коллекции.

Если нужно скопировать только одну строку, то можно использовать ЗаполнитьЗначенияСвойств (работает как на сервере, так и на клиенте):

Для Каждого СтрокаТЗ Из Объект.Пользователи1ССлужебный Цикл
    // какой-нибудь код, например
    СтрокаТЗ.СостояниеВ1С = "Обработано"; 
    // копирование строки в другую ТЗ
    ЗаполнитьЗначенияСвойств(Объект.Пользователи1С.Добавить(), СтрокаТЗ);   
КонецЦикла;



(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет:

Отправить комментарий