Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

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

  1. Зададим свойства компоненту MasterTable(описание глав­ной таблицы):DatabaseName=«stroiki»,TableName=«zakazhiki.db»,Active=True,IndexFieldName=Kz(код заказчика).

  2. Зададим свойства компоненту DetailTable(подчиненная таблица):DatabaseName=«stroiki»,TableName=«stroiki.db»,Active=True.IndexField­Name=Kz(код заказчика),MasterSource=MasterDS,Index­FieldsName=Kz,Ns(сортировка подчиненной таблицы),MasterFields=Kz(по­ле связи таблиц).

Рис. 3.10.5.2. Окно просмотра сформированного отчета Preview

  1. Зададим свойства компоненту QuickRep1: Band (HasColumn­Header=True, HasDetail=True, HasPageHeader=True, HasSummary=True, Has­Page­Footer=False, HasTitle=False), DataSet=MasterTable.

  2. Разместим в полосе Detailкомпонент QRDBText для вывода поляNz(наименование заказчика) из главной таблицы заказчиков со свойс­твамиDataSet=MasterTable,DadaField=Nz. Для того чтобы не выводить наименование заказчика, если у него нет строек, составим обработчик событияBeforePrintдля данной полосы:

Procedure TQRMDForm.DetailBand1BeforePrint(Sender: TQRCustomBand;

var PrintBand: Boolean); Begin Printband:=DetailTable.RecordCount>0 end.

Внимание!При выполнении командыPreview, в отличие от одно­имен­ного метода, условия вывода групп отчета игнорируются.

  1. Разместим в полосе SubDetailкомпоненты QRExpr для вывода из подчиненной таблицы (DetailTable) строек полейNs(наименование строй­ки),Ss(смета),Fs(освоенная сумма).

  2. Для компонента QRSubDetailустановим свойства:HasFooter=True,HasHeader=False(состав­но­го свойстваBands) иFooterBand=GroupFooterBand1. Появится полосаGroupFooterBand1 (подно­жие полосыQRSubDetail. На этой полосе разместим итоги (компоненты QRExpr) по текущему заказчику со свойствами:ResetAfterPrint=True,Master=QRSubDetail1.

  3. На полосе Summaryразместим итоги (компоненты QRExpr) по всему отчету со свойствомMaster=QRSubDetail1.

  4. Разместим все остальные надписи и служебные поля.

  5. На первой форме разместим кнопку Отчетс процедурой обра­бо­тки событияOnClick(вывода отчета):

Procedure TForm1.Button1Click(Sender: TObject);

Begin QRMDForm.QuickRep1.Preview;{формирование отчета} End;

  1. Выполним приложение и проверим отчет (рис. 3.10.5.2).

3.10.6. Составной отчет

Для физического объединения нескольких небольших отчетов в один составной отчет (например, с целью экономии бумаги) необходимо:

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.