Отчет типа «мастер/детальный»
Похожие статьи вашей тематики
Построим отчет «Список строек по заказчикам» из двух связанных таблиц заказчиков (мастер‑таблица или главная таблица) и строек (детальная или подчиненная таблица) (рис. 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 (подчиненная таблица): DatabaseName=«stroiki», TableName=«stroiki.db», Active=True. IndexFieldName=Kz (код заказчика), MasterSource=MasterDS, IndexFieldsName=Kz,Ns (сортировка подчиненной таблицы), MasterFields=Kz (поле связи таблиц).
Рис. 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).
Составной отчет
Для физического объединения нескольких небольших отчетов в один составной отчет (например, с целью экономии бумаги) необходимо:
1. Отдельно подготовить объединяемые отчеты.
2. Разместить на форме компонент QRCompositeReport и подготовить для него обработчик события OnAddReport, например:
procedure TForm1.QRCompositeReport1AddReports(Sender: TObject);Begin QRCompositeReport1.Reports.Add(Form2.QuickRep1);
QRCompositeReport1.Reports.Add(Form3.QuickRep1); End;
Свойство Report содержит список отчетов, дополняемый методом Add.
3. Подготовить кнопку или пункт меню для вызова составного отчета методом Preview (QRCompositeReport1.Preview).
Отчеты будут выводиться в порядке их описания в обработчике события OnAddReport.
|