Delphi. FastReport. Вывод Master-detail данных из БД. Группировка

В данной статье выведем Master-Detail отчет с помощью FastReport.

За основу базы данных возьмем следующую модель

1

Довольно простой пример. Отделы и сотрудники – связь один ко многим. Попробуем аккуратно отобразить данные в нашем отчете FastReport.

Не сгруппированные данные

Для начала попробуем обойтись вот таким набором компонент.Без группировки. Вопрос подключения к БД оставляю за рамками статьи. Можете посмотреть в разделе FireDAC.

2

в FDQuery1.SQL пропишем

в FDQuery2.SQL пропишем

В frxDBDataset1.DataSet выберем FDQuery1

В frxDBDataset2.DataSet выберем FDQuery2

Теперь перейдем в дизайнер отчетов и заполним его следующим образом

4

Казалось бы всё логично… А что на самом деле? Нажмём на Ctrl+P и посмотрим…

Ерунду заказывали? Ерунду и получаем)))

5

В каждом отделе у нас сотрудники из всех отделов, а ведь это совсем не то, что нам нужно !!!

Группировка данных в MasterDetail

Как это исправить? Читаем руководство пользователя и делаем по аналогии. Очень просто, добавим на форму FDQuery3 и напишем простейший SQL запрос  в свойстве FDQuery3.SQL

Если смотреть в workbench, то он выдаст нам следующее множество

8

Но что с ним делать? С таким множеством? Давайте посмотрим…

Итак, добавим на форму следующие компоненты

6

В FDQuery3.SQL допишем тот запрос, который мы указали выше.

В frxDBDataset2.DataSet выберем FDQuery3 и свойство UserName назовём Group

Зайдем в дизайнер отчетов и добавим Заголовок группы или GroupHeader из списка “бэндов”. В результате у нас всплывет такое окно. Заполним его следующим образом.

9

Сам отчет оформим таким образом

7

Тут стоит отметить, что поскольку в разных таблицах, которые мы объединяли в группу были разные имена, то у нас получились, например Name и Name1, здесь, просто внимательней при выборе полей для отображения!!!

11

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

12

Нажмём на просмотр и увидим то, что нам нужно – сотрудники сгруппированы по отдела

10

Все вместе будет выглядеть так…

13

This entry was posted in Delphi, FastReport. Bookmark the permalink.