Рассмотрим теперь вторую часть руководства по созданию группирующего отчета, т.е. отчета с использованием группировки.
Группирующими называются отчеты, в которых вся информация разделяется на группы данных, объединенных каким-то общим признаком. Например, описания (характеристики), относящиеся к определенному цветку, или на другом примере – список товаров, поставленных конкретным поставщиком.
Спецификой группирующего отчета является то, что полосы с данными, относящимися какой-то группе, должны указывать на объект отображения данных в свойстве GroupView и на поле группировки в свойстве GroupKey (см. пункт 25). Поле группировки – это поле, изменение значения которого означает конец предыдущей группы и начало следующей. Обычно такое поле указывается первым в предложении ORDER BY или GROUP BY SQL-запроса.
Пусть, например, необходимо получить список всех описаний цветков с группировкой по полю p1 «Название цветка».
Для этого:
15. Размещаем в приложении на Модуле данных компонент GROUP (класса TADOQuery), подключенный к БД, со следующим текстом запроса:
SELECT * FROM t1, t2, t3
WHERE t1.i1=t2.i1 AND t3.i3=t2.i3
ORDER BY p1
16. С закладки Rave размещаем на Модуле данных компонент ConnectToGroup (класс TRvDataSetConnection), являющийся посредником для взаимодействия отчета с набором данных GROUP, и, заполнив свойство DataSet, связываем его с набором данных
17. В утилите Rave Reports Designer в уже разработанном проекте отчетов Reports.rav создаем новый отчет (главное меню File -> New Report), и переименовываем его в MyGroupReport
18. С помощью команды меню File -> New Data Object создаем в проекте отчетов объект отображения данных типа Direct Data View, ссылающийся на связной компонент ConnectToGroup (класс TRvDataSetConnection) в Delphi-приложении
19. На пустую страницу можно поместить надписи, графические изображения и другие элементы оформления с вкладок Drawing, Bar Code и Standard среды Rave Designer.
20. Далее, на страницу отчета помещаем область отображения данных Region
(с закладки Report) и устанавливаем нужные размеры этой области
21. В область отображения данных помещаем полосу заголовка отчета (это компонент Band с закладки Report). На нее размещаем компонент Text с закладки Standard, т.е. сам текст заголовка, который указывается в свойстве Text.
Обращаю внимание на то, что все компоненты, размещенные в проекте отчетов, отображаются справа в дереве конструирования! Отмечу, что те компоненты, у которых на иконке есть красная отметка (например, DataBand, DataText и др.) будут непосредственно связаны с данными, с полями набора данных!
22. Далее, ниже располагаем три полосы:
§ для отображения заголовка данных (полоса Band2);
§ для вывода собственно сгруппированных данных (полоса DataBand1);
§ для итога отображения (полоса Band3).
23. На заголовочной (Band2) и итоговой (Band3) полосах, а также полосе с детальными данными (DataBand1) располагаем необходимые компоненты DataText для отображения данных из отдельных полей НД, компоненты Bitmap, компоненты Text с названиями полей и, возможно, оформительские компоненты, например, расчерчивающие линии и т.д.
24. Каждый компонент, используемый для отображения данных из отдельных полей НД, через свойство DataView связываем с объектом отображения данных, а в его свойстве DataField указываем отображаемое компонентом поле данных или выражение с участием полей и системных переменных
25. Каждая из трех полос (Band2, DataBand1 и Band3) должна иметь ссылку на объект отображения данных в свойстве GroupDataView и группирующее поле в свойстве GroupKey! В нашем примере это поле p1 «Название цветка»
26. Кроме того, полоса с детальными данными DataBand1 должна быть связана с объектом отображения данных еще через свойство DataView !
27. В редакторе свойства BandStyle полосы Band2, используемой для отображения заголовка данных, устанавливаем флажок Group Header; у полосы Band3, используемой для итога отображения, – флажок Group Footer. В редакторе свойства BandStyle полосы DataBand1, используемой для отображения сгруппированных данных, флажки в группе Print Location можно не устанавливать
28. Заголовочная (Band2) и итоговая (Band3) полосы должны ссылаться на полосу с группой данных (DataBand1) в своем свойстве ControllerBand. Чтобы это стало возможным, средняя полоса с данными должна быть именно компонентом DataBand
На этом формирование проекта отчетов завершено. Теперь данный проект содержит два отчета: простой (отчет MySimpleReport) и группирующий (MyGroupReport)
29. Сохраняем проект под именем Reports.rav
30. Далее, напоминаю о том, что в Delphi-приложении должен быть размещен на модуле данных компонент MyProject (класс TrvProject) с указанием ссылки на созданный проект отчетов Reports.rav в свойстве ProjectFile, а также, компоненты класса TRvRenderXXXX для обеспечения возможности экспортировать содержимое отчетов в файл при выборе команды File -> Save As
31. Создаем для предусмотренного ранее подпункта главного меню N7 «Группирующий отчет (Цветы с описаниями)» процедуру-обработчик события OnClick, в которую записываем программный код по открытию группирующего НД, запуску проекта отчетов и формированию разработанного отчета MyGroupReport, и закрытию НД:
DM.GROUP.Open;
DM.MyProject.ExecuteReport('MyGroupReport');
DM.GROUP.Close;
J