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

Рассмотрим порядок создания сложных отчетов на примере создания отчета «Итоги Олимпиады». База зарегистрирована под псевдонимом (алиасой) «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 (число бронзовых медалей).

На этапе создания базы данных связи между таблицами не формируются. Рассмотрим шаги по формированию отчета.

1. В Delphi 7 создадим новый проект и модуль данных командой File/New/Data Module(рис. 3.11.4.1).

Рис. 3.11.4.1. Окно модуля данных

 

На главной форме разместим две кнопки: для вызова отчета и для выхода из приложения. Добавим на форму модуля данных компонент Query. Для этого компонента создадим запрос командой SQL Builderиз контекстного меню. В поле Database выберем базу данных «Olimpiada», перенесем в запрос таблицы «Призеры» (Prizeri.db), «Страны» (Strani.db), «Виды спорта» (Vidi_Sporta.db), «Спортсмены» (Sportsmeni.db). Свяжем таблицы (рис. 3.11.4.2). Результат запроса будет отображать поля NS (название страны) и NVS (название вида спорта) вместо их кодов и поле Fam (фамилию участника) вместо его регистрационного номера.

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

 

2. Командой File/Use Unit подключим модуль данных к главной форме.

3. Разместим на форме модуля данных компоненты RvProject, RvSystem и RvQueryConnection со страницы Rave (рис. 3.11.4.1). Свойство Engine компонента RvProject1 установим равным RvSystem1. Свяжем компонент RvQueryConnection1 с запросом Query1 (свойство Query). Двойным щелчком на компоненте RvProject1 вызовем конструктор отчетов Rave Reports 5.0 (рис. 3.11.2.1).

4. Введем в проект объект просмотра данных. Для этого выполним команду File/New Data Object. Откроется окно выбора типа объекта. Выберем Direct Data View и нажмем кнопку Next. Появится диалоговое окно Data Connections со списком объектов доступа к данным. Выделим компонент RvQueryConnection1, щелкнем на кнопке Finish. В дереве объектов, в правой части окна конструктора, в вершине Data View Dictionary появятся источники данных DataView.

5. Расположим компонент Region (со страницы Report) на всей площади страницы, оставив сверху место для заголовка отчета и заголовков столбцов.

6. Разместим в компоненте Region1 шесть информационных полос: сначала две обычных полосы Band, затем - одну полосу данных DataBand, затем снова три обычных полосы Band (рис. 3.11.2.1). В полосе данных Band1 будет размещаться название страны. В полосу Band2 будет выводиться название вида спорта. Полоса DataBand1 служит для вывода фамилий призеров, а также числа золотых, серебряных и бронзовых медалей у каждого из них. Обычная полоса Band3 будет содержать итоговые данные (количество медалей разного достоинства) по виду спорта, Band4 – по каждой стране. В полосу Band5 будут выводиться итоги по отчету.

7. Расположим в полосе Band1 компонент DataText со свойствами DataView=DataView1, DataField=NS. В свойстве ControllerBand этой по­ло­сы выберем DataBand1 (мы указали, что эта полоса будет управляться полосой DataBand1). Свойства GroupDataView=DataView1, GroupKey=NS. Установим свойство BandStyle, редактор которого вызывается кнопкой с многоточием. В диалоговом окне Band Style Editor установим флажок напротив значения Group Header.

8. В полосе под именем Band2 будут выводиться названия видов спорта. Установим свойство BandStyle= Group Header для этой полосы. Группировка данных в этой полосе будет производиться по полю NVS источника данных DataView1 (GroupDataView=DataView1, Group­Key=NVS). Разместим в полосе компонент DataText под именем DataText2 со свойствами: DataView=DataView1, DataField=NVS.

9. В полосе DataBand1 будут выводиться имена медалистов и число золотых, серебряных и бронзовых медалей у каждого из них. Свяжем полосу с просмотром данных DataView1. В свойстве BandStyle отметим пункт Detail. Теперь разместим в этой полосе четыре компонента DataText, свяжем их с источником данных DataView1, один из них – с полем Fam, три других – с полями Z, S, B соответственно.

10. Полоса Band3 содержит итоговые данные по виду спорта. Свойства этой полосы: ControllerBand=DataBand1, BandStyle=Group Footer, GroupDataView=DataView1, Group­Key=NVS. Разместим в этой полосе компонент Text со страницы Standard c текстом «Итого медалей по виду спорта». Добавим на эту полосу три компонента CalcText (панель Report) со свойствами: Controller=DataBand1; CalcType=ctSum, DataField равно Z, S или B соответственно.

11. Полоса Band4 содержит итоговые данные по стране и имеет свойства: ControllerBand=DataBand1, BandStyle=Group Footer, GroupData­View=DataView1, Group­Key=NS. Разместим в этой полосе компонент Text с текстом «Итого медалей по стране». Аналогично предыдущему пункту добавим на эту полосу три компонента CalcText со свойствами Controller=DataBand1; CalcType=ctSum, DataField равно Z, S или B

12. В полосе Band5 расположим компонент Text с текстом «Итого медалей разыграно». Рядом расположим три компонента CalcText. Их свойства установим такими же, что и в предыдущем пункте. Свойство BandStyle этой полосы нужно установить в Body Footer.

13. Создадим заголовок отчета. Перенесем на форму компонент Text, разместим его над компонентом Region. Внесем в него текст «Итоги Олимпиады». Чуть ниже расположим два компонента DataText. В свойство DataField одного из этих компонентов укажем Report.DateShort. В свойство DataField другого компонента внесем строку: 'Лист ' +Report.CurrentPage. Это даст нам возможность отобразить в отчете сегодняшнюю дату и номер текущего листа. Над компонентом Region разместим четыре компонента Text, занесем в них заголовки колонок отчета (Призер, Золото, Серебро, Бронза).

14. Отформатируем отчет (установим нужные свойства шрифтов, добавим линию, отделяющую заголовки колонок отчета, выровняем компоненты в полосах). Разработка отчета завершена, его можно запустить в окне предварительного просмотра (кнопка Execute Report) и распечатать (рис. 3.11.4.3). Отчет сохраним в папке проекта под именем Project1.

 

Рис. 3.11.4.3. Вид отчета на бумаге

 

15. Вернемся в Delphi. В свойстве ProjectFile компонента RvProject1 укажем имя файла проекта Rave, под которым мы сохранили наш отчет. Зададим FormState=wsMaximized и, при необходимости, другие значения свойствам предварительного просмотра и печати отчетов.

16. В обработчик события OnClick кнопки Отчет добавим следующие операторы:

DataModule1.RvProject1.Open;

try

DataModule1.RvProject1.Execute;

finally

DataModule1.RvProject1.Close;

end;

В обработчик события OnDestroy формы Form1 добавим оператор:

DataModule1.RvProject1.Close;

Это обеспечит удаление отчета из памяти, если отчет запускался при выполнении приложения.

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

Создание приложения завершено. Откомпилируем и сохраним его.








Дата добавления: 2016-03-22; просмотров: 906;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.