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

23.02.12

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

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

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

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

 


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



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



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

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

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

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

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

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

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

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

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

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

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

            КонецЦикла;

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

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

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

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

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

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

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

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

            КонецЦикла;

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

        КонецЕсли;



    КонецЕсли;



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



См. также

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

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

21.05.2024    20118    dimanich70    81    

144

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

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

1 стартмани

18.03.2024    4091    3    John_d    11    

57

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

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

12.02.2024    18051    atdonya    24    

56

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

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

30.11.2023    5501    ke.92@mail.ru    16    

65

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

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

28.08.2023    14729    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3579    56    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18478    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. andy-cj 56 24.02.12 03:11 Сейчас в теме
Я думаю многие программисты сталкивались с проблемой масштабирования разрабатываемых печатных форм документов, то печатная форма вылазит вправо, то сиротливо ютится в углу страницы. В этой статье предоставлен алгоритм решающий эту проблему.

Перейти к публикации

1. Magister 134 24.02.12 03:11 Сейчас в теме
Делал похожее, в итоге отказаться пришлось.
1) На некоторых принтерах глючит.
2) Если печатная форма формируется на сервере (актуально для управляемых форм) - можно 5 минут ждать, пока отработает.
3) Опять таки, иногда работает не сильно быстро даже на клиенте - на самых ходовых документах задержка была ощутимая.
2. corelius 4 16.10.14 16:12 Сейчас в теме
Вредительский код. Во-первых:
1. что за строка "Если ТабДокумент.КоличествоСтраниц()" ??? Где оператор "Тогда"???
2. в этом участке кода "зацикливание": "Пока ИсходноеКоличествоСтраниц=ТабДокумент.КоличествоСтраниц() Цикл". Переменная ИсходноеКоличествоСтраниц не меняется напротяжении всей работы алгоритма.

Бредовый код....
sasha777666; dachnik; +2 1 Ответить
3. andy-cj 56 17.10.14 23:11 Сейчас в теме
(2) corelius, Уважаемый Олег, публикация висит здесь с 2012 года. Был предложен алгоритм, вставлено с реальной разработки, это работает не у одного клиента. С того времени сайт пережил глобальные изменения, возможно что-то потерялось в публикации или проблемы форматированием, следить за актуальностью не собираюсь. Неужели вы думаете что за два года не нашлось бы любителей помокать в говно автора? Не работает Ctrl+C - Ctrl+V? Очень жаль, мой друг, не используйте, напишите лучше. Срать умеют все, не все могут культурно общаться, к сожалению.
user1706724; +1 Ответить
4. StripyCat 16.06.15 14:57 Сейчас в теме
В строке
Если ТабДокумент.КоличествоСтраниц()
на самом деле должно быть
Если ТабДокумент.КоличествоСтраниц() < ИсходноеКоличествоСтраниц Тогда

И в самом начале имеет смысл поставить
ТабДокумент.АвтоМасштаб = Ложь;
иначе вся эта конструкция может не работать как нужно.

Ну и параметр МинимальныйПроцентМасштаба на мой взгляд имеет смысл передавать 85-88. Иначе очень мелко получается. А так, оптимальный масштаб где-то в районе 92-93% лежит. И вот эти 1-2% алгоритм выбирает, чтобы не оставалось "висячих" строк.
user1706724; +1 Ответить
Оставьте свое сообщение