Разработка и Конфигурация · 11 мин
Как вставить разделитель страниц в макет 1С
Как вставить разделитель страниц в макет табличного документа 1С: методы Вывести, Параметры, свойства области, код с примерами и типичные ошибки.
Разделитель страниц в макете 1С нужен, когда печатная форма должна начинать новый логический блок с нового листа: например, каждый счёт-фактура, акт или страница путевого листа — на отдельном листе. Платформа 1С поддерживает несколько способов управления разрывами страниц: программный вызов методов табличного документа, свойства областей макета и параметры вывода при формировании отчёта.
Чаще всего задача решается двумя путями. Первый — методы объекта ТабличныйДокумент: ВывестиГоризонтальныйРазделительСтраниц() и ВывестиВертикальныйРазделительСтраниц(). Второй — свойство «Новая страница» у области макета, которое заставляет платформу начинать вывод области с новой страницы автоматически. Выбор зависит от того, программируете ли вы вывод в коде или работаете только с конструктором макета.
Важно понимать разницу между разделителем страниц и автоматическим разбиением. Автоматическое разбиение срабатывает, когда содержимое не помещается на листе, — его положение «плавает» в зависимости от данных. Разделитель — это жёсткая метка: новая страница начнётся именно там, где вы её поставили, независимо от того, сколько места осталось на текущем листе.
Что такое разделитель страниц в табличном документе 1С
Табличный документ в 1С — это объект, который используется для построения печатных форм. Он состоит из ячеек, объединённых в строки и области. При выводе на печать документ разбивается на страницы по правилам, заданным в свойствах документа: размер бумаги, поля, ориентация, масштаб.
Разделитель страниц — это специальная метка внутри табличного документа, которая принудительно завершает текущую страницу и начинает следующую. Горизонтальный разделитель разрывает документ по вертикали (новая страница ниже), вертикальный — по горизонтали (используется редко, например при широких таблиц, выводимых слева направо).
Разделители видны в режиме предварительного просмотра и учитываются при печати. В обычном режиме просмотра табличного документа на экране горизонтальные разделители отображаются пунктирной линией между строками, если включён соответствующий режим отображения.
Программная вставка разделителя через методы табличного документа
Основной способ вставить разделитель из кода — вызвать метод ВывестиГоризонтальныйРазделительСтраниц() у объекта типа ТабличныйДокумент. Метод ставит разделитель сразу после последней выведенной строки. Обычно его вызывают в цикле после вывода очередной порции данных, чтобы каждый документ или блок начинался с нового листа.
Типовой пример — печать нескольких документов одной командой. После вывода всех областей одного документа проверяют, не последний ли он в списке, и вставляют разделитель:
ТабДок = Новый ТабличныйДокумент;
Первый = Истина;
Для Каждого Документ Из МассивДокументов Цикл
Если Не Первый Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ПолучитьОбластьДокумента(Документ));
Первый = Ложь;
КонецЦикла;
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();Обратите внимание на приём с флагом Первый: разделитель ставится перед выводом очередного документа, а не после. Это исключает появление пустой последней страницы — одной из самых частых ошибок при формировании пакетной печати.
Метод ВывестиВертикальныйРазделительСтраниц() работает аналогично, но разрывает документ по горизонтали. На практике он применяется редко — в основном для широких аналитических таблиц, где логические блоки должны располагаться на отдельных листах слева направо.
Вставка разделителя через свойства области макета
Если печатная форма строится из макета, разрыв страницы можно задать без кода — прямо в конструкторе макета. Для этого используется свойство области «Новая страница» (в палитре свойств области). Когда платформа выводит область с этим свойством, она автоматически начинает её с нового листа.
- 1Откройте макет в конфигураторе и выделите нужную область (например, шапку документа).
- 2Откройте палитру свойств области (правый клик — Свойства).
- 3Найдите свойство «Новая страница» и установите его в значение «Истина».
- 4Сохраните макет и сформируйте печатную форму для проверки.
- 5Откройте предварительный просмотр и убедитесь, что область начинается с нового листа.
Этот подход удобен для типовых форм, где структура статична: шапка всегда на новой странице, приложение — отдельно и т.п. Минус в том, что поведение жёстко зашито в макет: если в каком-то сценарии разрыв не нужен, придётся делать отдельную область или управлять выводом из кода.
Свойство «Новая страница» сочетается с программными разделителями, но не стоит включать оба механизма одновременно без необходимости — можно получить лишние пустые страницы, когда и метод, и свойство сработают подряд.
Проверка помещения области на странице перед выводом
Третий сценарий — не жёсткий разрыв, а умное разбиение: новая страница начинается только если очередной блок не помещается на текущем листе. Для этого у табличного документа есть метод ПроверитьВывод(), который принимает массив областей и возвращает Истина, если все они поместятся на текущей странице.
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьСтрока);
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
Такой приём используют, когда группу строк нельзя разрывать: например, блок «итоги по разделу» не должен оказаться на другом листе отдельно от последней строки раздела. В массив для проверки добавляют все области, которые должны остаться вместе, включая подвал и повторяющуюся шапку таблицы.
Какой способ выбрать
Проверка результата и предварительный просмотр
После вставки разделителя результат проверяют в режиме предварительного просмотра: именно там видно реальное разбиение на страницы с учётом полей, масштаба и ориентации. Обычный просмотр табличного документа может вводить в заблуждение, потому что экранное отображение не всегда совпадает с печатным.
Обратите внимание на настройки самого табличного документа: свойства РазмерСтраницы, ОриентацияСтраницы, поля и масштаб влияют на то, где пройдут автоматические разрывы. Жёсткий разделитель сработает в любом случае, но если содержимое одного логического блока не влезает на лист, оно будет дополнительно разбито автоматически — и итоговая пагинация может отличаться от ожидаемой.
Как проверить корректность разбиения
Каждый логический блок начинается с нового листа, пустых страниц нет
Появляются пустые листы или блок разорван посередине
Заканчивается содержимым последнего блока
В конце пустая страница — лишний разделитель после последнего блока
Разбиение совпадает с предпросмотром
Разрывы смещаются — проверьте поля, масштаб и размер бумаги
Полезная практика — тестировать печатную форму на данных разного объёма: коротком документе, документе, занимающем ровно одну страницу, и длинном документе на несколько листов. Именно граничные случаи выявляют лишние или недостающие разделители.
Типичные ошибки и ограничения
Отдельно стоит упомянуть ограничение метода ПроверитьВывод(): он корректно работает только когда у табличного документа заданы параметры страницы. Если размер страницы не установлен, проверка может давать неожиданные результаты. Перед использованием убедитесь, что свойства страницы заполнены явно или унаследованы из настроек по умолчанию.
Ещё одна граница безопасной работы — изменение общих модулей печати. Если разделитель добавляется в процедуру, которую используют несколько печатных форм, проверьте все зависимые формы: исправление для одной может сломать разбиение в другой.
Альтернативы: внешние печатные формы и СКД
Если дорабатывать конфигурацию нельзя или нежелательно, разделители можно реализовать во внешней печатной форме. Внешняя обработка формирует свой табличный документ, и в ней доступны все те же методы — ВывестиГоризонтальныйРазделительСтраниц() и ПроверитьВывод(). Это безопасный путь: типовая конфигурация остаётся на поддержке.
При выводе через систему компоновки данных (СКД) прямого аналога метода разделителя нет, но разрывы можно организовать через группировки: например, задать для группировки вывод каждого элемента с новой страницы через настройки макета группировки. Это менее гибкий, но декларативный способ, не требующий кода.
Что важно запомнить
Разделитель страниц в макете 1С вставляется методом ВывестиГоризонтальныйРазделительСтраниц() из кода или свойством «Новая страница» у области макета. Для разбиения по условию используйте ПроверитьВывод(). Ставьте разделитель перед блоком, а не после, проверяйте результат в предварительном просмотре и дорабатывайте печать через расширения или внешние формы.
Частые вопросы
Как убрать пустую страницу в конце печатной формы?
Пустая страница почти всегда означает лишний разделитель после последнего блока. Перенесите вызов ВывестиГоризонтальныйРазделительСтраниц() в начало итерации цикла и пропускайте его для первого документа — либо проверяйте, что текущий документ не последний, перед вставкой разделителя.
Разделитель виден в предпросмотре, но при печати игнорируется. Почему?
Такое бывает, когда драйвер принтера или настройки печати масштабируют документ иначе, чем предпросмотр. Проверьте, что размер бумаги и поля в свойствах табличного документа совпадают с настройками принтера, и повторите печать из предварительного просмотра, а не напрямую.
Можно ли вставить разделитель страниц без программирования?
Да, если вы работаете с макетом в конфигураторе: выделите область, откройте её свойства и установите «Новая страница» в значение «Истина». Код не потребуется, но для изменения макета нужны права на редактирование конфигурации или расширения.
Как сделать, чтобы таблица не разрывалась посередине строки?
Объедините строки, которые должны оставаться вместе, в одну именованную область макета и выводите её целиком. Если область не помещается на странице, используйте ПроверитьВывод() и вставляйте разделитель перед ней — тогда блок перенесётся на новый лист целиком.
Работает ли разделитель страниц в управляемых формах и веб-клиенте?
Разделитель — свойство табличного документа, поэтому он учитывается при печати и предварительном просмотре независимо от клиента. Однако интерактивное отображение табличного документа на форме может не показывать разрывы так же, как печатный режим, — ориентируйтесь на предпросмотр.
Чем отличается горизонтальный разделитель от вертикального?
Горизонтальный разделитель завершает текущую страницу по вертикали — следующее содержимое выводится на новом листе ниже. Вертикальный разрывает документ по горизонтали и нужен только для широких таблиц, разбиваемых слева направо; в типовых печатных формах он почти не используется.