FastReport Tipps und Tricks: Verwendung von Feldern

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Verwendung von Feldern

1.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


1.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.


1.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">]


1.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.


1.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;



1.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.



1.7 Hyperlinks in Feldern

Mit FastReport kann man hinter jedem Feld (Objekt) einen Hyperlink hinterlegen. Beim Klick auf den Link z.B. in einer exportierten PDF-Datei öffnet sich dann der Browser mit diesem Link.

Einzelheiten werden unter FastReport Hyperlinks in Feldern beschrieben.


1.8 Nur die ersten X Stellen eines Feldes verwenden

Wenn man nur die ersten X Stellen eines Feldes drucken oder untersuchen will, kann man dazu die eingebaute Funktion copy( <Feld>, Von-Stelle , Anzahl-Zeichen ) verwenden.

Beispiel:

Anzeige der ersten 4 Stellen einer Inventarnummer:

[ Copy( <Einzelartikel."InventarNr"> , 1 , 4 ) ]


Feld in Fett darstellen wenn es mit "1234" beginnt:


procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
  if copy( <Einzelartikel."InventarNr"> ,1 ,4 )  = '1234' then
    MemoInvNr4.Font.Style := fsBold
  else
    MemoInvNr4.Font.Style := 0;
end;

2 Links