Dialogpage при пакетной печати.

отредактировано 15:59 Раздел: FastReport 4.0
Такой вопрос...
Есть отчёт с Dialog Page на котором лежит пара Edit'ов.
Разумеется они должны быть заполнены пользователем.
Но возникла ситуация, когда этот отчёт должен быть напечатан пакетно (т.е. один и тот же отчёт вызывается несколько раз (PrepareReport несколько раз в самом конце ShowReport) с параметрами PrintOnPreviousPage = True и ClearLastRepot = false). Соответственно сколько раз его вызываешь - столько раз он и показывает DialogPage.
Необходимо же, что бы юзер ввел данные только в первом случае, а потом уже использовалось то, что он навводил в первом случае.

Код примерно такой (Delphi 7):
type
    TmPrint = class
  private
    FR: TfrxReport;
.....
  public
.....
    procedure LoadReportPackage(ReportFileName: string; DataSet: TDataSet);
    procedure LoadReportPackageShow;
  end;

......

{ ------------------------------------------------------------------- }
procedure TmPrint.LoadReportPackage(ReportFileName:string; DataSet:TDataSet);
begin
    FDataSet := DataSet;
    ReportFile:= ReportFileName;
    FR.LoadFromFile(ReportFile);
    FR.PrepareReport(False);
end;

{ ------------------------------------------------------------------- }
procedure TmPrint.LoadReportPackageShow();
begin
   FR.ShowPreparedReport;
end;
т.е. в цикле сначала вызывается LoadReportPackage с меняющимся данными датасета, а потом вызывается LoadReportPackageShow

Конструктор и деструктор в целом стандартны...

Комментарии

  • отредактировано December 2009
    Есть такой вариант решения этой задачи (хотя и не совсем то, что вам нужно):
    1. Создать в Delphi форму на которой будет пара Edit'ов (вместо Dialog Page в отчете).
    2. Написать в вашей основной форме следующий код:
    type
        TmPrint = class
      private
        FR: TfrxReport;
        FormDialog: TFormDialog; // форма в которой будет пара Edit'ов, которые должен заполнить пользователь
        FirstLoad: boolean; // если этот флаг true, то отчет загружается первый раз и нужно показать форму FormDialog
    .....
      public
    .....
        procedure LoadReportPackage(ReportFileName: string; DataSet: TDataSet);
        procedure LoadReportPackageShow;
      end;
    
    ......
    
    { ------------------------------------------------------------------- }
    procedure TmPrint.LoadReportPackage(ReportFileName:string; DataSet:TDataSet);
    begin
        if FFirstLoad then
        begin
            FDataSet := DataSet;
            ReportFile:= ReportFileName;
            FR.LoadFromFile(ReportFile);
            FormDialog.ShowModal();
            (FR.FindObject('Memo1') as TfrxMemoView).Text := FormDialog.Edit1.Text;
            (FR.FindObject('Memo2') as TfrxMemoView).Text := FormDialog.Edit2.Text;
            FFirstLoad := false;
        end;
        FR.PrepareReport(false)
    end;
    
    { ------------------------------------------------------------------- }
    procedure TmPrint.LoadReportPackageShow();
    begin
       FR.ShowPreparedReport;
    end;
    
    Где Memo1 и Memo2 это мемо в отчете, которые заполнялись посредством Dialog Page.
    Так же где-нибудь перед первым вызовом TmPrint.LoadReportPackage(ReportFileName:string; DataSet:TDataSet), нужно написать код:
    FFirstLoad := true;
    

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

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