К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как вывести область в конце страницы в 1С

Как вывести область в конце страницы в 1С: нижний колонтитул, область подвала, методы Вывести и Присоединить, проверка ПроверитьВывод, примеры кода и типичные ошибки.

Задача вывести область в конце страницы в 1С возникает при формировании печатных форм: подписи, итоги, штампы или служебные отметки должны располагаться строго внизу листа, а не сразу после последней строки данных. В табличном документе 1С нет свойства «прижать область к низу страницы» напрямую, поэтому разработчики используют несколько обходных приёмов: нижний колонтитул, вывод пустых областей-заполнителей, расчёт высоты через ПроверитьВывод и повторяющиеся области.

Выбор способа зависит от того, что именно нужно разместить внизу: статичный текст на каждой странице, подписи только на последней странице или область, которая должна «прилипнуть» к нижнему краю после таблицы переменной длины. Ниже разобраны рабочие варианты с кодом, их ограничения и способы проверки результата.

Способы разместить область внизу страницы

Существует четыре практических подхода. Первый — нижний колонтитул табличного документа: текст выводится автоматически внизу каждой страницы при печати. Второй — заполнение остатка страницы пустой областью, после чего подвал оказывается прижат к низу. Третий — вывод подвала с предварительной проверкой ПроверитьВывод, чтобы область не разрывалась. Четвёртый — повторяющиеся области (ОбластьПовторятьПриПечати), хотя они чаще применяются для шапки.

Колонтитул подходит для номеров страниц, дат, служебных пометок — но не для многострочных подписей с данными из макета. Заполнение пустой областью — самый гибкий способ для подписей и штампов на последней странице, но требует аккуратного расчёта высоты. Проверка вывода нужна в любом случае, чтобы подвал не «уехал» на следующий лист частично.

Сравнение вариантов

Нижний колонтитул

Подходит для однотипного текста на каждой странице; не поддерживает области макета и сложное форматирование

Пустая область-заполнитель

Прижимает подвал к низу последней страницы; требует расчёта высоты и может дать лишний разрыв при неверном подборе

ПроверитьВывод с переносом

Гарантирует, что подвал выводится целиком; сам по себе не прижимает область к низу

Повторяющаяся область

Повторяет строки на каждой странице; предназначена в первую очередь для шапки таблицы

Нижний колонтитул: простой текст внизу каждой страницы

Табличный документ имеет свойства ВерхнийКолонтитул и НижнийКолонтитул типа Колонтитул. Через них задаётся текст, который выводится при печати внизу каждой страницы, независимо от содержимого документа. Доступны свойства ТекстСлева, ТекстВЦентре, ТекстСправа, а также НачальнаяСтраница и Выводить.

В тексте колонтитула поддерживаются управляющие символы: [&НомерСтраницы] для номера страницы, [&СтраницВсего] для общего количества, [&Дата] и [&Время]. Это удобно для нумерации и служебных отметок.

ТабДок.НижнийКолонтитул.Выводить = Истина;

ТабДок.НижнийКолонтитул.ТекстСлева = "Документ сформирован: [&Дата]";

ТабДок.НижнийКолонтитул.ТекстСправа = "Стр. [&НомерСтраницы] из [&СтраницВсего]";

ТабДок.НижнийКолонтитул.НачальнаяСтраница = 1;

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

Прижать подвал к низу последней страницы пустой областью

Классический приём для подписей в конце документа: после вывода всех строк данных вычислить, сколько места осталось до конца текущей страницы, вывести пустую область нужной высоты, а затем — область подвала. В результате подвал визуально оказывается прижат к нижнему краю листа.

Точный расчёт высоты «в строках» затруднён, потому что высота строки в макете может отличаться. На практике применяют итеративный подход: выводят пустую область, проверяют ПроверитьВывод, поместится ли подвал, и при необходимости корректируют. Более надёжный вариант — заранее знать высоту страницы в строках макета и высоту подвала, а затем вывести нужное количество пустых строк.

Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("Макет");

ОбластьПустая = Макет.ПолучитьОбласть("ПустаяСтрока");

ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

// Высота страницы в строках макета подбирается опытным путём

СтрокНаСтранице = 40;

ВыведеноСтрок = ТабДок.ВысотаТаблицы;

Осталось = СтрокНаСтранице - (ВыведеноСтрок % СтрокНаСтранице) - ОбластьПодвал.Область().Верх + 1;

МассивОбластей = Новый Массив;

МассивОбластей.Добавить(ОбластьПустая);

МассивОбластей.Добавить(ОбластьПодвал);

Пока Не ТабДок.ПроверитьВывод(МассивОбластей) Цикл

ТабДок.Вывести(ОбластьПустая);

КонецЦикла;

ТабДок.Вывести(ОбластьПодвал);

Идея цикла проста: пока пустая строка и подвал вместе помещаются на текущей странице — добавляем пустые строки. Как только они перестали помещаться, подвал выводится сразу после последней пустой строки, то есть внизу страницы. Это самый надёжный способ, не зависящий от ручного подсчёта высот.

1c
Пока Не ТабДок.ПроверитьВывод(МассивОбластей) Цикл
    ТабДок.Вывести(ОбластьПустая);
КонецЦикла;
ТабДок.Вывести(ОбластьПодвал);

Проверка вывода и защита подвала от разрыва

Метод ПроверитьВывод принимает массив областей и возвращает Истина, если все они помещаются на текущей странице целиком. Используйте его перед выводом подвала, чтобы подписи не оказались разорваны: часть на одной странице, часть на другой.

Если подвал не помещается, выведите разрыв страницы методом ВывестиГоризонтальныйРазделительСтраниц, затем подвал на новой странице, при необходимости — с тем же приёмом пустых строк для прижатия к низу.

МассивОбластей = Новый Массив;

МассивОбластей.Добавить(ОбластьПодвал);

Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ТабДок.Вывести(ОбластьПодвал);

Дополнительно задайте для области подвала в макете свойство «Не разрывать» (режим разрыва страницы) или объедините строки подвала, чтобы платформа не делила область при печати. Проверяйте результат именно в предварительном просмотре печати, а не только на экране — разбиение на страницы видно только там.

Порядок действий для подвала внизу последней страницы
  1. 1
    Создайте в макете область подвала и пустую область-заполнитель с одной строкой
  2. 2
    Выведите все строки данных документа
  3. 3
    Соберите массив: пустая область + подвал
  4. 4
    В цикле выводите пустую область, пока ПроверитьВывод возвращает Истина
  5. 5
    Выведите подвал после цикла
  6. 6
    Откройте предварительный просмотр печати и проверьте положение подвала на последней странице

Повторяющиеся области и сквозные строки

Если задача — повторять определённую область на каждой странице (например, строку «Итого на странице» или подпись), используйте свойство табличного документа ПовторятьПриПечатиСтроки (в макете — настройка сквозных строк через пункт меню таблицы). Область будет дублироваться на каждой странице при печати.

Однако сквозные строки выводятся вверху страницы — это стандартное поведение, предназначенное для шапок таблиц. Для повторения области именно внизу каждой страницы штатного механизма сквозных строк нет; единственный вариант «на каждой странице снизу» — нижний колонтитул с его ограничениями по форматированию.

Если требуется сложный повторяющийся подвал на каждой странице, придётся формировать документ постранично вручную: контролировать количество строк на странице, выводить разделитель страниц и после него — нужную область. Это трудоёмко, но даёт полный контроль над вёрсткой.

Типичные ошибки
01
Проверка результата только на экране — колонтитулы и разрывы страниц видны только в предпросмотре печати
02
Вывод подвала без ПроверитьВывод — подписи разрываются между страницами
03
Ручной подсчёт высоты страницы в строках без учёта реальной высоты строк макета — подвал «плавает»
04
Попытка вывести область макета через колонтитул — колонтитул поддерживает только текст
05
Игнорирование ориентации и полей страницы — при смене альбомной на книжную расчёт высоты ломается

Проверка результата и отладка

Главный инструмент проверки — предварительный просмотр печати (Файл → Печать → Предварительный просмотр в клиенте или вызов ТабДок.Показать() с последующей печатью). Именно там видно, где проходят разрывы страниц, выводится ли колонтитул и прижат ли подвал к низу.

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

Проверяйте форму при разном количестве строк данных: одна строка, ровно полная страница, страница плюс одна строка. Граничные случаи чаще всего выявляют ошибки в логике цикла и в расчёте высоты подвала.

Контрольные точки

Как проверить результат

Положение подвала в предпросмотре
Норма

Подвал полностью на последней странице, прижат к нижнему краю

Тревожный признак

Подвал разорван или ушёл на отдельную страницу с большим пустым пространством

Колонтитул
Норма

Текст виден внизу каждой страницы при печати

Тревожный признак

Колонтитула нет в предпросмотре — проверьте свойство Выводить

Пограничный случай: ровно полная страница данных
Норма

Подвал выводится на новой странице корректно

Тревожный признак

Появляется лишняя пустая страница или подвал накладывается на данные

Часто задаваемые вопросы

Можно ли вывести область макета строго внизу каждой страницы?

Штатно — нет. Нижний колонтитул поддерживает только текст. Для области макета внизу каждой страницы придётся формировать документ постранично вручную: считать строки, выводить разделитель страниц и затем нужную область.

Почему колонтитул не виден на экране?

Колонтитулы отображаются только при печати и в предварительном просмотре. Откройте предпросмотр печати — если и там пусто, проверьте свойство Выводить и НачальнаяСтраница.

Как вывести подписи только на последней странице?

Выведите область подписей после всех данных, предварительно прижав её к низу циклом с пустой областью и ПроверитьВывод. Подписи появятся только один раз — в конце документа.

Подвал разрывается между страницами, что делать?

Перед выводом вызовите ПроверитьВывод с массивом, содержащим область подвала. Если возвращается Ложь — выведите горизонтальный разделитель страниц и затем подвал. Дополнительно проверьте настройки разрыва области в макете.

Работает ли приём с пустой областью в управляемых формах и на сервере?

Да, табличный документ формируется на сервере одинаково для любых форм. Методы Вывести, ПроверитьВывод и ВывестиГоризонтальныйРазделительСтраниц доступны в серверном контексте.

Как учесть альбомную ориентацию при расчёте высоты страницы?

Высота страницы в строках зависит от ориентации, полей и масштаба. Не зашивайте число строк на странице в код — используйте цикл с ПроверитьВывод, который сам определяет фактическое заполнение страницы.

Итог

Что важно запомнить

Прямого свойства «внизу страницы» у областей табличного документа нет. Для текста на каждой странице — нижний колонтитул, для подвала в конце документа — цикл с пустой областью и ПроверитьВывод, от разрыва подвала защищает предварительная проверка и разделитель страниц. Результат всегда контролируйте в предварительном просмотре печати.