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