Файлы шаблонов документов модуля Reports хранятся в формате FastReport FR3. Для разработки шаблонов в модуль встроен Дизайнер отчетов FastReport, который представляет собой систему для визуального проектирования отчета со встроенным Pascal-подобным языком программирования. Такой подход открывает более чем широкие возможности для построения любых документов.
Итак, помечаем участок и вызываем генератор отчетов. Далее действуем следующим образом:
Чтобы отредактировать существующий шаблон, укажите тип отчета, выберите документ в дереве категорий - словом, выполните те же действия, что и при генерации документа. Далее нажмите кнопку или выполните соответствующую команду из меню .
Откроется окно дизайнера FastReport, в который будет автоматически загружен файл шаблона отчета, ассоциированный с выбранным документом. Теперь можно вносить изменения.
Чтобы создать шаблон на базе другого шаблона, выполните те же действия для документа, который послужит базой для нового шаблона.
После открытия окна дизайнера, сохраните документ под новым
именем (обычно в папку Templates
). Теперь
отредактируйте шаблон. После выхода из дизайнера, назначьте новый
шаблон одному из документов в редакторе пакетов.
Чтобы создать новый шаблон, выберите любой документ, а затем выполните команду меню > .
Откроется окно дизайнера с пустым документом. Создайте и разместите в шаблоне требуемые элементы. После выхода из дизайнера, ассоциируйте новый шаблон с одним из документов.
Давайте попробуем отредактировать шаблон каталога координат. Для
этого воспользуемся все тем же файлом Пример (2
участка).dmf
, выберем тип отчета
Одиночный и документ Каталог
координат из категории Приватизація.
Примерный вид окна дизайнера с загруженным в него шаблоном
Catalog.fr3
показан на Рис.12.13.
Как можно видеть, дизайнер представляет собой полноценное приложение с главным меню, панелями инструментов и рабочим полем, где и происходит разработка шаблона.
Панели инструментов и команды меню призваны обеспечить вас всем необходимым для работы. Здесь есть кнопки вставки в шаблон различных элементов, кнопки для настройки стиля отображения и выравнивания элементов отчета, не забыты и стандартные кнопки для открытия и сохранения.
Рабочее поле организовано в виде закладок.
На закладке Код находится программный
скрипт всех функций, связанных с элементами шаблона, а также с
самим шаблоном. Обычно код выполняется по определенному событию -
чаще всего по событию OnBeforePrint
, которое
возникает перед выводом элемента на экран или принтер.
Закладка Данные шаблона отчета пуста, но будьте уверены, что все необходимые датасеты к нашему шаблону уже подключены. В каждом шаблоне доступны четыре датасета, сформированные для нас модулем Reports (чтобы проверить это, выполните команду меню > ):
Хранит параметры помеченных объектов. Общее количество
объектов возвращает функция ObjCount
.
Обращаться к параметрам можно по ссылке с номером вида
[FP0]
(для фиксированных параметров) или
[P2]
(для остальных).
Впрочем, есть более удобный способ - воспользоваться
услугами функции
Param(
.
Например, ссылка ИмяТегаIN4
)[Param('NM')]
извлечет
имя землепользователя.
В рамках шаблона отчета все ссылки на параметры,
переменные скрипта и функции заключаются в [
]
квадратные скобки. Такие ссылки можно
смешивать со статическим текстом (то есть с постоянной его
частью). Обратите внимание, что строковые значения берутся
в одинарные кавычки.
Данные дочерних объектов. Узнать, сколько дочерних
объектов имеется у объекта с номером N
,
можно с помощью функции ChildCount(N)
.
Для доступа к параметрам дочерних объектов применяется
версия функции Param
с дополнительными
аргументами.
Данные по угодиям объекта (то есть его экспликация).
Например, ссылка [Expl05] отобразит площадь угодий с кодом
05. (Где искать коды угодий, мы указали
в настройках модуля Reports - в параметре с тегом
CN
.)
Каталог координат объекта. Каталог передается в виде
столбцов данных, в соответствии с шаблоном текстового отчета
Reports.rep
. Обращение к столбцам
каталога происходит по ссылкам вида
[Col0]
, [Col1]
и так
далее, до последнего столбца.
Закладки страниц отчета. В рассматриваемом шаблоне есть только одна страница - Page1, но в общем случае их может быть больше. Кроме страниц, в отчете могут присутствовать формы ввода данных с именами вида DialogPage1.
На странице размещаются элементы (объекты) шаблона, которые и задают внешний вид и содержимое будущего документа.
Опишем элементы, которые чаще всего используются в шаблонах отчетов. За более подробной информацией вам придеться обратиться к справочной системе модуля Reports и дизайнера Fastreport.
Документация еще называет ее формой отчета. Служит подосновой для остальных элементов. Может иметь различный формат.
Бэнд (или иначе “полоса”) это, пожалуй, основной строительный элемент для структурирования табличного отчета. Бэнды разделяют на служебные (заголовки, “подвалы”) и дата-бэнды (то есть бэнды, содержащие данные). Последние выводятся столько раз, сколько строк имеется во входных данных.
Бэнды могут образовывать что-то вроде иерархии. Например, после данных полученных из участка (первого), выводятся данные каталога координат (N точек). Далее снова повторяется бэнд участка (второго) и опять координаты точек - и так далее, до исчерпания всех выбранных для отчета участков.
Именно по этому принципу строится шаблон отчета, показанный на Рис.12.13.
Иначе называется мемо. Вероятно, самый популярный отображаемый элемент. Может содержать как статический текст, так и ссылки. Может иметь обрамление, может выводиться с различным стилем и цветом шрифта, умеет выравнивать текст в пределах элемента и даже менять направление текста на один из фиксированных углов.
Элемент предназначен для отображения форматированных многострочных текстов в формате RTF. Позволяет задавать выравнивание абзацев, стили шрифта для отдельных частей текста и так далее.
Позволяет загрузить и отобразить выбранный растровый файл. Загрузку можно выполнять и динамически, например, в обработчике события.
Различные геометрические фигуры, применяемые для оформления отчета. Здесь имеются линии, прямоугольники, эллипсы, ромбы, стрелки и многое другое.
FastReport - это объектно-ориентированная система. Все элементы отчета, включая сам отчет, страницы, бэнды, текстовые элементы (мемо), рисунки и прочее являются объектами, каждый из которых имеет свой набор свойств и событий.
Каждый элемент шаблона (объект) имеет имя и программный тип (собственно, тип и делает объект тем чем он есть - рисунком или мемо). Через свое имя объекты шаблона доступны в программном коде скрипта шаблона. Имя и свойства выбранного объекта можно посмотреть и изменить в панели Инспектора. Там же происходит назначение событий.
В этой книге мы уже не раз говорили о функциях, использующихся при описании производных параметров и в шаблонах документов DMT. Разумеется, что такая мощная система, как FastReport, также имеет в своем арсенале подобный инструментарий.
Функции, доступные в FastReport, можно найти на закладке Функции в панели Дерево данных. Здесь каждая функция включена в определенную категорию: Математические, Строки, Форматирование и другие.
Особый интерес вызывает категория Digitals. В эту категорию включены функции, аналогичные тем, что используются при работе с шаблонами DMT. В силу особенностей синтаксиса языка PascalScript, конкретный способ вызова функции может несколько отличаться от рассмотренного ранее. Некоторые функции имеют другое имя, а где-то меняется набор аргументов. Общим для всех функций является то, что строковые агрументы следует заключать в одинарные кавычки.
При выборе конкретной функции из списка, в нижней части панели
появляется ее описание, поэтому формального обзора мы здесь делать
не будем. Вместо этого дадим несколько примеров использования из
реального шаблона Catalog.fr3
.
Еще раз напомним, что вызовы функций и переменные скриптов в
текстовых элементах шаблона FastReport заключаются в [
]
квадратные скобки. В тексте скрипта, напротив, функции
используются как есть. Хорошее описание основных функций категории
Digitals имеется в справке модуля Reports в
разделе > > > .
[Who]
Выводит переменную с именем Who
,
которая определена в коде события соответствующего текстового
элемента. (Смотрите код ниже.)
[PARAM('NM')]
, [PARAM('AS')]
Извлекает данные участка по тегу формата IN4. В данном случае это имя землепользователя и площадь участка.
Ділянка №
<b>[Num]</b>
Обращение к переменной Num
,
определенной в коде. Как видите, переменная включена в
статический текст. Обратите также внимание на символы
форматирования <b> </b>
,
которые включают и отключают вывод жирным шрифтом.
Обчислив:
[FILE('Setup.ini','Обчислив')]
Обращение к аналогу DMT функции
FIL
, которая извлекает текстовые константы
из файла.
Теперь, пожалуй, стоит познакомиться с языком PascalScript.
Чтобы не быть голословными, приведем фрагмент скрипта из шаблона
Catalog.fr3
, с которым мы познакомились выше.
Вот текст кода:
var Num,Who: string; procedure Memo33OnBeforePrint(Sender: TfrxComponent); begin with Memo33, Engine do begin Num:=PARAM('НД'); if Num='' then Visible:=false end end; procedure Memo15OnBeforePrint(Sender: TfrxComponent); begin S:=Param(-7); if S='20000' then Who:='Землекористувач:' else Who:=Param(-5); end; begin end.
В секции | |
Процедура (подпрограмма), которая вызывается в ответ на
событие ПримечаниеОтметим, что элементы имеющие “привязанный” код, помечены в окне дизайнера маленьким красным треугольничком. | |
Извлекаем номер участка из параметра с тегом
| |
Процедура (подпрограмма), которая вызывается в ответ на
событие | |
Извлекаем код слоя участка из фиксированного параметра -7. Если код равен 20000, то есть соответствует слою “IN4_Ділянка”, то выводим “Землекористувач”, иначе выводим имя слоя (то есть значение из параметра -5). | |
В этой секции можно разместить стартовый код отчета, который выполнится сразу после запуска шаблона на генерацию документа. В стартовом коде выполняются все необходимые приготовления. |
Главный совет при разработке шаблонов: учитесь на
примерах. Не стесняйтесь экспериментировать, внося
изменения в поставляемые шаблоны. Если вы боитесь напортачить, то
сделайте копию файлов с расширением FR3,
находящихся в папке Templates
.
Особенностью проектирования шаблонов отчетов в модуле Reports является тот факт, что в ряде случаев вы можете обойтись вообще без бэндов. Для примера, обратитесь к шаблону Технічна документація. Учитывая, что данный шаблон “заточен” под выдачу документа на один единственный участок, усложнять себе жизнь бэндами не было нужды.
Разработчику этого шаблона удалось обойтись без бэндов и в
пофамильной версии отчета, которая предназначена для выдачи
документов для пары участков с целевыми назначениями ОЖБ и ОСГ.
Дополнительные аргументы функции PARAM
позволяют
извлечь данные из второго участка по его номеру, а сам номер участка
можно отыскать, написав довольно простой код в скрипте.
Вообще, анализируя поставляемые с Digitals шаблоны можно заметить, что написанию в них программного кода отводится ведущая роль. Очень часто используется следующий подход: после запуска шаблона на выполнение в стартовом коде отчета вычисляются все необходимые в дальнейшем переменные, которые и используются в элементах шаблона вместо прямых вызовов функций.
Отсюда возникает еще один совет: вспоминаем школьные уроки информатики. Ну и не забываем заглядывать в справочную систему.