Добрый день, друзья. В рамках решения одной из рабочих задач оптимимизации печати документов и был создан данный алгоритм. Несомненным преимуществом данного алгоритма является то, что пользователю не нужно мучится с настройками масштаба печатной формы и подгонять ее под разные принтеры. Данный алгоритм обрабатывает две ситуации, первая это когда количество страниц большое и уменьшением масштаба печати можно добиться максимального заполнения страниц (например в конце табличного документа появляется "хвостик", который не влазит на предыдущую страницу и выводится в начале следующей, фактически последний лист выходит пустой), вторая ситуация когда печатная форма занимает 1 лист, но заполнение не полное, в таком варианте алгоритм увеличивает масштаб печати, до значения позволяющего полностью заполнить печатный лист.
Хочу обратить внимание, на то что при выполнении алгоритма используются драйвера принтера, и если в системе не установлено ни одного принтера выполнение функции вызовет исключение. Также было замечено что обращение к функции "ТабДокумент.КоличествоСтраниц() " занимает продолжительное время, скорее всего из-за использования драйвера принтера для подсчета количества страниц. Просьба учесть вышеперечисленные моменты при использовании данного алгоритма.
Поцедуру можно поместить в общий модуль обработчиков печатных форм.
Процедура КорректировкаМасштабаТабДокумента(ТабДокумент,МинимальныйПроцентМасштаба=60) Экспорт
Если типЗнч(ТабДокумент)=Тип("ТабличныйДокумент") Тогда
//уменшение масштаба для уменьшения количества страниц
ИсходныйМасштаб = 100;
ТабДокумент.МасштабПечати = 100;
ИсходноеКоличествоСтраниц = ТабДокумент.КоличествоСтраниц();
ТабДокумент.МасштабПечати = МинимальныйПроцентМасштаба;
Если ТабДокумент.КоличествоСтраниц()
КоличествоОптимизированныхСтраниц = ТабДокумент.КоличествоСтраниц();
ТекущийПроцентМасштаба = МинимальныйПроцентМасштаба;
Пока КоличествоОптимизированныхСтраниц=ТабДокумент.КоличествоСтраниц() Цикл
ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;
ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;
КонецЦикла;
ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати-1;
Иначе //эффекта нет возвращаем мастаб печати обратно
ТабДокумент.МасштабПечати = ИсходныйМасштаб;
//увеличение масштаба для максимального заполнения страниц
ТекущийПроцентМасштаба = ИсходныйМасштаб;
Пока ИсходноеКоличествоСтраниц=ТабДокумент.КоличествоСтраниц() Цикл
ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;
ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;
КонецЦикла;
ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати-1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры