E-Rechnung für Großhandel & Versandhandel: XRechnung & ZUGFeRD aus Ihrer Branchensoftware
Eine Großhandelsrechnung ist selten eine einfache Liste aus Menge mal Preis. Staffelrabatte, Fracht, Gebinde, Preise je 100 Stück und Sammelrechnungen über viele Lieferscheine müssen in die festen Felder der Norm EN 16931 passen. Diese Seite zeigt, wie das gelingt, was Ihre Warenwirtschaft dazu beitragen muss und wo Rechnungen in der Praxis abgelehnt werden.
Kurz gesagt: Drei der vier hier beschriebenen Systeme haben laut Hersteller eine eigene E-Rechnungsfunktion: enventa Trade ERP und SOG ERP als Modul, die GDI Business Line als Export in der Warenwirtschaft. Für WinAB fanden wir keine öffentliche Angabe (Stand September 2026). Ohne Herstellermodul ist der schnellste Weg, die gewohnte PDF-Rechnung mit den Rechnungsdaten anzureichern (Weg A, wenige Tage). Die meisten Fehler entstehen nicht im Format, sondern bei Rabatten, Einheiten und Summen.
Was eine Großhandelsrechnung besonders macht
In der E-Rechnung muss jede Zahl nachrechenbar sein: Der Empfänger prüft maschinell, ob Positionsbeträge, Nachlässe, Zuschläge und Steuer zusammenpassen. Die Tabelle zeigt, wohin die typischen Vorgänge des Großhandels gehören. Kürzel wie BR-DE-26, BT-10 oder BG-3 stammen aus der Norm EN 16931. Sie müssen sie nicht kennen; wichtig ist der erklärende Satz daneben.
| Vorgang im Großhandel | Was zu beachten ist | EN 16931 | API-Feld |
|---|---|---|---|
| Staffel- oder Kundenrabatt je Position | gehört als Nachlass zu genau dieser Position, mit Prozentsatz und Ausgangsbetrag; mindert den Positionsbetrag | BG-27 | lines[].line_allowances[] mit percentage und basis_amount |
| Rechnungsrabatt, Bonus auf den Beleg | braucht eine eigene Steuerkategorie und einen eigenen Steuersatz | BG-20 | invoice.allowances[] |
| Fracht, Verpackung, Mindermengenzuschlag | die Summe der Zuschläge steht zusätzlich in den Rechnungssummen | BG-21 | invoice.charges[], totals.charge_total_amount |
| Preis je 100 Stück oder je 100 kg | die Menge bleibt in der Grundeinheit, der Preis gilt für 100 | BT-149 | price_base_quantity |
| Pfand für Mehrweggebinde | eigene Position, steuerpflichtig; den Satz klärt Ihr Steuerberater | BG-25 | eigene Position in lines[] |
| Bestellnummer des Kunden | viele Einkaufsabteilungen buchen nur mit ihr | BT-13 | purchase_order_reference |
| Monats- oder Sammelrechnung | Abrechnungszeitraum angeben, Lieferscheinnummern in den Freitext oder den Positionstext | BT-73/74 | billing_period_start/_end, note |
| Retoure, Gutschrift | Rechnungsart Gutschrift (381) mit Verweis auf die Ursprungsrechnung | BT-3 = 381 | invoice_type_code, preceding_invoices |
| Lieferung in ein anderes EU-Land | steuerfrei; USt-ID des Kunden und Lieferland sind Pflicht | Kategorie K | tax_category + exemption_reason |
| Ausfuhr in ein Drittland | steuerfrei; der Befreiungsgrund steht als Text auf der Rechnung | Kategorie G | tax_category + exemption_reason |
Eine eigene Lieferscheinnummer als Feld kennt das Datenmodell nicht. Bei Sammelrechnungen
tragen Sie die Nummern deshalb in die Positionsbeschreibung oder in den Freitext
(note) ein. Bei öffentlichen Auftraggebern, etwa Bauhöfen oder Kliniken, gehört die
Leitweg-ID in buyer_reference; ohne sie kann das Rechnungsportal die XRechnung
(reine XML-Datei, das Pflichtformat für Behörden) nicht zuordnen.
Einheiten: vom ERP-Kürzel zum UN/ECE-Code
Warenwirtschaftssysteme speichern Einheiten meist als Klartext-Kürzel. Die E-Rechnung
erlaubt nur Codes aus den Listen UN/ECE Rec. 20 und Rec. 21. Gebinde wie Karton oder Palette
stammen aus Rec. 21 und tragen dort ein vorangestelltes X. Das wird oft
übersehen: CT oder PF ohne X lehnt die API (Schnittstelle, über die Programme Daten austauschen) mit HTTP 422 und dem Feldpfad
lines[n].unit_code ab.
| Kürzel im ERP (Beispiele) | Code | Bedeutung |
|---|---|---|
| Stk, St., Stück | C62 | Stück (alternativ H87) |
| Krt, Karton | XCT | Karton |
| Pal, Palette | XPF | Palette |
| Pck, Pack, Paket | XPK | Packung |
| Kiste | XCR | Kiste |
| kg | KGM | Kilogramm |
| t, to | TNE | Tonne |
| m, lfm | MTR | Meter |
| l, Ltr | LTR | Liter |
Prüfen Sie die Zuordnung gegen alle Einheiten, die in Ihrem Artikelstamm tatsächlich vorkommen. Wird ein Artikel mal als Stück und mal als Karton verkauft, bekommt jede Position den Code ihrer eigenen Verkaufseinheit.
Ihre Software
enventa Trade ERP (bis 2025 eNVenta ERP von Nissen & Velten) richtet sich an technischen Handel, Stahlhandel, Biegereien und SHK-Großhandel und wird vom Hersteller mit „Hosted in Germany“ beworben. Für die E-Rechnung führt die enventa Group ein eigenes Modul „Trade ERP ZUGFeRD / XRechnung“. Welche Profile und Versionen es unterstützt, nennt die Modulseite nicht. Wer das Modul einsetzt, braucht für den Ausgang keinen zweiten Weg, kann die erzeugten Dateien aber unabhängig prüfen.
SOG ERP von der SOG Business-Software GmbH zielt auf Großhandel, Außenhandel und E-Commerce und wird als Cloud, Kauf oder Miete angeboten. Das Modul „E-Invoice“ liest laut SOG eingehende Dateien in ZUGFeRD 2.x (ein normales PDF mit denselben Rechnungsdaten als eingebettetem XML), Factur-X und XRechnung ein und erstellt Verkaufsrechnungen als E-Rechnung. Verfügbar ist es seit dem 1. Januar 2025 mit dem aktuellen Programmstand. Relevant bleibt die Frage, ob Ihre Installation auf diesem Stand ist.
WinAB und WinAB food der Brückner System GmbH sind auf Lebensmittel-, Frische- und Blumengroßhandel sowie Importeure ausgelegt. Das System kennt laut Hersteller Waagenanschluss, Leergutabrechnung, EDI mit Handelskonzernen, DATEV-Schnittstellen und laut Produktbroschüre von 2020 eine REST-Schnittstelle. Eine Aussage zu XRechnung oder ZUGFeRD fanden wir auf den Seiten von Brückner nicht; der Status ist deshalb offen.
GDI ERP heißt beim Hersteller GDI Vision Business Line und stammt von der GDI Software GmbH in Landau, die zur SelectLine Group gehört. Die öffentlichen Versionshinweise dokumentieren einen E-Rechnungs-Export im Format ZUGFeRD 2.x und XRechnung, der 2025 und 2026 laufend erweitert wurde. Hier liegt der Nutzen einer externen Lösung vor allem in der unabhängigen Prüfung.
Drei Wege für den Großhandel
Weg A, PDF anreichern: Ihre Warenwirtschaft druckt die Rechnung wie bisher. Ein kleines Skript oder die Anbindung durch Coreventa schickt die PDF zusammen mit den Kopf- und Positionsdaten an die API. Zurück kommt ein ZUGFeRD-PDF im gewohnten Layout mit eingebetteter XRechnung. Für Großhändler mit eigenem Briefpapier, Artikelbildern oder Konditionsblöcken auf der Rechnung ist das meist der schnellste Weg. Wichtig: Dass PDF und Daten übereinstimmen, müssen Sie in diesem Weg selbst sicherstellen.
Weg B, Daten-Export: Wenn die Warenwirtschaft Belege als CSV oder XML exportiert oder eine Datenbank-Sicht bereitstellt, erzeugt ein Mapping das JSON (ein Textformat für Daten), und der Server rendert die Sicht-PDF selbst. Das Layout wird neutral, dafür sind PDF und XML garantiert identisch. Das passt gut für Sammelrechnungen, die ohnehin nachts im Stapel laufen.
Weg C, direkte Integration: Bietet das System eine Skriptsprache, Webservices oder eine REST-Schnittstelle, ruft es die API beim Fakturieren selbst auf und legt XML und PDF im Archiv ab. Das dauert Wochen und lohnt sich vor allem bei hohem Rechnungsvolumen.
Unabhängig vom Weg: Eingehende E-Rechnungen Ihrer Lieferanten öffnen und prüfen Sie im kostenlosen Viewer. Welche Frist für Ihren Betrieb gilt, steht im Ratgeber E-Rechnungspflicht & Fristen.
Beispiel: Sammelrechnung eines technischen Großhändlers
Ein Händler für Industriebedarf rechnet drei Lieferungen eines Monats in einer Rechnung ab: Kugellager mit 15 % Staffelrabatt, Hydraulikschlauch in Metern mit 10 % Kundenrabatt, Schrauben mit Preis je 100 Stück und Fracht. Die PDF kommt aus der Warenwirtschaft (Weg A); das JSON ist gegen XRechnung 3.0 geprüft.
Vorher liegt nur die gewohnte PDF-Rechnung aus der Warenwirtschaft vor, mit drei Lieferscheinen, zwei Rabatten und Fracht. Nachher ist es dieselbe PDF mit eingebetteten Rechnungsdaten, die das System Ihres Kunden selbst lesen und Cent für Cent nachrechnen kann.
Der folgende Kasten ist für Ihre IT oder Ihr Systemhaus gedacht. Als Inhaber reicht es zu wissen: So sieht ein Beispiel aus, das die Prüfung besteht.
Technisches Beispiel anzeigen (JSON, für Ihre IT)
# Sammelrechnung als ZUGFeRD mit eingebetteter XRechnung erzeugen: curl -X POST https://api.einfache-rechnungen.de/v1/invoices/generate \ -H "X-API-Key: erk_ihr_key" \ -H "Content-Type: application/json" \ -d @sammelrechnung.json
{
"invoice": {
"invoice_number": "SR-2026-0930-17",
"issue_date": "2026-09-30",
"billing_period_start": "2026-09-01",
"billing_period_end": "2026-09-30",
"due_date": "2026-10-30",
"currency": "EUR",
"buyer_reference": "K-20417",
"purchase_order_reference": "BE-88231",
"note": "Sammelrechnung September 2026 über die Lieferscheine LS-50311, LS-50388 und LS-50412.",
"seller": {
"name": "Nordtech Industriebedarf GmbH",
"address": {"street": "Hafenstraße 12", "postal_code": "28217", "city": "Bremen", "country_code": "DE"},
"vat_id": "DE123456789",
"electronic_address": "rechnung@nordtech.example",
"electronic_address_scheme": "EM",
"contact": {"name": "Buchhaltung", "phone": "+49 421 555010", "email": "rechnung@nordtech.example"}
},
"buyer": {
"name": "Weser Maschinenbau KG",
"address": {"street": "Werftweg 3", "postal_code": "27568", "city": "Bremerhaven", "country_code": "DE"},
"electronic_address": "einkauf@weser-mb.example",
"electronic_address_scheme": "EM"
},
"payment_means": {"code": "58", "iban": "DE89370400440532013000"},
"lines": [
{
"line_id": "1",
"name": "Rillenkugellager 6205-2RS",
"description": "Lieferschein LS-50311 vom 04.09.2026",
"quantity": "40",
"unit_code": "C62",
"unit_price_net": "6.80",
"line_allowances": [
{"amount": "40.80", "reason": "Staffelrabatt", "percentage": "15", "basis_amount": "272.00"}
],
"line_net_amount": "231.20",
"tax_category": "S",
"tax_rate": "19"
},
{
"line_id": "2",
"name": "Hydraulikschlauch DN10, 2SN",
"description": "Lieferschein LS-50388 vom 12.09.2026",
"quantity": "25",
"unit_code": "MTR",
"unit_price_net": "9.40",
"line_allowances": [
{"amount": "23.50", "reason": "Kundenrabatt", "percentage": "10", "basis_amount": "235.00"}
],
"line_net_amount": "211.50",
"tax_category": "S",
"tax_rate": "19"
},
{
"line_id": "3",
"name": "Sechskantschraube DIN 933 M8x30, verzinkt",
"description": "Lieferschein LS-50412 vom 23.09.2026, Preis je 100 Stück",
"quantity": "500",
"unit_code": "C62",
"unit_price_net": "7.90",
"price_base_quantity": "100",
"line_net_amount": "39.50",
"tax_category": "S",
"tax_rate": "19"
}
],
"charges": [{"amount": "12.50", "reason": "Frachtkosten", "tax_category": "S", "tax_rate": "19"}],
"tax_breakdown": [{"category": "S", "rate": "19", "taxable_amount": "494.70", "tax_amount": "93.99"}],
"totals": {
"line_net_amount": "482.20",
"charge_total_amount": "12.50",
"net_amount": "494.70",
"tax_amount": "93.99",
"gross_amount": "588.69",
"payable_amount": "588.69"
}
},
"invoice_pdf_base64": "JVBERi0xLjcKJeLjz9MK…",
"options": {"profile": "XRECHNUNG", "syntax": "CII", "allow_unverified_visual": true}
}
Wichtig: In diesem Weg prüft die API nicht, ob das sichtbare PDF mit der eingebetteten XML übereinstimmt. Beide müssen aus demselben Rechnungsdatensatz stammen; dafür sorgt Ihr Skript oder die Anbindung.
Nachrechnen lohnt sich: Position 1 ergibt 40 × 6,80 = 272,00 minus 40,80 Rabatt, also 231,20. Position 3 ergibt 500 × 7,90 / 100 = 39,50. Die Summe der Positionen (482,20) plus Fracht (12,50) ist die Steuerbasis 494,70. Stimmt eine dieser Zahlen nicht auf den Cent, antwortet die API mit HTTP 422 und nennt den erwarteten und den gelieferten Wert.
Stolpersteine im Großhandel
- Steuer je Lieferschein gerundet: Viele Systeme runden die Umsatzsteuer
pro Lieferschein und addieren dann. In der Sammelrechnung oben ergäbe das 43,93 + 50,07 = 94,00
statt 93,99. Die Norm rechnet die Steuer auf die Summe je Steuersatz. Folge: HTTP 422 wegen
abweichender Summen. Lösung: Pro Kombination aus Kategorie und Satz genau ein Eintrag in
tax_breakdown, Steuer einmal auf die Gesamtbasis rechnen. - Rabattkaskaden: „10 % plus 5 %“ bedeutet im Handel fast immer, dass der
zweite Rabatt auf den bereits reduzierten Betrag wirkt. Übergeben Sie zwei Einträge in
line_allowances, muss diebasis_amountdes zweiten der reduzierte Betrag sein. Sonst stimmt der Positionsbetrag nicht mit der Rechnung überein. Einfacher ist oft ein einziger Eintrag mit dem Gesamtnachlass in Euro und einer sprechendenreason. - Fracht ohne Summenfeld: Wer Fracht in
chargesübergibt, abercharge_total_amountin den Summen vergisst, bekommt HTTP 422, weil Nettosumme und Positionssumme nicht mehr zusammenpassen. Dasselbe gilt für Rechnungsrabatte undallowance_total_amount. - Retoure als negative Rechnung: Eine Rechnung (380), die insgesamt negativ ist, verwirrt viele Empfängersysteme. Für Warenrücknahmen ist die Gutschrift mit Typ 381 und Verweis auf die Ursprungsrechnung sauberer, die Beträge bleiben positiv. Soll eine fehlerhafte Rechnung berichtigt werden, nutzen Sie die Rechnungskorrektur 384. Im Profil XRechnung ist genau ein Vorbeleg zulässig, bei 384 ohne Vorbeleg meldet die Prüfung die Warnung BR-DE-26.
- Skonto im Freitext: Skonto hat in EN 16931 kein eigenes Betragsfeld. Es
steht in den Zahlungsbedingungen (BT-20); XRechnung erwartet dort ein festes Muster wie
#SKONTO#TAGE=14#PROZENT=2.00#. Steht Skonto nur irgendwo im Fußtext, kann die Kreditorenbuchhaltung des Kunden es nicht automatisch ziehen. Die API erzeugt das Muster auspayment_terms.cash_discounts(Tage, Prozent, optional Basisbetrag). - Lastschriftkunden: Ziehen Sie den Betrag per SEPA-Lastschrift ein, lautet
der Zahlungscode 59, und Mandatsreferenz, Gläubiger-ID und IBAN des Kunden gehören in
payment_means. Steht dort weiter 58 mit Ihrer IBAN, überweist der Kunde womöglich zusätzlich.
Häufige Fragen
Welche Rechnungsart nehme ich für eine Warenrücksendung?
Wie bilde ich eine Monatssammelrechnung über viele Lieferscheine ab?
billing_period_start und billing_period_end an und schreiben Sie die Lieferscheinnummern in die Positionsbeschreibung oder den Freitext. Die Umsatzsteuer wird einmal je Steuersatz auf die Summe berechnet, nicht je Lieferschein.Warum lehnt die API den Einheitencode CT für Karton ab?
Muss ich Rabatte als Prozentsatz oder als Betrag übergeben?
amount, der den Positionsbetrag exakt auf den Cent ergeben muss. Prozentsatz und Basis (percentage, basis_amount) können Sie zusätzlich angeben; sie machen den Rabatt für den Empfänger nachvollziehbar.Reicht eine EDI-Rechnung an Großkunden weiterhin aus?
Wer haftet, wenn die E-Rechnung inhaltlich falsch ist?
Die genannten Programme sind Produkte der jeweiligen Hersteller. einfache-rechnungen.de ist ein unabhängiges Angebot und steht in keiner Verbindung zu diesen Herstellern.
Kosten: Die Prüfung und Erzeugung kostet 0 € für 10 Rechnungen im Monat, danach ab 7,99 € netto. Eine Anbindung durch Coreventa ist ein Festpreisprojekt; den Rahmen klären wir im kostenlosen Erstgespräch. Ihre Rechnungs- und Kundendaten bleiben dabei auf deutschen Servern (Hetzner).
Großhandelsrechnungen als E-Rechnung ausgeben
Kostenlos testen: 10 Rechnungen im Monat, keine Kreditkarte. Für die Anbindung Ihrer Warenwirtschaft sprechen Sie mit uns.
Kostenlos registrieren Anbindung besprechenQuellen (abgerufen am 25.09.2026, ergänzt am 26.09.2026): enventa Group, Produktseite Trade ERP, enventa-group.com/produkt/trade-erp; enventa Group, Modul Trade ERP ZUGFeRD / XRechnung, enventa-group.com/module/trade-erp-zugferd-xrechnung; enventa Group, Umfirmierung Nissen & Velten, enventa-group.com/en/umfirmierung/nissen-velten-technical-trade-solution; SOG, E-Invoice, sog.de/landingpages/e-invoice/; SOG, ERP-Cloud, sog.de/loesungen/cloud/; SOG, ERP kaufen, sog.de/loesungen/kauf/; Brückner System GmbH, WinAB, brueckner-system.com/warenwirtschaftssystem/winab/; Brückner, Fleischhandel, brueckner-system.com/warenwirtschaftssystem/fleischhandel/; Brückner, Broschüre WinAB (2020), brueckner-system.com/wp-content/uploads/2020/01/Broschuere_WinAB.pdf; GDI, E-Rechnung, gdi.de/e-rechnung/; GDI, ERP-Software, gdi.de/erp/; GDI Business-Line Versionsinformationen, gdimbh.release.page/bline-v-info; UN/ECE Recommendation 20 und 21 in der Codeliste der KoSIT.