Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Quickreport (https://www.delphipraxis.net/174354-quickreport.html)

jangbu 18. Apr 2013 15:16

Quickreport
 
Hallo,

in meinem QR (jeweils ein Vorfall pro Seite)

QRGroup -> HaederInfo
DetailBand -> Detailinfo
PageFooter -> bis auf ein einzelnes QRDBText-Feld alles Konsanten

erschein im QRDBFeld des PageFooter immer bereits die Information des nächsten Datensatzes? Alle DBFelder kommen von einer einzigen SQL-Abfrage? Hätte ich da versehentlich was geändert? Ein Pagefooter.before_print -> next habe ich jedenfalls nicht programmiert.

Hat vielleicht jemand einen Tipp?

sx2008 18. Apr 2013 15:31

AW: Quickreport
 
Dieses QRDBText-Feld ist ganz offensichtlich mit dem Dataset des Detailbandes verknüpft.
Das kann so nicht funktionieren.
Angenommen es passen 50 Detailsätze auf den Report.
Der Reportgenerator mißt aber nicht vorher aus wieviele Detailbänder auf's Papier passen
sondern er lässt es draufankommen.
Entweder das aktuell generierte Detailband passt noch drauf oder nicht.
Falls nicht, wird das Footerband generiert und eine neue Seite begonnen.
Is klar, daß dann der Reportgenerator schon beim nächsten Datensatz ist.

jangbu 18. Apr 2013 16:14

AW: Quickreport
 
ja sämtliche Informationen auf diesem Report kommen vom gleichen Dataset, nach dem Muster

select * from Rechnung where datum >= xxxx

Im Kopf (QRGroup) stehen Headerdaten
in der Mitte (Datailband) die einzelnen Positionen,....
im Fuß die AGBs (also Konstanten), aber eben zusätzlich 1 QRDBText-Feld z.B. Mitarbeiter

Das alles sollte doch aber auf die gleiche Seite und nich der Mitarbeiter schon von der nächsten Bestellung. Habe versucht ein QRExpr (QueryField -> Mitarbeiter) per PageFooter.before_print -> QRExpr.Caption:= Mitarbeiter manuell zuzuweisen, da kommt aber immer die Info aus dem letzten DatenSatz der select-abfrage.

Irgendwie muss ich doch aber alle Daten eines Datensatzes auf "eine" Seite bekommen.

jangbu 18. Apr 2013 16:25

AW: Quickreport
 
ach ja, es passen definitv alle Detaildaten auf eine Seite(max 10 Zeilen). Es kann also nicht vorkommen das es durch die Menge der Daten zu einer zweiten Seite pro Datensatz kommt.

sx2008 18. Apr 2013 17:05

AW: Quickreport
 
Zitat:

Zitat von jangbu (Beitrag 1211975)
... Es kann also nicht vorkommen das es durch die Menge der Daten zu einer zweiten Seite pro Datensatz kommt.

Das "weiss" der Reportgenerator aber nicht.
Er arbeitet immer seinen Standardalgorithmus ab.

In der Abfrage müsste aber eigentlich auch der Mitarbeiter auftauchen
SQL-Code:
select * from Rechnung where datum >= xxxx and Mitarbeiter='yyyy'
weil andernfalls nicht sichergestellt werden kann, dass immer der gleiche Mitarbeiter in den Daten ist.
Du kannst dir den Mitarbeiter vorher (!) in einer Variablen merken und dann im Event BeforePrint einem QrLabel oder QrExpression zuweisen.

Wenn du einen Bericht gruppiert nach Mitarbeitern drucken willst, dann wäre ein GroupHeader und ein GroupFooter Band einzusetzen.
Der Mitarbeiter würde dann auf dem GroupFooter und nicht auf dem allgemeinen PageFooter gedruckt.
Wie man das genau macht lässt sich aus der Ferne aber schlecht erklären.

Auf jeden Fall sollte man Datenfelder aus dem Detail Dataset nicht im (Page-)Footer oder (Page-)Header verwenden.

jangbu 19. Apr 2013 09:56

AW: Quickreport
 
Hallo sx2008,

danke für Deine Tips! Habe jetzt den PageFooter in einen GroupFooter(GroupBand) geändert. Damit passt es. Der GroupFooter hängt nun zwar immer direkt hinter dem DetailBand und lässt sich leider (auch) nicht per QRBand.beforeprint -> QRBand2.top := xxx an eine feste Position unten anheften, was ja der Pagefooter kann, aber nun habe ich jedenfalls alle daten eines Datensatzes auf einer Seite zusammengefasst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 Uhr.

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