Как вывести разные макеты с разной шириной колонок в один табличный документ 1С?

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

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

Понимание проблемы единой сетки

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

Решение 1: Формирование пакета табличных документов

Самым профессиональным и современным способом вывода нескольких независимых макетов является работа с Пакет документов. Вместо попытки «склеить» все в один объект, мы работаем с ними как с независимыми сущностями, которые собираются вместе только на этапе вывода на печать или при отображении в форме.

Рассмотрим по шагам, как это реализовать:

  1. Создаем основной табличный документ ТабДокОсновной.
  2. Формируем дополнительные табличные документы ТабДокДополнительный1, ТабДокДополнительный2 и так далее.
  3. В каждом дополнительном документе настраиваем собственный макет с уникальной шириной колонок.
  4. Используем метод Вывести() или добавляем дополнительные документы в коллекцию вложенных объектов, чтобы система воспринимала их как части единого пакета.

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

Решение 2: Программная работа с форматом строк

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


// Создаем экземпляр дополнительного табличного документа
ТабДокДополнительный = Новый ТабличныйДокумент;
// Применяем специфический формат для корректной обработки строк
ТабДокДополнительный.Область().СоздатьФорматСтрок();

// Выводим области из макета
Макет = ПолучитьМакет("Макет2");
Область = Макет.ПолучитьОбласть("Строка");
ТабДокДополнительный.Вывести(Область);

// Выводим дополнительный документ в основной
ТабДокОсновной.Вывести(ТабДокДополнительный);

Обратите внимание, что использование СоздатьФорматСтрок() помогает системе 1С пересчитать параметры отображения конкретного блока, что снижает вероятность «съезжания» колонок при интеграции одного документа в другой.

Решение 3: Использование метода присоединения

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


Таб1 = Новый ТабличныйДокумент;
Таб1.Вывести(Область1);
// Добавляем разделитель для визуальной и логической изоляции
Таб1.ВывестиГоризонтальныйРазделительСтраниц(); 

Таб2 = Новый ТабличныйДокумент;
Таб2.Вывести(Область2);
Таб1.Вывести(Таб2);

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

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

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

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

← На главную