FastReport Tipps und Tricks: Variablen: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(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…“)
 
Zeile 35: Zeile 35:
  
 
'''[[FastReport: Zähler-Variable zum Unterdrücken von wiederholten Werten|Dieser Artikel]]''' beschreibt, wie man das Problem mit einer Variable lösen kann.
 
'''[[FastReport: Zähler-Variable zum Unterdrücken von wiederholten Werten|Dieser Artikel]]''' beschreibt, wie man das Problem mit einer Variable lösen kann.
 
== Verwendung von Feldern ==
 
 
=== 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:
 
 
[[Datei:FastReport_Tipps_Zeilenumbruch_GeisterSchatten_Bsp_01.png]]
 
 
 
 
=== 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.
 
 
 
 
=== 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:
 
 
[[Datei:FastReport_Memo_MitFormel.png]]
 
 
Die eckigen Klammern
 
 
[ ... ]
 
 
legen den Anfang und das Ende der Formel fest.
 
 
Normalerweise werden Datenbank-Felder in eckigen Klammern angegeben,
 
 
;<big>Wenn innerhalb der Formel Datenbank-Felder eingebunden werden, müssen diese jedoch in '''spitzen Klammern''' angegeben werden!</big>
 
 
;Falsch:
 
 
[[Positionen."Menge"] + [Positionen."MengeReserve"] - [Positionen."MengeFremd"] ]
 
 
;Richtig:
 
 
[<Positionen."Menge"> + <Positionen."MengeReserve"> - <Positionen."MengeFremd">]
 
 
 
 
=== 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]]'''.
 
 
 
 
=== 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:
 
 
<nowiki>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></nowiki>
 
 
:Das Ergebnis sieht so aus:
 
 
[[Datei:FastReport_Rechnung_Skonto_Unformatiert.png|border]]
 
 
:Damit die Ergebnisse formatiert werden, kann man die eingebaute Funktion <code>FormatFloat( 'Format',Zahl )</code> verwenden. Diese formatiert die Zahl anhand der Vorgaben im Text '''Format'''.
 
 
:Die Formel dazu sieht nun so aus:
 
<nowiki> 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></nowiki>
 
 
:Das Ergebnis:
 
 
[[Datei:FastReport_Rechnung_Skonto_Formatiert.png|border]]
 
 
;Die Ausdrücke der Formel im Einzelnen:
 
 
<nowiki>Bei Zahlung bis zum <b>[RechnungsFuss."Skonto1BisDatum"]</b> gewähren wir [RechnungsFuss."Skonto1Prozent"] % Skonto</nowiki>
 
 
: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:
 
 
<nowiki>Bei Zahlung bis zum <b>[<RechnungsFuss."Skonto1BisDatum">]</b> gewähren wir [<RechnungsFuss."Skonto1Prozent">] % Skonto</nowiki>
 
 
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:
 
 
<nowiki>% Skonto = [FormatFloat('#,##0.00 €',<RechnungsFuss."Skonto1Betrag">)].</nowiki>
 
 
Mit
 
 
[...]
 
 
wird der "Ausdruck" (also die Formel in der Formel) begrenzt. Innerhalb des Ausdrucks befindet sich die Funktion <code>FormatFloat</code>. Dieser wird zuerst die gewünschte Formatierung übergeben <code>'#,##0.00 €'</code> und nach dem Komma der Wert, der zu formatieren ist:
 
 
<nowiki><RechnungsFuss."Skonto1Betrag"></nowiki>
 
 
Bei der Berechnung...
 
 
<nowiki>Zahlungsbetrag mit Skonto: <b>[FormatFloat('#,##0.00 €', <RechnungsFuss."GesamtBetragBrutto"> - <RechnungsFuss."Skonto1Betrag">    )]</b></nowiki>
 
 
ist das genau das Gleiche, nur dass halt zwei Datenbankfelder verrechnet werden!
 
 
;Hinweis
 
:Leider unterstützt <code>FormatFloat</code> die universelle Währungsangaben <code>%2.2m</code> '''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;
 
 
 
 
 
=== 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.
 
  
  

Version vom 16. August 2017, 22:33 Uhr

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 Links