Frage zu Lazreport

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1740
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Frage zu Lazreport

Beitrag von fliegermichl »

Ich habe einen Report erstellt (Einnahmen Überschuß Rechnung), der auch wunderbar funktioniert.
Jetzt ist es so, daß manchmal alles auf eine Seite passt und manchmal nicht.

Sowohl Master Foot Band als auch Page Foot Band sind für eine Übertragsausgabe nicht wirklich geeignet, da es diesen im Fall von einer Seite ja gar nicht gibt.

Wie bekomme ich es hin, daß im Falle eines mehrseitigen Ausdrucks auf der alten Seite eine Summenzeile gedruckt wird, welche in der nächsten Seite als Übertrag angezeigt werden kann? Aber eben auch nur bei einem mehrseitigen Ausdruck.

Benutzeravatar
Zvoni
Beiträge: 522
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Frage zu Lazreport

Beitrag von Zvoni »

Kenne mich mit LazReport jetzt gar nicht aus, aber theoretisch müsste man das auch ausrechnen können per Div und Mod, da du ja eigentlich vorher weisst, wieviele Datenzeilen in deinen Report pro Seite reinpassen

1) AnzahlZeilen Div MaxZeilenSeite --> ergibt das 0, dann passt alles auf eine Seite. ergibt das z.B. 2, dann brauchst du min. 3 Seiten
2) Jetzt wirds knifflig. Du musst obige Berechnung nochmal machen, jedoch erweitert um deine "zusätzlichen" Übertragszeilen.
Die erste Seite (Seite "0") erhält eine zusätzliche Zeile (Übertragssumme unten) als letztmögliche Zeile
Die letzte Seite (Seite "?") erhält eine zusätzliche Zeile (Übertragssumme oben) als erstmögliche Zeile
Die Seiten dazwischen erhalten zwei zusätzliche Zeilen (Übertragssumme oben und unten)

Beispiel:
Pro Seite passen 20 Datenzeilen
Du hast 57 (=X) "originale" Datenzeilen

1. Schritt
X Div 20 = 2 (Dieses Ergebnis in einer Variablen speichern) --> du brauchst 3 Seiten

2. Schritt
Seite 1 --> +1 Zeile (Übertragssumme unten) --> 21 Datenzeilen
Seite 2 --> +2 Zeilen (Übertragssumme oben+unten) --> 22 Datenzeilen
//Seite x --> +2 Zeilen (Übertragssumme oben+unten) --> 22 Datenzeilen
Seite 3 --> +1 Zeile (Übertragssumme oben) --> 21 Datenzeilen
ergibt jetzt in Summe 64 Datenzeilen
Wiederhole Schritt 1 mit Übergabe des neuen "X" (=64)
Solange wiederholen, bis neues Ergebnis mit altem Ergebnis (In Variable gespeichert) gleich ist

Ist jetzt nur aus dem linken Ärmel gezogen

Wie gesagt: Kenne mich mit Lazreport nicht aus, aber du erwähnst Master/Page Foot Band (ich geh mal von aus, es gibt auch nen "Head" oder sowas), welches anscheinend nur bei Mehrseitigem Report zur Verfügung steht.
Wenn Page Foot/Head Band keinen Platz im Datenbereich wegnimmt, dann brauchste obigen Schritt 2 nicht, sondern nur Schritt 1.
Ergibt Schritt 1 >0, dann müssten Foot/Head zur Verfügung stehen.
Der Rest ist dann nur Mathe

EDIT: Obigen Schritt 2 kann man auch iterativ machen
Wenn Schritt 1 als Ergebnis >0 liefert:
Seite 1 --> 19 Datenzeilen + 1 Übertrag
Seite 2 --> 18 Datenzeilen + 2 Übertrag
Seite x --> 18 Datenzeilen + 2 Übertrag
solange wiederholen, wie restl. Datenzeilen >19
Letzte Seite --> Restl. Datenzeilen + 1 Übertrag
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
lcb-User
Beiträge: 60
Registriert: Di 15. Jul 2014, 13:18
OS, Lazarus, FPC: Linux Mint 22.2 Cinnamon Lazarus 4.3 (rev lazarus_4_2-11-g4374647103) FPC 3.2.2
CPU-Target: 64Bit
Wohnort: München
Kontaktdaten:

Re: Frage zu Lazreport

Beitrag von lcb-User »

Hallo,

ich hatte ein ähnliches Problem mit der Ausgabe einer Rechnung.
Mein Report besteht aus frei Bänder

Seiten-Kopfzeile
Master-Daten
Seiten-Fußzeile

Der wesentliche Mechanismus ist

Code: Alles auswählen

[if([TOTALPAGES]>1,'Seite '+[PAGE#]+' von '+[TOTALPAGES]+' Seiten','')]
Du kannst dir mal mein Projekt anschauen, unter Report findest Du die nötigen Infos
https://gitlab.com/bibsi/LazDaveso

Der Report wird quasi 2 mal aufgerufen und da bekommt er die nötigen Infos ob es mehrseitig wird.

Vielleicht hilft`s Dir. :)
Sonnige Grüße
Bibsi


Traue keiner Statistik die du nicht selbst gefälscht hast (Sir Winston Churchill 1874 - 1965)
Linux Mint 22.2 Cinnamon 6.4.8, Kernel 6.8.0-79-generic
Lazarus 4.3 (rev lazarus_4_2-11-g4374647103) FPC 3.2.2 x86_64-linux-gtk2

Soner
Beiträge: 774
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Frage zu Lazreport

Beitrag von Soner »

Icb-User hat schon richtige Tipps gegeben. Du musst in deinem Programm nichts ändern, das alles kannst du in Report-Designer erledigen.
Am einfachsten ist es man erstellt ein PageFooter-Band und plaziert dort ein Textobject(Memo) und macht gleiche Farbe wie Hintergrund und gibt als Highlight bedingung "[TOTALPAGES]>1" und als Highlight wählt man sichtbare Farbe.
Oder man kann mit Script arbeiten und gibt als Bedingung so etwas wie "Visible:=[TOTALPAGES]>1". Das ist auch besserer Weg.
Jetzt muss man natürlich in Memo Übertrag schreiben, dass kannst du z.B. so:
Übertrag = [Sum([DeinDataSetVonMasterBand."DEINFELD"], NameVonDeinMasterDataBand)]

Antworten