Postman-Collection
Stock Schreiben

pixiSetStockMultiple

Setzt oder ändert den Bestand von Artikeln auf Lagerplätzen anhand eines XML-Dokuments und liefert je verarbeitetem Lagerplatz-Eintrag eine Ergebniszeile.

Verarbeitet eine Liste von Artikeln mit Lagerplatz-Einträgen und bucht je Eintrag Lagerbewegungen (Einlagern / Auslagern).

Ablauf

  1. Prüft die Einstellung API_Stock_Movements. Ist sie nicht aktiviert, wird eine einzelne ERROR-Zeile geliefert, ansonsten passiert nichts.
  2. Ist ParameterXML nicht leer, ersetzt es XML. Der gesamte XML-Text wird in Großbuchstaben umgewandelt (Elementnamen und Werte).
  3. Das XML wird über /ITEMSTOCK/ITEM/INVBINS/INVBIN gelesen. Je ITEM: ITEMKEY, ITEMNRINT, EANUPC, OVERWRITESTOCK. Je INVBIN: BINNAME, STOCK, STOCKADD, STOCKREMOVE, NEUTRALINVENTORY, SMTREF, SMOREF, BATCHNUMBER, BESTBEFOREDATE. Leere Werte für SMTREF, SMOREF, BATCHNUMBER und BESTBEFOREDATE gelten als NULL.
  4. Der Artikel wird in dieser Reihenfolge ermittelt: über ITEMKEY, dann ITEMNRINT, dann EANUPC. Artikelschlüssel, Artikelnummer und EAN des gefundenen Artikels werden ergänzt.
  5. Bei OVERWRITESTOCK = 1 wird für jeden weiteren Lagerplatz (nach Name) mit positivem Bestand des Artikels, der nicht im XML steht, ein zusätzlicher Eintrag mit Zielbestand 0 angelegt – der Bestand dort wird also geleert.
  6. Übersteigt der höchste Wert von STOCK (bzw. STOCKADD, wenn STOCK leer ist) die Einstellung MaxStockOperationLimit, bricht der Aufruf mit einem Fehler ab, bevor Bestand geändert wird.
  7. Jeder Eintrag mit gefundenem Artikel und existierendem Lagerplatznamen wird verarbeitet:
    • Ist der Artikel für Charge (Tag -6) markiert, aber kein BATCHNUMBER angegeben, oder für MHD (Tag -7) markiert, aber kein BESTBEFOREDATE angegeben, wird der Eintrag übersprungen. Ohne entsprechende Markierung wird der Wert ignoriert.
    • Ist STOCK gesetzt, wird die Differenz zum aktuellen Bestand auf allen Lagerplätzen dieses Namens berechnet. Eine positive Differenz wird eingelagert, eine negative ausgelagert; bei Differenz 0 entsteht die Erfolgsmeldung No stock change needed.
    • Andernfalls werden STOCKADD / STOCKREMOVE wie angegeben gebucht.
    • Fehlt SMOREF oder SMTREF, werden Standardwerte verwendet: Lagerbewegungsoperation API/PutToStock mit Bewegungsart 0201 beim Einlagern, API/TakeOut mit Bewegungsart 0301 beim Auslagern.
    • Die Kombination aus SMO und SMT muss in der Zuordnungstabelle der Lagerbewegungen existieren, sonst schlägt der Eintrag mit einer Fehlermeldung fehl.
    • Die Buchung erfolgt über Pixi_InvBinScanIn (Einlagern) bzw. Pixi_InvBinTakeOut (Auslagern) mit dem übergebenen Username, Charge und MHD.
  8. Je Eintrag wird eine Ergebniszeile geliefert: verarbeitete Einträge mit Erfolgs- oder Fehlermeldung, Einträge mit nicht gefundenem Artikel oder Lagerplatz sowie übrige, nicht verarbeitete Einträge mit der Charge/MHD-Meldung.
  9. Alle ermittelten Artikel werden in pixi.ItemRecalculateStockQueue zur Bestandsneuberechnung und zum Export eingereiht.

Hinweise

  • Keine Gesamttransaktion: Jede Buchung wird einzeln durch Pixi_InvBinScanIn / Pixi_InvBinTakeOut festgeschrieben. Ein Aufruf kann teilweise erfolgreich sein; status ist je Zeile zu prüfen.
  • Das XML wird vollständig in Großbuchstaben umgewandelt, Lagerplatznamen und Chargen werden also in Großschreibung verarbeitet.
  • Numerische Elemente besser weglassen statt leer zu senden: ein leeres STOCK kann als 0 gelesen werden und setzt den Bestand dann auf 0.
  • Lagerplätze werden nur über BINNAME identifiziert. Existiert derselbe Name in mehreren Lagern, wird der aktuelle Bestand über alle summiert und das Lager von einem beliebigen passenden Lagerplatz (TOP 1) genommen. Die Einstellung FilterStockOperationsWithLocation wird gelesen, aber nicht verwendet.
  • OVERWRITESTOCK = 1 leert den Artikel auf allen anderen Lagerplätzen mit positivem Bestand, in allen Lagern.
  • MaxStockOperationLimit wird hier nur für STOCK/STOCKADD geprüft. Die aufgerufenen Prozeduren prüfen die Menge erneut (auch beim Auslagern); ein solcher Fehler wird abgefangen, protokolliert und als Zeile mit status 0 und leerem Error geliefert.
  • STOCK nicht mit STOCKADD/STOCKREMOVE im selben Eintrag kombinieren: die expliziten Werte können zusätzlich gebucht werden. Die berechnete Differenz wird zudem zwischen Einträgen nicht zurückgesetzt, was Einträge ohne STOCK beeinflussen kann.
  • Ist die SMO nicht der Anwendung API zugeordnet, wird nur eine Informationsmeldung (Schweregrad 10) gesendet; die Zeile erscheint dann mit der irreführenden Charge/MHD-Meldung.
  • Einträge ohne zu buchende Menge (z. B. nur NEUTRALINVENTORY, das gelesen, aber nicht verwendet wird) erhalten ebenfalls die Charge/MHD-Meldung.
  • Im Ergebnis zeigen STOCKADD/STOCKREMOVE/SMOREF/SMTREF die Eingabewerte, nicht die berechneten oder Standardwerte. Reason ist bei XML-Einträgen leer und enthält bei durch OVERWRITESTOCK ergänzten Einträgen den Grund des Lagerplatz-Bestands. Das Ergebnis hat keine definierte Sortierung.
  • SMT/SMO-Fehlzuordnungen und abgefangene Fehler werden in LogTable geschrieben. Die Meldungstexte der Buchungsprozeduren stammen aus Pixi_InvBinScanIn_Base / Pixi_InvBinTakeOut_Base, die nicht beigefügt sind.
  • Lesezugriffe erfolgen mit NOLOCK.

Parameter

Parameter Typ Standardwert Beschreibung
XML
varchar(max)
xml
NULL

XML-Dokument mit Artikeln und deren Lagerplatz-Einträgen (Wurzel ITEMSTOCK). Wird ignoriert, wenn ParameterXML nicht leer ist.

Beispiel:

<ITEMSTOCK>
  <ITEM>
    <ITEMKEY>1234</ITEMKEY>
    <ITEMNRINT>ART-1001</ITEMNRINT>
    <EANUPC>4006381333931</EANUPC>
    <OVERWRITESTOCK>0</OVERWRITESTOCK>
    <INVBINS>
      <INVBIN>
        <BINNAME>A-01-01</BINNAME>
        <STOCK>25</STOCK>
        <STOCKADD>0</STOCKADD>
        <STOCKREMOVE>0</STOCKREMOVE>
        <NEUTRALINVENTORY>0</NEUTRALINVENTORY>
        <SMTREF/>
        <SMOREF/>
        <BATCHNUMBER>CH-2024-01</BATCHNUMBER>
        <BESTBEFOREDATE>2025-12-31T00:00:00</BESTBEFOREDATE>
      </INVBIN>
    </INVBINS>
  </ITEM>
</ITEMSTOCK>
ParameterXML
varchar(max)
xml
NULL

Alternative zu XML mit gleicher Struktur. Ist es nicht leer, wird es statt XML verwendet.

Beispiel:

<ITEMSTOCK>
  <ITEM>
    <ITEMKEY>1234</ITEMKEY>
    <ITEMNRINT>ART-1001</ITEMNRINT>
    <EANUPC>4006381333931</EANUPC>
    <OVERWRITESTOCK>0</OVERWRITESTOCK>
    <INVBINS>
      <INVBIN>
        <BINNAME>A-01-01</BINNAME>
        <STOCK>25</STOCK>
        <STOCKADD>0</STOCKADD>
        <STOCKREMOVE>0</STOCKREMOVE>
        <NEUTRALINVENTORY>0</NEUTRALINVENTORY>
        <SMTREF/>
        <SMOREF/>
        <BATCHNUMBER>CH-2024-01</BATCHNUMBER>
        <BESTBEFOREDATE>2025-12-31T00:00:00</BESTBEFOREDATE>
      </INVBIN>
    </INVBINS>
  </ITEM>
</ITEMSTOCK>
Username
varchar(50)
string
pipiSetStockMultiple

Benutzername, der für die Lagerbewegungen erfasst wird. NULL wird durch pipiSetStockMultiple ersetzt.

Beispiel: shop-sync

Antwort

Result-Set 1 · Wenn die Einstellung API_Stock_Movements nicht aktiviert ist.

Einzelne Statuszeile; es wird kein Bestand geändert.

Spalte Typ Beschreibung
Status varchar(5)
string

Immer ERROR.

StatusMessage varchar(72)
string

Fehlertext zur nicht aktivierten Einstellung.

Result-Set 2 · Wenn die Einstellung aktiviert ist und die Mengenprüfung bestanden wird.

Eine Zeile je Lagerplatz-Eintrag aus dem XML (zuzüglich durch OVERWRITESTOCK ergänzter Einträge) mit dem Verarbeitungsergebnis. Keine definierte Sortierung.

Spalte Typ Beschreibung
ITEMNRINT
Kann leer sein
varchar(50)
string

Interne Artikelnummer (vom gefundenen Artikel, sonst aus dem XML).

ITEMKEY
Kann leer sein
int

Artikelschlüssel; NULL, wenn der Artikel nicht gefunden wurde.

EAN
Kann leer sein
varchar(50)
string

EAN/UPC des Artikels.

BINNAME
Kann leer sein
varchar(50)
string

Lagerplatzname (in Großbuchstaben).

STOCK
Kann leer sein
int

Zielbestand aus dem XML (0 bei durch OVERWRITESTOCK ergänzten Einträgen).

STOCKADD
Kann leer sein
int

Einzulagernde Menge wie im XML übergeben (nicht die berechnete Differenz).

STOCKREMOVE
Kann leer sein
int

Auszulagernde Menge wie im XML übergeben (nicht die berechnete Differenz).

Error
Kann leer sein
varchar(8000)
string

Fehlermeldung, wenn der Eintrag fehlgeschlagen ist oder nicht verarbeitet wurde.

Reason
Kann leer sein
varchar(50)
string

Leer bei XML-Einträgen; Grund des Lagerplatz-Bestands bei durch OVERWRITESTOCK ergänzten Einträgen.

SMOREF
Kann leer sein
int

Schlüssel der Lagerbewegungsoperation aus dem XML (Standardwerte werden nicht angezeigt).

SMTREF
Kann leer sein
int

Schlüssel der Lagerbewegungsart aus dem XML (Standardwerte werden nicht angezeigt).

status
Kann leer sein
bit
boolean

1 = Erfolg, 0 = Fehler oder nicht verarbeitet.

BATCHNUMBER
Kann leer sein
varchar(50)
string

Charge aus dem XML.

BESTBEFOREDATE
Kann leer sein
datetime
dateTime

MHD aus dem XML.

SuccessMessage
Kann leer sein
varchar(8000)
string

Erfolgsmeldung, z. B. No stock change needed oder die Meldung der Buchungsprozedur.

Fehlermeldungen

Status Meldung Ursache
ERROR Setting "API Calls Stock Movements" (API_Stock_Movements) is not enabled. Die Einstellung `API_Stock_Movements` ist nicht auf 1 gesetzt. In den Pixi-Einstellungen aktivieren.
RAISERROR Stock can not be set, stock quantity is greater than limit of setting: MaxStockOperationLimit! Der höchste Wert von `STOCK` (bzw. `STOCKADD`) im XML übersteigt `MaxStockOperationLimit`. Der gesamte Aufruf wird ohne Änderungen abgebrochen; Mengen korrigieren oder aufteilen.
RAISERROR Error Message: API pipiSetStockMultiple: SMO is not assigned to API! Die angegebene `SMOREF` gehört zu keiner Lagerbewegungsoperation der Anwendung `API` und es besteht eine Bestandsdifferenz. Nur Informationsmeldung (Schweregrad 10); der Eintrag wird übersprungen. Eine SMO der Anwendung `API` verwenden.
0 Error Message: API pipiSetStockMultiple: SMT is not matched to SMO - please check Control Center - Stock Movements matching table! ItemKey = {ItemKey}, BinName = {BinName} Die Kombination aus SMO und SMT fehlt in der Zuordnungstabelle der Lagerbewegungen. Wird in `Error` geliefert, zusätzlich protokolliert und als Meldung mit Schweregrad 1 gesendet. Zuordnung im Control Center pflegen.
0 Item and Bin not found Weder der Artikel (über Schlüssel, Nummer oder EAN) noch der Lagerplatzname wurde gefunden.
0 Item not found Der Artikel konnte weder über `ITEMKEY`, `ITEMNRINT` noch `EANUPC` ermittelt werden.
0 Bin not found Es existiert kein Lagerplatz mit dem angegebenen `BINNAME`.
0 Item stock was not updated. Item tagged with Batch Number and/or Best Before Date but no information provided. Der Artikel erfordert Charge und/oder MHD, der Wert fehlte. Wird auch für Einträge geliefert, die aus anderen Gründen übersprungen wurden (SMO nicht der API zugeordnet, keine zu buchende Menge).

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:pixiSetStockMultiple>
      <!-- <XML><![CDATA[<ITEMSTOCK><ITEM><ITEMKEY>1234</ITEMKEY><ITEMNRINT>ART-1001</ITEMNRINT><EANUPC>4006381333931</EANUPC><OVERWRITESTOCK>0</OVERWRITESTOCK><INVBINS><INVBIN><BINNAME>A-01-01</BINNAME><STOCK>25</STOCK><STOCKADD>0</STOCKADD><STOCKREMOVE>0</STOCKREMOVE><NEUTRALINVENTORY>0</NEUTRALINVENTORY><SMTREF></SMTREF><SMOREF></SMOREF><BATCHNUMBER>CH-2024-01</BATCHNUMBER><BESTBEFOREDATE>2025-12-31T00:00:00</BESTBEFOREDATE></INVBIN></INVBINS></ITEM></ITEMSTOCK>]]></XML> -->
      <!-- <ParameterXML><![CDATA[<ITEMSTOCK><ITEM><ITEMKEY>1234</ITEMKEY><ITEMNRINT>ART-1001</ITEMNRINT><EANUPC>4006381333931</EANUPC><OVERWRITESTOCK>0</OVERWRITESTOCK><INVBINS><INVBIN><BINNAME>A-01-01</BINNAME><STOCK>25</STOCK><STOCKADD>0</STOCKADD><STOCKREMOVE>0</STOCKREMOVE><NEUTRALINVENTORY>0</NEUTRALINVENTORY><SMTREF></SMTREF><SMOREF></SMOREF><BATCHNUMBER>CH-2024-01</BATCHNUMBER><BESTBEFOREDATE>2025-12-31T00:00:00</BESTBEFOREDATE></INVBIN></INVBINS></ITEM></ITEMSTOCK>]]></ParameterXML> -->
      <!-- <Username>shop-sync</Username> -->
    </ns1:pixiSetStockMultiple>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Settings · Lesen items · Lesen InvBin · Lesen InvBinItem · Lesen TagMatch · Lesen StockMovementOperations · Lesen StockMovementTypes · Lesen StockMovementMatching · Lesen LogTable · Schreiben ItemRecalculateStockQueue · Schreiben
SQL-Objekt:
dbo.pipiSetStockMultiple
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben