При разработке сложных отчетов в 1С часто возникает задача объединения нескольких табличных форм в один документ. Основная сложность заключается в том, что ТабличныйДокумент привязывается к единой сетке колонок. Если вы просто выводите области с разной структурой колонок, они неизбежно будут подстраиваться под самую первую область, что приводит к искажениям верстки. Давайте разберем, как правильно обойти это ограничение и добиться корректного отображения данных.
Важно понимать, что ТабличныйДокумент в платформе 1С — это объект с жесткой структурой столбцов. Когда вы используете метод Вывести() для добавления новой области, платформа пытается сохранить сетку, установленную изначально. Именно поэтому при добавлении таблицы с другой шириной колонок текущий документ «ломается», пытаясь растянуть или сжать ячейки под уже существующую сетку.
Самым профессиональным и современным способом вывода нескольких независимых макетов является работа с Пакет документов. Вместо попытки «склеить» все в один объект, мы работаем с ними как с независимыми сущностями, которые собираются вместе только на этапе вывода на печать или при отображении в форме.
Рассмотрим по шагам, как это реализовать:
ТабДокОсновной.ТабДокДополнительный1, ТабДокДополнительный2 и так далее.Вывести() или добавляем дополнительные документы в коллекцию вложенных объектов, чтобы система воспринимала их как части единого пакета.При таком подходе каждая часть отчета сохраняет свои собственные настройки ширины колонок, так как каждая страница (или фрагмент) имеет свою независимую сетку.
Если задача требует специфической настройки отображения, мы можем использовать методы работы с форматом. Хотя это не отменяет глобальную сетку документа, создание индивидуальных форматов для строк помогает избежать конфликтов при выводе областей. Рассмотрим пример программной работы:
// Создаем экземпляр дополнительного табличного документа
ТабДокДополнительный = Новый ТабличныйДокумент;
// Применяем специфический формат для корректной обработки строк
ТабДокДополнительный.Область().СоздатьФорматСтрок();
// Выводим области из макета
Макет = ПолучитьМакет("Макет2");
Область = Макет.ПолучитьОбласть("Строка");
ТабДокДополнительный.Вывести(Область);
// Выводим дополнительный документ в основной
ТабДокОсновной.Вывести(ТабДокДополнительный);
Обратите внимание, что использование СоздатьФорматСтрок() помогает системе 1С пересчитать параметры отображения конкретного блока, что снижает вероятность «съезжания» колонок при интеграции одного документа в другой.
Иногда разработчики сталкиваются с необходимостью вывода областей, которые структурно несовместимы. В этом случае мы можем применить подход с выводом целых табличных документов. Вместо вывода областей из разных макетов в один объект, мы формируем несколько полноценных документов, а затем объединяем их.
Таб1 = Новый ТабличныйДокумент;
Таб1.Вывести(Область1);
// Добавляем разделитель для визуальной и логической изоляции
Таб1.ВывестиГоризонтальныйРазделительСтраниц();
Таб2 = Новый ТабличныйДокумент;
Таб2.Вывести(Область2);
Таб1.Вывести(Таб2);
Этот метод полезен, когда мы хотим, чтобы каждая часть документа была на новой странице или имела совершенно независимые параметры печати. При этом важно проверять, чтобы у каждого документа был задан свой Область(), что позволит платформе корректно обработать разметку.
Для того чтобы отчет выглядел профессионально и не терял разметку, мы рекомендуем придерживаться следующих правил:
СоздатьФорматСтрок(), если вы наблюдаете проблемы с высотой или отступами в строках после вывода областей.Применяя эти подходы, вы сможете создавать гибкие и сложные печатные формы, которые не будут конфликтовать между собой и обеспечат корректное отображение данных любой структуры.