FastReport Tipps und Tricks: Variablen

Aus GEVITAS
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.


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.


2 Links