selectline-software / selectline-api

Apache License 2.0
24 stars 5 forks source link

Belegübergabe ohne Automatische Mengenanpassung mit Internal Server Error #311

Closed AM-Sartissohn closed 1 year ago

AM-Sartissohn commented 1 year ago

Details

Steps to replicate the behavior:

  1. Beleg Auftrag (ausgangsseitig) Anlegen
  2. Position anlegen mit einer nicht lagernden Handelsstückliste, in der lagernde Stücklistenunterpositionen enthalten sind
  3. einer der Artikel in der Handelsstückliste muss einen negativen Lagerbestand aufweisen
  4. Mandanteneinstellungen "Negativ lagern zulassen", keine Warnung bei negativer Lagerung
  5. manuelle Mangenanpassung in der Belegübergabe deaktivieren
  6. Request zur Belegübergabe in Belegtyp Rechung mit Positionen im Body (Property Positions, Model DocumentPositionStoreInformationUpdate) übergeben. Wir übergeben in diesem Fall für die Positions jeweils die Properties ArticleNumber, Identifier, PriceQuantity, Quantity, QuantityUnit, StoragePlaceIdentifier, TargetStoragePlaceIdentifier, TargetWarehouse, Warehouse

-> die Belegübergabe gibt einen Internal Server Error zurück. Der Beleg wird zwar angelegt, jedoch nur bis zur Position mit der Handelsstückliste

Zur Eingrenzung des Problems:

Ich weiß nicht, ob die Handelsstückliste hier relevant ist oder das Problem auch mit normalen Artikelpositionen auftreten würde, dies habe ich nicht getestet.

MatthiasGuse commented 1 year ago

Hallo,

wir werden das überprüfen und uns dann dazu melden.

Viele Grüße

AM-Sartissohn commented 1 year ago

Hallo, haben Sie hierzu inzwischen neue Informationen? Können Sie das Problem reproduzieren?

MatthiasGuse commented 1 year ago

Hallo,

das beschriebene Verhalten lässt sich bei uns nicht nachstellen. grafik Der Auftrag wird korrekt übergeben.

Der Inhalt der Übergabe sah in dem Fall so aus:

{
     "DocumentKindDestination" : "R",
     "Positions": [
         {
             "Identifier": "72C95498-BA48-4C39-9CC0-24C5A044B003",
             "ArticleNumber": "100007",
             "Quantity": 1,
             "Warehouse": "200"
         },
         {
             "Identifier": "A625E138-4DCE-443E-B747-69C40FF165AE",
             "ArticleNumber": "100001",
             "Quantity": 4,
             "Warehouse": "100"
         },
         {
             "Identifier": "935CD0B3-FB4E-4523-8CB5-503519729EFC",
             "ArticleNumber": "100003",
             "Quantity": 1,
             "Warehouse": "100"
         }
     ]
}

Bezug nehmend zu 6.:

Request zur Belegübergabe in Belegtyp Rechung mit Positionen im Body (Property Positions, Model DocumentPositionStoreInformationUpdate) übergeben. Wir übergeben in diesem Fall für die Positions jeweils die Properties ArticleNumber, Identifier, PriceQuantity, Quantity, QuantityUnit, StoragePlaceIdentifier, TargetStoragePlaceIdentifier, TargetWarehouse, Warehouse

Es sollten Properties übergeben werden, die für die jeweilige Aktion auch notwendig sind. TargetWarehouse und TargetStoragePlaceIdentifier sind nicht nötig. Ebenfalls sollte Warehouse oder StoragePlaceIdentifier angegeben werden.

Sollten Sie das Problem weiterhin haben, stellen Sie uns bitte ein konkretes Beispiel inkl. Request anhand des Mustermandanten zur Verfügung.

Viele Grüße

AM-Sartissohn commented 1 year ago

Hallo, wir haben die Fehlerquelle hier jetzt feststellen können - Ursache war, dass im Auftrag ein Chargenartikel enthalten war und wir bei der Übergabe keine Chargennummer angegeben haben. Der Fehler konnte uns dazu nicht richtig angezeigt werden, da in den Details der API-Response die Property FehlerNr. mit falschem Namen zurückgegeben wird:

{ "StatusCode": "InternalServerError", "ResponseCode": "42-000", "ResponseId": 0, "ResponseIdDescription": "Undefined", "Message": "Chargennummer fehlt.", "Details": { "SQLFehlerNr": "0", "SQLTmpID": "0", "ehlerNr": "102058", "ExtMessage": "", "ExceptionName": "ELagerungException" } }

Mit Übergabe einer Chargennummer werden die Positionen jetzt auch korrekt in den Folgebeleg übergeben. Die Frage ist jetzt aber, warum hier im Auftrag eine Chargennummer angegeben werden muss: Die API sollte ja die Bedienung des Clients abbilden. Im Auftrag sind noch keine Chargennummern festgelegt, da dort ja nur reserviert wird, aber nicht ausgelagert.

Bei der Belegübergabe eines Auftrags in einen auslagernden Beleg mit dem WaWi-Client wird dabei die Chargennummer anhand der Lagerstrategie automatisch ausgewählt bzw. bei fehlendem Lagerbestand eine neue Chargennummer entsprechend der Mandanteneinstellungen generiert. Warum ist dies bei der Belegübergabe mit der API nicht der Fall? muss hier noch irgendein weiterer Parameter beim Request mitgegeben werden?

MatthiasGuse commented 1 year ago

Hallo, die API erwartet in der Regel immer vollständige Lagerungsinformationen. Automatismen, wie die bspw. Lagerungsvorschlag anhand der Lagerstrategie sind nicht nach außen gelegt. Sie müssen also immer die vollständigen Informationen mitgeben.

Viele Grüße