У объекта встроенного языка ТаблицаЗначений не предусмотрено специальных методов загрузки данных из других таблиц, либо объединения данных нескольких таблиц.
Поэтому задача добавления одной таблицы значений в конец другой является чисто алгоритмической.
Допустим, у нас есть две таблицы вида:
№ | Товар | Количество |
---|---|---|
1 | Стул деревянный | 4 |
2 | Стол деревянный | 1 |
№ | Товар | Количество |
---|---|---|
1 | Шкаф для одежды | 1 |
2 | Тумба прикроватная | 2 |
и стоит задача их объединить. Самый элементарный способ реализации, который напрашивается: построчно скопировать строки второй таблицы в конец первой:
Для каждого СтрокаИсточник Из тзИсточник Цикл НоваяСтрока = тзПолучатель.Добавить(); //номер строки соответствует количеству строк НоваяСтрока.НомерСтроки = тзПолучатель.Количество(); //скопируем реквизиты строки НоваяСтрока.Товар = СтрокаИсточник.Товар; НоваяСтрока.Количествоо = СтрокаИсточник.Количество; КонецЦикла;
В результате мы получим таблицу вида:
№ | Товар | Количество |
---|---|---|
1 | Стул деревянный | 4 |
2 | Стол деревянный | 1 |
3 | Шкаф для одежды | 1 |
4 | Тумба прикроватная | 2 |
Но у приведенного выше алгоритма есть один недостаток: он привязан к именам колонок таблиц значений. Чтобы сделать этот код по настоящему универсальным, следует использовать функцию встроенного языка ЗаполнитьЗначенияСвойств(), тогда не понадобится прописывать имена колонок в коде каждый раз при объединении таблиц:
Для каждого СтрокаИсточник Из тзИсточник Цикл НоваяСтрока = тзПолучатель.Добавить(); //скопируем реквизиты строки ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаИсточник); //номер строки соответствует количеству строк НоваяСтрока.НомерСтроки = тзПолучатель.Количество(); КонецЦикла;
Почему я перенес инициализацию номера строки ниже, думаю, Вы догадаетесь сами. Если нет, рекомендую прорешать данную задачу на практике самостоятельно.
Читайте также:
Поделиться страницей в соц.сетях