Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_БД.doc
Скачиваний:
28
Добавлен:
04.05.2019
Размер:
4.03 Mб
Скачать

Тема. Работа с отчетами

Отчет – это печатный документ, содержащий данные, получаемые в результате выполнения запроса к БД. Существуют следующие виды отчетов:

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

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

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

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

В Delphi 5 для создания отчетов служит генератор отчетов QuickReport.

На странице QReport палитры компонентов располагаются компоненты, применяемые для построения отчетов. Главным является компонент QuickRep , который размещается на отдельной форме. При размещении этого компонента на форме появляется сетка отчета, на которой в последующем располагаются различные составные части отчета.

Свойства компонента QuickRep:

Bands: TQuickRepBands – содержит набор логических свойств, которые после установки их значений в True включают в отчет следующие элементы:

  • HasColumnHeader – заголовки столбцов,

  • HasDetail – область данных;

  • HasPageFooter – нижний колонтитул;

  • HasPageHeader – верхний колонтитул;

  • HasTitle – заголовок отчета,

  • HasSummary – итог отчета.

DataSet: TDataSet - указывает на набор данных (Table), на основе которого создается отчет. Источник данных DataSource при этом не используется.

Frame: TQRFrameопределяет параметры рамки отчета (линии слева, справа, сверху, снизу), цвет линий, стиль линий (сплошная пунктирная и т.п.), толщина линии в пикселах.

Options: TquickReportOptions - содержит множество логических значений:

  • HasFirstHeader – разрешает печать заголовка первой страницы;

  • HasFirstFooter – разрешает печать заголовка последней страницы;

  • Compression – разрешает сжимать отчет при выводе его в метафайл.

Page: TQRPage – определяет параметры страницы. Эти параметры можно установить в процессе разработки приложения в окне Report Setting, которое вызывается командой Report Setting контекстного меню страницы отчета или двойным щелчком на странице отчета.

PaperSize – формат страницы (по умолчанию A4);

Orientation – ориентация страницы:

  • poPortrait – книжная (по умолчанию)

  • poLandScape – альбомная;

Length, Width – высота и ширина страницы;

TopMargin, BottomMargin, LeftMargin, RightMargin – размер верхнего, нижнего, левого и правого полей соответственно;

Ruller – признак отображения сетки при разработке приложения (по умолчанию True и сетка видна).

PrintIfEmpty: Booleanразрешает печатать отчет, если он не содержит данных.

ReportTitle: String – определяет имя отчета (не заголовка!).

ShowProgress:Boolean – при значении True разрешает показывать индикатор процесса печати отчета.

SnapToGrid:Boolean – привязывает размещаемые в отчете компоненты к сетке, если значение равно True.

Units:TQRUnits определяет единицы измерения расстояний в отчете: дюймы, миллиметры, пиксели, внутренние единицы компонента QuickRep (0,1 мм), символы текста.

Zoom: Integer – позволяет установить масштаб отображения отчета (в процентах от его размеров на листе бумаги) на этапе разработки.

Основные методы компонента QuickRep

NewColumn – реализует вывод информации в следующей колонке отчета, для одной колонки – на следующей странице.

NewPage – обеспечивает вывод информации на следующей странице отчета.

Prepare подготавливает отчет для вывода в файл. При этом вначале отчет подготавливается путем вызова метода Prepare, затем сохраняется в файле методом Save объекта QRPrinter, после этого объект уничтожается и свойству QRPrinter, присваивается значение NIL. Например,

QuickRep1.Prepare;

QuickRep1.QRPrinter.Save(‘primer.QRP’);

QuickRep1.QRPrinter.Free;

QuickRep1.QRPrinter:=NIL;

Print – печатает отчет на принтере.

PrintBackground- печать отчета в фоновом режиме. После завершения печати вызывается обработчик события OnAfterPrint.

Preview – выводит стандартное окно предварительного просмотра. Возможности этого метода превосходят возможности метода Print.

PrinterSetup вызывает стандартное окно установки параметров принтера.

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

Полоса отчета.

Компонент QRBand – основной элемент отчета, на котором размещаются другие компоненты. Свойство BandType: TQRBandType задает тип полосы:

  • rbTitle – заголовок отчета

  • rbPageHeader – верхний колонтитул

  • rbDetail – данные записей набора данных; выводятся для каждой записи набора данных

  • rbPageFooter – нижний колонтитул

  • rbSummary – итог отчета; выводится в конце отчета под всеми другими сведениями отчета, но выше нижнего колонтитула

  • rbGroupHeader – заголовок группы

  • rbGroupFooter – примечание группы, выводится для каждой группы

  • rbSubDetail – данные подчиненного набора данных для отчета “главный-подчиненный”

  • rbColumnHeader – заголовки столбцов, печатаемые один раз на каждой странице над данными;

  • rbChild – дочерняя полоса, печатаемая после полосы, с которой она связана.

Добавить новую полосу можно двумя способами:

  • поместить компонент QRBand в отчет и присвоить нужное значение свойству BandType;

  • установить значение True нужного подсвойства свойства Bands компонента QuickRep. При этом к отчету добавляется полоса, а ее свойство BandType автоматически получает нужное значение.

При печати каждой полосы генерируются события BeforePrint и AfterPrint. Событие BeforePrint можно использовать для блокирования печати. Например,

Procedure Tform1.DetailBandBeforePrint(Sender:Tobject;

var printBand: Boolean);

Begin

PrintBand:=Form2.Table1.FieldByName(‘S_Cena’).AsFloat>1000;

End;

в отчете печатаются только записи, имеющие в поле Salary значение больше 100.

Компоненты, размещаемые в полосе. Можно использовать компоненты только страницы Qreport. Если расположить компонент вне полосы, то он будет выводиться на каждой странице отчета.

QRLabel – надпись (аналог Label), содержащая текст.

QRDBTextзначение поля записи (аналог DBText), размещается в полосе данных,

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

QRSysData –системная информация,

QRImage компонент для отображения графического изображения (аналогичен Image).

QRShape – геометрическая фигура. Служит для оформления сетки вокруг выводимых данных.

Непосредственно перед печатью возникает событие OnPrint: TQRLabelOnPrintEvent, которое описывается как

Type TQRLabelOnPrintEvent=procedure (Sender: Tobject;

Var Value:String) of Object;

Параметр Value содержит значение, которое должно быть напечатано. Например,

Procedure Tform1.QRDBText1Print(Sender: Tobject; var Value: String);

Begin

Value:=Value+’ р.’;

End;

Для создания простого отчета нужно:

  1. Разместить на форме компонент QuickRep;

  2. Cоздать для компонента QuickRep необходимые полосы отчета;

  3. Разместить в полосах нужные компоненты отчета (QRLabel, QRBText, QRExpr);

  4. создать обработчик события, например, нажатия кнопки.

Пример создания простого отчета.

И меется таблица Sotrudniki.db. Требуется создать отчет, содержащий заголовок и сведения из данной таблицы.

  1. Поместить на форму компонент Table. Связать этот компонент с таблицей Sotrudniki.db. Таблицу открыть.

  2. Поместить на форму компонент QuickRep. Установить его свойства:

    1. DataSet = Table1.

    2. Top = 0,

    3. Left = 0,

  3. Поместить на отчет компонент QRBand. Установить его свойства

    1. BandType = rbTitle (по умолчанию)

    2. Height = 60

  4. На полосу заголовка поместить компонент QRLabel. Задать его свойства:

    1. Caption = ”Список сотрудников”,

    2. Font.Name = Monotype Corsiva,

    3. Font.size = 20

    4. Alignment = taCenter

  5. Поместить на отчет компонент QRBand. Установить его свойство

    1. BandType = rbDetail (в этой полосе будет отображаться содержимое таблицы)

  6. На полосу Detail поместить четыре компонента QRDBText, которые связать с полями таблицы Table1. Для этого свойству DataSet каждого компонента QRDBText задать значение Table1, а свойству DataField присвоить имя соответствующего поля.

  7. Для просмотра отчета нужно выбрать из контекстного меню отчета пункт Preview.

  8. Для просмотра отчета при открытии формы нужно создать обработчик события OnCreate

Procedure TForm1.FormCreate(Sender:TObject);

Begin

QuickRep1.Preview;

End;

  1. Для закрытия формы при закрытии окна предварительного просмотра нужно создать обработчик события OnAfterPreview компонента QuickRep:

Procedure TForm1.QuickRep1AfterPreview(Sender:TObject);

Begin

Form1.Close;

End;

  1. Отчет готов.

Пример создания отчета, содержащего вычисляемое поле.

И меется таблица Shop.db. Требуется включить в отчет стоимость товара, рассчитанную на основании цены и количества товара.

  1. Создать отчет для таблицы Shop.db

  2. П оместить на полосу Detail компонент QRExpr. Для него в окне Expression Wizard сформировать выражение вычисления стоимости товара.

Итоговая полоса отчета выводится один раз в конце отчета после полосы данных. Она может содержать итоговые сведения отчета (средние и максимальные значения по данным какого-либо поля, должность и фамилия лица, утверждающего отчет). В итоговой полосе размещаются компоненты QRlabel (надпись), QRExpr (значение выражения). В выражении можно использовать функции SUM(<имя _поля>) – сумма значений, MIN(<имя _поля>) – минимальное значение, MAX(<имя _поля>)- максимальное значение, AVERAGE(<имя _поля>) – среднее значение, COUNT – число записей набора данных.

Группирование данных Данные в отчете можно группировать по определенному признаку (например, по наименованию товара для учета продаж товаров). Для группирования записей отчета по определенному полю в наборе данных должен быть установлен текущий индекс, построенный по этому полю. Группирование выполняется с помощью компонента QRGroup. Свойство Expression содержит условие группировки. Для каждой группы выводится ее заголовок и нижний колонтитул группы. В простом отчете с группированием данных используется комбинация компонентов:

QRGroup – полоса группы, свойство FooterBand должно содержать ссылку на компонент нижнего колонтитула группы,

QRBand – полоса данных группы,

QRBand – полоса нижнего колонтитула группы, свойство BandType должно иметь значение rbGroupFooter.

Пример. Выполнить группировку данных по товарам в отчете для таблицы товаров с полями: Tovar, Cena, Kol_vo.

  1. Поместить на форму компонент Table1. Его свойству IndexFieldNames (или IndexName) задать значение ссылки на индекс, построенный по полю Tovar.

  2. Поместить на форму компонент QuickRep1. Свойству Dataset задать значение Table1. Разместить следующие полосы:

  • QRBand1 – полоса заголовка отчета – свойству BandType задать значение rbTitle;

  • QRBand2 – полоса заголовков колонок – свойству BandType задать значение rbColumnHeader;

  • QRGroup1 – полоса группы – свойству FooterBand задать значение QRBand4 (ссылка на колонтитул группы), свойству Expression задать значение Table1.Tovar (поле, по которому будет производиться группировка данных);

  • QRBand3 – полоса детальной информации – свойству BandType задать значение rbDetail;

  • QRBand4 – полоса колонтитула группы – свойству BandType задать значение rbGroupFooterl;

  • QRBand5 – полоса колонтитула отчета – свойству BandType задать значение rbSummary;

  • QRBand6 – полоса колонтитула страницы – свойству BandType задать значение rbPageFooter.

  1. На полосах отчета разместить:

  • QRGroup1 – QRExpr.Expression=Table1.Tovar

  • QRBand3 – QRDBText со ссылками на поля Cena, Kol_vo;

  • QRBand4 - QRExpr.Expression=SUM(Table1.Cena)

  • QRBand5 - QRExpr.Expression=COUNT (общее количество записей)

  • QRBand6 – QRSysData.Data=qrsDate, QRSysData.Data = qrsPageNumber.