pixiReport_StockMovementsForItemsWithBnBbd
Liefert die Lagerbewegungen von Artikeln mit Chargen- bzw. MHD-Verwaltung, gefiltert nach Zeitraum, Bewegungsart, Benutzer, Lager, Tag, Kategorie und Lieferant.
Wrapper um die interne Report-Prozedur Report_StockMovementsForItemsWithBnBbd. Geliefert werden Einträge des Lagerbewegungsprotokolls (InvBinItemLog) für Artikel mit dem Artikel-Tag -6 oder -7 (Charge / MHD).
Parameterbehandlung
- Leere Werte (sowie
0bei den Integer-Parametern) werden alsNULLbehandelt, also als „kein Filter“. - Fehlt
DateFrom, gilt der Beginn des aktuellen Tages. FehltDateTo, gilt das Ende des aktuellen Tages. Die Uhrzeit beider Werte wird ignoriert:DateFromwird auf 00:00:00 undDateToauf 23:59:59.997 des jeweiligen Tages gesetzt.
Parameterprüfungen (bei einem Fehler wird eine Zeile mit Status/Message geliefert und der Aufruf beendet)
LocIDmuss inLocationexistieren.ItemTagmuss, falls angegeben,-6oder-7sein.UserNamemuss als Teilstring vonUpdateEmpin mindestens einem Protokolleintrag vorkommen.SMTKeymuss inStockMovementTypesexistieren.Categorymuss inTontrArtenexistieren.
SupplNr wird nicht geprüft.
Filter
- Bewegungsdatum (
UpdateDate) zwischenDateFromundDateTo. Dieser Filter ist immer aktiv. SMTKey: Lagerbewegungsart des Protokolleintrags.UserName: Teilstring-Suche (LIKE '%…%') auf den Benutzer des Eintrags.LocID: Lager des aktuellen Lagerplatzes (InvBin.BinLocID).ItemTag: nur Artikel mit diesem Tag (-6oder-7).Category:ConfigTypedes Artikels.SupplNr: Lieferant aus der zum Bewegungsdatum gültigen, jüngsten Lieferanteninformation.
Ausgabe Eine Zeile je Bewegung mit Artikel, Lagerplatz, bewegter Menge, Charge, MHD, Bewegungsart mit übersetztem Namen, Benutzer, historischem Lieferantenpreis und Datenbankwährung. Der Report sortiert die Zeilen aufsteigend nach Bewegungsdatum.
Hinweise
- Alle Tabellen werden mit
NOLOCKgelesen, daher können nicht festgeschriebene Daten im Ergebnis erscheinen. - Der Report selbst sortiert nach Bewegungsdatum. Das abschließende
SELECTaus der temporären Tabelle enthält keinORDER BY, die Reihenfolge ist daher nicht streng garantiert. - Da leere Werte auf
NULLabgebildet werden, geltenSMTKeybzw.ItemTagmit dem Wert0sowie das Datum1900-01-01als „nicht gesetzt“. StockistSUM(Items.Quantity). Das ist der Gesamtbestand des Artikels, nicht der Bestand auf dem Lagerplatz. Fallen mehrere verknüpfte Zeilen in eine Gruppe, kann der Wert ein Vielfaches dieses Bestands sein.BinNameenthält den aktuellen Lagerplatznamen. Bei gelöschten Lagerplätzen enthält er den historischen Namen gefolgt vonDeleted. Gelöschte Lagerplätze fallen bei gesetztemLocIDaus dem Ergebnis, da der Lagerfilter nur den aktuellen Lagerplatz verwendet.- Hat eine Bewegung weder einen aktuellen noch einen gelöschten Lagerplatzeintrag, ist
BinNameleer und das Einfügen in die Ergebnistabelle schlägt fehl. Dann wird die Zeile „Unexpected error“ geliefert. SMTNameist die Übersetzung mitLanguageID = 2.UserNameist der Teil vonUpdateEmpvor dem ersten/.- Die Prüfung für
UserName(bzw.LocID) schlägt auch fehl, wennInvBinItemLog(bzw.Location) leer ist, selbst wenn kein Wert übergeben wurde. - Die Lieferantendaten stammen aus der Funktion
fPixi_GetLatestSupplierInfo. Deren Definition liegt nicht vor, die genaue Auswahllogik ist hier daher nicht dokumentiert. - Der Report läuft als dynamisches SQL über
sp_executesql. - Der Report berechnet zusätzlich die Spalten
ParamDateFrom…ParamSupplier, diese werden aber nicht an den Aufrufer geliefert. - Ein Code-Kommentar nennt die Tags
-6und-7zusammen als „BN & BBD“.
Parameter
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
DateFrom
|
datetime dateTime |
NULL |
Beginn des Zeitraums (Bewegungsdatum). Die Uhrzeit wird ignoriert, der Tag beginnt um 00:00:00. Standard: Beginn des aktuellen Tages. Beispiel: |
DateTo
|
datetime dateTime |
NULL |
Ende des Zeitraums (Bewegungsdatum). Die Uhrzeit wird ignoriert, der ganze Tag bis 23:59:59.997 ist eingeschlossen. Standard: Ende des aktuellen Tages. Beispiel: |
SMTKey
|
int | NULL |
Schlüssel der Lagerbewegungsart ( Beispiel: |
UserName
|
varchar(100) string |
NULL |
Teilstring des im Bewegungsprotokoll gespeicherten Benutzernamens ( Beispiel: |
LocID
|
varchar(3) string |
NULL |
Lager-ID ( Beispiel: |
ItemTag
|
int | NULL |
Schränkt auf Artikel mit diesem Tag ein. Nur Erlaubte Werte
Beispiel: |
Category
|
varchar(4) string |
NULL |
Artikelkategorie ( Beispiel: |
SupplNr
|
varchar(4) string |
NULL |
Lieferantennummer. Sie wird mit dem Lieferanten der zum Bewegungsdatum gültigen, jüngsten Lieferanteninformation verglichen. Sie wird nicht validiert. Beispiel: |
Antwort
Result-Set 1 · Bei Erfolg (alle Parameterprüfungen bestanden)
Lagerbewegungen von Chargen-/MHD-Artikeln, eine Zeile je Bewegung.
| Spalte | Typ | Beschreibung |
|---|---|---|
EANUPC
Kann leer sein |
varchar(50) string |
EAN/UPC des Artikels |
ItemName
Kann leer sein |
varchar(120) string |
Artikelname |
BinName
|
varchar(50) string |
Lagerplatzname; bei gelöschten Lagerplätzen der historische Name gefolgt von ' Deleted' |
Stock
Kann leer sein |
int |
Summe von |
MovedQty
|
int |
Bewegte Menge dieser Bewegung |
HistTotalSupplPrice
Kann leer sein |
money decimal |
Zum Bewegungsdatum gültiger Lieferantenpreis multipliziert mit der bewegten Menge |
Date
Kann leer sein |
datetime dateTime |
Datum und Uhrzeit der Bewegung |
SMTType
|
varchar(4) string |
Typkürzel der Lagerbewegungsart |
SMTName
Kann leer sein |
varchar(max) string |
Übersetzter Name der Lagerbewegungsart (Sprach-ID 2) |
BatchNumber
Kann leer sein |
varchar(50) string |
Charge der Bewegung |
BestBeforeDate
Kann leer sein |
datetime dateTime |
MHD der Bewegung |
UserName
Kann leer sein |
varchar(100) string |
Benutzer der Bewegung (Teil von |
DatabaseCurrencyCode
|
varchar(3) string |
Währungscode der Datenbank |
SupplNr
Kann leer sein |
varchar(4) string |
Lieferantennummer aus der jüngsten Lieferanteninformation zum Bewegungsdatum |
ItemKey
Kann leer sein |
int |
Interner Artikelschlüssel |
ItemNrInt
Kann leer sein |
varchar(50) string |
Interne Artikelnummer |
InternalItemNumber
Kann leer sein |
varchar(50) string |
Artikelcode mit Codetyp 3 aus |
Result-Set 2 · Wenn eine Parameterprüfung fehlschlägt oder ein unerwarteter Fehler auftritt
Einzelne Fehlerzeile. Die Prozedur gibt bei Prüffehlern den Code 2 und bei unerwarteten Fehlern den Code 3 zurück.
| Spalte | Typ | Beschreibung |
|---|---|---|
Status
|
varchar(5) string |
Immer 'Error' |
Message
|
varchar(max) string |
Fehlertext |
Beispielantwort
<SqlRowSet1>
<row>
<EANUPC>4012345678901</EANUPC>
<ItemName>Bio Honig 500g</ItemName>
<BinName>A-01-03</BinName>
<Stock>120</Stock>
<MovedQty>-5</MovedQty>
<HistTotalSupplPrice>-17.5000</HistTotalSupplPrice>
<Date>2024-03-12T10:15:22</Date>
<SMTType>OUT</SMTType>
<SMTName>Ausbuchung MHD abgelaufen</SMTName>
<BatchNumber>CH2023-117</BatchNumber>
<BestBeforeDate>2024-03-10T00:00:00</BestBeforeDate>
<UserName>mmueller</UserName>
<DatabaseCurrencyCode>EUR</DatabaseCurrencyCode>
<SupplNr>L001</SupplNr>
<ItemKey>4711</ItemKey>
<ItemNrInt>HON-500</ItemNrInt>
<InternalItemNumber>100234</InternalItemNumber>
</row>
</SqlRowSet1>
Fehlermeldungen
| Status | Meldung | Ursache |
|---|---|---|
| Error | Location "{LocID}" does not exist. | `LocID` existiert nicht in `Location`. Der Fehler tritt auch auf, wenn die Tabelle `Location` leer ist. Eine existierende Lager-ID übergeben. |
| Error | Only item tag with ID -6 and -7 are allowed. | `ItemTag` ist auf einen anderen Wert als -6 oder -7 gesetzt. |
| Error | User with user name: "{UserName}" does not exist. | Kein Eintrag im Bewegungsprotokoll hat ein `UpdateEmp`, das `UserName` enthält. Der Fehler tritt auch auf, wenn das Protokoll leer ist. |
| Error | Stock movement type with SMTKey: "{SMTKey}" does not exist. | `SMTKey` existiert nicht in `StockMovementTypes`. |
| Error | Category with ID: "{Category}" does not exist. | `Category` existiert nicht in `TontrArten`. |
| Error | Unexpected error while getting the report values. ({ERROR_MESSAGE}) | Der interne Report ist fehlgeschlagen, z. B. wenn eine Bewegung keinen Lagerplatznamen hat und das Einfügen in die Ergebnistabelle scheitert. |
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_StockMovementsForItemsWithBnBbd>
<!-- <DateFrom>2024-03-01T00:00:00</DateFrom> -->
<!-- <DateTo>2024-03-31T00:00:00</DateTo> -->
<!-- <SMTKey>5</SMTKey> -->
<!-- <UserName>mmueller</UserName> -->
<!-- <LocID>001</LocID> -->
<!-- <ItemTag>-6</ItemTag> -->
<!-- <Category>STD</Category> -->
<!-- <SupplNr>L001</SupplNr> -->
</ns1:pixiReport_StockMovementsForItemsWithBnBbd>
</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_StockMovementsForItemsWithBnBbd>
<!-- <DateFrom>2024-03-01T00:00:00</DateFrom> -->
<!-- <DateTo>2024-03-31T00:00:00</DateTo> -->
<!-- <SMTKey>5</SMTKey> -->
<!-- <UserName>mmueller</UserName> -->
<!-- <LocID>001</LocID> -->
<!-- <ItemTag>-6</ItemTag> -->
<!-- <Category>STD</Category> -->
<!-- <SupplNr>L001</SupplNr> -->
</ns1:pixiReport_StockMovementsForItemsWithBnBbd>
</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 = [
// 'DateFrom' => '2024-03-01T00:00:00',
// 'DateTo' => '2024-03-31T00:00:00',
// 'SMTKey' => '5',
// 'UserName' => 'mmueller',
// 'LocID' => '001',
// 'ItemTag' => '-6',
// 'Category' => 'STD',
// 'SupplNr' => 'L001',
];
$soapArguments = [];
foreach ($arguments as $name => $value) {
$soapArguments[] = new SoapVar($value, XSD_STRING, '', '', $name);
}
$response = $soapClient->__soapCall('pixiReport_StockMovementsForItemsWithBnBbd', $soapArguments);
Verwendete Tabellen
- SQL-Objekt:
- dbo.pipiReport_StockMovementsForItemsWithBnBbd