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

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

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)!


2 Anfangs-Zustand

In einem Angebots-/Auftrags-Formular sieht es so aus, wenn es mehrer Alternativ-Positionen hintereinander gibt:

FastReport Auftrag AlternPos 01.png


Es soll in diesem Fall aber nur einmal das Wort "Alternativ" gedruckt werden:

FastReport Auftrag AlternPos 02.png

Die Option "wiederholte Werte unterdrücken" auf der rechten Maustaste des Textfeldes funktioniert hier nicht. Warum auch immer, wird auch die erste Zeile nicht gedruckt. Es musste also eine andere Lösung her.


3 Lösung

Die Lösung geht so, dass man über eine Variable im Report zählt, das wievielte Mal das Textfeld gedruckt werden soll und ab dem 2. Druck das Feld unterdrückt.


3.1 Variable anlegen

Zuerst muss man im Report unter Report ⇒ Variablen eine neue Variable anlegen.

Nennen wir sie "iAlternativeVorhanden".

  • Der Autor verwendet den erster Buchstaben ab Kennzeichen für den Typ der Variable. "i" steht dabei für "Integer", also eine Ganzzahl.


3.2 Variable auf 0 stellen

Es ist gute Praxis, Variablen am Anfang immer auf einen definierten Grund-Wert zu bringen. Deshalb wird die Variable im Auftragskopf erst mal auf 0 gestellt:


procedure MasterAuftragsKopfOnBeforePrint(Sender: TfrxComponent);
begin
  // Initialisieren der Variablen, Bereiche, Seiten:
  Set( 'iAlternativeVorhanden', 0 );  // Unterdrückt mehrfach vorhandene "Alternative" 
  ...
end;


Man muss dazu die Funktion Set(...) verwenden. Leider gibt es in FastReport die "übliche" Form iAlternativeVorhanden := 0 nicht.

Nun muss die Variable auch auf 0 gestellt werden, wenn eine "normale" Position gedruckt wird:

procedure memoPosBezeichnungOnBeforePrint(Sender: TfrxComponent);
begin
  // Wenn die "normale" Bezeichnung (also nicht-alternativ) gedruckt wird,
  // muss der Zähler für die Mehrfach-drucken-nur-der-Erste zurückgestellt werden:   //JC//170706//
  Set( 'iBestPriceAlternativeVorhanden', 0 );
end;

4 Links