ひとつのQuickReportのプレビューにて
まったく書式の違う二つの帳票の出力を考えています。
具体的には一枚目に総計のようなもので
二枚目以降にその内訳明細を表示したいです。
WinXP、Delphi2007Pro、QuickReport4.06
PS.なかなかQRの解説HPページ等の情報が少なくて挫折しそうです・・・
その昔、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;
こんな感じでできると思います。
ご返信ありがとうございます。
ご教授いただいた方法でさっそく試してみたのですが、
なぜかコード上で一番最後にReports.Addしたレポートしか
プレビューされませんでした。
上記のコードで言うとQuickRep3のみ…
なぜでしょうね、、、
週明けにでももうちょっといろいろと試してみようと思います。
簡単にサンプル作成してみました。
プレビューには両方のレポートが表示されました。
環境は下記の通りです。
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.
最後にコードに載せたレポートが出ないと書きましたが
詳しく見ましたところ、QR1とQR2が一枚で合わさった形になっていました。
QR2にはラベルひとつしか乗せていなかったため見逃していたのです(汗
どうもQR1に余白部分があるとQR2がQR1の余白部分まで入り込んでしまうようですね。
QR1の後、改ページされQR2が作られるものだと勝手に思い込んでいたもので・・・
余白部分をうまく制御して、QR2がページの先頭から始まるように制御させようと思います。
めるめるさん、ご丁寧にありがとうございました。
ツイート | ![]() |