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

04.09.15

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

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

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

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

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



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



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

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

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

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

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

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

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

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

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

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

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

            КонецЦикла;

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

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

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

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

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

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

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

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

            КонецЦикла;

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

        КонецЕсли;



    КонецЕсли;



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

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

печать

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    2555    Abysswalker    7    

41

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

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

14.05.2025    5576    DeerCven    15    

57

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

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

21.05.2024    46791    dimanich70    83    

165

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

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

1 стартмани

18.03.2024    6916    6    John_d    13    

59

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

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

12.02.2024    58069    atdonya    31    

68

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

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

30.11.2023    8688    ke.92@mail.ru    17    

68