pixiSetStock
Setzt den Bestand eines Artikels auf einem Lagerplatz auf einen absoluten Wert, indem die Differenz als Einbuchung oder Ausbuchung gebucht wird.
Setzt die Menge eines Artikels auf einem Lagerplatz auf NewStockQty. Die Menge wird nicht direkt überschrieben. Es wird die Differenz zur aktuellen Menge berechnet und als Lagerbewegung gebucht.
Ablauf:
- Prüft die Einstellung
API_Stock_Movements. Ist sie nicht aktiviert, wird eine Statuszeile mitStatus=ERRORgeliefert und die Verarbeitung beendet. - Prüft, ob
SMORefeine Lagerbewegungsoperation (StockMovementOperations.SMOKey) mitApplication=APIist. Andernfalls wird ein Fehler ausgelöst. - Sucht den Artikel über
EANUPC=EanUpc. - Ermittelt, ob der Artikel Chargennummern bzw. Mindesthaltbarkeitsdaten benötigt (Artikel-Tags
-6und-7). Benötigt der Artikel sie nicht, werdenBatchNumberundBestBeforeDateignoriert. Benötigt er sie, müssen sie gefüllt sein; sonst wird nichts gebucht. - Sucht den Lagerplatz über
BinName. IstLocIdangegeben, werden nur Lagerplätze dieses Lagers berücksichtigt; sonst wird der erste Lagerplatz mit diesem Namen in einem beliebigen Lager verwendet und dessen Lager für die Buchung übernommen. - Berechnet die Differenz:
NewStockQtyminus Summe vonBinItemQTYdes Artikels auf diesem Lagerplatz (alle Zeilen, unabhängig von Charge oder MHD).- Differenz > 0: Einbuchung (
Pixi_InvBinScanIn) der Differenz. - Differenz < 0: Ausbuchung (
Pixi_InvBinTakeOut) der absoluten Differenz. - Differenz = 0: keine Buchung.
- Differenz > 0: Einbuchung (
- Vor der Buchung muss die Kombination aus
SMORefundSMTrefinStockMovementMatchingexistieren; sonst wird ein Fehler protokolliert und ausgelöst.- Ist
SMTrefnicht angegeben, werden beide Werte ersetzt: bei Einbuchung die API-OperationPutToStockmit Bewegungstyp0201, bei Ausbuchung die API-OperationTakeOutmit Bewegungstyp0301. - Ist
SMTrefangegeben, werden die übergebenen WerteSMORefundSMTrefverwendet.
- Ist
- Abschließend wird der Artikel zur Bestandsneuberechnung und zum Shop-Export eingereiht (
Pixi_ExportItemChangesToShop), auch wenn nichts gebucht wurde.
Die Prozedur liefert einen Rückgabewert: 0 = verarbeitet, 1 = Artikel nicht gefunden oder benötigte Charge/MHD fehlt, 2 = Lagerplatz nicht gefunden. Im Erfolgsfall wird keine Ergebnismenge geliefert.
Hinweise
SMORefhat den StandardwertNULL, der Aufruf scheitert ohne diesen Parameter aber immer mit SMO is not assigned to API. Es muss der Schlüssel einer API-Lagerbewegungsoperation übergeben werden.- Die Rückgabewerte
1und2sind nur Rückgabewerte der Prozedur; es wird keine Statuszeile geliefert. Je nach Client sieht ein fehlender Artikel oder Lagerplatz daher wie ein Erfolg aus. - Wird
SMTrefweggelassen, dient das übergebeneSMORefnur der Eingangsprüfung und wird anschließend durch die OperationPutToStock/TakeOutersetzt. - Die Differenz wird über alle Chargen und MHDs auf dem Lagerplatz berechnet, aber mit der angegebenen
BatchNumber/BestBeforeDategebucht. Bei Artikeln mit Chargen kann das Ergebnis je Charge von der Erwartung abweichen. BestBeforeDatehat den Standardwert'', den SQL Server in1900-01-01umwandelt. Dieser Wert gilt als leer; Artikel mit MHD-Tag benötigen ein echtes Datum.- Ohne
LocIdwird der Lagerplatz perTOP 1ohneORDER BYgewählt; existiert der Name in mehreren Lagern, ist die Auswahl nicht deterministisch. - Abfragen verwenden
NOLOCK. - Die aufgerufenen Prozeduren
Pixi_InvBinScanIn/Pixi_InvBinTakeOutlehnen Mengen über der EinstellungMaxStockOperationLimitab und laufen in einer eigenen Transaktion; ihre Basisprozeduren liegen nicht vor. Fehler in den Basisprozeduren werden überlog.InsertErrorprotokolliert und erreichen den Aufrufer möglicherweise nicht. - Fehler aus den aufgerufenen Prozeduren landen im CATCH-Block dieses Aufrufs, der einen Eintrag in
LogTableschreibt und einen Fehler mit dem Inhalt der internen Fehlervariablen auslöst. Bei Fehlern, die nicht von dieser Prozedur selbst stammen, ist diese Meldung leer; der ursprüngliche Fehlertext geht verloren. - Beim Fehler SMT is not matched entstehen zwei Einträge in
LogTable(einer vor dem Auslösen, einer im CATCH-Block). - Jeder Aufruf, der die Eingangsprüfungen besteht, legt eine Zeile in
pixi.ItemRecalculateStockQueuean, auch wenn nichts gebucht oder der Artikel nicht gefunden wurde.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
EanUpc
Pflicht
|
varchar(13) string |
– |
EAN/UPC des Artikels ( Beispiel: |
BinName
Pflicht
|
varchar(50) string |
– |
Name des Lagerplatzes ( Beispiel: |
LocId
|
varchar(3) string |
NULL |
Lager-ID des Lagerplatzes. Bei Beispiel: |
NewStockQty
Pflicht
|
int | – |
Zielmenge des Artikels auf dem Lagerplatz. Beispiel: |
Username
|
varchar(50) string |
pipiSetStock |
Benutzername, der für die Lagerbewegung gespeichert wird. Beispiel: |
SMORef
|
int | NULL |
Schlüssel der Lagerbewegungsoperation ( Beispiel: |
SMTref
|
int | NULL |
Schlüssel des Lagerbewegungstyps ( Beispiel: |
BatchNumber
|
varchar(50) string |
– |
Chargennummer. Pflicht bei Artikeln mit Chargen-Tag, sonst ignoriert. Beispiel: |
BestBeforeDate
|
datetime dateTime |
– |
Mindesthaltbarkeitsdatum. Pflicht bei Artikeln mit MHD-Tag, sonst ignoriert. Der Standardwert Beispiel: |
Antwort
Result-Set 1 · Nur wenn die Einstellung API_Stock_Movements nicht aktiviert ist.
Statuszeile mit dem Fehler. Im Erfolgsfall liefert der Aufruf keine Ergebnismenge.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(5) string |
Immer |
StatusMessage
|
varchar(72) string |
Fehlertext. |
Beispielantwort
<SqlRowSet1>
<row>
<Status>ERROR</Status>
<StatusMessage>Setting "API Calls Stock Movements" (API_Stock_Movements) is not enabled.</StatusMessage>
</row>
</SqlRowSet1>
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. Sie muss in den Pixi-Einstellungen aktiviert werden. |
| RAISERROR | Error Message: API pipiSetStockMultiple: SMO is not assigned to API! | `SMORef` fehlt oder ist keine Lagerbewegungsoperation der Anwendung `API`. Es muss der Schlüssel einer API-Operation übergeben werden. |
| RAISERROR | API pipiSetStock Error message: SMT is not matched to SMO - please check Control Center - Stock Movements matching table! | Die für die Buchung verwendete Kombination aus Operation und Bewegungstyp existiert nicht in `StockMovementMatching`. Die Zuordnung muss im Control Center gepflegt oder ein passendes `SMTref` übergeben werden. |
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:pixiSetStock>
<EanUpc>4012345678901</EanUpc>
<BinName>A-01-02</BinName>
<!-- <LocId>001</LocId> -->
<NewStockQty>25</NewStockQty>
<!-- <Username>ShopSync</Username> -->
<!-- <SMORef>12</SMORef> -->
<!-- <SMTref>5</SMTref> -->
<!-- <BatchNumber>CH-2024-001</BatchNumber> -->
<!-- <BestBeforeDate>2025-12-31T00:00:00</BestBeforeDate> -->
</ns1:pixiSetStock>
</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:pixiSetStock>
<EanUpc>4012345678901</EanUpc>
<BinName>A-01-02</BinName>
<!-- <LocId>001</LocId> -->
<NewStockQty>25</NewStockQty>
<!-- <Username>ShopSync</Username> -->
<!-- <SMORef>12</SMORef> -->
<!-- <SMTref>5</SMTref> -->
<!-- <BatchNumber>CH-2024-001</BatchNumber> -->
<!-- <BestBeforeDate>2025-12-31T00:00:00</BestBeforeDate> -->
</ns1:pixiSetStock>
</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 = [
'EanUpc' => '4012345678901',
'BinName' => 'A-01-02',
// 'LocId' => '001',
'NewStockQty' => '25',
// 'Username' => 'ShopSync',
// 'SMORef' => '12',
// 'SMTref' => '5',
// 'BatchNumber' => 'CH-2024-001',
// 'BestBeforeDate' => '2025-12-31T00:00:00',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiSetStock', $soapArguments);
Verwandte Calls
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiSetStock