![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Простой отчет
Простой отчет формируется из одного набора данных без группировки данных. Рассмотрим порядок его формирования на примере справочника заказчиков (рис. 3.10.3.1). Рис. 3.10.3.1
. Окна проектирования (QuickRep) и просмотра отчета (Preview) 1. Разместим на форме компонент Table со свойствами: Name=Table1, Active=True, DatabasesName=stroiki (псевдоним базы), TableName=zakazhiki.db. 2. Разместим компонент QuickRep под именем QuickRep1. Для всех подсвойств свойства Band укажем значение True (вывод всех полос отчета). Свойство DataSet=Table1. 3. Размеcтим на полосах нужные компоненты отчета: QRLabel (надписи, заголовки колонок), QRDBText (поля Kz, Nz в детальной полосе), QRExpr (поля Data, Count со значениями Data и Count для свойства Expression), QRSysData (вывод номера листа Data=qrsPageNumber). 4. Разместим кнопку Вывод (кнопку лучше размещать на основной форме, а не на форме с отчетом, как в нашем случае) с командой формирования и просмотра отчета QuickRep1.Preview. 5. Проверим правильность, выполнив команду Preview из контекстного меню компонента QuickRep или выполнив все приложения и нажав кнопку Вывод.
Рассмотрим порядок создания сложных отчетов на примере создания отчета «Состояние строек по заказчикам и подрядчикам» (рис. 3.10.4.3). Создадим новый проект из двух форм. Разместим на второй форме компонент Query (панель Data Access) под именем Query1 со свойствами: DatabaseName=Stroiki (псевдоним нашей базы (п. 3.2)), Active=True (активизация запроса) (рис. 3.10.4.2). Для формирования запроса выполним команду SQL Builder из контекстного меню компонента Query. Появится окно построителя (рис. 3.10.4.1). Выберем в поле DataBase базу с псевдонимом Stroiki и перенесем все таблицы базы, используя поле Table. Рис. 3.10.4.1. Окно построителя запросов
Отметим включаемые в запрос поля. Мышкой свяжем таблицы по полям Kz и Kp (коды заказчиков и подрядчиков) и на странице Joins проверим связи. На странице Sorting укажем поля сортировки Nz и Np (наименования заказчиков и подрядчиков). Нажмем кнопку Execute Query Рис. 3.10.4.2. Окно проектирования отчета QuickRep Рис. 3.10.4.3. Окно просмотра сформированного отчета Preview Разместим на второй форме компонент QuickRep (панель QReport) под именем QuickRep1 со свойствами: DataSet=Query1 (сформированный ранее запрос является исходным набором данных для отчета); составное свойство Bands задает вывод соответствующих полос отчета Page Header (заголовок листа), Column Header (заголовки колонок), Detail (детальная полоса), Summary (итоги по отчету). Разместим компоненты QRExpr в детальной полосе для вывода значений полей (значения свойств Expression): Ns (наименование стройки), Ss (сметная стоимость), Fs (фактически освоенная сумма) и значения выражения Ss-Fs (неосвоенная сумма). Для числовых полей укажем свойство Alignment= taRightJustify (выравнивание справа). Проверьте отчет, выполнив команду Preview из контекстного меню компонента QuickRep1. Если отчет пуcтой, то проверьте значение свойства Active для компонента Query1: оно должно быть истинным (True). В полосе Column Header сформируем заголовки колонок. Каждый заголовок формируется отдельным компонентом QRLabel. В полосе Page Header разместим наименование отчета (QRLabel), текущую дату и время (QRSysData со свойством Data=qrsDateTime), номер текущего листа (QRSysData со свойствами Data=qrsPageNumber, Text=«Лист»). В полосе Summary сформируем итоги по отчету, размещая компоненты QRExpr со свойствами Expression, в которых используется функция Sum для итогового суммирования полей Ss, Fs и Ss-Fs. и Alignment= taRightJustify. Выделим QuickRep1 и разместим компонент (двойным щелчком) QRGroup под именем QRGroup1 (для размещения заголовка группы первого уровня ‑ заказчики) со свойствами: Expression=Query1.Nz (группировка производится по полю с наименованием заказчика) и Master=QuickRep1. Разместим компонент QRExpr со свойством Expression=Query1.Nz (наименование заказчика). Разместим компонент QRGroup под именем QRGroup2 (для размещения заголовка группы второго уровня ‑ подрядчики) со свойствами: Expression= Query1.Np (группировка производится по полю с наименованием подрядчика) и Master=QuickRep1. Разместим компонент QRExpr со свойством Expression=Query1.Np (наименование подрядчика). Разместим компонент QRBand под именем QRBand1 (для размещения подножия группы первого уровня ‑ заказчики) со свойствами: BandType=rbGroupFooter (подножие группы). Для группы QRGroup1 установим свойство FooterBand=QRBand1 (подножием группы является полоса QRBand1). Разместим поля с итогами аналогично итогам в полосе Summary. Для каждого компонента QRExpr установим свойство ResetAfterPrint=True (очистка итоговых полей после их вывода, иначе - будут нарастающие итоги). Разместим компонент QRBand под именем QRBand2 (для размещения подножия группы второго уровня ‑ подрядчики) со свойствами: BandType=rbGroupFooter (подножие группы). Для группы QRGroup2 установим свойство FooterBand=QRBand2 (подножием группы является полоса QRBand2). Разместим поля с итогами аналогично итогам в полосе QRBand1. 12. На первой форме разместим кнопку Отчет с процедурой обработки события OnClick (вывода отчета): Procedure TForm1.Button1Click(Sender: TObject); Begin Form2.Query1.Active: =False; {закрытие запроса} Form2.Query1.Active: =True; {открытие запроса для его формирования}
Form2.Query1.Active: =False; {закрытие запроса} End; Внимание! Перед формированием отчета или запроса нужно закрыть ранее открытый запрос и заново его открыть, чтобы запрос сформировался повторно на возможно измененных исходных таблицах, иначе изменения в таблицах не будут учтены. 13. Выполним приложение и проверим полученный отчет. 3.10.5. Отчет типа «мастер/детальный» Построим отчет «Список строек по заказчикам» из двух связанных таблиц заказчиков (мастер‑ таблица или главная таблица) и строек (детальная или подчиненная таблица) (рис. 3.10.5.2). 1. Создадим новый проект из одной формы. 2.
Создадим вторую форму, используя шаблон для формирования отчета типа «мастер/детальный», выполнив команду File/New/Forms/Quick Report Master/Detail (рис. 3.10.5.1). Рис. 3.10.5.1. Окно проектирования отчета QuickRep 3. Зададим свойства компоненту MasterTable (описание главной таблицы): DatabaseName=«stroiki», TableName=«zakazhiki.db», Active=True, IndexFieldName=Kz (код заказчика). 4. Зададим свойства компоненту DetailTable (подчиненная Рис. 3.10.5.2. Окно просмотра сформированного отчета Preview
5. Зададим свойства компоненту QuickRep1: Band (HasColumnHeader=True, HasDetail=True, HasPageHeader=True, HasSummary=True, HasPageFooter=False, HasTitle=False), DataSet=MasterTable. 6. Разместим в полосе Detail компонент QRDBText для вывода поля Nz (наименование заказчика) из главной таблицы заказчиков со свойствами DataSet=MasterTable, DadaField=Nz. Для того чтобы не выводить наименование заказчика, если у него нет строек, составим обработчик события BeforePrint для данной полосы: Procedure TQRMDForm.DetailBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); Begin Printband: =DetailTable.RecordCount> 0 end.
7. Разместим в полосе Sub Detail компоненты QRExpr для вывода из подчиненной таблицы (DetailTable) строек полей Ns (наименование стройки), Ss (смета), Fs (освоенная сумма). 8. Для компонента QRSubDetail установим свойства: HasFooter=True, HasHeader=False (составного свойства Bands) и FooterBand=GroupFooterBand1. Появится полоса GroupFooterBand1 (подножие полосы QRSubDetail. На этой полосе разместим итоги (компоненты QRExpr) по текущему заказчику со свойствами: ResetAfterPrint=True, Master= QRSubDetail1. 9. На полосе Summary разместим итоги (компоненты QRExpr) по всему отчету со свойством Master= QRSubDetail1. 10. Разместим все остальные надписи и служебные поля. 11. На первой форме разместим кнопку Отчет с процедурой обработки события OnClick (вывода отчета): Procedure TForm1.Button1Click(Sender: TObject); Begin QRMDForm.QuickRep1.Preview; {формирование отчета} End; 12. Выполним приложение и проверим отчет (рис. 3.10.5.2).
|