При разработке внешних печатных форм (ВПФ) или отчетов разработчики 1С нередко сталкиваются с ситуацией: визуально документ занимает всего одну страницу, но при предварительном просмотре или отправке на принтер платформа 1С генерирует сотни или даже тысячи пустых листов. При этом стандартные инструкции вроде ТабличныйДокумент.АвтоМасштаб = Истина; не спасают положение. Разберем подробно, почему возникает такое поведение платформы и как по шагам восстановить корректный вывод документа на печать.
Наиболее распространенная причина появления тысяч страниц при печати — скрытые или «фантомные» данные в табличном документе макета. Даже если ячейка кажется пустой, наличие в ней хотя бы одного из следующих признаков заставляет платформу рассчитывать границы документа с учетом этой ячейки:
Свойство АвтоМасштаб = Истина отвечает за масштабирование таблицы по ширине листа, но не отсекает лишние строки по высоте. Если платформа считает, что таблица продолжается до 5000-й строки, она честно разобьет этот диапазон на страницы и отправит их на печать.
Рассмотрим, как правильно локализовать и удалить лишние области макета:
Проанализируем строку кода из исходного вопроса:
ТабличныйДокумент.ОбластьПечати.РазмерСтраницы = "A4";
Это синтаксически неверная конструкция. Свойство РазмерСтраницы принадлежит непосредственно объекту ТабличныйДокумент, а не свойству ОбластьПечати. Попытка установить размер страницы через область печати не срабатывает, из-за чего применяются некорректные параметры страницы по умолчанию.
Посмотрим на пример правильной инициализации параметров сформированного табличного документа перед выводом пользователю:
// Устанавливаем свойства напрямую у объекта ТабличныйДокумент
ТабличныйДокумент.РазмерСтраницы = "A4";
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портретная; // Или ОриентацияСтраницы.Ландшафт
ТабличныйДокумент.АвтоМасштаб = Истина;
// Настройка полей (в миллиметрах)
ТабличныйДокумент.ПолеСлева = 10;
ТабличныйДокумент.ПолеСправа = 10;
ТабличныйДокумент.ПолеСверху = 10;
ТабличныйДокумент.ПолеСнизу = 10;
Если требуется жестко ограничить печатную область и отсечь все потенциально пустые строки, возникшие при формировании отчета программно, зададим свойство ОбластьПечати явно, указав конкретный диапазон ячеек:
// Ограничиваем область печати только заполненными строками и колонками
НомерПоследнейСтроки = ТабличныйДокумент.ВысотаТаблицы;
НомерПоследнейКолонки = ТабличныйДокумент.ШиринаТаблицы;
ТабличныйДокумент.ОбластьПечати = ТабличныйДокумент.Область(1, 1, НомерПоследнейСтроки, НомерПоследнейКолонки);
Выясним другие программные причины разрастания документа:
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(), каждая строка будет принудительно выводиться на новый лист.Вывести() и Присоединить(): использование вывода новых секций в цикле по горизонтали приводит к лавинообразному расширению документа по ширине.При поиске подобных проблем часто возникает сложность с точками останова в коде ВПФ. Разберем, как проверить параметры документа отладчиком:
-debug).Печать в модуле объекта обработки, а не в интерфейсных формах.ТабличныйДокумент.ВысотаТаблицы — количество строк;ТабличныйДокумент.ШиринаТаблицы — количество колонок;ТабличныйДокумент.КоличествоСтраниц() — расчетное число листов.Своевременная очистка структуры макета с помощью комбинации Ctrl + End и корректное задание свойств самого ТабличныйДокумент гарантируют точный вывод печатной формы на нужное количество листов.