Postman-Collection
Stock Schreiben

pixiGetChangedItemStock_LocID

Liefert Artikel, deren Bestand sich in einem Zeitraum geändert hat, mit physischem und verfügbarem Bestand, optional je Lager und ohne bestimmte Lagerplatzgruppen.

Delta-Bestandsexport je Lager. Der Aufruf sammelt geänderte Artikel, berechnet deren Bestandswerte und liefert eine Seite von Zeilen.

1. Kandidaten

  • Kandidaten sind Nicht-Bundle-Artikel mit Einträgen im Bestandsbewegungsprotokoll InvBinItemLog.
  • Als Änderungsdatum gilt COALESCE(items.LastCalculateStockDate, InvBinItemLog.UpdateDate, jetzt). Es muss zwischen Since und DateTo liegen.
  • Ist LocID nicht leer, zählen nur Protokolleinträge dieses Lagers.
  • StockChange ist die Summe der protokollierten Mengen.

2. Bundles

  • Zu jeder geänderten Komponente werden die zugehörigen Bundle-Artikel mit BundleItem = 1 ergänzt.
  • Deren StockChange ist die Komponentenänderung geteilt durch die Komponentenmenge im Bundle (Ganzzahldivision).

3. Paging

  • Die Zeilen werden nach Änderungsdatum aufsteigend, dann nach dem höchsten Protokollschlüssel nummeriert (RowNr).
  • Start ist ein nullbasierter Offset. Zeilen ab Start + 1 werden übernommen, höchstens Rowcount Zeilen werden geliefert.

4. Bereinigung

  • Zeilen für nicht mehr existierende Artikel werden entfernt.
  • Zeilen für Artikel, die inzwischen Bundles sind, aber als Nicht-Bundle gesammelt wurden, werden entfernt.

5. Artikeldaten

  • ItemNrInt, EANUPC, ItemNrSuppl, Enabled und MinStockQty stammen aus dem Artikelstamm.
  • PhysicalStock ist bei leerem LocID die Summe aller positiven LocationQuantity-Werte, sonst die Lagermenge von LocID.
  • AvailableStock wird zunächst auf items.Quantity gesetzt.

6. Nur Nicht-Bundle-Artikel

AvailableStock wird neu berechnet als Summe der Lagerplatzmengen (InvBinItem) im Lager (bzw. allen Lagern) abzüglich eines Abzugs:

  • Ist die Einstellung ReservePrepaymentOrders nicht 1: Die Mengen der Auftragspositionen mit Status ANG oder HAL werden abgezogen.
  • Sonst: Die Anzahl der Reservierungsdatensätze wird abgezogen. Gezählt werden Auftragspositionen in nicht-finalen Status außer EIN, FUT und FUS.
  • Beide Abzüge greifen nur, wenn die Einstellung StockExportUsePhysicalStock den Wert 0 hat.

Zusätzlich werden befüllt:

  • OpenSupplierOrderQTY: offene Menge der Lieferantenbestellpositionen, deren Status IsAllOpen = 1 hat.
  • EstimatedDelivery: aus Item_EstimatedDelivery.ExportEstimatedDelivery.

7. Ausgeschlossene Lagerplatzgruppen

  • Ist ExcludeBinGroups gesetzt (kommagetrennte Liste), werden die protokollierten Mengen aller Lagerplätze dieser Gruppen je Artikel summiert. Es zählen nur Protokolleinträge bis DateTo.
  • Für Bundles wird das Ergebnis in Bundle-Einheiten umgerechnet.
  • Diese Menge wird von AvailableStock, PhysicalStock und StockChange abgezogen.

8. Ergebnis

Das Ergebnis ist nach RowNr sortiert.

Hinweise

Nebeneffekt

  • Jeder Aufruf schreibt einen Eintrag mit Since, Rowcount und Laufzeit in LogTable. Der Eintrag trägt die Bezeichnung pipiGetChangedItemStock.

Sperren

  • Alle Lesezugriffe verwenden NOLOCK; nicht festgeschriebene Daten sind möglich.

Fallstricke

  • Since = 0 / 1900-01-01 wird zu NULL. Der Datumsfilter trifft dann nichts und das Ergebnis ist leer.
  • DateTo wird bei NULL, 0 oder Werten bis einschließlich 1990-01-01 durch die aktuelle Zeit ersetzt.
  • Das Zeitfenster basiert vorrangig auf items.LastCalculateStockDate, nicht auf dem Datum des einzelnen Protokolleintrags.
  • Der Filter für HAL-Positionen subtrahiert ein Datum von einem Datum. Mit der Einstellung HalOrdersActiveDays (Standard 7 bei 0) werden dadurch praktisch alle HAL-Positionen berücksichtigt statt nur die der letzten N Tage.
  • Bei aktivierten Reservierungen wird die Anzahl der Reservierungszeilen abgezogen, keine Menge.
  • Artikel ohne ItemLocationSpecific-Zeile (bzw. ohne Zeile für LocID) behalten leere Artikelnummern, Bestand 0 und Enabled NULL.
  • PhysicalStock kann NULL sein, wenn bei leerem LocID keine positive Lagermenge existiert.
  • Der Ausschluss von Lagerplatzgruppen ist nicht auf LocID beschränkt.
  • Für Bundles bleiben OpenSupplierOrderQTY auf 0 und EstimatedDelivery NULL.
  • Die Einstellungen ShowLocationStockInItemSearch und OldStockExport werden gelesen, aber nicht verwendet.

Parameter

Parameter Typ Standardwert Beschreibung
Since
Pflicht
datetime
dateTime
–

Beginn des Änderungszeitraums (inklusive). 0 führt zu einem leeren Ergebnis.

Beispiel: 2024-05-01T00:00:00

Rowcount
int 1000

Maximale Anzahl gelieferter Zeilen (Seitengröße).

Beispiel: 500

LocID
varchar(3)
string
–

Lager-ID, auf die Änderungen und Bestände beschränkt werden. Leer oder NULL bedeutet alle Lager.

Beispiel: 001

DateTo
datetime
dateTime
NULL

Ende des Änderungszeitraums (inklusive). NULL, 0 oder ein Datum bis einschließlich 1990-01-01 bedeutet die aktuelle Zeit.

Beispiel: 2024-05-02T00:00:00

Start
int 0

Nullbasierter Offset für das Paging. Geliefert werden Zeilen mit RowNr größer als Start.

Beispiel: 0

ExcludeBinGroups
varchar(max)
string
NULL

Kommagetrennte Liste von Lagerplatzgruppen, deren Mengen von den Bestandswerten abgezogen werden. Leer oder NULL deaktiviert den Ausschluss.

Beispiel: RETOURE,SPERR

Antwort

Result-Set 1 · Immer

Geänderte Artikel mit Bestandswerten, sortiert nach RowNr.

Spalte Typ Beschreibung
ItemKey int

Interner Artikelschlüssel.

ItemNrInt
Kann leer sein
varchar(50)
string

Interne Artikelnummer.

EANUPC
Kann leer sein
varchar(13)
string

EAN/UPC des Artikels.

ItemNrSuppl
Kann leer sein
varchar(50)
string

Lieferanten-Artikelnummer.

PhysicalStock
Kann leer sein
int

Physischer Bestand: Lagermenge von LocID bzw. Summe positiver Lagermengen bei leerem LocID. Vermindert um ausgeschlossene Lagerplatzgruppen.

AvailableStock
Kann leer sein
int

Verfügbarer Bestand. Bei Nicht-Bundles: Lagerplatzmenge abzüglich offener Auftragspositionen bzw. Reservierungen. Bei Bundles: items.Quantity. Vermindert um ausgeschlossene Lagerplatzgruppen.

StockChange
Kann leer sein
int

Summe der protokollierten Bestandsbewegungen; bei Bundles in Bundle-Einheiten umgerechnet.

EstimatedDelivery
Kann leer sein
datetime
dateTime

Voraussichtliches Lieferdatum für den Export (nur Nicht-Bundles).

MinStockQty
Kann leer sein
int

Mindestbestand des Artikels.

Enabled
Kann leer sein
bit
boolean

Gibt an, ob der Artikel aktiv ist.

OpenSupplierOrderQTY
Kann leer sein
int

Offene Menge in Lieferantenbestellungen mit Status IsAllOpen = 1 (nur Nicht-Bundles, sonst 0).

UpdateDate
Kann leer sein
datetime
dateTime

Änderungsdatum, das für Zeitraum und Sortierung verwendet wird.

OriginalUpdateDate
Kann leer sein
datetime
dateTime

items.LastCalculateStockDate des Artikels (bei Bundles ersatzweise UpdateDate).

BundleItem
Kann leer sein
bit
boolean

1, wenn die Zeile ein aus einer geänderten Komponente abgeleiteter Bundle-Artikel ist.

RowNr
Kann leer sein
int

Laufende Nummer für das Paging.

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:pixiGetChangedItemStock_LocID>
      <Since>2024-05-01T00:00:00</Since>
      <!-- <Rowcount>500</Rowcount> -->
      <!-- <LocID>001</LocID> -->
      <!-- <DateTo>2024-05-02T00:00:00</DateTo> -->
      <!-- <Start>0</Start> -->
      <!-- <ExcludeBinGroups>RETOURE,SPERR</ExcludeBinGroups> -->
    </ns1:pixiGetChangedItemStock_LocID>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Verwendete Tabellen

Settings · Lesen OrderStates · Lesen InvBinItemLog · Lesen items · Lesen BundleItems · Lesen ItemLocationSpecific · Lesen InvBinItem · Lesen InvBin · Lesen Location · Lesen Orderlines · Lesen Reservation · Lesen Item_EstimatedDelivery · Lesen SupplierOrderLine · Lesen SupplierOrder · Lesen SupplierOrderStatus · Lesen LogTable · Schreiben
SQL-Objekt:
dbo.pipiGetChangedItemStock_LocID
Prozedur zuletzt geändert am 2026-10-05
Dokumentation von claude-opus-5-5 am 2026-10-30 geschrieben