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 zwischenSinceundDateToliegen. - Ist
LocIDnicht leer, zählen nur Protokolleinträge dieses Lagers. StockChangeist die Summe der protokollierten Mengen.
2. Bundles
- Zu jeder geänderten Komponente werden die zugehörigen Bundle-Artikel mit
BundleItem = 1ergänzt. - Deren
StockChangeist 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). Startist ein nullbasierter Offset. Zeilen abStart + 1werden übernommen, höchstensRowcountZeilen 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,EnabledundMinStockQtystammen aus dem Artikelstamm.PhysicalStockist bei leeremLocIDdie Summe aller positivenLocationQuantity-Werte, sonst die Lagermenge vonLocID.AvailableStockwird zunächst aufitems.Quantitygesetzt.
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
ReservePrepaymentOrdersnicht1: Die Mengen der Auftragspositionen mit StatusANGoderHALwerden abgezogen. - Sonst: Die Anzahl der Reservierungsdatensätze wird abgezogen. Gezählt werden Auftragspositionen in nicht-finalen Status außer
EIN,FUTundFUS. - Beide Abzüge greifen nur, wenn die Einstellung
StockExportUsePhysicalStockden Wert0hat.
Zusätzlich werden befüllt:
OpenSupplierOrderQTY: offene Menge der Lieferantenbestellpositionen, deren StatusIsAllOpen = 1hat.EstimatedDelivery: ausItem_EstimatedDelivery.ExportEstimatedDelivery.
7. Ausgeschlossene Lagerplatzgruppen
- Ist
ExcludeBinGroupsgesetzt (kommagetrennte Liste), werden die protokollierten Mengen aller Lagerplätze dieser Gruppen je Artikel summiert. Es zählen nur Protokolleinträge bisDateTo. - Für Bundles wird das Ergebnis in Bundle-Einheiten umgerechnet.
- Diese Menge wird von
AvailableStock,PhysicalStockundStockChangeabgezogen.
8. Ergebnis
Das Ergebnis ist nach RowNr sortiert.
Hinweise
Nebeneffekt
- Jeder Aufruf schreibt einen Eintrag mit
Since,Rowcountund Laufzeit inLogTable. Der Eintrag trägt die BezeichnungpipiGetChangedItemStock.
Sperren
- Alle Lesezugriffe verwenden
NOLOCK; nicht festgeschriebene Daten sind möglich.
Fallstricke
Since=0/1900-01-01wird zu NULL. Der Datumsfilter trifft dann nichts und das Ergebnis ist leer.DateTowird bei NULL,0oder Werten bis einschließlich1990-01-01durch 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 EinstellungHalOrdersActiveDays(Standard 7 bei0) werden dadurch praktisch alleHAL-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ürLocID) behalten leere Artikelnummern, Bestand0undEnabledNULL. PhysicalStockkann NULL sein, wenn bei leeremLocIDkeine positive Lagermenge existiert.- Der Ausschluss von Lagerplatzgruppen ist nicht auf
LocIDbeschränkt. - Für Bundles bleiben
OpenSupplierOrderQTYauf0undEstimatedDeliveryNULL. - Die Einstellungen
ShowLocationStockInItemSearchundOldStockExportwerden gelesen, aber nicht verwendet.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
Since
Pflicht
|
datetime dateTime |
– |
Beginn des Änderungszeitraums (inklusive). Beispiel: |
Rowcount
|
int | 1000 |
Maximale Anzahl gelieferter Zeilen (Seitengröße). Beispiel: |
LocID
|
varchar(3) string |
– |
Lager-ID, auf die Änderungen und Bestände beschränkt werden. Leer oder NULL bedeutet alle Lager. Beispiel: |
DateTo
|
datetime dateTime |
NULL |
Ende des Änderungszeitraums (inklusive). NULL, Beispiel: |
Start
|
int | 0 |
Nullbasierter Offset für das Paging. Geliefert werden Zeilen mit Beispiel: |
ExcludeBinGroups
|
varchar(max) string |
NULL |
Kommagetrennte Liste von Lagerplatzgruppen, deren Mengen von den Bestandswerten abgezogen werden. Leer oder NULL deaktiviert den Ausschluss. Beispiel: |
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 |
AvailableStock
Kann leer sein |
int |
Verfügbarer Bestand. Bei Nicht-Bundles: Lagerplatzmenge abzüglich offener Auftragspositionen bzw. Reservierungen. Bei Bundles: |
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 |
UpdateDate
Kann leer sein |
datetime dateTime |
Änderungsdatum, das für Zeitraum und Sortierung verwendet wird. |
OriginalUpdateDate
Kann leer sein |
datetime dateTime |
|
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. |
Beispielantwort
<SqlRowSet1>
<row>
<ItemKey>4711</ItemKey>
<ItemNrInt>ART-1001</ItemNrInt>
<EANUPC>4006381333931</EANUPC>
<ItemNrSuppl>SUP-55</ItemNrSuppl>
<PhysicalStock>25</PhysicalStock>
<AvailableStock>20</AvailableStock>
<StockChange>-3</StockChange>
<EstimatedDelivery>2024-05-10T00:00:00</EstimatedDelivery>
<MinStockQty>5</MinStockQty>
<Enabled>true</Enabled>
<OpenSupplierOrderQTY>50</OpenSupplierOrderQTY>
<UpdateDate>2024-05-01T08:15:00</UpdateDate>
<OriginalUpdateDate>2024-05-01T08:15:00</OriginalUpdateDate>
<BundleItem>false</BundleItem>
<RowNr>1</RowNr>
</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: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>
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: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>
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 = [
'Since' => '2024-05-01T00:00:00',
// 'Rowcount' => '500',
// 'LocID' => '001',
// 'DateTo' => '2024-05-02T00:00:00',
// 'Start' => '0',
// 'ExcludeBinGroups' => 'RETOURE,SPERR',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiGetChangedItemStock_LocID', $soapArguments);
Verwandte Calls
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiGetChangedItemStock_LocID