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

23.02.12

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

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

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

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

 


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



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



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

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

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

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

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

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

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

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

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

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

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

            КонецЦикла;

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

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

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

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

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

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

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

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

            КонецЦикла;

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

        КонецЕсли;



    КонецЕсли;



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



См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    2665    0    John_d    8    

53

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    4598    atdonya    22    

45

Переоткрытие внешних обработок

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

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

30.11.2023    3956    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8807    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2071    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 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    16141    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7242    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 Ответить
Оставьте свое сообщение