FastReport Tipps und Tricks: Unterschied zwischen den Versionen
(→Manueller Seitenwechsel im Code) |
(→Manueller Seitenwechsel im Code) |
||
Zeile 72: | Zeile 72: | ||
begin | begin | ||
// Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band ausgegeben wird. | // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band ausgegeben wird. | ||
− | + | ||
// Kapitel-Position ausblenden: | // Kapitel-Position ausblenden: | ||
if <Positionen."PosNr"> = 0 then | if <Positionen."PosNr"> = 0 then |
Version vom 7. Dezember 2015, 13:40 Uhr
Inhaltsverzeichnis
1 Allgemeines
Dieser Artikel beschreibt kleine Tipps und Tricks für das Erstellen von Reports mit FastReport, die im Alltag hilfreich sein können.
1.1 Anzahl der Datensätze
Manchmal hat man das Problem, dass bestimmte Bereiche unterdrückt werden sollen, wenn es nur einen einzigen Datensatz gibt. Beispielsweise hat man ein Mahnungsformular mit der Tabelle der fälligen Rechnungen und darunter die Gesamtsumme. Die Gesamtsumme soll aber unterdrückt werden, wenn es nur eine angemahnte Rechnung in der Tabelle gibt. Dann kann im Objektinspektor des Bereich auf das Ereignis
OnBeforePrint
doppelklicken und diesen Code schreiben:
procedure Child2OnBeforePrint(Sender: TfrxComponent); begin // Band mit der Gesamtsumme unterdrücken, wenn es nur EINE Rechnung gibt: if <Line#> = 1 then Child2.Visible := False else Child2.Visible := True; end;
Die System-Variable <Line#> beihaltet die Anzahl der Zeilen (Datensätze) des Detail-Bandes.
1.2 Datumsfeld unterdrücken, wenn kein Datum drin steht
Wenn man ein Datumsfeld im Report hat, steht dort je nach Formatierung "0" oder "30.12.1899" drin, wenn es gar kein Datum gibt. Das ist nicht schön, ist aber leider so.
Behelfen kann man sich, indem man das Feld unterdrückt, wenn kein Datum drin steht. Dazu kann im Objektinspektor des Bereich auf das Ereignis
OnBeforePrint
doppelklicken und diesen Code schreiben:
procedure MahnungslisteDatumLetzteMahnungOnBeforePrint(Sender: TfrxComponent); begin // Unterdrücken wenn 0-Datum: if <Mahnungen."DatumLetzteMahnung"> < 2 then MahnungslisteDatumLetzteMahnung.Visible := False else MahnungslisteDatumLetzteMahnung.Visible := True; end;
Wenn man einen Rahmen um das Feld angegeben hat, weil man die Daten tabellarisch anzeigen möchte, so fehlt in diesem Fall das Feld und auch der Rahmen. Um diese "Zahnlücke" zu füllen, kann man ein leeres Textfeld über oder unter das Datumsfeld setzen, das genauso groß ist und die Lücke füllt, falls das Datumsfeld ausgeblendet wird.
- Nachtrag
- Dazugelernt! Einfacher ist es auf dem Feld mit der rechten Maustaste zu klicken und die Option Nullen verbergen einzuschalten! Das Beispiel oben haben wir trotzdem gelassen, weil man die Logik ja auch für andere Zwecke verwenden kann.
1.3 Report-Zusammenfassung am Ende der Seite
Wenn man die Report-Zusammenfassung (Report Summary) am Ende der Seite drucken will, muss man im Ereignis ReportSummary1OnBeforePrint diesen Code einfügen:
procedure ReportSummary1OnBeforePrint(Sender: TfrxComponent); begin Engine.CurY := Engine.CurY + Engine.FreeSpace - ReportSummary1.Height - 1; end;
1.4 Manueller Seitenwechsel im Code
Wenn man im Report einen manuellen Seitenwechsel anhand eines Kennzeichens erzeugen will, muss man im Ereignis OnBeforePrint des gewünschten Bandes diesen Code einfügen:
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird. // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist: if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then Engine.NewPage; // Neue Seite, Seitenkopf usw. drucken end; procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band ausgegeben wird. // Kapitel-Position ausblenden: if <Positionen."PosNr"> = 0 then begin DetailPositionen.Visible := False; end else DetailPositionen.Visible := True; // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist: if <Positionen."PosNr"> > 0 then // NICHT bei Kapitel-Position, das wird da schon gemacht! if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then Engine.NewPage; // Neue Seite, Seitenkopf usw. drucken end;
1.5 Fehlermeldung "Alternativ nicht gefunden" in Rechnung
Wenn Sie einen als Auftragsformular erstellten Report kopieren und als Rechungsformular (-Grundlage) verwenden wollen, erhalten Sie eine Fehlermeldung wie diese:
Grund:
In Rechnungen gibt es kein Alternativ.
Lösung:
Entfernen Sie mit dem Report-Designer alle Verweise auf das Alternativ-Feld!