Postman-Collection
Payments Schreiben

pixiAutoMatchPayments

Ordnet die Bankzeilen eines Bank-Headers automatisch offenen Aufträgen oder Rechnungen zu, bestätigt die Zuordnung und gibt den Auftrag bei vollständiger Zahlung frei.

Führt den automatischen Zahlungsabgleich für einen Bank-Header (BankHeaderKey) aus und bestätigt bei einem Treffer die Zuordnung; anschließend wird versucht, den zugeordneten Auftrag freizugeben.

  1. Ist BankHeaderKey NULL, wird eine Zeile mit NULL-Werten und der Meldung Parameter BankHeaderKey is mandatory! geliefert; sonst passiert nichts.
  2. Der interne automatische Abgleich (Pixi_BankAutomaticMatching) läuft für alle Bankzeilen dieses Headers, die noch keinen Eintrag in BankMatch haben. Gesucht werden 100%-Treffer:
    • Aufträge, deren Zahlungsart einen Abgleich erlaubt (Payments.MatchToOrders = 1) und die mindestens eine Auftragsposition im Status HAL haben. Der Bankbetrag muss dem offenen Betrag (OrderTotal - PaidByCustomer, auf 2 Stellen gerundet) in derselben Währung entsprechen, und der Buchungstext (BankText01–BankText03) muss die externe Auftragsnummer (optional ohne Präfix), die ccpPayID, eine eindeutige externe Kundennummer oder eine eindeutige E-Mail-Adresse enthalten.
    • Rechnungen, die vollständig unbezahlt sind und deren Zahlungsart MatchToInvoices = 1 hat. Der Bankbetrag muss der Rechnungssumme entsprechen; der Buchungstext muss Rechnungsnummer, externe Auftragsnummer, Kundennummer oder E-Mail enthalten.
    • Mehrdeutige Kandidaten werden verworfen. Gefundene Treffer werden als Vorabzuordnung (IsPrematch = 1) in BankMatch geschrieben.
  3. Wurde kein Treffer gefunden, lautet message 0 matched orders/invoices found. gefolgt von einem Zeilenumbruch und dem Statistiktext des Abgleichs (Anzahl Bankzeilen, offene und zugeordnete Aufträge/Rechnungen).
  4. Andernfalls wird der BankMatch-Eintrag der Bankzeile dieses Headers gelesen, und alle Vorabzuordnungen dieser Bankzeile werden bestätigt (IsPrematch auf 0).
  5. Für den zugeordneten Auftrag werden OrderNr und die Differenz ABS(OrderTotal - PaidByCustomer) aus OrderHeader gelesen:
    • Differenz 0: Alle Auftragspositionen des Auftrags im Status HAL werden auf ANG gesetzt (Bearbeiter IPN_API (payments)); Meldung Delta: 0; releasing order: {OrderNr}.
    • Sonst: Meldung Delta: {Delta}; cannot release order:{OrderNr}; der Auftrag bleibt angehalten.
  6. Sofern nicht SuppressOutput = 1, wird eine Zeile mit OrderHeaderKey, OrderNr, AmountMatched, BankLineKey und message geliefert.

Hinweise

  • Eine Bankzeile pro Header erwartet: Die Bankzeile wird über eine Unterabfrage auf BankLines mit Filter BankHeaderRef ermittelt. Hat der Bank-Header mehrere Bankzeilen und wurde ein Treffer gefunden, löst SQL Server Fehler 512 aus (Unterabfrage liefert mehr als einen Wert), zurückgegeben als SqlMessage. Zu diesem Zeitpunkt sind die Vorabzuordnungen bereits in BankMatch geschrieben. Der Aufruf ist für Header mit genau einer Zeile gedacht (z. B. eine Zahlungsbenachrichtigung pro Header, Bearbeiter IPN_API).
  • Keine Transaktion: Abgleich, Bestätigung und Auftragsfreigabe laufen als getrennte Schritte. Ein Fehler in einem späteren Schritt macht frühere Schritte nicht rückgängig.
  • Der BankMatch-Eintrag wird ohne Filter auf IsPrematch gelesen; existieren mehrere Einträge für die Bankzeile, wird ein beliebiger geliefert.
  • Betrifft der Treffer eine Rechnung statt eines Auftrags, sind OrderHeaderKey und OrderNr NULL, es wird kein Auftrag freigegeben und message ist NULL (Verkettung mit NULL).
  • Wird trotz Treffer keine BankMatch-Zeile gefunden (BankLineKey NULL), läuft die Bestätigung in ihren Massenzweig und bestätigt bis zu 100 beliebige Vorabzuordnungen aller Bankzeilen.
  • Ob PaidByCustomer bei der Differenzberechnung bereits aktualisiert ist, hängt von Logik ab, die im Code nicht sichtbar ist (z. B. Trigger auf BankMatch).
  • Das Abgleichsverhalten wird durch die Einstellungen AutomatchBanklines_Enforce_CustomerNrExternal (Auftrags-/Rechnungsnummer muss zusätzlich mit Kundennummer vorkommen, außer bei 0) und AutomatchBanklinesStrictOrderNrExternalMatchOnly (1 deaktiviert den Abgleich über die externe Auftragsnummer ohne Präfix) beeinflusst. Auftragsnummern ohne Präfix werden erst ab 5 Zeichen verwendet.
  • Lesezugriffe erfolgen mit NOLOCK; nicht festgeschriebene Daten können berücksichtigt werden.
  • Schlägt die Auftragsfreigabe fehl, wird der Fehler in LogTable protokolliert und erneut ausgelöst.

Parameter

Parameter Typ Standardwert Beschreibung
BankHeaderKey
int NULL

Schlüssel des Bank-Headers, dessen Bankzeilen abgeglichen werden. Faktisch Pflicht; fehlt er, wird eine Fehlerzeile geliefert.

Beispiel: 40098

SuppressOutput
bit
boolean
0

Unterdrückt die Ergebniszeile nach der Verarbeitung. NULL wird als 0 behandelt. Die Fehlerzeile bei fehlendem BankHeaderKey wird immer geliefert.

Erlaubte Werte

  • 0 – Ergebniszeile liefern.
  • 1 – Keine Ergebniszeile liefern.

Beispiel: 0

Antwort

Result-Set 1 · Immer, wenn BankHeaderKey NULL ist (Fehlerzeile); sonst nur bei SuppressOutput = 0.

Eine Zeile mit dem zugeordneten Auftrag, dem zugeordneten Betrag, der Bankzeile und einer Statusmeldung.

Spalte Typ Beschreibung
OrderHeaderKey
Kann leer sein
int

Schlüssel des zugeordneten Auftrags; NULL, wenn nichts zugeordnet wurde oder der Treffer eine Rechnung betrifft.

OrderNr
Kann leer sein
int

Auftragsnummer des zugeordneten Auftrags.

AmountMatched
Kann leer sein
money
decimal

Im BankMatch-Eintrag gespeicherter Betrag.

BankLineKey
Kann leer sein
int

Schlüssel der zugeordneten Bankzeile.

message
Kann leer sein
varchar(1000)
string

Statustext: fehlender Parameter, kein Treffer (mit Abgleichsstatistik), Auftrag freigegeben oder Auftrag nicht freigegeben mit verbleibender Differenz.

Fehlermeldungen

Status Meldung Ursache
message Parameter BankHeaderKey is mandatory! `BankHeaderKey` wurde nicht übergeben oder ist NULL. Den Schlüssel des Bank-Headers übergeben.
message 0 matched orders/invoices found. Message: {MatchInfo} Der automatische Abgleich hat für die nicht zugeordneten Bankzeilen des Headers keinen eindeutigen Auftrag und keine eindeutige Rechnung gefunden (oder alle Zeilen sind bereits zugeordnet). `{MatchInfo}` enthält die Abgleichsstatistik.
message Delta: {Delta}; cannot release order:{OrderNr} Die Zuordnung wurde bestätigt, aber Auftragssumme und vom Kunden bezahlter Betrag weichen ab; der Auftrag bleibt angehalten.
RAISERROR {ERROR_MESSAGE} Die Freigabe der Auftragspositionen aus dem Status `HAL` ist fehlgeschlagen (z. B. Sperr- oder Constraint-Fehler). Der ursprüngliche Fehler wird in `LogTable` protokolliert und erneut ausgelöst.

Beispiele

POST https://apigateway.descartes.com/tms/pixi/
Content-Type: text/xml; charset=utf-8
Authorization: Basic BASE64(USERNAME:PASSWORD)

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://apigateway.descartes.com/tms/pixi/">
  <SOAP-ENV:Body>
    <ns1:pixiAutoMatchPayments>
      <!-- <BankHeaderKey>40098</BankHeaderKey> -->
      <!-- <SuppressOutput>0</SuppressOutput> -->
    </ns1:pixiAutoMatchPayments>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

BankMatch · Schreiben BankLines · Lesen OrderHeader · Lesen Orderlines · Schreiben Addresses · Lesen Payments · Lesen Customers · Lesen Invoices · Lesen Invlines · Lesen LogTable · Schreiben
SQL-Objekt:
dbo.pipiAutoMatchPayments
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben