====== std.edi.inventory ======
Lagerbestand und Absatzdaten per EDIFACT. Alle drei Nachrichtentypen bauen auf einfachen Positionsstrukturen auf. Umsätze werden als ''int64 × 100'' (Festkomma) gespeichert.
* **INVRPT** (BGM 35) — Inventory Report: Lagerbestand pro Artikel und Lagerort
* **SLSRPT** (BGM 843) — Sales Report: Absatzdaten pro Artikel und Verkaufsstelle
* **SLSFCT** (BGM 844) — Sales Forecast: Absatzprognose mit optionaler Konfidenzangabe (0–100) pro Position
Bestandstypen (INVRPT):
^ Konstante ^ QTY-Qualifier ^ Bedeutung ^
| 1 | 1 | On-hand (verfügbar) |
| 2 | 2 | On-order (bestellt, noch nicht geliefert) |
| 3 | 3 | In-transit (unterwegs) |
Periodenqualifikatoren (SLSRPT/SLSFCT):
^ Wert ^ Bedeutung ^
| 617 | Woche |
| 610 | Monat |
| 102 | Tag |
import std.edi.inventory;
// INVRPT mit 1 Lagerbestandsposition
var lines: int64 := alloc(EDI_INV_LINE_SIZE);
poke64(lines + EDI_INV_LINE_GTIN, "04012345678901" as int64);
poke64(lines + EDI_INV_LINE_GTINLEN, 14);
poke64(lines + EDI_INV_LINE_WAREHOUSE, "4012345000009" as int64); // GLN Lager
poke64(lines + EDI_INV_LINE_WHLEN, 13);
poke64(lines + EDI_INV_LINE_QTY, 1500);
poke64(lines + EDI_INV_LINE_TYPE, 1); // on-hand
var out: int64 := alloc(8192);
var n: int64 := EdiInvrptWrite(
"INV-2026-W49" as int64,
"20261207" as int64,
lines, 1, out, 8192);
free(lines, EDI_INV_LINE_SIZE);
free(out, 8192);
----
===== Imports =====
* ''std.edi.core''
* ''std.alloc''
----
===== Structs =====
==== EdiInventoryLine (EDI_INV_LINE_SIZE = 64 Bytes) ====
^ Offset-Konstante ^ Inhalt ^
| ''EDI_INV_LINE_GTIN / EDI_INV_LINE_GTINLEN'' | GTIN-Zeiger und -Länge |
| ''EDI_INV_LINE_WAREHOUSE / EDI_INV_LINE_WHLEN'' | GLN des Lagerorts |
| ''EDI_INV_LINE_QTY'' | Bestandsmenge |
| ''EDI_INV_LINE_UNIT / EDI_INV_LINE_UNITLEN'' | Mengeneinheit (optional) |
| ''EDI_INV_LINE_TYPE'' | Bestandstyp: 1=on-hand, 2=on-order, 3=in-transit |
==== EdiSalesLine (EDI_SLS_LINE_SIZE = 96 Bytes) ====
^ Offset-Konstante ^ Inhalt ^
| ''EDI_SLS_LINE_GTIN / EDI_SLS_LINE_GTINLEN'' | GTIN-Zeiger und -Länge |
| ''EDI_SLS_LINE_POSGLN / EDI_SLS_LINE_POSGLNLEN'' | GLN Verkaufsstelle (POS) |
| ''EDI_SLS_LINE_PERIOD'' | Periodenqualifikator: 617=Woche, 610=Monat, 102=Tag |
| ''EDI_SLS_LINE_DATE / EDI_SLS_LINE_DATELEN'' | Periodenanfangsdatum |
| ''EDI_SLS_LINE_QTY'' | Verkaufte/prognostizierte Menge |
| ''EDI_SLS_LINE_REVENUE'' | Umsatz × 100 (Festkomma) |
| ''EDI_SLS_LINE_CURRENCY / EDI_SLS_LINE_CURRENCYLEN'' | Währungscode |
| ''EDI_SLS_LINE_CONFIDENCE'' | Konfidenz 0–100 (nur SLSFCT, sonst 0) |
----
===== Funktionen =====
^ Write-Funktion ^ Read-Funktion ^ Beschreibung ^
| ''EdiInvrptWrite(refNum, date, lines, lineCount, out, outMax)'' | ''EdiInvrptRead(buf, bufLen, lines, maxLines)'' | Lagerbestand |
| ''EdiSlsrptWrite(refNum, date, lines, lineCount, out, outMax)'' | ''EdiSlsrptRead(buf, bufLen, lines, maxLines)'' | Absatzbericht |
| ''EdiSlsfctWrite(refNum, date, lines, lineCount, out, outMax)'' | ''EdiSlsfctRead(buf, bufLen, lines, maxLines)'' | Absatzprognose |
Alle Write-Funktionen setzen automatisch den BGM-Qualifier. Alle Read-Funktionen geben die Anzahl der gelesenen Zeilen zurück. Zero-Copy: Zeiger in ''lines'' zeigen in ''buf''.
----
===== Codebeispiel — Wöchentliche Absatzprognose =====
import std.edi.inventory;
var lines: int64 := alloc(3 * EDI_SLS_LINE_SIZE);
// KW49 Prognose Artikel A, 87 % Konfidenz
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_GTIN, "04012345678901" as int64);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_GTINLEN, 14);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_PERIOD, 617);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_DATE, "20261207" as int64);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_QTY, 120);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_REVENUE, 239880); // 2398,80 EUR
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_CURRENCY, "EUR" as int64);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_CURRENCYLEN,3);
poke64(lines + 0 * EDI_SLS_LINE_SIZE + EDI_SLS_LINE_CONFIDENCE, 87);
var out: int64 := alloc(8192);
var n: int64 := EdiSlsfctWrite(
"FCT-2026-W49" as int64,
"20261201" as int64,
lines, 1, out, 8192);
free(lines, 3 * EDI_SLS_LINE_SIZE);
free(out, 8192);
----
===== Quelldatei =====
^ Unit ^ Datei ^
| ''std.edi.inventory'' | ''std/edi/inventory.lyx'' |
Letzte Aktualisierung: 2026-06-16