Дизайнер отчетов FastReport

Элементы, размещаемые в шаблоне
Понятие о языке скриптов PascalScript. Функции.
Советы по разработке шаблонов отчетов

Файлы шаблонов документов модуля Reports хранятся в формате FastReport FR3. Для разработки шаблонов в модуль встроен Дизайнер отчетов FastReport, который представляет собой систему для визуального проектирования отчета со встроенным Pascal-подобным языком программирования. Такой подход открывает более чем широкие возможности для построения любых документов.

Итак, помечаем участок и вызываем генератор отчетов. Далее действуем следующим образом:

Давайте попробуем отредактировать шаблон каталога координат. Для этого воспользуемся все тем же файлом Пример (2 участка).dmf, выберем тип отчета Одиночный и документ Каталог координат из категории Приватизація. Примерный вид окна дизайнера с загруженным в него шаблоном Catalog.fr3 показан на Рис.12.13.

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

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

Рабочее поле организовано в виде закладок.

Элементы, размещаемые в шаблоне

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

Страница

Документация еще называет ее формой отчета. Служит подосновой для остальных элементов. Может иметь различный формат.

Бэнд

Бэнд (или иначе “полоса”) это, пожалуй, основной строительный элемент для структурирования табличного отчета. Бэнды разделяют на служебные (заголовки, “подвалы”) и дата-бэнды (то есть бэнды, содержащие данные). Последние выводятся столько раз, сколько строк имеется во входных данных.

Бэнды могут образовывать что-то вроде иерархии. Например, после данных полученных из участка (первого), выводятся данные каталога координат (N точек). Далее снова повторяется бэнд участка (второго) и опять координаты точек - и так далее, до исчерпания всех выбранных для отчета участков.

Именно по этому принципу строится шаблон отчета, показанный на Рис.12.13.

Текст

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

RichText

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

Рисунок

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

Фигура

Различные геометрические фигуры, применяемые для оформления отчета. Здесь имеются линии, прямоугольники, эллипсы, ромбы, стрелки и многое другое.

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

Каждый элемент шаблона (объект) имеет имя и программный тип (собственно, тип и делает объект тем чем он есть - рисунком или мемо). Через свое имя объекты шаблона доступны в программном коде скрипта шаблона. Имя и свойства выбранного объекта можно посмотреть и изменить в панели Инспектора. Там же происходит назначение событий.

Понятие о языке скриптов PascalScript. Функции.

В этой книге мы уже не раз говорили о функциях, использующихся при описании производных параметров и в шаблонах документов 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; 1

procedure Memo33OnBeforePrint(Sender: TfrxComponent); 2
begin
  with Memo33, Engine do
  begin
    Num:=PARAM('НД'); 3                                                                                                          
    if Num='' then
     Visible:=false
  end
end;

procedure Memo15OnBeforePrint(Sender: TfrxComponent); 4
begin
  S:=Param(-7);
  if S='20000' then Who:='Землекористувач:' else Who:=Param(-5); 5                                                                              
end;

begin 
 6
end.

1

В секции var декларируются две переменные строкового типа с именами Num и Who.

2

Процедура (подпрограмма), которая вызывается в ответ на событие OnBeforePrint элемента Memo33. Этот элемент можно рассмотреть на Рис.12.13 слева над “шапкой” каталога координат.

Примечание

Отметим, что элементы имеющие “привязанный” код, помечены в окне дизайнера маленьким красным треугольничком.

3

Извлекаем номер участка из параметра с тегом НД. Если номер отсутствует (пустая строка) то свойству Visible элемента Memo33 присваиваем False, тем самым отключая его отображение. Свойство Visible связано в элементом Memo33 конструкцией with.

4

Процедура (подпрограмма), которая вызывается в ответ на событие OnBeforePrint элемента Memo150.

5

Извлекаем код слоя участка из фиксированного параметра -7. Если код равен 20000, то есть соответствует слою “IN4_Ділянка”, то выводим “Землекористувач”, иначе выводим имя слоя (то есть значение из параметра -5).

6

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

Советы по разработке шаблонов отчетов

Главный совет при разработке шаблонов: учитесь на примерах. Не стесняйтесь экспериментировать, внося изменения в поставляемые шаблоны. Если вы боитесь напортачить, то сделайте копию файлов с расширением FR3, находящихся в папке Templates.

Особенностью проектирования шаблонов отчетов в модуле Reports является тот факт, что в ряде случаев вы можете обойтись вообще без бэндов. Для примера, обратитесь к шаблону Технічна документація. Учитывая, что данный шаблон “заточен” под выдачу документа на один единственный участок, усложнять себе жизнь бэндами не было нужды.

Разработчику этого шаблона удалось обойтись без бэндов и в пофамильной версии отчета, которая предназначена для выдачи документов для пары участков с целевыми назначениями ОЖБ и ОСГ. Дополнительные аргументы функции PARAM позволяют извлечь данные из второго участка по его номеру, а сам номер участка можно отыскать, написав довольно простой код в скрипте.

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

Отсюда возникает еще один совет: вспоминаем школьные уроки информатики. Ну и не забываем заглядывать в справочную систему.