Перейти к содержимому

Как соединить две таблицы значений в одну 1с

  • автор:

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

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

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

1) Вторая (добавляемая) таблица копируется в таблицу-результат;

2) В начало таблицы результата перед уже скопированной таблицей вставляется столько пустых строк, сколько строк в первой таблице. Таким образом «освобождается место» для первой таблицы;

3) Затем первая таблица помещается на освобожденное место методом выгрузки-загрузки колонок. Фокус в том, что при загрузке колонки в таблицу значений, если загружаемая колонка короче целевой, то оставшиеся элементы целевой колонки не меняются.

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

Схема

Реализация предложенного способа очень проста и выполняется следующим фрагментом программного кода:
ОбъединениеТаблиц = Таблица2 . Скопировать ();
Для ё = 1 По Таблица1 . Количество () Цикл ОбъединениеТаблиц . Вставить ( 0 ) КонецЦикла ;
Для ё = 0 По Таблица1 . Колонки . Количество () — 1 Цикл
ОбъединениеТаблиц . ЗагрузитьКолонку ( Таблица1 . ВыгрузитьКолонку ( ё ), ё )
КонецЦикла ;
Колонок в таблицах значений обычно всегда значительно меньше, чем строк. Поэтому такой способ содержит меньше отдельных действий и в результате выполняется платформой быстрее построчного копирования. Ускорение зависит от соотношения числа строк и столбцов и может достигать полутора раз.

Как объединить таблицы значений?

У объекта встроенного языка ТаблицаЗначений не предусмотрено специальных методов загрузки данных из других таблиц, либо объединения данных нескольких таблиц.

Поэтому задача добавления одной таблицы значений в конец другой является чисто алгоритмической.

Допустим, у нас есть две таблицы вида:

Таблица 1

Товар Количество
1 Стул деревянный 4
2 Стол деревянный 1
Таблица 2

Товар Количество
1 Шкаф для одежды 1
2 Тумба прикроватная 2

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

В результате мы получим таблицу вида:

Результат

Товар Количество
1 Стул деревянный 4
2 Стол деревянный 1
3 Шкаф для одежды 1
4 Тумба прикроватная 2

Но у приведенного выше алгоритма есть один недостаток: он привязан к именам колонок таблиц значений. Чтобы сделать этот код по настоящему универсальным, следует использовать функцию встроенного языка ЗаполнитьЗначенияСвойств(), тогда не понадобится прописывать имена колонок в коде каждый раз при объединении таблиц:

Почему я перенес инициализацию номера строки ниже, думаю, Вы догадаетесь сами. Если нет, рекомендую прорешать данную задачу на практике самостоятельно.

Как объединить 2 таблицы значений?

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

Как соединить две таблицы значений в одну 1с

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

  • Как объединить две таблицы в одну
  • Как объединить больше двух таблиц в одну
  • Как оставить дубликаты в результате объединения таблиц
  • Как упорядочить объединение таблиц
  • Как объединить таблицы с разным количеством полей
  • Скачать и выполнить эти примеры на компьютере

Объединение в запросах в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *