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