Delphi для профессионалов

         

ГЛАВА 23

Компоненты Rave Reports и отчеты в приложении Delphi

На первый взгляд кажется, что в сфере создания и печати отчетов в Delphi 7 произошла небольшая революция. Просматривая первый раз Палитру компонентов, вы не найдете в ней хорошо знакомой по прошлым версиям Delphi страницы QReport. Вместо старого генератора отчетов в состав Delphi 7 включен продукт Rave Reports 5.0 от фирмы Nevrona. "Ну и почему же это событие не дотягивает до революции в отчетах?" — спросит читатель. Авторы могут обосновать свою точку зрения.

Во-первых, компоненты QReport по-прежнему доступны разработчику — пакет DCLQRT70.BPL все так же занимает прочное место в папке \Delphi7\Bin и может быть установлен в Палитру компонентов обычным способом. Да и было бы странно ожидать другого от фирмы Borland, которая бдительно следит за обратной совместимостью приложений. Посмотрите к примеру на страницу Win 3.1 Палитры компонентов — новые поколения программистов никогда не видели "прабабушку" Windows XP, и все же исторические компоненты занимают свое исконное место!

Во-вторых, схема создания и внедрения отчетов в приложения Delphi практически не изменилась. В Rave Reports имеются и глобальный класс отчета, и классы полос, и компоненты преобразования данных. Существенным нововведением можно считать только визуальную среду создания отчетов, что несомненно облегчит жизнь создателей отчетов и сделает их работу эффективнее и приятнее.

Тем не менее, в Delphi 7 генератор отчетов Rave Reports является основным средством создания отчетов и его компоненты устанавливаются в Палитре компонентов по умолчанию на странице Rave. Поэтому главы этой части посвящены разнообразным аспектам разработки отчетов в Rave Reports.



В данной главе рассматриваются следующие вопросы:

 какие компоненты входят в состав Rave Reports и на какие функциональные группы они делятся;  что такое проект отчета и его структура;  как включить отчет в состав приложения и какие компоненты для этого необходимы;  компоненты управления отчетами.

 

в качестве основного средства для






Генератор отчетов Rave Reports 5.0 разработан фирмой Nevrona и входит в состав Delphi 7 в качестве основного средства для создания отчетов. Он состоит из трех частей:

 ядро генератора отчетов обеспечивает управление отчетом и его предварительный просмотр, и отправку на печать. Исполняемый код ядра сервера включается в приложение Delphi, делая его полностью автономным при работе с отчетами на компьютере клиента;  визуальная среда разработки отчетов Rave Reports предназначена для разработки самих отчетов. Она позволяет добавлять к отчету страницы, размешать на них графические и текстовые элементы управления, подключать к отчетам источники данных и т. д. Отчеты сохраняются в файлах с расширением rav и должны распространяться совместно с приложениями, использующими их;  компоненты Rave Reports расположены на странице Rave Палитры компонентов Delphi. Они обеспечивают управление отчетами в приложении. Генератор отчетов устанавливается при инсталляции Delphi в папку \Delphi7\Rave5. Исходные коды компонентов разработчикам в Delphi недоступны.

Безусловно, визуальная среда разработки заметно упрощает процесс создания отчетов и позволяет добиться лучших результатов меньшими усилиями, чем в генераторе отчетов Quick Report, который использовался в предыдущих версиях Delphi. Тем не менее при первом знакомстве с продуктом заметны и его недостатки. Система помощи оставляет тягостное впечатление не только своей крайней лаконичностью, но и фактическими ошибками. Многие свойства и методы остались недокументированными, и наоборот — имеющиеся в статьях подсказки описания не имеют реальных аналогов в коде компонентов.

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

Компоненты Rave Reports и их назначение


Компоненты для создания отчетов и управления расположены на странице Rave Палитры компонентов. Они делятся на следующие функциональные группы.

 Компонент отчета TRvproject, с точки зрения приложения, и есть отчет. Он обеспечивает загрузку заранее созданного в визуальной среде Rave Reports отчета из файла с расширением rav.

Подробнее об использовании компонента TRvproject рассказывается в ниже в этой главе.

 Компонент управления отчетом TRvSystem обеспечивает работу приложения с отчетом. Взаимодействуя с компонентом отчета, с одной стороны, и сервером отчета Rave Reports, с другой, этот компонент обеспечивает просмотр и печать отчетов.

Подробнее об использовании компонента TRvSystem рассказывается в ниже в этой главе.

 Компоненты соединения с источниками данных предназначены для подключения различных источников данных к отчетам. При этом могут использоваться технологии доступа к данным ADO, BDE, dbExpress (см. часть IV).

К этой группе относятся компоненты:

 TRvCustomConnection;  TRvDataSetConnection;  TRvTableConnection;  TRvQueryConnection.

Подробнее об использовании этих компонентов рассказывается в гл. 25.

 Компоненты преобразования данных позволяют конвертировать отчеты из формата данных Rave Reports в другие форматы (текстовый, PDF, HTML, RTF), а также распечатывать или просматривать отчеты.

К этой группе относятся компоненты:

 TRvNDRWriter;  TRvRenderHTML;  TRvRenderPreview;   TRvRenderRTF;  TRvRenderPrinter;  TRvRenderText.  TRvRenderPDF;

Подробнее об использовании компонентов преобразования данных рассказывается ниже в этой главе.

 

Отчет в приложении Delphi


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

Основой отчета является файл отчета с расширением rav. Он создается в визуальной среде разработки Rave Reports и может содержать произвольное число страниц. Каждая страница может быть оформлена графическими или текстовыми элементами или отображать данные из какой-либо базы данных. Другими словами, файл RAV — это проект будущего отчета, содержащий общую информацию об отчете, оформление его страниц и правила их заполнения.

После создания проект отчета необходимо связать с приложением Delphi. Для этого используется компонент TRvProject (рис. 23.1). Этот компонент обеспечивает представление отчета в приложении.

Но этого недостаточно, чтобы просмотреть или напечатать отчет. Для выполнения этих операций используется код ядра генератора отчета, который автоматически прикомпилируется к исполняемому коду приложения при переносе на любую форму проекта компонентов TRvProject и TRvSystem. Для управления операциями печати и просмотра в проекте должен присутствовать компонент TRvSystem (рис. 23.1).

Рис. 23.1. Компоненты Rave Reports в приложении Delphi

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

1. При помощи визуальной среды разработки Rave Reports необходимо создать проект отчета и сохранить его (см. гл. 24).

2. Перенести в проект приложения в Delphi компонент TRvProject и связать его с файлом проекта отчета (см. ниже) при помощи свойства ProjectFile.

3. Перенести в проект приложения в Delphi компонент TRvSystem и связать его с компонентом TRvProject. ля этого используется свойство Engine компонента TRvProject (см. ниже).

4. Написать код приложения, обеспечивающий просмотр и печать отчета (при необходимости и другие операции), используя методы компонента TRvProject (см. ниже).

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

 

Компонент отчета TRvProject


Компонент TRvProject обеспечивает представление в приложении отчета. Для того чтобы связать проект отчета Rave Reports с компонентом, используется свойство

property ProjectFile: string;

До начала печати необходимо связать компонент TRvProject с компонентом управления отчетом TRvSystem. Для этого достаточно передать в свойстве

property Engine: TRpComponent;

 ссылку на компонент TRvSystem.

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

procedure LoadFromFile(FileName: String);

 procedure LoadFromStream(Stream: TStream);

Загруженный отчет становится текущим.

Кроме этого существует и пара методов для сохранения отчета:

function SaveToFile(FileName: String); 

procedure SaveToStream(Stream: TStream);

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

Забегая немного вперед (см. гл. 24), скажем, что один файл проекта отчета может содержать несколько независимых отчетов. Каждый из них идентифицируется в компоненте TRvProject тремя свойствами. Имя, полное имя и описание отчета содержатся соответственно в трех свойствах только для чтения:

property ReportName: String; 

property ReportFullName: String; 

property ReportDesc: String;

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

function SelectReport(ReportName: string; FullName: boolean): boolean;

В параметре ReportName передается имя нужного отчета. Если параметр FullName имеет значение True, то это полное имя отчета, иначе — имя отчета.

В случае, если проект содержит несколько отчетов, их имена доступны при помощи метода

procedure GetReportList(ReportList: TStrings;FullName: boolean);

Список имен будет возвращен в список строк ReportList, а параметр FullName определяет, какие именно имена будут занесены в список. При значении параметра True метод возвращает полные имена отчетов (соответствует свойству ReportFullName), иначе — имена (соответствует свойству  ReportlName).

Например, код

var ReportList: TStringList; i: Integer;

ReportList := TStringList.Create;

RvProjectl.Open;

try

RvProjectl.GetReportList(ReportList, False);

for i := 0 to ReportList.Count - 1

do RvProjectl.ExecuteReport(ReportList[I]); 

finally

RvProjectl.Close;

ReportList.Free;

 end;

последовательно печатает все отчеты, входящие в состав файла проекта отчета.

Файл проекта отчета можно включить в состав исполняемого файла приложения. Для этого используется свойство

property StoreRAV: Boolean;

При щелчке на кнопке в строке этого свойства в Инспекторе объектов открывается специализированный редактор Load Into exe (рис. 23.2).

Рис. 23.2. Редактор свойства StoreRAV компонента TRvProject

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

property RaveBlobDateTime: TDateTime;

Отправить отчет на печать можно методом

procedure Execute;

или же методом

procedure ExecuteReport(ReportName: string);

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

Отчет, содержащийся в компоненте Trvproject, может быть открыт для редактирования методом

procedure Open;

Не открывая отчет, вы не сможете использовать большинство свойств и методов компонента. Дело в том, что при открытии компонент загружает отчет из файла проекта или прикомпилированного кода (в случае использования свойства StoreRAV).

Сохранение и закрытие отчета соответственно выполняются методами

procedure Save; procedure Close;

Кроме этого, действия, аналогичные методам open и close, выполняются свойством

property Active: Boolean;

Если свойству присвоить значение True — отчет открывается, иначе — закрывается.

До и после открытия и закрытия отчета вызывается четверка методов-обработчиков:

property aeforeOpen: TNotifyEvent;

property AfterOpen: TNotifyEvent;

property BeforeClose: TNotifyEvent; 

property AfterClose: TNotifyEvent;

 

Компонент управления






Компонент управления отчетом TRvSystem обеспечивает выполнение основных операций с отчетом из приложения. В приложении он должен быть связан с компонентом TRvProject (см. выше разд. "Компонент отчета TRvProject" данной главы). Этого вполне достаточно, чтобы компонент TRvSystem выполнил свою работу. У разработчика нет необходимости вызывать какие-либо методы компонента, чтобы направить отчет на печать.

В его составе инкапсулированы объекты, обеспечивающие вывод отчета из компонента TRvProject в один из трех системных приемников:

 файл (объект класса TSystemFiler);  предварительный просмотр (объект класса TSystemPreview);  принтер (объект класса TSystemPrinter). За это отвечает свойство

type

TReportDest = (rdPreview, rdPrinter, rdFile); 

property ReportDest: TReportDest;

которое может принимать одно из трех значений типа TReportDest.

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

Для вывода в файл это комплексное свойство

property SystemFiler: TSystemFiler;

Внутри него задается имя файла во вложенном свойстве

property FileName: string;

но при этом вложенное свойство

type

TStreamMode = (smMemory, smTempFile, smFile, sraUser); property StreamMode: TStreamMode;

должно иметь значение smFile.

При выводе отчета для предварительного просмотра используется экземпляр класса TSystemPreview, который доступен через свойство

property SystemPreview: TSystemPreview;

Его свойства совпадают со свойствами компонента TRvRenderPreview.

Стандартное диалоговое окно предварительного просмотра отчета Rave Reports представлено на рис. 23.3.

Рис. 23.3. Стандартное диалоговое окно предварительного просмотра компонента TRvSystem

Заголовок этого окна задается свойством

property TitlePreview: TFormatString;

Перед открытием окна предварительного просмотра вызывается метод-обработчик

property OnPreviewShow: TNotifyEvent;

За вывод отчета на печать отвечает инкапсулированный в компоненте объект типа TSystemPrinter. К нему можно обратиться при помощи свойства

property SystemPrinter: TSystemPrinter;

Его свойства совпадают со свойствами компонента TRvRenderPrinter.

Перед тем как отправить отчет одному из трех системных приемников, компонент открывает диалог настройки печати (рис. 23.4).

Рис. 23.4

. Диалог настройки печати компонента TRvSystem Его заголовок определяется свойством

property TitleSetup: TFormatString;

Перед открытием этого окна вызывается метод-обработчик

property OnPreviewSetup: TNotifyEvent;

Кроме этого, для диалога настройки печати можно задать ряд дополнительных параметров. Это делается в свойстве

type

TSystemSetup = (ssAllowSetup, ssAllowCopies, ssAllowCollate,

ssAllowDuplex, ssAllowDestPreview, ssAllowDestPrinter, ssAllowDestFile,

ssAllowPrinterSetup);

TSystemSetups = set of TSystemSetup;

 property SystemSetups: TSystemSetups;

Элементы множества TSystemSetup означают следующее:

 ssAllowSetup — разрешает или запрещает использование диалога настройки печати компонента;  ssAllowCopies — управляет доступностью установки числа копий отчета;  ssAllowCollate — разрешает или запрещает настройку режима печати с разбором страниц по копиям;  ssAllowDuplex — разрешает или запрещает настройку двусторонней печати;  ssAllowDestPreview — разрешает или запрещает использование окна предварительного просмотра;  ssAiiowDestPrinter — разрешает или запрещает использование принтера;  ssAllowDestFile — разрешает или запрещает использование файла для вывода отчета;  ssAiiowPrinterSetup — разрешает или запрещает использование диалога настройки параметров принтера. Во время выполнения любой из перечисленных операций вывода отчета открывается окно состояния процесса (рис. 23.5). Его заголовок определяется свойством

property TitleStatus: TFormatString;

Рис. 23.5. Форма состояния процесса вывода отчета компонента TRvSystem

В нем отображается информационная строка состояния, которая может быть настроена при помощи свойств объекта SystemFiler, представленного в компоненте TRvSystem одноименным свойством.

Вложенное свойство

property StatusFormat: string;

определяет строку форматирования для текста о состоянии процесса. Для нее предусмотрены следующие управляющие символы:

 %с — текущее состояние процесса вывода;  %р — номер текущей страницы;   %f — номер первой страницы;   %1 — номер последней страницы;  %d — название устройства вывода (название принтера, имя файла, предварительный просмотр);  %r — имя драйвера устройства вывода;  %s — общее число страниц;  %t — порт печати;  %о-%9 — номера строк для свойства statusText (см. ниже). Вложенное свойство

property StatusText: TStrings;

позволяет задать до десяти строк (можно задать и больше, но они не будут восприняты строкой статуса) с какой-либо дополнительной информацией, описывающей процесс вывода. Первая строка списка будет выведена при наличии в свойстве statusFormat управляющего символа %0, вторая — при наличии символа %1 и т. д.

При помощи перечисленных свойств вы сможете детально описать процесс вывода отчета. В этом вам помогут методы-обработчики событий компонента TRvSystem.

До начата печати отчета и по его окончании (даже если печать была прервана) соответственно вызывается пара методов-обработчиков:

property OnBeforePrint: TNotifyEvent; 

property OnAfterPrint: TNotifyEvent;

В начале печати непосредственно отчета (не заголовка) вызывается метод-обработчик

property OnPrint: TNotifyEvent;

Если вы печатаете одну страницу, будет вызван метод-обработчик

type

TPrintPageEvent = function(Sender: TObject;

var PageNum: Integer): Boolean;

property OnPrintPage: TPrintPageEvent;

Но до начала печати вызывается метод-обработчик

property OnNewPage: TNotifyEvent;

который обозначает генерацию страницы.

При печати колонтитулов в верхней и нижней частях страницы вызываются методы-обработчики

property OnPrintHeader: TNotifyEvent;

property OnPrintFooter: TNotifyEvent;

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

type

TSystemOption = (soUseFiler, soWaitForOK, soShowStatus, soAllowPrintFromPreview, soPreviewModal);

TSystemOptions = set of TSystemOption; 

property SystemOptions: TSystemOptions;

Элементы типа TSystemOptions обозначают следующее:

 soUseFiler — при установке этой опции в значение True вывод будет направляться в файл, заданный свойством SystemFiler, независимо от других настроек компонента;  SoWaitForOK — если включить эту опцию, генерация отчета будет задержана до момента, когда пользователь нажмет кнопку ОК в диалоге настройки печати компонента (см. рис. 23.4);  soshowstatus — эта опция управляет видимостью окна состояния процесса вывода отчета в компоненте;  soAiiowPrintFromPreview — будучи включенной, эта опция позволяет печатать отчет из окна предварительного просмотра;  soPreviewModal — при значении True делает окно предварительного просмотра модальным.

В качестве основного средства создания




В качестве основного средства создания отчетов и их использования в приложениях в состав Delphi 7 включен генератор отчетов Rave Reports 5.0. В его состав входят ядро генератора отчетов, визуальная среда создания отчетов и набор компонентов.
Ядро генератора отчетов обеспечивает предварительный просмотр или печать отчета. Оно включается в исполняемый файл приложения. Поэтому разработчики избавлены от необходимости распространять совместно с приложением какие-либо дополнительные файлы.
Визуальная среда создания отчетов позволяет разрабатывать самые разнообразные отчеты, в том числе использующие наборы данных из источников различных типов.
Набор компонентов предоставляет разработчику инструментарий для управления отчетом в приложении.