Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 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. Разместим в полосе Sub Detail компоненты 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.