При формировании печатных форм часто возникает задача вывода длинного текстового блока, который не умещается на одну страницу. Это особенно актуально, когда создается инструкция или пособие, требующее красивого оформления. Если просто поместить весь текст в одну ячейку, система может некорректно «разорвать» её при печати. В рамках данной статьи мы разберем, как программно управлять процессом разбиения текста, выводить колонтитулы с номерами страниц и гарантировать, что подвал документа не останется в одиночестве на последнем листе.
Прежде чем приступать к программному расчету страниц, рассмотрим встроенные возможности объекта ТабличныйДокумент. Для вывода счетчика «Страница X из Y» нет необходимости вручную вычислять количество страниц в коде. Система поддерживает специальные шаблоны в колонтитулах.
Проанализируем пример программной настройки нижнего колонтитула:
ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.ТекстСправа = "Страница [&НомерСтраницы] из [&СтраницВсего]";
ТабДок.НижнийКолонтитул.Шрифт = Новый Шрифт("Arial", 8);
Использование конструкций [&НомерСтраницы] и [&СтраницВсего] позволяет платформе автоматически подставлять нужные значения в момент формирования печатного листа.
Основная проблема при вывода длинного текста заключается в том, что ячейка с включенным свойством Переносить не умеет автоматически разделяться между страницами. Если вы используете форматированный документ, его содержимое также необходимо предварительно подготовить для вывода. Чтобы решить задачу разделения, мы применим метод «построчного вывода».
Разберем по шагам рекомендуемый алгоритм:
ПроверитьВывод().Посмотрим на пример реализации такого цикла:
Для Каждого ТекущаяСтрокаТекста Из МассивСтрок Цикл
ОбластьТекст.Параметры.Текст = ТекущаяСтрокаТекста;
// Проверяем, уместится ли текущая строка на странице
Если Не ТабДок.ПроверитьВывод(ОбластьТекст) Тогда
// Если не влезает — вставляем разделитель и, если нужно, повторяем шапку
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапка);
КонецЕсли;
ТабДок.Вывести(ОбластьТекст);
КонецЦикла;
Часто встречается ситуация, когда текст заканчивается в самом низу страницы, и подвал (подписи, печати) выводится на новом листе в полном одиночестве. Чтобы этого избежать, особенно если вы разрабатываете внешнюю печатную форму с печатью и подписями, мы применим хитрость при проверке вывода.
Метод ПроверитьВывод() может принимать массив областей. Мы будем проверять не только текущую строку текста, но и область подвала вместе с ней. Выясним причину эффективности этого метода: если сумма высот «Строка + Подвал» не влезает на лист, система заранее перенесет строку на новую страницу, и подвал гарантированно выйдет вместе с ней.
Рассмотрим подробнее код проверки с подвалом:
МассивДляПроверки = Новый Массив;
МассивДляПроверки.Добавить(ОбластьТекст);
МассивДляПроверки.Добавить(ОбластьПодвал);
Если Не ТабДок.ПроверитьВывод(МассивДляПроверки) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
Для корректной работы алгоритма необходимо проверить настройки свойств ячеек в макете 1С, учитывая точные значения единиц измерения размера ячеек для идеального позиционирования:
РазмещениеТекста должно быть установлено в значение Переносить.АвтоВысотаСтроки в значение Истина.ТабличныйДокумент рекомендуется установить АвтоМасштаб = Истина, чтобы исключить влияние настроек конкретного принтера на логику разбиения.Такие же принципы оформления стоит соблюдать, когда выполняется редактирование печатных форм в программах 1С, чтобы пользовательские изменения не нарушили логику разбиения страниц. Таким образом, комбинируя методы ПроверитьВывод(), ВывестиГоризонтальныйРазделительСтраниц() и механизм колонтитулов, мы получаем полный контроль над процессом формирования сложных многостраничных документов.