Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Quickreport - Wie Summary je Seite als Zwischensumme? (https://www.delphipraxis.net/49662-quickreport-wie-summary-je-seite-als-zwischensumme.html)

PASST 14. Jul 2005 08:48


Quickreport - Wie Summary je Seite als Zwischensumme?
 
Hi allerseits,

Delphi4, Quickreport 3.

Wie kann ich in Quickreport eine Summary je Seite als Zwischensumme und nicht erst am Ende nach allen Details erstellen?

Ich kenne das PageFooter. Sehe aber nicht wie ich je Seite eine Zwischensumme dort einfügen kann.

Weiß jemand Rat?

Gruß
PASST

Sourcemaker 14. Jul 2005 09:56

Re: Quickreport - Wie Summary je Seite als Zwischensumme?
 
Hi,

kannst Du bitte die Frage präzisieren, wo ist das Problem ?

Für die Ausgabe der Zwischensumme (Seitensumme) würde ich auch den Pagefooter nehmen.
Einfach während die Positionen gedruckt werden die Seitensumme ermitteln und mit einem
Label auf dem PageFooter ausgeben.

Grüße

Frank

PASST 14. Jul 2005 10:02

Re: Quickreport - Wie Summary je Seite als Zwischensumme?
 
Wie kann ich denn die Zwischensumme einer Seite ermitteln?

Kann QReport das nicht selber? Dh. Werte bestimmter eines Feldes des Detailbands summieren und je Seite als Zwischensumme ausgeben?

Wie kann ich ermitteln, welche Details/Records auf einer Reportseite dargestellt werden und somit in der Zwischensumme auftauchen müssen?

BrunoT 14. Jul 2005 10:42

Re: Quickreport - Wie Summary je Seite als Zwischensumme?
 
Hi PASST,

Sourcemaker hat Recht. Das geht nur manuell.
Füge im Seitenfuss und im Berichtsfuss ein paar QRLabel ein

Delphi-Quellcode:

implementation

{$R *.dfm}

var
  seite, zNr: Integer;
  Summe, Gesamt: double;

procedure TForm2.QRBeforePrint(
  Sender: TCustomQuickRep; var PrintReport: Boolean);
begin
  seite := 0;
  Gesamt := 0;
end;

procedure TForm2.PageHeaderBand1BeforePrint(
  Sender: TQRCustomBand; var PrintBand: Boolean);
begin
  inc(seite);
  zNr := 0;
  summe := 0;
end;

procedure TForm2.PageFooterBand1BeforePrint(
  Sender: TQRCustomBand; var PrintBand: Boolean);
begin
  QRSumme.Caption := Format['%8.2f', [summe]);
  QRSeite.Caption := '- ' + IntToStr(Seite) + ' -';
end;

procedure TForm2.DetailBand1BeforePrint(
  Sender: TQRCustomBand; var PrintBand: Boolean);
begin

  Summe := Summe + Table['Wert'];
  Gesamt := Gesamt + Table['Wert'];
  inc(zNr);
  QRzNr.Caption := Format['%.3d', [zNr]);
end;

procedure TForm2.SummaryBand1BeforePrint(
  Sender: TQRCustomBand; var PrintBand: Boolean);
begin
  QRGesamt.Caption := Format['%8.2f', [Gesamt]);
end;
mfg

BrunoT

PASST 14. Jul 2005 10:52

Re: Quickreport - Wie Summary je Seite als Zwischensumme?
 
Hallo BrunoT,

vielen Dank für deinen Codeschnipsel. Das schaut ja wirklich puppi-einfach aus :-D

Danke nochmals,
PASST

PASST 8. Aug 2005 15:43

Re: Quickreport - Wie Summary je Seite als Zwischensumme?
 
Hi,

so jetzt komme ich mal wieder dazu, mit dem Problem zu beschäftigen. Tatsächlich ist dein Beispiel wunderbar einfach. Allerdings funktioniert es bei mir nicht! Ich habe Aufträge verschiedener Kunden und ihre Auftragspositionen per Master-Detail definiert. Die einzelnen Aufträge inkl. Positionen werden auch brav auf neuen Seiten angezeigt. Jedoch druckt der QReport die Zwischensumme alle mit Null. Ausschließlich die aller letzte Seite enthält den korrekten Wert.
Ich poste meinen Code hier mal.

Delphi-Quellcode:
procedure TFPacklisten.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  einh_blatt := 0;
  einh_total := 0;
  kund_nr   := 0;
  packlinr  := 0;
end;

procedure TFPacklisten.QRSubDetail1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  einh_blatt := einh_blatt + FMain.memPackli.fieldbyname('mengelief').asinteger;
  einh_total := einh_total + FMain.memPackli.fieldbyname('mengelief').asinteger;
end;

procedure TFPacklisten.DetailBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  if not ((kund_nr = FMain.memPkop.fieldbyname('kund_nr').asinteger)
  and (packlinr = FMain.memPkop.fieldbyname('packlinr').asinteger))
  then begin
    einh_blatt := 0;
    einh_total := 0;
    kund_nr   := FMain.memPkop.fieldbyname('kund_nr').asinteger;
    packlinr  := FMain.memPkop.fieldbyname('packlinr').asinteger;
  end;
end;

procedure TFPacklisten.PageFooterBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  QRLabelEinh_Blatt.caption := 'Einh./Blatt: ' + inttostr(einh_blatt);
  QRLabelTotal.caption := 'Total: ' + inttostr(einh_total);
end;

omata 9. Aug 2005 18:58

Re: Quickreport - Wie Summary je Seite als Zwischensumme?
 
Moin,

ich sehe das die Unit-Globalen-Variablen initalisiert werden. Bei jeder Ausgabezeile werden sie mit dem Ausgabewert erhöht. Sie werden auch wieder zurückgesetzt. Aber wo werden sie ausgegeben. Bin ich blind?
Und genau nach dieser (nicht vorhandenen) Ausgabe, können bzw. müssen sie doch auch wieder zurückgesetzt werden.

Und dann habe ich da noch was anderes. Was ist FMain? Da sehe ich doch irgendwie einen Zirkelschluss (Main-Unit bindet Report-Unit ein und andersherum) -> autsch!
Unsauberer geht es nicht. sorry, aber das musste raus.

Nachdenkliche Grüsse...
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz