pixiReport_GrossProfit
Liefert den Rohertragsbericht pro Artikel für einen Rechnungsdatumsbereich mit Verkaufs- und Retourenwerten, optional gefiltert nach Shop, Kategorie, Lieferant, Zahlungsart und Tags.
Stellt den Pixi-Bericht Rohertrag (Report_GrossProfit) als API-Call bereit. Es wird nur die Detailansicht geliefert; der Summenmodus des Berichts ist fest deaktiviert.
Ablauf
- Die Parameter werden normalisiert:
FromDatewird auf den Tagesbeginn,ToDateauf das Tagesende (23:59:59.997) gesetzt. Leere Zeichenketten gelten alsNULL; einTagKeyvon0gilt ebenfalls als nicht gesetzt. - Die Parameter werden geprüft. Liegt
FromDatenachToDateoder existiert ein angegebener Shop, eine Kategorie (TontrArten), ein Lieferant, eine Zahlungsart, eine auszuschließende Zahlungsart oder ein Tag nicht, wird eine einzelne Statuszeile mitStatus=Errorgeliefert und der Aufruf beendet. - Der Bericht liest Rechnungspositionen, deren Rechnungsdatum zwischen
FromDateundToDateliegt, und wendet die optionalen Filter an:ShopID: nur Positionen dieses Shops.Category: Konfigurationsart des Artikels entspricht der Kategorie.SupplNr: nur Artikel dieses Lieferanten.PaymentType: nur Positionen mit dieser Zahlungsart;ExcludePaymentType: Positionen mit dieser Zahlungsart werden ausgeschlossen.TagKey1–TagKey3: nur Artikel, die alle angegebenen Tags besitzen (UND-Verknüpfung).
- Die Positionen werden pro Artikel gruppiert, getrennt nach verkauften und retournierten Mengen, und zu einer Zeile pro Artikel zusammengeführt.
Währung
- Ohne
ShopIDwerden alle Beträge (bei aktivierter Mehrwährung) in die Datenbankwährung umgerechnet;Currencyenthält den Code der Datenbankwährung. - Mit
ShopIDwerden die Beträge bei aktivierter Mehrwährung in der Basiswährung des Shops geliefert, sonst wird der Code der Datenbankwährung ausgegeben.
Werte pro Zeile
Sales_*sind mengengewichtete durchschnittliche Stückwerte der verkauften Positionen (Brutto-Verkaufspreis, MwSt., Lieferantenpreis).Returns_*sind die entsprechenden Werte der retournierten Positionen.SingleGrossProfit= durchschnittlicher Brutto-VK − durchschnittliche MwSt. − durchschnittlicher EK der verkauften Positionen.TotalGrossProfit= Stück-Rohertrag der Verkäufe × verkaufte Menge − Stück-Rohertrag der Retouren × retournierte Menge.
Sonderpositionen wie Versandkosten oder Gutscheine (negative interne Artikelschlüssel) können als eigene Zeilen erscheinen.
Hinweise
- Die Fehlerzeilen enthalten zwei Spalten:
Statusund einen Fehlertext. Nur bei der Prüfung vonExcludePaymentTypeheißt die TextspalteMessage; bei allen anderen Prüfungen hat die Spalte keinen Alias, sodass sie im SOAP-Client unter einem generierten Namen (z. B.Column1) ankommen kann. - Der Datumsfehlertext lautet
"DateTo" is greater than "DateFrom", wird aber geliefert, wennFromDatenachToDateliegt. FromDateundToDatehaben keinen Standardwert. WirdNULLübergeben, passen keine Rechnungspositionen und das Ergebnis ist leer.- Die Tag-Filterung greift nur, wenn
TagKey1gesetzt ist.TagKey2wird nur zusammen mitTagKey1verwendet,TagKey3nur wennTagKey1undTagKey2gesetzt sind; z. B. wirdTagKey2allein zwar geprüft, aber nicht als Filter verwendet. - Der zugrunde liegende Bericht sortiert nach Artikelname, die Zeilen laufen jedoch über eine temporäre Tabelle und das abschließende
SELECThat keinORDER BY; die Reihenfolge ist daher nicht garantiert. - Bei jedem Aufruf wird zuerst
Report_SaveSupplierPricesausgeführt, das laut Kommentar eine Cache-Tabelle mit Lieferantenpreisen befüllt; die Definition liegt nicht vor. Das Mehrwährungsverhalten hängt von der EinstellungMultiCurrencyEnabledab. - Alle Lesezugriffe erfolgen mit
NOLOCK, nicht festgeschriebene Daten können enthalten sein. Große Datumsbereiche können langsam sein. - Durchschnittswerte werden durch die Summe der absoluten Mengen geteilt; Gruppen mit Gesamtmenge null könnten einen Division-durch-Null-Fehler auslösen.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
FromDate
Pflicht
|
datetime dateTime |
– |
Beginn des Rechnungsdatumsbereichs. Die Uhrzeit wird ignoriert; der Bereich beginnt mit Tagesbeginn. Beispiel: |
ToDate
Pflicht
|
datetime dateTime |
– |
Ende des Rechnungsdatumsbereichs. Die Uhrzeit wird ignoriert; der ganze Tag ist eingeschlossen. Beispiel: |
ShopID
|
varchar(3) string |
NULL |
Optionaler Shop-Filter. Muss in Beispiel: |
Category
|
varchar(10) string |
NULL |
Optionale Artikelkategorie (Konfigurationsart, Beispiel: |
SupplNr
|
varchar(10) string |
NULL |
Optionale Lieferantennummer. Muss in Beispiel: |
PaymentType
|
char(1) string |
NULL |
Optionaler Zahlungsart-Code; nur Rechnungspositionen mit dieser Zahlungsart werden berücksichtigt. Muss in Beispiel: |
ExcludePaymentType
|
char(1) string |
NULL |
Optionaler auszuschließender Zahlungsart-Code. Muss in Beispiel: |
TagKey1
|
int | NULL |
Optionale Artikel-Tag-ID. Nur Artikel mit diesem Tag werden berücksichtigt. Beispiel: |
TagKey2
|
int | NULL |
Optionale zweite Artikel-Tag-ID; Artikel müssen sie zusätzlich zu Beispiel: |
TagKey3
|
int | NULL |
Optionale dritte Artikel-Tag-ID; wird nur als Filter verwendet, wenn |
Antwort
Result-Set 1 · Wenn eine Parameterprüfung fehlschlägt (Datumsbereich oder unbekannter Shop, Kategorie, Lieferant, Zahlungsart oder Tag)
Einzelne Statuszeile mit dem Prüfungsfehler. Der Aufruf endet danach.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(5) string |
Immer |
Message
|
varchar string |
Fehlertext. Nur bei der Prüfung von |
Result-Set 2 · Bei Erfolg
Eine Zeile pro Artikel (inklusive Sonderpositionen wie Versandkosten oder Gutscheine) mit Verkaufs-, Retouren- und Rohertragswerten.
| Spalte | Typ | Beschreibung |
|---|---|---|
ItemNrSupplier
Kann leer sein |
varchar(50) string |
Lieferanten-Artikelnummer. |
Barcode
Kann leer sein |
varchar(50) string |
EAN/UPC-Barcode des Artikels. |
ItemName
Kann leer sein |
varchar(120) string |
Artikelname. |
Supplier
Kann leer sein |
varchar(60) string |
Name des Lieferanten. |
Sales_Quantity
|
int |
Im Zeitraum verkaufte Menge. |
Sales_SellingPrice
|
money decimal |
Durchschnittlicher Brutto-Verkaufspreis pro Stück der verkauften Positionen. |
Sales_VAT
|
money decimal |
Durchschnittlicher MwSt.-Betrag pro Stück der verkauften Positionen, auf 2 Stellen gerundet. |
Sales_SupplierPrice
|
money decimal |
Durchschnittlicher Lieferantenpreis (EK) pro Stück der verkauften Positionen. |
Returns_SellingPrice
Kann leer sein |
money decimal |
Durchschnittlicher Brutto-Verkaufspreis pro Stück der retournierten Positionen (Vorzeichen umgekehrt). |
Returns_Quantity
|
int |
Im Zeitraum retournierte Menge. |
Returns_VAT
Kann leer sein |
money decimal |
Durchschnittlicher MwSt.-Betrag pro Stück der retournierten Positionen (Vorzeichen umgekehrt), auf 2 Stellen gerundet. |
Returns_SupplierPrice
Kann leer sein |
money decimal |
Durchschnittlicher Lieferantenpreis pro Stück der retournierten Positionen (Vorzeichen umgekehrt). |
SingleGrossProfit
|
money decimal |
Rohertrag pro verkauftem Stück: VK − MwSt. − EK, auf 2 Stellen gerundet. |
TotalGrossProfit
Kann leer sein |
money decimal |
Gesamtrohertrag: Stück-Rohertrag der Verkäufe × verkaufte Menge minus Stück-Rohertrag der Retouren × retournierte Menge, auf 2 Stellen gerundet. |
Currency
Kann leer sein |
varchar(3) string |
Währungscode der Beträge (Datenbankwährung oder Basiswährung des Shops, wenn |
Beispielantwort
<SqlRowSet1>
<row>
<ItemNrSupplier>HX-4410</ItemNrSupplier>
<Barcode>4012345678901</Barcode>
<ItemName>Trinkflasche Edelstahl 750 ml</ItemName>
<Supplier>Hydro Supplies GmbH</Supplier>
<Sales_Quantity>42</Sales_Quantity>
<Sales_SellingPrice>19.9900</Sales_SellingPrice>
<Sales_VAT>3.1900</Sales_VAT>
<Sales_SupplierPrice>7.5000</Sales_SupplierPrice>
<Returns_SellingPrice>19.9900</Returns_SellingPrice>
<Returns_Quantity>2</Returns_Quantity>
<Returns_VAT>3.1900</Returns_VAT>
<Returns_SupplierPrice>7.5000</Returns_SupplierPrice>
<SingleGrossProfit>9.3000</SingleGrossProfit>
<TotalGrossProfit>372.0000</TotalGrossProfit>
<Currency>EUR</Currency>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | Parameter "DateTo" is greater than parameter "DateFrom" | `FromDate` liegt nach `ToDate`. Ein Startdatum angeben, das nicht nach dem Enddatum liegt. |
| Error | Shop "{ShopID}" does not exist | Die angegebene `ShopID` existiert nicht in `Shops`. |
| Error | Category "{Category}" does not exist | Die angegebene `Category` existiert nicht in `TontrArten`. |
| Error | Supplier number "{SupplNr}" does not exist | Die angegebene `SupplNr` existiert nicht in `Suppliers`. |
| Error | Payment with payment type/code "{PaymentType}" does not exist | Der angegebene `PaymentType` ist kein Code in `Payments`. |
| Error | Payment with payment type/code "{ExcludePaymentType}" does not exist | Der angegebene `ExcludePaymentType` ist kein Code in `Payments`. In diesem Fall heißt die Textspalte `Message`. |
| Error | Tag with tag ID "{TagKey}" does not exist | Einer der Werte `TagKey1`, `TagKey2` oder `TagKey3` ist kein existierender Artikel-Tag (`ItemTag`). |
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:pixiReport_GrossProfit>
<FromDate>2024-01-01T00:00:00</FromDate>
<ToDate>2024-01-31T00:00:00</ToDate>
<!-- <ShopID>SHP</ShopID> -->
<!-- <Category>STANDARD</Category> -->
<!-- <SupplNr>L1001</SupplNr> -->
<!-- <PaymentType>R</PaymentType> -->
<!-- <ExcludePaymentType>V</ExcludePaymentType> -->
<!-- <TagKey1>12</TagKey1> -->
<!-- <TagKey2>15</TagKey2> -->
<!-- <TagKey3>?</TagKey3> -->
</ns1:pixiReport_GrossProfit>
</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:pixiReport_GrossProfit>
<FromDate>2024-01-01T00:00:00</FromDate>
<ToDate>2024-01-31T00:00:00</ToDate>
<!-- <ShopID>SHP</ShopID> -->
<!-- <Category>STANDARD</Category> -->
<!-- <SupplNr>L1001</SupplNr> -->
<!-- <PaymentType>R</PaymentType> -->
<!-- <ExcludePaymentType>V</ExcludePaymentType> -->
<!-- <TagKey1>12</TagKey1> -->
<!-- <TagKey2>15</TagKey2> -->
<!-- <TagKey3>?</TagKey3> -->
</ns1:pixiReport_GrossProfit>
</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 = [
'FromDate' => '2024-01-01T00:00:00',
'ToDate' => '2024-01-31T00:00:00',
// 'ShopID' => 'SHP',
// 'Category' => 'STANDARD',
// 'SupplNr' => 'L1001',
// 'PaymentType' => 'R',
// 'ExcludePaymentType' => 'V',
// 'TagKey1' => '12',
// 'TagKey2' => '15',
// 'TagKey3' => '?',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiReport_GrossProfit', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiReport_GrossProfit