FastReport Tipps und Tricks: Variablen

Aus GEVITAS
Version vom 16. August 2017, 22:32 Uhr von Gevitas (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Variablen == === Fortlaufende Nummer === Wenn man eine fortlaufende Nummer im Report braucht, kann man dazu die System-Variable '''Line''' verwenden. '''L…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

1 Variablen

1.1 Fortlaufende Nummer

Wenn man eine fortlaufende Nummer im Report braucht, kann man dazu die System-Variable Line verwenden. Line gibt die Nummer des gerade abgerufenen Datensatzes an, von 1 beginnend.

Wenn man jedoch z.B. eine Gruppierung im Report hat und nur die Daten aus dem Gruppenfuß drucken will, kann man Line nicht verwenden, weil in einer Gruppe ja viele Datensätze enthalten sind und Line die Datensätze zählt, nicht die Gruppenergebnisse.

Um die Aufgabe zu lösen, deklariert man eine eigene Variable im Report und setzt den Standardwert auf 0.

Im Code gibt man z.B. im Gruppenfuß folgenden Code ein:

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
  Set('LfdNr', <LfdNr> + 1);
end;


1.2 Zähler-Variable zum Unterdrücken von wiederholten Werten

Manchmal möchte man wiederholte Werte, die untereinander stehen, nicht drucken. Beispiel einer Auftragsposition:

1.1 Artikel A

Alternativ:
1.2 Artikel B 

Alternativ:
1.3 Artikel C

Das Wort Alternativ: soll hier nur bei der ersten Alternative stehen, die direkt danach folgenden sollen unterdrückt werden.

Eigentlich gibt es dazu in FastReport eine Option "wiederholte Werte unterdrücken" auf der rechten Maustaste eines Objektes. In einfachen Listen funktioniert das auch, in komplexen Formularen mit wechselseitigem Ausblenden von Bändern aber nicht (immer)!

Dieser Artikel beschreibt, wie man das Problem mit einer Variable lösen kann.

2 Verwendung von Feldern

2.1 Zeilenumbruch innerhalb von Feldern

Wenn man ein Feld in den Report einfügt, ist die Eigenschaft "Zeilenumbruch" (leider) immer eingeschaltet. Da man diesen bei den meisten Feldern nicht benötigt, kann man ihn ausschalten: Mit der rechten Maustaste auf das Feld klicken und die Eigenschaft Zeilenumbruch ausschalten.

Der ungewollte Zeilenumbruch kann dazu führen, dass unterhalb der Felder "Geisterschatten" stehen. Beispiel:

FastReport Tipps Zeilenumbruch GeisterSchatten Bsp 01.png


2.2 Zeilenabstand in Feldern

Wenn man den Zeilenabstand innerhalb eines Memo-Felder ändern will, kann man die Eigenschaft LineSpacing vom Standardwert 2 z.B. auf 6 ändern.


2.3 Berechnungen in einem Feld

Wenn man in einem Feld etwas berechnen möchte, muss man dazu keine Formel oder Variable verwenden wie in CrystalReports©! Man kann die Rechenformel einfach in das Feld schreiben.

Beispiel:

In einer Ladeliste möchte man eine Spalte haben mit der Auftragsmenge zzgl. der Reserve-Mengte, abzgl. der Fremdmenge, also die zu ladende eigene Menge. Dazu zieht man man einfach ein Textfeld in das entsprechende Detail-Band und stellt die Formel zusammen:

[<Positionen."Menge"> + <Positionen."MengeReserve"> - <Positionen."MengeFremd">]

Die Feldnamen kann man mit diesem Button holen:

FastReport Memo MitFormel.png

Die eckigen Klammern

[ ... ]

legen den Anfang und das Ende der Formel fest.

Normalerweise werden Datenbank-Felder in eckigen Klammern angegeben,

Wenn innerhalb der Formel Datenbank-Felder eingebunden werden, müssen diese jedoch in spitzen Klammern angegeben werden!
Falsch
[[Positionen."Menge"] + [Positionen."MengeReserve"] - [Positionen."MengeFremd"] ]
Richtig
[<Positionen."Menge"> + <Positionen."MengeReserve"> - <Positionen."MengeFremd">]


2.4 Zahlenwert in Text umwandeln

Manchmal hat man die Aufgabe, einen Zahlenwert aus der Datenbank in einen Text umzuwandeln. Ein Beispiel dafür zeigt der Report für das Lagerprotokoll.


2.5 Berechnungen in einem Feld mit Formatierung

Wenn man in einem Feld etwas berechnet, wird das Ergebnis so ausgegeben, wie es die Berechnung ergibt. Wenn man z.B. mit zwei Fließkommazahlen rechnet, wird das Ergebnis auch mit allen resultierenden Nachkommstellen ausgegeben.

Beispiel
Im Rechnungsfuß wird der Skonto-Betrag und Skonto-Zahlungsbetrag errechnet und ausgegeben. Der Text im Feld lautet:
Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto = [RechnungsFuss."Skonto1Betrag"]. 
 Zahlungsbetrag mit Skonto: <b>[<RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">]</b>
Das Ergebnis sieht so aus:

FastReport Rechnung Skonto Unformatiert.png

Damit die Ergebnisse formatiert werden, kann man die eingebaute Funktion FormatFloat( 'Format',Zahl ) verwenden. Diese formatiert die Zahl anhand der Vorgaben im Text Format.
Die Formel dazu sieht nun so aus:
 Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto = [FormatFloat('#,##0.00 €',<RechnungsFuss."Skonto1Betrag">)]. 
 Zahlungsbetrag mit Skonto: <b>[FormatFloat('#,##0.00 €', <RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">    )]</b>
Das Ergebnis:

FastReport Rechnung Skonto Formatiert.png

Die Ausdrücke der Formel im Einzelnen
Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto
Es sind Verweise auf Datenbankfelder in der Formel enthalten, die mit eckigen Klammern eingefügt werden. Eigentlich müsste es nach den Regeln von oben so heißen:
Bei Zahlung bis zum <b>[<RechnungsFuss."Skonto1BisDatum">]</b> gewähren wir [<RechnungsFuss."Skonto1Prozent">] % Skonto

Das ist auch zulässig. FastReport erlaubt es jedoch, die spitzen Klammern wegzulassen, wenn der Ausdruck nur eine Variable oder nur ein Datenbank-Feld beinhaltet!

Die Formatierung
% Skonto = [FormatFloat('#,##0.00 €',<RechnungsFuss."Skonto1Betrag">)].

Mit

[...]

wird der "Ausdruck" (also die Formel in der Formel) begrenzt. Innerhalb des Ausdrucks befindet sich die Funktion FormatFloat. Dieser wird zuerst die gewünschte Formatierung übergeben '#,##0.00 €' und nach dem Komma der Wert, der zu formatieren ist:

<RechnungsFuss."Skonto1Betrag">

Bei der Berechnung...

Zahlungsbetrag mit Skonto: <b>[FormatFloat('#,##0.00 €', <RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">    )]</b>

ist das genau das Gleiche, nur dass halt zwei Datenbankfelder verrechnet werden!

Hinweis
Leider unterstützt FormatFloat die universelle Währungsangaben %2.2m nicht. Man muss das Währungssymbol also fest angeben. Wenn die Währung in Ihrem Land nicht der EURO ist, müssten Sie den Report an dieser Stelle entsprechend anpassen.


Unterdrücken, wenn kein Skonto
Mit diesem, Code kann man das Feld unterdrücken, wenn kein Skonto angegeben wurde:
procedure RechnungsFussSkonto1BisDatumOnBeforePrint(Sender: TfrxComponent);
begin
  if <RechnungsFuss."Skonto1Betrag"> = 0 then
    RechnungsFussSkonto1BisDatum.Visible := False;
end;



2.6 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. Behelfen könnte man sich, indem man das Feld im Code OnBeforePrint unterdrückt, wenn kein Datum drin steht. Einfacher ist es aber, auf dem Feld mit der rechten Maustaste zu klicken und die Option Nullen verbergen einzuschalten!

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.



3 Links