Postman-Collection
Stock Lesen

pixiGetMinStockChanges

Liefert Artikel, deren aus den letzten Verkäufen errechneter empfohlener Mindestbestand bzw. Mindestbestellmenge um mindestens einen Anteil vom aktuellen Wert abweicht.

Berechnet pro Artikel Dispositionsempfehlungen für einen Lagerort und liefert nur Artikel mit einer deutlichen Abweichung. Das Ergebnis wird sortiert und seitenweise ausgegeben.

Normalisierung der Eingaben

  • 0 bei HistoryDays, SecurityDays, ShowChangesAbovePercentage und Rows wird durch den Standardwert ersetzt. ConfigtypeKey = 0 und leere Zeichenketten bei den Text- und XML-Parametern gelten als NULL.
  • Ist Location leer, wird der erste Lagerort mit ShowLocation = 1 verwendet.
  • SortColumn und SortDirection werden in Kleinbuchstaben umgewandelt.

Verkaufsquelle (Pos / Shops)

  • Nur Shops gesetzt: nur Verkäufe aus Auftragspositionen.
  • Nur Pos gesetzt: nur abgeschlossene POS-Belege.
  • Beide oder keiner gesetzt: Auftragspositionen plus POS-Verkäufe. Der Inhalt von Pos wird nie ausgewertet. Shops wird zwar geparst, die Shopliste filtert die Daten aber nicht.

Artikelfilter Die Filter werden in dieser Reihenfolge angewendet und bilden eine Liste von Artikelschlüsseln:

  1. Categories (/CATS/CAT/CatId, über TontrArten auf items.ConfigType abgebildet).
  2. Suppliers (/SUPPLIERS/SUP/SupplNr), Schnittmenge mit der bisherigen Liste.
  3. Tags (/TAGS/TAG mit TAGKEY und TAGTYPE): a = Artikel muss alle diese Tags haben, o = mindestens einen, n = Artikel darf den Tag nicht haben. Passende Artikel werden der Liste hinzugefügt.
  4. ConfigtypeKey (aktive Artikel mit diesem ConfigType), Schnittmenge mit der Liste, falls diese nicht leer ist.
  5. SupplNR, Schnittmenge mit der Liste, falls diese nicht leer ist.

Anschließend werden deaktivierte Artikel entfernt. Ohne Filter werden alle aktiven Artikel ausgewertet.

Berechnung pro Artikel

  • MinStockQty / MinOrderQty: aktuelle Werte aus ItemLocationSpecific für Location.
  • Quantity: Summe von LocationQuantity über die Lagerorte in Locations (Standard: alle Lagerorte mit ShowLocation = 1).
  • DailyQty: verkaufte Menge der letzten HistoryDays Tage am Location (Auftragspositionen mit Status AUS, POS-Belege mit Status CLO) geteilt durch HistoryDays. DailyQtyBefore: dasselbe für den gleich langen Vorzeitraum. Trend ist +, - oder ein Leerzeichen.
  • RecommendedMinStockQty = FLOOR(DailyQty × (Liefertage + SecurityDays)); ohne Liefertage beim Lieferanten werden 7 Tage angenommen.
  • RecommendedMinOrderQty = FLOOR(DailyQty × DesiredStockTurnOver); ein Ergebnis von 1 wird zu 0. Negative Empfehlungen werden als 0 ausgegeben.
  • ChangeMinStockQty / ChangeMinOrderQty: relative Änderung (Empfehlung − aktuell) / aktuell; ist der aktuelle Wert 0 und eine Empfehlung vorhanden, 1.
  • StockTurnover = FLOOR(Quantity / DailyQty), 0 ohne Verkäufe.
  • NumOfOrders: Anzahl unterschiedlicher Aufträge / POS-Belege im Zeitraum über die Locations-Liste.

Auswahl, Sortierung und Paging Nur Artikel mit ABS(ChangeMinStockQty) oder ABS(ChangeMinOrderQty) ≥ ShowChangesAbovePercentage bleiben übrig. Sie werden nach SortColumn / SortDirection und danach nach ItemName aufsteigend nummeriert (RowNr). Ausgegeben werden Zeilen mit RowNr > Start, RowNr ≤ Start + Rows und ItemKey > ItemKeyStart, zusammen mit TotalRows (alle passenden Artikel) und NrOfRecordsLeft (Zeilen nach Start mit ItemKey > ItemKeyStart).

Hinweise

  • Nur lesend; alle permanenten Tabellen werden WITH (NOLOCK) gelesen, daher können nicht festgeschriebene Daten erscheinen. Pro Artikel werden mehrere Aggregate über Orderlines und POSitem2/POSheader2 berechnet; bei großen Datenbeständen kann der Aufruf langsam sein, Filter verwenden.
  • Fehler im Code: Im Standardmodus (Auftragspositionen plus POS) ist ChangeMinOrderQty immer NULL, da der Code den Nur-POS-Fall doppelt prüft. Dann entscheidet nur ChangeMinStockQty, ob ein Artikel geliefert wird.
  • Artikel ohne ItemLocationSpecific-Zeile für Location oder ohne Zeile in der Locations-Liste werden nicht geliefert.
  • Der Vorzeitraum schließt den Tag genau HistoryDays Tage zurück aus.
  • Tags fügt Artikel zur Liste hinzu, statt die Schnittmenge mit Categories/Suppliers zu bilden. Ein Filter nur mit n-Tags liefert keine Artikel, sobald irgendein Artikel einen dieser Tags trägt.
  • Treffen Categories oder Suppliers keinen Artikel und sind weder Tags, ConfigtypeKey noch SupplNR angegeben, wird der Filter ignoriert und alle aktiven Artikel werden ausgewertet.
  • SortColumn wird in Kleinbuchstaben umgewandelt und mit Namen in gemischter Schreibweise verglichen; die Sortierung funktioniert nur bei einer Datenbank-Collation ohne Unterscheidung der Groß-/Kleinschreibung. Unbekannte Werte sortieren nach ItemName.
  • DesiredStockTurnOver = 0 wird nicht durch den Standardwert ersetzt und führt zu empfohlenen Bestellmengen von 0.
  • Ungültiges XML in den XML-Parametern führt zu einem SQL-Fehler aus sp_xml_preparedocument.
  • Zum Übernehmen einer Empfehlung dient pixiSetItemBuyingInfo.

Parameter

Parameter Typ Standardwert Beschreibung
HistoryDays
int 180

Länge des Verkaufszeitraums in Tagen zur Berechnung der Tagesmenge. Der gleich lange Vorzeitraum wird für DailyQtyBefore verwendet. 0 bedeutet Standardwert.

Beispiel: 90

SecurityDays
int 7

Sicherheitstage, die bei der Berechnung des empfohlenen Mindestbestands zu den Liefertagen des Lieferanten addiert werden. 0 bedeutet Standardwert.

Beispiel: 7

DesiredStockTurnOver
int 30

Anzahl Verkaufstage, die eine Bestellung abdecken soll; Grundlage der empfohlenen Mindestbestellmenge.

Beispiel: 30

ShowChangesAbovePercentage
float
decimal
0.1

Minimale relative Änderung (z. B. 0.1 = 10 %) von Mindestbestand oder Mindestbestellmenge, ab der ein Artikel geliefert wird. 0 bedeutet Standardwert.

Beispiel: 0.2

SupplNR
varchar(4)
string
NULL

Beschränkt das Ergebnis auf Artikel dieser Lieferantennummer.

Beispiel: LIE1

Rows
int 100

Seitengröße: maximale Anzahl gelieferter Zeilen. 0 bedeutet Standardwert.

Beispiel: 50

ItemKeyStart
int 0

Es werden nur Zeilen mit ItemKey größer als dieser Wert geliefert.

Beispiel: 0

ConfigtypeKey
int NULL

Beschränkt das Ergebnis auf Artikel mit diesem ConfigType. 0 gilt als NULL.

Beispiel: 2

Tags
varchar(max)
xml
NULL

XML-Liste von Tag-Filtern /TAGS/TAG mit TAGKEY und TAGTYPE (a = alle erforderlich, o = mindestens einer, n = darf nicht vorhanden sein).

Beispiel:

<TAGS>
  <TAG>
    <TAGKEY>12</TAGKEY>
    <TAGTYPE>a</TAGTYPE>
  </TAG>
  <TAG>
    <TAGKEY>15</TAGKEY>
    <TAGTYPE>o</TAGTYPE>
  </TAG>
  <TAG>
    <TAGKEY>20</TAGKEY>
    <TAGTYPE>n</TAGTYPE>
  </TAG>
</TAGS>
SortColumn
varchar(50)
string
itemname

Spalte für Sortierung und RowNr. Groß-/Kleinschreibung wird ignoriert. Unbekannte Werte sortieren nach ItemName.

Erlaubte Werte

  • itemname – Artikelname
  • eanupc – EAN/UPC
  • dailyqty – Tagesmenge
  • quantity – Bestand
  • minstockqty – Aktueller Mindestbestand
  • recommendedminstockqty – Empfohlener Mindestbestand
  • changeminstockqty – Relative Änderung des Mindestbestands
  • minorderqty – Aktuelle Mindestbestellmenge
  • recommendedminorderqty – Empfohlene Mindestbestellmenge
  • changeminorderqty – Relative Änderung der Mindestbestellmenge
  • defaultdeliverydays – Liefertage
  • supplname – Lieferantenname
  • supplnr – Lieferantennummer
  • itemkey – Artikelschlüssel
  • trend – Verkaufstrend
  • numoforders – Anzahl Aufträge

Beispiel: changeminstockqty

SortDirection
varchar(1)
string
a

Sortierrichtung. Groß-/Kleinschreibung wird ignoriert.

Erlaubte Werte

  • a – Aufsteigend
  • d – Absteigend

Beispiel: d

Start
int 0

Paging-Offset: Es werden Zeilen mit RowNr größer als dieser Wert geliefert.

Beispiel: 0

Suppliers
varchar(max)
xml
NULL

XML-Liste von Lieferantennummern /SUPPLIERS/SUP/SupplNr; nur Artikel dieser Lieferanten werden ausgewertet.

Beispiel:

<SUPPLIERS>
  <SUP>
    <SupplNr>LIE1</SupplNr>
  </SUP>
  <SUP>
    <SupplNr>LIE2</SupplNr>
  </SUP>
</SUPPLIERS>
Categories
varchar(max)
xml
NULL

XML-Liste von Kategorieschlüsseln /CATS/CAT/CatId (TontrArtKey); nur Artikel mit passendem ConfigType werden ausgewertet.

Beispiel:

<CATS>
  <CAT>
    <CatId>3</CatId>
  </CAT>
  <CAT>
    <CatId>5</CatId>
  </CAT>
</CATS>
Locations
varchar(max)
xml
NULL

XML-Liste von Lagerort-IDs /LOCATIONS/LOC/LocationID für Quantity und NumOfOrders. Standard: alle Lagerorte mit ShowLocation = 1.

Beispiel:

<LOCATIONS>
  <LOC>
    <LocationID>001</LocationID>
  </LOC>
  <LOC>
    <LocationID>002</LocationID>
  </LOC>
</LOCATIONS>
Shops
varchar(max)
xml
NULL

XML-Liste /SHOPS/SHOP/ShopID. Nur das Vorhandensein zählt: Zusammen mit Pos bestimmt es die Verkaufsquelle (siehe Beschreibung). Die Shop-IDs filtern die Daten nicht.

Beispiel:

<SHOPS>
  <SHOP>
    <ShopID>WEB</ShopID>
  </SHOP>
</SHOPS>
Pos
varchar(max)
string
NULL

Kennzeichen für POS-Verkäufe: Jeder nicht leere Wert gilt als gesetzt; der Inhalt wird nicht gelesen. Zusammen mit Shops bestimmt es die Verkaufsquelle.

Beispiel: 1

Location
varchar(max)
string
NULL

Lagerort-ID für die aktuellen Mindestwerte und die Verkaufszahlen. Standard: erster Lagerort mit ShowLocation = 1.

Beispiel: 001

Antwort

Result-Set 1 · Immer (ggf. leer)

Eine Seite von Artikeln mit deutlicher Änderung von Mindestbestand oder Mindestbestellmenge, inklusive Paging-Summen.

Spalte Typ Beschreibung
ItemKey int

Artikelschlüssel

EANUPC
Kann leer sein
string

EAN/UPC des Artikels

ItemName
Kann leer sein
string

Artikelname

DailyQty
Kann leer sein
numeric
decimal

Durchschnittlich verkaufte Menge pro Tag im aktuellen Zeitraum

DailyQtyBefore
Kann leer sein
numeric
decimal

Durchschnittlich verkaufte Menge pro Tag im Vorzeitraum

Trend varchar(1)
string

+ steigend, - fallend, Leerzeichen unverändert

MinStockQty
Kann leer sein
int

Aktueller Mindestbestand am Location

RecommendedMinStockQty
Kann leer sein
numeric
decimal

Empfohlener Mindestbestand (nicht negativ)

MinOrderQty
Kann leer sein
int

Aktuelle Mindestbestellmenge am Location

RecommendedMinOrderQty
Kann leer sein
numeric
decimal

Empfohlene Mindestbestellmenge (nicht negativ; 1 wird zu 0)

ChangeMinStockQty
Kann leer sein
numeric
decimal

Relative Änderung zwischen empfohlenem und aktuellem Mindestbestand

ChangeMinOrderQty
Kann leer sein
numeric
decimal

Relative Änderung zwischen empfohlener und aktueller Mindestbestellmenge; im kombinierten Modus NULL (siehe Hinweise)

Quantity
Kann leer sein
decimal

Bestand summiert über die Locations-Liste

StockTurnover
Kann leer sein
numeric
decimal

Reichweite des Bestands in Tagen (Quantity / DailyQty), 0 ohne Verkäufe

SupplNr
Kann leer sein
varchar(4)
string

Lieferantennummer des Artikels

SupplName
Kann leer sein
string

Lieferantenname

DefaultDeliveryDays int

Liefertage des Lieferanten, 7 falls nicht gesetzt

NumOfOrders
Kann leer sein
int

Anzahl unterschiedlicher Aufträge / POS-Belege im aktuellen Zeitraum

RowNr bigint
long

Position im sortierten Ergebnis

TotalRows int

Gesamtzahl passender Artikel

NrOfRecordsLeft int

Anzahl passender Zeilen nach Start mit ItemKey > ItemKeyStart

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:pixiGetMinStockChanges>
      <!-- <HistoryDays>90</HistoryDays> -->
      <!-- <SecurityDays>7</SecurityDays> -->
      <!-- <DesiredStockTurnOver>30</DesiredStockTurnOver> -->
      <!-- <ShowChangesAbovePercentage>0.2</ShowChangesAbovePercentage> -->
      <!-- <SupplNR>LIE1</SupplNR> -->
      <!-- <Rows>50</Rows> -->
      <!-- <ItemKeyStart>0</ItemKeyStart> -->
      <!-- <ConfigtypeKey>2</ConfigtypeKey> -->
      <!-- <Tags><![CDATA[<TAGS><TAG><TAGKEY>12</TAGKEY><TAGTYPE>a</TAGTYPE></TAG><TAG><TAGKEY>15</TAGKEY><TAGTYPE>o</TAGTYPE></TAG><TAG><TAGKEY>20</TAGKEY><TAGTYPE>n</TAGTYPE></TAG></TAGS>]]></Tags> -->
      <!-- <SortColumn>changeminstockqty</SortColumn> -->
      <!-- <SortDirection>d</SortDirection> -->
      <!-- <Start>0</Start> -->
      <!-- <Suppliers><![CDATA[<SUPPLIERS><SUP><SupplNr>LIE1</SupplNr></SUP><SUP><SupplNr>LIE2</SupplNr></SUP></SUPPLIERS>]]></Suppliers> -->
      <!-- <Categories><![CDATA[<CATS><CAT><CatId>3</CatId></CAT><CAT><CatId>5</CatId></CAT></CATS>]]></Categories> -->
      <!-- <Locations><![CDATA[<LOCATIONS><LOC><LocationID>001</LocationID></LOC><LOC><LocationID>002</LocationID></LOC></LOCATIONS>]]></Locations> -->
      <!-- <Shops><![CDATA[<SHOPS><SHOP><ShopID>WEB</ShopID></SHOP></SHOPS>]]></Shops> -->
      <!-- <Pos>1</Pos> -->
      <!-- <Location>001</Location> -->
    </ns1:pixiGetMinStockChanges>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Location · Lesen Shops · Lesen TontrArten · Lesen items · Lesen TagMatch · Lesen Suppliers · Lesen ItemLocationSpecific · Lesen Orderlines · Lesen POSitem2 · Lesen POSheader2 · Lesen
SQL-Objekt:
dbo.pipiGetMinStockChanges
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben