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