In einigen Bereichen der Finanzbuchhaltung werden Such- und Zuordnungsfunktionen durch die Verwendung regulärer Ausdrücke unterstützt, beispielsweise bei der Suche und Zuordnung von Partnern und offenen Posten im ABB.
Durch die Angabe von Suchbegriffen, die einen regulären Ausdruck darstellen, werden Dateninhalte analysiert und Werte aus einem Datenstring extrahiert. Als Ergebnis wird eine Zeichenfolge zurückgegeben, die dem gesamten regulären Ausdruck entspricht. Dies führt immer dann zu Problemen, wenn ein gesuchter Begriff nur im Kontext zu den ihn umgebenden Zeichen gefunden werden kann.
In einem String (z. B. Bankzahlung-Verwendungszweck) muss eine fünfstellige Rechnungsnummer gefunden werden um darüber den korrekten offenen Posten zuzuordnen. Die Daten im Verwendungszweck stellen sich beispielsweise wie folgt dar:
KNR2202548710 RNR22545 DT20220815
Aus diesen Daten soll die Rechnungsnummer 22545 gefunden werden.
Eine einfache Suche nach einem fünfstelligen numerischen Begriff kann folgendermaßen als regulärer Ausdruck definiert sein:
[0-9]{5}
Dieser reguläre Ausdruck liefert vier Ergebnisse und damit ist die eindeutige Identifizierung der Rechnungsnummer nicht möglich:
KNR2202548710 RNR22545 DT20220815
Aus diesem Grund wird in die Definition des regulären Ausdrucks zusätzlich der ihn umgebende Datenkontext einbezogen. Das heißt, es soll nur der fünfstellig numerische Begriff gefunden werden, dem die Zeichenfolge RNR vorangestellt ist. Der reguläre Ausdruck für diese Definition kann beispielsweise folgendermaßen lauten:
RNR[0-9]{5}
Dieser reguläre Ausdruck identifiziert dann tatsächlich nur eine Zeichenfolge:
KNR2202548710 RNR22545 DT20220815
Bei dieser Definition des regulären Ausdrucks werden allerdings neben der eigentlich gesuchten Rechnungsnummer nun auch die notwendiger Weise abgefragten Kontextdaten zurückgeliefert. Somit beinhaltet das Ergebnis statt der gewünschten fünfstelligen Nummer 22545 den achtstelligen Begriff RNR22545 und die Zuordnung des offenen Postens kann nicht erfolgen.
Erweiterung für reguläre Ausdrücke
Über ihre Standardfunktionen bieten die regulären Ausdrücke für diese Problemstellung eine Lösung an. Durch Erweiterungen in den Funktionen der Finanzbuchhaltung ist es möglich reguläre Ausdrücke so zu definieren, dass deren zurückgeliefertes Ergebnis optimal ausgewertet werden kann.
Das heißt, der Ergebnisstring kann in einzelne Elemente unterteilt werden, die dann jeweils separat ausgewertet werden können. In der Schreibweise der regulären Ausdrücke werden solche Ergebniselemente in runden Klammern abgebildet. Bezogen auf das zuvor beschriebene Beispiel lautet der reguläre Ausdruck dann wie folgt:
(RNR)([0-9]{5})
Dieser liefert folgende Ergebnisse:
- Element1 – RNR und
- Element2 – 22545
Der notwendiger Weise abgefragte Datenkontext wird also in einem separaten Element zurückgegeben.
Standardmäßig werden die Ergebniselemente der regulären Ausdrücke durchnummeriert, sodass diese anhand der Elementnummer abgefragt werden können. Dies erfolgt durch die Angabe des Dollarzeichens, gefolgt von der Elementnummer, z. B.
- $1 gibt RNR zurück (das Ergebnis aus Element 1)
- $2 gibt 22545 zurück (das Ergebnis aus Element 2)
Alternativ besteht aber auch die Möglichkeit die einzelnen Elemente zu benennen. Die Syntax im regulären Ausdruck für die Datenabfrage lautet hierfür folgendermaßen:
(?<Kontext>RNR)(?<Nummer>[0-9]{5})
Die Elemente im regulären Ausdruck für die Datenaufbereitung können nun anhand ihres Namens abgefragt werden:
- ${Kontext} gibt das Ergebnis aus Element ?<Kontext> zurück, also RNR
- ${Nummer} gibt das Ergebnis aus Element ?<Nummer> zurück, also 22545
Um solche Definitionen zur Aufbereitung des Gesamtabfrageergebnisses zu nutzen, steht neben dem Feld für die eigentliche Abfragedefinition (Suchbegriff) ein zusätzliches Feld für die Aufbereitung des Abfrageergebnisses zur Verfügung.
Eine weitere wichtige Funktion in der Anwendung von regulären Ausdrücken stellen die Parametereinstellungen für die regulären Ausdrücke im Abfrageausdruck dar. Diese Parameter steuern das generelle Verhalten eines regulären Ausdrucks. So kann beispielsweise gesteuert werden, ob nur das erste gefundene Ergebnis, oder alle gefundenen Ergebnisse zurückgeliefert werden sollen. Dies kann von erheblicher Bedeutung sein.
Der zu durchsuchende Datenstring enthält mehrere Rechnungsnummern die alle für die Weiterverarbeitung aufbereitet werden sollen.
KNR2202548710 RNR22545 DT20220815 RNR22601 DT20220901 RNR22646 DT20220917
Dazu wird der folgende Abfrageausdruck definiert
(?<Kontext>RNR)(?<Nummer>[0-9]{5})
und zusätzlich der Aufbereitungsausdruck ${Nummer}
Ohne weitere Parameter wird durch den regulären Ausdruck jedoch nur das erste Ergebnis aus dem Datenstring ermittelt:
KNR2202548710 RNR22545 DT20220815 RNR22601 DT20220901 RNR22646 DT20220917
Das aufbereitete Ergebnis lautet dann 22545.
Wird jedoch der Parameter global für Mehrfachergebnisse gesetzt, dann werden alle passenden Ergebnisstrings ermittelt:
KNR2202548710 RNR22545 DT20220815 RNR22601 DT20220901 RNR22646 DT20220917
Das aufbereitete Ergebnis lautet dann 22545;22601;22646;
Einstellungen
Für die Verwendung von regulären Ausdrücken z. B. bei Such- und Zuordnungsfunktionen im ABB sind in den folgenden Anwendungen zusätzliche Angaben und Informationen verfügbar.
Schlüsselwörter
In der Anwendung Schlüsselwörter stehen für Suchbegriffe vom Typ Suchmuster zusätzliche Felder zur Steuerung der Such- und Zuordnungsfunktionen über reguläre Ausdrücke zur Verfügung.
Hierbei handelt es sich um die Felder:
- Aufbereitung
- Ausführungsoptionen
- Nur Ergebniswerte zurückgeben
Eine ausführliche Beschreibung der Anwendung und deren Felder finden Sie in der Dokumentation Schlüsselwörter.
Buchungsdefinitionen
Im Kopfbereich der Anwendung Buchungsdefinition können Sie in dem Feld Schlüsselwort für Verwendungszweckaufbereitung ein Schlüsselwort zur Aufbereitung angeben. Dieses Schlüsselwort dient dazu, die Verwendungszwecke im Buchungsdialog temporär aufzubereiten.
Im Positionseditor der Anwendung stehen unter den Karteireitern Nummern und Texte und Kontosuche zusätzliche Felder und Auswahlmöglichkeiten für die Suche und Zuordnung zur Verfügung. Hier können Sie Schlüsselwörter angeben und für diese die Daten auswählen, auf welche die Schlüsselwörter angewendet werden sollen.
Darüber hinaus ist der Karteireiter Fremdschlüssel OP-Zuordnung verfügbar. Unter diesem Karteireiter können Sie Angaben zur Ermittlung der Inhalte für Fremdschlüsselfelder im offenen Posten festlegen. Hier können Sie einem Fremdschlüssel auch ein Schlüsselwort zuordnen, um darüber den Inhalt des Fremdschlüsselfeldes aufzubereiten.
Eine ausführliche Beschreibung der Anwendung und deren Felder finden Sie in der Dokumentation Buchungsdefinitionen.
Fremdschlüssel OP-Zuordnung
In der Anwendung Fremdschlüssel OP-Zuordnung stehen Felder zur Datenanalyse über reguläre Ausdrücke zur Verfügung. Hier können Sie über ein Schlüsselwort den regulären Ausdruck festlegen, anhand dessen der Feldinhalt des Fremdschlüssels analysiert bzw. aufbereitet werden soll.
Eine ausführliche Beschreibung der Anwendung und deren Felder finden Sie in der Dokumentation Fremdschlüssel OP-Zuordnung.
Buchungsdialog
Im Buchungsdialog werden unter dem Karteireiter ABB die Verwendungszwecke dargestellt. Dabei wird geprüft, ob in der verwendeten Buchungsdefinition ein Schlüsselwort für die Aufbereitung der Verwendungszwecke angegeben ist. Sofern dies der Fall ist, erfolgt die Anzeige der Verwendungszweckdaten nachdem die regulären Ausdrücke des Schlüsselworts auf den Gesamtstring der Verwendungszweckdaten angewendet wurden. Das bedeutet, die Daten im Verwendungszweck sind für die Anzeige so aufbereitet, dass diese lesbar sind bzw. Sie die einzelnen Komponenten unterscheiden können.
Ist hingegen kein Schlüsselwort für die Aufbereitung der Verwendungszweckdaten vorhanden, erfolgt die Darstellung der Originaldaten in den Verwendungszwecken.
Cockpit: Offene Posten
Zur Anzeige der offenen Posten stehen Ihnen im Spaltenvorrat die Spalten Fremdschlüssel 1 – 10 aufbereitet zur Verfügung. Sofern Sie für einen Fremdschlüssel einen regulären Ausdruck zur Datenaufbereitung festgelegt haben, wird über diese Spalten der Feldinhalt des jeweiligen Fremdschlüssels in aufbereiteter Form dargestellt.
Die aufbereiteten Daten werden ebenfalls in der Detailanzeige der Anwendung Offene Posten unter dem Karteireiter Fremdschlüssel OP-Zuordnung dargestellt.
Anwendung regulärer Ausdrücke
Bei der Verwendung von regulären Ausdrücken, z. B. für die Suche und Zuordnung von Partnern und offenen Posten im ABB, können Sie bis zu vier fachliche Angaben machen. Hierbei handelt es sich um Angaben zu Suchbegriffen, Aufbereitungen, Ausführungsoptionen und Ergebniswerten, die Sie in der Anwendung Schlüsselwörter verwalten.
- Match-Pattern – Das Match-Pattern wird durch das Feld Suchbegriff dargestellt. Es beinhaltet das Suchmuster, also die Angabe der regulären Ausdrücke zum Finden bestimmter Textinhalte in einem Suchstring.
- Replace-Pattern – Das Replace-Pattern wird über das Feld Aufbereitung abgebildet. Das Replace-Pattern gibt an, mit welchen Werten die anhand des Match-Pattern gefundenen Werte ersetzt werden sollen. In dem Replace Pattern kann auf einzelne, im Match-Pattern definierte Datengruppen der gesuchten Begriffe zurückgegriffen und diese dann in beliebiger Reihenfolge angeordnet werden. Dies bietet den Vorteil, dass nicht alle Angaben des Suchbegriffs auch Bestandteil des zurückgelieferten Ergebnisses sein müssen. Zusätzlich können Textkonstanten mit in das Replace-Pattern aufgenommen werden. Hierdurch könnten einzelne Ergebnisgruppen, wenn gewünscht, beispielsweise mit eigener Bezeichnung oder durch Trennzeichen abgesetzt dargestellt werden.
- Ausführungsoption – Für die Anwendung von regulären Ausdrücken auf einen Datenstring können verschiedene Einstellungen angegeben werden. Die wichtigste dieser Einstellungen ist die Option Global. Ist die Einstellung Global getroffen, dann werden alle Ergebnisse (Treffer) zurückgeliefert, die durch das Match-Pattern erzielt werden. Ist die Einstellung Global nicht getroffen, dann wird nur das erste im Suchstring gefundene Ergebnis zurückgeliefert.
- Ergebnisvariante – Die Ergebnisvariante bietet Ihnen die Möglichkeit zu wählen, welches Ergebnis geliefert wird. Dazu wird zwischen folgenden Varianten unterschieden:
- Variante A (Feld Nur Ergebniswerte zurückgeben ist aktiviert) – Es werden nur die im Replace-Pattern angegebenen Daten als Ergebnis zurückgeliefert. Die übrigen Daten des ursprünglich durchsuchten Strings werden für das Ergebnis nicht weiter berücksichtigt.
- Variante B (Feld Nur Ergebniswerte zurückgeben ist deaktiviert) – Es wird der komplette ursprüngliche Suchstring als Ergebnis zurückgeliefert, wobei die durch das Match-Pattern identifizierten bzw. gefundenen Daten, durch die im Replace-Pattern angegebenen Daten ersetzt werden.
Beispiele für reguläre Ausdrücke
Anhand von verschiedenen Beispielen soll Ihnen die Verwendung von regulären Ausdrücken verdeutlicht werden.
Beispiel 1
Der folgende Datenstring soll analysiert und daraus bestimmte Nummern als OP-Nummern in den OP-Text übertragen werden:
REG-01.04.2023 FIL00033 KNR2202548710 RNR2254522 DT20220815 GNR-22601 DT20220901 RNR 22646 DT20220917 GNR/22646RNR 999988 DT20220917
Es sollen aber nur die Nummern als OP-Nummer identifiziert werden,
- A – die numerisch in der Länge 5-8 sind
und - B – denen entweder die Kennung RNR oder GNR vorangestellt ist
und - C – bei denen zwischen der Kennung und der Nummer kein bis maximal drei nichtnumerische Zeichen liegen können
und - D – wenn der Nummer mindestens ein nicht numerisches Zeichen folgt
Der reguläre Ausdruck zur Analyse des Datenstrings lautet dann wie folgt:
(?<OPKont>RNR|GNR)([\D]{0,3})(?<OPNum>[0-9]{5,8})([\D]{1,1})
Das Analyseergebnis wird im Datenstring verdeutlicht.
REG-01.04.2023 FIL00033 KNR2202548710 RNR2254522.DT20220815 GNR–22601.DT20220901 RNR.22646.DT20220917 GNR/22646RNR 999988 DT20220917
Als Ergebnis sollen alle gefundenen OP-Nummern in einer durch Semikolon getrennten Liste ausgegeben werden. Die OP-Nummern sollen dazu um alle eventuell vorkommenden Trennzeichen zwischen Kennung und Nummer bereinigt sein.
Der reguläre Ausdruck zur Aufbereitung der gefunden OP-Nummern lautet
${OPKont}${OPNum};
und liefert folgenden Ergebnisstring, sofern das Feld Nur Ergebniswerte zurückgeben aktiviert ist.
RNR2254522;GNR22601;RNR22646;GNR22646;
Ist das Feld deaktiviert, wird als Ergebnis der komplette Suchstring zurückgeliefert.
Anmerkung zum Beispiel:
- Die im Datenstring enthaltene Nummer RNR 999988 wurde nicht gefunden, da zwischen ihr und der vorangehenden OP-Nummer GNR/22646 kein nicht numerisches Zeichen besteht, wie dies in der Anforderung D formuliert ist. Wird im regulären Ausdruck die Definition für die Bedingung D entfernt, dann wird auch die OP-Nummer RNR 999988 gefunden.
- Die Analysegruppen für die Bedingungen C und D wurden nicht mit einem Namen ?<name> versehen, da diese in der Aufbereitung nicht verwendet werden. Hierdurch wird der Gesamtanalysebegriff kürzer und übersichtlicher.
Für dieses Beispiel stellt sich die Erfassung in den Feldern des Positionseditor der Anwendung Schlüsselwörter wie folgt dar
Beispiel 2
Für die Übernahme in den Fremdschlüssel sollen die Filialnummer und das Regulierungsdatum aus dem Datenstring von Beispiel 1 identifiziert werden. Dabei sollen als Filialnummer nur Begriffe identifiziert werden,
- A – die numerisch in der Länge 5 sind
und - B – denen die Kennung FIL vorangestellt ist
Als Regulierungsdatum sollen Begriffe identifiziert werden,
- C – die eine Zahlengruppe im Format 99.99.9999 darstellen
und - D – denen die Kennung REG vorangestellt ist
und - E – bei denen zwischen der Kennung und der Nummer keine bis maximal drei nicht numerische Zeichen liegen können
Zudem gilt:
- F – Die Filialnummer steht immer nach dem Regulierungsdatum. Zwischen dem Regulierungsdatum und der Filialnummer kann eine beliebige Anzahl von Zeichen stehen.
Der reguläre Ausdruck zur Analyse des Datenstrings in diesem Beispiel lautet dann wie folgt:
(?<DatKont>REG)([\D]{0,3})(?<RegDat>(?<RegTT>[0-9]{1,2})(\.)(?<RegMM>[0-9]{1,2})(\.)(?<RegJJ>[0-9]{1,4}))(.*)(?<FiKont>FIL)(?<FiNum>[0-9]{5,5})
Das Analyseergebnis wird im folgenden Datenstring verdeutlicht.
REG–01.04.2023.FIL00033 KNR2202548710 RNR2254522 DT20220815 GNR-22601 DT20220901 RNR 22646 DT20220917 GNR/22646RNR 999988 DT20220917
Als Ergebnis für die Übernahme in den Fremdschlüssel sollen die Filialnummer und das Regulierungsdatum aus dem Verwendungszweck zusammengeführt werden. Das Regulierungsdatum soll hierzu im Format JJJJMMTT an die fünfstellige Filialnummer gehängt werden.
Der reguläre Ausdruck zur Aufbereitung lautet hier
${FiNum}${RegJJ}${RegMM}${RegTT}
und liefert folgenden Ergebnisstring, sofern das Feld Nur Ergebniswerte zurückgeben aktiviert ist.
0003320230401
Ist das Feld deaktiviert, wird als Ergebnis der komplette Suchstring zurückgeliefert.
Beispiel 3
Für die Darstellung des QR-Zahlungscodes sollen aus dem folgenden Datenstring die einzelnen Komponenten gefunden und aufbereitet dargestellt werden.
000092942226862915011821290000
Gesucht wird eine Datenkombination die am Anfang des Verwendungszwecks steht und aus den folgenden Komponenten besteht:
- A – Bankkontonummer 10 Stellen alphanumerisch
- B – Partnernummer 6 Stellen numerisch
- C – Auftragsart der Rechnung 3 Stellen alphanumerisch
- D – Rechnungsnummer 7 Stellen alphanumerisch
Der reguläre Ausdruck zur Analyse des Datenstrings in diesem Beispiel lautet dann wie folgt:
(?<BkNr>[0-9a-zzA-Z]{10})(?<PtNr>[0-9]{6})(?<AuAr>[0-9a-zA-Z]{3})(?<RgNr>[0-9a-zA-Z]{7})
Der reguläre Ausdruck zur Aufbereitung lautet
Kunde: ?{PtNr} Rechnung: ?{AuAr}–?{RgNr} Bankkonto: ?{BkNr}|
Es wird folgendes Ergebnis geliefert, sofern das Feld Nur Ergebniswerte zurückgeben aktiviert ist:
Kunde: 268629 Rechnung: 150–1182129 Bank: 0000929422|
Beispiel 4
Es soll der im Feld Fremdschlüssel bereitgestellte Datenstring 000092942226862915011821290 analysiert und aufbereitet werden.
Der über den Fremdschlüssel festgelegte reguläre Ausdruck (Analyseausdruck) lautet hier wie folgt:
^(?<BkNr>[0-9a-zzA-Z]{10})(?<PtNr>[0-9]{6})(?<AuAr>[0-9a-zA-Z]{3})(?<RgNr>[0-9a-zA-Z]{7})(?<rest>.*$)
Das Analyseergebnis wird im Datenstring verdeutlicht:
000092942226862915011821290
Dabei werden die einzelnen Teile in den angegebenen Stringvariablen gespeichert / zurückgegeben
- ?<BkNr> = 0000929422
- ?<PtNr> = 268629
- ?<AuAr> = 150
- ?<RgNr> = 1182129
- ?<Rest> = 0
Zur Aufbereitung können Konstante Texte mit den Stringvariablen des angegebenen Analyse-Ausdrucks kombiniert werden. Dies stellt sich z.B. wie folgt dar:
Kunde: ${PtNr} Rechnung: ${AuAr} – ${RgNr} Bankkonto: ${BkNr}
Auf das obige Beispiel bezogen würden sich die folgenden Daten als Aufbereitungsergebnis ergeben:
Kunde: 268629 Rechnung: 150 – 1182129 Bank: 0000929422