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