Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Построение отчетов в QReport

Поиск

 

Отчеты – это один из основных результатов работы проекта с базами данных. Отчет подразумевает, что программа выбирает необходимые данные из TTable, TQuery и выводит их на экран в удобном виде. Сам отчет можно не только просматривать, но и выводить его на печать. Лист профессионального отчета представляет собой сгенерированное графическое изображение, картинку, другими словами, данные в отчете редактировать уже нельзя. Не получится также выделить и скопировать в буфер обмена текст отчета. Готовый отчет выводит информацию, разбитую на страницы, и подготовленную к печати.

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

Установка Quick Report.

Quick Report представляет собой стандартный набор компонентов для создания отчетов. Он поставляется вместе с Delphi, но не устанавливается в палитру компонентов автоматически.

Если пакет Quick Report у вас еще не установлен (на палитре компонентов отсутствует вкладка

QReport), то загрузите Delphi и закройте все открытые проекты (File -> Close All). Выбрерите пункт меню «Component -> Install Packages». Нажмите кнопку «Add» и выберите пакет «dclqrt70.bpl», который по умолчанию устанавливается по адресу:

c:\Program Files\Borland\Delphi7\bin\dclqrt70.bpl

и нажмите кнопку «Открыть».

Далее, нажмите кнопку «ОК» - пакет компонентов Quick Report установится, и его вкладка будет самой последней на Палитре компонентов. При желании можно перетащить ее мышью на другое место, поближе к началу (рисунок 22).

 

Рисунок 22 – Вкладка QReport палитры компонентов

 

 

Создание простого отчета

 

Создадим новый проект и разместим на его форме из базы данных DBDEMOS две таблицы Customer.db (покупатели) и Orders.db (заказы), связанные отношением «один-ко-многим». Также добавим кнопку «Отчет» в нижнюю часть формы (рисунок 23).

 

Рисунок 23 – Примерный вид формы со связанными таблицами

 

Для создания отчета необходимо добавить в проект новый модуль. Для этого необходимо в главном меню Delphi выбрать пункты меню FileàNewàOther… (рисунок 24).

Рисунок 24 – Запуск окна выбора дополнительных модулей

 

В появившемся окне необходимо выбрать пункт Report и нажать кнопку «OK» (рисунок 25).

 

Рисунок 25 – Добавление модуля отчета в проект

 

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

 

Рисунок 26 – Окно отчета

 

Для того, чтобы вывести сформированный отчет во время работы программы, необходимо на форме, изображенной на рисунке 23, в обработчике нажатия кнопки «Отчет» добавить вызов просмотра отчета:

procedure TForm1.Button1Click(Sender: TObject);

begin

QuickReport2.Preview; // отображает отчет в немодальном окне

end;

 

или

procedure TForm1.Button1Click(Sender: TObject);

begin

QuickReport2.PreviewModal; // отображает отчет в модальном окне

end;

 

При нажатии на эту кнопку пользователю отобразится серое пустое окно предпросмотра.

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

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

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

К стандартным типам относятся те полосы, которые можно создать при помощи свойства Bands компонента TQuickRep. Все они создаются экземплярами компонента TQRBands и образуют стандартный отчет. В таблице 1 приведены обозначения стандартных полос и их описание. В отчете они расположены в том же порядке, что и в таблице.

 

 

Таблица 1. Структура стандартного отчета QuickReport

Обозначение Описание
Page Header Заголовок страницы. Полоса размещается в верхней части каждой страницы отчета. Обычно здесь размещается служебная информация об отчете
Title Заголовок отчета. Полоса располагается после заголовка только на первой странице отчета. Содержит название отчета
Column Header Заголовок столбца. Может размещаться в произвольных местах отчета, предназначен для выведения общей информации перед началом печати строк данных (шапка таблицы, описание нижеследующих данных и т. д.). В отчете можно размещать несколько таких полос
Detail Полоса данных. Содержит информацию из заданных оформлением отчета полей набора данных. Таких полос в отчете может быть несколько
Summary Итоговая полоса. Располагается сразу после полосы данных. Предназначена для размещения общей информации, суммирующей данные (сумма значений колонок или среднее значение и т. д.)
Page Footer Окончание страницы. Полоса появляется в нижней части каждой страницы. Предназначена для отображения служебной информации

 

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

Создадим простой отчет, содержащий список покупателей. Добавим для отчета заголовок. Для этого выберем на палитре компонентов вкладки QReport компонент QRBand и разместим его на полотне отчета (рисунок 27).

 

Рисунок 27 – Добавление полосы на полотно отчета

 

Далее установим данной полосе свойство BandType в rbTitle.

 

Основное свойство компонента полосы BandType определяет ее тип и, следовательно, поведение. Это свойство устанавливается вручную только в том случае, когда разработчик переносит новый компонент полосы из Палитры компонентов. При использовании свойства Bands отчета тип полосы устанавливается автоматически.

 

Свойство BandType может принимать следующие значения:

1) rbTitle — заголовок отчета;

2) rbPageHeader — заголовок страницы;

3) rbDetail —полоса данных;

4) rbPaqeFooter — окончание страницы;

5) rbSummary — итоговая полоса;

6) rbGroupHeader — полоса начала фуппы;

7) rbGroupFooter — полоса окончания группы;

8) rbSubDetail — подчиненная полоса данных;

9) rbColumnHeader — Заголовок полосы данных;

10) rbOverlay — не применяется;

11) rbChild — дочерняя полоса.

 

Оформление отчета

 

Для оформления внешнего вида отчета и представления данных в наборе QuickReport имеется широкий выбор компонентов. Часть из них просто отображается в отчете, часть предназначена для показа значений полей из связанного с отчетом набора данных.

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

Чаще всего при оформлении отчетов используются три компонента:

· Компонент TQRLabel копирует стандартный компонент TLabel из VCL. Он предназначен для создания статических текстов заголовков, комментариев, сносок и т.д.

· Компонент TQRDBTexr. обеспечивает отображение полей связанного с отчетом набора данных. Он во многом повторяет компонент TDBText со страницы DataControls Палитры компонентов. Набор данных и поле задается свойствами DataSet и DataField. Необходимый для этого компонент доступа к данным должен располагаться на форме отчета или быть доступным через секцию uses модуля формы отчета.

· Компонент TQRShape позволяет оформлять отчет простейшими геометрическими фигурами. С его помощью обычно создаются таблицы. Тип фигуры задается свойством shape. Аналог компонента — компонент TShape со страницы Additional Палитры компонентов.

 

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

· Компоненты TQRMemo и TQRRichText используется для представления нескольких связанных между собой текстовых строк. Набор строк определяется свойством Lines.

· Компонент TQRExprMenio отличается от компонента TQRMemo одним свойством RemoveBlankLines, которое при значении True разрешает удаление из свойства Lines пустых строк. Это свойство работает только для исходных данных, заданных во время разработки, новые строки, вносимые в свойство Lines, например, в методе-обработчике Beforeprint, обрабатываться не будут.

· Компонент TQRDBRichText предназначен для представления в отчетах полей типа Memo набора данных.

· Компонент TQRimage позволяет оформить отчет с картинками. Компонент TQRDBimage представляет в отчете изображения из графического поля набора данных.

 

Данные в отчетах QuickReport можно представлять и в графическом виде. Для этого используется компонент создания графиков в отчетах TQRChart. Система управления графиком основана на аналогичной системе компонента TDBChart.

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

Для решения этой проблемы отчет имеет набор системных переменных:

· Переменная PAGENUMBER определяет выражение для расчета номера текущей страницы.

· Переменная COLUMNNUMBER определяет номер очередной колонки в полосе данных Detail.

· Переменная REPORTTITLE задает заголовок отчета (свойство ReportTitle компонента TQuickRep).

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

· Переменная APPSTARTDATE устанавливает дату печати отчета, а переменная APPSTARTTIME устанавливает время печати отчета.

 

Для представления системных данных в отчете применяется компонент TQRSysData. Для определения вида отображаемой компонентом информации используется свойство Data, которое имеет следующие значения:

· qrsColumnNo — номер текущей колонки в полосе данных Detail;

· qrsDate — текущая дата;

· qrsDateTime — текущие дата и время;

· qrsDetailCount — число записей в связанном с отчетом наборе данных;

· qrsDetailNo — номер текущей записи набора данных.

· qrsPageNumber — номер текущей страницы;

· qrsPageCount — число страниц отчета;

· qrsReportTitle — заголовок отчета;

· qrsTime — текущее время.

 

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

Однако в наборе QuickReport для расчета и представления такого рода данных имеется специальный компонент TQRExpr, использовать который гораздо удобнее. Кроме этого, компонент объединяет гибкий и мощный механизм создания на основе данных из таблиц БД вычисляемых выражений. Добиться аналогичных результатов стандартными средствами Delphi можно, лишь создавая довольно громоздкие дополнительные запросы SQL.

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

Свойство Master используется для связывания компонента с отчетом или полосой данных. Свойство Mask позволяет определить особенности отображения результатов вычислений. Со свойством Expression связан специализированный редактор Expression Wizard, который автоматизирует процесс создания вычисляемого выражения. Центральную часть диалога занимает многострочный редактор, который должен содержать текст вычисляемого выражения. Ниже расположены основные элементы управления (рисунок 28).

Рисунок 28 – многострочный редактор регулярных выражений Expression Wizard

 

Для того, чтобы создаваемый нами отчет был связан с данными, нам необходимо у компонента полотна QuickReport указать набор данных с помощью задания свойству DataSet значения Form1.CustTable.

Разместим на полотне отчета, компоненты, показанные на рисунке 29. Для этого добавим на полотно полосу заголовка (Title).

Разместим на полотне компонент QRBand и выставив его свойство bandType в rbTitle. Добавим компонент QRLabel и присвоим свойству Caption значение «Отчет по покупателям». С правого края полосы добавим компонент QRSysData и установим свойство Data = qrsDateTime. Таким образом на нашем отчете будет отображаться дата и время генерации отчета.

Добавим на полотно компонент QRBand и выставив его свойство bandType в rbColumnHeader. Данная полоса будет содержать заголовки столбцов. Для этого добавим на нее компоненты QRLabel и зададим им необходимые названия.

Последней добавляемой полосой в этом отчете будет полоса, на которой будут размещаться данные компаний. Добавим на полотно компонент QRBand и выставим его свойство bandType в rbDetail. Добавим компоненты QRDBText для каждого столбца. Для того, чтобы в этих компонентах отображались данные определенного столбца, необходимо указать источник данных в свойстве DataSet и в свойстве DataField выбрать соответствующий столбец таблицы.

 

Рисунок 29 – Простой отчет QuickReport

 

Запустим наше приложение и нажмет кнопку «Отчет». На экране появится окно предпросмотра отчета, показанное на рисунке 30.

Рисунок 30 – Окно предпросмотра отчета с данными

 

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

Для этого добавим на полотно отчета полосу QRSubDetail. В свойстве DataSet данной полосы установим источник данных подчиненной таблицы (Form1.OrdTable). Разместим на полосе дочерних записей необходимые компоненты для вывода данных. Для этого разместим компоненты QRDBText и установим им свойство DataSet = Form1.OrdTable. Также зададим свойство DataField.

Чтобы у дочерних записей была своя строка заголовка, необходимо добавить полосу QRGroup. В свойстве Master необходимо указать для какой полосы она будет группирующей (QRSubDetail1). Пример добавления детализирующей таблицы показан на рисунке 31.

 

Рисунок 31 – Пример отчета с детализирующей информацией по заказам компаний

 

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

 

 

Рисунок 32 – Пример отчета с детализирующей информацией по заказам компаний

 

 

ЗАДАНИЕ

• Напишите запрос, который бы выдавал наименование фирмы-производителя, адрес и телефон для каждой детали после номера детали и номера производителя (Таблица деталей – parts.db, таблица производителей – vendors.db). Столбцы результирующего запроса должны быть расположены в следующем порядке: PartNo (номер детали), VendorNo (Номер производителя), VendorName (Наименование производителя), Address1 (Адрес производителя), Phone (Телефон производителя)… Пример показан на рисунке 33.

 

Рисунок 33 - Пример выполнения запроса

 

• Создать отчет для созданного запроса;

 

 

При реализации лабораторной работы необходимо выполнить следующие условия:

 

• реализовать выборку данных с помощью компонента TQuery;

• создать отчет на основе выбранных данных;

• сохранить проект в папку для лабораторной работы 16.

• сохранить таблицы с данными в папке для лабораторной работы 16.


КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Перечислите служебные слова, используемые в команде SELECT?

2. Что записывается после слова FROM в команде SELECT?

3. Что в запросах вычисляют функции AVG и COUNT?

4. Какой компонент в Delphi служит для создания запросов? На какой странице он находится?

5. Для чего используются компоненты вкладки QReport палитры компонентов?

 

Список литературы

1. Культин Н. Б. Основы программировании в Delphi 7. – СПб.: БХВ-Петербург. 2009.

2. Митчел К. Керман. Программирование и отладка в Delphi. Учебный курс. – М. Издательский дом «Вильямс». 2002.

3. Немцова Т. И., Голова С. Ю., Абрамова И. В. Программирование на языке высокого уровня. Программирование на языке Object Pascal: Учебное пособие. – М.: Издательский Дом "ФОРУМ"; М.: ООО "Научно-издательский центр ИНФРА-М", 2013.



Поделиться:


Последнее изменение этой страницы: 2016-04-23; просмотров: 5836; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.151.127 (0.013 с.)