Multimodaler Transportauftrag und Sendungsstatus per EDIFACT. Alle 8 Nachrichtentypen teilen denselben Header (EDI_TRN_HDR). IFTMIN beschreibt den vollständigen Transportauftrag mit beliebig vielen Beförderungsabschnitten (Legs). IFTDGN enthält Gefahrgutinformationen (DGD-Struct). IFTSTA übermittelt den Sendungsstatus.
IFTSTA-Statuscodes:
| Konstante | Wert | Bedeutung |
|---|---|---|
EDI_TRN_STA_PICKEDUP | 1 | Abgeholt |
EDI_TRN_STA_INTRANSIT | 2 | Unterwegs |
EDI_TRN_STA_DELAYED | 3 | Verzögert |
EDI_TRN_STA_DELIVERED | 4 | Zugestellt |
Transportmodi (IFTMIN Legs):
| Wert | Bedeutung |
|---|---|
| 1 | See |
| 2 | Schiene |
| 3 | Straße |
| 4 | Luft |
import std.edi.transport;
// IFTSTA — Sendungsstatus "Unterwegs"
var hdr: int64 := alloc(EDI_TRN_HDR_SIZE);
poke64(hdr + EDI_TRN_HDR_REF, "SHP-2026-001" as int64);
poke64(hdr + EDI_TRN_HDR_REFLEN, 12);
poke64(hdr + EDI_TRN_HDR_DATE, "20261201" as int64);
poke64(hdr + EDI_TRN_HDR_DEPARTURE, "DEHAM" as int64); // Hamburg
poke64(hdr + EDI_TRN_HDR_DEPARTLEN, 5);
poke64(hdr + EDI_TRN_HDR_ARRIVAL, "USLAX" as int64); // Los Angeles
poke64(hdr + EDI_TRN_HDR_ARRIVALLEN, 5);
poke64(hdr + EDI_TRN_HDR_STATUSCODE, EDI_TRN_STA_INTRANSIT);
// Statuscode vorab prüfen
var rc: int64 := EdiIftstaStatusCheck(EDI_TRN_STA_INTRANSIT);
// rc=0: bekannter Code, rc=1: Warnung (unbekannt)
var out: int64 := alloc(4096);
var n: int64 := EdiIftstaWrite(hdr, out, 4096);
free(hdr, EDI_TRN_HDR_SIZE);
free(out, 4096);
std.edi.corestd.allocGemeinsamer Header für alle 8 Nachrichtentypen.
| Offset-Konstante | Inhalt |
|---|---|
EDI_TRN_HDR_BGMQUAL | BGM-Qualifier (automatisch gesetzt) |
EDI_TRN_HDR_REF / EDI_TRN_HDR_REFLEN | Auftrags-/Dokumentreferenz |
EDI_TRN_HDR_DATE / EDI_TRN_HDR_DATELEN | Datum |
EDI_TRN_HDR_DEPARTURE / EDI_TRN_HDR_DEPARTLEN | Abgangspunkt (LOC+87, z. B. UN/LOCODE) |
EDI_TRN_HDR_ARRIVAL / EDI_TRN_HDR_ARRIVALLEN | Bestimmungsort (LOC+88) |
EDI_TRN_HDR_CARRIER / EDI_TRN_HDR_CARRIERLEN | Spediteur/Carrier (NAD+CA) |
EDI_TRN_HDR_BOOKINGREF / EDI_TRN_HDR_BOOKINGLEN | Buchungsreferenz (RFF+BN) — Pflicht für IFTFCC |
EDI_TRN_HDR_STATUSCODE | IFTSTA-Statuscode (1–4) |
Ein Beförderungsabschnitt innerhalb eines IFTMIN-Auftrags. IFTMIN kann beliebig viele Legs enthalten — z. B. LKW zum Hafen → Schiff → Bahn zu Empfänger.
| Offset-Konstante | Inhalt |
|---|---|
EDI_TRN_LEG_DEPARTURE / EDI_TRN_LEG_DEPARTLEN | Abgangsort des Abschnitts (LOC+9) |
EDI_TRN_LEG_ARRIVAL / EDI_TRN_LEG_ARRIVALLEN | Ankunftsort des Abschnitts (LOC+11) |
EDI_TRN_LEG_MODE | Transportmodus: 1=See, 2=Schiene, 3=Straße, 4=Luft |
Wire pro Leg: TDT+20+mode → LOC+9+departure → LOC+11+arrival.
Gefahrgutinformation für IFTDGN. Pro Sendung können mehrere DGD-Strukturen vorkommen.
| Offset-Konstante | Inhalt |
|---|---|
EDI_DGD_UNNUMBER / EDI_DGD_UNNUMLEN | UN-Nummer (genau 4 Stellen, z. B. „1203“ für Benzin) |
EDI_DGD_IMDGCLASS / EDI_DGD_IMDGLEN | IMDG-Klasse (z. B. „3“, „8“, „6.1“) |
EDI_DGD_PACKINGGROUP | Verpackungsgruppe 1–3 (I=höchste, III=niedrigste Gefahr) |
EDI_DGD_EMSCODE / EDI_DGD_EMSLEN | EMS-Code (Emergency Schedule, z. B. „F-E,S-E“) |
EDI_DGD_QTY | Menge in der Sendung |
Wire: DGS+ADR+unNum+imdgClass+packingGroup+emsCode.
| Signatur | Beschreibung |
|---|---|
EdiUnNumberCheck(ptr: int64, len: int64): int64 | Prüft UN-Nummer: genau 4 Ziffern (0000–9999). Gibt 1=gültig, 0=ungültig. |
EdiIftstaStatusCheck(code: int64): int64 | Prüft IFTSTA-Statuscode: 1–4 bekannt → 0; sonst 1 (Warnung, nicht Fehler). |
EdiIftfccCheck(hdr: int64): int64 | Gibt 2 (Fehler) wenn keine Buchungsreferenz (RFF+BN) vorhanden — Pflichtfeld in IFTFCC. |
| Write-Funktion | Read-Funktion | Beschreibung |
|---|---|---|
EdiIftmbcWrite(hdr, out, outMax) | EdiIftmbcRead(buf, bufLen, hdr) | IFTMIN-Antwort |
EdiIftmcsWrite(hdr, out, outMax) | EdiIftmcsRead(buf, bufLen, hdr) | Vertragsstatus |
EdiIftmanWrite(hdr, out, outMax) | EdiIftmanRead(buf, bufLen, hdr) | Ankunftsankündigung |
EdiIfcsumWrite(hdr, out, outMax) | EdiIfcsumRead(buf, bufLen, hdr) | Frachtabrechnung |
EdiIftstaWrite(hdr, out, outMax) | EdiIftstaRead(buf, bufLen, hdr) | Sendungsstatus |
EdiIftfccWrite(hdr, out, outMax) | EdiIftfccRead(buf, bufLen, hdr) | Frachtkosten |
| Signatur | Beschreibung |
|---|---|
EdiIftminWrite(hdr: int64, legs: int64, legCount: int64, out: int64, outMax: int64): int64 | Schreibt Transportauftrag mit N Beförderungsabschnitten. |
EdiIftminRead(buf: int64, bufLen: int64, hdr: int64, legs: int64, maxLegs: int64): int64 | Parst IFTMIN; gibt Anzahl der Legs zurück. |
| Signatur | Beschreibung |
|---|---|
EdiIftdgnWrite(hdr: int64, dgds: int64, dgdCount: int64, out: int64, outMax: int64): int64 | Schreibt Gefahrgutmeldung mit N DGD-Einträgen. |
EdiIftdgnRead(buf: int64, bufLen: int64, hdr: int64, dgds: int64, maxDgds: int64): int64 | Parst IFTDGN; gibt DGD-Anzahl zurück. |
import std.edi.transport;
var hdr: int64 := alloc(EDI_TRN_HDR_SIZE);
poke64(hdr + EDI_TRN_HDR_REF, "IFTMIN-2026-888" as int64);
poke64(hdr + EDI_TRN_HDR_REFLEN, 15);
poke64(hdr + EDI_TRN_HDR_DATE, "20261201" as int64);
poke64(hdr + EDI_TRN_HDR_DEPARTURE, "CNSHA" as int64); // Shanghai
poke64(hdr + EDI_TRN_HDR_DEPARTLEN, 5);
poke64(hdr + EDI_TRN_HDR_ARRIVAL, "DEHAM" as int64); // Hamburg
poke64(hdr + EDI_TRN_HDR_ARRIVALLEN, 5);
poke64(hdr + EDI_TRN_HDR_CARRIER, "EVER GIVEN SHIPPING" as int64);
poke64(hdr + EDI_TRN_HDR_CARRIERLEN, 19);
poke64(hdr + EDI_TRN_HDR_BOOKINGREF, "BK-2026-004212" as int64);
poke64(hdr + EDI_TRN_HDR_BOOKINGLEN, 14);
// 2 Legs: See Shanghai→Rotterdam, dann Schiene Rotterdam→Hamburg
var legs: int64 := alloc(2 * EDI_TRN_LEG_SIZE);
poke64(legs + 0 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_DEPARTURE, "CNSHA" as int64);
poke64(legs + 0 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_DEPARTLEN, 5);
poke64(legs + 0 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_ARRIVAL, "NLRTM" as int64);
poke64(legs + 0 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_ARRIVALLEN,5);
poke64(legs + 0 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_MODE, 1); // See
poke64(legs + 1 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_DEPARTURE, "NLRTM" as int64);
poke64(legs + 1 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_DEPARTLEN, 5);
poke64(legs + 1 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_ARRIVAL, "DEHAM" as int64);
poke64(legs + 1 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_ARRIVALLEN,5);
poke64(legs + 1 * EDI_TRN_LEG_SIZE + EDI_TRN_LEG_MODE, 2); // Schiene
var out: int64 := alloc(8192);
var n: int64 := EdiIftminWrite(hdr, legs, 2, out, 8192);
free(legs, 2 * EDI_TRN_LEG_SIZE);
free(hdr, EDI_TRN_HDR_SIZE);
free(out, 8192);
import std.edi.transport;
var hdr: int64 := alloc(EDI_TRN_HDR_SIZE);
poke64(hdr + EDI_TRN_HDR_REF, "DGN-2026-042" as int64);
poke64(hdr + EDI_TRN_HDR_REFLEN, 12);
poke64(hdr + EDI_TRN_HDR_DATE, "20261201" as int64);
var dgds: int64 := alloc(EDI_DGD_SIZE);
// UN 1203 = Benzin (Klasse 3, Verpackungsgruppe II)
var unNum: pchar := "1203";
if (EdiUnNumberCheck(unNum as int64, 4) == 0) {
PrintLn("Ungültige UN-Nummer");
}
poke64(dgds + EDI_DGD_UNNUMBER, unNum as int64);
poke64(dgds + EDI_DGD_UNNUMLEN, 4);
poke64(dgds + EDI_DGD_IMDGCLASS, "3" as int64);
poke64(dgds + EDI_DGD_IMDGLEN, 1);
poke64(dgds + EDI_DGD_PACKINGGROUP,2); // Gruppe II
poke64(dgds + EDI_DGD_EMSCODE, "F-E,S-E" as int64);
poke64(dgds + EDI_DGD_EMSLEN, 7);
poke64(dgds + EDI_DGD_QTY, 200);
var out: int64 := alloc(4096);
var n: int64 := EdiIftdgnWrite(hdr, dgds, 1, out, 4096);
free(dgds, EDI_DGD_SIZE);
free(hdr, EDI_TRN_HDR_SIZE);
free(out, 4096);
EdiIftfccCheck gibt Fehler (2) zurück wenn keine Buchungsreferenz (RFF+BN) gesetzt ist. Vor EdiIftfccWrite immer prüfen.EdiUnNumberCheck verlangt genau 4 Ziffern — also „0012“ statt „12“. Führende Nullen sind Teil der Nummer (z. B. 0004 = Ammoniumnitrat in Lösung).EdiIftstaStatusCheck warnt (1) bei unbekannten Codes, gibt aber keinen Fehler — ermöglicht eigene Erweiterungen.EdiIftminWrite/Read akzeptiert ein Leg-Array. Alle anderen Nachrichten haben genau einen Abgangspunkt und einen Bestimmungsort im Header.| Unit | Datei |
|---|---|
std.edi.transport | std/edi/transport.lyx |
Letzte Aktualisierung: 2026-06-16