1С 8.x : Табличный документ: Колонтитулы и параметры страницы
Большинство обучающих материалов по программированию в системе 1С при описании формирования печатных форм на основе объекта «Табличный документ» ограничиваются выводом готовой формы на экран. Для пользователей же куда более важным является то, как документ будет выглядеть в распечатанном виде. Здесь, кроме хорошо сверстанного макета, играют роль и установки параметров печати.Почти все параметры, доступные в диалогах настройки печати (настройки принтера, свойства страницы), можно указать непосредственно при формировании табличного документа.Рассмотрим свойства и методы табличного документа, относящиеся к настройкам печати (в приведенных примерах «ТабДок» это объект типа «Табличный документ»).
Свойство «ИмяПринтера» позволяет задать для печати принтер, отличный от установленного по умолчанию. Имя должно совпадать с именем принтера, заданным в системе:
ТабДок.ИмяПринтера=»HP LaserJet 3050 Series PCL 6″;
При печати пакета документов можно сэкономить время, установив признак разбора по копиям:
Число копий можно указать так:
Разумеется, можно задать поля:
ТабДок.ПолеСлева=20;//Поле слева 20мм, остальные поля 10мм (по умолчанию)
Еще несколько свойств страницы:
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт; ТабДок.ЭкземпляровНаСтранице=2; //на листе будет размещено 2 страницы ТабДок.Автомасштаб=истина; //аналогично настройкам масштаба «по ширине страницы»
При необходимости можно указать конкретное значение масштабирования в процентах (свойство «МасштабПечати»).
Свойство «РазмерСтраницы» позволяет задать стандартные форматы страницы – “A3”, “A4”, “A5” (полный список вариантов доступен в справке 1С).
ТабДок.РазмерСтраницы=»A3″;// буква А должна быть английской
Для нестандартного размера бумаги (Custom) можно указать значения высоты и ширины страницы (в мм):
ТабДок.РазмерСтраницы=»Custom»;//нестандартный размер ТабДок.ВысотаСтраницы=350; ТабДок.ШиринаСтраницы=350;
Также в табличном документе доступно управление выводом колонтитулов и их содержимым. Для этого служат свойства «ВерхнийКолонтитул» и «НижнийКолонтитул». Например:
ТабДок.ВерхнийКолонтитул.Выводить=истина; //будет напечатан верхний колонтитул ТабДок.РазмерКолонтитулаСверху=7; //размер колонтитула 7мм (по умолчанию 10мм) ТабДок.ВерхнийКолонтитул.ВертикальноеПоложение=ВертикальноеПоложение.Верх; ТабДок.ВерхнийКолонтитул.НачальнаяСтраница=2;//колонтитул выводится со второй страницы ШрифтКолонтитула=Новый Шрифт(«Courier New», 8,,Истина); ТабДок.ВерхнийКолонтитул.Шрифт=ШрифтКолонтитула; //наклонный шрифт ТабДок.ВерхнийКолонтитул.ТекстВЦентре=»Верхний колонтитул»; ТабДок.ВерхнийКолонтитул.ТекстСправа=»Стр.[&НомерСтраницы] из [&СтраницВсего]»; //нумерация страниц ТабДок.ВерхнийКолонтитул.ТекстСлева=»[&Дата]»;//текущая дата
Сформированный документ отправляется на печать с помощью метода «Напечатать()». Возможно два варианта вызова.
1) Непосредственно на принтер:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); ТабДок.Напечатать(истина);
2) Перед печатью будет выведен диалог печати:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать); ТабДок.Напечатать(ложь);
Кроме того можно управлять и разбиением документа на страницы. Оценить количество страниц в документе по настройкам текущего принтера можно так:
С помощью методов «ПроверитьВывод()» и «ПроверитьПрисоединение()» можно определить, умещается ли табличный документ или массив областей табличного документа на странице в высоту и в ширину при текущих настройках принтера.Надо иметь ввиду, что работа последних трех методов зависит от установленного принтера. Если методу не удается его найти, вызывается исключение.
Принудительно вставить разрывы страниц позволяют методы «ВывестиВертикальныйРазделительСтраниц()» и «ВывестиГоризонтальныйРазделительСтраниц()».Таким образом, можно управлять постраничным выводом на печать и контролировать заполнение страницы:
Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц();КонецЕсли;
Вывод колонтитула или логотипа внизу страницы, вне зависимости от количества строк в печатной форме.
Была форма счета сделанная в excel и она была утверждена в валютном контроле. ее нужно было реализовать в 1с.
Казалось бы чего проще, но столкнулся с проблемой, внизу формы находились реквизиты и подпись. и при выводе печатной формы счета «Подвал» должен всегда находиться внизу страницы, вне зависимости от того сколько строчек номенклатуры выводится, одна или 10-15. Когда выводилось мало строчек, подвал счета естесственно перемещался вверх поближе к строчкам номенклатуры.
Долго думал, читал в интернет и делюсь опытом.
Вот пример кода, ниже поясню смысл.
ОбластьМакета = Макет.ПолучитьОбласть(«Пропуск»); //// В макете создаем область которая содержит просто не заполненную строку, она будет нужна для того,чтобы заполнить пустоту между строчками и подвалом.
ТабДокумент.Вывести(ОбластьМакета);
// Проставляем пустые строчки, так чтобы подвал всегда находился внизу страницы.
ПоследняяОбласть = Макет.ПолучитьОбласть(«ПодвалСчета»);
ПустаяОбласть = Макет.ПолучитьОбласть(«Пустая»);
Итого = Макет.ПолучитьОбласть(«Итого»);
ИтогоНДС = Макет.ПолучитьОбласть(«ИтогоНДС»);
// СуммаПрописью = Макет.ПолучитьОбласть(«СуммаПрописью»);
КурсИтого = Макет.ПолучитьОбласть(«КурсИтого»); /// Получаем се области которые нужно сдвигать в самый низ страницы.
Массив = Новый Массив; /// Создаем Массив из областей которые нужно располагать внизу страницы, также добавляем в массив область с пустой строкой.
Пока ТабДокумент.ПроверитьВывод(Массив) Цикл /// Далее следует простая проверка на возможность уместить массив из областей на листе.
ТабДокумент.Вывести(ПустаяОбласть);
КонецЦикла;
///// Логика такая, если массив умещается на листе, тогда выводим пустую область тем, самым оставляем меньше места на листе (сдвигаем Массив областей вниз) как только массив перестает влезать на лист выводится массив областей, тем самым мы каждый раз получаем его внизу страницы.
// Проставляем пустые строчки, так чтобы подвал всегда находился внизу страницы.
Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула
Вначале задача была просто выводить нижний колонтитул для одной страницы, обычно с изменяемой по высоте в зависимости от содержания высотой. Алгоритм был таким: функция на вход получала массив областей печати и в цикле уменьшая размер массива снизу пыталась вывести их все плюс область подвала, когда это удавалось функция в зависимости от параметров уходила в рекурсия пытаясь вывести оставшийся контент, либо завершала свою работу и возвращала массив с оставшимися не выведенными областями.
Было решено полностью переписать алгоритм функции, что только положительно сказалось на читаемости кода. избавился от рекурсии и выше перечисленных ошибок вывода.
Область колонтитула прижимается к низу страницы многократным выводом тоненькой пустой области печати, 1/5 стандартной высоты строки.
Вывод ускоряем строками разной высоты, на примере они раскрашены разными цветами.
Пример использования вывода:
Плюсы моего решения:
Хотя минусов и больше, но возможности плюсов перевешивают их, и сейчас я использую этот код во многих печатных формах. Считаю, что и тебе он поможет в реализации своих идей с красивым выводом контента.
П.П.С. Обращение к разработчикам 1С. Добавьте к своему функционал печати возможность указать как начальную, так и конечную страницу вывода колонтитула, + возможность указанием в качестве шаблона произвольной области макета.
П.П.П.С Внесены доработки для работы кода в глобальном модуле. с.м. процедуру печати
1С 8.3 : Табличный документ: Колонтитулы и параметры страницы
Большинство обучающих материалов по программированию в системе 1С при описании формирования печатных форм на основе объекта «Табличный документ» ограничиваются выводом готовой формы на экран. Для пользователей же куда более важным является то, как документ будет выглядеть в распечатанном виде. Здесь, кроме хорошо сверстанного макета, играют роль и установки параметров печати.Почти все параметры, доступные в диалогах настройки печати (настройки принтера, свойства страницы), можно указать непосредственно при формировании табличного документа.Рассмотрим свойства и методы табличного документа, относящиеся к настройкам печати (в приведенных примерах «ТабДок» это объект типа «Табличный документ»).
Свойство «ИмяПринтера» позволяет задать для печати принтер, отличный от установленного по умолчанию. Имя должно совпадать с именем принтера, заданным в системе:
ТабДок.ИмяПринтера=»HP LaserJet 3050 Series PCL 6″;
При печати пакета документов можно сэкономить время, установив признак разбора по копиям:
Число копий можно указать так:
Разумеется, можно задать поля:
ТабДок.ПолеСлева=20;//Поле слева 20мм, остальные поля 10мм (по умолчанию)
Еще несколько свойств страницы:
ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт; ТабДок.ЭкземпляровНаСтранице=2; //на листе будет размещено 2 страницы ТабДок.Автомасштаб=истина; //аналогично настройкам масштаба «по ширине страницы»
При необходимости можно указать конкретное значение масштабирования в процентах (свойство «МасштабПечати»).
Свойство «РазмерСтраницы» позволяет задать стандартные форматы страницы – “A3”, “A4”, “A5” (полный список вариантов доступен в справке 1С).
ТабДок.РазмерСтраницы=»A3″;// буква А должна быть английской
Для нестандартного размера бумаги (Custom) можно указать значения высоты и ширины страницы (в мм):
ТабДок.РазмерСтраницы=»Custom»;//нестандартный размер ТабДок.ВысотаСтраницы=350; ТабДок.ШиринаСтраницы=350;
Также в табличном документе доступно управление выводом колонтитулов и их содержимым. Для этого служат свойства «ВерхнийКолонтитул» и «НижнийКолонтитул». Например:
ТабДок.ВерхнийКолонтитул.Выводить=истина; //будет напечатан верхний колонтитул ТабДок.РазмерКолонтитулаСверху=7; //размер колонтитула 7мм (по умолчанию 10мм) ТабДок.ВерхнийКолонтитул.ВертикальноеПоложение=ВертикальноеПоложение.Верх; ТабДок.ВерхнийКолонтитул.НачальнаяСтраница=2;//колонтитул выводится со второй страницы ШрифтКолонтитула=Новый Шрифт(«Courier New», 8,,Истина); ТабДок.ВерхнийКолонтитул.Шрифт=ШрифтКолонтитула; //наклонный шрифт ТабДок.ВерхнийКолонтитул.ТекстВЦентре=»Верхний колонтитул»; ТабДок.ВерхнийКолонтитул.ТекстСправа=»Стр.[&НомерСтраницы] из [&СтраницВсего]»; //нумерация страниц ТабДок.ВерхнийКолонтитул.ТекстСлева=»[&Дата]»;//текущая дата
Сформированный документ отправляется на печать с помощью метода «Напечатать()». Возможно два варианта вызова.
1) Непосредственно на принтер:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); ТабДок.Напечатать(истина);
2) Перед печатью будет выведен диалог печати:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать); ТабДок.Напечатать(ложь);
Кроме того можно управлять и разбиением документа на страницы. Оценить количество страниц в документе по настройкам текущего принтера можно так:
С помощью методов «ПроверитьВывод()» и «ПроверитьПрисоединение()» можно определить, умещается ли табличный документ или массив областей табличного документа на странице в высоту и в ширину при текущих настройках принтера.Надо иметь ввиду, что работа последних трех методов зависит от установленного принтера. Если методу не удается его найти, вызывается исключение.
Принудительно вставить разрывы страниц позволяют методы «ВывестиВертикальныйРазделительСтраниц()» и «ВывестиГоризонтальныйРазделительСтраниц()».Таким образом, можно управлять постраничным выводом на печать и контролировать заполнение страницы:
Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц();КонецЕсли;
Присоединение колонтитула в печатной форме
Доброго времени суток. есть внешняя обработка (выводит договор на основании документа). в макете обработки есть области Таблица, ШапкаТаблицы, Колонтитулы.
Как сделать так, чтобы в начале каждого листа выводилась ШапкаТаблицы, внизу Колонтитулы, ну а посередине сама Таблица?
сразу прошу прощения, если вопрос не корректен.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Кнопки на печатной форме
Доброе утро! Конфигурация 1С8 УТ 11.2. нетиповая. Создала в нетиповую печатную форму для.
Сортировка ТЧ в печатной форме
Добрый день! Такая проблема, ни как не идет сортировка в печатной форме по значению Номенклатура.
Автовысота строки в печатной форме
Подскажите, как настроить автовысоту в печатной форме, чтобы высота была разной в каждой строке (в.
Решение
только не могу понять, почему не выводится Шапкатаблицы
Вложения
ЗаявкаДКП.7z (249.2 Кб, 3 просмотров) |
Но в типовой ТТН не используют ПроверитьВывод(), т.к. он тормозной и частенько сбоит.
Вот пример из типовой:
Решение
Что то я даже представить себе не могу как эта конструкция должна работать =))))
Добавлено через 5 минут
Небольшой пример функции через ПроверитьВывод()
З.Ы. очень медленный метод, т.к. постоянно просит принтер проверить страницу. (на больших данных может вызывать жуткие тормоза или вообще не работать!)
С подсчетом количества строк на странице на это фиг заложишься!
Добавлено через 10 минут
Приведенный мной пример является очень простым!
Алгоритм можно улучшить применив оба варианта проверки умещается ли ТабДок на странице
Например:
1. Сначала посчитать сколько строк уместиться на первой странице и потом на всех остальных
2. При выводе на печать сначала заполнять количество строк предварительно посчитанные, проверять через драйвер что умещается на вывод!
3. Если не уместились, убираем по одной строке и проверяем вывод
З.Ы. чем точнее посчитаем предварительное количество строк на страницах, тем меньше будет использоваться метод ПроверитьВывод()