Hilfe mit PlentySetCurrentStocks (v115)

Hallo Forum,
ich habe in meinem Flow SH_saveItemData Probleme mit dem Step PlentySetCurrentStocks.

Hier soll in Step sieben der Bestand auf Null gesetzt werden, wenn er negativ ist. Allerdings muss ich dazu wohl zwingend eine StorageLocationColumn angeben?
Nun, wenn ich die StorageLocationID ("-2147483648") angebe die mir PlentyGetItemsBase ursprünglich geliefert hat, gibts eine Warnung "WARNING:ERROR: null StorageLocation=Missing parameter;" seitens Synesty, der Request sieht so aus:

<item>
  <SKU>0-0-1000</SKU>
  <WarehouseID>11</WarehouseID>
  <Reason>0</Reason>
  <PhysicalStock>0</PhysicalStock>
  <StorageLocation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="1"/>
</item>


Wenn ich stattdessen eine Zeile die durchgehend "0" enthält als StorageLocationColumn angebe, läuft der Flow problemlos durch, der Request sieht so aus:

<item>
  <SKU>0-0-1000</SKU>
  <WarehouseID>11</WarehouseID>
  <Reason>0</Reason>
  <PhysicalStock>0</PhysicalStock>
  <StorageLocation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="1"/>
</item>


Allerdings wird in beiden Fällen keine Änderung des Warenbestandes vorgenommen?

Alle zwingend benötigten Parameter sind vorhanden, die Berechtigungen am Benutzer stimmen auch... Was mache ich falsch?

Danke, Daniel

PS: Wenns dann mal klappt, würde ich auch gerne einen ReasonCode angeben. Allerdings ist der Link tot, der im UI als Referenz angegeben wird: http://man.plentymarkets.eu/en/soap-api/important-notes/stock-calls/

Ups, der zweite Request sieht natürlich so aus:
<item>
<SKU>0-0-1000</SKU>
<WarehouseID>11</WarehouseID>
<Reason>0</Reason>
<PhysicalStock>0</PhysicalStock>
<StorageLocation>0</StorageLocation>
</item>

Hallo Herr Jackel,


der GetItemsBase Step liefert in der StorageLocation leider die "-2147483648", wenn der Artikel im Hauptlager keinen Bestand gesetzt hat (Bestandseintrag in Plenty nicht vorhanden). In diesem Fall sollte der Artikel im Hauptlager auch keinen Bestand haben oder handelt sich um ein Artikelpaket (Bundle). Wenn sie keine Lagerorte verwenden können sie die StorageLocation fest auf 0 setzen, damit der Bestand immer an der Standard-Lagerposition gesetzt wird. Ihr 2. Request sollte eigentlich funktionieren.


Die Reason IDs hat Plenty offensichtlich aus der SOAP Doku entfernt. Sie finden diese aber in der REST Doku unter StockManagment -> Correct Stock . Diese IDs sollten auch bei den SOAP Calls funktionieren.


image


Hallo Support,
das mit dem Bestand am Hauptlager kann ich leider nicht nachvollziehen?

Ich hab mir nun extra einen Testartikel (ItemID 536777 / VariantenID 17451) und einen expliziten Testflow test_SetCurrentStock angelegt.

Der Artikel hat als Hauptlager wie üblich "A Thale SH" (ID 11) ausgewählt, und hat dort auch Bestand:

image


Und der Output vom GetItemsBase passt auch dazu:

image


1) Nur, das eben die StorageLocation nicht korrekt ist -.-
Aber am (fehlenden) Bestand im Hauptlager kann das Ganze dann ja wohl nicht liegen?

2) Des weiteren benutzen wir leider konsequent Lagerorte, so dass eine feste StorageLocation von "0" auch keine praktikable Lösung ist. Oder?

3) Außerdem geht der Call mit StorageLocation="0" zwar ohne Fehler durch, aber kommt immer noch nicht im System an...

Request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <ver:Header xmlns:ver="SOAP-ENV">
            <verifyingToken>
                <UserID>redacted</UserID>
                <Token>redacted</Token>
            </verifyingToken>
        </ver:Header>
    </soapenv:Header>
    <soapenv:Body>
        <ns1:SetCurrentStocks xmlns:ns1="http://synestybeta7.plentymarkets-x1.com/plenty/api/soap/version115/">
            <oPlentySoapRequest_SetCurrentStocks>
                <CurrentStocks>
                    <item>
                        <SKU>0-0-17451</SKU>
                        <WarehouseID>11</WarehouseID>
                        <Reason>0</Reason>
                        <PhysicalStock>0</PhysicalStock>
                        <StorageLocation>0</StorageLocation>
                    </item>
                </CurrentStocks>
            </oPlentySoapRequest_SetCurrentStocks>
        </ns1:SetCurrentStocks>
    </soapenv:Body>
</soapenv:Envelope>

Response:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.samenhaus.de/plenty/api/soap/version115/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:SetCurrentStocksResponse>
            <return xsi:type="ns1:PlentySoapResponse_SetCurrentStocks">
                <Success xsi:type="xsd:boolean">true</Success>
                <ResponseMessages xsi:type="ns1:ArrayOfPlentysoapresponsemessage">
                    <item xsi:type="ns1:PlentySoapResponseMessage">
                        <Code xsi:type="xsd:int">100</Code>
                        <IdentificationKey xsi:type="xsd:string">SKU</IdentificationKey>
                        <IdentificationValue xsi:type="xsd:string">0-0-17451</IdentificationValue>
                        <SuccessMessages xsi:type="ns1:ArrayOfPlentysoapresponsesubmessage">
                            <item xsi:type="ns1:PlentySoapResponseSubMessage">
                                <Value xsi:type="xsd:string">17451</Value>
                                <Key xsi:type="xsd:string">VariationID</Key>
                            </item>
                        </SuccessMessages>
                        <ErrorMessages xsi:nil="true" />
                        <Warnings xsi:nil="true" />
                    </item>
                </ResponseMessages>
            </return>
        </ns1:SetCurrentStocksResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Die Warenbewegungen bleiben leer :/
Was kann ich weiter tun um hier bei der Fehlersuche behilflich zu sein?
Liegt der Fehler auf Plenty-Seite?

Danke, Daniel

PS: Wenn ihr eure Namen unter eure Posts schreiben würdet könnte man euch mit diesem anreden ;-) Fänd ich angenehmer...

Hallo Daniel,

wir mussten uns das selbst nochmal anschauen. Es verhält sich aktuell wie folgt:

Die StorageLocation und MainWarehouse wird aus der GetItemsBase Reponse von Plenty übernommen (siehe https://www.plentymarkets.eu/handbuch/datenaustausch/soap-api/call-index/getitemsbase/).

image


Die StorageLocation am Artikel -> Bestand -> Einstellungen gibt es scheinbar nicht mehr. Wahrscheinlich ist das Feld deshalb immer leer bzw. nicht gesetzt, was zu der -2147483648 führt.
Der Bestand ("PhyStockMainWarehouse" und "NetStockMainWarehouse") wird in einem extra GetCurrentStocks Call für das Hauptlager des Artikels abgerufen. Hier kommen dann die StorageLocationID(s), der Bestände im Hauptlager mit. Das können allerdings mehrere IDs sein. Wir werden den GetItemsBase Step anpassen, sodass die StorageLocationID Spalte mit den IDs aus dem GetCurrentStocks Call befüllt wird (als komma-separierte Liste).

Du kannst aber jetzt schon den GetCurrentStocks Step verwenden. Hier bekommst du für StorageLocation eine Zeile. Den Bestand der Lagerposition findest du in der Spalte "storageLocationStock". Den gesamten Phy- bzw. Netto-Warenbestand des Lager in den Spalten "phyStockInWarehouse" und "netStockInWarehouse".


Dein Call mit StorageLocation="0" funktioniert ohne Fehler, da es technisch korrekt ist. Es passiert aber nichts in Plenty(keine Warenbestandbuchung), da am Standard-Lagerort kein Bestand vorhanden ist. Du kannst zum Testen erst einen Bestand > 0 mit StorageLocation="0" setzten und danach wieder 0 setzen. Dann sollte auch eine Buchung in Plenty angezeigt werden.


Ich hoffe das war einigermaßen verständlich und hilft dir weiter.


VG Torsten