gifts2017

Автоматическое масштабирование табличного документа при печати

Опубликовал Программист 1С (program345) в раздел Программирование - Практика программирования

Многие программисты сталкивались с проблемой масштабирования разрабатываемых печатных форм документов, то печатная форма вылазит вправо, то сиротливо ютится в углу страницы. В этой статье предоставлен алгоритм решающий эту проблему. Взято у andy-cj и исправлены ошибки.

Добрый день, друзья. В рамках решения одной из рабочих задач оптимимизации печати документов и был создан данный алгоритм. Несомненным преимуществом данного алгоритма является то, что пользователю не нужно мучаться с настройками масштаба печатной формы и подгонять ее под разные принтеры. Данный алгоритм обрабатывает две ситуации: первая - это когда количество страниц большое и уменьшением масштаба печати можно добиться максимального заполнения страниц (например: в конце табличного документа появляется "хвостик", который не влазит на предыдущую страницу и выводится в начале следующей, фактически последний лист выходит пустой), вторая ситуация - когда печатная форма занимает 1 лист, но заполнение не полное, в таком варианте алгоритм увеличивает масштаб печати до значения, позволяющего полностью заполнить печатный лист.
      Хочу обратить внимание на то, что при выполнении алгоритма используются драйвера принтера, так что если в системе не установлено ни одного принтера, то выполнение функции вызовет исключение. Также было замечено, что обращение к функции "ТабДокумент.КоличествоСтраниц() " занимает продолжительное время, скорее всего из-за использования драйвера принтера для подсчета количества страниц. Просьба учесть вышеперечисленные моменты при использовании данного алгоритма.

      Поцедуру можно поместить в общий модуль обработчиков печатных форм.

Процедура КорректировкаМасштабаТабДокумента(ТабДокумент,МинимальныйПроцентМасштаба=60) Экспорт



    Если типЗнч(ТабДокумент)=Тип("ТабличныйДокумент") Тогда



        //уменшение масштаба для уменьшения количества страниц

        ИсходныйМасштаб = 100;

        ТабДокумент.МасштабПечати = 100;

        ИсходноеКоличествоСтраниц = ТабДокумент.КоличествоСтраниц();

        ТабДокумент.МасштабПечати = МинимальныйПроцентМасштаба;

        Если ТабДокумент.КоличествоСтраниц() Тогда

            КоличествоОптимизированныхСтраниц = ТабДокумент.КоличествоСтраниц();

            ТекущийПроцентМасштаба = МинимальныйПроцентМасштаба;

            Пока КоличествоОптимизированныхСтраниц=ТабДокумент.КоличествоСтраниц() Цикл

                ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;

                ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;

            КонецЦикла;

            ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати-1;

        Иначе //эффекта нет возвращаем мастаб печати обратно

            ТабДокумент.МасштабПечати = ИсходныйМасштаб;

            //увеличение масштаба для максимального заполнения страниц

            ТекущийПроцентМасштаба = ИсходныйМасштаб;

            Пока ИсходноеКоличествоСтраниц=ТабДокумент.КоличествоСтраниц() Цикл

                ТекущийПроцентМасштаба = ТекущийПроцентМасштаба+1;

                ТабДокумент.МасштабПечати = ТекущийПроцентМасштаба;

            КонецЦикла;

            ТабДокумент.МасштабПечати = ТабДокумент.МасштабПечати-1;

        КонецЕсли;



    КонецЕсли;



КонецПроцедуры

См. также

Автор запретил комментарии