Базы Данных с нуля
Работа с QuickReport

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

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

Главным элементом отчета является компонент QuickRep, который представляет собой фундамент будущего отчета, на котором располагаются остальные элементы отчета. Обычно компонент QuickRep располагают на отдельной форме. Этот компонент при помещении на форму представляет собой страницу формата А4 в натуральную величину. Первоначально он имеет имя QuickRep1 и при желании ему можно задать любое имя.

Для того чтобы в отчете отображалось текущее содержание Базы Данных, компонент отчета нужно связать с набором данных TTable или TQuery. Именно для этого служит свойство DataSet.

QuickRep1.DataSet:=Table1;
QuickRep2.DataSet:=Query1;

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

Для создания полос используется свойство Band типа TQuickRepBands. Наличием той или иной полосы можно управлять путем установки логического значения соответствующего подсвойства. Вот список всех полос:

   HasPageHeader - Верхний колонтитул;
   HasTitle - Заголовок отчета;
   HasColumnHeader - Заголовок столбца отчета;
   HasDetail - Область отображения самих данных;
   HasSummary - Итогоги отчета;
   HasPageFooter - Нижний колонтитул.

Полосы так же можно добавлять в отчет и при помощи компонента полосы QRBand. При этом тип полосы устанавливается при помощи свойства BandType.

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

Для печати отчета предназначен метод Print. При вызове данного метода происходит печать отчета без каких-либо запросов и диалоговых окон. Так же существует возможность предварительного просмотра отчета при помощи метода Preview. В результате вызова этого метода на экране появляется специальное окно, в котором отображается отчет со всем его содержимым. При этом, если отчет связан с набором данных, то отчет всегда будет отображать текущее состояние набора данных.

// Печать отчета
QuickRep1.Print;
// Предварительный просмотр отчета
QuickRep2.Preview;

Ну, а теперь перейдем к созданию отчета. Для этого нужно создать новый проект. Я предлагаю создать в проекте всего две формы. На первой форме будет располагаться сетка для отображения содержимого Базы Данных и кнопка для печати отчета. На второй форме будет находиться сам отчет. На главную форму проекта нужно положит компоненты: набор данных - Table, источник данных - DataSource, сетку - DBGrid и кнопку Button1. На этапе разработки главная форма будет иметь следующий вид:


procedure TForm1.FormCreate(Sender: TObject);
begin
 // Закрываем набор данных
 Table1.Close;
 // Задаем псевдоним (алиас) Базы Данных
 Table1.DatabaseName:='DBDEMOS';
 // Задаем имя Базы Данных
 Table1.TableName:='Animals.dbf';
 // Связываем источник данных с набором данных
 DataSource1.DataSet:=Table1;
 // Задаем сетке источник данных
 DBGrid1.DataSource:=DataSource1;
 // Открываем набор данных
 Table1.Open;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 // Предварительный просмотр отчета
 Form2.QuickRep1.Preview;
end;

Теперь перейдем к созданию формы с отчетом. На форму положим компонент QuickRep. С помощью свойства Band укажем наличие таких полос как: PageHeader - верхний колонтитул, Title - заголовок отчета, ColumnHeader - заголовки столбцов отчета, Detail - область отображения данных, PageFooter - нижний колонтитул. На полосы PageHeader, PageFooter, Title и ColumnHeader положим компоненты QRLabel и зададим соответствующие заголовки, как это указано на рисунке. А на полосу Detail положим четыре компонента QRDBText.


procedure TForm2.FormCreate(Sender: TObject);
begin
 // Связываем компоненты TQRDBText с набором данных  
 QRDBText1.DataSet:=Form1.Table1;
 QRDBText2.DataSet:=Form1.Table1;
 QRDBText3.DataSet:=Form1.Table1;
 QRDBText4.DataSet:=Form1.Table1;

 // Задаем компонентам TQRDBText соответствующие поля Базы Данных
 QRDBText1.DataField:='Name';
 QRDBText2.DataField:='Size';
 QRDBText3.DataField:='Weight';
 QRDBText4.DataField:='Area';
end;

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

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

Вернуться в оглавление
Вернуться на главную страницу
Hosted by uCoz