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