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