Как объединить две таблицы значений в 1С и корректно вывести их в макет?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с ТаблицаЗначений является одной из самых частых задач при разработке на платформе 1С:Предприятие. Нередко возникают ситуации, когда требуется собрать данные из нескольких источников в одну структуру для формирования отчетности или печатной формы. Давайте разберем, как сделать это правильно, избегая частых ошибок с индексацией и смещением данных.

Способ 1: Горизонтальное объединение (добавление колонок)

Если вам нужно объединить две таблицы таким образом, чтобы колонки второй таблицы добавились к первой, важно правильно работать с индексами строк. Часто начинающие разработчики сталкиваются с тем, что значения подставляются «не с той строки» или происходит сдвиг. Рассмотрим универсальный подход с использованием метода ЗаполнитьЗначенияСвойств.

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


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

// Теперь перенесем значения из второй таблицы
// Если нужно, чтобы строки совпадали по индексу:
Для НС = 0 По ТаблицаЗначений2.Количество() - 1 Цикл
    Если НС < ТаблицаЗначений1.Количество() Тогда
        СтрокаРезультат = ТаблицаЗначений1[НС];
    Иначе
        СтрокаРезультат = ТаблицаЗначений1.Добавить();
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(СтрокаРезультат, ТаблицаЗначений2[НС]);
КонецЦикла;

Способ 2: Работа с макетом и устранение ошибок вывода

Часто возникает проблема, когда данные выводятся в макет, но из-за условий Если/Иначе или неправильного формирования строк появляются пустые области или сдвиги. Главное правило профессиональной разработки в 1С: «Сначала подготовьте данные, потом выводите их».

Не пытайтесь в одном цикле вывода в макет заниматься сложной логикой объединения. Это приводит к ошибкам. Давайте проанализируем, как правильно вывести объединенные данные:

  1. Создайте результирующую ТаблицаЗначений (как показано в первом способе).
  2. Заполните эту таблицу всеми необходимыми полями: ВремяНачала, ВремяОкончания, Температура и так далее.
  3. После того как таблица готова, используйте один простой цикл для обхода и вывода в печатную форму.

Пример корректного цикла вывода в макет:


Для Каждого Строка Из ОбъединеннаяТаблица Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Заполнить(Строка); // Метод Заполнить позволяет сократить код
    
    // Дополнительное форматирование при необходимости
    ОбластьСтрока.Параметры.Дата = Формат(Строка.ВремяНачала, "ДФ=dd.MM.yyyy");
    
    ПечатнаяФорма.Вывести(ОбластьСтрока);
КонецЦикла;

Важные рекомендации для оптимизации

Чтобы ваша разработка была быстрой и надежной, рекомендуем придерживаться следующих правил:

Следуя этим простым шагам, вы сможете легко объединять любые наборы данных и формировать отчеты любой сложности, сохраняя код чистым и понятным для поддержки.

← На главную