Skip to main content

Tabelle "Invoice_Posting_Head" für Kopfdaten

Direkt zu Beginn des Workflows wird für jede Rechnung ein Eintrag in der Tabelle "Invoice_Posting_Head" erzeugt. Die Tabelle enthält eine Auto-Inkrement-Spalte "ID". Die Daten werden über die eindeutige Mappen-ID (Spalte "FileID") aktualisiert. Diese ID wird in dem gleichnamigen Mappen-Feld "FileID" gespeichert. Die Zeitstempel-Spalte "InsertTS" wird beim initialen "INSERT" mit dem aktuellen Zeitstempel vorbelegt und wird im Anschluss nicht verändert. Die Zeitstempel-Spalte "UpdateTS" wird bei jedem "UPDATE"-Befehl mit dem aktuellen Zeitstempel überschrieben. Die übrigen Spalten-Namen entsprechen den technischen Feldbezeichnungen der Rechnungs-Mappen.

In der Feldkonfiguration "Kopf-Felder" kann pro Feld separat konfiguriert werden, ob der Feldwert in die SQL-Tabelle geschrieben werden soll oder nicht. Sollte zu einem Feld noch keine passende Spalte in der Tabelle existieren, so kann die Spalte direkt über die Feldkonfiguration hinzugefügt werden.

image-1601901896286.png

Die Daten werden bei jedem Speichern und nach jeder Weiterleitung aktualisiert. Hierdurch sollten die Daten in der Rechnungs-Mappe fast immer identisch mit den Daten in den Rechnungs-Mappen sein. Einzig Änderungen durch Job-Skripte oder durch projektspezifische benutzerdefinierte Aktion werden nur dann direkt in die Tabelle geschrieben, wenn der Schreib-Befehl in den Skripten explizit ausgeführt wird.

Für die Übergabe an das Buchungssystem wird in der Regel nur ein Bruchteil der Informationen benötigt. Die Tabelle kann in den Projekten beliebig angepasst und erweitert werden. Der folgende Aufbau und die folgenden Datentypen entsprechen der MS SQL Variante.

Spaltenname Datentyp

Beschreibung

ID (Key) bigint Auto-Inkrement-Spalte
FileID nvarchar(50) Eindeutige Mappen-ID für UPDATE-Befehle
Barcode nvarchar(50) Optional: Barcode-Nummer zur Rechnung
DateOfReceipt date Wird am Mappentypen mit dem aktuellen Tagesdatum vorbelegt
InvoiceNumber nvarchar(50) Externe Rechnungsnummer
InvoiceCreditVoucher nvarchar(15) "invoice" für Rechnung bzw. "creditvoucher" für Gutschriften
InvoiceDate date Rechnungsdatum
DueDate date Fälligkeitsdatum
ServiceDate date Leistungsdatum
Principal nvarchar(50) Mandanten-Nummer
CompanyCode nvarchar(50) Buchungskreis-Nummer
CreditorID nvarchar(50)

Kreditor ID

CreditorName nvarchar(100) Kreditor Bezeichnung
Creditor_Street nvarchar(200) Kreditor-Anschrift: Straßenname
Creditor_City nvarchar(100) Kreditor-Anschrift: Stadt
Creditor_PostCode nvarchar(50) Kreditor-Anschrift: Postleitzahl
Creditor_Country nvarchar(50) Kreditor-Anschrift: Land
Creditor_Mail nvarchar(50) Kreditor Mail-Adresse
Creditor_Phone nvarchar(50) Kreditor Telefonnummer
SenderMail nvarchar(50) Absender-Adresse bei Mail-Rechnungen
BankName nvarchar(150) Kontoverbindung: Bank-Name
BankAccountHolder nvarchar(150) Kontoverbindung: Konto-Inhaber
IBAN nvarchar(50) Kontoverbindung: IBAN
BIC nvarchar(50) Kontoverbindung: BIC
BankID nvarchar(50) Kontoverbindung: Bankleitzahl
BankAccountID nvarchar(50) Kontoverbindung: Kontonummer
Net decimal(18,2) Netto-Betrag
Gross decimal(18,2) Brutto-Betrag
Tax decimal(18,2) Steuer-Betrag
Net1 decimal(18,2) Netto zum MwSt-Satz 1
VatCode1 nvarchar(100) MwSt-Code 1
VatRate1 decimal(18,2) MwSt-Satz 1
Tax1 decimal(18,2) Steuer zum MwSt-Satz 1
Net2 decimal(18,2) Netto zum MwSt-Satz 2
VatCode2 nvarchar(100) MwSt-Code 2
VatRate2 decimal(18,2) MwSt-Satz 2
Tax2 decimal(18,2) Steuer zum MwSt-Satz 2
Net3 decimal(18,2) Netto zum MwSt-Satz 3
VatCode3 nvarchar(100) MwSt-Code 3
VatRate3 decimal(18,2) MwSt-Satz 3
Tax3 decimal(18,2) Steuer zum MwSt-Satz 3
ReducedNet decimal(18,2) Netto gekürzt
ReducedGross decimal(18,2) Brutto gekürzt
ReducedTax decimal(18,2) Steuer gekürzt
DiscountNet decimal(18,2) Rabatt Netto
DiscountGross decimal(18,2) Rabatt Brutto
DiscountTax decimal(18,2) Rabatt Steuer
DiscountRate decimal(18,2) Rabatt-Rate
AmountEligibleForCashDiscountNet decimal(18,2) Skontofähiger Betrag Netto
AmountEligibleForCashDiscountGross decimal(18,2) Skontofähiger Betrag Brutto
Currency nvarchar(5) Währung (ISO-Code 4217)
HasOrder bit Angabe ob die Rechnung einen Bestellbezug hat
DivergentOrderCreditor bit Angabe ob die Bestellung bei einem abweichenden Lieferanten erfolgt ist
OrderNumber nvarchar(250) Bestellnummer(n)
OrderCheck bit Ergebnis der Prüfung gegen die Bestellung
GoodsReceiptCheck bit Ergebnis der Prüfung gegen den Wareneingang
ThreeWayMatchCheck bit Ergebnis 3-Way-Match
IgnoreOrderLimitErrors bit Angabe ob Fehler bei Limit Bestellungen ignoriert werden sollen
DeliveryNoteID nvarchar(250) Lieferschein-Nummern
Subject nvarchar(250) Betreff bei Mail-Eingang
OwnCustomerID nvarchar(50) Eigene Kundennummer beim Lieferanten
Department nvarchar(50) Interne Abteilung
Comment nvarchar(MAX) Angaben aus dem Kommentar-Historien-Feld
AssignedUsers nvarchar(1500) Liste aus Benutzern bei manueller Zuordnung
AssignedUser nvarchar(50) Manuell zugeordneter Benutzer
SqueezeID nvarchar(50) Eindeutige ID aus Squeeze
SqueezeStatus nvarchar(20) Squeeze Status
WorkflowID nvarchar(50) Technischer Workflow-Name
WorkflowStart datetime Workflow-Start
WorkflowEnd datetime Workflow-Ende
ActionID nvarchar(50) Technischer Workflow-Aktions-Name
ActionStatus nvarchar(50) Status zur Workflow-Aktion
ActionStatus2 nvarchar(50) Status2 zur Workflow-Aktion
ActionStart datetime Zeitstempel für den Beginn der Aktion
ActionTask nvarchar(150) Aufgabenbeschreibung für die aktuelle Aktion

ActionUser

nvarchar(75) Login zum aktuell sperrenden Benutzer
ActionAccessProfile nvarchar(75) Technischer Zugriffsprofil-Name der aktuell sperrenden Gruppe
ActionHeadRule nvarchar(50) Workflow-Regel ID
ActionRulesHelper nvarchar(50) Technische Informationen
ActionInfoJSON nvarchar(MAX) JSON-String mit Informationen zur aktuellen Workflow-Aktion
AskQuestionUser nvarchar(75) Benutzer-Login bei einer Rückfrage
TechAccessProfile nvarchar(75) Name technisches Zugriffsprofil für technische Workflow-Aktionen
Rights nvarchar(MAX) GACL-Zurgiffsberechtigungen
RightsInitial nvarchar(MAX) Initiale Zugriffsberechtigungen
PrePostingStatus nvarchar(20) Status für Vorerfassung ("workflow", "ready", "transfer", "transferred", "preposted", "error")
PrePostingNumber nvarchar(50) ID Vorerfassung
PrePostingUser   Benutzer für die Vorerfassung
PostingStatus nvarchar(20) Buchungs-Status ("workflow", "ready", "transfer", "transferred", "posted", "error", "disqualified")
PostingNumber nvarchar(50) Buchungsnummer

PostingKey

nvarchar(500) Technischer Schlüssel bei Übertragung via SOAP
PostingText1 nvarchar(250) Buchungstext 1
PostingText2 nvarchar(250) Buchungstext 2
PostingError nvarchar(250) Fehlermeldung bei der Buchung
PostingPeriod nvarchar(50) Buchungsperiode
PostingDate date Buchungsdatum
PostingUser nvarchar(75) Benutzer für Buchung 
ConditionsOfPayment_ID nvarchar(50) Zahlungsbedingung ID
ConditionsOfPayment_NetDays int Zahlungsbedingung Netto: Anzahl an Tagen
ConditionsOfPayment_NetDate date Zahlungsbedingung Netto: Berechnetes Datum
ConditionsOfPayment_NetSign nvarchar(50) Zahlungsbedingung Netto: Symbol für Eskalation
ConditionsOfPayment_Percent1 decimal(18,2) Zahlungsbedingung Stufe 1: Prozentangabe
ConditionsOfPayment_Days1 int Zahlungsbedingung Stufe 1: Anzahl an Tagen
ConditionsOfPayment_Date1 date Zahlungsbedingung Stufe 1: Berechnetes Datum
ConditionsOfPayment_1Sign nvarchar(50) Zahlungsbedingung Stufe 1: Symbol für Eskalation
PaymentStatus nvarchar(50) Status der Zahlung ("unpaid", "payblock", "releasepayblock", "paid", "cash")
PaymentBlockReason nvarchar(250) Grund für die Zahlsperre
PaymentID nvarchar(50) ID für den Zahlungsvorgang
PaymentList nvarchar(50) ID für die Zahlungsvorschlagsliste
PaymentDate date Zahldatum
DuplicateState nvarchar(50) Dublette Status ("unique", "duplicate", "allowed")
DuplicateInfo nvarchar(250) Info zur Zulassung der Rechnungs-Dublette
InvoiceID nvarchar(50) Interne ID
ArchiveKey nvarchar(250) Archiv-Schlüssel
InsertTS datetime Zeitstempel initialer INSERT
UpdateTS datetime Zeitstempel letztes UPDATE

 

Es werden immer alle Feldwerte zu den Feldern aus der Feldkonfiguration in die Tabelle geschrieben, bei denen die Checkbox "SQL Insert?" aktiviert wurde. Ausgenommen sind die Felder "FileID", "PrePostingStatus", "PostingStatus" und "PaymentStatus". Über die "FileID" wird das Update ausgeführt und über die Status-Felder werden die entsprechenden technischen Workflow-Aktionen gesteuert.
Bei der technischen Aktion "Posting" für die Buchungsschnittstelle wird im ersten Schritt die UserExit-Funktion "ue_Post()" aufgerufen (Skript "DEXPRO__UserExit_TechActionLib"). In der Funktion wird zunächst der aktuelle Buchungsstatus überprüft. Es gibt folgende Status:
Status Beschreibung
workflow Initialer Status. Der Beleg befindet sich im Workflow und wurde noch nicht gebucht.
ready Der Status signalisiert, dass der Datensatz bereit zur Abholung ist.
transfer Optionaler Zwischen-Status, der beim Transfer-Start gesetzt werden kann.
transferred Optionaler Zwischen-Status, der nach dem Transfer gesetzt werden kann.
posted Status für gebuchte Rechnungen.
error Status für Fehler beim buchungsvorgang.
disqualified Status für ausgesteuerte Rechnungen.
Eine bereits gebuchte Rechnung solle nicht nochmals gebucht werden können. Sobald der Status auf "ready" gestellt wird hat das Workflow-System in der Regel keinen Einfluss mehr auf die weitere Verarbeitung. Die Status "transfer" und "transferred" sind optional und werden selten verwendet. Daher kann es selbst beim Status "ready" sein, dass die Daten bereits übertragen werden. Daher werden auch diese Status in der Standardauslieferung nicht überschrieben. Das Verhalten kann in dem UserExit angepasst werden.
Im Normalfall werden die Rechnungen nur einmal den Workflow-Schritt "Posting" durchlaufen. Im User-Exit werden nochmals die Positions-Daten und die Kopf-Daten geschrieben. Am Ende wird der Buchungs-Status auf "ready" gesetzt.

image-1602158901952.png

Der Rechnungsbeleg wird im Anschluss an die technisch Gruppe "TechAccessProfile" gesendet. Das Job-Skript "Invoice_JOB_CheckPostingStatus" prüft in den konfigurierten Abständen den Buchungsstatus der wartenden Rechnungen. Beim Buchungsstatus "posted" werden die Felder "PostingStatus", "PostingNumber", "PostingPeriod", "PostingDate", "PostingUser" und "PostingError" mit den Werten aus der Datenbank gesetzt und die Rechnung-Mappe wird im Workflow weiter geleitet. Das Skript schreibt ein separates Log (...\DEXPRO\Logs\), sobald mindestens ein Beleg untersucht wird.
Bei Fehlern in der Buchungs-Schnittstelle kann der Status "error" zurückgemeldet werden. Die Fehler-Beschreibung kann in das Feld "Posting Error" geschrieben werden. Die Rechnungs-Mappe wird in dem Fall an die im Feld "ActionAccessProfile" hinterlegte Gruppe mit der im Feld "TechActionErrorTask" hinterlegten Aufgaben-Beschreibung gesendet.

Am Workflow-Ende wird der Buchungs-Status im UserExit "ue_CheckFileDataAtTheEndOfTheWorkflow()" nochmals überprüft. hierdurch soll verhindert werden, dass Rechnungen ohne Übergabe an das Buchungssystem durch den Workflow laufen. Aus diesem Grund sollte der Buchungs-Status in der Tabelle auch dann auf "posted" gesetzt werden, wenn die Buchungs-Daten über andere Wege übertragen werden!

 

Auch die Vorerfassung und der Bezahlvorgang können über diese Schnittstellen-Tabelle und entsprechende technischen Aktionen "PrePosting" und "Payment" abgebildet werden. Der Ablauf ist ähnlich. In beiden Fällen werden zunächst die Rechnungs-Daten in die Tabellen geschrieben. Im Anschluss läuft die Mappe weiter zur technischen Gruppe.
Bei der Vorerfassung ("PrePosting") prüft das Job-Skript "Invoice_JOB_CheckPrePostingStatus" das Status-Feld "PrePostingStatus". Es gibt die folgenden Status:
Status Beschreibung
workflow Initialer Status. Der Beleg befindet sich im Workflow und wurde noch nicht vorerfasst.
ready Der Status signalisiert, dass der Datensatz bereit zur Abholung ist.
transfer Optionaler Zwischen-Status, der beim Transfer-Start gesetzt werden kann.
transferred Optionaler Zwischen-Status, der nach dem Transfer gesetzt werden kann.
preposted Status für vor-erfasste Rechnungen.
error Status für Fehler bei der Vor-Erfassung.

Die Felder "PrePostingStatus", "PrePostingNumber", "PrePostingUser" und "PostingError" werden mit den Werten aus der Datenbank gesetzt.

Bei der Bezahlung ("Payment") erfolgt der Abgleich hingegen über das Status-Feld "PaymentStatus". Das Job-Skript "Invoice_JOB_CheckPrePostingStatus" prüft in den konfigurierten Abständen den Buchungsstatus der wartenden Rechnungen und erwartet den Status "paid" oder "cash".
Status Beschreibung
unpaid Initialer Bezahl-Status.
payblock Status für eine Zahlsperre.
releasepayblock Rückmeldung, dass eine Zahlsperre entfernt werden kann (für projektspezifische Umsetzungen).
paid Status für eine bezahlte Rechnung.
cash Status für eine bar bezahlte Rechnung.
Die Felder "PaymentStatus", "PaymentID", "PaymentList", "PaymentDate" und "PostingError" werden mit den Werten aus der Datenbank gesetzt.