pixiCreateDirectInv
Legt eine Direktrechnung für einen Auftrag an, entweder für alle offenen Auftragspositionen oder für eine kommagetrennte Liste von Positionsschlüsseln.
Der Aufruf ist ein schlanker Wrapper um die interne Prozedur Pixi_CreateDirectInvInvoices. Übergeben werden LocID, CreateEmp, OrderNr und OrderlineRefs; alle anderen Werte sind fest: keine Prüfung "alle Artikel auf Lager", keine Lagerplatz-Einschränkung, kein 1SS-Modus (One-Step-Shipping), Ergebniszeile aktiv, eigene Transaktion, Erstellungsmodus Manual, Sprache 1.
Vorprüfungen (keine Ergebnismenge, keine Rechnung):
- Hat der Auftrag keine Position in einem der offenen Status
RAS,OPA,NAO,ANG,BES,BOR,NAS,OPH,NAD, endet der Aufruf ohne Meldung. - Ist
OrderlineRefsleer und liegt eine Position des Auftrags auf einer aktiven (nicht abgelaufenen) Pickliste, endet der Aufruf ohne Meldung.
Auswahl der Positionen:
OrderlineRefswird an Kommas getrennt; nur numerische Schlüssel > 0 werden verwendet. Bei leerem Wert werden alle Positionen des Auftrags verwendet.- Berechnet werden nur Positionen von
OrderNrin den oben genannten offenen Status sowieMIN, und nur, wenn sie noch nicht auf einer Rechnungsposition stehen. - Der Kunde darf nicht gesperrt sein (
SLocked) und die Lieferadresse nicht gesperrt (ASlocked); sonst wird nichts angelegt.
Rechnungserstellung:
- Abhängig von der Einstellung
DoNotReleaseStockOnDirectInvoiceScanOut(Wert0) wird intern eine Pickliste für die gewählten Positionen erzeugt (Teillieferung und Teilmengen erlaubt) und mit dem KommentarDirectInvStockReleasemarkiert. - In einer Transaktion wird der Rechnungskopf angelegt (MwSt-Typ
I, oderN, wenn die Rechnungsadresse eine USt-IdNr. hat oder der KundeTaxOnInvoice = 'N'hat), Wechselkurs und Retouren-Tracking-ID werden ermittelt und SEPA-Daten ergänzt. - Rechnungspositionen werden aus den Auftragspositionen übernommen (Menge, Preis, Rabatt, MwSt, Versandkosten, Währung, Seriennummer).
- Die Rechnung erhält die nächste Rechnungsnummer des Shops und ein Paket-Bruttogewicht (Einstellung
DefaultShippingWeightoder aus Artikelgewichten berechnet, wennCalculateWeightFromItems = 1). - Berechnete offene Positionen erhalten Status
EINund die Rechnungsreferenz;MIN-Positionen erhalten nur die Rechnungsreferenz. - Bei
Invoice_CancelPartialDelivery = 1werden verbleibendeANG/HAL/BOR-Positionen von Aufträgen mit erzwungener Teillieferung und Stornierung aufSTOgesetzt. - Verlangt der Versanddienstleister (
DoScanOutOnInvoiceCreate) oder die Zahlungsart (AutoScanOutInvoice) es, wird eine Kiste angelegt und ausgescannt sowie ein Job zur Bestandsfreigabe eingereiht. - Das Ereignis
InvoiceCreatedwird veröffentlicht.
Am Ende wird eine Statuszeile zurückgegeben (siehe Ergebnismengen).
Hinweise
OrderlineRefshat keinen Standardwert und muss übergeben werden; ein Leerstring (oder NULL) bedeutet "alle zulässigen Positionen". Das dokumentierte Format ist,1234,1235,.- Stille Abbrüche: In den beiden Vorprüfungsfällen wird gar keine Zeile zurückgegeben. Ist Kunde oder Lieferadresse gesperrt, meldet die Abschlusszeile
Success = 1, aberInvoiceKey = 0undCreatedInv = 0; daherCreatedInv/InvoiceKeyprüfen, nicht nurSuccess. - Bei einem Fehler in der Rechnungstransaktion wird alles zurückgerollt, die interne Pickliste gelöscht, der Fehler protokolliert (
LOG.InsertError), eine Zeile mit vier Spalten geliefert und der Fehler übersp_Exception_ReRaise(nicht beigefügt) erneut ausgelöst, sodass der Client zusätzlich eineSqlMessageerhält. - Ein Fehler beim Erzeugen der internen Pickliste wird nicht erneut ausgelöst, sondern in
ErrorMessageder Abschlusszeile mitSuccess = 0gemeldet. LocIDwird für Picklisten- und Kistenverarbeitung verwendet; der Rechnungsstandort stammt aus den Auftragspositionen.- Das Verhalten hängt von den Einstellungen
DoNotReleaseStockOnDirectInvoiceScanOut,DefaultShippingWeight,CalculateWeightFromItems,PutThisStatusesOnInvoice,Invoice_CancelPartialDeliveryund1SS_ForceAutoScanOutab. - Nebeneffekte: MQ-Ereignis
InvoiceCreated, ein eingereihter EintragPixi_ReleaseStockFrominvoicePicklistinExecQueriesbeim Ausscannen, Laufzeitprotokoll überLOG.EventDurationInsert. Viele Lesezugriffe verwendenNOLOCK.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
LocID
|
varchar(3) string |
001 |
Standort-ID für die interne Pickliste sowie Kisten- und Ausscan-Verarbeitung. Beispiel: |
CreateEmp
|
varchar(50) string |
API |
Benutzername, der als Ersteller der Rechnung und als Bearbeiter der Auftragspositionen gespeichert wird. Beispiel: |
OrderNr
Pflicht
|
int | – |
Nummer des zu berechnenden Auftrags. Beispiel: |
OrderlineRefs
Pflicht
|
varchar(2000) string |
– |
Kommagetrennte Positionsschlüssel, die berechnet werden sollen, z. B. Beispiel: |
Antwort
Result-Set 1 · Am Ende der Verarbeitung, sofern keine Vorprüfung den Aufruf beendet hat und kein Fehler in der Rechnungstransaktion auftrat.
Abschließende Statuszeile der Direktrechnungserstellung.
| Spalte | Typ | Beschreibung |
|---|---|---|
ErrorMessage
Kann leer sein |
varchar(4000) string |
Fehlertext aus der Picklistenerstellung; NULL bei Erfolg.Ensure.Fehlertext aus der Picklistenerstellung; NULL bei Erfolg. |
Success
|
int |
1, wenn |
InvoiceKey
Kann leer sein |
int |
Schlüssel der angelegten Rechnung; 0, wenn keine angelegt wurde. |
ScanOutDone
Kann leer sein |
bit boolean |
1, wenn die Kiste automatisch ausgescannt und gelöscht wurde. |
CreatedInv
Kann leer sein |
int |
Schlüssel der angelegten Rechnung; 0, wenn keine angelegt wurde. |
InvoicePackageId
Kann leer sein |
int |
ID des Rechnungspakets der neuen Rechnung; NULL, wenn keine Rechnung angelegt wurde. |
Result-Set 2 · Bei einem Fehler in der Rechnungstransaktion; danach folgt der erneut ausgelöste SQL-Fehler.
Fehlerzeile, die vor dem erneuten Auslösen des Fehlers geliefert wird.
| Spalte | Typ | Beschreibung |
|---|---|---|
ErrorMessage
Kann leer sein |
varchar(4000) string |
Fehlermeldung des fehlgeschlagenen Schritts. |
Success
|
int |
Immer 0. |
InvoiceKey
|
int |
Immer 0. |
ScanOutDone
Kann leer sein |
bit boolean |
Ausscan-Kennzeichen zum Zeitpunkt des Fehlers. |
Beispielantwort
<SqlRowSet1>
<row>
<Success>1</Success>
<InvoiceKey>48213</InvoiceKey>
<ScanOutDone>0</ScanOutDone>
<CreatedInv>48213</CreatedInv>
<InvoicePackageId>51007</InvoicePackageId>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| RAISERROR | Invlines problem... | Für die neue Rechnung wurden keine Rechnungspositionen angelegt (z. B. alle gewählten Positionen sind bereits berechnet). Die Transaktion wird zurückgerollt; Rückgabe als Fehlerzeile und erneut ausgelöster Fehler. |
| RAISERROR | Invoice Problem - ID and InvoiceNr do not match... | Die vergebene Rechnungsnummer konnte am Rechnungsdatensatz nicht bestätigt werden. Die Transaktion wird zurückgerollt. |
| RAISERROR | ERROR: {Info} | Das automatische Ausscannen der Kiste ist fehlgeschlagen; `{Info}` ist die Meldung der Ausscan-Routine. 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:pixiCreateDirectInv>
<!-- <LocID>001</LocID> -->
<!-- <CreateEmp>API</CreateEmp> -->
<OrderNr>100245</OrderNr>
<OrderlineRefs>,1234,1235,</OrderlineRefs>
</ns1:pixiCreateDirectInv>
</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:pixiCreateDirectInv>
<!-- <LocID>001</LocID> -->
<!-- <CreateEmp>API</CreateEmp> -->
<OrderNr>100245</OrderNr>
<OrderlineRefs>,1234,1235,</OrderlineRefs>
</ns1:pixiCreateDirectInv>
</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 = [
// 'LocID' => '001',
// 'CreateEmp' => 'API',
'OrderNr' => '100245',
'OrderlineRefs' => ',1234,1235,',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiCreateDirectInv', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiCreateDirectInv