std.edi.rfq

Anfrage- und Angebotsprozess per EDIFACT: Käufer sendet eine Angebotsanfrage (REQOTE), Lieferant antwortet mit einem Angebot (QUOTES). Der Kreuzreferenz-Mechanismus über RFF+RFQ ist Pflicht — jedes QUOTES muss die Nummer des zugehörigen REQOTE tragen.

  • REQOTE (BGM 311) — Request for Quotation: Artikel, Mengen, Wunsch-Liefertermine
  • QUOTES (BGM 315) — Quotation: Preise, Verfügbarkeit, Liefertermine

import std.edi.rfq;

// REQOTE mit 2 Positionen schreiben
var lines: int64 := alloc(2 * EDI_RFQ_LINE_SIZE);

// Zeile 1: GTIN 04012345678901, Menge 50, benötigt bis 20261231
poke64(lines + EDI_RFQ_LINE_GTIN,    "04012345678901" as int64);
poke64(lines + EDI_RFQ_LINE_GTINLEN, 14);
poke64(lines + EDI_RFQ_LINE_QTY,     50);
poke64(lines + EDI_RFQ_LINE_DATE,    "20261231" as int64);

// Zeile 2: GTIN 04012345678918, Menge 100
var line2: int64 := lines + EDI_RFQ_LINE_SIZE;
poke64(line2 + EDI_RFQ_LINE_GTIN,    "04012345678918" as int64);
poke64(line2 + EDI_RFQ_LINE_GTINLEN, 14);
poke64(line2 + EDI_RFQ_LINE_QTY,     100);

var out: int64 := alloc(8192);
var n: int64 := EdiReqoteWrite(
    "RFQ-2026-042" as int64,
    "20261201" as int64,
    lines, 2, out, 8192);

free(lines, 2 * EDI_RFQ_LINE_SIZE);
free(out, 8192);


Imports

  • std.edi.core
  • std.alloc

Structs

EdiRfqLine (EDI_RFQ_LINE_SIZE = 48 Bytes)

Eine Position in einer Angebotsanfrage.

Offset-Konstante Inhalt
EDI_RFQ_LINE_GTIN / EDI_RFQ_LINE_GTINLEN GTIN-Zeiger und -Länge
EDI_RFQ_LINE_QTY Angefragte Menge
EDI_RFQ_LINE_UNIT / EDI_RFQ_LINE_UNITLEN Mengeneinheit (z. B. „PCE“, optional)
EDI_RFQ_LINE_DATE Zeiger auf 8-stelliges Wunschdatum „YYYYMMDD“ (0 = keins)

EdiQuoteLine (EDI_QUOTE_LINE_SIZE = 56 Bytes)

Eine Position in einem Angebot.

Offset-Konstante Inhalt
EDI_QUOTE_LINE_GTIN / EDI_QUOTE_LINE_GTINLEN GTIN-Zeiger und -Länge
EDI_QUOTE_LINE_PRICE Preis × 100 (Festkomma; 1999 = 19,99 €)
EDI_QUOTE_LINE_CURRENCY / EDI_QUOTE_LINE_CURRENCYLEN Währung (z. B. „EUR“)
EDI_QUOTE_LINE_DATE Zeiger auf Lieferdatum „YYYYMMDD“ (0 = keins)
EDI_QUOTE_LINE_AVAIL Verfügbarkeit: 1 = verfügbar, 0 = nicht verfügbar

EdiRfqHdr (EDI_RFQHDR_SIZE = 32 Bytes)

Kopfdaten eines eingehenden REQOTE.

Offset-Konstante Inhalt
EDI_RFQHDR_NUM / EDI_RFQHDR_NUMLEN RFQ-Nummer (Zeiger in Empfangspuffer)
EDI_RFQHDR_DATE / EDI_RFQHDR_DATELEN Dokumentdatum

EdiQuoteHdr (EDI_QUOTEHDR_SIZE = 32 Bytes)

Kopfdaten eines eingehenden QUOTES.

Offset-Konstante Inhalt
EDI_QUOTEHDR_NUM / EDI_QUOTEHDR_NUMLEN Angebotsnummer
EDI_QUOTEHDR_RFQREF / EDI_QUOTEHDR_RFQREFLEN Rückverweis auf REQOTE-Nummer (RFF+RFQ)

Funktionen

REQOTE

Signatur Beschreibung
EdiReqoteWrite(rfqNum: int64, date: int64, lines: int64, lineCount: int64, out: int64, outMax: int64): int64 Schreibt REQOTE. rfqNum ist Pflicht (0 → gibt -1 zurück). date = Zeiger auf „YYYYMMDD“ oder 0.
EdiReqoteRead(buf: int64, bufLen: int64, hdr: int64, lines: int64, maxLines: int64): int64 Parst REQOTE; befüllt hdr (EDI_RFQHDR_SIZE) und lines-Array. Gibt Zeilenanzahl zurück. Zero-Copy: Zeiger in hdr/lines zeigen in buf.

QUOTES

Signatur Beschreibung
EdiQuotesWrite(rfqRef: int64, quoteNum: int64, lines: int64, lineCount: int64, out: int64, outMax: int64): int64 Schreibt QUOTES. rfqRef ist Pflicht (0 → gibt -1 zurück). quoteNum = eigene Angebotsnummer (optional, 0 erlaubt).
EdiQuotesRead(buf: int64, bufLen: int64, hdr: int64, lines: int64, maxLines: int64): int64 Parst QUOTES; befüllt hdr und lines. Gibt Zeilenanzahl zurück.

Codebeispiel — Angebot lesen und auswerten

import std.edi.rfq;

var hdr:   int64 := alloc(EDI_QUOTEHDR_SIZE);
var lines: int64 := alloc(50 * EDI_QUOTE_LINE_SIZE);

var count: int64 := EdiQuotesRead(inBuf, inBufLen, hdr, lines, 50);

// Rückverweis auf REQOTE prüfen
var rfqRef: int64 := peek64(hdr + EDI_QUOTEHDR_RFQREF);
PrintLn("Angebot auf RFQ: " + (rfqRef as pchar));

var i: int64 := 0;
while (i < count) {
    var line: int64 := lines + i * EDI_QUOTE_LINE_SIZE;
    var preis: int64 := peek64(line + EDI_QUOTE_LINE_PRICE);
    var avail: int64 := peek64(line + EDI_QUOTE_LINE_AVAIL);
    PrintLn("  Preis: " + IntToStr(preis / 100) + "." +
            IntToStr(preis - (preis / 100) * 100) +
            " EUR, verfügbar: " + IntToStr(avail));
    i := i + 1;
}

free(lines, 50 * EDI_QUOTE_LINE_SIZE);
free(hdr,   EDI_QUOTEHDR_SIZE);


Hinweise

  • rfqRef Pflicht in QUOTES: EdiQuotesWrite gibt -1 zurück, wenn rfqRef null oder leer ist. EDIFACT fordert diesen Rückverweis (RFF+RFQ) für die Auftragszuordnung.
  • Preise als Festkomma: Preise werden als int64 × 100 gespeichert. 1999 bedeutet 19,99. Beim Schreiben wird daraus 19.99 im EDIFACT-Format.
  • Datum-Format: Alle Datum-Felder erwarten genau 8 Zeichen YYYYMMDD — keine Trennzeichen.

Quelldatei

Unit Datei
std.edi.rfq std/edi/rfq.lyx

Letzte Aktualisierung: 2026-06-16