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
- 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. nurMIN-Positionen), endet der Aufruf ohne Ergebnismenge. - Positionsauswahl.
OrderlineRefswird an Kommas in Positionsschlüssel zerlegt. Ein leerer Wert oder NULL bedeutet alle zulässigen Positionen des Auftrags. - Prüfung auf aktive Pickliste. Ist
OrderlineRefsleer und liegt eine Position des Auftrags auf einer aktiven Pickliste (PLitem.Expired = 0), endet der Aufruf ohne Ergebnismenge. - Prüfung von Kunde und Adressen. Kunde, Rechnungsadresse, Lieferadresse, Versanddienstleister und Währung werden aus
OrderHeadergelesen. Ist der Kunde (SLocked) oder die Lieferadresse (ASlocked) gesperrt, wird keine Rechnung erstellt. - Pickliste zur Bestandsfreigabe. Ist die Einstellung
DoNotReleaseStockOnDirectInvoiceScanOutgleich'0'oderAllInvoiceItemsInStock = '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.
- Bei
- Rechnungserstellung (in einer Transaktion).
- Der Rechnungskopf wird angelegt. Die MwSt-Art ist
N, wenn die Rechnungsadresse eine USt-IdNr. (UsStID) hat oder der KundeTaxOnInvoice = 'N'hat, sonstI. - 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
MINeingefügt. - Die nächste Rechnungsnummer des Shops wird vergeben. Das Paketgewicht ist die Einstellung
DefaultShippingWeight, beiCalculateWeightFromItems = 1die Summe der Artikelgewichte, begrenzt auf 999999.999.
- Der Rechnungskopf wird angelegt. Die MwSt-Art ist
- Aktualisierung der Auftragspositionen. Berechnete Nicht-
MIN-Positionen erhaltenInvRefund StatusEIN.MIN-Positionen erhalten nurInvRef. - Stornierung verbleibender Positionen. Bei Einstellung
Invoice_CancelPartialDelivery = '1'werden verbleibendeANG/HAL/BOR-Positionen von Aufträgen mitForceToPickListIfNotFULL = 1undOHCancelAfterForcedShipOut = 1aufSTOgesetzt. - Automatischer Scan-Out. Verlangt dies der Versanddienstleister (
DoScanOutOnInvoiceCreate) oder die Zahlungsart (AutoScanOutInvoice):- eine Kiste wird angelegt und ausgescannt;
- ein Job zur Bestandsfreigabe wird in
ExecQuerieseingereiht; - bei Einstellung
1SS_ForceAutoScanOut = 1wird die Kiste gelöscht undScanOutDonewird 1.
- Event. Das MQ-Event
InvoiceCreatedwird 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, wennOrderlineRefsleer ist und ein Teil des Auftrags auf einer aktiven Pickliste liegt, oder wenn beiAllInvoiceItemsInStock = 'Y'die gepickte Menge nicht passt. Clients müssen ein fehlendesSqlRowSet1behandeln. Success = 1garantiert keine Rechnung. In diesen Fällen bleibenInvoiceKey/CreatedInv0:- Kunde oder Lieferadresse ist gesperrt;
- es wurden keine zulässigen Positionen gefunden;
- die Pickliste war bei
AllInvoiceItemsInStock = 'Y'leer.CreatedInv > 0sollte 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.InsertErrorprotokolliert; - die Pickliste wird gelöscht;
- eine Zeile mit
Success = 0wird geliefert; - anschließend wird der Fehler erneut ausgelöst (
sp_Exception_ReRaise), sodass zusätzlich eineSqlMessagezurückkommt.
- die Transaktion wird zurückgerollt und der Fehler über
- 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_ReleaseStockFrominvoicePicklistinExecQuerieseingereiht; - das MQ-Event
InvoiceCreatedwird veröffentlicht; Pixi_CA_AddPixiInvoicewird 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 ( Beispiel: |
OrderlineRefs
Pflicht
|
varchar(2000) string |
– |
Kommagetrennte Positionsschlüssel ( Beispiel: |
AllInvoiceItemsInStock
|
varchar(1) string |
N |
Bei Erlaubte Werte
Beispiel: |
LocID
|
varchar(3) string |
001 |
Standort-ID für Picklistenerstellung, Kistenanlage und Scan-Out. Beispiel: |
CreateEmp
|
varchar(50) string |
API |
Benutzername, der als Ersteller der Rechnung, der Rechnungspositionen und der Positionsänderungen gespeichert wird. Beispiel: |
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 ( |
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 ( |
Beispielantwort
<SqlRowSet1>
<row>
<Success>1</Success>
<InvoiceKey>512345</InvoiceKey>
<ScanOutDone>false</ScanOutDone>
<CreatedInv>512345</CreatedInv>
<InvoicePackageId>498761</InvoicePackageId>
</row>
</SqlRowSet1>
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>
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: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>
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' => '93867',
'OrderlineRefs' => ',280671,280672,',
// 'AllInvoiceItemsInStock' => 'Y',
// 'LocID' => '001',
// 'CreateEmp' => 'API',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiCreateDirectInvoice', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiCreateDirectInvoice