Postman-Collection
Shipping Schreiben

pixiPutIntoBox

Scannt eine einzelne Auftragsposition in eine Box ein (Scan-In mit Pickliste), teilt die Position bei Bedarf und prüft Charge und MHD.

Führt den Scan-In einer Auftragsposition in eine Versandbox durch, so wie es der Pixi-Versandclient beim Scan-In mit Pickliste tut. Der Aufruf arbeitet mit genau der Auftragsposition aus OrderlineKey.

Ablauf:

  1. Prüft, ob die Einstellung Premium_API aktiv ist. Andernfalls wird eine Fehlerzeile geliefert.
  2. Liest Artikel und Lager der Auftragsposition. Ist die Einstellung BatchManagement gleich 1, wird geprüft, ob der Artikel das Chargen-Tag (TagId -6) oder das MHD-Tag (TagId -7) trägt. Ohne eines dieser Tags gilt die Chargenverwaltung für diesen Artikel als deaktiviert.
  3. Ist die Chargenverwaltung deaktiviert, aber BatchNumber oder BestBeforeDate werden übergeben, endet der Aufruf mit Wrong Batch Management data.
  4. Ist die Chargenverwaltung aktiv, werden die aktiven Picklistenpositionen (PLitem, Expired = 0) der Auftragsposition gezählt, deren Lagerplatz-Artikel genau die übergebene Charge und das übergebene MHD haben. Gibt es keine, endet der Aufruf mit einem Fehler.
  5. Ist PickListNr gleich 0, die Auftragsposition liegt aber auf einer aktiven Pickliste, endet der Aufruf mit Item is part of picklist: ….
  6. Sucht die Auftragsposition über die Scan-In-Suchlogik, eingeschränkt auf diese Position und die übergebene Pickliste. Die Position muss einen Status haben, der Scan-In erlaubt, darf nicht zu einem gesperrten Kunden oder einer gesperrten Adresse gehören (außer der Benutzer hat die Berechtigung SHILC) und muss bei Angabe einer Pickliste auf dieser liegen. Wird nichts gefunden: No order found!.
  7. Ermittelt die Menge, die in die Box gelegt wird:
    • die Picklistenmenge der Position, bei aktiver Chargenverwaltung begrenzt auf die Anzahl passender Chargen-Positionen;
    • ist ScannedQty ungleich 0, darf sie diese Menge nicht überschreiten und ersetzt sie.
  8. Ist die Positionsmenge größer als diese Menge, wird die Auftragsposition geteilt, sodass der gescannte Teil die ermittelte Menge behält (GOSBreakOrderline).
  9. Ruft die interne Logik zum Einlegen in die Box auf (Pixi_PutIntoBox). Sie verwendet die Lagerbewegungsoperation ScanInWithPicklist der Anwendung ShippingClient_A und den Log-Grund API - ScanIn with picklist. Die Logik:
    • übernimmt FromBox/ToBox aus dem Picklistenkopf, falls dort ein Boxbereich hinterlegt ist;
    • sucht eine Box für den Kunden oder führt eine interne Umlagerung durch, wenn das Auftragslager vom letzten Auftragslager abweicht;
    • prüft, dass die Box keine Artikel eines anderen Kunden enthält und der Auftrag nicht bereits in einer anderen offenen Box liegt;
    • aktualisiert die Auftragsposition für den Scan-In und gibt die Picklistenpositionen vom Lagerplatz frei;
    • veröffentlicht das Message-Queue-Ereignis ScanInPutIntoBox und ScanInBoxFull, wenn die Box nun voll ist.

Ergebnis ist eine Zeile mit der Box und einem Wert in Action. IN BOX LEGEN bedeutet Erfolg; andere Werte beschreiben, warum der Artikel nicht in eine Box gelegt wurde.

Hinweise

  • Erfordert die Einstellung Premium_API.
  • Alle Lesezugriffe verwenden NOLOCK.
  • Der Aufruf hat keine eigene Transaktion. Die Teilung der Auftragsposition in Schritt 8 läuft in einer eigenen Transaktion (mit Application-Lock auf der Position) und wird vor dem Einlegen in die Box festgeschrieben. Schlägt das Einlegen danach fehl, bleibt die Teilung bestehen.
  • Ohne Pickliste (PickListNr = 0) liefert die Scan-In-Suche eine Picklistenmenge von 0. Jede ScannedQty ungleich 0 wird dann abgelehnt, und die Teilung wird mit der neuen Menge 0 aufgerufen. Was die Teilung in diesem Fall tut, hängt von GOSBreakOrderline_Base ab, das nicht vorliegt. Der Aufruf ist für den Scan-In mit Pickliste gedacht.
  • Jede SupplOrderNr ungleich 0 lässt die interne Positionssuche scheitern. Das Ergebnis ist dann FEHLER mit 0010. BESTELL. GEANDERT !.
  • Ist SupplGroup leer und der Positionsstatus SHL, wird stattdessen die an der Position gespeicherte Lieferantengruppe (SupplGroupScanIn) verwendet. Der Wert wird als varchar(4) weitergegeben.
  • BestBeforeDate wird als 1900-01-01 weitergegeben, wenn es nicht übergeben wird. Ist die globale Einstellung BatchManagement gleich 1 und hat die Pickliste DaysBeforeBBD gesetzt, kann dieses Datum zu MHD nicht zulässig führen.
  • Die Einstellung OnlyPicklistScanIn = 1 ohne Pickliste liefert die Aktion Keine Pickliste.
  • Deadlocks (Fehler 1205) beim Einlegen in die Box werden bis zu 10-mal wiederholt. Andere Fehler werden abgefangen, in LogTable protokolliert und als Aktionszeile statt als SQL-Fehler geliefert.
  • Mehrere aufgerufene Objekte liegen nicht vor: Pixi_ShipToCustomer, Pixi_ShipIntern, GOSUpdateOrderlineForScanIn, Pixi_ReleasePLitemFromBin, GOSBreakOrderline_Base, pixi.FullBoxesGet und Pixi_MQ_EventPublish. Deren genaue Datenänderungen und ob sie weitere Ergebnismengen oder Fehler erzeugen, sind nicht ersichtlich.
  • Bei einer internen Umlagerung (Auftragslager weicht vom letzten Auftragslager ab) wird kein Box-Schlüssel ermittelt, das Ergebnis zeigt daher BoxNr = 0.
  • Der Text MHD nicht zulässig ist im Quellcode falsch kodiert und kann als MHD nicht zulässig ankommen.

Parameter

Parameter Typ Standardwert Beschreibung
OrderlineKey
Pflicht
int –

Schlüssel der Auftragsposition, die in eine Box gescannt wird.

Beispiel: 123456

SupplGroup
Pflicht
varchar(5)
string
–

Lieferantengruppe, die beim Scan-In gespeichert wird. Ist sie leer und der Positionsstatus SHL, wird die bereits an der Position gespeicherte Lieferantengruppe verwendet.

Username
Pflicht
varchar(50)
string
–

Pixi-Benutzer, der den Scan-In durchführt. Wird für Berechtigungen, Protokollierung und die Aktualisierung der Position verwendet.

Beispiel: api_user

SupplOrderNr
int 0

Lieferantenbestellnummer. Muss 0 sein; jeder andere Wert lässt die interne Positionssuche scheitern.

Beispiel: 0

FromBox
Pflicht
int –

Niedrigste zu verwendende Boxnummer. Wird durch den Boxbereich der Pickliste ersetzt, falls der Picklistenkopf einen definiert.

Beispiel: 1

ToBox
Pflicht
int –

Höchste zu verwendende Boxnummer. Wird durch den Boxbereich der Pickliste ersetzt, falls der Picklistenkopf einen definiert.

Beispiel: 200

SerialNr
Pflicht
varchar(200)
string
–

Seriennummer des gescannten Artikels. NULL wird als Leerstring behandelt.

PickListNr
int 0

Picklistennummer (PLHkey). 0 bedeutet Scan-In ohne Pickliste; das wird abgelehnt, wenn die Position auf einer aktiven Pickliste liegt.

Beispiel: 4711

IsPersonalizedScanIn
bit
boolean
0

Kennzeichnet den Scan-In eines personalisierten Artikels (Tag -1). Muss zum Tag des Artikels passen, sonst wird eine Fehleraktion geliefert.

Erlaubte Werte

  • 0 – Normaler Artikel; schlägt fehl, wenn der Artikel personalisiert ist.
  • 1 – Personalisierter Artikel; schlägt fehl, wenn der Artikel (oder sein Bundle) nicht als personalisiert markiert ist.

Beispiel: 0

BinRef
int 0

Lagerplatz-Schlüssel, der beim Freigeben der Picklistenpositionen vom Lagerplatz weitergegeben wird.

Beispiel: 0

BatchNumber
varchar(50)
string
NULL

Charge des gescannten Artikels. Nur erlaubt, wenn die Chargenverwaltung für den Artikel aktiv ist; muss zu einer Picklistenposition der Auftragsposition passen.

Beispiel: CH-2024-001

BestBeforeDate
datetime
dateTime
NULL

MHD des gescannten Artikels. Nur erlaubt, wenn die Chargenverwaltung für den Artikel aktiv ist; muss zu einer Picklistenposition der Auftragsposition passen.

Beispiel: 2025-12-31T00:00:00

ScannedQty
int 0

Gescannte Menge. 0 verwendet die volle Picklistenmenge der Position; sonst darf sie die Picklistenmenge nicht überschreiten, und die Position wird bei Bedarf geteilt.

Beispiel: 2

Antwort

Result-Set 1 · Wenn eine Prüfung vor dem Einlegen in die Box fehlschlägt (Einstellung, Chargendaten, Pickliste, Positionssuche, Menge).

Fehlerstatuszeile. In diesem Fall werden keine Daten geändert.

Spalte Typ Beschreibung
Status varchar(5)
string

Immer ERROR.</br>

StatusMessage varchar
string

Fehlertext.

Result-Set 2 · Wenn alle Prüfungen bestanden sind (geliefert von der internen Logik zum Einlegen in die Box).

Eine Zeile mit der Box und dem Ergebnis des Einlegens in die Box.

Spalte Typ Beschreibung
BoxKey
Kann leer sein
int

Schlüssel der Box; 0, wenn keine Box verwendet wurde.

BoxNr int

Boxnummer; 0 bei Fehlern oder ohne Box.

BoxColor
Kann leer sein
varchar(7)
string

Farbe der Box; leer, wenn keine Box verwendet wurde.

Action varchar(200)
string

Ergebnis: IN BOX LEGEN bei Erfolg, sonst FEHLER, FEHLER ... Exc., Keine Pickliste, MHD nicht zulässig oder Bitte wiederholen!.

DESCRIPTION varchar(200)
string

Boxbeschreibung bei Erfolg, sonst der Fehler- bzw. Infotext.

PackageId
Kann leer sein
int

Paket-ID einer Rechnungsentwurfs. Bei diesem Aufruf immer NULL, da kein Rechnungsentwurf angelegt wird.

Fehlermeldungen

Status Meldung Ursache
ERROR Setting "Premium_API" is not enabled. Die Einstellung `Premium_API` ist nicht aktiv. Sie muss in Pixi aktiviert werden.
ERROR Wrong Batch Management data `BatchNumber` oder `BestBeforeDate` wurde übergeben, aber die Chargenverwaltung ist global deaktiviert oder der Artikel hat weder das Chargen- noch das MHD-Tag. Für solche Artikel beide Werte weglassen.
ERROR Item(s) with selected batch number and/or best before date not on stock. Please enter the correct values. Die Chargenverwaltung ist für den Artikel aktiv, aber keine aktive Picklistenposition der Auftragsposition hat die übergebene Charge und das MHD. Die Werte des gepickten Bestands übergeben.
ERROR Item is part of picklist: {PLIheaderRef} `PickListNr` ist `0`, aber die Auftragsposition liegt auf einer aktiven Pickliste. Diese Picklistennummer übergeben.
ERROR No order found! Die Scan-In-Suche hat die Auftragsposition nicht gefunden: falscher Status, nicht auf der übergebenen Pickliste, gesperrter Kunde/gesperrte Adresse oder abweichendes Lager.
ERROR ScannedQty is higher than quantity on picklist `ScannedQty` übersteigt die Picklistenmenge der Position (begrenzt auf passende Chargen-Positionen). Ohne Pickliste ist die Picklistenmenge `0`, daher wird nur `ScannedQty = 0` akzeptiert.
Keine Pickliste Keine Pickliste Die Einstellung `OnlyPicklistScanIn` ist `1` und es wurde keine Pickliste übergeben (geliefert in `Action`/`DESCRIPTION`).
MHD nicht zulässig MHD nicht zulässig Das MHD liegt vor dem heutigen Datum plus `DaysBeforeBBD` der Pickliste.
FEHLER 0014. No Order Found!! Die Pickliste enthält keine Position für den Artikel der Auftragsposition.
FEHLER 0012. FEHLER: PERSONALISIERTER ARTIKEL NICHT AKTIVIERT! `IsPersonalizedScanIn = 1`, aber der Artikel (bzw. sein Bundle) ist nicht als personalisiert markiert.
FEHLER 0013. FEHLER: PERSONALISIERTER ARTIKEL OHNE BESTELLREFERENZ! Der Artikel ist personalisiert, aber `IsPersonalizedScanIn` ist `0`.
FEHLER 0010. BESTELL. GEANDERT ! Die Auftragsposition hat keinen Scan-In-Status mehr, oder `SupplOrderNr` ist nicht `0`.
FEHLER 0011. KEINE BOX GEFUNDEN! Im Boxbereich `FromBox`–`ToBox` wurde keine freie Box gefunden.
FEHLER Pixi_PutIntoBox problem check {boxes} orderlineKey={OrderlineKey} {Username} boxNr={BoxNr} Die gewählte Box enthält Artikel eines anderen Kunden (`FB …`), oder der Auftrag liegt bereits in einer anderen offenen Box.
FEHLER Der gescannte Artikel wurde bereits verarbeitet. Der Artikel ist bereits in den Boxpositionen enthalten (doppelter Schlüssel in `boxitems`).
Bitte wiederholen! Mehrfache Auslagerung Die Auslagerung schlug mit Fehler 57251 fehl (mehrfache Auslagerung). Den Scan wiederholen.
FEHLER ... Exc. {Info} Beim Einlegen in die Box trat ein unerwarteter SQL-Fehler auf; Details werden in `LogTable` protokolliert.

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:pixiPutIntoBox>
      <OrderlineKey>123456</OrderlineKey>
      <SupplGroup>?</SupplGroup>
      <Username>api_user</Username>
      <!-- <SupplOrderNr>0</SupplOrderNr> -->
      <FromBox>1</FromBox>
      <ToBox>200</ToBox>
      <SerialNr>?</SerialNr>
      <!-- <PickListNr>4711</PickListNr> -->
      <!-- <IsPersonalizedScanIn>0</IsPersonalizedScanIn> -->
      <!-- <BinRef>0</BinRef> -->
      <!-- <BatchNumber>CH-2024-001</BatchNumber> -->
      <!-- <BestBeforeDate>2025-12-31T00:00:00</BestBeforeDate> -->
      <!-- <ScannedQty>2</ScannedQty> -->
    </ns1:pixiPutIntoBox>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Settings · Lesen Orderlines · Lesen PLitem · Lesen InvBinItem · Lesen TagMatch · Lesen StockMovementTypes · Lesen StockMovementMatching · Lesen StockMovementOperations · Lesen PLHeader · Lesen OrderStates · Lesen Customers · Lesen Addresses · Lesen Shops · Lesen Payments · Lesen boxes · Lesen boxitems · Lesen items · Lesen InvBin · Lesen BundleItems · Lesen LogTable · Schreiben
SQL-Objekt:
dbo.pipiPutIntoBox
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben