Menü der Dokumentation

Wissenswertes über Bedingungen

Sie haben an mehreren Stellen die Möglichkeit, eigene Bedingungen zu 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 gewä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. Dieser Abschnitt 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 true zurück, so 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 Listentypen. 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, so können die Operatoren ALL und ANY angewandt werden. 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 kann über len(l1) ermittelt werden. Das Ergebnis ist vom Typ Number.

Mithilfe der Operatoren IN und NOT IN kann geprüft werden, 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.

Zugriff 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 Objektes Beleg.

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

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

Wissenswertes zu Objekten und Feldern

In diesem Abschnitt 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

MwSt der Rechnung in Cent.

vat_amount_lcy

Number

MwSt der Rechnung in Cent in Hauswährung.

currency.id

String

ID der Währung.

currency.code

String

Code der Währung (z.B. 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?

Hinweis: 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 ihren jeweiligen Bestellzeilen?

Hinweis: 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 Bestellbezug?

has_goods_receipts?

Boolean

Befinden sich Wareneingänge auf dem Beleg?

<eigenschaft>.present? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Beleg-Objects

Boolean

Ist die Eigenschaft gefüllt?

<eigenschaft>.blank? mit <eigenschaft> als Platzhalter für eine Eigenschaft des Beleg-Objekts

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 Schrittes.

title

String

Der übersetzte Titel des Schrittes.

original_title

String

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