При работе с печатными формами в 1С:Предприятии часто возникает ситуация, когда документ неоправданно разбивается на несколько страниц. Попытки удалить разрыв вручную через меню «Таблица — Настройки печати — Удалить разрыв страницы» часто не приносят результата, так как разрыв либо формируется программно, либо жестко задан в свойствах самого макета. В этой статье мы подробно разберем все способы управления разбиением табличного документа на страницы.
Первым делом проанализируем программный код, отвечающий за формирование печатной формы. В большинстве типовых и самописных конфигураций разрыв страницы вставляется принудительно с помощью специального метода. Рассмотрим ситуацию, когда в процедуре печати встречается метод ВывестиГоризонтальныйРазделительСтраниц().
Если вы обнаружили в коде модуля менеджера или модуля объекта следующую строку:
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
Это и есть причина появления жесткого разрыва. Система, дойдя до этой команды, мгновенно завершает текущую страницу и переходит к следующей. Чтобы убрать такой разрыв, достаточно закомментировать эту строку или удалить её. Однако часто разработчики используют логическую проверку перед выводом разделителя, чтобы документ выглядел аккуратно.
Разберем пример правильной проверки вывода, где разрыв страницы добавляется только в случае, если следующая секция не помещается на текущий лист:
МассивВыводимыхОбластей = Новый Массив;
МассивВыводимыхОбластей.Добавить(ОбластьСтрока);
МассивВыводимыхОбластей.Добавить(ОбластьПодвал);
Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
В данном случае, чтобы избежать разрыва, нам нужно проанализировать состав МассивВыводимыхОбластей. Если система ошибочно переносит данные, возможно, проверяемая область слишком велика или настройки параметров страницы (поля, колонтитулы) не оставляют места для вывода. При реализации программного формирования документов можно взять за основу пример внешней печатной формы на БСП.
Если в коде метода ВывестиГоризонтальныйРазделительСтраниц() нет, а разрыв все равно появляется в одном и том же месте, нам необходимо проверить свойства самого макета (файл .mxl). Рассмотрим, как это сделать:
В этой категории нас интересуют два флага: Начало страницы и Конец страницы. Если хотя бы один из них установлен, 1С будет принудительно разрывать документ в этом месте. Убедимся, что эти флаги сняты для всех строк макета, где автоматический перенос не требуется.
Также проанализируем свойство Вместе с следующим. Если эта опция включена для группы строк, система будет пытаться перенести их на новый лист целиком, если они не помещаются на текущем. Это часто создает огромные пустые пространства в конце первой страницы.
Иногда «разрыв» — это не специальная команда, а просто следствие того, что данные не помещаются по ширине или высоте. Выясним, как заставить систему автоматически подгонять документ под размер листа. Самый эффективный способ — использование свойства АвтоМасштаб.
Добавим в код формирования печатной формы следующую настройку:
ТабДок.АвтоМасштаб = Истина;
Этот метод заставляет систему динамически уменьшать шрифт и размеры ячеек так, чтобы весь документ по ширине уместился на одну страницу. Если же нам нужно жестко задать масштаб, мы можем использовать свойство МасштабПечати:
ТабДок.МасштабПечати = 95; // Установка масштаба в 95% от оригинала
Проанализируем также влияние полей и колонтитулов. Если в Параметрах страницы установлены большие значения для верхнего или нижнего полей, полезная площадь печати сокращается. Проверим это программно:
ТабДок.ПолеСверху = 5;
ТабДок.ПолеСнизу = 5;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 5;
Часто пользователи сталкиваются с тем, что изменить макет или код в типовой конфигурации (например, в «1С:Бухгалтерии» или «Управлении торговлей») невозможно из-за того, что программа стоит на поддержке. В этом случае мы воспользуемся механизмом расширений.
Рассмотрим последовательность действий:
Документ.СчетНаОплатуПокупателю.Печать).&Вместо.ВывестиГоризонтальныйРазделительСтраниц() и удаляем его или корректируем условие ПроверитьВывод().Такой подход позволяет сохранить конфигурацию на поддержке, при этом полностью адаптировав печатную форму под нужды пользователя. Для изменения макетов штатными средствами без доработки кода пригодится инструкция по редактированию печатных форм в программах 1С.
Бывают случаи, когда разрыв страницы происходит из-за невидимых объектов в макете. Если ниже основной области печати были когда-то заполнены ячейки, а потом просто очищены (клавишей Backspace или Delete), 1С все равно может считать их частью документа.
Проанализируем макет на наличие таких данных. Рекомендуется выделить все пустые строки ниже макета (начиная с первой пустой и до самого конца таблицы) и выполнить команду Удалить строки. Аналогичную операцию стоит провести и для пустых колонок справа от макета. Это гарантирует, что принтер не будет пытаться распечатать «пустоту», создавая лишние листы.
Важный момент: проверьте свойство Фиксация в меню «Таблица — Вид». Зафиксированные области могут конфликтовать с логикой разбиения на страницы, особенно если они занимают значительную часть экрана или листа.
Таким образом, комбинируя программные методы контроля вывода и правильную настройку свойств ячеек макета, мы можем добиться идеального отображения печатной формы без лишних разрывов.