pixiUpdateDeliveryItem
Aktualisiert eine bestehende Artikelposition einer Lieferantenlieferung (Menge, Einkaufspreis, Charge, MHD), optional mit Zuordnung zu einer Bestellposition.
Ändert eine bestehende Position (SDelDetail) einer Lieferantenlieferung. Der Aufruf legt keine neuen Positionen an. Aktualisiert wird nur eine Position, die für den Artikel auf der Lieferung bereits vorhanden ist.
-
Lieferung ermitteln.
SDelHKeyoderDeliveryNumber(SDelHNr) angeben.SDelHSupplNrkann die Suche einschränken. Verwendet wird der erste passendeSDelHeader-Datensatz. Der Aufruf bricht ab, wenn:- keine Lieferung gefunden wird,
- der Lieferungsstatus
CLSoderINVist, - die Lieferung durch Picco gesperrt ist (
LockedByPiccogesetzt) undPiccoUsernicht dem sperrenden Benutzer entspricht.
Danach wird für alle weiteren Schritte die Lieferantennummer der Lieferung selbst verwendet.
-
Artikel ermitteln.
fpixi_GetItemKeyermittelt den Artikel überEANUPCoder, wenn keine EAN angegeben ist, überItemNrInternal. Gesucht wird in scanbaren Artikelcodes (pixi.ItemCodeverknüpft mitItemCodeType,Scannable = 1). Sind beide Werte angegeben, wird nurEANUPCverwendet. -
Optionale Bestellzuordnung. Dieser Schritt läuft nur, wenn
InternalNumberoderExternalCodeangegeben ist.InternalNumberhat Vorrang. Der Aufruf sucht inpixi.SupplierOrdernachInternalNumberbzw.ExternalCodeund prüft die RegelnError01bisError07:- der externe Code darf nicht auf mehreren Bestellungen des Lieferanten der Lieferung vorkommen,
- eine Bestellung muss gefunden werden,
- die Bestellung muss zum Lieferanten der Lieferung gehören,
- der Artikel muss auf der Bestellung stehen,
- der Bestellstatus muss für die Lieferung zulässig sein.
Die zulässigen Status hängen von der Einstellung
ConfirmOrderedDocumentOnDeliveryab:0verwendet Status mitIsConfirmed = 1,1verwendet Status mitIsOrderedConfirmed = 1. Mit der Id der gefundenen Bestellposition wird anschließend die Lieferposition gesucht, derenSDelDsorderlineRefauf diese Bestellposition verweist. -
Lieferposition ohne Bestellzuordnung ermitteln. Gelesen werden alle Positionen der Lieferung für den Artikel, bei Angabe von
SdelDkeynur diese Position. Gibt es keine Position oder mehrere Positionen ohneSdelDkey, wird ein Fehler zurückgegeben. -
Fehlende Werte ergänzen. Nicht angegebene Parameter behalten die Werte der bestehenden Position: gelieferte Menge, Charge, Mindesthaltbarkeitsdatum und Bestellpositionsreferenz. Die bestellte Menge wird immer aus der bestehenden Position übernommen.
-
Einkaufspreis aktualisieren. Ist
SupplPriceungleich 0, schreibtPixi_SetAddItemsSupPriceden Preis in die Lieferanten-Artikeldaten (AddItems). Das geschieht nur bei positiven Preisen. Die Position erhält dann Preis, Mittelpreis und Endpreis =SupplPrice, die Rabatte werden auf 0 gesetzt. IstSupplPrice0, bleiben die bisherigen Preise der Position erhalten. -
Position schreiben.
GOS_SDelDetailInsertOrUpdateaktualisiert die Position und gibt sie vollständig zurück, einschließlich Auftragskennzahlen zum Artikel.
Hinweise
- Behandlung leerer Werte: Der Code wendet
NULLIF(x, '')aufint- unddatetime-Parameter an. Dadurch werden0(und beiBestBeforeDatedas Datum1900-01-01) zu NULL. Folgen:DeliverdQty = 0setzt die Menge nicht auf 0; die bestehende Menge bleibt erhalten.SDelHKey = 0undInternalNumber = 0gelten als nicht angegeben.- Charge und Mindesthaltbarkeitsdatum können nicht geleert werden; NULL oder leer behält den bisherigen Wert.
DeliverdQtyist alsintdeklariert, Bruchmengen sind über diesen Aufruf nicht möglich.- Passt
DeliveryNumberauf mehrere Lieferungen, wird eine beliebige verwendet (TOP (1)ohneORDER BY). Für eine eindeutige AuswahlSDelHKeyoderSDelHSupplNrmitgeben. - Die Bestellsuche ist nicht auf den Lieferanten der Lieferung beschränkt. Existiert derselbe
ExternalCodebzw. dieselbeInternalNumberauch bei einer Bestellung eines anderen Lieferanten, wirdError02zurückgegeben. - Enthält die Einstellung
ConfirmOrderedDocumentOnDeliveryeinen anderen Wert als0oder1, ist kein Status zulässig und es wird immerError06zurückgegeben. Ausgewertet wird nur das erste Zeichen der Einstellung. Eine fehlende Einstellung gilt als0. - Wird die Bestellzuordnung zusammen mit
SdelDkeyverwendet, wird die angegebeneSdelDkey-Position aktualisiert. Sie wird nicht gegen die gefundene Bestellposition geprüft. - Ein negativer
SupplPricewird nicht inAddItemsgeschrieben, aber trotzdem in die Lieferposition übernommen. Pixi_SetAddItemsSupPriceaktualisiertAddItems.SupplPricefür alle Lieferanten-Artikeldatensätze mit derselbenIntLinkNr1und Lieferantennummer, nicht nur für den gelieferten Artikel.- Ist die Einstellung
InsertAddItemOnSOrdersDragDrop=1und hat der Artikel keinenAddItems-Datensatz für den Lieferanten, legtGOS_SDelDetailInsertOrUpdateeinen überPixi_InsertAddItemOnDeliveryan. Diese Prozedur liegt nicht vor; ob sie eine zusätzliche Ergebnismenge liefert, ist unbekannt. - Fehler werden als Zeile mit der Spalte
ERRORzurückgegeben. Die Prozedur liefert in diesem Fall zusätzlich den Rückgabewert1.Error04wird ohne Spaltenalias zurückgegeben. - Es wird keine explizite Transaktion verwendet. Lesezugriffe erfolgen mit
NOLOCK, das Update mitROWLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
SDelHKey
|
int | NULL |
Interner Schlüssel der Lieferung ( Beispiel: |
DeliveryNumber
|
int | NULL |
Lieferungsnummer ( Beispiel: |
UserName
|
varchar(50) string |
API |
Benutzername, der als letzter Bearbeiter der Lieferposition gespeichert wird ( Beispiel: |
ItemNrInternal
|
varchar(50) string |
NULL |
Artikelkennung, die unter den scanbaren Artikelcodes gesucht wird. Wird nur verwendet, wenn Beispiel: |
EANUPC
|
varchar(13) string |
NULL |
EAN/UPC des Artikels, gesucht unter den scanbaren Artikelcodes. Hat Vorrang vor Beispiel: |
SDelHSupplNr
|
varchar(4) string |
NULL |
Optionaler Filter auf die Lieferantennummer bei der Suche der Lieferung. Danach wird die Lieferantennummer der gefundenen Lieferung verwendet. Beispiel: |
DeliverdQty
|
int | NULL |
Neue gelieferte Menge. NULL oder 0 behält die bestehende Menge der Position. Beispiel: |
SupplPrice
|
money decimal |
0 |
Neuer Einkaufspreis. Ist er ungleich 0, wird er in die Position geschrieben (Preis, Mittelpreis und Endpreis; Rabatte werden auf 0 gesetzt). Positive Werte werden zusätzlich in Beispiel: |
PiccoUser
|
varchar(50) string |
NULL |
Picco-Benutzername. Wird benötigt, um eine durch Picco gesperrte Lieferung zu bearbeiten; er muss dem sperrenden Benutzer entsprechen. Beispiel: |
InternalNumber
|
int | NULL |
Interne Nummer einer Bestellung ( Beispiel: |
ExternalCode
|
varchar(50) string |
NULL |
Externer Code einer Bestellung ( Beispiel: |
BatchNumber
|
varchar(50) string |
NULL |
Chargennummer der Position. NULL oder leer behält den bisherigen Wert. Beispiel: |
BestBeforeDate
|
datetime dateTime |
NULL |
Mindesthaltbarkeitsdatum der Position. NULL behält den bisherigen Wert. Beispiel: |
SdelDkey
|
int | NULL |
Schlüssel der Lieferposition ( Beispiel: |
Antwort
Result-Set 1 · Wenn eine Prüfung fehlschlägt (alle Fehler außer Error04)
Eine Zeile mit dem Fehlertext; es wird nichts geändert.
| Spalte | Typ | Beschreibung |
|---|---|---|
ERROR
|
nvarchar string |
Fehlermeldung. |
Result-Set 2 · Bei Error04 (Suche über ExternalCode, Artikel nicht auf der Bestellung)
Eine Zeile mit dem Fehlertext in einer Spalte ohne Alias; der Spaltenname in der Antwort ist im Code nicht festgelegt.
| Spalte | Typ | Beschreibung |
|---|---|---|
(unnamed)
|
varchar string |
Text |
Result-Set 3 · Bei Erfolg
Die aktualisierte Lieferposition, wie von GOS_SDelDetailInsertOrUpdate zurückgegeben.
| Spalte | Typ | Beschreibung |
|---|---|---|
SDelDkey
|
int |
Schlüssel der Lieferposition. |
SDelDHref
|
int |
Schlüssel des Lieferungskopfs. |
SDelDItemRef
|
int |
Artikelschlüssel. |
SDelDItemName
Kann leer sein |
string |
Artikelname. |
SDelDqtyDelivered
|
money decimal |
Gelieferte Menge. |
SDelDqtyOrdered
|
money decimal |
Bestellte Menge. |
SDelDsorderlineRef
Kann leer sein |
int |
Referenz auf die Bestellposition. |
SDelDsPrice
Kann leer sein |
money decimal |
Einkaufspreis. |
SDelDsDiscount
Kann leer sein |
money decimal |
Rabatt. |
SDelDsFinalPrice
Kann leer sein |
money decimal |
Endpreis. |
SDelDcreateDate
Kann leer sein |
datetime dateTime |
Erstellungsdatum der Position. |
SDelDcreateEmp
Kann leer sein |
string |
Benutzer, der die Position angelegt hat. |
SDelDupdateDate
Kann leer sein |
datetime dateTime |
Datum der letzten Änderung. |
SDelDupdateEmp
Kann leer sein |
string |
Benutzer der letzten Änderung. |
SDelDsAddDiscount
Kann leer sein |
money decimal |
Zusatzrabatt. |
SDelDsMidPrice
Kann leer sein |
money decimal |
Mittelpreis. |
BatchNumber
Kann leer sein |
varchar(50) string |
Chargennummer. |
BestBeforeDate
Kann leer sein |
datetime dateTime |
Mindesthaltbarkeitsdatum. |
BuyingMatchQty
|
decimal |
Summe der |
OpenCustomersCountForItem
|
int |
Anzahl der Kunden mit aktiven Auftragspositionen für den Artikel im Lager der Lieferung. |
OpenOrdersCountForItem
|
int |
Anzahl der Aufträge mit aktiven Auftragspositionen für den Artikel im Lager der Lieferung. |
OpenQTYSforItem
Kann leer sein |
decimal |
Gesamtmenge aktiver Auftragspositionen für den Artikel im Lager der Lieferung. |
ItemNrSuppl
Kann leer sein |
string |
Lieferanten-Artikelnummer aus |
ItemNrInt
Kann leer sein |
string |
Interne Artikelnummer aus |
EANUPC
Kann leer sein |
string |
EAN/UPC aus |
Beispielantwort
<SqlRowSet1>
<row>
<ERROR>Item not exist on delivery</ERROR>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | You must provide Delivery referenc or Delivery number. | Weder `SDelHKey` noch `DeliveryNumber` angegeben (oder 0). |
| ERROR | You must provide item EAN or ItemNrInternal. | Weder `EANUPC` noch `ItemNrInternal` angegeben. |
| ERROR | For given parameters (@SDelHKey, @SDelHNr, @SDelHSupplNr) no delivery document found. | Keine Lieferung passt zu Schlüssel, Nummer und Lieferantennummer. |
| ERROR | You cant update items from closed or invoiced deliveries. | Die Lieferung hat den Status `CLS` oder `INV`. |
| ERROR | Delivery is locked by picco | Die Lieferung ist durch Picco gesperrt und `PiccoUser` entspricht nicht dem sperrenden Benutzer. |
| ERROR | Item with EANUPC {EANUPC} does not exist. | Kein scanbarer Artikelcode entspricht der angegebenen EAN. |
| ERROR | Item with ItemNrInternal {ItemNrInternal} does not exist. | Kein scanbarer Artikelcode entspricht `ItemNrInternal` (und keine EAN angegeben). |
| ERROR | Error01: External Code belongs to multiple Purchase orders | Suche über `ExternalCode`: Der Code existiert auf mehreren Bestellungen des Lieferanten der Lieferung. Stattdessen `InternalNumber` verwenden. |
| ERROR | Error02: Purchase order belongs to a different supplier | Eine über `InternalNumber`/`ExternalCode` gefundene Bestellung gehört zu einem anderen Lieferanten als die Lieferung. |
| ERROR | Error03: No Purchase Order match for External Code | Keine Bestellung mit dem angegebenen `ExternalCode` vorhanden. |
| ERROR | Error04: Item not found on Purchase Order | Suche über `ExternalCode`: Die Bestellung (in zulässigem Status) enthält keine Position für den Artikel. Wird ohne Spaltenalias zurückgegeben. |
| ERROR | Error05: Item not found on Purchase Order | Suche über `InternalNumber`: Die Bestellung (in zulässigem Status) enthält keine Position für den Artikel. |
| ERROR | Error06: Purchase Order is not on proper status | Der Bestellstatus ist laut Einstellung `ConfirmOrderedDocumentOnDelivery` für die Lieferung nicht zulässig. |
| ERROR | Error07: No Purchase Order match for Internal Number | Keine Bestellung mit der angegebenen `InternalNumber` vorhanden. |
| ERROR | Item not exist on delivery | Die Lieferung enthält keine Position für den Artikel (bzw. für die angegebene `SdelDkey`). Neue Positionen können mit diesem Aufruf nicht angelegt werden. |
| ERROR | Multiple rows for this item exist, you must provide SdelDkey (delivery item line ID) | Der Artikel kommt auf mehreren Positionen der Lieferung vor; `SdelDkey` angeben. |
| ERROR | Purchase Order item with InternalNumber or ExternalCode reference does not exist on Delivery. | Die gefundene Bestellposition wird von keiner Position dieser Lieferung für den Artikel referenziert. |
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:pixiUpdateDeliveryItem>
<!-- <SDelHKey>10452</SDelHKey> -->
<!-- <DeliveryNumber>2024117</DeliveryNumber> -->
<!-- <UserName>API</UserName> -->
<!-- <ItemNrInternal>ART-100234</ItemNrInternal> -->
<!-- <EANUPC>4006381333931</EANUPC> -->
<!-- <SDelHSupplNr>LIEF</SDelHSupplNr> -->
<!-- <DeliverdQty>24</DeliverdQty> -->
<!-- <SupplPrice>12.50</SupplPrice> -->
<!-- <PiccoUser>picco01</PiccoUser> -->
<!-- <InternalNumber>5871</InternalNumber> -->
<!-- <ExternalCode>PO-2024-0815</ExternalCode> -->
<!-- <BatchNumber>CH-2024-07</BatchNumber> -->
<!-- <BestBeforeDate>2025-12-31T00:00:00</BestBeforeDate> -->
<!-- <SdelDkey>883104</SdelDkey> -->
</ns1:pixiUpdateDeliveryItem>
</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:pixiUpdateDeliveryItem>
<!-- <SDelHKey>10452</SDelHKey> -->
<!-- <DeliveryNumber>2024117</DeliveryNumber> -->
<!-- <UserName>API</UserName> -->
<!-- <ItemNrInternal>ART-100234</ItemNrInternal> -->
<!-- <EANUPC>4006381333931</EANUPC> -->
<!-- <SDelHSupplNr>LIEF</SDelHSupplNr> -->
<!-- <DeliverdQty>24</DeliverdQty> -->
<!-- <SupplPrice>12.50</SupplPrice> -->
<!-- <PiccoUser>picco01</PiccoUser> -->
<!-- <InternalNumber>5871</InternalNumber> -->
<!-- <ExternalCode>PO-2024-0815</ExternalCode> -->
<!-- <BatchNumber>CH-2024-07</BatchNumber> -->
<!-- <BestBeforeDate>2025-12-31T00:00:00</BestBeforeDate> -->
<!-- <SdelDkey>883104</SdelDkey> -->
</ns1:pixiUpdateDeliveryItem>
</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 = [
// 'SDelHKey' => '10452',
// 'DeliveryNumber' => '2024117',
// 'UserName' => 'API',
// 'ItemNrInternal' => 'ART-100234',
// 'EANUPC' => '4006381333931',
// 'SDelHSupplNr' => 'LIEF',
// 'DeliverdQty' => '24',
// 'SupplPrice' => '12.50',
// 'PiccoUser' => 'picco01',
// 'InternalNumber' => '5871',
// 'ExternalCode' => 'PO-2024-0815',
// 'BatchNumber' => 'CH-2024-07',
// 'BestBeforeDate' => '2025-12-31T00:00:00',
// 'SdelDkey' => '883104',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiUpdateDeliveryItem', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiUpdateDeliveryItem