Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
67
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

3.12.2. Конструктор отчетов

Визуальный конструктор отчетов (рис. 3.12.2.1) FastReportслужит для упрощения непосредственной разработки форм отчетов и позволяет сразу выполнить предварительный просмотр. Чтобы вызвать конструктор FastReport, нужно выполнить двойной щелчок мышью на компонентеTfrxReport.

Рис. 3.12.2.1. Окно конструктора отчетов

Для использования дизайнера в скомпилированном проекте необходимо использовать компонент TfrxDesigner из палитры компонен­тов FastReport либо включить в список usesмодуль frxDesign. Использо­вание дизайнера во время выполнения приложения дает пользователю возможность настраивать вид отчета, а также редактировать готовый отчет.

В FastReport пустой отчет представлен в виде листа бумаги. На любое место листа можно положить объекты, которые могут отображать разную информацию (текст, графику) и определять внешний вид отчета.

3.12.3. Компоненты панели инструментов

Кратко опишем назначение объектов конструктора FastReport:

Бэнд - позволяет задать область отчета с определенным поведением.

Текст- отображает одну или несколько строк текста внутри прямо­угольной области.

Рисунок- отображает графический файл формата BMP, JPEG, ICO, WMF, EMF.

Линия- отображает горизонтальную или вертикальную линию.

Служебный текст- отображает служебную информацию (дата, время, номер страницы), а также агрегатные значения.

Вложенный отчет- позволяет вставить дополнительный отчет внутрь основного.

Фигура- объекты категории «Рисование» представляют собой различные геометрические фигуры (наклонная линия, прямоугольник, прямоугольник с закругленными углами, эллипс, треугольник, ромб).

Диаграмма- отображает данные в виде диаграмм различных типов (круговая диаграмма, гистограмма и т.п.).

RichText- отображает форматированный текст в формате RTF.

CheckBox- отображает независимый переключатель (флажок).

Штрихкод- отображает данные в виде штрихкода (доступно около десятка разных типов штрихкодов).

OLE- может отображать любой объект, используя технологию OLE.

Градиент- отображает градиентную заливку.

3.12.4. Отчет из нескольких таблиц с группировкой данных и итогами

Рассмотрим порядок создания сложных отчетов на примере отчета «Итоги Олимпиады». Каталог базы зарегистрирован под псевдонимом «Olimpiada» при помощиBDE Administrator.

База данных в формате Paradoxсоздана в приложенииDatabase Desktop и состоит из четырех таблиц:

1. «Страны» (Strani.db) с полями:KS(код страны),NS(название страны).

2. «Виды спорта» (Vidi_Sporta.db) с полями:KVS(код вида спорта),NVS(название вида спорта).

3. «Спортсмены» (Sportsmeni.db) с полями:RN(индивидуальный регистрационный номер),Fam(фамилия).

4. «Призеры» (Prizeri.db) с полями:KS(код страны),KVS(код вида спорта),RN(инди­видуальный регистрационный номер),Z(число золотых медалей),S(число серебряных медалей),B(число бронзовых медалей).

На этапе создания базы данных связи между таблицами не форми­руются. Отчет строится на основе SQL-запроса к базе данных.

  1. В Delphiсоздадим новый проект. На главной форме приложения разместим две кнопки (рис. 3.12.4.1): для вызова отчета и для выхода из программы. Также добавим на форму компонентQueryсо страницыBDE(илиDataAccess) под именемQuery1 и компонентыfrxDBDatasetиfrxDBReportсо страницыFastReport3.0 под именамиfrxDBDataset1 иfrxReport1 соответ­ственно.

Рис. 3.12.4.1. Вид формы вызова отчета

  1. Для компонента Queryсоздадим запрос с помощьюSQL Builder (правой кнопкой мыши на компонентеQuery1, пунктSQL Builder). В полеDatabaseвыберем базу данных «Olimpiada», перенесем в запрос таблицы «Призеры» (Prizeri.db), «Страны» (Strani.db), «Виды спорта» (Vidi_Sporta.db), «Спортсмены» (Sportsmeni.db). Свяжем таблицы (рис. 3.12.4.2).

Рис. 3.12.4.2. Окно построителя запросов

  1. Результат запроса будет отображать поля NS(название страны) иNVS(название вида спорта) вместо их кодов и полеFam(фамилию участника) - вместо его индивидуального регистрационного номера. На страницеSortingукажем поля сортировкиStrani.NS,Vidi_sporta.NVS,Sportsmeni.Fam(страны, виды спорта и фамилии спорт­сменов). Нажмем кнопкуExecute Queryдля проверки запроса. Закроем окно построителя.

  2. Свяжем компонент frxDBDataset1 с запросомQuery1 (свойствоDataSet).

  3. Двойным щелчком на компоненте frxReport1 вызовем конструктор отчетовFastReport (рис. 3.12.2.1). Подключим к отчету источник данныхfrxDBDataset1. Для этого вы­полним командуReport/Dataи в появившемся окне отметим галочкой пунктfrxDBDataset1; подтвердим выбор нажатием кнопки ОК.

  4. С помощью инструмента Бэнд (Band)добавим на рабочее поле страницыPage1 информаци­онные полосы:ReportTitle,ColumnHeader. Добавим две полосыGroupHeader: в появившемся диалоговом окнеGroup(рис. 3.12.4.3) для первой полосы установим наш источник данныхfrxDBDataset1, полеNS, для второй ­- полеNVS. При изменении значений этих полей будет происходить переход отчета на следующую группу. Разместим полосыMasterDataс подключением к источнику данныхfrxDBDataset1,GroupFooter(две полосы) иReportSummary. В полосе данныхGroupHeader1 будет размещаться название страны. В полосуGroupHeader2 будет выводиться название вида спорта. ПолосаMasterData1 служит для вывода фамилий призеров, а также числа золотых, серебряных и бронзовых медалей у каждого из них. ПолосаGroupFooter2 будет содержать итоговые данные (число медалей разного достоинства) по виду спорта,GroupFooter1 - по каждой стране. В полосуReportSummary1 будут выводиться итоги по отчету.

Рис. 3.12.4.3. Окно группировки данных

  1. Создадим заголовок отчета. С помощью инструмента Edit Text ToolилиText Objectдобавим на полосуReportTitle1 компонентMemo1. Внесем в него текст «Итоги Олимпиады» и разместим в центре полосы.

  2. Из правой части окна конструктора с вкладки Variables(список систем­ных и пользовательских переменных) перетащим мышкой перемен­нуюDateна полосуReportTitle1, поместив ее под текстом «Итоги Олимпиады». Это позволит отобразить в отчете системную дату.

  3. В полосе ColumnHeader1 разместим четыре компонентаMemo, занесем в них заголовки колонок отчета («Призер», «Золото», «Серебро», «Бронза»).

  4. Из правой части окна конструктора с вкладки Dataперетащим на по­лосуGroupHeader1 полеNS. Конструктор автоматически создаст компонентMemoс текстом[frxDBDataset1."NS"]. Это значит, что компонентMemoбудет отображать записи поляNS(название страны). Обратите внимание на то, что имена полей заключаются в кавычки.

  5. Аналогично на полосу GroupHeader2 перетащим полеNVS(здесь будут выводиться названия видов спорта), а на полосуMasterData1 - поляFamиZ,S,B(фамилия призера и число им завоеванных золотых, серебряных и бронзовых медалей).

  6. Полоса GroupFooter2 содержит итоговые данные по виду спорта. Разместим в этой полосе компонентMemocтекстом «Медалей в этом виде спорта:». Добавим на эту полосу еще компонентMemo. В окне ввода текста нажмем на кнопкуInsert Aggregate(вставка агрегатной функции). Откроется диалоговое окно установки параметров агрегирования (рис. 3.12.4.4). Выберем функцию агрегированияSUM, привязку к полосе -MasterBand1, набор данных -frxDBDataSet1, поле -Z, щелкнем по кнопкеOK. Проделаем то же для полейSиB(можно скопировать объектMemoдля поляZи заменить букву имени поляZнаSиB).

Рис. 3.12.4.4. Окно агрегирования

  1. Полоса GroupFooter1 содержит итоговые данные по стране. Разместим в этой полосе компонентMemocтекстом «Медалей по стране:». Компоненты с агрегированием можно скопировать из полосыGroupFooter2.

  2. В полосе ReportFooter1 расположим компонентMemoс текстом «Всего медалей разыграно:». Добавим на эту полосу еще один компонентMemо, вызовем конструктор вставки агрегатной функции и укажем те же параметры, что на предыдущем шаге, отметив также пункт «RunningTotal». Это приведет к тому, что значение переменной не будет обнуляться при переходе отчета на следующую группу (страну или вид спорта). То же самое проделаем для полейSиB. Таким образом, в конце отчета мы получим сумму врученных на Олимпиаде медалей каждого достоинства.

  3. Отформатируем отчет (установим нужные свойства шрифтов, добавим линию, отделяющую заголовки колонок отчета, выровняем компоненты в полосах). Установим выравнивание компонентов. Разработка отчета завершена (рис. 3.12.2.1), его можно запустить в окне предваритель­ного просмотра и распечатать.

Отчет сохраним в папке проекта под именем Olimpiada.fr3.

  1. Вернемся в Delphi. В обработчик события OnClick кнопки Отчет(рис. 3.12.4.1) добавим оператор вызова отчета: frxReport1.ShowReport.

В обработчик события кнопки Выходдобавим оператор Close.

  1. Создание приложения завершено. Выполним приложение, нажмем кнопку Отчет и проверим отчет (рис. 3.12.4.5). Откомпилируем, сохраним приложение.

Рис. 3.12.4.5. Окно просмотра отчета