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);
| 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.
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);