std.edi.shipping
Lieferschein und Wareneingangsbestätigung per EDIFACT. DESADV bildet die dreistufige Verpackungshierarchie (Palette → Karton → Artikel) über die EDIFACT-Segmente CPS/PAC/GIN/LIN ab. Jedes Packstück trägt eine SSCC-18-Nummer zur lückenlosen Rückverfolgung.
DESADV (BGM 351) — Dispatch Advice: Lieferschein mit Verpackungsstruktur und SSCC-Nummern
RECADV (BGM 632) — Receiving Advice: Wareneingangsbestätigung mit Soll-/Ist-Mengen und optionalem Abweichungsgrund
SSCC-18-Funktionen:
import std.edi.shipping;
// SSCC generieren
var base17: pchar := "00400000000000001"; // Erweiterungsziffer + GS1 Prefix + Seriennr.
var sscc: int64 := alloc(19); // 18 Ziffern + NUL
EdiSsccGenerate(base17 as int64, sscc);
PrintLn("SSCC: " + (sscc as pchar));
free(sscc, 19);
Imports
Konstanten — Pakettypen
| Konstante | Wert | Bedeutung |
EDI_PKG_PALLET | 1 | Palette (CPS+PAC mit Code 201) |
EDI_PKG_CARTON | 2 | Karton (CPS+PAC mit Code CT) |
EDI_PKG_ITEM | 3 | Artikel-Ebene (CPS+LIN+QTY) |
Structs
EdiPackage (EDI_PACKAGE_SIZE = 56 Bytes)
| Offset-Konstante | Inhalt |
EDI_PACKAGE_SSCC / EDI_PACKAGE_SSCCLEN | SSCC-Zeiger (18 Zeichen) und -Länge |
EDI_PACKAGE_TYPE | Pakettyp: EDI_PKG_PALLET / EDI_PKG_CARTON / EDI_PKG_ITEM |
EDI_PACKAGE_PARENT | Index des übergeordneten Packstücks (0-basiert); -1 wenn keins |
EDI_PACKAGE_GTIN / EDI_PACKAGE_GTINLEN | GTIN (nur bei Items) |
EDI_PACKAGE_QTY | Menge (nur bei Items) |
Reihenfolge beim Schreiben: Erst alle Paletten, dann Kartons, dann Artikel. Der Parent-Index verweist auf den 0-basierten Index im Array.
EdiRecadvLine (EDI_RECADV_LINE_SIZE = 56 Bytes)
| Offset-Konstante | Inhalt |
EDI_RECADV_LINE_GTIN / EDI_RECADV_LINE_GTINLEN | GTIN-Zeiger und -Länge |
EDI_RECADV_LINE_ORDERED | Bestellte Menge (QTY+21) |
EDI_RECADV_LINE_DELIVERED | Gelieferte Menge (QTY+12) |
EDI_RECADV_LINE_ACCEPTED | Akzeptierte Menge (QTY+192) |
EDI_RECADV_LINE_REASON / EDI_RECADV_LINE_REASONLEN | Abweichungsgrund als Freitext (FTX+AAI, optional; 0 wenn keiner) |
Funktionen
SSCC-18-Validierung & -Generierung
| Signatur | Beschreibung |
EdiSsccCheck(ptr: int64, len: int64): int64 | Prüft SSCC-18-Prüfziffer (GS1 Mod-10). Gibt 1=gültig, 0=ungültig. Erwartet exakt 18 Stellen. |
EdiSsccGenerate(base17: int64, out: int64): void | Berechnet Prüfziffer aus 17-stelliger Basis-SSCC. Schreibt 18 Stellen + NUL in out (mind. 19 Bytes). |
DESADV
| Signatur | Beschreibung |
EdiDesadvWrite(refNum: int64, date: int64, packages: int64, packCount: int64, out: int64, outMax: int64): int64 | Schreibt DESADV. Pakete müssen in Hierarchie-Reihenfolge vorliegen (Paletten → Kartons → Items). |
EdiDesadvRead(buf: int64, bufLen: int64, packages: int64, maxPacks: int64): int64 | Parst DESADV; gibt Paketanzahl zurück oder -1 bei doppelter SSCC. |
RECADV
| Signatur | Beschreibung |
EdiRecadvWrite(orderRef: int64, date: int64, lines: int64, lineCount: int64, out: int64, outMax: int64): int64 | Schreibt RECADV mit Kreuzreferenz auf Bestellnummer (RFF+ON). |
EdiRecadvRead(buf: int64, bufLen: int64, lines: int64, maxLines: int64): int64 | Parst RECADV; gibt Zeilenanzahl zurück. |
Codebeispiel — DESADV mit Palettenstruktur
import std.edi.shipping;
// 1 Palette → 1 Karton → 2 Artikel
var packs: int64 := alloc(4 * EDI_PACKAGE_SIZE);
// Palette (Index 0, kein Parent)
poke64(packs + 0 * EDI_PACKAGE_SIZE + EDI_PACKAGE_SSCC, "004000000000000011" as int64);
poke64(packs + 0 * EDI_PACKAGE_SIZE + EDI_PACKAGE_SSCCLEN, 18);
poke64(packs + 0 * EDI_PACKAGE_SIZE + EDI_PACKAGE_TYPE, EDI_PKG_PALLET);
poke64(packs + 0 * EDI_PACKAGE_SIZE + EDI_PACKAGE_PARENT, 0 - 1);
// Karton (Index 1, Parent=0)
poke64(packs + 1 * EDI_PACKAGE_SIZE + EDI_PACKAGE_SSCC, "004000000000000028" as int64);
poke64(packs + 1 * EDI_PACKAGE_SIZE + EDI_PACKAGE_SSCCLEN, 18);
poke64(packs + 1 * EDI_PACKAGE_SIZE + EDI_PACKAGE_TYPE, EDI_PKG_CARTON);
poke64(packs + 1 * EDI_PACKAGE_SIZE + EDI_PACKAGE_PARENT, 0);
// Artikel 1 (Index 2, Parent=1)
poke64(packs + 2 * EDI_PACKAGE_SIZE + EDI_PACKAGE_GTIN, "04012345678901" as int64);
poke64(packs + 2 * EDI_PACKAGE_SIZE + EDI_PACKAGE_GTINLEN, 14);
poke64(packs + 2 * EDI_PACKAGE_SIZE + EDI_PACKAGE_QTY, 50);
poke64(packs + 2 * EDI_PACKAGE_SIZE + EDI_PACKAGE_TYPE, EDI_PKG_ITEM);
poke64(packs + 2 * EDI_PACKAGE_SIZE + EDI_PACKAGE_PARENT, 1);
var out: int64 := alloc(16384);
var n: int64 := EdiDesadvWrite(
"LFG-2026-001" as int64,
"20261201" as int64,
packs, 3, out, 16384);
free(packs, 4 * EDI_PACKAGE_SIZE);
free(out, 16384);
Hinweise
SSCC-Duplikatserkennung: EdiDesadvRead gibt -1 zurück wenn dieselbe SSCC-Nummer bereits im Pakete-Array vorkommt.
Hierarchie-Reihenfolge: Beim Schreiben müssen Paletten (EDI_PKG_PALLET) vor Kartons und Artikel kommen. Das entspricht der CPS-Reihenfolge in EDIFACT.
RECADV Kreuzreferenz: EdiRecadvWrite setzt automatisch RFF+ON mit dem orderRef-Wert. So kann die Gegenseite Wareneingang und Bestellung zuordnen.
Quelldatei
| Unit | Datei |
std.edi.shipping | std/edi/shipping.lyx |
Letzte Aktualisierung: 2026-06-16