FastReport auf Rechnung nur letzten Lieferschein
1 Anzahl Datensätze vergleichen mit aktuellem Datensatz
Manchmal will man nur den letzten Datensatz ausdrucken, beispielsweise in einem Rechnungsformular nur den letzten Lieferschein.
Beispiel:
In einem Rechnungs-Report gibt es ein Band, in dem die Lieferscheine zu dem zugehörigen Auftrag aufgeführt sind:
Das sieht so aus:
Nun will man aber nur den letzten Lieferschein haben!
Dazu muss man das Band im Designer anklicken und im Objektinspektor auf das Register "Ereignisse" klicken.
In der Zeile "OnBeforePrint" macht man dann einen Doppelklick und kommt in das Code-Fenster:
procedure DetailDataLieferscheinNummernOnBeforePrint(Sender: TfrxComponent); begin end;
Nun fügt man diesen Code ein:
procedure DetailDataLieferscheinNummernOnBeforePrint(Sender: TfrxComponent); begin // Nur LETZTEN Datensatz aufführen: if <Line#> = DetailDataLieferscheinNummern.DataSet.RecordCount then DetailDataLieferscheinNummern.Visible := True else DetailDataLieferscheinNummern.Visible := False; end;
- <Line#>
- In dieser Variablen legt FastReport die "Zeilennummer" (=Datensatz-Nummer) des gerade eingelesenen Datensatzes ab. Das ist einfach eine fortlaufende Nummer ab 1.
- DetailDataLieferscheinNummern.DataSet.RecordCount
- Jetzt wird es etwas kompliziert:
- Jedes Band hat eine zugehörige Datenbank-Tabelle bzw. Datenbank-Abfrage. in diesem Fall hat das Band "DetailDataLieferscheinNummern" die Datensätze ("DataSet") aus den Lieferscheinen.
- "RecordCount" enthält nun die Anzahl der Datensätze des Bandes, in unserem Fall also die Anzahl der Lieferscheine zu dem zugehörigen Auftrag.
Wenn also das hier zutrifft...
if <Line#> = DetailDataLieferscheinNummern.DataSet.RecordCount then
...dann hat man in diesem Augenblick den letzten Datensatz und kann das Band einblenden...
DetailDataLieferscheinNummern.Visible := True
...ansonsten ist es nicht der letzte Datensatz und das Band soll ausgeblendet werden:
else DetailDataLieferscheinNummern.Visible := False;