КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Простой отчет
Простой отчет формируется из одного набора данных без группировки данных. Рассмотрим порядок его формирования на примере справочника заказчиков (рис. 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.QuickRep1.Preview; {формирование и просмотр отчета} 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. Внимание! При выполнении команды Preview, в отличие от одноименного метода, условия вывода групп отчета игнорируются. 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).
Дата добавления: 2014-12-08; Просмотров: 611; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |