Postman-Collection
Shipping Schreiben

pixiShipoutInvoice

Führt den Versand (Ausscannen) einer Rechnung oder einer Box durch: aktualisiert Pakete, Versender, Gewicht und Tracking-IDs und gibt Bestand frei.

Führt den vollständigen Versand (Ausscannen) einer Rechnung per API durch, identifiziert über InvoiceNr, über BoxNr oder über beide.

Vorbereitung und Prüfungen

  • BoxNr = 0 wird wie NULL behandelt. InvoiceNr, TrackingID und ShipVendorCode werden getrimmt; leere Werte werden zu NULL.
  • Die Einstellung Centralized_Ship_Out oder Premium_API muss aktiv sein.
  • Mindestens einer der Parameter InvoiceNr / BoxNr ist erforderlich.
  • LocID muss in Location existieren; eine angegebene BoxNr muss in boxes existieren (an beliebigem Lager).
  • Die Rechnung wird über InvoiceNr am Lager LocID gesucht und zusätzlich über die Auftragspositionen in der Box BoxNr an diesem Lager. Berücksichtigt werden nur Rechnungspositionen, deren Auftragsposition nicht den Status MIN hat. Die Box ergibt sich aus den Boxpositionen dieser Auftragspositionen.
  • Wird keine Rechnung gefunden, wird No invoice found geliefert. Wird mehr als eine Kombination aus Rechnung/Box gefunden (z. B. Box enthält Positionen mehrerer Rechnungen, Rechnungspositionen liegen in mehreren Boxen oder nur teilweise in einer Box) oder weicht die gefundene Rechnung/Box von der angegebenen ab, wird eine Fehlerzeile geliefert.

Versand

  1. Hat die Rechnung einen RefToInvoiceKey, wird Boxnummer -2 verwendet (das anschließende Ausscannen schlägt dann mit 0004. NO BOX !!! fehl). Andernfalls wird eine vorhandene Box am Lager mit den Rechnungspositionen verwendet oder eine neue Box für die Rechnung angelegt. Ist der Kunde oder die Lieferadresse gesperrt oder die Rechnung bereits ausgescannt, ergibt sich eine negative Boxnummer und das Ausscannen schlägt ebenfalls fehl.
  2. Die Paketanzahl wird auf AmountOfPackages (mindestens 1) gesetzt; Rechnungspakete werden entsprechend ergänzt oder entfernt.
  3. Der Versender wird auf ShipVendorCode gesetzt (bzw. auf den aktuellen Versender der Rechnung, falls nicht angegeben).
  4. Die Box wird ausgescannt: Sperr- und Zahlungsprüfung, Ausscannen der Rechnung, Auftragspositionen auf Status AUS, Box geleert, Picklisten-Box-Einträge entfernt, Poll-Datensätze erzeugt.
  5. Nur wenn das Ausscannen nicht ERROR liefert:
    • das Gewicht wird auf Rechnung und Pakete geschrieben (nur wenn die Einstellung CalculateWeightFromItems nicht aktiv ist; ohne Weight wird das aktuelle PackageGrossWeight der Rechnung verwendet),
    • TrackingID (semikolongetrennte Liste) wird an den Rechnungspaketen und der Rechnung gespeichert,
    • auf der Pickliste reservierter Bestand wird über die Lagerbewegungsoperation DirectInvoicesWizard der Anwendung ShippingClient_A freigegeben (Benutzer Shipout (API)),
    • bei Direktrechnungen (InvCreationMode = Direct) wird die Box samt Positionen gelöscht.

Der Aufruf liefert genau eine Zeile mit Status und StatusMessage. Bei Erfolg ist Status = OK und StatusMessage leer.

Hinweise

  • Der Aufruf läuft nicht in einer gemeinsamen Transaktion. Paketanzahl und Versender werden vor dem Ausscannen aktualisiert und bleiben geändert, auch wenn das Ausscannen ERROR liefert. Eine für die Rechnung angelegte Box kann ebenfalls bestehen bleiben.
  • Der Parameter BoxNr dient nur zum Finden der Rechnung und zur Prüfung der Kombination; die tatsächlich ausgescannte Box wird intern ermittelt (vorhandene Box mit den Rechnungspositionen am Lager LocID oder neu angelegte Box).
  • Bereits ausgescannte Rechnungen, Rechnungen mit RefToInvoiceKey sowie Rechnungen gesperrter Kunden/Adressen enden mit 0004. NO BOX !!! statt mit einer spezifischen Meldung.
  • Der Fehler Invoice ... could not be found on location ... ist praktisch nicht erreichbar, da ein leeres Ergebnis bereits als No invoice found gemeldet wird.
  • Wird LocID als NULL übergeben, wird das Lager der Rechnung verwendet; Fehlermeldungen, die LocID verketten, wären dann NULL.
  • Zur Laufzeit gelesene Einstellungen: Centralized_Ship_Out, Premium_API, CalculateWeightFromItems; in aufgerufenen Prozeduren zusätzlich EnableMultiInvoiceShipOut, DoNotReleaseStockOnDirectInvoiceScanOut und Einstellung 7 (Standardgewicht 0.1, falls Gewicht 0).
  • Das Ausscannen wird bei Deadlocks bis zu fünfmal wiederholt; andere SQL-Fehler werden protokolliert und ausgelöst (Rückgabe als SqlMessage).
  • Lesezugriffe mit NOLOCK; beim Ausscannen wird die Box-Zeile mit UPDLOCK gesperrt. Pakete werden unter dem App-Lock PixiInvoicePackage (Timeout 30 s) aktualisiert.
  • Beim Setzen von Tracking-IDs kann das Ereignis InvoiceChanged veröffentlicht werden.

Parameter

Parameter Typ Standardwert Beschreibung
InvoiceNr
varchar(20)
string
NULL

Nummer der zu versendenden Rechnung. Dieser Parameter oder BoxNr muss angegeben werden.

Beispiel: 1000234

UserName
varchar(50)
string
API

Benutzername, der bei Box-Anlage, Ausscannen und Tracking-ID-Aktualisierung gespeichert wird.

Beispiel: API

LocID
char(3)
string
001

Lager-ID. Rechnung und Box werden an diesem Lager gesucht. Bei NULL wird das Lager der Rechnung verwendet.

Beispiel: 001

BoxNr
int NULL

Nummer der Box mit den Auftragspositionen der Rechnung. 0 wird wie NULL behandelt. Dieser Parameter oder InvoiceNr muss angegeben werden.

Beispiel: 4711

Weight
float
decimal
NULL

Bruttogewicht für Rechnung und Pakete. Bei NULL wird das aktuelle PackageGrossWeight der Rechnung verwendet. Wird ignoriert, wenn die Einstellung CalculateWeightFromItems aktiv ist.

Beispiel: 2.35

AmountOfPackages
int 1

Anzahl der Pakete der Rechnung. Werte kleiner 1 werden als 1 behandelt.

Beispiel: 1

ShipVendorCode
varchar(3)
string
NULL

Versendercode, der an der Rechnung gesetzt wird. Ohne Angabe bleibt der aktuelle Versender der Rechnung erhalten.

Beispiel: DHL

TrackingID
varchar(8000)
string
NULL

Eine oder mehrere Tracking-IDs, durch Semikolon getrennt. Werden nur nach erfolgreichem Ausscannen gespeichert.

Beispiel: 00340434161094015902;00340434161094015903

Antwort

Result-Set 1 · Immer; genau eine Zeile (Validierungsfehler oder Ergebnis des Ausscannens).

Status des Versands.

Spalte Typ Beschreibung
Status varchar(50)
string

OK bei Erfolg, sonst ERROR.

StatusMessage
Kann leer sein
varchar(50)
string

Leer bei Erfolg, sonst die Fehlermeldung (Validierungsmeldungen können länger als 50 Zeichen sein).

Fehlermeldungen

Status Meldung Ursache
ERROR Setting "Centralized_Ship_Out" or "Premium_API" is not enabled. Weder die Einstellung `Centralized_Ship_Out` noch `Premium_API` ist aktiv.
ERROR At least one of parameters InvoiceNr/BoxNr needs to be provided. `InvoiceNr` und `BoxNr` sind beide leer (bzw. `BoxNr` ist 0).
ERROR Location with location ID: {LocID} does not exist. `LocID` ist keine gültige Lager-ID.
ERROR Box with box number: {BoxNr} does not exist. Die angegebene `BoxNr` existiert an keinem Lager.
ERROR No invoice found Für `InvoiceNr` bzw. `BoxNr` wurde am Lager keine Rechnung mit relevanten Positionen gefunden.
ERROR Invoice with invoice number: "{InvoiceNr}" or box with box number: "{BoxNr}" could not be found on location "{LocID}" Am Lager nichts gefunden; praktisch nicht erreichbar, da zuvor `No invoice found` geliefert wird.
ERROR Invoice with invoice number: "{InvoiceNr}" does not belong to box with box number: "{BoxNr} Rechnung und Box passen nicht zusammen, die Box enthält mehrere Rechnungen oder die Rechnungspositionen liegen in mehreren Boxen bzw. nur teilweise in einer Box.
ERROR 0001. No Invoice !!! Die Box existiert, wartet aber nicht auf Versand (`WaitForSend` ist nicht `Y`).
ERROR 0002. SHIPPING LOCK !!! Der Kunde der Lieferadresse hat eine Versandsperre.
ERROR 0003. ORDER SHIPPING LOCK !!! Die Lieferadresse hat eine Versandsperre.
ERROR 0004. NO BOX !!! Keine Box zum Ausscannen am Lager, z. B. Rechnung bereits ausgescannt, Rechnung hat `RefToInvoiceKey` oder Kunde/Adresse gesperrt.
ERROR DIE RECHNUNG IST NICHT BEZAHLT !!! Die Zahlungsart erfordert Zahlung vor Versand (`CA_DoNotAllowShipOutIfNotPaid`) und die Rechnung hat einen offenen Betrag.
ERROR 0006. NO INVOICE !!! Die Box enthält keine Positionen, die zu einer Rechnung gehören.
ERROR 0007. SQL Exception on Ship Out Beim Ausscannen trat ein SQL-Fehler auf (außer einem Deadlock innerhalb des Wiederholungslimits).
RAISERROR ScanOUT Error --- {error message} Wird beim Ausscannen zusammen mit `0007` ausgelöst; Rückgabe als `SqlMessage`.

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:pixiShipoutInvoice>
      <!-- <InvoiceNr>1000234</InvoiceNr> -->
      <!-- <UserName>API</UserName> -->
      <!-- <LocID>001</LocID> -->
      <!-- <BoxNr>4711</BoxNr> -->
      <!-- <Weight>2.35</Weight> -->
      <!-- <AmountOfPackages>1</AmountOfPackages> -->
      <!-- <ShipVendorCode>DHL</ShipVendorCode> -->
      <!-- <TrackingID>00340434161094015902;00340434161094015903</TrackingID> -->
    </ns1:pixiShipoutInvoice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

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