1с вывести колонтитул программно

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) Перед печатью будет выведен диалог печати:ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать); ТабДок.Напечатать(ложь);

Кроме того можно управлять и разбиением документа на страницы. Оценить количество страниц в документе по настройкам текущего принтера можно так:

С помощью методов «ПроверитьВывод()» и «ПроверитьПрисоединение()» можно определить, умещается ли табличный документ или массив областей табличного документа на странице в высоту и в ширину при текущих настройках принтера.Надо иметь ввиду, что работа последних трех методов зависит от установленного принтера. Если методу не удается его найти, вызывается исключение.

Принудительно вставить разрывы страниц позволяют методы «ВывестиВертикальныйРазделительСтраниц()» и «ВывестиГоризонтальныйРазделительСтраниц()».Таким образом, можно управлять постраничным выводом на печать и контролировать заполнение страницы:

Если Не ТабДок.ПроверитьВывод(МассивВыводимыхОбластей) Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц();КонецЕсли;

Источник

Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)

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

Задача состояла в следующем:
1) выводить не очень большой табличный документ (до 30 листов) с несколькими таблицами,
2) на каждой странице в колонтитуле добавлять нумерацию (если страниц больше одной) и картинку (QR-код) (в том числе корректно выводить нижний колонтитул на последней странице),
3) если какие-либо из таблиц переносились на следующую страницу, необходимо было производить повтор шапки переносимой таблицы, при этом не допустить, чтобы на предыдущей странице осталась только шапка без хотя бы одной строки данных в ней,
4) предусмотреть возможность вывода произвольного верхнего колонтитула (изначально макетом заложен не был).

В частности, это была печатная форма электронной зачетной книжки студента с разбивкой по курсам и семестрам.

Статей на данную тему с примерами вывода колонтитулов и повторов шапки таблицы в интернете, в том числе и здесь на Инфостарте довольно много. Однако, когда возникла описанная выше задача, готового варианта реализации всех названных условий не нашлось (лишь фрагментарно), поэтому был написан некий свой универсальный вариант.
Основным источником идеи для алгоритма был этот пост на Инфостарте от Игоря (за что ему большое спасибо!) под названием «Что делать если в табличный документ нужно выводить колонтитулы с картинками».

Привожу код получившейся основной рекурсивной функции вывода в табличный документ колонтитулов и повторения шапки таблицы:

Как использовать данную функцию

Что понадобится задать в макете для использования функции:
1) область пустой строки,
2) область верхнего колонтитула с произвольным содержимым,
3) область нижнего колонтитула с произвольным содержимым,
4) области шапок таблиц.

В коде их соответственно зачитываем:

Заполняем колонтитулы значениями параметров, если они присутствуют, например:

При создании табличного документа необходимо задать размер и параметры страницы, чтобы корректно вычислялись страницы при переносе:

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

Пример вывода какой-либо области:

Пример вывода таблицы:

Параметр ЗапретВисячихШапокТаблицы в функции задан безусловно в Истина, но при использовании данной функции Вы можете вынести параметр за ее пределы и сделать настраиваемым, главное, что есть такая возможность.

Пример повтора шапки таблицы:

Почему в задаче был упомянут корректный вывод нижнего колонтитула на последней странице? Потому что при тех способах, что советовали в других статьях (например, просто добавить область нижнего колонтитула к последней выводимой области в документе) получалось, что колонтитул отображался не в самом низу страницы, а там, где закончился документ (например, где-нибудь посередине, а бывало и в вверху). В указанной функции для этого используется область пустой строки (т.е. последняя страница «дополняется» до самого низа пустыми строками и только в самом конце выводится нижний колонтитул).
Вот пример вывода последней страницы:

Поэтому, после вывода всех данных в табличный документ делаем завершающий вызов функции, если нужно корректно завершить страницу с нижним колонтитулом:

Скачать готовый пример отчета с данной функцией можно здесь (в примере используется тот же код, что представлен в статье):
Произвольные колонтитулы и повтор шапки таблицы в табличном документе (пример в виде внешнего отчета)

Источник

Вывод колонтитулов с привязкой к размеру страницы

(3) Есть такой метод, но я не знаком с его работой. Подскажите если вам это известно.

СекцияДоп секция «пустая строка с высотой 1» — для того что бы нижний колонтитул всегда ровно ложился.

Такую вот технологию нашел, но как применить пока не знаю.

Есть ещё вот такой пример.

Суть вопроса такова.

Я не говорю пока когда в документе много строк. И нужно делать соответствующую обработку.

Но вот например, что я не понимаю.

1. Вывод титульного листа. Нужно что бы картинка верхнего колонтитула выводилась вверху, а картинка нижнего колонтитула выводилась внизу.
Титульный лист выводится одним макетом. Если в нем выводится это не так как нужно. Как сделано статически в ворде. Это самому нужно как то подгонять?
Через предварительный просмотр это можно выявлять?

2. Если в документе мало строк, то нижний колонтитул с картинкой выводится по средине страницы, а должен так же внизу как при статическом выводе в документе ворд.
Как этим управлять? Считать строки? Они тоже погут быть разной величины. (2) Я как понимаю не подойдет, потому что тут я вывожу изображение в месте колонтитула.

Методом проб, и проверок в предварительном просмотре, добился что бы титульный выводился на 1 страницу.
И колонтитулы что бы были вверху страницы и внизу. Колонтитулы представляют собой изображения.
То есть так делается?

Думал как то задавать одинаковую высоту строк, и есть определенные параметры, когда столько то строк умещается на одном листе.

Хотя если сбиваешь высоту строк, потом как её примести к высоте по умолчанию тоже не понятно.

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

1). Пока такая задача. Имеется ВерхнийКолонтитул, НижнийКолонтитул и Строки .

2). Ещё есть Титульный. Отдельная секция. И подвал, отличающийся от нижнего колонтитула. Который нужно вывести в конце всего выводимого макета.

Пока что не пойму как это все применить. И какой из этих примеров мне нужен.

Также стоит отметить что параметры: «ТабличныйДокумент.ПолеСверху» и «ТабличныйДокумент.ПолеСнизу» не должны быть заданы программно.

Вот эту процедуру не проверял. Но кажется она зацикленная? Рекурсивная, судя по коду .

Вот, делаю под себя. А где вывод самих строк?

(19) То есть вывод строк, идет до вызова этой процедуры?

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

(19) Или все же вывод самих строк, будет в этой процедуре (18). Да что я нашел примеры, они наверное только идею подкидывают а сами не рабочие. И уже самому в процессе тестирования, нужно их дорабатывать.

(19) Вот, кажется по смыслу. Отредактировал процедуру. Правильно же??

Если можно подскажите пожалуйста, какой тут заложен смысл, и что не доработанно? Я не понимаю.

Источник

Расширение возможностей печати: Вывод произвольного нижнего и верхнего колонтитула

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

Когда решив использовать функция для вывода всего содержимого страницы, а порой двух, трёх, четырёх. Выявились у этого алгоритма огрехи, частично из-за проблем самой платформы с. Функция проверки возможности вывода ТабличныйДокумент.ПроверитьВывод(МассивДляПроверки) всегда возвращает клади Ложь если перед этим в ТабличныйДокумент не было выведено ни одной области. На массивах с большим количеством областей печати, код мог иногда выводить содержимое частично, оставляя 1/2 — 1/4 страницы не занятой, всё как обычно — ТабличныйДокумент.ПроверитьВывод(МассивДляПроверки) возвращала Ложь.

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

Область колонтитула прижимается к низу страницы многократным выводом тоненькой пустой области печати, 1/5 стандартной высоты строки.

Вывод ускоряем строками разной высоты, на примере они раскрашены разными цветами.

Пример использования вывода:

Плюсы моего решения:

  • Выводит в колонтитулы абсолютно любую область с любым содержанием.
  • Запрет вывода колонтитула на первой и последней странице. Актуально для договоров, когда на каждой странице кроме последней выводишь подписи сторон.
  • Прижимание области колонтитула к низу страницы.
  • Пока отсутствует вывод верхнего колонтитула (не актуально, решаемо).
  • Отсутствуют параметры с указанием номера текущей страницы (решается двойным формированием, либо вывод в цикле способом #1).
  • После изменения размеров верхнего и нижнего отступов необходимо заново формировать печатную форму.
  • Ощутимо медленно работает, хотя не критично.
  • 21.02.2018 Авто масштаб по ширине и широкая форма рушат всю логику. 1с делает вывод с учётом высоты страницы, а уже после поджимает результат по ширине.

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

П.С. Тестировалось на платформе: 8.3.9.2170.
В обработке бонусом идёт функция проверки существования макета печатной формы, схожий в действии с функцией — ОбщегоНазначения.ЕстьРеквизитДокумента(), только ищет макет. Легко модернизируется на получение самого макета.

П.П.С. Обращение к разработчикам 1С. Добавьте к своему функционал печати возможность указать как начальную, так и конечную страницу вывода колонтитула, + возможность указанием в качестве шаблона произвольной области макета.

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

Источник

Читайте также:  Чем можно вывести соли с почек
Оцените статью