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

         

Безопасность доступа к данным



Безопасность доступа к данным


На третьем этапе созданное соединение и просмотр можно "защитить". Для этого из списка в диалоговом окне Data Connections (см. Рисунок 24.4) выбирается объект аутентификации Data Lookup Security Controller. Он сразу же появляется в словаре просмотра данных Data View Dictionary. Остается только подключить его к нужному просмотру. Для этого используется его свойство Dataview, в котором необходимо задать требуемый объект просмотра. Списки имен пользователей и их пароли задаются свойствами UserField и PasswordField соответственно.

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

Еще один объект — простой объект аутентификации (объект Simple Security Controller в диалоговом окне Data Connections) — в свойстве userList содержит список имен и паролей в формате UserName=Password. Он может использоваться только в отчетах.



Библиотека отчетов



Библиотека отчетов


В первую очередь это отчеты, входящие в состав библиотеки отчетов. Каждый из этих отчетов описывает отдельный, самостоятельный отчет. Любой из них может быть загружен в компонент TRvproject для использования в приложениях Delphi. Первый отчет в списке по умолчанию становится текущим. Для смены текущего отчета достаточно дважды щелкнуть на нем в дереве проекта и это состояние будет сохранено при закрытии проекта.

Для того чтобы добавить к проекту новый отчет, можно использовать кнопку на главной панели окна визуальной среды или команду File | New Report главного меню. Для удаления отчета достаточно сделать его текущим и нажать клавишу <Delete>.



Для каждого отчета необходимо заполнить свойства Name и FullName, которые используются для идентификации отчета при работе с ним в Delphi (см. гл. 23). Кроме этого, в свойстве Description полезно заполнить описание отчета и задать единицы измерения, т. к. по умолчанию установлено использование дюймов.

Отчет может содержать произвольное число страниц. Напечатать можно как все страницы, так и их произвольное подмножество. Для разработчика список страниц отчета, которые предлагаются к печати по умолчанию, доступен в свойстве PageList. С этим свойством связан редактор страниц Page List Editor (Рисунок 24.3), который позволяет выбирать страницы отчета и формировать из них список для печати. При этом одна страница может быть включена в список несколько раз.

Для добавления к текущему отчету новой страницы используйте кнопку на главной панели окна визуальной среды или команду File | New Report Page главного меню. Для удаления выберите страницу и нажмите клавишу <Delete>.

Страница имеет имя, задаваемое свойством Name, а также несколько свойств, задающих ее важнейшие параметры: Orientation, PageSize, PageHeight, PageWidth.

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



Дерево проекта отчета



Рисунок 24.2. Дерево проекта отчета


 Global Page Catalog — каталог глобальных страниц содержит перечень страниц, не принадлежащих какому-либо из отчетов проекта;  Data View Dictionary — словарь просмотров данных содержит созданные соединения с внешними источниками данных.

Теперь давайте посмотрим, из каких составных частей может состоять проект отчета.

 



Диалог Query Advanced Designer, позволяющий настроить объект просмотра данных



Рисунок 24.5. Диалог Query Advanced Designer, позволяющий настроить объект просмотра данных


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

Страница Sorting & Gouping позволяет выбрать поля для сортировки и группировки. Здесь в списке слева представлены выбранные ранее таблицы и поля. Поля можно переносить в список Sort Fields справа. Поля в этом списке будут использованы для сортировки наборов данных. А из полей для сортировки можно выбрать поле для группировки. Для этого используется список Group By.

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

После завершения настройки просмотра новый объект просмотра появляется в словаре просмотра данных Data View Dictionary и может использоваться в отчетах.

Созданный запрос просмотра доступен через его свойство Query.

 



Диалог выбора типа объекта доступа к данным Data Connections



Рисунок 24.4. Диалог выбора типа объекта доступа к данным Data Connections


Database Connection — создает соединение с внешним источником данных на основе одной из трех технологий доступа к данным: ADO, BDE, db Express;  Direct Data View — создает просмотр данных на основе активного соединения с источником данных;  Driver Data View — создает просмотр данных на основе ранее созданного в словаре соединения;  Simple Security Controller — представляет собой список пользователей, который может быть использован для организации доступа в отдельных отчетах.

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

 



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



ГЛАВА 24


Визуальная среда создания отчетов

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

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

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

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

 ADO;  dbExpress;   BDE.

Визуальная среда Rave Reports открывается из меню Tools | Rave Designer

главного окна Delphi или при двойном щелчке на компоненте TRvProject. Исполняемый файл Rave.exe расположен в папке Delphi7\Rave5.

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

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

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

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

Графические элементы управления



Графические элементы управления


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

Это основные три элемента оформления для рисования линий:

  HLine — горизонтальная линия;   VLine — вертикальная линия;  Line — универсальная линия.

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

Элементы оформления square и Rectangle изображают квадрат и прямоугольник соответственно.

Элементы Ellipse и circle изображают эллипс и круг.



Инструментарий визуальной среды создания отчетов



Инструментарий визуальной среды создания отчетов

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

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

Drawing — графические элементы оформления;    Ваг Code — различные типы штрихкодов;  Standard — элементы оформления, позволяющие размещать на страницах отчета текст и изображения;  Report — элементы оформления, предназначенные для отображения данных из внешних источников данных, подключенных к отчету.

Остальные закладки содержат инструменты управления и настройки страниц и элементов оформления:

 Zoom — управляет увеличением текущей страницы;  Colors — позволяет установить цвета элементов оформления и страниц;  Lines — задает стиль и толщину линий элементов оформления;  Fills — задает стиль заполнения элементов оформления;  Fonts — позволяет задать параметры шрифта для текста;  Alignment — управляет выравниванием элементов оформления на странице.

Центральную часть окна занимает блокнот с двумя закладками.



Элементы Band, DataBand и Region на странице отчета



Рисунок 24.7. Элементы Band, DataBand и Region на странице отчета


Другие свойства полос и способы создания простых и сложных отчетов рассматриваются в гл. 26.

 



Элементы для представления текста и изображений



Элементы для представления текста и изображений


На странице Standard Палитры инструментов расположены элементы оформления, предназначенные для отображения текста и изображений. Рассмотрим их.

Для представления однострочного текста имеется простой элемент оформления Text. Текст задается свойством Text. Другие стандартные свойства позволяют настраивать шрифт, цвет и т. д. Кроме этого, свойство Rotation позволяет повернуть текст на любой угол в диапазоне от 0 до 360 градусов.

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

Если вам необходимо объединить несколько элементов оформления в группу (например несколько строк текста и изображений в заголовке страницы) и использовать их на странице совместно, применяется невизуальный элемент оформления Section. Размещенные на нем другие элементы как бы оказываются на самостоятельной странице, ограниченной элементом section. Вы можете выделять и перемещать отдельные элементы, но делать это только внутри секции. А при перемещении секции по странице все расположенные на ней элементы также перемещаются вместе с ней. Выравнивание элементов тоже работает по границам секции.

Для представления изображений используется элемент оформления Bitmap. Он позволяет оформлять отчеты изображениями, сохраненными в файлах в формате BMP. Для загрузки изображения используется диалог, открывающийся при щелчке на кнопке свойства image. Также при помощи свойства FileLink можно связать элемент с файлом изображения и при печати отчета оно будет загружено. Кроме этого, изображение можно загрузить из базы данных. Для этого используются свойства Dataview (определяет объект просмотра данных) и DataField (задает поле изображения).

Изображение можно масштабировать. Для этого используется свойство Matchside. При его значениях msHeight, mswidth, msBoth изображение соответственно масштабируется по горизонтали, вертикали или в двух измерениях. Естественно, при этом может произойти искажение изображения. А вот при значении msinside изображение будет масштабировано пропорционально.

Аналогичными свойствами обладает элемент оформления MetaFile. Но изображение в формате WMF загружается в него при помощи свойства FileLink или DataField.

Невизуальный элемент оформления FontMaster позволяет задать единые свойства шрифта для группы элементов оформления. Его свойство Font определяет шрифт. И этот шрифт будет использоваться всеми элементами, в чьих свойствах FontMirror будет указан данный элемент FontMaster.

Невизуальный элемент оформления pageNuminit обеспечивает нумерацию страниц, начиная с той, на которой он расположен. Свойство initvalue задает номер, с которого начинается отсчет нумерации. А при помощи свойств initoataview и initoataFieid можно загрузить это значение из базы данных.



Элементы отображения данных



Элементы отображения данных


Элементы отображения данных представляют собой модифицированные стандартные элементы, размещаются на структурных элементах отчета и отображают данные из связанных с ними полей просмотра данных. Они расположены на странице Report Палитры инструментов.

 Элемент DataText предназначен для представления строковых или числовых значений полей связанного просмотра данных.  Элемент DataMemo используется при необходимости показать данные в формате Memo или BLOB.  Элемент calcText обеспечивает выполнение одной из агрегатных функций над значениями связанного поля и представление результата. Тип операции выбирается в свойстве calcType.  Невизуальный элемент DataMirrorSection, так же как и его предок Section, объединяет группу других элементов для совместного использования.

Кроме перечисленных элементов, еще один элемент способен отображать данные из поля просмотра. Это стандартный элемент оформления Bitmap со страницы Standard Палитры инструментов

Все перечисленные элементы (в том числе и элемент Bitmap) связываются с просмотром данных и полем одинаково.

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

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



Каталог глобальных страниц



Каталог глобальных страниц


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

Добавить новую страницу можно при помощи команды главного меню File | New Global Page. После этого страница появляется в списке каталога и доступна для редактирования.

Глобальная страница добавляется в отчет при помощи редактора страниц (см. Рисунок 24.3). Для этого необходимо выбрать нужную страницу из списка Global Pages и нажать на кнопку Add Global.



Обработка событий



Обработка событий

Каждому отчету, странице или элементу оформления можно назначить один или несколько методов-обработчиков событий. Для этого используется Редактор событий Event Editor, доступный через одноименную закладку в центральной части окна визуальной среды Rave Reports.

Для текущего элемента здесь можно выбрать из списка Avaiable Events одно из доступных для обработки событий. При этом будет создан обработчик события, программный код которого вводится в окне редактора внизу. В списке Defined Events отображаются события, обрабатываемые текущим элементом.

Синтаксис кода, используемый для обработки событий, аналогичен синтаксису Object Pascal. При этом можно применять некоторые процедуры и функции Delphi.

Например, в метод-обработчик события BeforePrint элемента оформления Texti можно поместить следующий код:

Textl.Text := IntToStr(StrToInt(Text1.Text) + 1);

который обеспечит нумерацию страниц отчета.

Проверка созданного кода выполняется при нажатии кнопки Compile.



Отображение данных в отчетах



Отображение данных в отчетах

Для представления данных в отчетах предназначены специализированные элементы оформления, представленные на странице Report Палитры инструментов.

Они делятся на две функциональные группы.

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

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



Проект отчета



Проект отчета

Визуальная среда работает с проектом отчета, который создается или загружается из файла с расширением rav. Состав проекта отчета отображается в дереве проекта отчета в панели в правой части окна визуальной среды (Рисунок 24.2).

Корневой элемент RaveProject содержит три дочерние ветви:

Report Library — библиотека отчетов включает все шаблоны отчетов, содержащиеся в этом проекте;



Редактор полос отчета Band Style Editor



Рисунок 24.6. Редактор полос отчета Band Style Editor


Группа флажков Print Location в правой части диалогового окна определяет назначение полосы. А группа Print Occurrence задает, в каком месте отчета появляется полоса:

Body Header (В) — заголовок отчета, печатается в начале отчета;  Group Header (G) — заголовок группы, печатается в начале группы записей, объединенных в просмотре данных выражением GROUP BY;  Row Header (R) — заголовок записи, печатается в начале каждой записи просмотра данных;  Detail (D) — печатается в начале подчиненного набора записей, входящего в отношение "один-ко-многим";  Row Footer (r) — окончание строки, печатается в конце каждой записи просмотра данных;  Group Footer (g) — окончание группы, печатается в конце группы записей, объединенных в просмотре данных выражением GROUP BY;  Body Footer (r) — окончание отчета, печатается в конце отчета;   First (1) — печатается один раз в начале отчета (титул отчета);   New Page (P) — печатается в начале каждой страницы отчета;  New Column (С) — печатается в начале каждой колонки отчета.

 Примечание
Примечание

Для каждого из перечисленных выше типов в скобках указан символ, который используется для обозначения типа полосы на странице отчета в визуальной среде Rave Reports (Рисунок 24.7). Таким образом, по совокупности символов разработчик может оценить роль той или иной полосы в отчете, не обращаясь к редактору.



Редактор страниц отчета Page List Editor



Рисунок 24.3. Редактор страниц отчета Page List Editor


Свойство GridLines позволяет задать плотность измерительной сетки, накладываемой на страницу в визуальной среде для удобства размещения элементов оформления.

 





Резюме

Визуальная среда Rave Reports позволяет создавать проекты отчетов. Каждый такой проект может содержать несколько отчетов.
Инструментарий визуальной среды позволяет конструировать страницы отчетов из элементов оформления, настраивать их свойства и создавать обработчики событий.
При помощи набора объектов доступа к данным к отчету можно подключить внешний источник данных. При этом можно использовать одну из трех технологий доступа к данным: ADO, dbExpress, BDE. Специализированный редактор предназначен для визуального построения просмотра данных, а набор элементов отображения данных, используя поля созданного просмотра, обеспечивает создание отчетов.

Штрихкоды



Штрихкоды


На странице Ваг Code разработчику доступны шесть элементов оформления, позволяющие включать в отчеты штрихкоды. Все они реализуют различные стандарты, но значение для кодирования у всех задается одним свойством Text. Элементы PostNetBarCode, I2of5BarCode, UPCBarCode и EANBarCode позволяют вводить только числа, а элементы Code39BarCode и Godei28BarCode могут работать и с буквенно-цифровыми последовательностями. 

 Код PostNet используется почтовой службой США, содержит код адреса.  Перемежающийся код I2of5 служит для представления числовых последовательностей. Перемежающимся назван потому, что цифры в последовательности попеременно кодируются штрихами и пробелами.  Код Code39 предназначен для кодирования цифр, заглавных букв латинского алфавита и некоторых других символов. Для представления символа используются пять штрихов и четыре пробела.  Код Codel28 позволяет хранить первые 128 символов ASCII.  Код UPC (Universal Product Code) может содержать только цифры. Разработан для маркировки продуктов. Код может включать 12 цифр.  Код EAN (European Article Numbering system) подобен UPC. Код может включать 13 цифр. Первые две отводятся под код страны-производителя.

Для всех элементов значение для кодирования можно загрузить из базы данных при помощи свойства FileLink или DataField.

При необходимости можно рассчитать и напечатать контрольную сумму. Свойство usechecksum при значении True рассчитывает ее, а свойство Printchecksum, будучи установленным в значение True, печатает.

Штрихкод можно развернуть, но только с дискретностью 90°. Для этого используется свойство BarCodeRotation.



Словарь просмотров данных



Словарь просмотров данных


Словарь просмотра данных объединяет разнообразные объекты доступа к данным. Для создания нового объекта необходимо воспользоваться командой главного меню File | New Data Object. После этого открывается диалог выбора типа объекта Data Connections (Рисунок 24.4).

Здесь доступны следующие типы объектов:

Data Lookup Security Controller — организует аутентификацию пользователя по имени и паролю при использовании одного из просмотра данных;



Соединение с источником данных и просмотры



Соединение с источником данных и просмотры


В первую очередь необходимо создать соединение с источником данных. Для этого в диалоге (см. Рисунок 24.4) необходимо выбрать объект соединения Database Connection и, после нажатия кнопки Next, в следующем окне выбрать одну из трех возможных технологий доступа к данным: ADO, dbExpress, BDE. В зависимости от сделанного выбора настраиваются параметры соединения. Подробнее о технологиях доступа к данным рассказывается в главах части IV.

После завершения настройки готовое соединение появляется в списке Data View Dictionary.

На втором этапе к работающему соединению можно подключать объекты просмотра данных. В диалоге Data Connections (см. Рисунок 24.4) надо выбрать тип объекта доступа к данным Driver Data View и нажать на кнопку Next. Затем в следующем окне нужно выбрать одно из существующих соединений (см. выше). После этого появляется диалог Query Advanced Designer (Рисунок 24.5).



Стандартные элементы оформления и их свойства



Стандартные элементы оформления и их свойства

Теперь остановимся подробнее на элементах оформления отчетов. Они используются так же, как и компоненты в Delphi. Выбранный элемент переносится из Палитры инструментов на страницу отчета. Здесь его можно разместить в нужном месте, изменить его размеры и настроить свойства. Свойства элемента оформления доступны на панели слева. Кроме этого, наиболее важные визуальные свойства (цвет, стиль линий и заполнения и т. д.) вынесены на Палитру инструментов.

После переноса на страницу имя элемента оформления также появляется в дереве проекта.



Структурные элементы отчета



Структурные элементы отчета


Рассмотрим структурные элементы.

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

При создании отчета, использующего базу данных, этот элемент переносится на страницу в первую очередь. Затем приходит очередь элементов Band и DataBand.

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

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

Важнейшее свойство Bandstyle определяет роль и поведение полосы в отчете. С ним связано диалоговое окно Band Style Editor (Рисунок 24.6), которое отображает взаимосвязь полос в области Region отчета и позволяет задать поведение текущей полосы.

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



Внешние источники данных в отчете



Внешние источники данных в отчете

Все объекты, обеспечивающие доступ к внешним источникам данных из отчетов проекта, собраны в словаре просмотра данных Data View Dictionary. Новый объект создается командой File | New Data Object главного меню.



Закладка Page Designer визуальной среды создания отчетов Rave Reports



Рисунок 24.1. Закладка Page Designer визуальной среды создания отчетов Rave Reports


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

На страницу можно переносить элементы оформления из Палитры инструментов, и затем элементы оформления можно выделять, настраивать их свойства, перемещать и удалять.

Закладка Event Editor обеспечивает создание методов-обработчиков событий для отчетов, страниц, элементов оформления и т. д.

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

В левой части окна среды разработки располагается аналог Инспектора объектов Delphi, в котором доступны свойства текущего элемента. В нижней части этой панели отображается подсказка для текущего свойства.

 



Дерево проекта SimpleDemo для отчета rptXP



Рисунок 25.2. Дерево проекта SimpleDemo для отчета rptXP




Добавление страниц к отчету



Добавление страниц к отчету


После создания первой страницы к отчету необходимо добавить еще две страницы и оформить их по образцу первой. Здесь все операции рутинны и не требуют дополнительных пояснений. В результате дерево проекта для отчета rptxp выглядит так, как показано на Рисунок 25.2.

Кроме обычных страниц, принадлежащих отчету, в Rave Reports можно создавать глобальные страницы, которые можно связать с любым отчетом проекта (например, титульные страницы). Для создания новой глобальной страницы используется команда File | New Global Page главного меню. Затем процесс разработки не отличается от обычных страниц.

Теперь для того, чтобы при просмотре или печати отчета отображались все страницы, а не только первая, необходимо дополнительно настроить свойство PageList отчета. В редакторе свойства необходимо перенести в список Page List все нужные страницы. Для этого страница выбирается из выпадающего списка Report Pages. Затем нужно щелкнуть на кнопке Add Page. Аналогичная операция выполняется и для глобальных страниц проекта, доступных в списке Global Pages.

Результат для отчета rptxp представлен на Рисунок 25.3.



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



ГЛАВА 25


Разработка, просмотр и печать отчетов

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

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

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

Вопросы создания отчетов для баз данных здесь не затрагиваются и обсуждаются в следующей главе.

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

 разработка проекта отчета в визуальной среде Rave Reports;  использование компонентов TRvProject и TrvSystem;  просмотр и печать отчета;  использование в отчете внешних файлов;  преобразование форматов данных при помощи компонентов Rave Reports.

Использование элемента FontMaster



Использование элемента FontMaster


Невизуальный элемент FontMaster позволяет использовать одинаковые шрифты в элементах оформления, например, в пределах одной секции. Для этого необходимо перенести в секцию элемент FontMaster и задать в его свойстве Font нужные характеристики шрифта. После этого во всех элементах, которые будут использовать этот шрифт, в списке свойства FontMirror надо выбрать этот элемент FontMaster.

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



Этапы создания отчета и включение его в приложение



Этапы создания отчета и включение его в приложение

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

1. На первом этапе в визуальной среде Rave Reports создается проект отчета и в нем необходимые страницы, объекты доступа к данным (см. гл. 24). На страницах располагаются элементы оформления, при необходимости к ним подключаются просмотры данных (если отчет отображает информацию из таблиц базы данных) и объекты аутентификации пользователей отчетов. Создаются обработчики событий. И в завершение этапа готовый проект отчета сохраняется в файле с расширением rav.

2. На втором этапе в проект приложения в Delphi переносятся компоненты TRvProject и TRvSystem (см. г/?. 23) со страницы Rave Палитры компонентов. При этом в состав приложения автоматически включается ядро генератора отчета. Первый компонент связывается с файлом проекта отчета и представляет в приложении отчет со всеми его свойствами, страницами, элементами оформления и т. д. Второй компонент связывается с первым, взаимодействует с ядром генератора отчетов и обеспечивает печать отчета из приложения.

3. На третьем этапе создается программный код, обеспечивающий выполнение функций приложения, связанных с отчетом. Наряду со стандартными операциями предварительного просмотра и печати отчета это могут быть загрузка из файла и сохранение в файле, преобразование формата данных отчета, изменение содержания отчета в зависимости от выполненных пользователем действий и т. д. На этом этапе используются свойства, методы и методы-обработчики событий компонентов TRvProject и TRvSystem и других компонентов со страницы Rave Палитры компонентов.

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



Компонент TRvNDRWriter



Компонент TRvNDRWriter

Компонент TRvNDRWriter предназначен для сохранения отчетов в файлах. При этом используется двоичный формат NDR.

Приемник данных определяется свойством

type

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

smMemory — для вывода данных используется поток в памяти (объект типа TMemoryStream);

smTempFile — данные сохраняются во временном файле, в папке, определенной в операционной системе для хранения временных файлов;

smFile — данные сохраняются в файле;

smUser — данные передаются в поток, заданный разработчиком.

Имя файла, в котором будет сохранен отчет, определяется свойством

property FileName: String;

А для определения потока используется свойство

property Stream: TStream;

Таким образом, если вы хотите использовать для сохранения отчета файл, перед использованием компонент настраивается, например, так:

RvNDRWriterl.StreamMode := smFile; RvNDRWriterl.FileName := ReportFilePath;

Если вы планируете использовать поток, сделайте следующим образом:

var ReportStreara: TMemoryStreain;

ReportStream := TMemoryStream.Create/try

RvNDRWriterl.StreamMode := smUser;

RvNDRWriterl.Stream := ReportStream;

finally

ReportStream.Free; end;

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

procedure Start;

а по окончании создания отчета использовать метод

procedure Finish;

Например, следующий фрагмент кода создает в отчете текст с заданным положением:

with RvNDRWriterl do 

begin

Start;

Units := unMM;

SetFont('Times New Roman', 14);

Bold := True;

OriginX := 0.0;

OriginY := 0.0;

GotoXY(1.0, 12.0);

Print('Заголовок ttl');

GotoXY(6.0, 18.0);

Println('Заголовок 12');

GotoXY(6.0, 24.0);

Println('Заголовок 13');

GotoXY(6.0, 30.0);

PrintIn('Заголовок #4');

 Finish; 

end;

А вот так можно нарисовать прямоугольник и разместить в нем изображение:

with RvNDRWriterl do

begin

Start;

Units := unMM;

SetBrush(clBlue, bsSolid, nil);

Rectangle (5.0, 35.0, 65.0, 95.0);

Bitmap := TBitmap.Create;

Bitmap.LoadFromFile('factory.BMP');

PrintBitmapRect(10.0, 40.0, 60.0, 90.0, Bitmap);

Bitmap.Free;

Finish;

end;

В данном фрагменте кода метод

procedure PrintBitmapRect(XI,Y1,X2,Y2: double;

 Bitmap: TBitmap);

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

Внимание

Компонент TRvNDRWriter имеет свойство canvas (см. гл. 10), но использовать его нельзя — любые операции с канвой не возымеют действия и ваши труды не будут сохранены.

При использовании пары методов start и Finish не нужно предпринимать никаких дополнительных усилий для сохранения отчета — это будет сделано Методом Finish.

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



Нумерация страниц отчета



Нумерация страниц отчета


В первую очередь создадим заголовок страницы и включим механизм нумерации страниц. Для этого перенесем на страницу элемент Section со страницы Standard Палитры инструментов и поместим его в верхней части страницы отчета. Эта секция будет объединять элементы оформления заголовка.

Поместим в секции элемент DataText — нам необходимо его свойство DataFieid. Редактор свойства Data Text Editor (Рисунок 25.1) позволяет настраивать свойство так, чтобы элемент мог отображать разнообразные данные. Сейчас нас интересуют номера страниц отчета.

Из списка Report Variables, который содержит глобальные переменные отчета, необходимо выбрать переменную RelativePage. Затем нужно щелкнуть на кнопке Insert Report Var и переменная Report.RelativePage появится в поле Data Text в нижней части диалога. Эта переменная при печати отчета будет содержать порядковый номер текущей страницы.



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



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

Теперь, когда проект SimpleDemo.RAV с двумя отчетами готов, перейдем к разработке приложения в Delphi.

Любое приложение, использующее генератор отчетов Rave Reports, должно иметь как минимум пару компонентов — TRvProject и TRvSystem. Первый из

них есть проект отчета в приложении. С его помощью разработчик получает доступ к отчетам проекта и их свойствам. Второй компонент обеспечивает использование ядра генератора отчетов Rave Reports при печати или предварительном просмотре отчета (см. Рисунок 23.1). Подробнее о свойствах и методах этих компонентов см. гл. 23.

При использовании этих компонентов в состав исполняемого кода приложения автоматически включается ядро генератора отчетов Rave Reports. Соответственно при распространении приложения не требуются дополнительные файлы — даже файл проекта отчета можно включить в приложение (см. ниже).

Компонент TRvProject необходимо связать с файлом проекта Simple-Demo. RAV. Для этого используется его свойство

property ProjectFile: string;

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

property StoreRAV: boolean;

компонента (см. Рисунок 23.2).

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

procedure TfmMain.FormShow(Sender: TObject);

 begin

rpProject.Open;

rpProject.GetReportList(IbxRptLiat.Items, True);

rpProject.ReportDescToMemo(meDesc) ;

 end;

Но только один из отчетов доступен для использования одновременно. Для смены текущего отчета можно воспользоваться методом

function SelectReport(ReportName: string;

FullName: boolean): boolean;

Для идентификации текущего отчета компонент TRvProject имеет два свойства, которые возвращают его имя и полное имя. Это соответственно свойства ReportName и ReportFullName. При необходимости использовать имя отчета для одного из методов (например метод SelectReport) можно использовать оба имени. Во всех методах, где в качестве параметра применяется имя отчета, имеется дополнительный параметр FullName типа Boolean. При его значении True используется полное имя отчета.

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

Для этого используется метод open:

RvProjectl.Open;

или свойство 

Active: RvProjectl.Active := True;

Так же, если в процессе работы приложения в компонент TRvproject нужно загрузить новый проект отчета, процедуру открытия нужно повторить:

RvProjectl.Close;

RvProjectl.SetProjectFile

(dlgOpenProject.FileName);

RvProjectl.Open;

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



Преобразование форматов данных



Преобразование форматов данных

С компонентом TRvNDRWriter (вернее с файлами в формате NDR, которые он создает) взаимодействует ряд компонентов Rave Reports, которые обеспечивают преобразование данных из этого специфического формата в более распространенные форматы.

 Компонент TRvRenderpoF обеспечивает преобразование отчета в формат PDF для дальнейшего использования в Adobe Acrobat Reader.  Компонент TRvRenderHTML обеспечивает преобразование отчета в формат HTML.  Компонент TRvRenderRTF обеспечивает преобразование отчета в формат RTF.  Компонент TRvRenderText обеспечивает преобразование отчета в текстовый формат.

Все они используются по одной схеме.

Сначала необходимо загрузить отчет из файла NDR в поток.

После этого вызывается метод

procedure PrintRender(NDRStream: TStream; OutputFileName: TFileName);

который и выполняет преобразование:

var ReportStream: TMemoryStream;

ReportStream := TMemoryStream.Create;

try

ReportStream.LoadFromFile(NDRFilePath);

RvRenderHTMLl.NDRStream := ReportStream;

RvRenderHTMLl.PrintRender(ReportStream, 'sdf);

finally

ReportStream.Free; 

end;



Просмотр и печать отчета



Просмотр и печать отчета

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

При стандартной настройке этого компонента при печати или предварительном просмотре отчета всегда отображается диалог настройки печати (см. Рисунок 23.4). Если отображение этого диалога необходимо, печать текущего отчета компонента TRvproject, с которым связан данный компонент TrvSystem. осуществляется методом

procedure Execute;

любого из этих компонентов.

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

Сначала нужно настроить свойство

type

TReportDest = (rdPreview, rdPrinter, rdFile);

 property DefaultDest: TReportDest;

которое определяет, куда будет направлен отчет — в окно просмотра, на принтер или в файл.

Затем необходимо изменить свойство

type

SystemSetup = (ssAllowSetup, ssAllowCopies, ssAllowCollate,

ssAllowDuplex, ssAllowDestPreview, ssAllowDestPrinter, ssAllowDestFiie,

ssAllowPrinterSetup);

TSystemSetups = Set of TSystemSetup;

property SystemSetups: TSystemSetups;

убрав из него опцию ssAllowSetup, которая включена по умолчанию:

RvSysteml.SystemSetups := RvSysteml.SystemSetups — [ssAllowSetup];

и, наконец ,свойству

property DoNativeOutput: Boolean;

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

Обратите внимание на очень важную деталь — чтобы все сделанные настройки действительно сработали, печать отчета необходимо выполнять только методом Execute Компонента TRvProjeet.



Простой отчет в визуальной среде Rave Reports



Простой отчет в визуальной среде Rave Reports

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

Для начала создадим в визуальной среде Rave Reports новый проект (команда File | New главного меню). Обратите внимание, что по умолчанию вместе с проектом создается первый отчет Reportl с одной страницей Pagel. Его мы и используем, переименовав в rptxp. Проекту присвоим имя simpleDemo.



Редактор свойства DataField элемента DataText



Рисунок 25.1. Редактор свойства DataField элемента DataText


Аналогичным образом добавим переменную TotalPages, которая возвращает общее число страниц отчета. Затем вручную отредактируем текст в поле Data Text:

'Страница ' + Report.RelativePage + ' из ' + Report.TotaiPages

Шаблон номера страницы готов. Но для того, чтобы механизм нумерации заработал, необходимо перенести на страницу невизуальный элемент pageNuminit. Он будет работать автоматически. Единственное, что нужно сделать, — это настроить свойство initvalue, в котором задается номер начальной страницы.

Примечание
Примечание

Обратите внимание, что элемент PageNuminit должен быть только один и располагаться на первой странице, которая должна содержать свой номер. Иначе, на каждой странице, на которой есть такие элементы, нумерация начнется сначала.

 



Редактор свойства PageList отчета rptXP



Рисунок 25.3. Редактор свойства PageList отчета rptXP


Используя кнопки слева в группе Page List, можно изменять порядок следования страниц при печати отчета или удалять страницы из списка.

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

Проект отчета сохранен в файле SimpleDemo.RAV.

 



Приложение Delphi, которое реализует печать



Резюме

Приложение Delphi, которое реализует печать отчетов, должно иметь в своем составе компоненты TRvProject и TRvSystem. Первый обеспечивает представление проекта отчета из файла RAV в приложении. Второй взаимодействует с ядром генератора отчетов и управляет печатью и предварительным просмотром отчетов.
Набор компонентов Rave Reports позволяет преобразовать формат данных отчета в наиболее распространенные форматы данных: HTML, RTF, PDF, TXT.

Сохранение отчета во внешнем файле



Сохранение отчета во внешнем файле

При помощи методов компонента TRvSystem можно сохранить отчет для последующей печати в формате PRN или сохранить проект Rave Reports в формате RAV.

Для реализации первого варианта необходимо в качестве источника печати указать файл:

...

if dlgSavePRN.Execute then begin

rsSystem.DoNativeOutput := False; 

rsSystem.DefaultDest := rdFile;

rsSystem.SystemSetups := rsSystem.SystemSetups — [ssAllowSetup]; 

rsSystem.OutputFileName := dlgSavePRN.FileName; 

rpProj ect.Execute; 

end;

...

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

Если же нужно сохранить проект отчета в файле с расширением rav, можно использовать метод SaveToFile компонента TRvproject:

if dlgSaveProject.Execute

then RvProjectl.SaveToFile(dlgSaveProject.FileName);

Также просто выполнить и обратную операцию — загрузить в компонент TRvProject проект отчета из файла, но при этом не забудьте закрыть текущий отчет:

RvProjectl.Close;

RvProjectl.LoadFromFile(dlgOpenProject.FileName);

RvProjectl.Open;

Аналогичную функцию выполняет метод

procedure SetProjectFile(Value: String);

компонента TRvProject.