FastReport: Anlegen und verwenden von Variablen im Report
Inhaltsverzeichnis
1 Allgemeines
Eine Variable in FastReport ist eine Art "Platzhalter" mit einem bestimmten Namen. Die Variable hat einen variablen Wert/Inhalt, daher der Name.
1.1 Systemvariablen
Es gibt Systemvariablen, die von FastReport zur Verfügung gestellt werden, z.B.
- [Page]
- Die aktuelle Seiten-Nummer
- [TotalPages]
- Die höchste Seiten-Nummer. Damit diese einen Wert zeigt, muss in den Report-Optionen die Option "Zweipass" eingeschaltet sein! In diesem Fall wird der Report zweimal ausgeführt: Das erste Mal "im Stillen", ohne dass der Report ausgegeben wird. Danach "weiß" der Report die Gesamtseitenzahl und gibt den Report nun aus. Dieses zweimalige Ausführen des Reports dauert natürlich etwas länger. Deshalb sollte man die Option nur einschalten, wenn man die Gesamtseitenzahl auch wirklich braucht!
- [Date]
- Das aktuelle Datum
- [Time]
- Die aktuelle Zeit
- [Line]
- Die Zeilen-Nummer (Datensatz-Nummer) eines Detail-Bandes.
1.2 Eigene Variablen
Eigene Variablen kann man z.B. dazu verwenden, in einem Report einen bestimmten Wert zu berechnen, z.B. aus der Menge und dem Gewicht das Gesamt-Gewicht.
1.3 Programm-Variablen
Diese Variablen stellt das Programm zur Verfügung, siehe GevitasFormPrint Variablen.
Die Namen dieser Variablen sind festgelegt und müssen genau so angelegt werden, wie beschrieben!
2 Anlegen einer Variablen
Zum Anlegen einer Variablen klickt man auf das Menü Report ⇒ Variablen. In diesem Fenster kann man die eigenen oder Programm-Variablen anlegen:
Jede Variable, die man selbst anlegt, muss zu einer bestimmten Kategorie gehören, im Beispiel oben "EigeneVariablen".
Wenn es noch keine gibt, muss man diese mit dem Button oben links zuerst anlegen. Der Name der Kategorie ist beliebig. Wenn man in einem Report viele Variablen hat, kann man auch mehrere Kategorien anlegen und die Variablen passend dazu anlegen.
Die Kategorien dienen nur der besseren Übersicht. Die Namen der Variablen müssen eindeutig sein, d.h. keine Variable darf so heißen wie eine andere, auch wenn diese in einer anderen Kategorie ist!
Wenn Sie eine neue Variable anlegen wollen, klicken Sie auf:
Die Variable wird erst mal als "New Variable1" in den Baum eingefügt. Klicken Sie diesen Eintrag an und drücken F2. Dann geben Sie der Variable einen aussagekräftigen Namen.
Im Eingabefeld Ausdruck können Sie der Variable einen Vorgabe-Wert geben, müssen das aber nicht!
Variablen in FastReport sind typenfrei (sog. "Varianten"), d.h. der Typ des Inhalts (Zahl, Text, Datum usw.) muss nicht festgelegt werden! Erst wenn man die Variable verwendet (z.B. etwas damit berechnet), wird der Typ festgelegt:
- Wenn man die Variable zum Rechnen benutzt, wird diese als Zahl betrachtet.
- Wenn man die Variable im Report ausgibt, wird sie als Text behandelt. Gibt man jedoch ein Zahlenformat oder ein Datumsformat vor, wird die Variable automatisch umgewandelt.
3 Ausgeben einer Variable im Report
Eine Variable kann ganz einfach per Drag And Drop aus dem Reiter "Variablen" in den Report eingefügt werden.
4 Ändern eines Variablen-Werts im Report-Code
Im Code kann man einer Variable einen Wert zuweisen mit dem Kommando
Set( 'VariablenName','Wert' )
Wichtig:
Wenn man einer Variablen einen String-Wert (Text) zuweise will, muss man den Wert zwischen ein einfaches Anführungszeichen setzen!
Bei einem konstanten Text geht das ja einfach (s.o.), schwieriger wird es, wenn man z.B. ein Datenbank-Feld zuweisen will.
Würde man
Set( 'VariablenName','<RückgabBisDatumUhrzeit>' )
schreiben, so würde nicht das Feld zugewiesen werden sondern der Text "<RückgabBisDatumUhrzeit>"!!! Deshalb muss man in diesem Fall die seltsame Konstruktion verwenden:
Set( 'VariablenName','''' + <RückgabBisDatumUhrzeit> + '''' )
- Das erste leitet den String ein.
- Die beiden nachfolgenden ergeben zusammen ein .
- Das letzte beendet den String.
Ähnlich geht das, wenn man z.B. einen Backslash einfügen will. Auch dieser ist ein Steuerzeichen. Das sieht dann so aus:
'\\'
- Das erste leitet den String ein.
- Die beiden nachfolgenden \ ergeben zusammen einen \.
- Das letzte beendet den String.
Beispiele:
- Feld mit Zahlenwert
Set( <MeineZahlenVariable>,17 )
- Feld mit einfachen Anführungszeichen
// Uhrzeit nur, wenn KENNZ3 auf "Ja" steht: // Nicht oder "Nein": KEINE Uhrzeit drucken! Set( 'UhrzeitVon','''' + '''' ); // Default: Leer! Set( 'UhrzeitBis','''' + '''' ); // Default: Leer! if UpperCase( <AuftragsKopf."VersandArt"> ) = 'ABHOLER' then Set( 'UhrzeitVon','''' + 'ab 14:00' + '''' ) else if UpperCase( <AuftragsKopf."KENNZ3"> )='JA' then begin if <AuftragsKopf."VA-VonZeit"> > '' then Set( 'UhrzeitVon','''' + <AuftragsKopf."VA-VonZeit"> + '''' ); if <AuftragsKopf."VA-BisZeit"> > '' then Set( 'UhrzeitBis','''' + <AuftragsKopf."VA-BisZeit"> + ''''); end;
- Variable zur Summenbildung im Report-Code
- Manchmal kann man zur Summenbildung keine eingebauten Summen-Funktion benutzen, weil z.B. Bänder ausgeschaltet werden und die Summe nur unter bestimmten Bedingungen addiert werden soll.
- Beispiel
- Im Report wird unter Report ⇒ Variablen eine Variable mit dem Namen "GesSummeNetto" definiert.
- Im Report-Titel (ganz am Anfang) wird die Variable auf 0 gestellt:
- (Muss man eigentlich nicht zwingend, ist aber sauberer Programmier-Stil)
procedure ReportTitle1OnBeforePrint(Sender: TfrxComponent); begin // Variable für Summenbildung: Set( 'GesSummeNetto', 0 ); end;
- Im Gruppen-Kopf (wo z.B. ein Auftragskopf-/Fuss steht) wird die Summe in die Variable addiert:
procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent); begin // Variable für Summenbildung: Set( 'GesSummeNetto', <GesSummeNetto> + <TurnDownListe."AuftrFuss_Nettobetrag1"> ); end;
5 Links
Siehe:
- Der schnellere aber etwas komplizierte Weg, Variablen in einen Report einzufügen, wird hier beschrieben.