====== 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