Простой трюк для быстрого объединения таблиц значений

FastCode 1518 12 22 67

Стандартный способ объединения двух таблиц значений заключается в организации цикла, в котором строки второй таблицы приписываются в конец копии первой. Для этого используется следующий простой код:

ОбъединениеТаблиц = Таблица1.Скопировать();
Для Каждого Строка Из Таблица2 Цикл ЗаполнитьЗначенияСвойств(ОбъединениеТаблиц.Добавить(), Строка) КонецЦикла

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

Предлагаемый трюк заключается в последовательном выполнении трех действий:

  1. Вторая (добавляемая) таблица копируется в таблицу-результат;
  2. В начало таблицы результата перед уже скопированной таблицей вставляется столько пустых строк, сколько строк в первой таблице. Таким образом «освобождается место» для первой таблицы;
  3. Затем первая таблица помещается на освобожденное место методом выгрузки-загрузки колонок. Фокус в том, что при загрузке колонки в таблицу значений, если загружаемая колонка короче целевой, то оставшиеся элементы целевой колонки не меняются.

Схематичное описание той же последовательности действий приведено на рисунке ниже
Схема.png

Реализация предложенного способа очень проста и выполняется следующим фрагментом программного кода:

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

Колонок в таблицах значений обычно всегда значительно меньше, чем строк. Поэтому такой способ содержит меньше отдельных действий и в результате выполняется платформой быстрее построчного копирования. Ускорение зависит от соотношения числа строк и столбцов и может достигать полутора раз.

Автор: ildarovich

0

См. также

Быстрое объединение двух таблиц значений

Быстрое удаление строк в таблице значений

Преобразование отчета на СКД в таблицу значений на табличном документе

Таблица значений с колонкой любого имени (без ограничений используемых символов)

Получение таблицы и массива, заполненных последовательностью чисел от 0 до N-1

Связывание таблиц значений по ФИФО

ТаблицаЗначенийВТаблицуХТМЛ

Транспонировать таблицу значений

Сохранение таблицы значений в XML

Модератору