| Цитата | Построение отчета при помощи кода Иногда возникает необходимость печати отчета, структура которого неизвестна на стадии проектирования приложения или может меняться в процессе работы программы. В этом случае встает необходимость динамического формирования шаблона отчета. При этом в отличие от ситуации, скажем, с добавленем нового бланка для бухгалтерской программы, где можно использовать принцип т.н. end-user-отчетов, форма отчета не является фиксированной и, соответственно, не может быть определена программистом в виде отдельного файла. FastReport предоставляет возможность динамического создания форм отчетов с помощью программного кода, как это можно делать, например, с объектами VCL. Пример программного построения формы отчета находится в подкаталоге RUNTIME каталога примеров FastReport. В этом примере по нажатию кнопки строится отчет, позволяющий получить список компаний из таблицы CUSTOMER.DB. Текст обработчика события OnClick этой кнопки приведен ниже: procedure TForm1.Button1Click(Sender: TObject); var v: TfrView; b: TfrBandView; Page: TfrPage; begin frReport1.Pages.Clear; frReport1.Pages.Add; // create page Page := frReport1.Pages[0]; b := TfrBandView(frCreateObject(gtBand, '')); // create MasterData band b.SetBounds(0, 20, 0, 20); b.BandType := btMasterData; b.Dataset := 'frDBDataSet1'; Page.Objects.Add(b); v := frCreateObject(gtMemo, ''); // create data field v.SetBounds(20, 20, 200, 16); v.Memo.Add('[Table1."Company"]'); Page.Objects.Add(v); frReport1.ShowReport; end; Этот код сначала удаляет все имеющиеся в форме отчета страницы, а потом создает одну чистую: frReport1.Pages.Clear; frReport1.Pages.Add; // create page Далее на этой странице создается одна секция типа «Master data» и привязывается к источнику данных. Page := frReport1.Pages[0]; b := TfrBandView(frCreateObject(gtBand, '')); // create MasterData band b.SetBounds(0, 20, 0, 20); b.BandType := btMasterData; b.Dataset := 'frDBDataSet1'; Page.Objects.Add(b); Следующим шагом создается один объект «Текст» с привязкой его к полю COMPANY таблицы CUSTOMER.DB: v := frCreateObject(gtMemo, ''); // create data field v.SetBounds(20, 20, 200, 16); v.Memo.Add('[Table1."Company"]'); Page.Objects.Add(v); Последнее, что делает указанный обработчик события – это выводит подготовленный отчет на предварительный просмотр.
|
|