std.edi.delfor

Lieferabrufe per EDIFACT: rollierender Lieferzeitplan (DELFOR) und Just-in-Time-Abruf (DELJIT). DELFOR unterstützt bis zu 52 Anforderungen pro Position (52 Kalenderwochen), unterscheidet zwischen festen (Typ 1) und Planungsbedarfen (Typ 3) und enthält eine Kumulationsprüfung.

  • DELFOR (BGM 241) — Delivery Forecast: rollierende Lieferplanung mit Fest- und Planbedarfen
  • DELJIT (BGM 251) — Delivery Just In Time: Minutengenaue Abrufzeitpunkte (DTM Qualifier 201, Format CCYYMMDDHHMM)

import std.edi.delfor;

// DELFOR mit 1 Position, 2 Anforderungen
var lines: int64 := alloc(EDI_DELFOR_LINE_SIZE);

poke64(lines + EDI_DELFOR_LINE_GTIN,    "04012345678901" as int64);
poke64(lines + EDI_DELFOR_LINE_GTINLEN, 14);
poke64(lines + EDI_DELFOR_LINE_CUMULQTY,250);  // Kumulierte Menge bisher
poke64(lines + EDI_DELFOR_LINE_REQCOUNT, 2);

// Anforderung 1: Festbedarf KW49
var req1: int64 := lines + EDI_DELFOR_LINE_REQS;
poke64(req1 + EDI_DELFOR_REQ_DATE, "20261207" as int64);
poke64(req1 + EDI_DELFOR_REQ_QTY,  50);
poke64(req1 + EDI_DELFOR_REQ_TYPE, 1);  // 1 = fest

// Anforderung 2: Planungsbedarf KW50
var req2: int64 := lines + EDI_DELFOR_LINE_REQS + EDI_DELFOR_REQ_SIZE;
poke64(req2 + EDI_DELFOR_REQ_DATE, "20261214" as int64);
poke64(req2 + EDI_DELFOR_REQ_QTY,  80);
poke64(req2 + EDI_DELFOR_REQ_TYPE, 3);  // 3 = Planung

var out: int64 := alloc(16384);
var n: int64 := EdiDelforWrite(
    "DELFOR-2026-012" as int64,
    "20261201" as int64,
    lines, 1, out, 16384);

free(lines, EDI_DELFOR_LINE_SIZE);
free(out, 16384);


Imports

  • std.edi.core
  • std.alloc

Konstanten

Konstante Wert Bedeutung
EDI_DELFOR_REQ_TYPE = 1 1 Festbedarf (QTY-Qualifier: 1)
EDI_DELFOR_REQ_TYPE = 3 3 Planungsbedarf (QTY-Qualifier: 3)
EDI_DELFOR_MAX_REQ 52 Max. Anforderungen pro Position (52 Wochen)

Structs

EdiDelforReq (EDI_DELFOR_REQ_SIZE = 24 Bytes)

Eine einzelne Mengenanforderung innerhalb einer DELFOR-Position.

Offset-Konstante Inhalt
EDI_DELFOR_REQ_DATE Zeiger auf Datum „YYYYMMDD“
EDI_DELFOR_REQ_QTY Menge (QTY+type:qty)
EDI_DELFOR_REQ_TYPE 1 = Festbedarf, 3 = Planungsbedarf

EdiDelforLine (EDI_DELFOR_LINE_SIZE = 1 280 Bytes)

Eine Position im Lieferabruf. Die Struktur ist groß wegen des internen Anforderungs-Arrays: 32 Bytes (Kopf) + 52 × 24 Bytes (Anforderungen) = 1 280 Bytes.

Offset-Konstante Inhalt
EDI_DELFOR_LINE_GTIN / EDI_DELFOR_LINE_GTINLEN GTIN-Zeiger und -Länge
EDI_DELFOR_LINE_CUMULQTY Kumulative Gesamtmenge (SCC-Segment)
EDI_DELFOR_LINE_REQCOUNT Anzahl der Anforderungen (0–52)
EDI_DELFOR_LINE_REQS Start des Anforderungs-Arrays (Offset 32)

Anforderungs-Array-Zugriff:

// i-te Anforderung einer Zeile
var req: int64 := line + EDI_DELFOR_LINE_REQS + i * EDI_DELFOR_REQ_SIZE;

EdiDeljitLine (EDI_DELJIT_LINE_SIZE = 56 Bytes)

Eine Position im JIT-Abruf.

Offset-Konstante Inhalt
EDI_DELJIT_LINE_GTIN / EDI_DELJIT_LINE_GTINLEN GTIN-Zeiger und -Länge
EDI_DELJIT_LINE_QTY Abrufmenge
EDI_DELJIT_LINE_DATETIME / EDI_DELJIT_LINE_DTLEN Zeiger auf 12-Zeichen-Datetime „CCYYMMDDHHMM“
EDI_DELJIT_LINE_LOC / EDI_DELJIT_LINE_LOCLEN Lieferort (optional)

Funktionen

DELFOR

Signatur Beschreibung
EdiDelforWrite(refNum: int64, date: int64, lines: int64, lineCount: int64, out: int64, outMax: int64): int64 Schreibt DELFOR. Fest- und Planbedarfe werden über QTY-Qualifier 1 bzw. 3 kodiert.
EdiDelforRead(buf: int64, bufLen: int64, lines: int64, maxLines: int64): int64 Parst DELFOR; befüllt lines-Array. Gibt Zeilenanzahl zurück.
EdiDelforCheckCumu(newCumu: int64, oldCumu: int64): int64 Kumulationsvalidierung: neue Menge muss ≥ alte Menge sein. Gibt 0=ok, 1=Warnung (unerwartete Rückwärts-Kumulation).

DELJIT

Signatur Beschreibung
EdiDeljitWrite(refNum: int64, date: int64, lines: int64, lineCount: int64, out: int64, outMax: int64): int64 Schreibt DELJIT mit minutengenauem Zeitstempel (DTM Qualifier 201)
EdiDeljitRead(buf: int64, bufLen: int64, lines: int64, maxLines: int64): int64 Parst DELJIT; gibt Zeilenanzahl zurück

Codebeispiel — DELFOR lesen und Kumulationscheck

import std.edi.delfor;

var maxLines: int64 := 50;
var lines: int64 := alloc(maxLines * EDI_DELFOR_LINE_SIZE);
var count: int64 := EdiDelforRead(inBuf, inBufLen, lines, maxLines);

var i: int64 := 0;
while (i < count) {
    var line: int64 := lines + i * EDI_DELFOR_LINE_SIZE;
    var newCumu: int64 := peek64(line + EDI_DELFOR_LINE_CUMULQTY);
    var oldCumu: int64 := getLastCumu(i);  // aus eigenem Tracking

    if (EdiDelforCheckCumu(newCumu, oldCumu) == 1) {
        PrintLn("Warnung: Kumulationsmenge gesunken bei Position " + IntToStr(i));
    }
    i := i + 1;
}

free(lines, maxLines * EDI_DELFOR_LINE_SIZE);


Hinweise

  • Speicherbedarf DELFOR: EDI_DELFOR_LINE_SIZE = 1 280 Bytes pro Position (52 Wochen × 24 Bytes). Bei 100 Positionen sind das 128 KB — vor der Allokation prüfen.
  • Datetime-Format DELJIT: Das 12-Zeichen-Format CCYYMMDDHHMM hat kein Trennzeichen: 202612011430 = 01.12.2026 um 14:30 Uhr.
  • Kumulationslogik: Die kumulative Menge (SCC-Segment) wächst über den gesamten Lieferabruf-Zeitraum monoton. Senkt sich der Wert, ist das ein Signal für einen Abruf-Reset (neuer Bezugszeitraum).

Quelldatei

Unit Datei
std.edi.delfor std/edi/delfor.lyx

Letzte Aktualisierung: 2026-06-16