Почему не работает горизонтальный разделитель страниц в табличном документе 1С и как правильно разделить страницы?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке печатных форм и отчетов в 1С часто возникает задача принудительно начать вывод данных с нового листа (например, при печати квитанций, актов или накладных). Иногда разработчик ожидает, что информация перенесется на следующую страницу, однако в режиме предварительного просмотра или при печати данные продолжают выводиться сплошным потоком на том же листе. Разберем основные причины такого поведения и способы решения проблемы.

1. Проверка макета: граница ячеек вместо реального разделителя

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

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

Выясним, как проверить наличие реального разделителя:

  1. Откроем макет печатной формы в конфигураторе.
  2. Выделим подозрительную строку и проверим свойства ячеек (палитра свойств — раздел «Границы»). Если там включена пунктирная линия границы, это лишь элемент оформления.
  3. Чтобы добавить настоящий разделитель страниц в макет вручную, выделим строку и в главном меню выберем «Таблица» → «Вставить разрыв страницы».
  4. Если документ формируется программно, вызовем метод ВывестиГоризонтальныйРазделительСтраниц() у объекта ТабличныйДокумент в нужный момент формирования печатной формы.

2. Программный вывод разделителя страниц

Рассмотрим, как правильно вызывать принудительный разрыв страниц в коде модуля при формировании печатной формы:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьКвитанция = Макет.ПолучитьОбласть("Квитанция");

Номер = 0;
Для Каждого СтрДанные Из МассивДанных Цикл
    Номер = Номер + 1;
    
    // Если это не первая квитанция, переносим вывод на новую страницу
    Если Номер > 1 Тогда
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    ОбластьКвитанция.Параметры.Заполнить(СтрДанные);
    ТабДок.Вывести(ОбластьКвитанция);
КонецЦикла;

3. Влияние параметров печати и автомасштабирования

Если метод ВывестиГоризонтальныйРазделительСтраниц() вызывается корректно, но на предварительном просмотре страницы объединяются, проанализируем параметры печати самого табличного документа:

  1. Свойство АвтоМасштаб: если установлено значение Истина или в диалоге печати выбрано «Уместить на одну страницу», платформа принудительно сожмет весь вывод на один лист, игнорируя или смещая разделители. Перед формированием документа убедимся, что автомасштаб отключен:
    
    ТабДок.АвтоМасштаб = Ложь;
    ТабДок.МасштабПечати = 100;
    
  2. Сохраненные настройки пользователя (ИмяПараметровПечати): если у документа заполнено свойство ИмяПараметровПечати, 1С загружает индивидуальные настройки пользователя, сохраненные ранее. Если пользователь однажды сохранил параметры сжатия по ширине или высоте, разделители перестанут отрабатывать ожидаемым образом. Для отладки и гарантированного применения параметров можно временно очистить это свойство.

4. Динамический контроль переноса с помощью метода ПроверитьВывод()

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


МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьСтрока);
МассивОбластей.Добавить(ОбластьПодвал);

// Проверяем, поместятся ли строка и подвал вместе на текущей странице
Если НЕ ТабДок.ПроверитьВывод(МассивОбластей) Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДок.Вывести(ОбластьШапка);
КонецЕсли;

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

5. Вывод независимых документов через ПакетОтображаемыхДокументов

Если каждая квитанция или страница должна иметь собственные параметры печати (разные поля, ориентацию листа или индивидуальный масштаб), объединять их в один табличный документ с разделителями не всегда удобно. В таких случаях сформируем для каждого листа отдельный ТабличныйДокумент и объединим их в ПакетОтображаемыхДокументов.

Таким образом, для устранения проблемы с разделением страниц необходимо убедиться, что в макете используется именно разрыв страницы, а не пунктирная граница ячеек, и проверить настройки АвтоМасштаб и параметров печати документа.

← На главную