pixiGetInvoiceLinesExtended
Liefert Rechnungsköpfe zusammen mit ihren Rechnungspositionen in einer flachen Ergebnismenge, gefiltert nach Rechnung, Shop, Auftrag, Kunde, Zahlungsart und Datum.
Fasst Rechnungskopf- und Rechnungspositionsdaten in einem Aufruf zusammen. Jede Ergebniszeile ist eine Rechnungsposition; alle Kopf-, Rechnungsadress- und Zahlungsfelder werden auf jeder Position derselben Rechnung wiederholt.
Normalisierung der Parameter
- Leere Zeichenketten werden bei allen Text- und Datumsfiltern als
NULLbehandelt;OrderNR = 0gilt alsNULL. RowCountist standardmäßig 1000;NULL, 0 oder negative Werte werden ebenfalls durch 1000 ersetzt.
Schritt 1 – Kandidaten-Rechnungen (dynamisches SQL über sp_executesql)
Bis zu RowCount * 3 Rechnungen werden aus Invoices (verknüpft mit Customers, Left Join auf InvLines) nach Rechnungsdatum sortiert ausgewählt. Nur gesetzte Filter werden ergänzt:
InvoiceNr: exakte Rechnungsnummer.ShopID:Customers.CustomerOf.PaymentType:Invoices.Payment.InvDateFrom/InvDateTo: Rechnungsdatum echt größer / echt kleiner als der Wert.UpdateDateFrom/UpdateDateTo: echt größer / kleiner als der Wert, aufInvLines.UpdateDate(Standard) oder aufInvoices.UpdateDate, wennConsiderInvoiceUpdates = 1. Datensätze mitUpdateDateNULLwerden nie gefunden.OrderNR: die Rechnung hat mindestens eine Position, die mit einer Auftragsposition dieses Auftrags verknüpft ist.OrderNRExternal: wird überOrderHeader.OrderNrExternalin eine interne Auftragsnummer aufgelöst und dann wieOrderNRgefiltert.OnlyUnpaidInvoices = 1: bezahlter Betrag weicht vom Gesamtbetrag ab, und es existiert kein offenerCustomerAccount-Eintrag zur Rechnung mitDoNotRefund = 1(ohne Bankzeilen-, DTAUS- oder manuelle Buchungsreferenz).CustomerNrExternal:Customers.CustomerNrExternal.
Schritt 2 – Köpfe und Positionen
- Die ersten
RowCountKandidaten (sortiert nach Rechnungsdatum und Rechnungsschlüssel) werden als Köpfe geladen. Nur Rechnungen mit passender Währung, einem inPaymentsvorhandenen Zahlungscode und einer Rechnungsadresse inAddressesbleiben erhalten. - Positionen werden aus der View
PV_Invlinesgelesen, die auch Pseudo-Positionen enthält:ItemKey = -2Versandkosten,-1Gutscheine,-3manuelle Rechnungen ohne Positionen. Lieferantenpreis und Lieferantennummer stammen ausSupplierPrice_History, sofern vorhanden. - Bei
AddCCPPayID = 1werden dieccpPayID-Werte aller Aufträge der Rechnung kommagetrennt inCcpPayIDzusammengefasst.
Schritt 3 – abschließender Filter und Ausgabe
- Pseudo-Positionen (
ItemKey-1, -2, -3) werden nur beiIncludeSpecialInvLines = 1geliefert. Statusfiltert auf den Auftragspositionsstatus der Position (AUS, falls kein Status vorhanden).IsReplacementOnly = 1liefert nur Positionen, deren Auftragsposition den StatusMINhat oder einenOrderHistory-Eintrag mit StatusMINbesitzt (Ersatzlieferungen).- Es werden höchstens
RowCountZeilen (Positionen) geliefert, sortiert nach Rechnungsdatum und Rechnungsschlüssel. UpdateDatein der Ausgabe ist standardmäßig das Änderungs-/Anlagedatum der Position (Fallback auf das Datum der Rechnung), beiConsiderInvoiceUpdates = 1das Änderungs-/Anlagedatum der Rechnung.
Hinweise
- Alle Lesezugriffe verwenden
NOLOCK; nicht festgeschriebene Daten können erscheinen. RowCountbegrenzt Rechnungen und die finalen Positionszeilen. Da das abschließendeTOPPositionen zählt, können Positionen der letzten Rechnung abgeschnitten werden. Für vollständige Rechnungen perInvoiceNrabfragen oder einen deutlich höherenRowCountwählen.- Datumsgrenzen sind exklusiv (
>und<), nicht inklusiv. - Mit dem Standard
ConsiderInvoiceUpdates = 0wirken die Änderungsdatumsfilter auf Rechnungspositionen; Rechnungen ohne Positionen (z. B. manuelle Rechnungen) werden dabei nie gefunden. - Kann
OrderNRExternalinOrderHeadernicht aufgelöst werden, ist das Ergebnis leer. Teilen sich mehrere Aufträge die externe Nummer, wird nur einer davon verwendet. - Positionen mit
ItemKeyNULL(Rechnungspositionen ohne Auftragsposition oder Artikel) fallen durch die PrüfungNOT IN (-1,-2,-3)heraus, sofern nichtIncludeSpecialInvLines = 1. - Bei
IsReplacementOnly = 1werden Pseudo-Positionen nie geliefert, da sie keine Auftragsposition haben. CcpPayIDwird auf 50 Zeichen gekürzt.Currencyist immer die KonstanteEUR; die tatsächliche Auftragswährung steht inOrderCurrency.OrderDateliefert1900-01-01, wenn die Position keinen Auftrag hat (leere Zeichenkette als Datum).EANUPCist0bei Positionen ohne Artikel.OrderNrerscheint in jeder Zeile zweimal.Paidist nur 1, wenn der bezahlte Betrag exakt dem Rechnungsbetrag entspricht.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
InvoiceNr
|
varchar(20) string |
NULL |
Exakte Rechnungsnummer. Leere Zeichenkette bedeutet kein Filter. Beispiel: |
ShopID
|
varchar(3) string |
NULL |
Shop-ID des Kunden ( Beispiel: |
PaymentType
|
char(1) string |
NULL |
Zahlungscode der Rechnung ( Beispiel: |
OrderNR
|
int | NULL |
Interne Auftragsnummer; liefert Rechnungen mit mindestens einer Position dieses Auftrags. 0 bedeutet kein Filter. Beispiel: |
OrderNRExternal
|
varchar(50) string |
NULL |
Externe Auftragsnummer; wird über Beispiel: |
InvDateFrom
|
datetime dateTime |
NULL |
Liefert Rechnungen mit Rechnungsdatum echt nach diesem Wert. Beispiel: |
InvDateTo
|
datetime dateTime |
NULL |
Liefert Rechnungen mit Rechnungsdatum echt vor diesem Wert. Beispiel: |
UpdateDateFrom
|
datetime dateTime |
NULL |
Änderungsdatum echt nach diesem Wert, auf Rechnungspositionen oder auf der Rechnung je nach Beispiel: |
UpdateDateTo
|
datetime dateTime |
NULL |
Änderungsdatum echt vor diesem Wert, auf Rechnungspositionen oder auf der Rechnung je nach Beispiel: |
RowCount
|
int | 1000 |
Maximale Anzahl Rechnungen und gelieferter Zeilen. Beispiel: |
AddCCPPayID
|
bit boolean |
0 |
Bei 1 wird Erlaubte Werte
Beispiel: |
OnlyUnpaidInvoices
|
bit boolean |
0 |
Bei 1 nur Rechnungen, deren bezahlter Betrag vom Gesamtbetrag abweicht und die keinen offenen Kundenkontoeintrag mit Erlaubte Werte
Beispiel: |
IncludeSpecialInvLines
|
bit boolean |
0 |
Bei 1 werden auch Pseudo-Positionen für Versandkosten ( Erlaubte Werte
Beispiel: |
Status
|
varchar(3) string |
NULL |
Auftragspositionsstatus der Position; Positionen ohne Status gelten als Beispiel: |
CustomerNrExternal
|
varchar(60) string |
NULL |
Externe Kundennummer ( Beispiel: |
IsReplacementOnly
|
bit boolean |
0 |
Bei 1 nur Positionen, deren Auftragsposition den Status Erlaubte Werte
Beispiel: |
ConsiderInvoiceUpdates
|
bit boolean |
0 |
Legt fest, welches Änderungsdatum die Änderungsdatumsfilter und die Ausgabespalte Erlaubte Werte
Beispiel: |
Antwort
Result-Set 1 · Immer (ggf. leer)
Eine Zeile pro Rechnungsposition mit wiederholten Rechnungskopf-, Adress- und Zahlungsdaten, sortiert nach Rechnungsdatum und Rechnungsschlüssel.
| Spalte | Typ | Beschreibung |
|---|---|---|
InvoiceNr
Kann leer sein |
varchar(20) string |
Rechnungsnummer |
InvoiceDate
Kann leer sein |
datetime dateTime |
Rechnungsdatum |
ShopID
Kann leer sein |
varchar(3) string |
Shop des Kunden |
PaymentAddressId
Kann leer sein |
int |
Schlüssel der Rechnungsadresse |
ShipmentAddressId
Kann leer sein |
int |
Schlüssel der Lieferadresse |
CustKey
Kann leer sein |
int |
Kundenschlüssel |
Total
Kann leer sein |
money decimal |
Rechnungsbetrag (brutto) |
VATSum
Kann leer sein |
money decimal |
Gesamte MwSt. inkl. Versand- und Rücksendekosten |
VATHigh
Kann leer sein |
money decimal |
MwSt. zum Normalsatz inkl. Versand- und Rücksendekosten |
VATLow
Kann leer sein |
money decimal |
MwSt. zum ermäßigten Satz inkl. Versand- und Rücksendekosten |
TotalNoVAT
Kann leer sein |
money decimal |
Netto-Rechnungsbetrag |
ShipCost
Kann leer sein |
money decimal |
Versandkosten (brutto) |
ShipCostNoVAT
Kann leer sein |
numeric(17,2) decimal |
Versandkosten (netto) |
Discount_Invoice
Kann leer sein |
money decimal |
Gutscheinsumme; brutto bei B2C, sonst netto |
Discount_InvLines
Kann leer sein |
money decimal |
Summe der Positionsrabatte |
PaymentCode
Kann leer sein |
varchar(1) string |
Zahlungscode |
PaymentText
Kann leer sein |
varchar(120) string |
Text der Zahlungsart, ersatzweise der Code |
PaymentDate
Kann leer sein |
datetime dateTime |
Zahlungsdatum |
Paid
Kann leer sein |
bit boolean |
1, wenn bezahlter Betrag dem Gesamtbetrag entspricht |
TotalToPay
Kann leer sein |
money decimal |
Rechnungsbetrag |
PaidSum
Kann leer sein |
money decimal |
Bezahlter Betrag |
CcCardType
Kann leer sein |
varchar(2) string |
Kreditkartentyp aus der Rechnungsadresse |
CcCardNr
Kann leer sein |
varchar(25) string |
Kreditkartennummer |
CcCardName
Kann leer sein |
varchar(60) string |
Karteninhaber |
CcCardExp
Kann leer sein |
varchar(4) string |
Ablaufdatum der Karte |
Account
Kann leer sein |
varchar(10) string |
Kontonummer |
Blz
Kann leer sein |
varchar(8) string |
Bankleitzahl |
BankName
Kann leer sein |
varchar(50) string |
Name der Bank |
AccountName
Kann leer sein |
varchar(27) string |
Kontoinhaber |
TrackingID
Kann leer sein |
varchar(8000) string |
Sendungsverfolgungsnummer der Rechnung |
ShipDate
Kann leer sein |
datetime dateTime |
Scan-Out-Datum |
UpdateDate
Kann leer sein |
datetime dateTime |
Änderungs-/Anlagedatum von Position oder Rechnung je nach |
ReminderLevel
Kann leer sein |
int |
Mahnstufe |
OrderNr
Kann leer sein |
int |
Interne Auftragsnummer der Position |
OrderNrExternal
Kann leer sein |
varchar(50) string |
Externe Auftragsnummer |
Note
Kann leer sein |
varchar(255) string |
Rechnungsnotiz |
ShipVendor
Kann leer sein |
varchar(3) string |
Versanddienstleister |
CcpPayID
|
varchar(1024) string |
Kommagetrennte Zahlungsanbieter-IDs (nur bei |
Currency
Kann leer sein |
varchar(3) string |
Immer |
OrderCurrency
Kann leer sein |
varchar(3) string |
Währungscode der Rechnung |
TotalToPay_OrderCurr
Kann leer sein |
money decimal |
Rechnungsbetrag |
ReturnReason
Kann leer sein |
varchar(100) string |
Rücksendegrund |
InvoiceKey
Kann leer sein |
int |
Rechnungsschlüssel |
RefToInvoiceNr
Kann leer sein |
varchar(20) string |
Referenzierte Rechnungsnummer (z. B. bei Gutschriften) |
RefToInvoiceKey
Kann leer sein |
int |
Referenzierter Rechnungsschlüssel |
Anrede
Kann leer sein |
varchar(60) string |
Anrede (Rechnungsadresse) |
Name
Kann leer sein |
varchar(121) string |
Name |
Name2
Kann leer sein |
varchar(60) string |
Namenszeile 2 |
FirstName
Kann leer sein |
varchar(60) string |
Vorname |
LastName
Kann leer sein |
varchar(60) string |
Nachname |
CareOf
Kann leer sein |
varchar(60) string |
c/o |
Address
Kann leer sein |
varchar(110) string |
Adresszeile |
Street
Kann leer sein |
varchar(100) string |
Straße |
HouseNr
Kann leer sein |
varchar(12) string |
Hausnummer |
City
Kann leer sein |
varchar(50) string |
Ort |
State
Kann leer sein |
varchar(3) string |
Bundesland/Region |
ZIP
Kann leer sein |
varchar(10) string |
Postleitzahl |
Country
Kann leer sein |
varchar(3) string |
Ländercode |
CustomerNrExternal
Kann leer sein |
varchar(60) string |
Externe Kundennummer aus der Rechnungsadresse |
Orderlinekey
Kann leer sein |
int |
Auftragspositionsschlüssel (-1/-2/-3 bei Pseudo-Positionen) |
EANUPC
|
string |
EAN/UPC des Artikels, |
ItemName
Kann leer sein |
varchar(120) string |
Artikelname |
SpecialNote
Kann leer sein |
varchar(8000) string |
Sondernotiz der Auftragsposition |
OrderDate
|
datetime dateTime |
Auftragsdatum (bzw. Anlagedatum); 1900-01-01 falls keiner |
OrderQty
Kann leer sein |
int |
Bestellte Menge |
ItemQty
Kann leer sein |
int |
Berechnete Menge |
ItemPrice_Brutto
Kann leer sein |
money decimal |
Bruttopreis |
ItemPrice_Netto
Kann leer sein |
numeric(17,4) decimal |
Nettopreis |
ItemPrice_VAT
Kann leer sein |
numeric(17,4) decimal |
MwSt.-Betrag der Position |
SupplPrice
Kann leer sein |
money decimal |
Lieferantenpreis (aus Preishistorie, falls vorhanden) |
ItemNrSuppl
Kann leer sein |
string |
Lieferanten-Artikelnummer |
ItemNrInt
Kann leer sein |
string |
Interne Artikelnummer |
SerialNr
Kann leer sein |
varchar(50) string |
Seriennummer |
OrderNr
Kann leer sein |
int |
Interne Auftragsnummer (Duplikat der vorherigen Spalte) |
STATUS
Kann leer sein |
varchar(3) string |
Auftragspositionsstatus, |
FullPrice
Kann leer sein |
money decimal |
Preis vor Rabatt, ersatzweise Bruttopreis |
DiscountValue
Kann leer sein |
money decimal |
Rabattbetrag, 0 falls keiner |
DiscountPerc
Kann leer sein |
numeric(6,2) decimal |
Rabatt in Prozent, 0 falls keiner |
DF_Type
Kann leer sein |
varchar(1) string |
Direct-Fulfillment-Typ, |
DFShipDate
Kann leer sein |
datetime dateTime |
Versanddatum Direct Fulfillment |
DFShipmentTrackingID
Kann leer sein |
varchar(100) string |
Sendungsnummer Direct Fulfillment |
SubShopLogo
Kann leer sein |
string |
Subshop-Logo des Auftrags |
SubShopNAme
|
string |
Subshop-Name, leer falls keiner |
Referrer
|
string |
Referrer des Auftrags, leer falls keiner |
Type
|
varchar(1) string |
|
ReturnCostsAmount
Kann leer sein |
money decimal |
Rücksendekosten der Rechnung |
InvLineKey
Kann leer sein |
int |
Rechnungspositionsschlüssel, NULL bei Pseudo-Positionen |
SupplNr
Kann leer sein |
varchar(4) string |
Lieferantennummer (aus Preishistorie, falls vorhanden) |
BatchNumber
Kann leer sein |
string |
Charge der Auftragsposition |
BestBeforeDate
Kann leer sein |
dateTime |
Mindesthaltbarkeitsdatum der Auftragsposition |
IBAN
Kann leer sein |
varchar(35) string |
IBAN |
BIC
Kann leer sein |
varchar(11) string |
BIC |
Beispielantwort
<SqlRowSet1>
<row>
<InvoiceNr>RE2024001234</InvoiceNr>
<InvoiceDate>2024-01-10T14:22:00</InvoiceDate>
<ShopID>SHP</ShopID>
<CustKey>4711</CustKey>
<Total>119.00</Total>
<VATSum>19.00</VATSum>
<PaymentCode>R</PaymentCode>
<PaymentText>Rechnung</PaymentText>
<Paid>false</Paid>
<UpdateDate>2024-01-10T14:22:00</UpdateDate>
<OrderNr>123456</OrderNr>
<OrderNrExternal>WEB-100045</OrderNrExternal>
<CcpPayID/>
<Currency>EUR</Currency>
<OrderCurrency>EUR</OrderCurrency>
<InvoiceKey>98765</InvoiceKey>
<LastName>Muster</LastName>
<City>Berlin</City>
<Country>DE</Country>
<Orderlinekey>555001</Orderlinekey>
<EANUPC>4006381333931</EANUPC>
<ItemName>Kugelschreiber blau</ItemName>
<ItemQty>2</ItemQty>
<ItemPrice_Brutto>59.50</ItemPrice_Brutto>
<ItemPrice_Netto>50.0000</ItemPrice_Netto>
<STATUS>AUS</STATUS>
<Type>I</Type>
<InvLineKey>880011</InvLineKey>
</row>
</SqlRowSet1>
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:pixiGetInvoiceLinesExtended>
<!-- <InvoiceNr>RE2024001234</InvoiceNr> -->
<!-- <ShopID>SHP</ShopID> -->
<!-- <PaymentType>R</PaymentType> -->
<!-- <OrderNR>123456</OrderNR> -->
<!-- <OrderNRExternal>WEB-100045</OrderNRExternal> -->
<!-- <InvDateFrom>2024-01-01T00:00:00</InvDateFrom> -->
<!-- <InvDateTo>2024-02-01T00:00:00</InvDateTo> -->
<!-- <UpdateDateFrom>2024-01-15T08:00:00</UpdateDateFrom> -->
<!-- <UpdateDateTo>2024-01-16T08:00:00</UpdateDateTo> -->
<!-- <RowCount>500</RowCount> -->
<!-- <AddCCPPayID>1</AddCCPPayID> -->
<!-- <OnlyUnpaidInvoices>0</OnlyUnpaidInvoices> -->
<!-- <IncludeSpecialInvLines>1</IncludeSpecialInvLines> -->
<!-- <Status>AUS</Status> -->
<!-- <CustomerNrExternal>K-778899</CustomerNrExternal> -->
<!-- <IsReplacementOnly>0</IsReplacementOnly> -->
<!-- <ConsiderInvoiceUpdates>0</ConsiderInvoiceUpdates> -->
</ns1:pixiGetInvoiceLinesExtended>
</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:pixiGetInvoiceLinesExtended>
<!-- <InvoiceNr>RE2024001234</InvoiceNr> -->
<!-- <ShopID>SHP</ShopID> -->
<!-- <PaymentType>R</PaymentType> -->
<!-- <OrderNR>123456</OrderNR> -->
<!-- <OrderNRExternal>WEB-100045</OrderNRExternal> -->
<!-- <InvDateFrom>2024-01-01T00:00:00</InvDateFrom> -->
<!-- <InvDateTo>2024-02-01T00:00:00</InvDateTo> -->
<!-- <UpdateDateFrom>2024-01-15T08:00:00</UpdateDateFrom> -->
<!-- <UpdateDateTo>2024-01-16T08:00:00</UpdateDateTo> -->
<!-- <RowCount>500</RowCount> -->
<!-- <AddCCPPayID>1</AddCCPPayID> -->
<!-- <OnlyUnpaidInvoices>0</OnlyUnpaidInvoices> -->
<!-- <IncludeSpecialInvLines>1</IncludeSpecialInvLines> -->
<!-- <Status>AUS</Status> -->
<!-- <CustomerNrExternal>K-778899</CustomerNrExternal> -->
<!-- <IsReplacementOnly>0</IsReplacementOnly> -->
<!-- <ConsiderInvoiceUpdates>0</ConsiderInvoiceUpdates> -->
</ns1:pixiGetInvoiceLinesExtended>
</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 = [
// 'InvoiceNr' => 'RE2024001234',
// 'ShopID' => 'SHP',
// 'PaymentType' => 'R',
// 'OrderNR' => '123456',
// 'OrderNRExternal' => 'WEB-100045',
// 'InvDateFrom' => '2024-01-01T00:00:00',
// 'InvDateTo' => '2024-02-01T00:00:00',
// 'UpdateDateFrom' => '2024-01-15T08:00:00',
// 'UpdateDateTo' => '2024-01-16T08:00:00',
// 'RowCount' => '500',
// 'AddCCPPayID' => '1',
// 'OnlyUnpaidInvoices' => '0',
// 'IncludeSpecialInvLines' => '1',
// 'Status' => 'AUS',
// 'CustomerNrExternal' => 'K-778899',
// 'IsReplacementOnly' => '0',
// 'ConsiderInvoiceUpdates' => '0',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiGetInvoiceLinesExtended', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiGetInvoiceLinesExtended