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




Я думаю многие программисты сталкивались с проблемой масштабирования разрабатываемых печатных форм документов, то печатная форма вылазит вправо, то сиротливо ютится в углу страницы. В этой статье предоставлен алгоритм решающий эту проблему.
Перейти к публикации
Делал похожее, в итоге отказаться пришлось.
1) На некоторых принтерах глючит.
2) Если печатная форма формируется на сервере (актуально для управляемых форм) — можно 5 минут ждать, пока отработает.
3) Опять таки, иногда работает не сильно быстро даже на клиенте — на самых ходовых документах задержка была ощутимая.
Вредительский код. Во-первых:
1. что за строка «Если ТабДокумент.КоличествоСтраниц()» ??? Где оператор «Тогда»???
2. в этом участке кода «зацикливание»: «Пока ИсходноеКоличествоСтраниц=ТабДокумент.КоличествоСтраниц() Цикл». Переменная ИсходноеКоличествоСтраниц не меняется напротяжении всей работы алгоритма.
Бредовый код….
(2) corelius, Уважаемый Олег, публикация висит здесь с 2012 года. Был предложен алгоритм, вставлено с реальной разработки, это работает не у одного клиента. С того времени сайт пережил глобальные изменения, возможно что-то потерялось в публикации или проблемы форматированием, следить за актуальностью не собираюсь. Неужели вы думаете что за два года не нашлось бы любителей помокать в говно автора? Не работает Ctrl+C — Ctrl+V? Очень жаль, мой друг, не используйте, напишите лучше. Срать умеют все, не все могут культурно общаться, к сожалению.
В строке
Если ТабДокумент.КоличествоСтраниц()
на самом деле должно быть
Если ТабДокумент.КоличествоСтраниц() < ИсходноеКоличествоСтраниц Тогда
И в самом начале имеет смысл поставить
ТабДокумент.АвтоМасштаб = Ложь;
иначе вся эта конструкция может не работать как нужно.
Ну и параметр МинимальныйПроцентМасштаба на мой взгляд имеет смысл передавать 85-88. Иначе очень мелко получается. А так, оптимальный масштаб где-то в районе 92-93% лежит. И вот эти 1-2% алгоритм выбирает, чтобы не оставалось «висячих» строк.