Как правильно присоединить область справа в табличном документе 1С?

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

При работе с печатными формами в 1С часто возникает задача вывода данных в несколько колонок или создания сложных отчетов, где левая и правая части должны формироваться независимо. Многие разработчики сталкиваются с тем, что метод Присоединить() работает не так, как ожидается: данные выводятся не в нужную колонку или нарушается структура документа. Давайте разберем, как реализовать это правильно.

Почему возникают проблемы при прямом выводе

Основная сложность заключается в том, что ТабличныйДокумент — это последовательный поток данных. Метод Вывести() добавляет область в конец документа, а Присоединить() — к последней выведенной области справа. Если логика вывода правой и левой части имеет разное количество строк, визуально таблица «разваливается», так как Присоединить() привязывается к вертикальному уровню последней секции. Попытки менять ширину колонок программно в уже полученной области часто приводят к некорректному отображению, так как платформа некорректно обрабатывает такие изменения при последующем присоединении.

Решение через промежуточные табличные документы

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

Шаг 1: Формирование независимых блоков

Создадим два отдельных табличных документа для левой и правой частей. Это позволит нам независимо управлять циклом вывода строк для каждой части, не опасаясь, что они «разъедутся».

Шаг 2: Реализация на примере кода

Посмотрим, как это выглядит в программном коде:


ТабДок1 = Новый ТабличныйДокумент;
ТабДок2 = Новый ТабличныйДокумент;

// Собираем данные в первый документ (левая часть)
// ... логика вывода строк в ТабДок1 ...

// Собираем данные во второй документ (правая часть)
// ... логика вывода строк в ТабДок2 ...

// Создаем итоговый документ
ТабДок3 = Новый ТабличныйДокумент;
ТабДок3.Присоединить(ТабДок1);
ТабДок3.Присоединить(ТабДок2);

Важное техническое замечание: При использовании метода Присоединить() для двух табличных документов необходимо следить за высотой. Первый присоединяемый документ должен быть по высоте меньше или равен второму, иначе часть данных второго документа может не отобразиться корректно. Если блоки имеют разную высоту, рекомендуется принудительно дополнить более короткий документ пустыми строками до выравнивания.

Работа с динамическими структурами: объединение ячеек

Если ваша задача требует создания сложной «шапки», где одна широкая колонка должна объединять несколько нижестоящих, не пытайтесь менять ширину колонок через ШиринаКолонки. Это приведет к ошибкам рендеринга.

Вместо этого используйте метод Объединить(). Этот метод позволяет корректно сгруппировать ячейки, сохраняя физическую разметку макета. Это наиболее правильный способ для создания иерархических заголовков, где количество колонок заранее неизвестно.

Выравнивание по высоте

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


// Допустим, ЛеваяКолонка и ПраваяКолонка — это промежуточные документы
Пока ПраваяКолонка.ВысотаТаблицы > ЛеваяКолонка.ВысотаТаблицы Цикл
    ЛеваяКолонка.Вывести(ОбластьРазрыв);
КонецЦикла;

Пока ЛеваяКолонка.ВысотаТаблицы > ПраваяКолонка.ВысотаТаблицы Цикл
    ПраваяКолонка.Вывести(ОбластьРазрыв);
КонецЦикла;

Итоговые рекомендации

  1. Всегда используйте ТабличныйДокумент как временный контейнер для независимых частей макета.
  2. Для сложных отчетов предпочтительнее объединять готовые документы в один итоговый.
  3. Не используйте программное изменение ширины колонок; вместо этого применяйте Объединить().
  4. Следите за высотой объектов при присоединении: визуальное выравнивание — залог корректного отображения формы.

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

← На главную