Внешний вид сайта:

Менеджер отчетов

Генератор отчетов FastReport имеет замечательную особенность изменения шаблонов документов во время выполнения программы. Имея эту возможность, программист может не только ускорить разработку программы, но также упростить дальнейшую поддержку программы для себя и конечного пользователя. Как эта возможность обычно используется?

Если, например, есть двадцать отчетов, используемых в программе, наиболее вероятно будет иметься и двадцать кнопок "Печать отчета", также двадцать кнопок "Дизайн отчета" (если программист не ленив или заказчик требует этого). А что, если пользователь должен не только изменить существующие отчеты, но также добавить и пару новых?

Ответ на этот вопрос очевиден - Вы должны создать менеджер отчетов. Как такой менеджер отчетов поможет нам?

Он поможет нам динамически добавлять, удалять и изменять отчеты. Так что теперь займемся созданием менеджера отчетов.

Наши отчеты должны быть сохранены где-нибудь, и для этой цели нам понадобится таблица. Для каждого отчета нам нужна будет следующая информация: имя отчета, ссылка на шаблон документа FastReport или шаблон непосредственно. В показанном примере есть таблица Paradox. После этого необходимо "нарисовать" окно отчетов.

Элементы управления могут быть разделены на две группы: первая для добавления новых, изменения и удаления отчетов. Вторая - для просмотра отчетов, печати и отмены.

Новый отчет - только вставляет новую запись в таблицу.

Код для изменения отчета выглядит следующим образом:

frReport1.LoadFromBlobField(taReportREPORT);
frReport1.DesignReport;

Чтобы удалить отчет, Вы просто удаляете его из базы данных

frReport1.LoadFromBlobField(taReportREPORT);
frReport1.ShowReport;

Печать без просмотра:

frReport1.LoadFromBlobField(taReportREPORT);
frReport1.PrintPreparedReportDlg;

Функция PrintPreparedReportDlg сразу же показывает диалоговое окно печати. Вы можете добавить кнопки для немедленного печати одной, двух или более копий. Тогда код будет выглядеть следующим образом:

frReport1.LoadFromBlobField(taReportREPORT);
frReport1. PrintPreparedReport('', Qnt, True, frAll);

Где Qnt - количество копий. Из-за шаблонов отчетов, которые сохранены в поле Blob, вместо файлов необходимо присоединить обработчик события OnSaveReport к объекту TfrDesigner для сохранения шаблона отчета из дизайнера в поле Blob.

taReport.edit;
frReport1.SaveToBlobField(taReportREPORT);
taReport.post;

Возможно присоединить обработчик события к OnLoadReport, но это Вы должны делать сами. Следующая необходимая процедура - вызов Report Manager.

procedure TfrManage.PrintDoc(
    DocumentName: string; FormName: string);
begin
  frManage := TfrManage.create(Application);
  frManage.DocumentName := DocumentName;
  frManage.FormName := FormName;
  frManage.showmodal;
 frManage.release;
end;

DocumentName - имя документа по умолчанию (возможно заменить, например на Form.Caption, чтобы не писать это снова).

FormName - секция отчетов, необходимых для каждого окна, чтобы иметь собственный список документов (возможно заменить, например, Form.Name).

Также необходимо обеспечить способ заполнить объекты TfrDBDataSet. Это сделать просто, например, Вы можете создать два объекта этого типа и передавать DataSource для них в вызове PrintDoc.

Автор: Vitaly Kubekin

Комментарии

Нет комментариев. Ваш будет первым!