Подсистема печати
Подсистема формирования печатных документов (например, в виде pdf-документов) основана на генераторе отчётов FR VCL, который поставляется с АСР Platex® и состоит из следующих компонентов:
- дизайнер отчётов печатных форм plxReportDesigner
;
- гибкая система привязки печатных форм к биллинговым документам;
- генератор pdf-документов bill_file_generator
.
Компоненты взаимосвязаны следующим образом:
1. Шаблоны печатных форм создаются либо с нуля, либо на основе имеющихся в базовой поставке АСР Platex®.
2. Настраиваются правила, по которым будут выбираться конкретные печатные формы для конкретных видов биллинговых документов.
3. Печатные документы (pdf-файлы) создаются с помощью генератора.
Особенности интеграции FR в АСР Platex®
При разработке печатных форм необходимо понимать работу движка FR, а также контекст, в котором запускается этот движок. Дальнейшее описание подсистемы печати представляет особенности интеграции FR в АСР Platex®.
TplxQuery и SQL-запросы
Для выборки данных из БД используется компонент TplxQuery. TplxQuery - это класс-наследник от FR класса TfrxCustomQuery, предоставляющий интерфейс для выборки данных из БД по SQL-запросу.
Важно понимать, что SQL-запрос из TplxQuery выполняется в контексте текущего подключения к БД. Поэтому доступ к табличным данным АСР ограничен правами доступа учётной записи, от имени которой инициировано это подключение. Для plxReportDesigner
и bill_file_generator
- это разные учётные записи (имеющие общую роль).
Текст SQL-запроса задаётся через свойство TplxQuery.SQL. Мы рекомендуем все SQL-запросы сохранять непосредственно в БД в виде отдельных представлений (в выделенной Вам отдельной схеме, имя которой соответствует шаблону cs_XXX_print, где XXX - зарезервированный за конкретной инсталляцией код), таким образом текст SQL-запроса для TplxQuery будет максимально тривиальным, например:
select * from cs_XXX_print.bill
или
select * from cs_XXX_print.file_data where file_id = :stamp_file_id
В первом SQL-запросе выборка идёт из таблицы биллинговых документов с фильтрацией по текущему документу, причём конкретное значение bill_id первичного ключа документа «спрятано» внутри представления в виде специальной сессионной (контекстной) переменной. Эта переменная заполняется в момент работы bill_file_generator, однако для отладки запросов её можно заполнить вручную вызовом:
select ctx.set('bfg', 'bill_id', '34')
где '34' - это и есть bill_id нужного документа. Получить текущее значение переменной можно так:
select ctx.get_id('bfg', 'bill_id')
Второй запрос работает по принципу master-detail, а для этого необходимо, чтобы были выполнены следующие требования для TplxQuery: - свойство TplxQuery.Master должно ссылаться на соответствующий master набор данных; - master набор данных должен содержать столбцы, имена которых используются при фильтрации второго набора данных по условию where (в данном примере это столбец stamp_file_id).
Типы файлов печатных форм
В разделе Справочники \ Счёт \ Счета \ Печатные формы документов \ Типы файлов печатных документов задаются типы файлов для генерации биллинговых документов.
На текущий момент bill_file_generator
«умеет» формировать только pdf-файлы, однако в будущем, при необходимости, набор доступных типов документов может быть расширен (FR поддерживает более 30 форматов).
Кроме типа формируемого документа (поле Расширение файла) можно указать Доп.атрибуты, которые будут доступны «внутри» печатной формы. Например: печатная форма, предназначенная для непосредственной печати на принтере и печатная форма, которая отсылается клиенту по email, могут отличаться лишь отсутствием или наличием факсимиле подписывающих лиц и печати компании. Для реализации этого в справочнике регистрируются две записи - одна с установленным доп. атрибутом Отображать печать компании, другая - без (сами доп. атрибуты должны быть заранее зарегистрированы). Значение доп. атрибута определяется печатной формой внутри SQL-запроса следующим выражением:
coalesce(bill.bill_file_type_attr_v(ctx.get_id('bfg', 'bill_file_type_id'), 'is_print_stamp', b.bill_dt), '0') as is_print_stamp
и далее ссылка на file_id печати компании может быть сброшена в null, чтобы она не отобразилась в печатной форме таким выражением:
case when is_print_stamp = '1' then stamp.stamp_file_id else null end stamp_file_id
Здесь:
- ctx.get_id('bfg', 'bill_file_type_id')
возвращает id типа файла печатной формы, от имени которого был запущен механизм генерации печатной формы;
- bill.bill_file_type_attr_v(..)
- функция, возвращающая значение доп. параметра is_print_stamp
на дату документа bill_dt
.
plxReportDesigner
plxReportDesigner
- это 64-битное desktop-приложение, которое доступно как для Windows, так и для Linux.
В основе приложения используется FR Designer - это редактор печатных форм, созданный по принципу WYSIWYG.
Подробная информация о FR, а также справочная информация о дизайнере доступна по ссылкам ниже: - https://www.fastreport.ru/public_download/docs/vcl/FR6/HTML_RU/index.html - https://www.fastreport.ru/ru/product/fast-report-vcl/ - https://www.fastreport.ru/ru/download/documentation/
Примечание:
Редактор отчётных форм требует лицензию FR Designer, которая приобретается дополнительно через коммерческий отдел компании Инотех. Другими словами, для того, чтобы сотрудники вашей компании могли самостоятельно создавать или редактировать шаблоны отчётов, вам необходима эта лицензия (по количеству сотрудников, занимающихся разработкой шаблонов).
Основной особенностью plxReportDesigner
является возможность создания шаблонов отчётов непосредственно в БД АСР Platex®.
bill_file_generator
bill_file_generator
- это служба (исполняемый модуль), которая занимается формированием pdf-документов на основе FR-шаблонов, созданных с помощью plxReportDesigner
Правила выбора печатных форм
Правила выбора настраиваются в разделе Справочники \ Счёт \ Справочники счетов \ Шаблоны документов.
В данном разделе доступны следующие справочники:
- Наборы шаблонов документов - используется для объединения нескольких правил в один набор (для удобства);
- Шаблоны документов - используется для определения правил выбора конкретного шаблона печатной формы для биллингового документа.
В базовой версии шаблоны выбираются по основным атрибутам документа:
- тип документа;
- продавец;
- оператор;
- дата документа.
В расширенной версии шаблоны могут выбираться с учётом связанных классификаторов.
Работа в plxReportDesigner
Вход в систему осуществляется путем ввода данных. После нажатия кнопки ОК открывается дизайнер отчетов.
Для создания шаблона отчета используется кнопка Создать .
В пункте меню Вид можно настроить отображение архивных и удаленных отчетов.
Возможные действия над отчетом расположены в панели инструментов и в контекстном меню. Для работы с отчетом в FR используется кнопка Редактировать.
Выход из приложения осуществляется через пункт меню Файл \ Выход.
Программа FR построена на бэнд-ориентированном движке (когда на странице производится работа с разметкой, тогда и создаются бэнды). Бэнды - это разделы, которые в зависимости от типа определяют правила формирования отчета.
Бэндами являются:
Заголовок страницы / подвал страницы, заголовок отчета / подвал отчета - используются как колонтитулы и только 1 раз в отчете. В отчете не может быть 2 и более заголовков страницы / подвалов страницы, заголовков отчета / подвалов отчета.
Данные - это бэнд, в отчете отображается оранжевым цветом и привязывается к набору данных. У него можно создать заголовок / подвал. Уровней этих данных может быть несколько.
У каждого бэнда есть свой набор свойств. Набор этих свойств позволяет определить можно ли переносить заголовок на следующую страницу, показывать подвал на каждой странице или только на последней и т.д.
Во вкладке Данные определяются наборы данных, содержащие запросы к БД.
При нажатии на набор данных открывается окно Текст SQl-запроса. После выполнения запросов полученная информация визуализируется в нужный вид. Для самостоятельного написания запросов к БД можно пользоваться окном отладки.
При нажатии на кнопку Предварительный просмотр можно просмотреть отображение документа перед печатью.