FastReport Tipps und Tricks: Variablen: Unterschied zwischen den Versionen
(→Variablen im Code mit Inhalten füllen) |
(→Variable mit Zahlen als Text füllen) |
||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 73: | Zeile 73: | ||
* Das erste einfache Anführungszeichen zeigt an, dass nun ein Text folgt. | * Das erste einfache Anführungszeichen zeigt an, dass nun ein Text folgt. | ||
* Das zweite einfache Anführungszeichen ist das Anführungszeichen. | * Das zweite einfache Anführungszeichen ist das Anführungszeichen. | ||
| − | * Das dritte einfache Anführungszeichen zeigt an, dass der Text zu | + | * Das dritte einfache Anführungszeichen zeigt an, dass der Text (für das Anführungszeichen) zu Ende ist. |
* FastReport bekommt also '''ein''' einfaches Anführungszeichen geliefert und "weiß" nun, dass ein Text folgt und keine Zahl, kein Feld usw. | * FastReport bekommt also '''ein''' einfaches Anführungszeichen geliefert und "weiß" nun, dass ein Text folgt und keine Zahl, kein Feld usw. | ||
| Zeile 80: | Zeile 80: | ||
Da hier ein Datumsfeld als Text eingefügt werden soll, muss man die Funktion '''<nowiki>DateToStr( )</nowiki>''' verwendet, um das Datum in einen Text umzuwandeln. | Da hier ein Datumsfeld als Text eingefügt werden soll, muss man die Funktion '''<nowiki>DateToStr( )</nowiki>''' verwendet, um das Datum in einen Text umzuwandeln. | ||
| + | Wenn man '''<nowiki>DateToStr( )</nowiki>''' nicht verwendet bekommt man eine Fehlermeldung ... | ||
| + | |||
| + | Variante des Typs (UnicodeString) konnte nicht in Typ (Date) konvertiert werden | ||
| + | |||
| + | oder | ||
| + | |||
| + | Variante des Typs (Float) konnte nicht in Typ (Date) konvertiert werden | ||
| + | |||
| + | ;Grund: | ||
| + | :Datumswerte werden in der Datenbank als Fließkommazahl gespeichert, das Datum ist der Wert vor dem Komma, die Uhrzeit der Wert nach dem Komma. | ||
| + | |||
| + | |||
| + | |||
| + | === Variable mit Zahlen als Text füllen === | ||
| + | |||
| + | In einem Formular werden Datenbank-Felder mit Zahlen in eine Variable eingetragen: | ||
| + | |||
| + | <nowiki>set ('SeriennummernFeld', <SerienNummern."IdentNr"> )</nowiki> | ||
| + | |||
| + | Dabei werden führende Nullen aber von FastReport entfernt, was man hier nicht will, aus '0123456789' wird also '123456789'! | ||
| + | |||
| + | Um das zu vermeiden, muss man dem FastReport-Interpreter "sagen", dass der Inhalt des Feldes explizit ein String (Text) ist. | ||
| + | |||
| + | Dazu wird folgende Syntax verwendet: | ||
| + | |||
| + | <nowiki>set ('SeriennummernFeld', '''' + <SerienNummern."IdentNr"> + '''' )</nowiki> | ||
| + | |||
| + | Wenn man den String in Hochkomma setzt, erkennt FastReport das Feld als String. | ||
| + | |||
| + | Die '''vier Anführungszeichen''' haben folgende Bedeutung: | ||
| + | |||
| + | Das erste und letzte ' begrenzt einen String, also z.B. 'Abc'. | ||
| + | Innerhalb eines Strings kann man ein ' nicht einfach so angeben, sonst würde es als String-Ende interpretiert. Deshalb muss man ein einfaches Anführungszeichen innerhalb eines String durch ein doppeltes ' angeben. Aus... | ||
| + | |||
| + | <nowiki>'''' + <SerienNummern."IdentNr"> + ''''</nowiki> | ||
| + | |||
| + | wird also | ||
| + | |||
| + | '01234567890' | ||
== Links == | == Links == | ||
Aktuelle Version vom 27. Oktober 2025, 10:01 Uhr
Inhaltsverzeichnis
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.
1.3 Variablen im Code mit Inhalten füllen
Im Report kann man ja eigene Variablen einfügen (Menü Report ⇒ Variablen... ).
Leider kann man den Inhalte von Variablen nicht einfach so füllen...
<Meine Variable> := 'Irgendwas'
...sondern muss die Funktion
Set( 'Meine Variable, 'Irgendwas');
...verwenden.
Wenn man Felder einfügen will, ist das verhältnismäßig klar:
Set('LfdNr', <LfdNr> + 1);
Wenn man jedoch Text gemischt mit Feldern einfügen will, wird es etwas aufwändiger:. Hier soll z.B. die Variable "Versand" mit Text und einem Datenbank-Feld gefüllt werden.
Das muss dann so aussehen:
Set( 'Versand','''Anlieferung durch UPS am ' + DateToStr( <AuftragsKopf."AufbauDatum"> ) + ' vor 12 Uhr.' + '''' );
oder
Set( 'Versand','''Anlieferung durch UPS am ' + DateToStr( <AuftragsKopf."AufbauDatum"> ) + ' vor 12 Uhr.''' );
Die ersten drei einfache Anführungszeichen ''' leiten den Text ein, die letzten drei einfachen Anführungszeichen ''' zeigen das Ende des Textes an.
- Drei einfache Anführungszeichen '''???
- In FastReport ist das einfache Anführungszeichen der Beginn eines Textes.
- Das erste einfache Anführungszeichen zeigt an, dass nun ein Text folgt.
- Das zweite einfache Anführungszeichen ist das Anführungszeichen.
- Das dritte einfache Anführungszeichen zeigt an, dass der Text (für das Anführungszeichen) zu Ende ist.
- FastReport bekommt also ein einfaches Anführungszeichen geliefert und "weiß" nun, dass ein Text folgt und keine Zahl, kein Feld usw.
Damit "weiß" FastReport, dass ein Text in die Variable eingefügt werden soll.
Da hier ein Datumsfeld als Text eingefügt werden soll, muss man die Funktion DateToStr( ) verwendet, um das Datum in einen Text umzuwandeln. Wenn man DateToStr( ) nicht verwendet bekommt man eine Fehlermeldung ...
Variante des Typs (UnicodeString) konnte nicht in Typ (Date) konvertiert werden
oder
Variante des Typs (Float) konnte nicht in Typ (Date) konvertiert werden
- Grund
- Datumswerte werden in der Datenbank als Fließkommazahl gespeichert, das Datum ist der Wert vor dem Komma, die Uhrzeit der Wert nach dem Komma.
1.4 Variable mit Zahlen als Text füllen
In einem Formular werden Datenbank-Felder mit Zahlen in eine Variable eingetragen:
set ('SeriennummernFeld', <SerienNummern."IdentNr"> )
Dabei werden führende Nullen aber von FastReport entfernt, was man hier nicht will, aus '0123456789' wird also '123456789'!
Um das zu vermeiden, muss man dem FastReport-Interpreter "sagen", dass der Inhalt des Feldes explizit ein String (Text) ist.
Dazu wird folgende Syntax verwendet:
set ('SeriennummernFeld', '''' + <SerienNummern."IdentNr"> + '''' )
Wenn man den String in Hochkomma setzt, erkennt FastReport das Feld als String.
Die vier Anführungszeichen haben folgende Bedeutung:
Das erste und letzte ' begrenzt einen String, also z.B. 'Abc'. Innerhalb eines Strings kann man ein ' nicht einfach so angeben, sonst würde es als String-Ende interpretiert. Deshalb muss man ein einfaches Anführungszeichen innerhalb eines String durch ein doppeltes ' angeben. Aus...
'''' + <SerienNummern."IdentNr"> + ''''
wird also
'01234567890'