Лабораторная работа №4 / БДлаб4.doc
Лабораторная работа № 4
Создание отчетов с использованием
генератора отчетов QuickReport
Цель работы: изучить и получить навыки использования компонентов, входящих в генератор отчетов QuickReport системы Delphi 5.
Продолжительность работы - 4 ч.
Теоретические сведения
В первой части лабораторного практикума было показано, как получить доступ к информации, хранящейся в базе данных, и создать приложения для отображения и редактирования этой информации, используя удобный и понятный пользовательский интерфейс. Наряду с этим на практике требуется обеспечить вывод выбранной из базы данных информации не только в экранные формы, но и на печать.
Информацию, выводимую на печать или в файл и представленную в удобном для восприятия виде, называют отчетом. Создание отчетов является одной из основных функций приложений, работающих с базами данных.
Для создания отчетов используются специальные компоненты, которые значительно облегчают эту задачу, выполняя все основные функции по форматированию, предварительному просмотру и выводу на печать информации из некоторого набора данных. Поэтому разработка отчетов обычно сводится к определению их структуры и внешнего вида.
Разработка отчета во многом схожа с разработкой формы для ввода данных, поскольку выполнение основных функций уже предусмотрено в соответствующих компонентах, которые требуется только определенным образом разместить и настроить. Многие компоненты, используемые при создании отчетов, подобны компонентам отображения данных, применяемым при разработке форм. Поэтому, приступая к разработке отчета, требуется определить следующие его параметры:
1) информацию, которая должна содержаться в отчете;
2) таблицы с необходимыми данными;
3) внешний вид создаваемого отчета;
4) поля, по которым производится упорядочение и группировка данных в отчете;
5) содержание итоговой части отчета, если в ней есть необходимость;
6) дополнительную информацию, отображаемую в отчете: заголовки, поясняющие надписи, разделительные линии, рисунки и т.д.
Перед разработкой отчета целесообразно нарисовать его эскиз на бумаге, чтобы определить перечень компонентов, требующихся для создания отчета.
Компоненты для создания отчетов позволяют формировать отчеты, которые условно можно разделить на две группы: табличные отчеты и отчеты в свободной форме.
В табличном отчете информация упорядочивается по строкам и столбцам. Такие отчеты фактически повторяют структуру таблиц базы данных или выборки таблиц.
Отчеты, выполненные в свободной форме, содержат информацию, располагающуюся произвольно. Примером отчетов такого типа могут служить этикетки с почтовыми адресами для конвертов и письма, где поля таблицы базы данных должны размещаться в специально отведенных местах. При реализации отчетов в свободной форме данные также представляются в определенном порядке, но результат упорядочения не является таблицей.
Помимо значений полей из таблиц базы данных или вычисляемых полей отчет может содержать и другие объекты, например, графики, диаграммы, рисунки, поясняющие надписи.
В системе Delphi 5 для создания отчетов имеется набор компонентов, собранных на странице QReport палитры компонентов и входящих в состав генератора отчетов QuickReport. Все компоненты генератора отчетов QuickReport можно разделить на четыре группы:
1) базовый компонент TQuickRep, являющийся контейнером для компонентов полос отчета и обеспечивающий генерацию и печать
отчета;
2) полосы отчета - специальные компоненты, служащие контейнерами для элементов отображения данных и формирующие структуру отчета;
3) компоненты отображения данных, используемые для визуализации информации, содержащейся в таблицах базы данных, а также для вывода любой дополнительной информации;
4) фильтры - невизуальные компоненты, применяемые для экспорта отчета в файлы некоторых распространенных форматов.
TQuickRep - центральный компонент, определяющий формирование отчета в целом. С помощью других компонентов создаются составные части отчета, например:
· TQRBand - полоса для расположения данных, заголовков, титула и пр. Отчет в основном строится из компонентов TQRBand, которые реализуют:
Ø полосу заголовка отчета (Title);
Ø полосу верхнего колонтитула (PageHeader);
Ø полосу заголовка группы (GroupHeader);
Ø полосу названий столбцов отчета (ColumnHeader);
Ø полосу детальной информации, предназначенную для отображения данных самого нижнего уровня детализации (Detail);
Ø полосу итогов для группы (GroupFooter);
Ø полосу нижнего колонтитула (PageFooter);
Ø полосу итогов для отчета (Summary);
· TQRStringBand - имеет то же назначение, что и TQRBand. Отличается встроенным списком строк Items, содержимое которого становится видимым в режиме печати и предварительного просмотра, если на компонент TQRStringBand помещен компонент TQRExpr. Для каждой строки в Items выводится своя полоса TQRStringBand;
· TQRSubDetail - определяет полосу, в которой располагаются данные подчиненной таблицы при реализации в отчете связи “главная-подчиненная” для таблиц базы данных;
· TQRChildBand - дочерняя (подчиненная) полоса. Привязывается к родительской (главной) полосе и служит для ее расширения. Любая полоса может стать родительской, если ее свойство HasChild задать равным True;
· TQRGroup - применяется для группировки данных в отчете;
· TQRLabel - позволяет разместить в отчете произвольную текстовую строку, например, название столбца таблицы в соответствующей полосе отчета;
· TQRDBText - служит для вывода в отчет содержимого поля таблицы базы данных;
· TQRExpr - применяется для вывода значений, являющихся результатом вычисления выражений. Алгоритм вычисления выражений строится при помощи редактора формул этого компонента;
· TQRSysData - служит для включения в отчет системной величины: даты, времени, номера страницы и т.п.;
· TQRDBImage - предназначен для вывода в отчете графической информации, хранящейся в столбце (поле) таблицы базы данных;
· TQRShape - служит для вывода в отчете графических фигур, например, прямоугольников;
· TQRPreview - базовый компонент для создания нестандартных окон предварительного просмотра отчета. Стандартное окно создается с помощью метода Preview компонента TQuickRep.
Компоненты генератора отчетов QuickReport
Компонент TQuickRep, размещенный на форме, представляется сеткой отчета, в которую затем помещаются составные части отчета, например, полосы TQRBand. Основные свойства компонента TQuickRep приведены в табл.1.
Таблица 1
Основные свойства компонента TQuickRep
| Свойство | Назначение |
| Bands | Множество полос, включаемых в отчет. Каждой полосе соответствует определенный элемент свойства: HasColumnHeader - заголовки столбцов; HasDetail - детальная информация; HasPageFooter - нижний колонтитул; HasPageHeader - верхний колонтитул; HasSummary - итоги для отчета; HasTitle - заголовок отчета. Полоса включается в отчет, если соответствующий элемент свойства равен True |
Окончание табл.1
| Свойство | Назначение |
| DataSet | Указывает набор данных, для которого создается отчет. Если нужно вывести связанную информацию из нескольких таблиц базы данных, то ее объединяют в одном наборе данных при помощи компонента Tquery. Если таблицы связаны отношением “главная-подчиненная”, то указывается главная таблица, а ссылка на соответствующие подчиненные таблицы задается в компонентах TQRSubDetail |
| Description | Описание отчета |
| Font | Шрифт, которым будет печататься информация в отчете |
| Frame | Параметры рамки отчета |
| Options | Параметры отчета |
| Page | Параметры страницы отчета |
| ShowProgress | Разрешает (True) или запрещает (False) показывать индикатор процесса печати отчета |
| Units | Единицы измерения расстояний в отчете (дюймы, миллиметры, пиксели и т.д.) |
| Zoom | Масштаб отображения отчета (в процентах от его размеров на листе бумаги) на этапе разработки |
Многие из этих свойств можно установить на этапе конструирования с помощью редактора свойств, если в локальном меню компонента TQuickRep выбрать пункт Report settings (рис.1).
Компонентом TQuickRep можно управлять с помощью имеющихся у него методов. В частности, методы Preview и PreviewModal активизируют окно предварительного просмотра отчета (рис.2), а метод Print инициирует печать отчета на принтере. Чтобы на этапе конструирования отобразить в окне предварительного просмотра содержимое отчета в том виде, в каком оно будет выводиться на печать, нужно выбрать пункт Preview в локальном меню компонента TQuickRep. При этом некоторые данные (например, значения вычисляемых полей) отображаться не будут, поскольку они вычисляются только во время выполнения приложения.
Стандартное окно предварительного просмотра отчета не всегда удобно, поскольку его элементы управления невозможно изменить (например, русифицировать). Поэтому можно воспользоваться компонентом TQRPreview, предназначенным для создания нестандартного окна просмотра. Чтобы отобразить отчет в нестандартном окне просмотра, нужно в форму с компонентом TQuickRep поместить компонент TQRPreview, настроить его и предусмотреть его активизацию методом Show.
Компоненты TQRBand задают полосы отчета и используются для размещения таких компонентов, отображающих информацию, как TQRLabel, TQRDBText, TQRDBImage и т.п. Основные свойства компонента TQRBand приведены в табл.2.
Таблица 2
Основные свойства компонента TQRBand
| Свойство | Назначение |
| AlignToBottom | Если значение этого свойства задано равным True, то полоса печатается всегда внизу страницы; причем если это полоса детальной информации, то она будет единственной на странице |
| BandType | Назначение полосы |
| Font | Шрифт, которым будет печататься информация, размещенная на полосе. Это свойство имеет более высокий приоритет, чем аналогичное свойство компонента TQuickRep |
| Frame | Параметры рамки вокруг полосы |
| Size | Размер полосы |
Свойство BandType указывает назначение полосы, например:
rbTitle - полоса содержит заголовок отчета; rbPageHeader - полоса содержит верхний колонтитул; rbDetail - полоса содержит информацию из набора данных, заданного свойством DataSet компонента TQuickRep (полоса выводится каждый раз при переходе на новую запись в наборе данных; эта полоса повторяется для всех записей набора данных, начиная с первой записи и кончая последней; позиционирование на первую запись и последовательный перебор записей осуществляется компонентом TQuickRep автоматически).
Поместить компонент TQRBand в сетку отчета и указать назначение представляемой им полосы отчета можно двумя способами:
1) выбрать компонент TQRBand в палитре компонентов, разместить его на компоненте TQuickRep и выбрать значение свойства BandType, соответствующее назначению полосы;
2) в группе Bands окна установки параметров отчета (см. рис.1) пометить “галочкой” переключатель, соответствующий включаемой в отчет полосе. Все указанные таким способом полосы будут помещены в сетку отчета после закрытия окна.
Компонент TQRBand может обрабатывать только события AfterPrint и BeforePrint, которые наступают соответственно после окончания и перед началом печати или просмотра полосы отчета.
Компонент TQRExpr позволяет поместить в отчет результат вычисления выражения, которое формируется с помощью редактора формул. Окно редактора формул (рис.3) активизируется кнопкой, имеющейся в поле свойства Expression этого компонента, которое отображается в окне инспектора объектов.
Поле Enter expression служит для ввода и редактирования выражения, которое может состоять из имен полей (столбцов) таблиц, функций и переменных, связанных знаками операций, набираемыми с помощью среднего ряда кнопок (табл.3). Имя поля таблицы (Data field), функция (Function) или переменная (Variable) добавляется в выражение с помощью вспомогательного окна, которое появляется при нажатии на соответствующую кнопку верхнего ряда.
Таблица 3
Операции и функции, используемые в выражениях
| Операция | Действие |
| + — * / | Арифметическое сложение, вычитание, умножение, деление. Символ “+” для строк обозначает операцию сцепления |
| And Or Not | Логическое умножение (И), сложение (ИЛИ), отрицание (НЕ) |
| > < >= <= <> = | Сравнение значений |
| average (expr) | Агрегатная функция возвращает среднее значение для выражения expr, содержащего имя поля (столбца) |
| COPY (str,pos,len) | Возвращает для строки символов str подстроку длиной len, начиная с позиции pos |
| COUNT | Агрегатная функция возвращает количество записей (строк) в таблице или группе |
| DATE | Возвращает текущую дату в виде строки символов |
| DIV (x,y) | Целочисленное деление x на y |
| FALSE | Возвращает логическую константу “ложь” |
| FORMATNUMERIC (f,num) | Форматирует числовое значение num, ис-пользуя шаблон f. Шаблон задается так же, как для функции FormatFloat языка Object Pascal |
| FRAC (num) | Возвращает дробную часть числового значения num |
| IF (expr, x, y) | В зависимости от логического значения выражения expr возвращает либо x (expr=True), либо y (expr=False) |
| INT (num) | Возвращает целую часть числового значения num |
| LOWER (str) | Преобразует все символы строки str в нижний регистр |
Окончание табл.3
| Операция | Действие |
| MAX (expr) | Агрегатная функция возвращает максимальное значение для выражения expr, содержащего имя поля (столбца) |
| MIN (expr) | Агрегатная функция возвращает минимальное значение для выражения expr, содержащего имя поля (столбца) |
| PRETTY (str) | Преобразует первый символ строки в верхний регистр, а все остальные - в нижний |
| SQRT (num) | Вычисляет квадратный корень из числового значения num |
| STR (num) | Преобразует числовое значение num в строку символов |
| SUM (expr) | Агрегатная функция возвращает сумму значений для выражения expr, содержащего имя поля (столбца) |
| TIME | Возвращает текущее время в виде строки символов |
| TRUE | Возвращает логическую константу “истина” |
