Menü der Dokumentation

Wissenswertes über Bedingungen

Sie können an mehreren Stellen eigene Bedingungen definieren, die dynamisch auf Werte des Belegs reagieren. Beispiele hierfür sind die Bearbeiterfindung für einen Schritt oder die Entscheidung, welcher Schritt als nächstes ausgewählt wird. Diese Bedingungen werden in der Ausdruckssprache Urkel spezifiziert.

Sie können Urkel-Ausdrücke an verschiedenen Stellen verwenden. Je nach Anwendungsfall stehen Ihnen im Kontext verschiedene Objekte zur Verfügung. Dieses Kapitel erläutert die Funktionsweise der verschiedenen Einsprungpunkte sowie die jeweils verfügbaren Objekte.

Bearbeiterfinder 

Urkel-Ausdrücke in Bearbeiterfindern werden für jeden Benutzer und jede Gruppe einmal aufgerufen. Gibt ein Ausdruck für einen Benutzer oder eine Gruppe den Wert true zurück, wird der Benutzer bzw. die Gruppe in das Ergebnis aufgenommen.

In Bearbeiterfindern stellt die Software die folgenden Objekte zur Verfügung: voucher, user, group, step.

Bedingungen 

Jede Verbindung zwischen zwei Schritten hat eine als Urkel-Ausdruck angegebene Bedingung.

In der Bedingung stellt die Software die folgenden Objekte zur Verfügung: voucher, step.

Wissenswertes zu Syntax, Semantik und Datentypen

Jeder Urkel-Ausdruck hat einen Datentyp. Die verfügbaren Datentypen sind:

  • Boolean

  • String

  • Number (Dezimalzahl)

  • Liste

  • Regulärer Ausdruck

Die verwendeten Ausdrücke müssen auf oberster Ebene vom Typ Boolean sein.

Einfache Ausdrücke vom Typ Boolean 

Die einfachsten Ausdrücke vom Typ Boolean sind die Literale true und false. Ausdrücke vom Typ Boolean können wiederum durch die Operatoren AND und OR verknüpft werden. Dabei gelten folgende Regeln:

  • true AND false ergibt false

  • false OR true ergibt true

Über ein vorangestelltes NOT kann ein Ausdruck vom Typ Boolean negiert werden. NOT true ergibt false.

Vergleiche zwischen zwei Ausdrücken 

Ausdrücke anderer Typen können miteinander verglichen werden. Hierzu stehen die Operatoren =, !=, <, >, <=, >= zur Verfügung. Beide Operanden müssen den gleichen Typ haben. Das Ergebnis eines Vergleichs ist Boolean. Zum Beispiel:

  • "abc" = "def" ergibt false

  • 5 > 7 ergibt false

  • "def" != "def" ergibt false

Operationen auf Listen 

Um mehrere Werte darstellen zu können, bietet Urkel einen eingebauten Listentyp. Listen sind sortiert und können Werte beliebiger Typen aufnehmen. Einige Eigenschaften von Belegen oder Benutzern sind vom Typ Liste. In Urkel-Ausdrücken können Listen auch direkt spezifiziert werden. Der Ausdruck (true, false) ergibt eine Liste mit den Werten true und false. Der Ausdruck (true, 1 < 2, 3) ergibt eine Liste mit den Werten true, true und 3.

Hat eine Liste nur Werte vom Typ Boolean als Elemente, können Sie die Operatoren ALL und ANY anwenden. ALL l1 ergibt true, wenn die Liste l1 nur wahre Werte enthält. ANY l1 ergibt true, wenn die Liste l1 mindestens einen wahren Wert enthält.

Die Länge einer Liste l1 können Sie mit len(l1) ermitteln. Das Ergebnis ist vom Typ Number.

Mithilfe der Operatoren IN und NOT IN können Sie prüfen, ob ein Wert in einer Liste enthalten oder nicht enthalten ist. Zum Beispiel:

  • 1 IN (1, 2, 3) ergibt true

  • 1 < 2 IN (3 > 4, 5 > 6, 7 > 8) ergibt false

Strings und reguläre Ausdrücke 

Der Typ String kann Zeichenketten aufnehmen. Zeichenketten können über die üblichen Vergleichsoperatoren verglichen werden. Zusätzlich können Strings mithilfe des Operators =~ durch einen regulären Ausdruck geprüft werden. Der reguläre Ausdruck muss dabei auf der linken Seite stehen. Zum Beispiel:

  • /^(Freigabe|Buchhaltung) \d+$/ =~ "Freigabe 1" ergibt true

  • /\d{4}/ =~ "123" ergibt false

Über die Syntax #{} können Sie Ausdrücke in String-Literale und reguläre Ausdrücke einfügen. Zum Beispiel:

  • "Buchung #{voucher.posting_text}" ergibt Buchung Telekom, wenn der Buchungstext Telekom ist.

  • /^Freigeber_#{voucher.company.nr}$/ =~ "Freigeber_23" ergibt true, wenn die Mandantennummer 23 ist.

Zugreifen auf die Eigenschaften des Belegs oder Benutzers 

Alle Urkel-Ausdrücke werden in einem Kontext ausgeführt, in dem bestimmte Objekte, wie zum Beispiel der aktuelle Benutzer oder Beleg, zur Verfügung stehen. Aus Urkel-Ausdrücken heraus können Sie auf Eigenschaften dieser Objekte über die Punkt-Notation zugreifen:

  • voucher.posting_text ergibt die Eigenschaft Buchungstext des Objekts Beleg.

  • voucher.company.nr ergibt die Eigenschaft Nr der Eigenschaft Mandant des Objekts Beleg.

Welche Objekte im Kontext zur Verfügung stehen, variiert je nach Anwendungsfall.

Wissenswertes zu Objekten und Feldern

In diesem Kapitel finden Sie eine Erläuterung aller in Urkel-Ausdrücken zur Verfügung stehenden Objekte und der dazugehörigen Eigenschaften. Welche Objekte tatsächlich zur Verfügung stehen, variiert je nach Anwendungsfall.

Beleg (voucher) 

Eigenschaft

Typ

Beschreibung

doc_id

String

Die ID des Dokuments im Repository

company.nr

String

Nummer des Mandanten

company.name

String

Name des Mandanten

vendor.nr

String

Nummer des Kreditors

vendor.name

String

Name des Kreditors

vendor.email

String

E-Mail-Adresse des Kreditors

net_amount

Number

Nettobetrag der Rechnung in Cent

net_amount_lcy

Number

Nettobetrag der Rechnung in Cent in Hauswährung

gross_amount

Number

Bruttobetrag der Rechnung in Cent

gross_amount_lcy

Number

Bruttobetrag der Rechnung in Cent in Hauswährung

pay_amount

Number

Zahlbetrag der Rechnung in Cent

pay_amount_lcy

Number

Zahlbetrag der Rechnung in Cent in Hauswährung

vat_amount

Number

Mehrwertsteuer der Rechnung in Cent

vat_amount_lcy

Number

Mehrwertsteuer der Rechnung in Cent in Hauswährung

currency.id

String

ID der Währung

currency.code

String

Code der Währung (zum Beispiel EUR)

currency.name

String

Name der Währung

barcode

String

Barcode

internal_number

String

Interne Belegnummer

external_number

String

Externe Belegnummer

document_date

String

Belegdatum

payment_date

String

Zahlungsdatum

posting_period

String

Buchungsperiode

document_type.id

String

ID der Belegart

document_type.name

String

Name der Belegart

posting_text

String

Buchungstext

customN mit N zwischen 1 und 20

String

Die kundenspezifischen Felder

amount_allocated? (mode)

Boolean

Ist der Kopfbetrag vollständig auf die Positionen aufgeteilt?

mode gibt an, welche Konstellation überprüft wird:

  • 0: Bruttobetrag muss stimmen

  • 1: Nettobetrag muss stimmen

  • 2: Zahlbetrag muss stimmen

  • 3: Brutto- und Nettobetrag müssen stimmen

  • 4: Brutto- und Zahlbetrag müssen stimmen

  • 5: Netto- und Zahlbetrag müssen stimmen

  • 6: Brutto-, Netto- und Zahlbetrag müssen stimmen

amount_allocated_tolerance?

(mode, tolerance)

Boolean

Ist der Kopfbetrag auf die Positionen aufgeteilt mit Abweichungstoleranz?

Diese Funktion ist hilfreich, wenn Netto- oder Bruttobetrag exakt aufgeteilt werden sollen, der jeweils andere Betrag aber aufgrund von Rundungsdifferenzen minimal abweichen darf.

mode gibt an, welche Konstellation überprüft wird. tolerance gibt die Toleranz in Cent an.

  • 0: Bruttobetrag muss exakt stimmen, Nettobetrag darf abweichen.

  • 1: Nettobetrag muss exakt stimmen, Bruttobetrag darf abweichen.

verified?

Boolean

Sind alle Belegzeilen sachlich richtig gezeichnet?

Anmerkung

Eine Belegzeile, die bestellbezogen richtig ist und damit als sachlich richtig gilt, wird von dieser Bedingung nicht akzeptiert. Belegzeilen müssen von einem Benutzer als sachlich richtig markiert worden sein.

matches_po?

Boolean

Passen alle Belegzeilen zu den jeweiligen Bestellzeilen?

Anmerkung

Eine Belegzeile, die von einem Benutzer als sachlich richtig markiert wurde, wird von dieser Bedingung nicht akzeptiert. Die Belegzeile muss über den Bestelldatenabgleich als bestellbezogen richtig gewertet worden sein.

matches_po_or_verified?

Boolean

Passen alle Belegzeilen entweder zur jeweiligen Bestellzeile oder sind sachlich richtig gezeichnet?

verifiers

Liste von Strings

Die Liste der Namen aller Benutzer und Gruppen, die als sachliche Prüfer eingetragen sind.

outstanding_verifiers

Liste von Strings

Die Liste der Namen aller Benutzer und Gruppen, die als sachliche Prüfer für Positionen eingetragen sind, die noch nicht sachlich richtig gezeichnet wurden.

has_purchase_orders?

Boolean

Hat der Beleg einen Bestellbezug?

has_goods_receipts?

Boolean

Befinden sich Wareneingänge auf dem Beleg?

has_surcharges?

Boolean

Befinden sich Zuschläge auf dem Beleg?

<eigenschaft>.present? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Belegobjekts

Boolean

Ist die Eigenschaft gefüllt?

<eigenschaft>.blank? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Belegobjekts

Boolean

Ist die Eigenschaft leer?

Benutzer (user) 

Eigenschaft

Typ

Beschreibung

name

String

Der Name des Benutzers oder der Gruppe.

email

String

Die E-Mail-Adresse des Benutzers. Ist für Gruppen nicht definiert.

group_ids

Liste von Strings

Liste der IDs aller Gruppen, in denen der Benutzer Mitglied ist. Ist für Gruppen leer.

group_names

Liste von Strings

Liste der Namen aller Gruppen, in denen der Benutzer Mitglied ist. Ist für Gruppen leer.

id

String

Die ID des Benutzers oder der Gruppe aus dem Quellsystem (zum Beispiel d.ecs identity provider).

type

String

Entweder user oder group.

Schritt (step) 

Eigenschaft

Typ

Beschreibung

uid

String

Die interne ID des Schritts.

title

String

Der übersetzte Titel des Schritts.

original_title

String

Der Titel des Schritts, wenn keine Übersetzung vorhanden ist.