Fakturierung per EDIFACT: Rechnungen, Gutschriften, Streitfälle und Kontoauszüge. EdiInvoicWrite berechnet Netto-, Steuer- und Bruttosummen aus den Positionen selbst — Summenwerte im Header werden ignoriert und überschrieben.
Steuertypen:
| Konstante | Code | Satz |
|---|---|---|
EDI_INVOIC_TAX_S | S | 19 % Standard |
EDI_INVOIC_TAX_AA | AA | 7 % Ermäßigt |
EDI_INVOIC_TAX_Z | Z | 0 % Nullsatz |
EDI_INVOIC_TAX_E | E | 0 % Steuerfrei |
import std.edi.invoice;
// Rechnung mit 2 Positionen
var hdr: int64 := alloc(EDI_INVOIC_HDR_SIZE);
var lines: int64 := alloc(2 * EDI_INVOIC_LINE_SIZE);
poke64(hdr + EDI_INVOIC_HDR_NUM, "RE-2026-1042" as int64);
poke64(hdr + EDI_INVOIC_HDR_NUMLEN, 12);
poke64(hdr + EDI_INVOIC_HDR_DATE, "20261201" as int64);
poke64(hdr + EDI_INVOIC_HDR_BGMQUAL, 380); // Rechnung
// Position 1: 10 × 19,99 € (19 % USt)
poke64(lines + EDI_INVOIC_LINE_GTIN, "04012345678901" as int64);
poke64(lines + EDI_INVOIC_LINE_GTINLEN, 14);
poke64(lines + EDI_INVOIC_LINE_QTY, 10);
poke64(lines + EDI_INVOIC_LINE_PRICE, 1999); // 19,99 €
poke64(lines + EDI_INVOIC_LINE_NETAMT, 19990); // 10 × 19,99 €
poke64(lines + EDI_INVOIC_LINE_TAXTYPE, EDI_INVOIC_TAX_S);
var out: int64 := alloc(16384);
var n: int64 := EdiInvoicWrite(hdr, lines, 2, out, 16384);
// EdiInvoicWrite berechnet Netto/Steuer/Brutto aus den Zeilen neu
free(lines, 2 * EDI_INVOIC_LINE_SIZE);
free(hdr, EDI_INVOIC_HDR_SIZE);
free(out, 16384);
std.edi.corestd.alloc| Offset-Konstante | Inhalt |
|---|---|
EDI_INVOIC_HDR_NUM / EDI_INVOIC_HDR_NUMLEN | Rechnungsnummer |
EDI_INVOIC_HDR_DATE / EDI_INVOIC_HDR_DATELEN | Rechnungsdatum |
EDI_INVOIC_HDR_BGMQUAL | BGM-Qualifier: 380=Rechnung, 381=Gutschrift, 383=Belastung, 386=Vorauszahlung |
EDI_INVOIC_HDR_SUPPLIER / EDI_INVOIC_HDR_SUPLEN | NAD+SU Lieferant (Zeiger/Länge) |
EDI_INVOIC_HDR_BUYER / EDI_INVOIC_HDR_BUYLEN | NAD+BY Käufer |
EDI_INVOIC_HDR_CURRENCY / EDI_INVOIC_HDR_CURLEN | Währungscode (z. B. „EUR“) |
EDI_INVOIC_HDR_NETTOTAL | Nettobetrag × 100 (MOA+77) — wird von Write neu berechnet |
EDI_INVOIC_HDR_TAXTOTAL | Steuerbetrag × 100 (MOA+176) — wird von Write neu berechnet |
EDI_INVOIC_HDR_GROSSTOTAL | Bruttobetrag × 100 (MOA+9) — wird von Write neu berechnet |
| Offset-Konstante | Inhalt |
|---|---|
EDI_INVOIC_LINE_GTIN / EDI_INVOIC_LINE_GTINLEN | GTIN-Zeiger und -Länge |
EDI_INVOIC_LINE_QTY | Menge |
EDI_INVOIC_LINE_PRICE | Einzelpreis × 100 |
EDI_INVOIC_LINE_NETAMT | Zeilenbetrag × 100 (Qty × Price) |
EDI_INVOIC_LINE_TAXTYPE | Steuertyp: EDI_INVOIC_TAX_* |
EDI_INVOIC_LINE_LINENO | Zeilennummer |
| Offset-Konstante | Inhalt |
|---|---|
EDI_INVCON_HDR_CONTRACTNUM / EDI_INVCON_HDR_NUMLEN | Vertragsnummer |
EDI_INVCON_HDR_DATE / EDI_INVCON_HDR_DATELEN | Vertrags-/Abrechnungsdatum |
EDI_INVCON_HDR_INVOICEREF / EDI_INVCON_HDR_REFLEN | Referenz auf Ausgangsrechnung |
EDI_INVCON_HDR_AMOUNT / EDI_INVCON_HDR_CURRENCY | Betrag × 100 + Währungszeiger |
| Offset-Konstante | Inhalt |
|---|---|
EDI_COMDIS_HDR_DISPUTEREF | Streitfall-Referenz |
EDI_COMDIS_HDR_INVOICEREF | Bezogene Rechnungsnummer |
EDI_COMDIS_HDR_AMOUNT | Strittiger Betrag × 100 |
EDI_COMDIS_HDR_REASON / EDI_COMDIS_HDR_REASONLEN | Freitext-Begründung |
| Offset-Konstante | Inhalt |
|---|---|
EDI_COACSU_HDR_ACCOUNTREF | Konto-Referenz |
EDI_COACSU_HDR_NETBALANCE | Nettosaldo × 100 |
EDI_COACSU_HDR_GROSSBALANCE | Bruttosaldo × 100 |
EDI_COACSU_HDR_CURRENCY | Währungszeiger |
| Signatur | Beschreibung |
|---|---|
EdiInvoicWrite(hdr: int64, lines: int64, lineCount: int64, out: int64, outMax: int64): int64 | Schreibt INVOIC. Netto/Steuer/Brutto werden aus den Positionen neu berechnet. |
EdiInvoicRead(buf: int64, bufLen: int64, hdr: int64, lines: int64, maxLines: int64): int64 | Parst INVOIC; gibt Zeilenanzahl zurück. |
EdiInvoicValidate(hdr: int64, lines: int64, lineCount: int64): int64 | Prüft Berechnungsintegrität. Gibt 0=ok, 1=Nettofehler, 3=Bruttofehler. Toleranz 1 Cent. |
| Signatur | Beschreibung |
|---|---|
EdiInvconWrite(hdr: int64, out: int64, outMax: int64): int64 | Schreibt INVCON (Dauerrechnung) |
EdiInvconRead(buf: int64, bufLen: int64, hdr: int64): int64 | Parst INVCON; gibt 1=ok, 0=Fehler |
| Signatur | Beschreibung |
|---|---|
EdiComdisWrite(hdr: int64, out: int64, outMax: int64): int64 | Schreibt COMDIS (Handelsstreit) |
EdiComdisRead(buf: int64, bufLen: int64, hdr: int64): int64 | Parst COMDIS |
| Signatur | Beschreibung |
|---|---|
EdiCoacsuWrite(hdr: int64, out: int64, outMax: int64): int64 | Schreibt COACSU (Kontoauszug) |
EdiCoacsuRead(buf: int64, bufLen: int64, hdr: int64): int64 | Parst COACSU |
import std.edi.invoice;
var hdr: int64 := alloc(EDI_INVOIC_HDR_SIZE);
var lines: int64 := alloc(200 * EDI_INVOIC_LINE_SIZE);
var count: int64 := EdiInvoicRead(inBuf, inBufLen, hdr, lines, 200);
var rc: int64 := EdiInvoicValidate(hdr, lines, count);
if (rc == 0) {
PrintLn("Rechnung korrekt. Brutto: " +
IntToStr(peek64(hdr + EDI_INVOIC_HDR_GROSSTOTAL) / 100) + " EUR");
} else {
PrintLn("Berechnungsfehler: " + IntToStr(rc));
}
free(lines, 200 * EDI_INVOIC_LINE_SIZE);
free(hdr, EDI_INVOIC_HDR_SIZE);
EDI_INVOIC_TAX_S = 1). Intern wird daraus S (Standard), AA (Ermäßigt) etc. im EDIFACT-Format.| Unit | Datei |
|---|---|
std.edi.invoice | std/edi/invoice.lyx |
Letzte Aktualisierung: 2026-06-16