Delphi Rave Report 7.7.0 можно ли использовать параметры для создания нескольких строк в отчете? - PullRequest
0 голосов
/ 29 февраля 2012

Хорошо, я новичок в восторженных отчетах.Я добился, чтобы мой отчет о рейве, работающий с данными, работал с использованием бэндов, но теперь мне нужно сделать обычный отчет, вручную отправив параметры из кода в отчет.

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

    // Loop at groups;
    rvpgrouprep.SelectReport('grouprep',False);
    rvpgrouprep.open;

    while cdsgrouprep.eof = False do
    begin
      group :=  cdsgrouprep.FindField('GroupName').AsString;
      rvpgrouprep.SetParam('Group1',group);
      cdsgrouprep.MoveBy(1);
    end;

    rvpgrouprep.Execute;
    rvpgrouprep.Close;

Так что мой пример из учебника показывает, что это должно предоставить список групп встолбец, где param.group1 находится в моем отчете, но этот код содержит только одну строку в моем отчете, и это последняя запись.Цикл while работает, я его отладил.Я что-то упустил?

Любая помощь оценена.

1 Ответ

2 голосов
/ 29 февраля 2012

Rave работает именно так, как здесь задумано. Параметры не генерируют строки каждый раз, когда вы меняете строку.

Давайте предположим, что поскольку вы никому не сказали, что они имеют в виду, переменная cdsgrouprep является группой, основанной на наборе данных клиента. Если в наборе данных 4 строки и у вас есть группа, вы, естественно, ожидаете, что код создания полосового отчета в rave сгенерирует 4 копии этой группы в вашем отчете. Но вместо того, чтобы полагаться на это, вы, вероятно, ищете что-то, что генерирует кучу строк полностью из кода , и для этого вам вообще не нужны параметры. Параметры полезны для многих вещей, но не совсем то, что вам нужно здесь.

Отчеты о Rave, основанные исключительно на коде, показаны здесь в статье EDN и выглядят так:

procedure TFormMain.PrintTabularReport(Report: TBaseReport);
var
  FolderList : TStringList;
  i          : Integer;
  NumFiles   : Cardinal;
  NumFolders : Cardinal;
  SizeFiles  : Cardinal;
  Root       : string;
begin
  with Report do
  begin
    SetFont('Arial', 15);
    NewLine;
    PrintCenter('List of Folders in the Drive Root', 4);
    NewLine;
    NewLine;
    ClearTabs;
    SetTab(0.2, pjLeft, 1.7, 0, 0, 0);
    SetTab(1.7, pjRight, 3.1, 0, 0, 0);
    SetTab(3.1, pjRight, 3.5, 0, 0, 0);
    SetTab(3.5, pjRight, 4.5, 0, 0, 0);
    SetFont('Arial', 10);
    Bold := True;
    PrintTab('Folder Name');
    PrintTab('Number of Files');
    PrintTab('Number of Folders');
    PrintTab('Size of Files');
    Bold := False;
    NewLine;
    FolderList := TStringList.Create;
    try
      Root := IncludeTrailingPathDelimiter(ExtractFileDrive(ParamStr(0)));
      EnumFolders(FolderList, Root);
      for i := 0 to FolderList.Count - 1 do
      begin
        PrintTab(FolderList[i]);
        GetFolderInfo(IncludeTrailingPathDelimiter(Root+FolderList[i]),
          NumFiles, NumFolders, SizeFiles);
        PrintTab(Format('%u',[NumFiles]));
        PrintTab(Format('%u',[NumFolders]));
        PrintTab(Format('%u bytes',[SizeFiles]));
        NewLine;
      end;
    finally
      FolderList.Free;
    end;
  end;
...