Postman-Collection
Invoices Schreiben

pixiCreateInvoice

Legt eine Rechnung für eine gepackte Kiste (BoxNr an einem Lager) an und liefert die neue Rechnungs-ID und Rechnungsnummer mit einer Statuszeile.

Legt die Rechnung für den Inhalt einer Kiste an und liefert immer genau eine Statuszeile.

  1. Ist BoxNr oder LocId NULL, wird eine Fehlerzeile geliefert. Ein leerer UserName wird durch API ersetzt.
  2. Die Kiste wird mit der internen Prozedur GOS_BoxesRange (Bereich BoxNr..BoxNr am Lager LocId) auf Fakturierbarkeit geprüft. Die Kiste ist fakturierbar, wenn alle folgenden Bedingungen gelten:
    • sie ist noch nicht als versendet markiert (WaitForSend <> Y) oder sie ist physisch voll und enthält Positionen ohne Rechnungspositionen;
    • der Kunde hat keine Versandsperre (SLocked nicht Y/1);
    • keine Lieferadresse der Auftragspositionen in der Kiste hat eine Versandsperre (ASlocked);
    • die Kistennummer ist nicht die eigene Kistennummer des Lagers (LocBoxNumber);
    • haben Auftragspositionen der Kiste ein Bestätigungsdatum (ConfDate), liegt mindestens eines davon auf dem heutigen Tag.
  3. Ist die Kiste nicht fakturierbar, wird der Grund ermittelt und als Fehlerzeile geliefert: Kiste an diesem Lager nicht gefunden, Kiste leer, Rechnung existiert bereits, Versandsperre auf einer Auftragsadresse, Versandsperre beim Kunden; sonst ein allgemeines "Invoice creation failed." (deckt auch die Regeln zu ConfDate und Lager-Kistennummer ab).
  4. Ist die Kiste fakturierbar, legt die interne Prozedur Pixi_CreateInv die Rechnung mit Erstellungsmodus API und Sprach-ID 1 an. Dabei wird:
    • die Kiste als versendet markiert (WaitForSend = 'Y') und gegen Doppelfakturierung gesperrt;
    • der Rechnungskopf (Invoices) und je Kistenposition eine Rechnungsposition (Invlines) angelegt; zusätzlich noch nicht fakturierte Auftragspositionen desselben Auftrags mit Status MIN oder einem Status aus der Einstellung PutThisStatusesOnInvoice;
    • Orderlines.InvRef gesetzt, die endgültige Rechnungsnummer je Shop vergeben, Bruttogewicht, Retouren-Tracking-ID und ein InvoicePackage-Datensatz gespeichert;
    • optional die Kiste ausgescannt, offene Teillieferungen storniert, die Rechnung auf das Kundenkonto gebucht und das Ereignis InvoiceCreated veröffentlicht. Existiert für die Kiste bereits eine Entwurfsrechnung (InvoiceStatusId = 0), wird stattdessen dieser Entwurf finalisiert (Erstellungsmodus MobileShipOut).
  5. Ergebnis: bei Erfolg eine Zeile mit InvoiceId, InvoiceNr und Status = 'SUCCESS'; bei Fehler sind InvoiceId/InvoiceNr NULL und Status/Message enthalten den Fehler.

Hinweise

  • Die Rechnungserstellung läuft in einer eigenen Transaktion (bzw. einem Savepoint, falls der Aufrufer bereits eine Transaktion hat). Bei Deadlock (1205) oder doppeltem Schlüssel (2601) wird bis zu 5-mal wiederholt; Wiederholungen und Fehler werden in LogTable und im Fehlerprotokoll erfasst.
  • Die Vorprüfungen verwenden NOLOCK; der eigentliche Schutz vor Doppelrechnungen ist das UPDLOCK auf die Kiste in Pixi_CreateInv.
  • Der Statuswert unterscheidet sich in der Schreibweise: Fehler der Vorprüfung liefern Error, Fehler aus der Rechnungserstellung ERROR (aus dem internen Ergebnis übernommen).
  • Fallstrick: Einige interne Fehler (z. B. "ERROR CREATING INVOICE Invoice Total empty", Fremdschlüsselfehler wie Aufträge verschiedener Kunden in einer Kiste) werden in Pixi_CreateInv abgefangen, ohne dessen Fehlermeldung zu setzen. Dann liefert dieser Aufruf Status = 'SUCCESS' mit InvoiceId/InvoiceNr = NULL. Daher immer prüfen, dass InvoiceId nicht NULL ist.
  • Das Verhalten hängt von zur Laufzeit gelesenen Einstellungen ab: PutThisStatusesOnInvoice, Enforce_CheckKuhlung (Versandkostenanpassung für Kühlartikel), DefaultShippingWeight, CalculateWeightFromItems, Invoice_CancelPartialDelivery (offene Positionen mit Status ANG, HAL, BOR werden auf STO gesetzt).
  • Das Ausscannen erfolgt automatisch, wenn der Versanddienstleister (DoScanOutOnInvoiceCreate) oder die Zahlungsart (AutoScanOutInvoice) dies vorsieht.
  • Der Pfad zur Finalisierung von Entwürfen (Pixi_CreateInvoiceFromDraft) liegt nicht vor; dessen genaues Verhalten und Meldungen sind hier nicht dokumentiert.
  • Die Fehlermeldung für fehlende Parameter nennt den Benutzernamen, geprüft werden aber nur BoxNr und LocId.

Parameter

Parameter Typ Standardwert Beschreibung
BoxNr
Pflicht
int –

Nummer der gepackten Kiste, die fakturiert werden soll.

Beispiel: 1042

LocId
Pflicht
varchar(3)
string
–

Lager-ID, zu der die Kiste gehört.

Beispiel: 001

UserName
varchar(50)
string
API

Benutzername, der als Ersteller der Rechnung und ihrer Positionen gespeichert wird. Leer oder NULL wird durch API ersetzt.

Beispiel: shopconnector

Antwort

Result-Set 1 · Immer (genau eine Zeile, Erfolg oder Fehler)

Statuszeile mit der angelegten Rechnung oder dem Fehler.

Spalte Typ Beschreibung
InvoiceId
Kann leer sein
int

Interner Schlüssel der angelegten Rechnung (InvoiceKey); NULL bei Fehler.

InvoiceNr
Kann leer sein
varchar(20)
string

Vergebene Rechnungsnummer der neuen Rechnung; NULL bei Fehler.

Status
Kann leer sein
varchar(50)
string

SUCCESS bei Erfolg, Error bei Fehlern der Vorprüfung, ERROR (internes Ergebnis) bei Fehlern während der Rechnungserstellung.

Message
Kann leer sein
varchar(200)
string

Leer bei Erfolg, sonst die Fehlermeldung.

Fehlermeldungen

Status Meldung Ursache
Error Parameters Box number, Location Id and User Name must be specified. `BoxNr` oder `LocId` wurde nicht übergeben oder ist NULL.
Error Box could not be found. Am Lager `LocId` existiert keine Kiste mit dieser `BoxNr`.
Error Box is empty - no items. Die Kiste enthält keine Positionen; vor der Fakturierung Artikel packen.
Error Invoice creation failed. Invoice already exists. Die Kiste ist bereits als versendet markiert (`WaitForSend = 'Y'`) und enthält keine unfakturierten Positionen in einer physisch vollen Kiste.
Error Invoice creation failed. There is a "Ship lock" set for order in box {BoxNr}. Eine Lieferadresse einer Auftragsposition in der Kiste hat eine Versandsperre (`ASlocked`). Sperre zuerst aufheben.
Error Invoice creation failed. There is a "Ship lock" set for customer in box {BoxNr}. Der Kunde der Kiste hat eine Versandsperre (`SLocked`). Sperre zuerst aufheben.
Error Invoice creation failed. Die Kiste ist aus einem anderen Grund nicht fakturierbar, z. B. Auftragspositionen mit Bestätigungsdatum ungleich heute oder die Kistennummer ist die eigene Kistennummer des Lagers.
Error {ERROR_MESSAGE()} Ein SQL-Fehler ist aus der internen Rechnungserstellung durchgeschlagen; der ursprüngliche SQL-Fehlertext wird geliefert.
ERROR INVOICE ALREADY EXISTS Bei der Erstellung wurde festgestellt, dass die Kiste bereits fakturiert ist (z. B. paralleler Aufruf).
ERROR URGENT: Double invlines; BoxKey={BoxKey} currentLocation={LocId} User={UserName} Für die Auftragspositionen wurden doppelte Rechnungspositionen erkannt; die Rechnung wird zurückgerollt.
ERROR ERROR CREATING INVOICE; please check related addresses, country code could be missing Der Rechnungskopf konnte nicht angelegt werden, meist weil die Lieferadresse keinen gültigen Ländercode hat.
ERROR ERROR CREATING INVOICE BoxItems <> Invlines Die Anzahl der Rechnungspositionen stimmt nicht mit der Anzahl der Kistenpositionen überein; die Rechnung wird zurückgerollt.

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:pixiCreateInvoice>
      <BoxNr>1042</BoxNr>
      <LocId>001</LocId>
      <!-- <UserName>shopconnector</UserName> -->
    </ns1:pixiCreateInvoice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

boxes · Lesen boxitems · Lesen Invlines · Lesen Orderlines · Lesen Addresses · Lesen Customers · Lesen
SQL-Objekt:
dbo.pipiCreateInvoice
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben