При разработке печатных форм и отчетов в 1С часто возникает задача принудительно начать вывод данных с нового листа (например, при печати квитанций, актов или накладных). Иногда разработчик ожидает, что информация перенесется на следующую страницу, однако в режиме предварительного просмотра или при печати данные продолжают выводиться сплошным потоком на том же листе. Разберем основные причины такого поведения и способы решения проблемы.
Проанализируем самую частую визуальную ловушку. В редакторе табличного документа горизонтальный разделитель страниц по умолчанию отображается тонкой штриховой линией по всей ширине документа. Однако точно так же может выглядеть верхняя или нижняя граница ячейки, если для нее выбран стиль линии «Большой пунктир» или «Пунктир».
Если в макете оформлена пунктирная граница строки, платформа воспринимает ее исключительно как элемент оформления ячейки, а не как директиву разбиения на страницы. В результате при выводе следующей секции печать продолжается на текущем листе.
Выясним, как проверить наличие реального разделителя:
ВывестиГоризонтальныйРазделительСтраниц() у объекта ТабличныйДокумент в нужный момент формирования печатной формы.Рассмотрим, как правильно вызывать принудительный разрыв страниц в коде модуля при формировании печатной формы:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьКвитанция = Макет.ПолучитьОбласть("Квитанция");
Номер = 0;
Для Каждого СтрДанные Из МассивДанных Цикл
Номер = Номер + 1;
// Если это не первая квитанция, переносим вывод на новую страницу
Если Номер > 1 Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ОбластьКвитанция.Параметры.Заполнить(СтрДанные);
ТабДок.Вывести(ОбластьКвитанция);
КонецЦикла;
Если метод ВывестиГоризонтальныйРазделительСтраниц() вызывается корректно, но на предварительном просмотре страницы объединяются, проанализируем параметры печати самого табличного документа:
АвтоМасштаб: если установлено значение Истина или в диалоге печати выбрано «Уместить на одну страницу», платформа принудительно сожмет весь вывод на один лист, игнорируя или смещая разделители. Перед формированием документа убедимся, что автомасштаб отключен:
ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 100;
ИмяПараметровПечати): если у документа заполнено свойство ИмяПараметровПечати, 1С загружает индивидуальные настройки пользователя, сохраненные ранее. Если пользователь однажды сохранил параметры сжатия по ширине или высоте, разделители перестанут отрабатывать ожидаемым образом. Для отладки и гарантированного применения параметров можно временно очистить это свойство.ПроверитьВывод()В ситуациях, когда требуется разрывать страницу только при нехватке места (например, чтобы подвал документа или очередная строка не отрывались от шапки), используем метод ПроверитьВывод(). Он заранее рассчитывает, помещается ли массив областей на текущем листе с учетом установленных полей и колонтитулов:
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьСтрока);
МассивОбластей.Добавить(ОбластьПодвал);
// Проверяем, поместятся ли строка и подвал вместе на текущей странице
Если НЕ ТабДок.ПроверитьВывод(МассивОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапка);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
ПакетОтображаемыхДокументовЕсли каждая квитанция или страница должна иметь собственные параметры печати (разные поля, ориентацию листа или индивидуальный масштаб), объединять их в один табличный документ с разделителями не всегда удобно. В таких случаях сформируем для каждого листа отдельный ТабличныйДокумент и объединим их в ПакетОтображаемыхДокументов.
Таким образом, для устранения проблемы с разделением страниц необходимо убедиться, что в макете используется именно разрыв страницы, а не пунктирная граница ячеек, и проверить настройки АвтоМасштаб и параметров печати документа.