Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа 5

.doc
Скачиваний:
15
Добавлен:
15.06.2014
Размер:
626.69 Кб
Скачать

Лабораторная работа № 5

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

Компонент, предназначенный для создания отчетов, находится на странице QReport палитры компонентов.

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

Компонент QuickRep при помещении его на форму имеет вид страницы формата А4, первоначально отображаемый в натуральную величину. Компонент QuickRep связывается с набором данных Table или Query, для которого создается отчет, с помощью свойства DataSet. На практике компонент QuickRep обычно связывается с набором данных, записи которого отображаются на форме в визуальных компонентах. В этом случае в отчет попадают записи, удовлетворяющие, например, критерию фильтрации и/или сортировки, задаваемому пользователем.

Пример связывания отчета с набором данных:

Uses Unit1;

…..

QuickRep1.DataSet:=Form1.Table1;

Или визуально так

В данном случае отчет QuickRep1, находящийся на своей форме, связывается с набором данных Table1, расположенных на форме Form1.

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

Управлять наличием полос в отчете можно двумя путями.

В первом случае с помощью свойства Bands компонента QuickRep. При разработке приложения включение/отключение полосы выполняется установкой соответствующего подсвойства свойства Bands, например, для полосы заголовка таким подсвойством является HasTitle. C помощью этого свойства в простой отчет можно включать следующие полосы:

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

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

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

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

- HasSummary – итог отчета

- HasPageFooter – нижний колонтитул

Второй путь – это то, что перечисленные полосы можно вставлять в отчет с помощью компонента полосы QRBand, при этом тип вставляемой полосы устанавливается через свойство BandType этого компонента.

Способ выравнивания элементов отчета определяет свойство SnapToGrid типа Boolean.

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

Каждая полоса может иметь отдельную рамку, которой управляет свойство Frame, не отличающееся от аналогичного свойства самого компонента отчета QuickRep.

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

Можно разместить компонент отчета и вне полосы – непосредственно на компоненте-отчете QuickRep. В этом случае он будет выводиться на каждой странице отчета.

Обычно используются следующие компоненты отчета:

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

- QRDBText – значение поля записи, обычно размещается в полосе данных.

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

- QRSysData – системная информация, обычно используемая для итоговых полос и полос колонтитулов; ее вид определяется свойством Data типа TQRSysDataType, принимающим значения:

1. qrsColumnNo – номер текущего столбца.

2. qrsDate – текущая дата

3. qrsDateTime – текущие дата и время

4. qrsDetailCount – число записей в наборе данных

5. qrsDetailNo – номер текущей записи

6. qrsPageNumber – номер текущей страницы

7. qrsPageCount – общее число страниц в отчете

8. qrsTime – текущее время (по умолчанию)

- QRImage – компонент для отображения графического изображения, аналогичен компоненту Image.

- QRShape – геометрическая фигура, размещаемая в любой полосе.

Итак, создадим простейший отчет.

Поместите на форму компоненты DataAccess и Table, свяжите их между собой. Затем поместите компонент QuickRep. В его свойстве DataSet выберете Table1. Теперь он связан с Table1.

Поместите на QuickRep полосы PageHeader (верхний колонтитул), Title, ColumnHeader и Detail. Например, это можно сделать, задав нужные свойства у QuickRep, как показано ниже.

На полосу PageHeader поместите компонент QRSysData и установите его свойство Data в qrsDateTime, чтобы он показывал и дату и время.

На полосу ColumnHeader поместите компоненты QRLabel, которые назовите также, как называются поля в таблице.

На полосу Detail поместите под каждым полем компоненты QRDBText. Эти компоненты надо связать с конкретной таблицей и полем. Для этого в свойстве DataSet укажите таблицу, а в поле DataField укажите поле. Чтобы сделать Preview (просмотр отчета), то нажмите на нем правую кнопку мыши и выберите из меню пункт Preview.

Как это сделать из программы, описано ниже. Итак, мы получили:

При нажатии на кнопку Preview получаем следующий отчет (пример в каталоге Lab5_1):

unit MainF;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses qrrep_pas;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2.QuickRep1.Preview;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Form2.QuickRep1.Print;//печать отчета

end;

end.

{------------------------------------------------------------------------------------------------------}

unit qrrep_pas;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, DBTables, ExtCtrls, QuickRpt, QRCtrls, StdCtrls;

type

TForm2 = class(TForm)

DataSource1: TDataSource;

Table1: TTable;

QuickRep1: TQuickRep;

DetailBand1: TQRBand;

TitleBand1: TQRBand;

QRLabel1: TQRLabel;

QRLabel2: TQRLabel;

QRLabel3: TQRLabel;

QRLabel4: TQRLabel;

QRLabel5: TQRLabel;

QRLabel6: TQRLabel;

QRBand1: TQRBand;

QRDBText1: TQRDBText;

QRDBText2: TQRDBText;

QRDBText3: TQRDBText;

QRDBText4: TQRDBText;

QRDBText5: TQRDBText;

PageHeaderBand1: TQRBand;

QRSysData1: TQRSysData;

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

{$R *.dfm}

end.

Создание отчета для связанных наборов данных

Допустим у нас связаны две таблицы Table2 (родительская) и Table1 (дочерняя) по полю Name_cl (таблицы можно найти в прилагаемых примерах). Основной частью отчета является комбинация

- полосы данных QRBand

- полосы детализации QRSubDetail

Компонент QRSubDetail после помещения его в отчет автоматически располагается после полосы данных.

Для полосы данных в качестве набора данных устанавливается главный набор (в нашем случае это Table2).

Для полосы детализации устанавливается подчиненный набор данных. В этой полосе обычно размещаются компоненты, с помощью которых выводятся значения полей записей дочерней таблицы. Это компоненты QRDBText и QRExpr.

Заготовка выглядит следующим образом:

Вверху расположены два компонента: Table2 и Table1, связанных между собой, как описано выше. У компонента QRDBText, помещаемое в полосу SubDetail в свойстве DataSet надо указать таблицу (в нашем случае Table2), а в свойстве DataField – поле, в нашем случае Dohod_cl. Пример программы можно найти в папке Lab5_2.

Задание на лабораторную работу №5

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

  2. Создать отчет для двух связанных таблиц

Соседние файлы в предмете Базы данных