Bedingte Textausgaben

Bedingte Ausgabe von Texten mit Hilfe von IF-Bedingungen

Textausgabe nur wenn…

In eigenen Vorlagen ist es häufig sinnvoll einen bestimmten Textbereich nur dann tatsächlich auszugeben wenn eine bestimmte Bedingung erfüllt ist.

Dies kann im einfachsten Fall das Vorhandensein eines bestimmten Umstands sein. Solche Bedingungen werden normalerweise mit dem Steuerungsplatzhalter IFSET(…) durchgeführt.

IFSET(Name_des_zu_testenden_Platzhalters) testet ob der Platzhalter gesetzt ist, d.h. nicht leer ist. Als nicht leer gilt auch die Antwort JA, wie sie z.B. verschiedene Platzhalter ausgeben wenn ein bestimmter Wert gesetzt ist.

#IFSET(K-TOD)#
     Der Klient ist am #K-TOD# verstorben.
#ENDIF#

Ist im Feld “verstorben am” ein Datum hinterlegt und damit “nicht leer”, wird der Text ausgegeben. Ist kein Datum hinterlegt wird der gesamte Text nicht ausgegeben.

Der gegenteilige Vergleich, d.h. der Test ob ein Wert nicht gesetzt ist, kann mit IFNOTSET(Name_des_zu_testenden_Platzhalters) durchgeführt werden.

#IFNOTSET(CHK-FINANZ-FREI-STATUS)#
    Ein Freistellungsauftrag liegt leider nicht vor
#ENDIF#

Wie bei allen bedingten Ausgaben wird der Text, der nur unter der angegebenen Bedingung ausgegeben werden soll, durch die einleitende Bedingung IF… und das abschließende ENDIF eingeschlossen. Haben Sie das abschließende ENDIF vergessen, kommt es zu einem entsprechenden Fehlertext im so erstellten Dokument.

Erweiterte Bedingungen

Neben den IFSET/IFNOTSET Bedingungen gibt es in BdB at work auch die Möglichkeit gezielte Vergleiche als Bedingung durchzuführen. So können Texte noch gezielter am eigentlichen Inhalt von Datenfeldern gestaltet werden, statt sich bei den Bedingungen nur am Vorhandensein, bzw. dem Fehlen von Informationen zu orientieren.

Mit verschiedenen Vergleichsoperationen können Sie den Inhalt eines Platzhalters mit einem von Ihnen festgelegten Wert vergleichen. Ist der Vergleich wahr, wird der in die Bedingung eingeschlossene Text ausgegeben. Ist der Vergleich falsch, wird der Text nicht ausgegeben.

Hierzu dient der Steuerungsplatzhalter IF(Name_des_Platzhalters Vergleichsoperator IhrWert)

#IF(K-ORT=Berlin)#Wohnt in der deutschen Hauptstadt#ENDIF#

Als Vergleichsoperation stehen Ihnen verschiedene Operatoren zur Verfügung:

  • Platzhalter = Wert

Ergibt wahr wenn der Wert im Platzhalter gleich dem angegebenen Wert ist.
Beispiel: #IF(K-NAME=Schmidt)#

  • Platzhalter > Wert

Ergibt wahr wenn der Wert im Platzhalter größer als der angegebene Wert ist.
Beispiel: #IF(K-NAME>Meier)#

  • Platzhalter < Wert

Ergibt wahr wenn der Wert im Platzhalter kleiner als der angegebene Wert ist.
Beispiel:#IF(K-NAME<Meier)#

  • Platzhalter >= Wert

Ergibt wahr wenn der Wert im Platzhalter größer oder gleich dem angegebenen Wert ist.
Beispiel: #IF(K-NAME>=Meier)#

  • Platzhalter <= Wert

Ergibt wahr wenn der Wert im Platzhalter kleiner oder gleich dem angegebenen Wert ist.
Beispiel: #IF(K-NAME<=Meier)#

  • Platzhalter <> Wert

Ergibt wahr wenn der Wert im Platzhalter ungleich dem angegebenen Wert ist.
Beispiel: #IF(K-NAME<>Meier)#

  • Platzhalter $ Wert

Ergibt wahr wenn der Platzhalter (links) in der Zeichenfolge des angegebenen Wert (rechts) enthalten ist.
Beispiel: #IF(K-ORT$Hamburg|Bremen|Kiel)#
Die Zeichenfolge muss exakt sein, d.h. Groß/Kleinschreibung wird berücksichtigt.

  • Platzhalter $$ Wert

Ergibt wahr wenn der angegebene Wert (rechts) in der Zeichenfolge des Platzhalters (links) enthalten ist.
Beispiel: #IF(K-FA-AUFGK$$Verfahrensbeistand)#
Die Zeichenfolge muss exakt sein, d.h. Groß/Kleinschreibung wird berücksichtigt.

Alle Vergleiche werden auf Zeichenebene durchgeführt
Angaben wie größer oder kleiner beziehen sich also stets auf die Einsortierung in alphabetischer Reihenfolge. Je weiter vorne in der Zeichensortierung, desto kleiner ist der Wert. Je weiter hinten in der Sortierung, desto größer ist ein Wert.

 

Aus dieser für alle Bedingungen gleich geltenden Regel ergeben sich folgende wichtige Merkmale die es beim Erstellen einer Vergleichsbedingung zu beachten gilt:

Meier ist als reine Zeichenfolge somit kleiner als Schulz.

Sonderfall Zahlen & Sonderzeichen

Zahlen sind in der Sortierung vor Buchstaben und somit kleiner als diese.

Durch diese Sortierung ergibt sich ein Problem beim Vergleich von Zahlen:

1000 ist im Vergleich kleiner als 21, denn das erste Zeichen 1 ist kleiner als das erste Zeichen 2.

Satz- und Sonderzeichen wie .,+%§ und ähnliches sind kleiner als Zahlen und Buchstaben.

 

Sonderfall Datumsvergleich

Bei Datumsangaben wird es noch schwieriger sinnvolle Bedingungen zu erstellen. Bei Datumsangaben spricht man von kleiner je weiter das Datum in der Vergangenheit liegt. Ein Datum in der Vergangenheit ist also kleiner als eines aus der Zukunft.

Ein Vergleich auf Zeichenebene führt dann allerdings zu fehlerhaften Ergebnissen:

Der 21.02.1970 ist im Vergleich größer als der 01.01.2020, da die 2 an erster Stelle größer ist als die 0 an der ersten Stelle des zweiten Werts.

Daraus folgt: Eine sinnvolle Bedingung ausser “ist gleich” kann unter diesen Umständen nicht erstellt werden, da jeder “ist größer/kleiner” Vergleich fehlerhaft wird. Zum Glück gibt es eine Lösung für dieses Problem, dass Sie mit BdB at work sehr einfach umsetzen können.

Datumsangaben werden normalerweise im Format TT.MM.JJJJ ausgegeben. Dieses Format ist, wie oben beschrieben, auf Zeichenebene nicht inhaltlich korrekt vergleichbar. Hierzu gibt es eine besser geeignete Ausgabe im Format JJJJMMTT.

So ergibt sich aus dem obigen Beispiel der Vergleich von 19700221 zu 20200101. Hier ergibt sich korrekt, das der 1970er Wert kleiner, d.h. älter als der 2020er Wert ist.

Damit Sie dieses Format in Ihren Vorlagen bei bedingten Textausgaben nutzen können, gibt es eine Erweiterung aller dokumentierten Textplatzhalter die Datumsangaben ausgeben.

Hängen Sie hierzu an den Namen des Textplatzhalter ein _YMD an um die Ausgabe vom  klassischen Datumsformat auf das sortierbare Format umzustellen.

Hier einige Beispiele für bekannte Textplatzhalter:

  • Aus #K-GEBDAT# wird #K-GEBDAT_DMY# (Geburtstag des Klienten)
  • Aus  #K-KONTODAT# wird #K-KONTODAT_DMY# (Eröffnungsdatum des Hauptkontos)
  • Aus #K-VVZDATUM# wird #K-VVZDATUM_DMY# (Datum des Vermögensverzeichnis)
Beispiele

Klient ist nach 31.12.1975 geboren
In diesem Beispiel wird ein Text ausgegeben, wenn der Klientengeburtstag nach Silvester 1975 liegt.

#IF(K-GEBDAT>19751231)#
     Der Klient ist nach 1975 geboren.
#ENDIF#

Zusätzlich kann man bei allen bedingten Ausgaben durch Nutzung von #ELSE# den “andernfalls”-Fall ausgeben. Nach dem “Wenn,dann…sonst”-Muster können Sie eine Bedingung erstellen bei deren Erfüllung ein Text ausgegeben wird. Ist die Bedingung dann nicht erfüllt, wird der “sonst”-Text ausgegeben.

#IF(K-GEBDAT>19751231)#
     Der Klient ist nach 1975 geboren.
#ELSE#
     Der Klient ist vor 1976 geboren.
#ENDIF#

Dieses Beispiel zeigt zugleich einen wichtigen Aspekt bei Datumsvergleichen. Der ELSE-Fall ist nicht nur die Umkehrung des Vergleichs sondern schließt meist auch den Gleichheitsfall mit ein. Denn wenn in diesem Beispiel der Klient nach 1975 geboren wurde, ist das Gegenteil eben nicht vor 1975 sondern bedeutet nur, dass der Klient dann vor oder sogar an dem konkreten Vergleichsdatum geboren wurde. Dieser Unterschied ist bei der Formulierung Ihrer Texte im ELSE-Zweig zu berücksichtigen.

Im obigen Beispiel heißt es daher im ELSE-Zweig vor 1976, und nicht etwa vor 1975.

Mehrere Bedingungen

Grade beim Vergleich mit Datumsangaben ist es häufig notwendig mehrere Bedingungen zu berücksichtigen. Diese Bedingungen sollen dann mit UND verbunden werden.

Dies wird dann notwendig, wenn Sie einen Zeitraum als Bedingung nutzen wollen.

Beispiel: Der Text soll ausgegeben werden, wenn der Klient zwischen dem 1.1.1970 und dem 31.12.1979 geboren wurde.

Da der Steuerungsplatzhalter IF(…) keine zusätzlichen UND-Parameter kennt, müssen zwei IF-Bedingungen verschachtelt werden.

#IF(K-GEBDAT>=19700101)#
#IF(K-GEBDAT<=19791231)#
     Der Klient wurde in den 70ern geboren
#ENDIF#
#ENDIF#

Beachten Sie unbedingt die Verwendung der korrekten ENDIF-Angaben. Jedes IF(…) das Sie öffnen muss mit einem passenden ENDIF auch wieder geschlossen werden.

 

Ausgabe für eine bestimmte Stadt

In diesem Beispiel wird der Text ausgegeben wenn ein bestimmter Ortsname vorhanden ist.

#IF(K-ORT=Hamburg)#
     Moin, Moin
#ELSE#
     Guten Tag
#ENDIF#

Hier ist zu beachten, dass ein Vergleich den vollständigen Text voraussetzt. Ist in diesem Beispiel beim Klienten als Wohnort “Hamburg-Harburg” eingetragen, wird nur Guten Tag ausgegeben, da die Zeichenfolge “Hamburg-Harburg” nicht gleich “Hamburg” ist.

Zur besseren Lesbarkeit wurden die Beispiele mit zusätzlichen Umbrüchen versehen. Diese zusätzlichen Umbrüche führen bei einer Nutzung in echten Vorlagen auch zu echten, vermutlich unerwünschten Umbrüchen.

veröffentlicht am 13.Dezember 2016
aktualisiert am 25. Januar 2017