Назад | Содержание | Вперед |
На первый взгляд кажется, что в сфере создания и печати отчетов в 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 5.0 разработан фирмой Nevrona и входит в состав Delphi 7 в качестве основного средства для создания отчетов. Он состоит из трех частей:
Генератор отчетов устанавливается при инсталляции Delphi в папку \Delphi7\Rave5. Исходные коды компонентов разработчикам в Delphi недоступны.
Безусловно, визуальная среда разработки заметно упрощает процесс создания отчетов и позволяет добиться лучших результатов меньшими усилиями, чем в генераторе отчетов Quick Report, который использовался в предыдущих версиях Delphi. Тем не менее при первом знакомстве с продуктом заметны и его недостатки. Система помощи оставляет тягостное впечатление не только своей крайней лаконичностью, но и фактическими ошибками. Многие свойства и методы остались недокументированными, и наоборот — имеющиеся в статьях подсказки описания не имеют реальных аналогов в коде компонентов.
Однако будем надеяться, что недостатки будут со временем исправлены. А мы займемся детальным знакомством с процессом создания отчетов.
Компоненты для создания отчетов и управления расположены на странице Rave Палитры компонентов. Они делятся на следующие функциональные группы.
Подробнее об использовании компонента TRvproject рассказывается в ниже в этой главе.
Подробнее об использовании компонента TRvSystem рассказывается в ниже в этой главе.
К этой группе относятся компоненты:
Подробнее об использовании этих компонентов рассказывается в гл. 25.
К этой группе относятся компоненты:
Подробнее об использовании компонентов преобразования данных рассказывается ниже в этой главе.
Завершив обзор нового генератора отчетов, давайте обратимся к деталям программирования и посмотрим, что нужно сделать, чтобы приложение могло работать с отчетами.
Основой отчета является файл отчета с расширением 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 обеспечивает представление в приложении отчета. Для того чтобы связать проект отчета 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 в один из трех системных приемников:
За это отвечает свойство
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 означают следующее:
Во время выполнения любой из перечисленных операций вывода отчета открывается окно состояния процесса (рис. 23.5). Его заголовок определяется свойством
property TitleStatus: TFormatString;
Рис. 23.5. Форма состояния процесса вывода отчета компонента TRvSystem
В нем отображается информационная строка состояния, которая может быть настроена при помощи свойств объекта SystemFiler, представленного в компоненте TRvSystem одноименным свойством.
Вложенное свойство
property StatusFormat: string;
определяет строку форматирования для текста о состоянии процесса. Для нее предусмотрены следующие управляющие символы:
Вложенное свойство
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 обозначают следующее:
В качестве основного средства создания отчетов и их использования в приложениях в состав Delphi 7 включен генератор отчетов Rave Reports 5.0. В его состав входят ядро генератора отчетов, визуальная среда создания отчетов и набор компонентов.
Ядро генератора отчетов обеспечивает предварительный просмотр или печать отчета. Оно включается в исполняемый файл приложения. Поэтому разработчики избавлены от необходимости распространять совместно с приложением какие-либо дополнительные файлы.
Визуальная среда создания отчетов позволяет разрабатывать самые разнообразные отчеты, в том числе использующие наборы данных из источников различных типов.
Набор компонентов предоставляет разработчику инструментарий для управления отчетом в приложении.
Назад | Содержание | Вперед |