Наследование отчетов
Наследование отчетов было описано в соответствующей главе в "Руководстве пользователя". Здесь мы опишем некоторые ключевые моменты.
Если вы храните отчеты в файлах, вам нужно указать каталог, в котором FastReport будет искать базовые отчеты. Точнее, это каталог, содержимое которого будет показано в окнах "Файл|Новый..." и "Отчет|Настройки...":
Для этого используется свойство компонента TfrxDesigner.TemplateDir. По умолчанию оно пустое, FastReport показывает шаблоны в каталоге, где находится исполняемый файл (.exe). В это свойство можно поместить либо абсолютный путь, либо относительный.
Если вы храните отчеты в базе данных, придется написать немного кода для загрузки базового отчета и для получения списка доступных шаблонов. Для загрузки базового отчета используйте обработчик события TfrxReport.OnLoadTemplate:
property OnLoadTemplate: TfrxLoadTemplateEvent read FOnLoadTemplate write FOnLoadTemplate;
TfrxLoadTemplateEvent = procedure(Report: TfrxReport; const TemplateName: String) of object;
Обработчик этого события должен загрузить отчет с именем TemplateName в компонент Report. Вот возможный пример такого обработчика:
procedure TForm1.LoadTemplate(Report: TfrxReport; const TemplateName: String);
var
BlobStream: TStream;
begin
ADOTable1.First;
while not ADOTable1.Eof do
begin
if AnsiCompareText(ADOTable1.FieldByName('ReportName').AsString, TemplateName) = 0 then
begin
BlobStream := TMemoryStream.Create;
TBlobField(ADOTable1.FieldByName('ReportBlob')).SaveToStream(BlobStream);
BlobStream.Position := 0;
Report.LoadFromStream(BlobStream);
BlobStream.Free;
break;
end;
ADOTable1.Next;
end;
end;
Для получения списка доступных шаблонов (в окнах "Файл|Новый..." и "Отчет|Настройки...") надо использовать обработчик события TfrxDesigner.OnGetTemplateList:
property OnGetTemplateList: TfrxGetTemplateListEvent read FOnGetTemplateList write FOnGetTemplateList;
TfrxGetTemplateListEvent = procedure(List: TStrings) of object;
Обработчик этого события должен загрузить список доступных отчетов в параметр List. Вот возможный пример такого обработчика:
procedure TForm1.GetTemplates(List: TList);
begin
List.Clear;
ADOTable1.First;
while not ADOTable1.Eof do
begin
List.Add(ADOTable1.FieldByName('ReportName').AsString);
ADOTable1.Next;
end;
end;
FastReport может наследовать и уже созданные отчеты, для этого нужно воспользоваться функцией
TfrxReport.InheritFromTemplate(const templName: String; InheriteMode: TfrxInheriteMode = imDefault): Boolean.
Функция позволяет наследовать текущий загруженный отчет от указанного отчета. Первый параметр функции - путь и имя шаблона предка, второй - параметр позволяет выбрать режим наследования(imDefault - выводить диалог с предложением переименовать/удалить дубликаты, imDelete - удаляь все дублирующиеся объекты, imRename - переименовывать все дублирующиеся объекты).
Внимание! Поиск шаблона предка осуществляется относительно текущего шаблона, т.е. необходимо соблюдать структуру каталогов в месте хранения отчетов. Fast Report использует относительные пути, поэтому не стоит беспокоиться о переносе приложения (исключением является, когда текущий шаблон и шаблон-предок расположены на разных носителях или используется сетевой путь).