std.edi.catalog

Stammdaten-Austausch per EDIFACT: Artikelkataloge mit Preisen und Gültigkeitszeiträumen (PRICAT) sowie Partnerdaten mit GLN-Adressen (PARTIN). GS1-Validierungsfunktionen für GTIN und GLN sind in dieser Unit enthalten.

  • PRICAT — Price/Sales Catalogue: GTINs, Brutto-/Nettopreise, Mengeneinheiten, Gültigkeitszeiträume
  • PARTIN — Party Information: GLN-basierte Adressen und Kontaktdaten

GS1-Validierungen:

Funktion Unterstützte Längen Algorithmus
EdiGtinCheck 8, 12, 13, 14 Stellen GS1 Mod-10 (Prüfziffer)
EdiGlnCheck 13 Stellen GS1 Mod-10

Achtung: EdiPricatWrite validiert GTINs nicht — das liegt in der Verantwortung des Callers.

import std.edi.catalog;

// GTIN validieren
var gtin: pchar := "04012345678901";
if (EdiGtinCheck(gtin as int64, 14) == 1) {
    PrintLn("GTIN gültig");
}

// Preiskatalog mit einem Artikel aufbauen
var item: int64 := alloc(EDI_PRICAT_ITEM_SIZE);
poke64(item + EDI_PRICAT_GTIN,       gtin as int64);
poke64(item + EDI_PRICAT_GTINLEN,    14);
poke64(item + EDI_PRICAT_DESC,       "Schrauben M6x20" as int64);
poke64(item + EDI_PRICAT_DESCLEN,    16);
poke64(item + EDI_PRICAT_GROSSPRICE, 299);  // 2,99 €
poke64(item + EDI_PRICAT_NETPRICE,   251);  // 2,51 €
poke64(item + EDI_PRICAT_CURRENCY,   "EUR" as int64);
poke64(item + EDI_PRICAT_CURRENCYLEN,3);
poke64(item + EDI_PRICAT_VALIDFROM,  "20260101" as int64);
poke64(item + EDI_PRICAT_VALIDTO,    "20261231" as int64);

var out: int64 := alloc(8192);
var n: int64 := EdiPricatWrite(item, 1, out, 8192);

free(item, EDI_PRICAT_ITEM_SIZE);
free(out,  8192);


Imports

  • std.edi.core
  • std.alloc

Structs

EdiPricatItem (EDI_PRICAT_ITEM_SIZE = 96 Bytes)

Offset-Konstante Inhalt
EDI_PRICAT_GTIN / EDI_PRICAT_GTINLEN GTIN-Zeiger und -Länge
EDI_PRICAT_DESC / EDI_PRICAT_DESCLEN Artikelbeschreibung
EDI_PRICAT_GROSSPRICE Bruttopreis × 100 (z. B. 299 = 2,99 €)
EDI_PRICAT_NETPRICE Nettopreis × 100
EDI_PRICAT_CURRENCY / EDI_PRICAT_CURRENCYLEN Währungscode (z. B. „EUR“)
EDI_PRICAT_UNIT / EDI_PRICAT_UNITLEN Mengeneinheit (z. B. „PCE“, optional)
EDI_PRICAT_VALIDFROM Zeiger auf Gültigkeitsbeginn „YYYYMMDD“ (0 = keins)
EDI_PRICAT_VALIDTO Zeiger auf Gültigkeitsende „YYYYMMDD“ (0 = keins)

EdiParty (EDI_PARTY_SIZE = 112 Bytes)

Offset-Konstante Inhalt
EDI_PARTY_GLN / EDI_PARTY_GLNLEN GLN-Zeiger und -Länge
EDI_PARTY_NAME / EDI_PARTY_NAMELEN Firmenname
EDI_PARTY_STREET / EDI_PARTY_STREETL Straße + Hausnummer
EDI_PARTY_CITY / EDI_PARTY_CITYL Ort
EDI_PARTY_POSTCODE / EDI_PARTY_POSTCODEL Postleitzahl
EDI_PARTY_COUNTRY / EDI_PARTY_COUNTRYL Ländercode (z. B. „DE“)
EDI_PARTY_ROLE / EDI_PARTY_ROLEL Parteirolle (z. B. „SU“, „BY“)

EdiProact (EDI_PROACT_SIZE = 40 Bytes)

Aktivitätsdaten (PROACT) für Warengruppen-Berichte.

Offset-Konstante Inhalt
EDI_PROACT_GTIN / EDI_PROACT_GTINLEN GTIN-Zeiger und -Länge
EDI_PROACT_QTY Menge × 1000 (3 Dezimalstellen)
EDI_PROACT_DATE Zeiger auf Datum „YYYYMMDD“
EDI_PROACT_TYPE Aktivitätstyp: 1=Verkauf, 2=Rückgabe, 3=Transfer

Funktionen

GS1-Validierung

Signatur Beschreibung
EdiGtinCheck(ptr: int64, len: int64): int64 Prüft GTIN-Prüfziffer (Mod-10). Gibt 1=gültig, 0=ungültig. Unterstützt Längen 8, 12, 13, 14.
EdiGlnCheck(ptr: int64, len: int64): int64 Prüft GLN-Prüfziffer (Mod-10). Gibt 1=gültig, 0=ungültig. Erwartet exakt 13 Stellen.

PRICAT

Signatur Beschreibung
EdiPricatWrite(items: int64, count: int64, out: int64, outMax: int64): int64 Schreibt PRICAT. GTINs werden nicht validiert (Caller-Verantwortung).
EdiPricatRead(buf: int64, bufLen: int64, items: int64, maxItems: int64): int64 Parst PRICAT; gibt Artikelanzahl zurück. Zero-Copy: Zeiger in items zeigen in buf.

PARTIN

Signatur Beschreibung
EdiPartinWrite(party: int64, out: int64, outMax: int64): int64 Schreibt PARTIN (eine Partei)
EdiPartinRead(buf: int64, bufLen: int64, party: int64): int64 Parst PARTIN; gibt EDI_OK oder Fehlercode

Codebeispiel — Eingehenden Katalog lesen

import std.edi.catalog;

var items: int64 := alloc(500 * EDI_PRICAT_ITEM_SIZE);
var count: int64 := EdiPricatRead(inBuf, inBufLen, items, 500);

var i: int64 := 0;
while (i < count) {
    var item: int64 := items + i * EDI_PRICAT_ITEM_SIZE;
    var gptr: int64 := peek64(item + EDI_PRICAT_GTIN);
    var glen: int64 := peek64(item + EDI_PRICAT_GTINLEN);

    // GTIN validieren
    if (EdiGtinCheck(gptr, glen) == 0) {
        PrintLn("Ungültige GTIN in Position " + IntToStr(i + 1));
    }
    i := i + 1;
}

free(items, 500 * EDI_PRICAT_ITEM_SIZE);


Quelldatei

Unit Datei
std.edi.catalog std/edi/catalog.lyx

Letzte Aktualisierung: 2026-06-16