Postman-Collection
Reports Lesen

pixiReportStockRange

Liefert einen seitenweise abrufbaren Reichweitenbericht je Artikel mit Bestand, Verkäufen im Zeitraum, Verkäufen pro Tag und der daraus berechneten Reichweite in Tagen.

Berechnet, wie viele Tage der aktuelle Bestand jedes Artikels auf Basis der bisherigen Verkäufe reicht, und liefert die Artikel, deren Reichweite mindestens MinStockRange Tage beträgt. Typischer Einsatz ist die Suche nach Ladenhütern oder Überbeständen.

Berechnung

  1. Für jeden Artikel mit mindestens einem Bestandsdatensatz (InvBinItem verknüpft mit InvBin) wird ermittelt:
    • Stock: Summe von BinItemQty über alle Lagerplätze des Artikels.
    • Sales: Summe von ItemQty der Rechnungspositionen (Invlines) des Artikels, die in den letzten SalesDaysBack Kalendertagen angelegt wurden. Standardmäßig zählen nur Positionen mit positiver Menge. Mit DeductReturns = 1 werden alle Positionen gezählt, negative Positionen wie Gutschriften verringern also die Summe.
    • LastStockInc: Anzahl Tage seit dem jüngsten UpdateDate der Bestandsdatensätze des Artikels.
  2. SalesPerDay = Sales / SalesDaysBack.
  3. StockRange = Stock / SalesPerDay in Tagen. Ist Sales 0 oder kleiner, wird StockRange auf 9999 gesetzt.

Filter (alle mit UND verknüpft)

  • SupplNr: nur Artikel dieses Lieferanten (items.SupplNR).
  • PriceMin / PriceMax: Grenzen für den Verkaufspreis (items.Price).
  • LastStockIncDays: nur Artikel, deren LastStockInc größer als dieser Wert ist.
  • StockMin: nur Artikel mit Stock >= diesem Wert (Standard 0, Artikel mit negativem Bestand fallen also heraus).
  • MinStockRange: nur Artikel mit StockRange >= diesem Wert.
  • ExcludeInhouseEAN = 1: Artikel, deren EANUPC mit 2 beginnt (interne EAN-Nummern), werden ausgeschlossen.

Sortierung und Paging

Die gefilterten Zeilen werden in Row nach StockRange absteigend, dann ItemName nummeriert. Zurückgegeben werden höchstens RowCount Zeilen mit Row > StartRow in derselben Reihenfolge. Für die nächste Seite wird die zuletzt erhaltene Row als StartRow übergeben.

Hinweise

  • Alle Tabellen werden WITH (NOLOCK) gelesen, die Werte können also nicht festgeschriebene Daten enthalten.
  • Die Berechnung läuft über alle Artikel mit Bestandsdatensätzen und nutzt je Artikel eine korrelierte Unterabfrage auf Invlines. Jeder Aufruf (auch jede Seite) berechnet den vollständigen Bericht neu; bei großen Datenbanken kann das langsam sein.
  • SalesDaysBack = 0 führt zu einem SQL-Fehler wegen Division durch null, der als SqlMessage zurückkommt. Bei SalesDaysBack = NULL werden keine Verkäufe gezählt, SalesPerDay ist NULL und jeder Artikel erhält StockRange 9999.
  • PriceMin und PriceMax werden mit NULLIF(…, '') normalisiert; die leere Zeichenkette wird in den Money-Wert 0 umgewandelt, daher bedeutet 0 kein Filter. Insbesondere schränkt PriceMax = 0 das Ergebnis nicht ein.
  • SupplNr als leere Zeichenkette wird wie NULL behandelt (kein Filter). StartRow, StockMin und MinStockRange = NULL werden als 0 behandelt.
  • RowCount wird per SET ROWCOUNT angewendet; RowCount = 0 liefert alle passenden Zeilen.
  • Bei ExcludeInhouseEAN = 1 werden auch Artikel ohne EANUPC (NULL) ausgeschlossen, da der NOT LIKE-Vergleich für NULL nicht wahr ist.
  • Trotz des Namens basiert LastStockInc auf dem jüngsten UpdateDate der Bestandsdatensätze und nicht speziell auf dem letzten Bestandszugang.

Parameter

Parameter Typ Standardwert Beschreibung
RowCount
int 100

Maximale Anzahl zurückgegebener Zeilen (Seitengröße). 0 liefert alle Zeilen.

Beispiel: 100

StartRow
int NULL

Es werden nur Zeilen mit Row größer als dieser Wert geliefert. NULL wird als 0 behandelt (erste Seite).

Beispiel: 0

MinStockRange
int 100

Mindestreichweite in Tagen; nur Artikel mit StockRange >= diesem Wert werden geliefert. NULL wird als 0 behandelt.

Beispiel: 180

SalesDaysBack
int 360

Länge des Verkaufszeitraums in Tagen, rückwärts ab jetzt gerechnet. Zugleich Divisor für SalesPerDay; darf nicht 0 sein.

Beispiel: 360

LastStockIncDays
int NULL

Wenn gesetzt, nur Artikel, deren Bestandsdatensätze zuletzt vor mehr als dieser Anzahl Tage aktualisiert wurden (LastStockInc > Wert).

Beispiel: 90

StockMin
int NULL

Mindestgesamtbestand; nur Artikel mit Stock >= diesem Wert. NULL wird als 0 behandelt.

Beispiel: 1

PriceMin
money
decimal
NULL

Mindestverkaufspreis des Artikels (items.Price). NULL oder 0 bedeutet kein Filter.

Beispiel: 10.00

PriceMax
money
decimal
NULL

Höchstverkaufspreis des Artikels (items.Price). NULL oder 0 bedeutet kein Filter.

Beispiel: 500.00

SupplNr
varchar(4)
string
NULL

Lieferantennummer; nur Artikel dieses Lieferanten (items.SupplNR). NULL oder leer bedeutet alle Lieferanten.

Beispiel: L001

ExcludeInhouseEAN
bit
boolean
0

Legt fest, ob Artikel mit internen EAN-Nummern (beginnend mit 2) ausgeschlossen werden.

Erlaubte Werte

  • 0 – Alle Artikel werden berücksichtigt.
  • 1 – Artikel, deren `EANUPC` mit `2` beginnt (sowie Artikel ohne EAN), werden ausgeschlossen.

Beispiel: 1

DeductReturns
bit
boolean
0

Legt fest, ob Rechnungspositionen mit negativer Menge (z. B. Gutschriften) von der Verkaufsmenge abgezogen werden.

Erlaubte Werte

  • 0 – Nur Rechnungspositionen mit positiver Menge werden gezählt.
  • 1 – Alle Rechnungspositionen werden summiert, negative Mengen verringern die Verkäufe.

Beispiel: 0

Antwort

Result-Set 1 · Immer (kann leer sein)

Eine Zeile je Artikel, der den Filtern entspricht, seitenweise begrenzt durch RowCount und StartRow, sortiert nach StockRange absteigend, dann ItemName.

Spalte Typ Beschreibung
Row bigint
long

Zeilennummer im gefilterten und sortierten Ergebnis; dient dem Paging.

ItemKey int

Interner Schlüssel des Artikels.

ItemName
Kann leer sein
varchar(120)
string

Artikelbezeichnung.

Price money
decimal

Verkaufspreis des Artikels.

SupplPrice money
decimal

Einkaufspreis beim Lieferanten.

EANUPC
Kann leer sein
varchar(13)
string

EAN/UPC des Artikels.

ItemNrSuppl
Kann leer sein
varchar(50)
string

Artikelnummer des Lieferanten.

ItemNrInt varchar(50)
string

Interne Artikelnummer.

Stock
Kann leer sein
int

Gesamtbestand über alle Lagerplätze (Summe von BinItemQty).

Sales int

Berechnete Menge in den letzten SalesDaysBack Tagen.

SalesPerDay
Kann leer sein
numeric(29,15)
decimal

Durchschnittliche Verkäufe pro Tag (Sales / SalesDaysBack).

LastStockInc
Kann leer sein
int

Tage seit dem jüngsten UpdateDate der Bestandsdatensätze des Artikels.

StockRange
Kann leer sein
numeric(38,11)
decimal

Reichweite in Tagen (Stock / SalesPerDay); 9999, wenn keine Verkäufe vorliegen.

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:pixiReportStockRange>
      <!-- <RowCount>100</RowCount> -->
      <!-- <StartRow>0</StartRow> -->
      <!-- <MinStockRange>180</MinStockRange> -->
      <!-- <SalesDaysBack>360</SalesDaysBack> -->
      <!-- <LastStockIncDays>90</LastStockIncDays> -->
      <!-- <StockMin>1</StockMin> -->
      <!-- <PriceMin>10.00</PriceMin> -->
      <!-- <PriceMax>500.00</PriceMax> -->
      <!-- <SupplNr>L001</SupplNr> -->
      <!-- <ExcludeInhouseEAN>1</ExcludeInhouseEAN> -->
      <!-- <DeductReturns>0</DeductReturns> -->
    </ns1:pixiReportStockRange>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

items · Lesen InvBinItem · Lesen InvBin · Lesen Invlines · Lesen
SQL-Objekt:
dbo.pipiReportStockRange
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben