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,TrackingIDundShipVendorCodewerden getrimmt; leere Werte werden zu NULL.- Die Einstellung
Centralized_Ship_OutoderPremium_APImuss aktiv sein. - Mindestens einer der Parameter
InvoiceNr/BoxNrist erforderlich. LocIDmuss inLocationexistieren; eine angegebeneBoxNrmuss inboxesexistieren (an beliebigem Lager).- Die Rechnung wird über
InvoiceNram LagerLocIDgesucht und zusätzlich über die Auftragspositionen in der BoxBoxNran diesem Lager. Berücksichtigt werden nur Rechnungspositionen, deren Auftragsposition nicht den StatusMINhat. Die Box ergibt sich aus den Boxpositionen dieser Auftragspositionen. - Wird keine Rechnung gefunden, wird
No invoice foundgeliefert. 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
- Hat die Rechnung einen
RefToInvoiceKey, wird Boxnummer -2 verwendet (das anschließende Ausscannen schlägt dann mit0004. 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. - Die Paketanzahl wird auf
AmountOfPackages(mindestens 1) gesetzt; Rechnungspakete werden entsprechend ergänzt oder entfernt. - Der Versender wird auf
ShipVendorCodegesetzt (bzw. auf den aktuellen Versender der Rechnung, falls nicht angegeben). - 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. - Nur wenn das Ausscannen nicht
ERRORliefert:- das Gewicht wird auf Rechnung und Pakete geschrieben (nur wenn die Einstellung
CalculateWeightFromItemsnicht aktiv ist; ohneWeightwird das aktuellePackageGrossWeightder Rechnung verwendet), TrackingID(semikolongetrennte Liste) wird an den Rechnungspaketen und der Rechnung gespeichert,- auf der Pickliste reservierter Bestand wird über die Lagerbewegungsoperation
DirectInvoicesWizardder AnwendungShippingClient_Afreigegeben (BenutzerShipout (API)), - bei Direktrechnungen (
InvCreationMode=Direct) wird die Box samt Positionen gelöscht.
- das Gewicht wird auf Rechnung und Pakete geschrieben (nur wenn die Einstellung
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
ERRORliefert. Eine für die Rechnung angelegte Box kann ebenfalls bestehen bleiben. - Der Parameter
BoxNrdient 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 LagerLocIDoder neu angelegte Box). - Bereits ausgescannte Rechnungen, Rechnungen mit
RefToInvoiceKeysowie Rechnungen gesperrter Kunden/Adressen enden mit0004. 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 alsNo invoice foundgemeldet wird. - Wird
LocIDals NULL übergeben, wird das Lager der Rechnung verwendet; Fehlermeldungen, dieLocIDverketten, wären dann NULL. - Zur Laufzeit gelesene Einstellungen:
Centralized_Ship_Out,Premium_API,CalculateWeightFromItems; in aufgerufenen Prozeduren zusätzlichEnableMultiInvoiceShipOut,DoNotReleaseStockOnDirectInvoiceScanOutund Einstellung7(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 mitUPDLOCKgesperrt. Pakete werden unter dem App-LockPixiInvoicePackage(Timeout 30 s) aktualisiert. - Beim Setzen von Tracking-IDs kann das Ereignis
InvoiceChangedveröffentlicht werden.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
InvoiceNr
|
varchar(20) string |
NULL |
Nummer der zu versendenden Rechnung. Dieser Parameter oder Beispiel: |
UserName
|
varchar(50) string |
API |
Benutzername, der bei Box-Anlage, Ausscannen und Tracking-ID-Aktualisierung gespeichert wird. Beispiel: |
LocID
|
char(3) string |
001 |
Lager-ID. Rechnung und Box werden an diesem Lager gesucht. Bei NULL wird das Lager der Rechnung verwendet. Beispiel: |
BoxNr
|
int | NULL |
Nummer der Box mit den Auftragspositionen der Rechnung. 0 wird wie NULL behandelt. Dieser Parameter oder Beispiel: |
Weight
|
float decimal |
NULL |
Bruttogewicht für Rechnung und Pakete. Bei NULL wird das aktuelle Beispiel: |
AmountOfPackages
|
int | 1 |
Anzahl der Pakete der Rechnung. Werte kleiner 1 werden als 1 behandelt. Beispiel: |
ShipVendorCode
|
varchar(3) string |
NULL |
Versendercode, der an der Rechnung gesetzt wird. Ohne Angabe bleibt der aktuelle Versender der Rechnung erhalten. Beispiel: |
TrackingID
|
varchar(8000) string |
NULL |
Eine oder mehrere Tracking-IDs, durch Semikolon getrennt. Werden nur nach erfolgreichem Ausscannen gespeichert. Beispiel: |
Antwort
Result-Set 1 · Immer; genau eine Zeile (Validierungsfehler oder Ergebnis des Ausscannens).
Status des Versands.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(50) string |
|
StatusMessage
Kann leer sein |
varchar(50) string |
Leer bei Erfolg, sonst die Fehlermeldung (Validierungsmeldungen können länger als 50 Zeichen sein). |
Beispielantwort
<SqlRowSet1>
<row>
<Status>OK</Status>
<StatusMessage/>
</row>
</SqlRowSet1>
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>
curl -X POST 'https://apigateway.descartes.com/tms/pixi/' \
--user 'USERNAME:PASSWORD' \
--header 'Content-Type: text/xml; charset=utf-8' \
--data-binary @- <<'XML'
<?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>
XML
<?php
$soapClient = new SoapClient(null, [
'login' => 'USERNAME',
'password' => 'PASSWORD',
'location' => 'https://apigateway.descartes.com/tms/pixi/',
'uri' => 'https://apigateway.descartes.com/tms/pixi/',
]);
$arguments = [
// 'InvoiceNr' => '1000234',
// 'UserName' => 'API',
// 'LocID' => '001',
// 'BoxNr' => '4711',
// 'Weight' => '2.35',
// 'AmountOfPackages' => '1',
// 'ShipVendorCode' => 'DHL',
// 'TrackingID' => '00340434161094015902;00340434161094015903',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiShipoutInvoice', $soapArguments);
Verwandte Calls
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiShipoutInvoice