pixiCreateSDeliveryByTemplate
Legt aus einer oder mehreren bestätigten Lieferantenbestellungen eine neue Lieferantenlieferung (Status NEW) an einem Lager an und liefert deren Kopfdaten.
Legt einen Lieferantenlieferschein (SDelHeader mit Positionen in SDelDetail) auf Basis einer oder mehrerer Lieferantenbestellungen als Vorlage an.
OrderNrwird an;in einzelne Bestellnummern zerlegt (dieInternalNumberder Lieferantenbestellung, z. B. eine BES-Nummer). Führende und abschließende Leerzeichen werden entfernt.- Existiert am Lager
LocIDbereits eine Lieferung mit StatusNEW, derenSDelHextOrderNreine der übergebenen Nummern enthält, bricht der Aufruf ab und liefert eine Zeile mit der SpalteERROR. - Andernfalls wird die interne Prozedur
Pixi_CreateSDeliveryByTemplateausgeführt:- Es werden nur Lieferantenbestellungen verwendet, deren Status als bestätigt gilt. Welches Statuskennzeichen geprüft wird, hängt von der Einstellung
ConfirmOrderedDocumentOnDeliveryab:0verlangtIsConfirmed = 1,1verlangtIsOrderedConfirmed = 1. - Qualifiziert sich keine Bestellung, wird nichts angelegt.
- Bei Einstellung
1werden die betroffenen, noch nicht bestätigten Lieferantenbestellungen auf den bestätigten Status gesetzt (Bestätigungsdatum und -benutzer werden gesetzt). - Es wird ein Lieferungskopf mit Status
NEW, dem angegebenen Lager, dem Lieferanten einer der Bestellungen,SDelHextOrderNr= vollständigerOrderNr-String undUserNameals anlegender/ändernder Benutzer angelegt (StandardTemplateFromBuying, falls NULL). - Für jede Bestellposition mit offener Menge (
Qty - DeliveredQty - UndeliveredQty > 0) wird eine Lieferposition mit gelieferter Menge 0, der offenen Menge als bestellter Menge, dem Lieferantenpreis sowie dem in Prozent und Endpreis umgerechneten Rabatt angelegt.
- Es werden nur Lieferantenbestellungen verwendet, deren Status als bestätigt gilt. Welches Statuskennzeichen geprüft wird, hängt von der Einstellung
- Abschließend werden die Kopfdaten der angelegten Lieferung geliefert (
SDelHKey, Datum, Lager, Nummer, Status, externe Bestellnummer, Lieferant).
Hinweise
- Laut Code-Kommentar wird dieser API-Aufruf nicht mehr gepflegt.
- Die Dublettenprüfung arbeitet mit einem Teilstring-Vergleich (
CHARINDEX) aufSDelHextOrderNr: Eine Nummer wieBES100wird auch inBES1000gefunden, daher sind Fehlalarme möglich. - Qualifiziert sich keine Lieferantenbestellung (unbekannte Nummer, falscher Status oder Einstellung
ConfirmOrderedDocumentOnDeliveryweder0noch1), wird keine Lieferung angelegt und die Ergebnismenge mit den Kopfdaten ist leer; ein Fehler wird nicht gemeldet. - Gehören die Bestellungen zu verschiedenen Lieferanten, erhält der Kopf den Lieferanten einer beliebigen Bestellung (
TOP (1)ohne Sortierung), die Positionen aller Bestellungen werden jedoch übernommen. - Das Anlegen des Kopfes und die optionale Statusänderung der Lieferantenbestellungen laufen außerhalb der Transaktion; nur das Einfügen der Positionen ist transaktional. Schlägt dieses fehl, bleibt der Kopf ohne Positionen bestehen und der Fehler wird als
ERROR --- <Meldung>ausgelöst. - Während des Einfügens der Positionen wird
CONTEXT_INFOgesetzt, um den Trigger aufSDelDetailzu unterdrücken. - Lesezugriffe verwenden
NOLOCK. Die Benutzer-ID für die Bestätigung wird überinf.UserGetByNameermittelt (nicht beigefügt).
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
OrderNr
Pflicht
|
varchar(1000) string |
– |
Eine oder mehrere Nummern von Lieferantenbestellungen ( Beispiel: |
LocID
Pflicht
|
varchar(3) string |
– |
Lager-ID, für die die Lieferung angelegt wird; wird auch für die Prüfung auf offene Lieferungen verwendet. Beispiel: |
UserName
Pflicht
|
varchar(50) string |
– |
Benutzer, der als Ersteller/Bearbeiter der Lieferung gespeichert wird; bei NULL wird Beispiel: |
Antwort
Result-Set 1 · Wenn am Lager bereits eine offene Lieferung (Status NEW) eine der Bestellnummern referenziert
Fehlerzeile; der Aufruf endet, ohne etwas anzulegen.
| Spalte | Typ | Beschreibung |
|---|---|---|
ERROR
|
varchar(52) string |
Fehlertext. |
Result-Set 2 · Andernfalls; leer, wenn keine passende Lieferantenbestellung gefunden wurde
Kopfdaten der neu angelegten Lieferantenlieferung.
| Spalte | Typ | Beschreibung |
|---|---|---|
SDelHKey
|
int |
Interner Schlüssel des Lieferungskopfes. |
SDelHDate
Kann leer sein |
datetime dateTime |
Lieferdatum (Zeitpunkt der Anlage). |
SDelHLocationID
Kann leer sein |
string |
Lager-ID der Lieferung. |
SDelHNr
Kann leer sein |
string |
Lieferungsnummer (wird nicht von diesem Aufruf gesetzt, sondern von der Datenbank vergeben). |
SDelHStatus
Kann leer sein |
string |
Status der Lieferung, nach Anlage |
SDelHextOrderNr
Kann leer sein |
string |
Die Lieferantenbestellnummern wie in |
SDelHSupplNr
Kann leer sein |
string |
Lieferantennummer der Lieferung. |
Beispielantwort
<SqlRowSet1>
<row>
<SDelHKey>4711</SDelHKey>
<SDelHDate>2024-05-14T10:23:45.123+02:00</SDelHDate>
<SDelHLocationID>001</SDelHLocationID>
<SDelHNr>4711</SDelHNr>
<SDelHStatus>NEW</SDelHStatus>
<SDelHextOrderNr>BES0001234;BES0001235</SDelHextOrderNr>
<SDelHSupplNr>L001</SDelHSupplNr>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| ERROR | ERROR: Supplier order already has an open delivery. | Am angegebenen Lager existiert bereits eine offene Lieferung mit Status `NEW`, deren `SDelHextOrderNr` eine der Bestellnummern enthält. Zuerst die bestehende Lieferung abschließen oder löschen. |
| RAISERROR | ERROR --- %s | Das Einfügen der Lieferpositionen in der internen Prozedur ist fehlgeschlagen (z. B. Constraint-Verletzung oder Divisionsfehler bei der Rabattberechnung); die ursprüngliche SQL-Fehlermeldung folgt. Der Kopf kann bereits angelegt sein. |
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:pixiCreateSDeliveryByTemplate>
<OrderNr>BES0001234;BES0001235</OrderNr>
<LocID>001</LocID>
<UserName>jdoe</UserName>
</ns1:pixiCreateSDeliveryByTemplate>
</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:pixiCreateSDeliveryByTemplate>
<OrderNr>BES0001234;BES0001235</OrderNr>
<LocID>001</LocID>
<UserName>jdoe</UserName>
</ns1:pixiCreateSDeliveryByTemplate>
</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' => 'BES0001234;BES0001235',
'LocID' => '001',
'UserName' => 'jdoe',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiCreateSDeliveryByTemplate', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiCreateSDeliveryByTemplate