ひとつのQreportで二つの帳票を出力するには?

解決


くるくる  2008-09-19 20:49:55  No: 31998

ひとつのQuickReportのプレビューにて
まったく書式の違う二つの帳票の出力を考えています。

具体的には一枚目に総計のようなもので
二枚目以降にその内訳明細を表示したいです。

WinXP、Delphi2007Pro、QuickReport4.06

PS.なかなかQRの解説HPページ等の情報が少なくて挫折しそうです・・・


めるめる  2008-09-19 23:25:50  No: 31999

その昔、Delphi7Pro + D7に付属の QucickReport 3.0.6 だったかな?で、
過去に、以下の要領でできました。
※Delphi2007Pro、QuickReport4.06 では試していませんが、ご参考まで。

Form1 に複数の QuickRep1, QuickRep2, QuickRep3・・・などと貼り付け、
Form1 にQRCompositeReport1 を貼り付けて、
QRCompositeReport1 をダブルクリック、

procedure TFormQR.QRCompositeReport1AddReports(Sender: TObject);
begin
  QRCompositeReport1.Reports.Add(QuickRep1);
  QRCompositeReport1.Reports.Add(QuickRep2);
  QRCompositeReport1.Reports.Add(QuickRep3);
end;

Form1.QRCompositeReport1.Preview;
または
Form1.QRCompositeReport1.Print;

こんな感じでできると思います。


くるくる  2008-09-22 09:06:14  No: 32000

ご返信ありがとうございます。

ご教授いただいた方法でさっそく試してみたのですが、
なぜかコード上で一番最後にReports.Addしたレポートしか
プレビューされませんでした。
上記のコードで言うとQuickRep3のみ…
なぜでしょうね、、、
週明けにでももうちょっといろいろと試してみようと思います。


めるめる  2008-09-22 20:24:46  No: 32001

簡単にサンプル作成してみました。
プレビューには両方のレポートが表示されました。
環境は下記の通りです。
WindowsVista(Business) Version6.0 (Build 6001: Service Pack1)
CodeGear(TM) Delphi(R) 2007 for Win32(R)  Version 11.0.2902.10471
QuickReport 4.07 (Professional) ※有償版

// -------------------------------------------------------------- //
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

// ------------------------------------------------------------- //
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.QRCompositeReport1.Preview;
end;

end.

// ------------------------------------------------------------- //
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, QuickRpt, QRCtrls, ExtCtrls;

type
  TForm2 = class(TForm)
    QRCompositeReport1: TQRCompositeReport;
    QuickRep1: TQuickRep;
    DetailBand1: TQRBand;
    QRLabel1: TQRLabel;
    QRLabel2: TQRLabel;
    QuickRep2: TQuickRep;
    DetailBand2: TQRBand;
    QRLabel3: TQRLabel;
    QRLabel4: TQRLabel;
    procedure QRCompositeReport1AddReports(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.QRCompositeReport1AddReports(Sender: TObject);
begin
  QRCompositeReport1.Reports.Add(QuickRep1);
  QRCompositeReport1.Reports.Add(QuickRep2);
end;

end.


くるくる  2008-09-22 23:44:22  No: 32002

最後にコードに載せたレポートが出ないと書きましたが
詳しく見ましたところ、QR1とQR2が一枚で合わさった形になっていました。
QR2にはラベルひとつしか乗せていなかったため見逃していたのです(汗

どうもQR1に余白部分があるとQR2がQR1の余白部分まで入り込んでしまうようですね。
QR1の後、改ページされQR2が作られるものだと勝手に思い込んでいたもので・・・
余白部分をうまく制御して、QR2がページの先頭から始まるように制御させようと思います。

めるめるさん、ご丁寧にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加