Topic: Создание сложного отчета - алгоритм решения проблемы.
Почитав тут разные темы, решил обобщить все, что прочитал.
Итак, имеется потребность в создании сложного отчета, в котором вывод данных осуществляется из двух и более малосвязанных или несвязанных таблиц.
Шаг 1. Создание шаблона отчета (.fr3-файла). То есть надо вписать статический текст, разметить поля для вывода меняющихся данных (из БД), подготовить те же диаграммы для выводимых данных. Создание шаблона мною пока не изучено, интересовали пока следующие шаги.
Шаг 2. Создание скрипта, подготавливающего наборы данных и связывающий эти наборы с шаблоном отчета. По следующему шаблону:
procedure Employees_Button5_OnClick (Sender: string; var Cancel: boolean);
var
frxDBDataset1, frxDBDataset2,frxDBDataset3: TfrxDBDataset;
Employee, Email, Phone: TDataSet;
begin
SQLQuery('SELECT id, FirstName, Surname FROM Employees', Employee);
SQLQuery('SELECT id_Employees, emailaddress FROM email', Email);
SQLQuery('SELECT id_Employees, phonenumber FROM phone', Phone);
// create Employees
frxDBDataset1 := TfrxDBDataset.Create(Employees);
frxDBDataset1.UserName := 'Employee';
frxDBDataset1.CloseDataSource := True;
frxDBDataset1.OpenDataSource := True;
frxDBDataset1.DataSet := Employee;
// create second Email
frxDBDataset2 := TfrxDBDataset.Create(Email);
frxDBDataset2.UserName := 'Email';
frxDBDataset2.CloseDataSource := True;
frxDBDataset2.OpenDataSource := True;
frxDBDataset2.DataSet := Email;
// create phone
frxDBDataset3 := TfrxDBDataset.Create(Phone);
frxDBDataset3.UserName := 'Phone';
frxDBDataset3.CloseDataSource := True;
frxDBDataset3.OpenDataSource := True;
frxDBDataset3.DataSet := Phone;
Employees.frxReport.Clear;
Employees.frxReport.DataSets.Clear;
Employees.frxReport.DataSets.Add(frxDBDataset1);
Employees.frxReport.DataSets.Add(frxDBDataset2);
Employees.frxReport.DataSets.Add(frxDBDataset3);
// DESIGN MODE
//Employees.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\Cards.fr3');
//Employees.frxReport.DesignReport;
// PREVIEW MODE
frxDBDataset1.DataSet.Close;
frxDBDataset2.DataSet.Close;
frxDBDataset3.DataSet.Close;
Employees.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\Cards.fr3');
Employees.frxReport.ShowReport;
frxDBDataset1.Free;
frxDBDataset2.Free;
frxDBDataset3.Free;
end;
Это нативный и доступный для понимания пример. три набора данных для инфы из базы и три набора данных для шаблона отчета, которые связываются между собой в итоге, а затем идет процесс формирования отчета с данными из БД.
Не совсем понятна разница между DESIGN MODE и PREVIEW MODE, хотелось бы узнать подробнее об этом.
Шаг 3. Возможность выбора шаблона отчета у кнопки с действием "Отчет":
Form1.ButtonReport.dbReportFile:='print.fr3';
Вообще шикарный инструмент. Must to use.
Шаг 4. Составной отчет. В котором несколько блоков ReportTitle, MasterData, Footer. Возможность создания - через метод TfrxReport.PrepareReport и скрипт а-ля
frxReport1.LoadFromFile('1.fr3');
frxReport1.PrepareReport;
frxReport1.LoadFromFile('2.fr3');
frxReport1.PrepareReport(False);
frxReport1.ShowPreparedReport;
Данная возможность расписана слабо, и хотелось бы узнать о ней побольше.