Как программно создать отчет

отредактировано 01:24 Раздел: FastReport 3.0
создаю программно отчет и т.д.

далее создаю MasterData

DataBand:=TfrxMasterData.Create(Page);
DataBand.CreateUniqueName;
DataBand.DataSet:= <
если ставлю nil, то в отчете не выводит ни чего, а если frxUserData1 или frxDBDataSet - выдает множество страниц одной и той же записи;
DataBand.Top:=100;
DataBand.Height:=20;


как сделать, что поставить?

Комментарии

  • gpigpi
    отредактировано 01:24
    Вот пример построения отчёта из кода
    procedure TForm1.Button1Click(Sender: TObject);
    var
     Table1: TTable;
     frxReport1: TfrxReport;
     frxDBDataSet1: TfrxDBDataSet;
     Page: TfrxReportPage;
     Band: TfrxBand;
     DataBand: TfrxMasterData;
     Memo: TfrxMemoView;
    begin
    { создаём таблицу }
    Table1 := TTable.Create(Form1);
    Table1.DatabaseName := 'DBDEMOS';
    Table1.TableName := 'customer.db';
    Table1.Active := True;
    { создаём отчет }
    frxReport1 :=TfrxReport.Create(Form1);
    { создаём датасет }
    frxDBDataSet1 :=TfrxDBDataSet.Create(Form1);
    frxDBDataSet1.UserName:='frxDBDataSet1';
    frxDBDataSet1.DataSet:=Table1;
    { очищаем отчет }
    frxReport1.Clear;
    { очищаем скрипт }
    frxReport1.ScriptText.Clear;
    { добавляем источник данных в список доступных для отчета }
    frxReport1.DataSets.Add(frxDBDataSet1);
    { добавляем страницу }
    Page := TfrxReportPage.Create(frxReport1);
    { создаем уникальное имя }
    Page.CreateUniqueName;
    { устанавливаем размеры полей, бумаги и ориентацию по умолчанию }
    Page.SetDefaults;
    { меняем ориентацию бумаги }
    Page.Orientation := poLandscape;
    { добавляем report title }
    Band := TfrxReportTitle.Create(Page);
    Band.CreateUniqueName;
    { для бэнда достаточно установить координату Top и высоту }
    { обе координаты - в пикселах }
    Band.Top := 0;
    Band.Height := 20;
    { добавляем объект на report title }
    Memo := TfrxMemoView.Create(Band);
    Memo.CreateUniqueName;
    Memo.Text := 'Hello FastReport!';
    Memo.Height := 20;
    { этот объект будет растянут на ширину бэнда }
    Memo.Align := baWidth;
    { добавляем master data }
    DataBand := TfrxMasterData.Create(Page);
    DataBand.CreateUniqueName;
    DataBand.DataSet := frxDBDataSet1;
    { координата Top не должна пересекать ранее добавленный бэнд! }
    DataBand.Top := 100;
    DataBand.Height := 20;
    { добавляем объект на master data }
    Memo := TfrxMemoView.Create(DataBand);
    Memo.CreateUniqueName;
    Memo.OnBeforePrint:=Memo.Name+'OnBeforePrint';
    { добавляем в скрипт обработчик }
    frxReport1.ScriptText.Add('procedure '+Memo.Name+'OnBeforePrint(Sender: TfrxComponent);');
    frxReport1.ScriptText.Add('begin');
    frxReport1.ScriptText.Add(' if <frxDBDataSet1."CustNo">=1231 then '+Memo.Name+'.Color:=clRed else '+Memo.Name+'.Color:=clNone;');
    frxReport1.ScriptText.Add('end;');
    { подключаем к данным }
    Memo.DataSet := frxDBDataSet1;
    Memo.DataField := 'CustNo';
    Memo.SetBounds(0, 0, 100, 20);
    { выравниваем текст по правому краю объекта }
    Memo.HAlign := haRight;
    frxReport1.ScriptText.Add('begin');
    frxReport1.ScriptText.Add('end.');
    { показываем отчет }
    frxReport1.ShowReport;
    end;
    
  • отредактировано 01:24
    в примере:
    DataBand.DataSet := frxDBDataSet1;

    но уменя без DataSet
  • gpigpi
    отредактировано 01:24
    написал:
    но уменя без DataSet
    используется frxUserDataSet?
    тогда у него должны быть обработчики OnFirst, OnNext, OnCheckEOF
  • отредактировано 01:24
    спасибо все получилось

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.