Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 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 (или Data Access) под именем Query1 и компоненты frxDBDataset и frxDBReport со страницы FastReport 3.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 информаци­онные полосы: Report Title, Column Header. Добавим две полосы Group Header: в появившемся диалоговом окне Group (рис. 3.12.4.3) для первой полосы установим наш источник данных frxDBDataset1, поле NS, для второй ­- поле NVS. При изменении значений этих полей будет происходить переход отчета на следующую группу. Разместим полосы Master Data с подключением к источнику данных frxDBDataset1, Group Footer (две полосы) и Report Summary. В полосе данных 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 содержит итоговые данные по виду спорта. Разместим в этой полосе компонент Memo c текстом «Медалей в этом виде спорта:». Добавим на эту полосу еще компонент 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 содержит итоговые данные по стране. Разместим в этой полосе компонент Memo c текстом «Медалей по стране:». Компоненты с агрегированием можно скопировать из полосы GroupFooter2.

  2. В полосе ReportFooter1 расположим компонент Memo с текстом «Всего медалей разыграно:». Добавим на эту полосу еще один компонент Memо, вызовем конструктор вставки агрегатной функции и укажем те же параметры, что на предыдущем шаге, отметив также пункт «Running Total». Это приведет к тому, что значение переменной не будет обнуляться при переходе отчета на следующую группу (страну или вид спорта). То же самое проделаем для полей 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. Окно просмотра отчета