Postman-Collection
Suppliers Schreiben

pixiCreateDelivery

Legt eine Lieferantenlieferung (Wareneingang) mit Status NEW an, entweder aus einer bestätigten Lieferantenbestellung oder aus per XML übergebenen Artikelzeilen.

Der Aufruf legt einen Lieferungskopf in SDelHeader (Status NEW) und die zugehörigen Positionen in SDelDetail an. Es gibt zwei Modi, gesteuert über OrderNr.

Kopfwerte

  • Ohne ParameterXML werden die einfachen Parameter verwendet.
  • Mit ParameterXML ersetzen die Werte des einzigen Knotens /CREATE_DELIVERY/Delivery die Werte LocID (Standard 001), OrderNr (Standard 0), UserName (Standard API), die Notiz und die externe Bestellnummer. SupplNr aus dem XML hat Vorrang, sonst gilt der Parameter SupplNr. ExternalReceiptNr kann nur im XML übergeben werden. Ist die LocID unbekannt, wird eine Fehlerzeile geliefert.

Modus 1: OrderNr <> 0 (Vorlage aus Lieferantenbestellung)

  1. Der Lieferant wird aus der Bestellung ermittelt (pixi.SupplierOrder.InternalNumber = OrderNr). Deren Lieferlager muss LocID entsprechen.
  2. Die Bestellung muss einen lieferbaren Status haben: bestätigt (IsConfirmed) bei Einstellung ConfirmOrderedDocumentOnDelivery = 0, bestellt oder bestätigt (IsOrderedConfirmed) bei 1.
  3. Es darf noch keine Lieferung im Status NEW existieren, die die Bestellnummer referenziert.
  4. Die Lieferung wird über Pixi_CreateSDeliveryByTemplate erzeugt. Sie erhält je Bestellposition mit offener Menge (bestellt minus geliefert minus nicht geliefert) eine Position. Die gelieferte Menge ist 0, Preis und Rabatt stammen aus der Bestellposition.

Modus 2: OrderNr = 0 (freie Lieferung / XML-Positionen)

  1. Der Lieferant (SupplNr) muss angegeben sein und existieren.
  2. Jeder Knoten ITEMS/Item wird über AddItems dieses Lieferanten einem Artikel zugeordnet, per ItemNrInt, EAN oder ItemNrSuppl. Zeilen ohne passenden Artikel werden als fehlgeschlagen gemeldet.
  3. Eine Zeile mit InternalNumber wird der Bestellung mit dieser internen Nummer zugeordnet. Eine Zeile nur mit ExternalCode wird der Bestellung mit diesem externen Code zugeordnet. Es zählen nur Bestellungen mit Lieferlager LocID, und der Artikel wird in den Bestellpositionen gesucht.
  4. Zeilen, die eine Zuordnungsregel verletzen (Error01–Error07), werden als fehlgeschlagen gemeldet und nicht geliefert. Zeilen ohne InternalNumber und ExternalCode werden ohne Bezug zu einer Bestellposition geliefert.
  5. Für jede verbleibende Zeile gilt:
    • Ordered ist der XML-Wert, falls ungleich 0, sonst die Menge der Bestellposition.
    • SupplPrice ist der XML-Wert, sonst der Preis der Bestellposition.
    • Delivered wird mit der Bestelleinheit des Artikels multipliziert, wenn beim Lieferanten UsePackingUnitAtCreateDelivery gesetzt ist.
    • Der Rabatt ist 0.
  6. Das Kopffeld PurchaseOrderNr enthält eine kommagetrennte Liste aller zugeordneten Bestellnummern. Wurde keine Bestellung zugeordnet, enthält es die externe Bestellnummer ohne abschließendes ;.
  7. Bei fehlgeschlagenen Zeilen wird ein Block Failed To Import Line Items: mit diesen Zeilen an die Lieferungsnotiz angehängt. Die Notiz ist insgesamt auf 8000 Zeichen begrenzt.
  8. Ohne Positionen wird nur ein Kopf angelegt.

Ergebnis

  • Ergebnismenge 1: der angelegte Lieferungskopf.
  • Ergebnismenge 2: die Positionen, ergänzt um die Kennungen aus der Anfrage.
  • Ergebnismenge 3 (nur bei XML-Positionen in Modus 2): die fehlgeschlagenen Zeilen.

Bei Validierungsfehlern wird statt dieser Ergebnismengen eine einzelne Zeile mit der Spalte ERROR geliefert.

Hinweise

  • Keine Transaktion. Kopf und Positionen werden in dieser Prozedur nacheinander ohne explizite Transaktion eingefügt. Ein Laufzeitfehler mittendrin kann einen Kopf mit nur einem Teil der Positionen hinterlassen. Der Vorlagenweg verwendet nur für die Positionen eine eigene Transaktion.
  • Vorlagenweg ändert den Bestellstatus. Bei ConfirmOrderedDocumentOnDelivery = 1 setzt Pixi_CreateSDeliveryByTemplate die Lieferantenbestellung auf den bestätigten Status. Fehler dieser Prozedur werden als ERROR --- … ausgelöst.
  • Prüfung auf offene Lieferung ist ein Teilstring-Vergleich. Die Prüfung auf eine bestehende NEW-Lieferung sucht die Bestellnummer als Text in SDelHextOrderNr. Bestellung 123 wird daher auch durch eine offene Lieferung zu Bestellung 1234 blockiert.
  • ExternalReceiptNr wird nur aus dem XML gelesen. Duplikate je Lieferant werden abgewiesen.
  • SuplierOrderNRExternal wird meist überschrieben. Mit XML wird der Wert bei OrderNr = 0 auf NULL gesetzt. Bei OrderNr <> 0 wird er gar nicht weitergegeben. Wirksam ist er daher nur ohne XML, als Ersatzwert für PurchaseOrderNr.
  • Vorrang der Notiz. Mit XML ersetzt die Notiz aus dem XML (oder ein Leerstring) den Parameter Note. Im Vorlagenmodus wird bei leerer XML-Notiz auf den Parameter Note zurückgegriffen.
  • LocID wird nur auf dem XML-Weg geprüft. Ohne XML und mit OrderNr = 0 wird auch bei unbekannter LocID ein Kopf angelegt.
  • Ignorierte XML-Elemente. ItemName und ItemKey in den XML-Positionen werden gelesen, aber ignoriert. Name und Schlüssel stammen immer aus den Artikelstammdaten.
  • Eine Anfragezeile kann mehrere Lieferpositionen erzeugen. Steht der Artikel mehrfach in der zugeordneten Bestellung, entsteht je Bestellposition eine Lieferposition, jeweils mit der vollen Liefermenge.
  • Error02 bei geteilten externen Codes. Die Zuordnung per ExternalCode findet auch Bestellungen anderer Lieferanten am selben Lager, und solche Zeilen werden mit Error02 abgewiesen.
  • Ungesicherte Lesezugriffe. Die meisten Lesezugriffe verwenden NOLOCK.
  • Nummerierung in Kommentaren. Kommentare im Code nennen die Menge der fehlgeschlagenen Zeilen "result set 4", tatsächlich ist es die dritte gelieferte Ergebnismenge.

Parameter

Parameter Typ Standardwert Beschreibung
LocID
varchar(3)
string
001

Lager der Lieferung. Wird durch LocID im XML überschrieben.

Beispiel: 001

OrderNr
int 0

Interne Nummer der Lieferantenbestellung. 0 legt eine freie Lieferung aus XML-Positionen an; jeder andere Wert legt die Lieferung aus dieser Bestellung als Vorlage an. Wird durch OrderNr im XML überschrieben.

Beispiel: 0

SupplNr
varchar(4)
string
NULL

Lieferantennummer. Bei OrderNr = 0 erforderlich, sofern nicht im XML angegeben. Bei OrderNr <> 0 wird der Lieferant der Bestellung verwendet.

Beispiel: LIE1

SuplierOrderNRExternal
varchar(8000)
string
NULL

Externe Bestellnummer, Ersatzwert für PurchaseOrderNr, wenn keine Bestellung zugeordnet wird. Ein abschließendes ; wird entfernt. Faktisch nur ohne XML wirksam.

Beispiel: EXT-4711

UserName
varchar(50)
string
API

Benutzer, der als Ersteller und letzter Bearbeiter gespeichert wird. Wird durch Username im XML überschrieben.

Beispiel: WMS

Note
ntext
string
NULL

Notiz zur Lieferung, auf 8000 Zeichen gekürzt. Mit XML wird sie durch die XML-Notiz ersetzt; im Vorlagenmodus dient sie als Ersatz bei leerer XML-Notiz.

Beispiel: Lieferung per Spedition

ParameterXML
xml NULL

Optionales XML mit genau einem Kopf CREATE_DELIVERY/Delivery und, bei OrderNr = 0, Positionen unter ITEMS/Item.

Beispiel:

<CREATE_DELIVERY>
  <Delivery>
    <LocID>001</LocID>
    <OrderNr>0</OrderNr>
    <SupplNr>LIE1</SupplNr>
    <SupplOrderNrExt>EXT-4711</SupplOrderNrExt>
    <Username>WMS</Username>
    <Note>Lieferung per Spedition</Note>
    <ExternalReceiptNr>WE-2024-0815</ExternalReceiptNr>
    <ITEMS>
      <Item>
        <EAN>4006381333931</EAN>
        <ItemNrSuppl>SUP-100</ItemNrSuppl>
        <ItemNrInt>ART-100</ItemNrInt>
        <Ordered>10</Ordered>
        <Delivered>10</Delivered>
        <SupplPrice>4.95</SupplPrice>
        <ItemName>Kugelschreiber blau</ItemName>
        <ItemKey>0</ItemKey>
        <BatchNumber>L2024-01</BatchNumber>
        <BestBeforeDate>2025-12-31</BestBeforeDate>
        <InternalNumber>10234</InternalNumber>
        <ExternalCode>PO-A-77</ExternalCode>
      </Item>
    </ITEMS>
  </Delivery>
</CREATE_DELIVERY>

Antwort

Result-Set 1 · Bei Erfolg (kein Validierungsfehler)

Kopf der angelegten Lieferung.

Spalte Typ Beschreibung
DeliveryKey int

Schlüssel der Lieferung (SDelHKey).

DeliveryNr
Kann leer sein
string

Lieferungsnummer (SDelHNr).

SupplNR
Kann leer sein
string

Lieferantennummer.

DeliveryNote
Kann leer sein
string

Lieferungsnotiz, ggf. mit angehängtem Block fehlgeschlagener Zeilen.

DeliveryNrExternal
Kann leer sein
string

Veraltet, immer NULL.

ExternalReceiptNr
Kann leer sein
string

Externe Wareneingangsnummer aus dem XML.

PurchaseOrderNr
Kann leer sein
string

Referenzierte Bestellnummer(n) (SDelHextOrderNr).

Result-Set 2 · Bei Erfolg (kein Validierungsfehler)

Positionen der angelegten Lieferung mit den Kennungen der zugehörigen Anfragezeile (im Vorlagenmodus NULL).

Spalte Typ Beschreibung
SDelDkey int

Schlüssel der Lieferposition.

SDelDHref int

Schlüssel des Lieferungskopfs.

SDelDItemRef
Kann leer sein
int

Artikelschlüssel.

SDelDItemName
Kann leer sein
string

Artikelname.

SDelDqtyDelivered
Kann leer sein
int

Gelieferte Menge (im Vorlagenmodus 0).

SDelDqtyOrdered
Kann leer sein
int

Bestellte Menge.

SDelDsorderlineRef
Kann leer sein
int

Id der verknüpften Bestellposition.

SDelDsPrice
Kann leer sein
decimal

Lieferantenpreis.

SDelDsDiscount
Kann leer sein
decimal

Rabatt in Prozent.

SDelDsFinalPrice
Kann leer sein
decimal

Endpreis nach Rabatt.

SDelDcreateDate
Kann leer sein
dateTime

Erstellungsdatum.

SDelDcreateEmp
Kann leer sein
string

Erstellender Benutzer.

SDelDupdateDate
Kann leer sein
dateTime

Datum der letzten Änderung.

SDelDupdateEmp
Kann leer sein
string

Zuletzt ändernder Benutzer.

SDelDsAddDiscount
Kann leer sein
decimal

Zusatzrabatt (0).

SDelDsMidPrice
Kann leer sein
decimal

Mittelpreis (im XML-Modus 0, im Vorlagenmodus Endpreis).

BatchNumber
Kann leer sein
string

Chargennummer.

BestBeforeDate
Kann leer sein
dateTime

Mindesthaltbarkeitsdatum.

EAN
Kann leer sein
varchar(13)
string

EAN aus der Anfragezeile.

ItemNrSuppl
Kann leer sein
varchar(50)
string

Lieferantenartikelnummer aus der Anfragezeile.

ItemNrInt
Kann leer sein
varchar(50)
string

Interne Artikelnummer aus der Anfragezeile.

InternalNumber
Kann leer sein
int

Interne Bestellnummer aus der Anfragezeile.

ExternalCode
Kann leer sein
varchar(50)
string

Externer Bestellcode aus der Anfragezeile.

Result-Set 3 · Nur wenn OrderNr = 0 und das XML Knoten ITEMS/Item enthielt (ggf. 0 Zeilen)

Nicht importierte Anfragezeilen mit Grund.

Spalte Typ Beschreibung
ERROR
Kann leer sein
varchar(1000)
string

Grund (Item not found… oder Error01–Error07).

EANUPC
Kann leer sein
varchar(50)
string

EAN der Zeile.

SupplNr
Kann leer sein
varchar(4)
string

Lieferantennummer (der Lieferung oder der zugeordneten Bestellung).

InternalNumber
Kann leer sein
int

Interne Bestellnummer.

ExternalCode
Kann leer sein
varchar(50)
string

Externer Bestellcode.

SupplierOrderId
Kann leer sein
int

Id der zugeordneten Bestellung, falls vorhanden.

DeliveryId
Kann leer sein
int

Immer NULL.

ItemNrSuppl
Kann leer sein
varchar(50)
string

Lieferantenartikelnummer aus der Anfrage.

ItemNrInt
Kann leer sein
varchar(50)
string

Interne Artikelnummer aus der Anfrage.

Qty
Kann leer sein
int

Liefermenge aus der Anfrage.

Result-Set 4 · Bei einem Validierungsfehler, anstelle aller anderen Ergebnismengen

Einzelne Fehlerzeile; es wird nichts angelegt.

Spalte Typ Beschreibung
ERROR varchar
string

Fehlermeldung.

Fehlermeldungen

Status Meldung Ursache
ERROR ERROR: More than one delivery defined in the XML structure. Das XML enthält mehr als einen Knoten `Delivery`. Pro Aufruf nur eine Lieferung senden.
ERROR ERROR: Unknown LocID. Nur XML-Weg: Die `LocID` existiert nicht in `Location`.
ERROR ERROR: No supplier defined for delivery. Bei `OrderNr` <> 0 (XML): keine Bestellung mit dieser Nummer am Lager. Bei `OrderNr` = 0: keine `SupplNr` angegeben.
ERROR ERROR: Supplier with supplier number: "{SupplNr}" does not exist. `OrderNr` = 0 und die Lieferantennummer existiert nicht in `Suppliers`.
ERROR ERROR: For given External Receipt Number already exists an delivery for that same supplier. Für diesen Lieferanten existiert bereits eine Lieferung mit derselben `ExternalReceiptNr`.
ERROR ERROR: Supplier order already has an open delivery. Vorlagenmodus: Eine Lieferung im Status `NEW` referenziert die Bestellnummer bereits. Diese zuerst buchen oder löschen.
ERROR ERROR: OrderNr does not exists or does not have status "{CON|BES/CON}"! Vorlagenmodus: Die Bestellung existiert nicht an diesem Lager oder hat keinen lieferbaren Status (`CON`, bzw. `BES/CON` bei `ConfirmOrderedDocumentOnDelivery` = 1).
RAISERROR ERROR --- {error message} Ausgelöst von `Pixi_CreateSDeliveryByTemplate`, wenn das Einfügen der Positionen fehlschlägt; das Einfügen der Positionen wird zurückgerollt.
ERROR Item not found: no item matches the supplied identifiers for this supplier Fehlzeilen: Kein `AddItems`-Eintrag des Lieferanten passt zu `ItemNrInt`, `EAN` oder `ItemNrSuppl`.
ERROR Error01: External Code belongs to multiple Purchase orders Fehlzeilen: Der `ExternalCode` existiert auf mehreren Bestellungen des Lieferanten. `InternalNumber` verwenden.
ERROR Error02: Purchase order belongs to a different supplier Fehlzeilen: Die zugeordnete Bestellung gehört zu einem anderen Lieferanten.
ERROR Error03: No Purchase Order match for External Code Fehlzeilen: Keine Bestellung an diesem Lager hat den `ExternalCode`.
ERROR Error04: Item not found on Purchase Order Fehlzeilen: Bestellung über `ExternalCode` gefunden, der Artikel ist aber nicht enthalten.
ERROR Error05: Item not found on Purchase Order Fehlzeilen: Bestellung über `InternalNumber` gefunden, der Artikel ist aber nicht enthalten.
ERROR Error06: Purchase Order is not on proper status Fehlzeilen: Die zugeordnete Bestellung hat keinen lieferbaren Status.
ERROR Error07: No Purchase Order match for Internal Number Fehlzeilen: Keine Bestellung an diesem Lager hat die `InternalNumber`.

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:pixiCreateDelivery>
      <!-- <LocID>001</LocID> -->
      <!-- <OrderNr>0</OrderNr> -->
      <!-- <SupplNr>LIE1</SupplNr> -->
      <!-- <SuplierOrderNRExternal>EXT-4711</SuplierOrderNRExternal> -->
      <!-- <UserName>WMS</UserName> -->
      <!-- <Note>Lieferung per Spedition</Note> -->
      <!-- <ParameterXML><![CDATA[<CREATE_DELIVERY><Delivery><LocID>001</LocID><OrderNr>0</OrderNr><SupplNr>LIE1</SupplNr><SupplOrderNrExt>EXT-4711</SupplOrderNrExt><Username>WMS</Username><Note>Lieferung per Spedition</Note><ExternalReceiptNr>WE-2024-0815</ExternalReceiptNr><ITEMS><Item><EAN>4006381333931</EAN><ItemNrSuppl>SUP-100</ItemNrSuppl><ItemNrInt>ART-100</ItemNrInt><Ordered>10</Ordered><Delivered>10</Delivered><SupplPrice>4.95</SupplPrice><ItemName>Kugelschreiber blau</ItemName><ItemKey>0</ItemKey><BatchNumber>L2024-01</BatchNumber><BestBeforeDate>2025-12-31</BestBeforeDate><InternalNumber>10234</InternalNumber><ExternalCode>PO-A-77</ExternalCode></Item></ITEMS></Delivery></CREATE_DELIVERY>]]></ParameterXML> -->
    </ns1:pixiCreateDelivery>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Location · Lesen Settings · Lesen SupplierOrder · Lesen SupplierOrderStatus · Lesen SupplierOrderLine · Lesen Suppliers · Lesen AddItems · Lesen items · Lesen SDelHeader · Schreiben SDelDetail · Schreiben
SQL-Objekt:
dbo.pipiCreateDelivery
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben