TempSQL.SQL.Add('(Select Student.st_bilet from student where gruppa='+chr($27)+SDIAppForm.GrName.Text+chr($27)+'));');
TempSQL.Open;
end;
frxReport1.ShowReport(true);
end;
пример выполнения данного кода приведен на рис. 5.4.
Рисунок 5.4 Отчет «Экзаменационная ведомость»
5.4 Работа с отчетом FastReport из Delphi в «Run-time» режиме
Описанные операции по настройкам свойств оттдельных элементов отчета (и даже генерации его «с нуля») можно осуществить и во время выполнения программы. Основная сложность здесь состоит в том, что объекты, содержащиеся в отчете (такие как страница отчета, полоса и пр.) напрямую недоступны из вашего кода. Это означает, что к ним нельзя обратиться по имени, как например к кнопке на другой форме. Чтобы обратиться к объекту, нужно найти его с помощью метода TfrxReport.FindObject:
varpole1 : TfrxMemoView; //объект текстового поля отчета.
…
Pole1 := frxReport1.FindObject('Memo1') as TfrxMemoView;
После этого можно обращатьсяя к свойствам и методам найденного объекта.
Обращение к странице может быть осуществлено следующим образом:
var
Page1: TfrxReportPage;
…
Page1 := frxReport1.Pages[1] as TfrxReportPage;
Обратите внимание, что индекс массива Pages равен 1. Нулевой индекс имеет страница «Данные» (которая у вас пуста!)
Прежде чем что-либо искать в отчете, необходимо загрузить его из файла следующим методом:
frxReport1.LoadFromFile(‘c:\temp\vedom_cut.fr3’);
Указанный метод является логической функцией, возвращающей true при успешной загрузке и false в случае ошибки. Это удобное средство дополнительной диагностики работы с отчетом. Настоятельно рекомендуется указывать полный путь к файлу.
Используя описанные выше методы, обработчик кнопки просмотра отчета можно переписать, например, так:
procedure TSDIAppForm.Button1Click(Sender: TObject);
var
Page1: TfrxReportPage;
Master:TfrxMasterdata;
polya: array [0..4] of TfrxMemoView;
begin
With DM1 do
begin
TempSQL.Close;
TempSQL.SQL.Clear;
TempSQL.SQL.Add('Select * from Session_Result ');
TempSQL.SQL.Add(' where (Dis_shifr ='+ chr($27)+ Disc_table.FieldByName('Dis_Shifr').value+ chr($27)+')');
TempSQL.SQL.Add(' and (forma_otchetnosti ='+chr($27) +SDIAppForm.Otchetnost.Text+chr($27)+')');
TempSQL.SQL.Add(' and (st_bilet in ');
TempSQL.SQL.Add('(Select Student.st_bilet from student where gruppa='+chr($27)+SDIAppForm.GrName.Text+chr($27)+'));');
TempSQL.Open;
// TempSQL.last;
// showMessage(IntTostr(TempSQL.RecordCount));
end;
if frxReport1.LoadFromFile('c:\temp\vedom_cut.fr3') then
begin
DataModule1.frxDBDataSet1.open;
frxReport1.DataSets.Add(DataModule1.frxDBDataSet1); //назначаемотчетуновыйисточникданных
master:=frxReport1.Findobject('MasterData1') as TfrxMasterdata;
Master.Dataset:= DataModule1.frxDBDataSet1;
polya[0]:=frxReport1.FindObject('Memo3') as TfrxMemoView; //фрагментшапкисдисциплиной
polya[0].DataSet:= DataModule1.frxDBDataSet1;
polya[0].Text:='ведомость ( [frxDBDataset1."Forma_otchetnosti"] ) подисциплине " [frxDBDataset1."dis_name"] "';
polya[1]:=frxReport1.FindObject('Memo2') as TfrxMemoView; //полефамилия
polya[1].DataSet:= DataModule1.frxDBDataSet1;
polya[1].DataField:='Surname';
polya[1].Text:='[frxDBDataset1."Surname"]';
polya[2]:=frxReport1.FindObject('Memo4') as TfrxMemoView; //полеимя
polya[2].DataSet:= DataModule1.frxDBDataSet1;
polya[2].DataField:='Firstname';
polya[2].Text:='8 [frxDBDataset1."Firstname"]';
polya[3]:=frxReport1.FindObject('Memo5') as TfrxMemoView; //полеотчество
polya[3].DataSet:= DataModule1.frxDBDataSet1;
polya[3].DataField:='Otch';
polya[3].Text:=' [frxDBDataset1."Otch"]';
polya[4]:=frxReport1.FindObject('Memo6') as TfrxMemoView; //полестуд. билет
polya[4].DataSet:= DataModule1.frxDBDataSet1;
polya[4].DataField:='St_bilet';
polya[4].Text:='* [frxDBDataset1."St_bilet"]';
frxReport1.ShowReport(true);
end
else ShowMessage('Ошибказагрузкифайлаотчета!');
end;
5.5 Создание отчета с двумя уровнями данных (master-detail)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.