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
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