Postman-Collection
Invoices Schreiben

pixiCreateDirectInvoice

Legt eine Direktrechnung für einen Auftrag an, für ausgewählte oder alle offenen Auftragspositionen, und liefert das Ergebnis als Statuszeile.

Wrapper um die interne Prozedur Pixi_CreateDirectInvInvoices. Es werden immer CreationMode = 'Direct' und Sprache 1 verwendet. Die Optionen der internen Prozedur für 1SS, Lagerplatz und Mindesthaltbarkeit werden nicht genutzt.

Ablauf

  1. Prüfung auf offene Positionen. Hat der Auftrag keine Auftragsposition in einem der Status RAS, OPA, NAO, ANG, BES, BOR, NAS, OPH, NAD (z. B. nur MIN-Positionen), endet der Aufruf ohne Ergebnismenge.
  2. Positionsauswahl. OrderlineRefs wird an Kommas in Positionsschlüssel zerlegt. Ein leerer Wert oder NULL bedeutet alle zulässigen Positionen des Auftrags.
  3. Prüfung auf aktive Pickliste. Ist OrderlineRefs leer und liegt eine Position des Auftrags auf einer aktiven Pickliste (PLitem.Expired = 0), endet der Aufruf ohne Ergebnismenge.
  4. Prüfung von Kunde und Adressen. Kunde, Rechnungsadresse, Lieferadresse, Versanddienstleister und Währung werden aus OrderHeader gelesen. Ist der Kunde (SLocked) oder die Lieferadresse (ASlocked) gesperrt, wird keine Rechnung erstellt.
  5. Pickliste zur Bestandsfreigabe. Ist die Einstellung DoNotReleaseStockOnDirectInvoiceScanOut gleich '0' oder AllInvoiceItemsInStock = 'Y', wird eine Pickliste für die ausgewählten Positionen erstellt (Teilaufträge und Teilmengen erlaubt).
    • Bei AllInvoiceItemsInStock = 'Y' wird die Pickliste gelöscht und keine Rechnung erstellt, wenn sie leer ist oder die gepickte Menge von der Summe der bestellten Mengen abweicht.
    • Ist die Einstellung '1', wird die Pickliste nach der Prüfung wieder gelöscht.
  6. Rechnungserstellung (in einer Transaktion).
    • Der Rechnungskopf wird angelegt. Die MwSt-Art ist N, wenn die Rechnungsadresse eine USt-IdNr. (UsStID) hat oder der Kunde TaxOnInvoice = 'N' hat, sonst I.
    • Wechselkurs, Retouren-Tracking-ID und SEPA-Daten werden ermittelt.
    • Rechnungspositionen werden für die ausgewählten, noch nicht berechneten Positionen in den obigen Status sowie MIN eingefügt.
    • Die nächste Rechnungsnummer des Shops wird vergeben. Das Paketgewicht ist die Einstellung DefaultShippingWeight, bei CalculateWeightFromItems = 1 die Summe der Artikelgewichte, begrenzt auf 999999.999.
  7. Aktualisierung der Auftragspositionen. Berechnete Nicht-MIN-Positionen erhalten InvRef und Status EIN. MIN-Positionen erhalten nur InvRef.
  8. Stornierung verbleibender Positionen. Bei Einstellung Invoice_CancelPartialDelivery = '1' werden verbleibende ANG/HAL/BOR-Positionen von Aufträgen mit ForceToPickListIfNotFULL = 1 und OHCancelAfterForcedShipOut = 1 auf STO gesetzt.
  9. Automatischer Scan-Out. Verlangt dies der Versanddienstleister (DoScanOutOnInvoiceCreate) oder die Zahlungsart (AutoScanOutInvoice):
    • eine Kiste wird angelegt und ausgescannt;
    • ein Job zur Bestandsfreigabe wird in ExecQueries eingereiht;
    • bei Einstellung 1SS_ForceAutoScanOut = 1 wird die Kiste gelöscht und ScanOutDone wird 1.
  10. Event. Das MQ-Event InvoiceCreated wird veröffentlicht und die Transaktion bestätigt.

Abschließend wird eine Statuszeile mit Success, InvoiceKey, CreatedInv und InvoicePackageId geliefert.

Hinweise

  • In einigen Fällen keine Ergebnismenge. Der Aufruf liefert gar keine Ergebnismenge, wenn der Auftrag keine offenen (Nicht-MIN-)Positionen hat, wenn OrderlineRefs leer ist und ein Teil des Auftrags auf einer aktiven Pickliste liegt, oder wenn bei AllInvoiceItemsInStock = 'Y' die gepickte Menge nicht passt. Clients müssen ein fehlendes SqlRowSet1 behandeln.
  • Success = 1 garantiert keine Rechnung. In diesen Fällen bleiben InvoiceKey/CreatedInv 0:
    • Kunde oder Lieferadresse ist gesperrt;
    • es wurden keine zulässigen Positionen gefunden;
    • die Pickliste war bei AllInvoiceItemsInStock = 'Y' leer. CreatedInv > 0 sollte immer geprüft werden.
  • Fehler werden doppelt gemeldet. Tritt bei der Rechnungserstellung ein Fehler auf:
    • die Transaktion wird zurückgerollt und der Fehler über LOG.InsertError protokolliert;
    • die Pickliste wird gelöscht;
    • eine Zeile mit Success = 0 wird geliefert;
    • anschließend wird der Fehler erneut ausgelöst (sp_Exception_ReRaise), sodass zusätzlich eine SqlMessage zurückkommt.
  • Format von OrderlineRefs. Der Wert muss kommagetrennt sein, z. B. ,1234,1235,. Nur numerische Elemente größer 0 werden verwendet.
  • LocID. Wird nur für Picklistenerstellung und Scan-Out verwendet. Der Rechnungsstandort stammt aus den Auftragspositionen (LocationID).
  • Seiteneffekte:
    • Picklisten werden ggf. angelegt und gelöscht;
    • beim automatischen Scan-Out wird ein Job Pixi_ReleaseStockFrominvoicePicklist in ExecQueries eingereiht;
    • das MQ-Event InvoiceCreated wird veröffentlicht;
    • Pixi_CA_AddPixiInvoice wird ausgeführt;
    • eine Laufzeitprotokollierung erfolgt über LOG.EventDurationInsert.
  • Nicht beigefügt. Das Verhalten der aufgerufenen Prozeduren (z. B. Pixi_CreatePickList, GOS_Qi_InvoiceNOD, Pixi_ScanOutBox) ist nicht beigefügt; sie können weitere Fehler auslösen.
  • Sperren. Die meisten Lesezugriffe verwenden NOLOCK.

Parameter

Parameter Typ Standardwert Beschreibung
OrderNr
Pflicht
int –

Auftragsnummer (OrderHeader.OrderNr), für die die Rechnung erstellt wird.

Beispiel: 93867

OrderlineRefs
Pflicht
varchar(2000)
string
–

Kommagetrennte Positionsschlüssel (OrderlineKey), von Kommas eingeschlossen, z. B. ,1234,1235,. Leerer String oder NULL berechnet alle zulässigen Positionen des Auftrags.

Beispiel: ,280671,280672,

AllInvoiceItemsInStock
varchar(1)
string
N

Bei Y wird die Rechnung nur erstellt, wenn alle ausgewählten Positionen vollständig aus dem Bestand gepickt werden können. NULL wird wie N behandelt.

Erlaubte Werte

  • Y – Alle ausgewählten Positionen müssen am Lager sein, sonst wird keine Rechnung erstellt.
  • N – Rechnung wird unabhängig von der Bestandsverfügbarkeit erstellt.

Beispiel: Y

LocID
varchar(3)
string
001

Standort-ID für Picklistenerstellung, Kistenanlage und Scan-Out.

Beispiel: 001

CreateEmp
varchar(50)
string
API

Benutzername, der als Ersteller der Rechnung, der Rechnungspositionen und der Positionsänderungen gespeichert wird.

Beispiel: API

Antwort

Result-Set 1 · Nur bei einem Fehler während der Rechnungserstellung; danach folgt der erneut ausgelöste SQL-Fehler.

Fehlerzeile der fehlgeschlagenen Rechnungserstellung.

Spalte Typ Beschreibung
ErrorMessage
Kann leer sein
varchar(4000)
string

Fehlermeldungstext.

Success int

Immer 0.

InvoiceKey int

Immer 0.

ScanOutDone
Kann leer sein
bit
boolean

Ob der Scan-Out abgeschlossen wurde (normalerweise 0).

Result-Set 2 · Wenn die Verarbeitung normal endet oder ein Picklistenschritt fehlschlägt; nicht bei vorzeitigem Abbruch ohne Ergebnismenge.

Abschließende Statuszeile der Direktrechnungserstellung.

Spalte Typ Beschreibung
ErrorMessage
Kann leer sein
varchar(4000)
string

Fehlermeldung eines fehlgeschlagenen Picklistenschritts; NULL bei Erfolg.

Success int

1, wenn keine Fehlermeldung gesetzt ist, sonst 0. Garantiert nicht, dass eine Rechnung erstellt wurde.

InvoiceKey
Kann leer sein
int

Schlüssel der erstellten Rechnung (Invoices.InvoiceKey), 0 wenn keine.

ScanOutDone
Kann leer sein
bit
boolean

1, wenn die Kiste automatisch ausgescannt und gelöscht wurde.

CreatedInv
Kann leer sein
int

Schlüssel der erstellten Rechnung, 0 wenn keine erstellt wurde.

InvoicePackageId
Kann leer sein
int

ID des Rechnungspakets (pixi.InvoicePackage.Id); NULL, wenn keine Rechnung erstellt wurde.

Fehlermeldungen

Status Meldung Ursache
RAISERROR Invlines problem... Für die neue Rechnung wurden keine Rechnungspositionen eingefügt, z. B. weil alle ausgewählten Positionen bereits berechnet sind. Die Transaktion wird zurückgerollt.
RAISERROR Invoice Problem - ID and InvoiceNr do not match... Die vergebene Rechnungsnummer konnte nicht an der Rechnung gespeichert werden. Die Transaktion wird zurückgerollt.
RAISERROR ERROR: {Info} Der automatische Scan-Out der Kiste ist fehlgeschlagen; `{Info}` ist die Meldung von `Pixi_ScanOutBox`. Die Transaktion wird zurückgerollt.

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:pixiCreateDirectInvoice>
      <OrderNr>93867</OrderNr>
      <OrderlineRefs>,280671,280672,</OrderlineRefs>
      <!-- <AllInvoiceItemsInStock>Y</AllInvoiceItemsInStock> -->
      <!-- <LocID>001</LocID> -->
      <!-- <CreateEmp>API</CreateEmp> -->
    </ns1:pixiCreateDirectInvoice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Orderlines · Schreiben OrderHeader · Lesen PLitem · Schreiben PLheader · Schreiben ShipVendor · Lesen Addresses · Lesen Customers · Lesen InvLines · Schreiben Invoices · Schreiben Currency · Lesen items · Lesen InvoicePackage · Schreiben Payments · Lesen ExecQueries · Schreiben boxes · Schreiben
SQL-Objekt:
dbo.pipiCreateDirectInvoice
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben