FastReport: Anlegen und verwenden von Variablen im Report

Aus GEVITAS
Version vom 5. Juni 2018, 09:29 Uhr von Gevitas (Diskussion | Beiträge) (Ändern eines Variablen-Werts im Report-Code)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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:

FastReport Variablen Fenster Bsp.png

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:

FastReport Variablen Fenster Neu.png

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 EinfachesAnfZeichen.png 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 EinfachesAnfZeichen.png leitet den String ein.
  • Die beiden nachfolgenden EinfachesAnfZeichen.pngEinfachesAnfZeichen.png ergeben zusammen ein EinfachesAnfZeichen.png.
  • Das letzte EinfachesAnfZeichen.png 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 EinfachesAnfZeichen.png leitet den String ein.
  • Die beiden nachfolgenden \ ergeben zusammen einen \.
  • Das letzte EinfachesAnfZeichen.png 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.


FastReport Seitenformat FastReport Daten, Tabellen und Felder FastReport Tabellen der Reports Beispiele:
FastReport Bands FastReport Objekte und Elemente eines Reports FastReport: Abhängige Formatierung von Feldern Ladeliste/Packliste mit FastReport
Standard-Formular-Texte Steuerung des Report mit Auftragskennzeichen Summen im Report bilden Leasing-Liste
FastReport Farb-Konstanten Namensgebung der Datenbank-Tabellen und -Felder Tipps und Tricks Inventar-Liste
REFLEX Standard-Reports Etikettendruck Allgemeines Mehrsprachige Formulare mit FastReport Geräte-Liste
GEVITAS Label-Print Installation GEVITAS-Carnet Videos zu FastReport