pixi_CreateSDeliveryByTemplate
Legt aus einer oder mehreren bestätigten Lieferantenbestellungen eine neue Lieferantenlieferung (Status NEW) an und führt anschließend eine Abfrage der Lieferungsköpfe aus.
Veralteter Wrapper, der anhand von Lieferantenbestellungen als Vorlage einen Lieferantenlieferschein (SDelHeader / SDelDetail) anlegt. Anschließend ruft er eine seitenweise Liste der Lieferungsköpfe auf.
Schritt 1 – Lieferung anlegen (über Pixi_CreateSDeliveryByTemplate):
OrderNrwird an;getrennt. Jedes Element wird mit der internen Nummer (InternalNumber) einer Lieferantenbestellung abgeglichen.- Es werden nur Lieferantenbestellungen in einem passenden Status verwendet. Das hängt von der Einstellung
ConfirmOrderedDocumentOnDeliveryab:0: Bestellungen, deren Status als bestätigt markiert ist (IsConfirmed = 1).1: Bestellungen, deren Status als bestellt-bestätigt markiert ist (IsOrderedConfirmed = 1). Diese Bestellungen werden danach auf den ersten bestätigten Status gesetzt. Zusätzlich werden Bestätigungsdatum, bestätigender Benutzer, Änderungsdatum und ändernder Benutzer gesetzt.
- Qualifiziert sich keine Bestellung, wird nichts angelegt.
- Andernfalls wird ein Lieferungskopf mit folgenden Werten eingefügt:
- Status
NEWund LagerLocID - die Lieferantennummer einer der gefundenen Bestellungen
- der vollständige
OrderNr-String als externe Bestellnummer UserNameals anlegender und ändernder Mitarbeiter sowie das aktuelle Datum
- Status
- Für jede Bestellposition mit offener Menge > 0 wird eine Lieferposition angelegt. Die offene Menge ist
Qty - DeliveredQty - UndeliveredQty.- Die gelieferte Menge ist
0, die bestellte Menge ist die offene Menge. - Lieferantenpreis und Rabatt stammen aus der Bestellposition. Ein Prozentrabatt wird direkt übernommen; ein Betragsrabatt wird pro Stück in einen Prozentwert umgerechnet.
- End- und Mittelpreis sind Preis minus Rabattbetrag.
- Die gelieferte Menge ist
Schritt 2 – Listenabfrage (über Pixi_GetSDelHeaderByPage): Der Code fragt Lieferungsköpfe des Lagers LocID mit Status NEW oder INV ab (das Argument ShowInv = NULL wird zu 1). Der Aufruf übergibt Seitennummer 0, daher lautet das Zeilenfenster RowNum BETWEEN -PerPage+1 AND 0. Die zurückgegebene Ergebnismenge enthält deshalb nie Zeilen.
Die ID der neuen Lieferung wird nicht zurückgegeben.
Hinweise
-
Laut Code-Kommentar wird dieser API-Call nicht mehr gepflegt.
-
Die zurückgegebene Ergebnismenge ist immer leer, weil Seite
0angefordert wird. Sie eignet sich nicht, um die neue Lieferung zu finden. Die Lieferungsköpfe sind separat abzufragen, z. B. über Lager, StatusNEWund externe Bestellnummer. -
Nur das Einfügen der Positionen läuft in einer Transaktion. Folgende Schritte laufen davor und werden bei einem Fehler beim Einfügen der Positionen nicht zurückgerollt:
- die Statusänderung der Lieferantenbestellungen (Einstellung
1) - das Einfügen des Kopfes
Ein Fehler kann daher einen Lieferungskopf ohne Positionen hinterlassen.
- die Statusänderung der Lieferantenbestellungen (Einstellung
-
Hat die Einstellung
ConfirmOrderedDocumentOnDeliveryeinen anderen Wert als0oder1, qualifiziert sich keine Bestellung und es wird nichts angelegt. -
Gehören die Bestellungen zu verschiedenen Lieferanten, erhält der Kopf die Lieferantennummer einer beliebigen Bestellung (
TOP (1)ohneORDER BY). Die Positionen aller Bestellungen werden dennoch übernommen. -
Ist
UserNameNULL, verwendet die innere ProzedurTemplateFromBuying. -
Während des Einfügens der Positionen wird
CONTEXT_INFOauf0x10005gesetzt, um den TriggerSDelDetail_IUDzu umgehen. -
Bestelldaten werden mit
NOLOCKgelesen. -
Die Seitengröße der Listenabfrage stammt aus der Einstellung
BuyingShowPerTab(Standard 500). -
OrderNrist in diesem Wrapper auf 1000 Zeichen begrenzt.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderNr
Pflicht
|
varchar(1000) string |
– |
Interne Nummern der Lieferantenbestellungen, die als Vorlage dienen, getrennt durch Beispiel: |
LocID
Pflicht
|
varchar(3) string |
– |
Lager-ID der neuen Lieferung. Die Listenabfrage wird ebenfalls nach diesem Lager gefiltert. Beispiel: |
UserName
Pflicht
|
varchar(50) string |
– |
Benutzername, der als anlegender/ändernder Mitarbeiter gespeichert wird. Er dient bei Einstellung Beispiel: |
Antwort
Result-Set 1 · Immer; enthält nie Zeilen, weil der Code Seite 0 anfordert.
Liste der Lieferungsköpfe des Lagers (Status NEW oder INV), erzeugt von der inneren Listenprozedur.
| Spalte | Typ | Beschreibung |
|---|---|---|
SDelHKey
|
int |
Schlüssel des Lieferungskopfes. |
SDelHDate
Kann leer sein |
datetime dateTime |
Lieferdatum. |
SDelHLocationID
Kann leer sein |
string |
Lager-ID. |
SDelHSupplNr
Kann leer sein |
string |
Lieferantennummer. |
SDelHNr
Kann leer sein |
string |
Liefernummer. |
SDelHNote
Kann leer sein |
string |
Notiz. |
SDelHStatus
Kann leer sein |
string |
Status (NEW, CLS, INV). |
SDelHCreateDate
Kann leer sein |
datetime dateTime |
Anlagedatum. |
SDelHCreateEmp
Kann leer sein |
string |
Anlegender Mitarbeiter. |
SDelHUpdateDate
Kann leer sein |
datetime dateTime |
Datum der letzten Änderung. |
SDelHUpdateEmp
Kann leer sein |
string |
Zuletzt ändernder Mitarbeiter. |
SDelHextInvoiceNr
Kann leer sein |
string |
Externe Rechnungsnummer. |
SDelHextOrderNr
Kann leer sein |
string |
Externe Bestellnummer(n), durch |
SDelHfinalDicsount
Kann leer sein |
decimal |
Endrabatt der Lieferung. |
PiccoUser
Kann leer sein |
string |
Picco-Benutzer, der die Lieferung bearbeitet. |
LockedByPicco
Kann leer sein |
string |
Sperrkennzeichen durch Picco. |
SupplName
Kann leer sein |
string |
Lieferantenname (Left Join). |
SuppliersKey
Kann leer sein |
int |
Lieferantenschlüssel (Left Join). |
ExternalReceiptNr
Kann leer sein |
string |
Externe Belegnummer. |
Beispielantwort
<SqlRowSet1/>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| RAISERROR | ERROR --- %s | Das Einfügen der Lieferpositionen ist fehlgeschlagen; `%s` ist die ursprüngliche SQL-Fehlermeldung. Das Einfügen der Positionen wird zurückgerollt, Kopf und ggf. Statusänderungen der Bestellungen bleiben bestehen. |
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:pixi_CreateSDeliveryByTemplate>
<OrderNr>100234;100235</OrderNr>
<LocID>001</LocID>
<UserName>jdoe</UserName>
</ns1:pixi_CreateSDeliveryByTemplate>
</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:pixi_CreateSDeliveryByTemplate>
<OrderNr>100234;100235</OrderNr>
<LocID>001</LocID>
<UserName>jdoe</UserName>
</ns1:pixi_CreateSDeliveryByTemplate>
</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 = [
'OrderNr' => '100234;100235',
'LocID' => '001',
'UserName' => 'jdoe',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixi_CreateSDeliveryByTemplate', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipi_CreateSDeliveryByTemplate