Tfrxmasterdata разные результаты при Печати и Предпросмотре отчета

отредактировано June 2009 Раздел: FastReport 4.0
В отчете лежит MasterData, привязанный к frxProfRegistr с тремя полями. Если делать ShowReport, то все нормально. Получаем, например:
name1 | 1 | Вася
name2 | 2 | Вася
name3 | 3 | Вася
Если отправлять сразу на печать процедурой Print, то получаем примерно следующее:
name1 | 1 | Вася
name2 | 2 | Вася
name2 | 2 | Вася

Что-то не так в коде? или глюк?
procedure print;
begin
  o_registr.First;
  frxProfRegistr.RangeEndCount  := O_Registr.RecordCount;
  frxRep.PrepareReport;
  if RbPrint.Checked then
   frxRep.Print
  else
   frxRep.ShowReport;
end;

procedure TDM_Report.frxProfRegistrGetValue(const VarName: String;
  var Value: Variant);
begin
  with O_Registr do
    begin
      RecNo := frxProfRegistr.RecNo + 1;

      if CompareText(VarName, 'name') = 0 then
        Value := FieldByName('usl').AsString
      else
      if CompareText(VarName, 'kab') = 0 then
        Value := FieldByName('kabs').AsString
      else
      if CompareText(VarName, 'fio') = 0 then
        Value := 'Вася';
    end;
end;

Комментарии

  • gpigpi
    отредактировано 05:23
    PrepareReport перед Print выполняете?
  • отредактировано 05:23
    gpi написал: »
    PrepareReport перед Print выполняете?

    Ну да. Сначала PrepareReport, потом в зависимости от RadioButton'а ShowReport или Print. В первом случае все нормально, во втором что-то непонятное.
  • отредактировано 05:23
    Немного изменил:
    procedure print;
    begin
      o_registr.First;
      frxProfRegistr.RangeEndCount  := O_Registr.RecordCount;
      if RbPrint.Checked then
       begin    
        frxRep.PrepareReport;
        frxRep.Print;
       end
      else
       frxRep.ShowReport;
    end;
    
    procedure TDM_Report.frxProfRegistrGetValue(const VarName: String;
      var Value: Variant);
    begin
      with O_Registr do
        begin
          if CompareText(VarName, 'name') = 0 then
            Value := FieldByName('usl').AsString
          else
          if CompareText(VarName, 'kab') = 0 then
            Value := FieldByName('kabs').AsString
          else
          if CompareText(VarName, 'fio') = 0 then
            Value := 'Вася';
        end;
    
    procedure TDM_Report.frxProfRegistrNext(Sender: TObject);
    begin
      ARMForms[ActiveARM].FrmProfOsmotr.O_Registr.Next;
    end;
    
    end;
    

    И всё, вроде бы, норм.. Странно это..

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

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