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

04.09.15

Разработка - Универсальные функции

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

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

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

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



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



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

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

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

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

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

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

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

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

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

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

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

            КонецЦикла;

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

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

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

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

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

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

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

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

            КонецЦикла;

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

        КонецЕсли;



    КонецЕсли;



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

Вступайте в нашу телеграмм-группу Инфостарт

печать

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    4740    DeerCven    14    

55

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    44583    dimanich70    83    

160

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6582    6    John_d    13    

58

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    54780    atdonya    31    

67

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8347    ke.92@mail.ru    17    

67

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22183    YA_418728146    8    

174