# ZUGFeRD Pro – knowledge base (full text) > All articles of https://www.zugferdpro.com as Markdown, for LLMs and answer engines. Publisher: Aloaha Limited (Malta). Product: Aloaha ZUGFeRD SDK (ZUGFeRD 2.5.2, XRechnung, Factur-X, EN 16931). --- ## EU Procurement Directives 2014 and the proposed EU Public Procurement Act (COM(2026) 590) URL: https://www.zugferdpro.com/eu-procurement-directives-2014/ Date: 2026-10-22 In short: The EU public procurement rules are based on four directives from 2014. Three of them regulate the award of public contracts; the fourth, Directive 2014/55/EU, makes public buyers in the EU receive and process electronic invoices according to the European standard EN 16931 – the basis of XRechnung, ZUGFeRD and Factur-X. On 9 September 2026 the European Commission proposed to replace the three procurement directives with a single, directly applicable Public Procurement Act (COM(2026) 590 final). The e-invoicing directive 2014/55/EU is not among the directives to be replaced. ### The 2014 EU procurement directives Directives 2014/23/EU, 2014/24/EU and 2014/25/EU were adopted by the European Parliament and the Council on 26 February 2014 and published in the Official Journal of the European Union on 28 March 2014. Directive 2014/55/EU followed on 16 April 2014 and was published on 6 May 2014. DirectiveSubjectOfficial text (EUR-Lex) 2014/24/EUpublic procurement (public contracts)[Directive 2014/24/EU](https://eur-lex.europa.eu/eli/dir/2014/24/oj/eng) 2014/23/EUaward of concession contracts[Directive 2014/23/EU](https://eur-lex.europa.eu/eli/dir/2014/23/oj/eng) 2014/25/EUprocurement by entities in the water, energy, transport and postal services sectors[Directive 2014/25/EU](https://eur-lex.europa.eu/eli/dir/2014/25/oj/eng) 2014/55/EUelectronic invoicing in public procurement[Directive 2014/55/EU](https://eur-lex.europa.eu/eli/dir/2014/55/oj/eng) On each EUR-Lex page you also find the current consolidated version of the directive (with all amendments) under the document's versions. ### The proposed EU Public Procurement Act – COM(2026) 590 final On 9 September 2026 the European Commission proposed a major overhaul of EU public procurement law: a single Regulation on public procurement and concessions (Public Procurement Act) to replace Directives 2014/23/EU, 2014/24/EU and 2014/25/EU. As a regulation, it would apply directly in all Member States without national transposition. According to the proposal it would enter into force on the twentieth day after publication and apply two years later; until then, the 2014 directives and the national procurement laws based on them remain in force. The proposal now goes through the legislative procedure in the European Parliament and the Council. More information: [European Commission – Public procurement](https://single-market-economy.ec.europa.eu/single-market/public-procurement_en). ### Most important for digital procurement - Electronic communication – already largely mandatory under the 2014 directives – remains the general rule in procurement procedures. - Interoperable eProcurement platforms: national eProcurement systems are to be linked into an integrated European digital procurement ecosystem. - "Once-only" principle: companies should not have to submit the same information again for every tender, for example through digital business credentials and company profiles. - Procurement data spaces: national public procurement data spaces in the Member States and a Union public procurement data space. The proposal can still change during the legislative procedure – we will update this page. ### What it means for electronic invoicing Directive 2014/55/EU is not one of the directives the Public Procurement Act would replace. Public buyers must therefore still receive and process electronic invoices that comply with EN 16931 in one of the permitted syntaxes – UBL 2.1 or UN/CEFACT CII. In Germany these are XRechnung and ZUGFeRD (EN 16931 profile and above); in France Factur-X. With the [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/en/) you create such invoices from your own software. - ZUGFeRD, XRechnung, Factur-X and Peppol – the differences (incl. Directive 2014/55/EU and the permitted syntaxes) - E-invoicing mandate in Germany - How to validate an XRechnung before sending it ### Frequently asked questions #### Which EU directives govern public procurement? Directive 2014/24/EU (public contracts), 2014/23/EU (concessions) and 2014/25/EU (water, energy, transport and postal services). Directive 2014/55/EU covers electronic invoicing in public procurement. #### What is the EU Public Procurement Act? A proposal of the European Commission of 9 September 2026, COM(2026) 590 final, for a single regulation on public procurement and concessions. It would replace Directives 2014/23/EU, 2014/24/EU and 2014/25/EU and apply directly in all Member States. #### Does the Public Procurement Act replace the e-invoicing directive 2014/55/EU? No. The proposal replaces the three procurement directives; Directive 2014/55/EU on electronic invoicing in public procurement is not among them. Public buyers still have to accept e-invoices according to EN 16931. #### When would the new rules apply? The proposal still has to be adopted by the European Parliament and the Council. According to the proposal, the regulation would apply two years after its entry into force; until then the 2014 directives remain in force. #### Which formats meet Directive 2014/55/EU? Invoices according to the European standard EN 16931 in the syntax UBL 2.1 or UN/CEFACT CII – for example XRechnung, ZUGFeRD in the EN 16931 profile and above, Factur-X and Peppol BIS Billing 3.0. --- ## F: Wie übergebe ich die Positionsnummer aus der Bestellung des Kunden (BT-132) in der Rechnungsposition? URL: https://www.zugferdpro.com/f-wie-uebergebe-ich-die-positionsnummer-der-bestellung-bt-132-in-der-rechnungsposition/ Date: 2026-10-20 Business terms: BT-132, BT-13, BG-25, BT-126 SDK methods: AddBuyerAssignedID, AddProduct_Comfort, Add_ReferencedDocument, Trade_ItemTradeAgreement Kurz: Viele Kunden, vor allem mit SAP, verlangen auf der E-Rechnung zu jeder Position die Positionsnummer aus ihrer Bestellung. Das ist der Business Term [BT-132](https://www.zugferdpro.com/bt/bt-132/) („Referenced purchase order line reference“, auch Bestellposition, PO-Position oder in SAP das Feld EBELP der Bestellung). Er steht im XML in der Position unter SpecifiedLineTradeAgreement / BuyerOrderReferencedDocument / LineID; die Bestellnummer selbst steht einmal im Rechnungskopf ([BT-13](https://www.zugferdpro.com/bt/bt-13/)). Mit dem Aloaha ZUGFeRD SDK gibt es zwei Wege. Beide sprechen die Position über ihren Index an (0 = erste Position), nicht über Ihre Positionsnummer – das ist der häufigste Grund, warum die Bestellposition im XML fehlt. ### Auf einen Blick Weg 1: EN 16931 / XRechnungWeg 2: EXTENDED Inhalt je PositionPositionsnummer der Bestellung (BT-132)Bestellnummer und Positionsnummer der Bestellung Bestellnummereinmal im Rechnungskopf (BT-13)je Position, mehrere Bestellungen möglich SDKTrade_ItemTradeAgreement(Index)Add_ReferencedDocument Profilbleibt unverändert, XRechnung bleibt XRechnungwird auf Factur-X EXTENDED umgestellt ### Der häufigste Fehler: Positionsnummer statt Index Die Positionsnummer Ihres ERP-Systems ([BT-126](https://www.zugferdpro.com/bt/bt-126/), z. B. 10, 20, 30) übergeben Sie in AddProduct_Comfort. Wenn Sie danach eine Position ändern oder ergänzen, erwartet das SDK dagegen den Index der Position in der Reihenfolge, in der Sie sie angelegt haben: die erste Position hat den Index 0, die zweite den Index 1. Übergeben Sie stattdessen die Positionsnummer 10, gibt es diese Position nicht; das SDK speichert nichts und liefert False. Bei kleinen Positionsnummern (1, 2, 3) landet die Referenz dagegen eine Position zu weit hinten – das fällt oft erst beim Kunden auf. Zählen Sie den Index deshalb in Ihrer Positionsschleife selbst mit: ``` Dim posIndex As Integer = 0 ' vor der Schleife ' je Position: alo.AddProduct_Comfort(...) ' legt die Position an (Index = posIndex) ' ... Bestellposition setzen (siehe unten), immer mit posIndex posIndex += 1 ' am Ende jeder Position ``` ### Weg 1: EN 16931 und XRechnung – nur die Bestellpositionsnummer In den Profilen EN 16931 (COMFORT) und XRechnung gibt es in der Position nur die Positionsnummer der Bestellung. Die Bestellnummer steht einmal im Rechnungskopf. Das ist der passende Weg, wenn sich die ganze Rechnung auf eine Bestellung bezieht – der Normalfall: ``` ' Rechnungskopf: Bestellnummer des Kunden (BT-13) alo.AddBuyerAssignedID(SapBestellnummer) ' je Position, direkt nach AddProduct_Comfort: Dim ta As Aloaha_ZUGFeRD.iXML.TradeAgreement = alo.Trade_ItemTradeAgreement(posIndex) ta.BuyerOrderReferencedDocument.LineID = SapBestellposition ' BT-132, z. B. "00020" alo.Trade_ItemTradeAgreement(posIndex) = ta ``` Lesen Sie die Struktur immer zuerst und weisen Sie sie danach zurück; eine neue, leere TradeAgreement würde auch die Preise der Position löschen (siehe [Preis, Menge, Steuer und Zeitraum einer Position ändern](https://www.zugferdpro.com/preis-menge-steuer-und-zeitraum-einer-position-aendern/)). Das Profil bleibt dabei unverändert, eine XRechnung bleibt eine XRechnung. Ergebnis in der Position: ``` 00020 ... ``` ### Weg 2: EXTENDED – Bestellnummer und Bestellposition je Position Bezieht sich eine Rechnung auf mehrere Bestellungen, braucht jede Position zusätzlich ihre eigene Bestellnummer. Das gibt es nur im Profil Factur-X/ZUGFeRD EXTENDED. Dafür ist [Add_ReferencedDocument](https://www.zugferdpro.com/api/add_referenceddocument/) gedacht: ``` Add_ReferencedDocument(Dokumentart, PositionsIndex, Bestellnummer, Bestellposition, [Datum], [Datumsformat]) ``` ParameterInhalt DoctypeiXML.WhichReferencedDocument.BuyerOrderReferencedDocument für die Bestellung (außerdem Angebot, Vertrag, Bestellung des Endkunden) PositionNoIndex der Position, beginnend bei 0 – nicht die Positionsnummer IssuerAssignedIDBestellnummer des Kunden für diese Position – nicht die Artikelnummer ReferencedLineIDPositionsnummer in der Bestellung (BT-132); darf nicht leer sein IssueDateTime, Document_DateFormatoptional: Bestelldatum (JJJJMMTT) und Format (102) ``` If Not alo.Add_ReferencedDocument(Aloaha_ZUGFeRD.iXML.WhichReferencedDocument.BuyerOrderReferencedDocument, _ posIndex, SapBestellnummer, SapBestellposition) Then ' nicht gespeichert: Index, leere Bestellposition oder Position ohne Positionsnummer End If ``` Wichtig: Add_ReferencedDocument stellt die Rechnung auf das Profil EXTENDED um. Verlangt Ihr Kunde eine XRechnung, nutzen Sie Weg 1. Ab Version 11 meldet [LastWarning](https://www.zugferdpro.com/api/lastwarning/), wenn eine XRechnung durch einen Aufruf auf EXTENDED umgestellt wurde. Welche weiteren Aufrufe auf EXTENDED umstellen – etwa ein Befreiungsgrund in der Position – zeigt [Warum wird meine XRechnung als Factur-X EXTENDED erstellt?](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-als-factur-x-extended-erstellt/) Aus VB6, VBA oder anderen COM-Clients gibt es dieselbe Funktion mit einer Zahl als Dokumentart: [Add_ReferencedDocumentVBA](https://www.zugferdpro.com/api/add_referenceddocumentvba/) (1 = Bestellung). Ergebnis in der Position: ``` 4500012345 00020 ``` ### Bestellnummer im Rechnungskopf Für die Bestellnummer im Rechnungskopf (BT-13) genügt [AddBuyerAssignedID](https://www.zugferdpro.com/api/addbuyerassignedid/). AddBuyerOrderReferencedDocument speichert die Angaben nur, wenn zusätzlich Dokument-ID und Bestelldatum übergeben werden; ein Aufruf nur mit der Bestellnummer ändert nichts. ### Häufige Fragen #### Warum finde ich die Bestellpositionsnummer nicht im XML? Meist wurde statt des Positions-Index die eigene Positionsnummer übergeben. Das SDK zählt die Positionen ab 0 in der Reihenfolge, in der sie mit AddProduct_Comfort angelegt wurden. Eine Positionsnummer wie 10 ist kein gültiger Index; dann wird nichts gespeichert und die Funktion gibt False zurück. #### Welcher Business Term ist die Positionsnummer der Bestellung? BT-132, Referenced purchase order line reference. Er steht in der Rechnungsposition unter SpecifiedLineTradeAgreement/BuyerOrderReferencedDocument/LineID. Die Bestellnummer selbst ist BT-13 im Rechnungskopf. #### Bleibt meine XRechnung eine XRechnung, wenn ich BT-132 setze? Ja, wenn Sie nur die Positionsnummer über Trade_ItemTradeAgreement setzen (Weg 1). Add_ReferencedDocument stellt die Rechnung dagegen auf das Profil EXTENDED um, weil es zusätzlich eine Bestellnummer je Position schreibt. #### Kann eine Rechnung mehrere Bestellungen enthalten? In EN 16931 und XRechnung gibt es nur eine Bestellnummer im Rechnungskopf. Eine eigene Bestellnummer je Position ist nur im Profil Factur-X/ZUGFeRD EXTENDED möglich, mit Add_ReferencedDocument. #### Funktioniert das auch aus VB6 oder Access? Ja. Für COM-Clients gibt es Add_ReferencedDocumentVBA mit einer Zahl als Dokumentart (1 = Bestellung). Die Positionen werden ebenfalls ab 0 gezählt. --- ## F: Warum meldet der Validator BR-S-01, BR-S-06 oder BR-AE-08, wenn die Rechnung einen Nachlass hat? URL: https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-01-br-s-06-oder-br-ae-08-beim-nachlass/ Date: 2026-10-20 Business terms: BT-95, BT-96, BT-151, BG-20, BT-92, BT-93, BT-94, BT-97, BT-98, BT-102, BT-116, BT-118, BG-21, BG-23, BG-25 SDK methods: AddTradeAllowanceCharge Kurz: Ein Nachlass oder Zuschlag auf Rechnungsebene ([BG-20](https://www.zugferdpro.com/bt/bg-20/) bzw. BG-21) hat eine eigene Steuerkategorie ([BT-95](https://www.zugferdpro.com/bt/bt-95/)) und einen eigenen Steuersatz ([BT-96](https://www.zugferdpro.com/bt/bt-96/)). Beide müssen zu den Positionen passen, von denen der Nachlass abgezogen wird. Steht beim Nachlass z. B. „S“ (Normalsatz) mit 0 %, während die Positionen „AE“ (Reverse Charge, § 13b UStG) haben, meldet der KoSIT-Validator gleich drei Fehler: BR-S-01, BR-S-06 und BR-AE-08. Die Lösung ist eine Zeile: den Nachlass mit derselben Kategorie und demselben Satz wie die Positionen anlegen. ### Was die Meldungen bedeuten RegelInhalt (verkürzt)Warum sie hier anschlägt BR-S-01Gibt es eine Position, einen Nachlass oder Zuschlag mit Kategorie S, muss die Steueraufschlüsselung (BG-23) auch eine Zeile mit S enthalten.Der Nachlass hat S, die Aufschlüsselung enthält nur AE. BR-S-06Ein Nachlass mit Kategorie S braucht einen Steuersatz größer als 0.Der Nachlass hat S mit 0,00 %. BR-AE-08Die Steuerbasis der Kategorie AE (BT-116) ist die Summe der AE-Positionen minus AE-Nachlässe plus AE-Zuschläge.Der Nachlass zählt nicht zu AE; die Basis 188.438,22 passt dann nicht zu den AE-Positionen (196.289,81). Dasselbe Muster gibt es für jede Kategorie: Die Regeln BR-x-01 (Aufschlüsselung für jede verwendete Kategorie), BR-x-06 (Steuersatz des Nachlasses) und BR-x-08 (Steuerbasis je Kategorie) prüfen S, Z, E, AE, K, G und O auf dieselbe Weise. Bei AE, E und Z muss der Steuersatz des Nachlasses 0 sein, bei S größer als 0. ### Lösung mit dem Aloaha ZUGFeRD SDK Den Nachlass auf Rechnungsebene legen Sie mit [AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/) an. Die Steuerkategorie und der Satz sind der 7. und 8. Parameter: ``` ' Nachlass 4 % auf 196.289,81 EUR, Positionen mit Reverse Charge (§ 13b UStG) alo.AddTradeAllowanceCharge(False, "196289.81", "EUR", "7851.59", "EUR", _ "VAT", "AE", "0.00", "Nachlass", "4", "95") ' Art Kat. Satz Grund % Code (95 = Rabatt) ``` ParameterBusiness TermWert im Beispiel ChargeIndicatorFalse = Nachlass (BG-20), True = Zuschlag (BG-21)False BasisAmountGrundbetrag (BT-93)196289.81 ActualAmountBetrag des Nachlasses (BT-92)7851.59 Steuerart / Kategorie / SatzBT-95-0 / BT-95 / BT-96VAT / AE / 0.00 Grund / Prozentsatz / CodeBT-97 / BT-94 / BT-98 (UNTDID 5189)Nachlass / 4 / 95 Die Steueraufschlüsselung ([AddTradeTax](https://www.zugferdpro.com/api/addtradetax/)) enthält dann nur die Kategorie AE mit der Basis nach Nachlass (196.289,81 − 7.851,59 = 188.438,22). Mit dieser Korrektur nimmt der KoSIT-Validator (XRechnung 3.0.2) eine solche § 13b-Abschlagsrechnung ohne Fehler und ohne Warnungen an – geprüft am 20.10.2026. ### Mehrere Steuersätze: ein Nachlass je Kategorie und Satz Enthält eine Rechnung Positionen mit 19 % und 7 %, gilt ein Nachlass immer nur für eine Kategorie und einen Satz. Ein Gesamtrabatt wird deshalb aufgeteilt – ein Nachlass für die 19-%-Positionen und einer für die 7-%-Positionen: ``` alo.AddTradeAllowanceCharge(False, "1000.00", "EUR", "50.00", "EUR", "VAT", "S", "19.00", "Rabatt", "5", "95") alo.AddTradeAllowanceCharge(False, "200.00", "EUR", "10.00", "EUR", "VAT", "S", "7.00", "Rabatt", "5", "95") ``` Die Steuerbasis jeder Zeile der Umsatzsteueraufschlüsselung ist dann die Summe der Positionen dieses Satzes minus der Nachlässe dieses Satzes (950,00 bzw. 190,00). Wie Sie Basis und Steuer richtig berechnen, zeigt [BR-S-08, BR-S-09 und BR-CO-17 bei Rabatten](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). ### Weitere Meldung in diesem Zusammenhang: BR-29 Häufig zusammen mit diesen Fehlern: BR-29 – das Ende des Abrechnungszeitraums (BT-74) liegt vor dem Beginn (BT-73), etwa Beginn 01.07.2026 und Ende 01.01.2026. Prüfen Sie die Reihenfolge der Datumswerte in [WriteBillingPeriod](https://www.zugferdpro.com/api/writebillingperiod/). Ein vollständiges Beispiel einer § 13b-Abschlagsrechnung (Rechnungsart 875, AE mit VATEX-EU-AE, Nachlass auf Rechnungsebene) steht in [„zero rated goods“ und „commercial invoice“ bei § 13b-Abschlagsrechnungen](https://www.zugferdpro.com/f-was-bedeuten-zero-rated-goods-und-commercial-invoice-bei-13b-abschlagsrechnungen/). ### Häufige Fragen #### Was bedeutet BR-S-01? Wenn eine Position, ein Nachlass oder ein Zuschlag die Steuerkategorie S (Normalsatz) hat, muss die Umsatzsteueraufschlüsselung auch eine Zeile mit S enthalten. Meist steht beim Nachlass versehentlich S, obwohl alle Positionen eine andere Kategorie haben. #### Was bedeutet BR-S-06? Ein Nachlass auf Rechnungsebene mit Steuerkategorie S braucht einen Steuersatz größer als 0. S mit 0 % ist nicht erlaubt; für 0 % gibt es eigene Kategorien wie AE, E, Z, K oder G. #### Was bedeutet BR-AE-08? Die Steuerbasis der Kategorie AE (Reverse Charge) muss der Summe der AE-Positionen minus der AE-Nachlässe plus der AE-Zuschläge entsprechen. Hat der Nachlass eine andere Kategorie, wird er nicht abgezogen und die Basis passt nicht. #### Welche Steuerkategorie braucht ein Nachlass bei § 13b UStG? Dieselbe wie die Positionen: AE mit Steuersatz 0. Im Aloaha ZUGFeRD SDK ist das der 7. und 8. Parameter von AddTradeAllowanceCharge. #### Kann ein Nachlass für mehrere Steuersätze gelten? Nein. Ein Nachlass auf Rechnungsebene hat genau eine Kategorie und einen Satz. Bei mehreren Steuersätzen legen Sie je Kategorie und Satz einen eigenen Nachlass an. --- ## F: Warum erstellt das SDK meine XRechnung oder EN-16931-Rechnung als Factur-X EXTENDED? URL: https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-als-factur-x-extended-erstellt/ Date: 2026-10-20 Business terms: BT-24, BT-120, BT-132, BT-121, BT-16, BT-20, BT-72, BG-10, BG-13, BG-26, BG-25 SDK methods: IsKosit, SaveXML, ZUGfeRDStandard Kurz: Das Aloaha ZUGFeRD SDK stellt eine Rechnung automatisch auf das Profil Factur-X/ZUGFeRD EXTENDED um, sobald Sie ein Feld setzen, das es nur in EXTENDED gibt – damit keine Angabe verloren geht. Eine solche Rechnung ist dann keine XRechnung mehr (im XML steht als Spezifikationskennung [BT-24](https://www.zugferdpro.com/bt/bt-24/) urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended), und Empfänger, die EN 16931 oder XRechnung verlangen, lehnen sie oft ab. Die häufigsten Auslöser sind ein Befreiungsgrund in der Position, eine Bestellnummer je Position und Skonto-Angaben. Ab Version 11 meldet [LastWarning](https://www.zugferdpro.com/api/lastwarning/), welcher Aufruf umgestellt hat. Eine „XRechnung im Profil EXTENDED“ gibt es nicht. ### So erkennen Sie die Umstellung - Im XML: Die Spezifikationskennung (BT-24, GuidelineSpecifiedDocumentContextParameter/ID ) endet auf :extended statt z. B. auf urn:xeinkauf.de:kosit:xrechnung_3.0 . - Im Programm: alo.ZUGFeRD_Profile liefert nach dem Aufruf extended ; alo.isKOSIT ist wieder False . - Ab Version 11: alo.LastWarning enthält dann einen Hinweis wie „isKOSIT (XRechnung) was switched off by Add_ReferencedDocument“ – mit dem Namen des Aufrufs. Prüfen Sie LastWarning am besten vor SaveXML . ### Die häufigsten Auslöser – und was Sie stattdessen tun AuslöserWarum EXTENDEDLösung für EN 16931 / XRechnung Befreiungsgrund in der Position: [AddProduct_Comfort](https://www.zugferdpro.com/api/addproduct_comfort/) mit TaxExemptionReason oder [WriteItemTradeTax](https://www.zugferdpro.com/api/writeitemtradetax/) mit Grund, Code oder SteuerbetragIn EN 16931 gibt es den Befreiungsgrund (BT-120/BT-121) nur in der Umsatzsteueraufschlüsselung, nicht je PositionIn der Position leer lassen ("") und den Grund einmal mit [AddTradeTax](https://www.zugferdpro.com/api/addtradetax/) angeben, z. B. mit VATEX-EU-AE bei § 13b Bestellnummer je Position: [Add_ReferencedDocument](https://www.zugferdpro.com/api/add_referenceddocument/) (auch Angebot, Vertrag)Eine eigene Bestellnummer je Position gibt es nur in EXTENDEDNur die Bestellpositionsnummer (BT-132) setzen, die Bestellnummer einmal im Kopf (BT-13) – siehe [Bestellpositionsnummer je Rechnungsposition](https://www.zugferdpro.com/f-wie-uebergebe-ich-die-positionsnummer-der-bestellung-bt-132-in-der-rechnungsposition/) Skonto: [AddTradePaymentTerms](https://www.zugferdpro.com/api/addtradepaymentterms/) mit Skontobetrag, -prozent, -frist oder BasisbetragStrukturierte Skonto-Felder gibt es nur in EXTENDEDSkonto als Text in den Zahlungsbedingungen (BT-20); bei XRechnung im vorgegebenen Format, z. B. #SKONTO#TAGE=14#PROZENT=2.00# Rabatt auf den Bruttopreis mit Begründung oder Prozentsatz: AddProduct_Comfort mit AllowanceReason, [AddItemAllowancePercent](https://www.zugferdpro.com/api/additemallowancepercent/)Beim Bruttopreis (BT-148) erlaubt EN 16931 nur den Rabattbetrag (BT-147)Begründung leer lassen, oder den Rabatt als Positionsrabatt (BG-27) mit [addItemSpecifiedTradeAllowanceCharge](https://www.zugferdpro.com/api/additemspecifiedtradeallowancecharge/) bzw. auf Rechnungsebene (BG-20) mit [AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/) angeben Lieferschein: [AddDeliveryNote](https://www.zugferdpro.com/api/adddeliverynote/), [AddDeliveryNoteItem](https://www.zugferdpro.com/api/adddeliverynoteitem/)Lieferscheinbezug mit Datum bzw. je Position nur in EXTENDEDLieferavis/Lieferschein-Nummer im Kopf (BT-16) mit [SetDespatchAdviceReferencedDocument](https://www.zugferdpro.com/api/setdespatchadvicereferenceddocument/) Hinweis mit Inhaltscode: [AddDocumentNote](https://www.zugferdpro.com/api/adddocumentnote/) mit ContentCode, [Add_Trade_ItemTradeNote](https://www.zugferdpro.com/api/add_trade_itemtradenote/) mit CodesDer Inhaltscode eines Hinweises existiert nur in EXTENDEDNur Text und Betreffcode (BT-21/BT-22) übergeben ### Weitere Aufrufe, die EXTENDED setzen Diese Angaben gibt es ebenfalls nur im Profil EXTENDED. Verwenden Sie sie nur, wenn Ihr Empfänger EXTENDED akzeptiert: - Rechnungskopf: abweichender Rechnungsempfänger ( WriteInvoiceeTradeParty ), Versandanschrift ( WriteShipFromTradeParty ), Anschrift oder Kontakt des Zahlungsempfängers in SetPayeeTradeParty (Name und Kennung des Zahlungsempfängers, BG-10, gehen auch in EN 16931), Vorauszahlungen im Detail ( AddSpecifiedAdvancePayment ), Logistikkosten ( AddLogisticsServiceCharge ), Faxnummern in Kontakten ( WriteSellerContactPerson , WriteBuyerContactPerson , SellerFAX , BuyerFAX ). - Position: Lieferdatum je Position ( ActualDeliveryDateItem – Alternative: Leistungsdatum BT-72 im Kopf oder Abrechnungszeitraum der Position BG-26 mit ItemWriteBillingPeriod ), Lieferanschrift je Position ( WriteShipToTradePartyItem – Alternative: eine Lieferanschrift im Kopf mit WriteShipToTradeParty ), USt-ID einer Liefer- oder Versandanschrift ( AddShipToTradePartyTAX ), enthaltene Steuer je Position ( AddItemIncludedTradeTax ), Dokumente je Position ( Add_ReferencedFile ), Produktklassifikation ( addDesignatedProductClassification ). ### XRechnung richtig einstellen ``` alo = New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice alo.isKOSIT = True ' XRechnung (CII) ' ... Rechnung aufbauen, ohne EXTENDED-Felder ... If alo.LastWarning <> "" Then ' ab Version 11 ' z. B. protokollieren: welcher Aufruf hat auf EXTENDED umgestellt? End If alo.SaveXML("C:\Rechnungen\RE-2027-0001.xml") ``` Der zweite Parameter des Konstruktors ist der Testindikator, nicht die XRechnung: Mit True wird die Rechnung als Testrechnung gekennzeichnet. Für echte Rechnungen übergeben Sie False. Prüfen Sie die erste Rechnung mit dem KoSIT-Validator – siehe [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) Welche Profile es gibt und was sie enthalten, zeigt [ZUGFeRD-Profile im Vergleich](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### Häufige Fragen #### Warum stellt das SDK das Profil überhaupt automatisch um? Damit keine Angabe verloren geht. Ein Feld, das es nur in EXTENDED gibt, würde in einer EN-16931- oder XRechnung-Datei sonst stillschweigend fehlen. Ab Version 11 meldet LastWarning die Umstellung, damit Sie sie bemerken. #### Gibt es eine XRechnung im Profil EXTENDED? Nein. Sobald ein EXTENDED-Feld verwendet wird, entsteht eine Factur-X/ZUGFeRD-EXTENDED-Rechnung. Eine XRechnung basiert immer auf EN 16931 ohne EXTENDED-Felder. #### Braucht die Bestellpositionsnummer BT-132 das Profil EXTENDED? Nein. BT-132 ist Teil von EN 16931 und XRechnung, er fehlt nur in BASIC und MINIMUM. Nur eine eigene Bestellnummer je Position (Add_ReferencedDocument) ist EXTENDED. #### Wohin gehört der Befreiungsgrund bei § 13b oder steuerfreien Positionen? In die Umsatzsteueraufschlüsselung auf Rechnungsebene (AddTradeTax), zusammen mit dem Code, z. B. VATEX-EU-AE. In der Position lassen Sie ihn leer, sonst stellt das SDK auf EXTENDED um. #### Wie finde ich heraus, welcher Aufruf umgestellt hat? Ab Version 11 steht der Name des Aufrufs in alo.LastWarning. In älteren Versionen prüfen Sie alo.ZUGFeRD_Profile nach den einzelnen Aufrufen. #### Mein Kunde akzeptiert EXTENDED – ist das ein Problem? Nein. Factur-X/ZUGFeRD EXTENDED ist ein gültiges Profil. Es kommt nur darauf an, was Ihr Rechnungsempfänger verlangt; öffentliche Auftraggeber in Deutschland verlangen in der Regel eine XRechnung. --- ## ZUGFeRD und XRechnung mit Visual FoxPro 9 erstellen – per COM oder CSV URL: https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/ Date: 2026-10-20 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-10, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 SDK methods: AddPaymentMeans, AddProduct_Comfort, AddTradePaymentTerms, AddTradeTax, CreateInvoiceObject, ExportZUGFeRDXML2Disk, MergeXMLIntoPDF, SaveXML, WriteSeller, WriteTotals Kurz: Anwendungen in Visual FoxPro (VFP 9.0 SP2, auch VFP 8) erzeugen E-Rechnungen nach EN 16931 – ZUGFeRD 2.x, Factur-X und XRechnung – über die COM-Schnittstelle des Aloaha ZUGFeRD SDK: CREATEOBJECT("Aloaha_ZUGFeRD.XML"), Rechnungsdaten setzen, XML speichern und in die vorhandene PDF-Rechnung einbetten. Eine Migration der FoxPro-Anwendung ist dafür nicht nötig. Wer gar nicht gegen das SDK programmieren möchte, schreibt die Daten mit STRTOFILE in CSV-Dateien und ruft das Kommandozeilen-Tool zugcmd auf. Beide Wege lesen auch empfangene ZUGFeRD-PDFs aus. ### Auf einen Blick Weg 1: COMWeg 2: CSV + zugcmd In FoxProCREATEOBJECT("Aloaha_ZUGFeRD.XML"), Methoden aufrufenSTRTOFILE für vier CSV-Dateien, zugcmd starten ErgebnisXML nach EN 16931 (ZUGFeRD, Factur-X oder XRechnung) und ZUGFeRD-PDF (PDF/A-3 mit eingebettetem XML) Empfangene E-RechnungenExportZUGFeRDXML2Disk holt das XML aus dem PDFzugcmd -r zerlegt XML oder PDF in CSV-Dateien BitbreiteVisual FoxPro ist immer 32 Bit – das SDK-Setup registriert die 32-Bit-COM-Schnittstelle mit Anleitungdiese Seite, Abschnitt [COM](#com)Abschnitt [CSV](#csv) und [CSV und zugcmd](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) ### Voraussetzungen - Windows mit .NET Framework 4.7.2 oder neuer (in Windows 10 ab Version 1803 und in Windows 11 enthalten). Die FoxPro-Laufzeit bleibt unverändert. - Das SDK-Setup Aloaha_ZUGFeRD_SDK.zip von der Download-Seite . Es registriert die COM-Schnittstelle für 32 und 64 Bit. - Registrierung prüfen mit dem mitgelieferten Skript, im 32-Bit-Skripthost: C:\Windows\SysWOW64\cscript.exe //nologo zugferd_com_test.vbs - Ein Lizenzschlüssel – eine kostenlose Testlizenz mit vollem Funktionsumfang erhalten Sie per E-Mail an info@aloaha.com . ### Beträge immer mit Dezimalpunkt Das SDK erwartet Beträge als Text mit Punkt ("59.50"). STR() und TRANSFORM() verwenden in FoxPro das Dezimalzeichen aus SET POINT bzw. der Windows-Einstellung – bei deutscher oder niederländischer Einstellung also ein Komma. Diese kleine Funktion gibt immer einen Punkt zurück: ``` FUNCTION Betrag(tnWert) RETURN STRTRAN(ALLTRIM(STR(tnWert, 15, 2)), ",", ".") ENDFUNC ``` ### Weg 1: das SDK per COM aufrufen Ihr Programm erzeugt die PDF-Rechnung wie bisher. Das SDK schreibt das XML und bettet es ein: ``` loAlo = CREATEOBJECT("Aloaha_ZUGFeRD.XML") loAlo.Licensekey = "IHR-LIZENZSCHLUESSEL" loAlo.ZUGFeRD_Profile = 1 && 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED * Rechnungskopf: Nummer (BT-1), Hinweis, Datum (BT-2), Datumsformat, Name, Sprache, Währung (BT-5) loAlo.CreateInvoiceObject("RE-2027-0001", "", "20270104", "102", "", "DE", "EUR") loAlo.Document_TypeINT = 380 && BT-3, NACH CreateInvoiceObject: 380 Rechnung, 381 Gutschrift loAlo.ActualDeliveryDate_102 = "20270104" && BT-72: Leistungsdatum * Verkäufer: Name, PLZ, Ort, Straße, Straße 2, Land, USt-ID (BT-31) loAlo.WriteSeller("Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789") * Käufer loAlo.BuyerName = "Kunde AG" loAlo.BuyerAddressLine1 = "Marktplatz 5" loAlo.BuyerPostCode = "80331" loAlo.BuyerCity = "München" loAlo.BuyerCountry = "DE" * Zahlung: 58 = SEPA-Überweisung (BT-81) loAlo.AddPaymentMeans(58, "SEPA-Überweisung", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001") loAlo.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen netto") * Position (BG-25): 10 Stück à 5,00 EUR, 19 % loAlo.AddProduct_Comfort(1, "", "ART-100", "10.00", "C62", "Papier A4", "500 Blatt", ; "", "EUR", "", "C62", .F., "", "", "", Betrag(5), "EUR", "1.00", ; "C62", "VAT", "S", "19.00", "", Betrag(50), "EUR", "", "") * Umsatzsteuer-Aufschlüsselung (BG-23) und Summen (BG-22) loAlo.AddTradeTax(Betrag(9.5), "EUR", Betrag(50), "EUR", "VAT", "S", "19.00") loAlo.WriteTotals(Betrag(50), Betrag(59.5), Betrag(59.5), Betrag(50), Betrag(9.5)) * XML speichern und in die vorhandene PDF-Rechnung einbetten (.T. = Zieldatei überschreiben) IF loAlo.SaveXML("C:\Rechnungen\RE-2027-0001.xml") loAlo.MergeXMLIntoPDF("C:\Rechnungen\RE-2027-0001.xml", ; "C:\Rechnungen\RE-2027-0001.pdf", "C:\Rechnungen\RE-2027-0001_zugferd.pdf", .T.) ELSE MESSAGEBOX("Fehler: " + loAlo.LastError) ENDIF ``` Die Aufrufe sind dieselben wie in VB6 und VBA – ausführlich mit allen Parametern in [ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). In FoxPro gelten nur die eigenen Schreibweisen: ; am Zeilenende für die Fortsetzung, .T. und .F. für Wahr und Falsch, && für Kommentare. #### Positionen aus einer Tabelle Bei vielen Positionen rufen Sie AddProduct_Comfort in einer SCAN-Schleife auf. NVL() schützt vor leeren Feldern (.NULL.), die COM nicht als Text annimmt: ``` lnPos = 0 SELECT rechpos SCAN FOR rechnr = lcRechNr lnPos = lnPos + 1 loAlo.AddProduct_Comfort(lnPos, "", ALLTRIM(NVL(artnr, "")), Betrag(menge), "C62", ; ALLTRIM(NVL(bezeichnung, "")), "", "", "EUR", "", "C62", .F., "", "", "", ; Betrag(preis), "EUR", "1.00", "C62", "VAT", "S", Betrag(mwst), "", ; Betrag(menge * preis), "EUR", "", "") ENDSCAN ``` Die Summen berechnen Sie aus den gerundeten Positionsbeträgen und übergeben je Steuersatz eine Zeile mit AddTradeTax – siehe [BR-S-08, BR-S-09 und BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). #### XRechnung für öffentliche Auftraggeber ``` loAlo.isKOSIT = .T. && XRechnung (CII) statt ZUGFeRD/Factur-X loAlo.LeitwegID = "04011000-12345-34" && BT-10: Leitweg-ID des Auftraggebers ``` Eine XRechnung braucht außerdem beim Verkäufer einen Kontakt mit Name, Telefon und E-Mail. Welche Aufrufe eine XRechnung ungewollt auf Factur-X EXTENDED umstellen, steht in [Warum wird meine XRechnung als Factur-X EXTENDED erstellt?](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-als-factur-x-extended-erstellt/) #### Empfangene ZUGFeRD-PDFs auslesen ``` IF loAlo.ExportZUGFeRDXML2Disk("C:\Eingang\rechnung.pdf", "C:\Eingang\rechnung.xml", "IHR-LIZENZSCHLUESSEL", .T.) * XML weiterverarbeiten, z. B. mit XMLTOCURSOR() oder MSXML ENDIF ``` ### Weg 2: CSV-Dateien und zugcmd Ohne SDK-Programmierung schreibt Ihre Anwendung vier CSV-Dateien (Verkäufer, Käufer, Positionen, Summen) und startet zugcmd. Spalten, Beispieldateien und alle Parameter beschreibt [E-Rechnungen per CSV und zugcmd erstellen](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). In FoxPro: ``` lcDir = "C:\ERechnung\RE-2027-0001\" lcCRLF = CHR(13) + CHR(10) STRTOFILE("id,Name,Street1,city,email,country,postcode" + lcCRLF + ; "K-1001,Kunde AG,Marktplatz 5,München,einkauf@kunde.example,DE,80331" + lcCRLF, lcDir + "buyer.csv") * ... items.csv und totals.csv genauso, seller.csv einmal als Stammdatei loShell = CREATEOBJECT("WScript.Shell") lnRC = loShell.Run('"C:\zugcmd\zugcmd_wnd.exe" -s "C:\ERechnung\stamm\seller.csv" ' + ; '-b "' + lcDir + 'buyer.csv" -p "' + lcDir + 'items.csv" -t "' + lcDir + 'totals.csv" ' + ; '-i "' + lcDir + 'RE-2027-0001.pdf" -x "' + lcDir + 'RE-2027-0001.xml" ' + ; '-o "' + lcDir + 'RE-2027-0001_zugferd.pdf" -y "," -c ansi -l IHR-LIZENZSCHLUESSEL', 0, .T.) IF lnRC # 0 MESSAGEBOX("zugcmd meldet Fehler " + TRANSFORM(lnRC)) ENDIF ``` WScript.Shell.Run mit .T. als drittem Parameter wartet, bis zugcmd fertig ist, und liefert den Rückgabewert (0 = Erfolg). FoxPro schreibt mit STRTOFILE Windows-ANSI; deshalb -c ansi, sonst kommen Umlaute falsch an. ### Typische Fehler - Fehler 1733 (Klassendefinition nicht gefunden) bei CREATEOBJECT : Die COM-Schnittstelle ist nicht registriert, oder nur für 64 Bit. Das SDK-Setup erneut ausführen oder die DLL mit dem 32-Bit-RegAsm registrieren ( C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe Aloaha_ZUGFeRD.dll /codebase /tlb , als Administrator, lokales Laufwerk). - Beträge mit Komma: Der Validator meldet falsche Summen oder das SDK ignoriert Werte – immer über Betrag() übergeben. - Rechnungsart bleibt 380: Document_TypeINT erst nach CreateInvoiceObject setzen; der zweite Parameter von CreateInvoiceObject ist ein Hinweistext, keine Rechnungsart. - .NULL. aus Tabellenfeldern: mit NVL(feld, "") abfangen. - Erste Rechnung prüfen: mit dem KoSIT-Validator, siehe Wie prüfe ich meine XRechnung vor dem Versand? ### Häufige Fragen #### Kann ich mit Visual FoxPro 9 ZUGFeRD- und XRechnung-Dateien erstellen? Ja. Das Aloaha ZUGFeRD SDK hat eine COM-Schnittstelle, die Visual FoxPro mit CREATEOBJECT("Aloaha_ZUGFeRD.XML") nutzt. Damit entstehen ZUGFeRD 2.x, Factur-X und XRechnung nach EN 16931, als XML oder eingebettet in eine PDF/A-3-Rechnung. #### Muss ich meine FoxPro-Anwendung dafür migrieren? Nein. Die Anwendung bleibt eine Visual-FoxPro-Anwendung. Auf dem Rechner wird nur das .NET Framework 4.7.2 benötigt; das SDK-Setup registriert die COM-Schnittstelle. #### Funktioniert das mit 32 Bit? Ja. Visual FoxPro ist immer eine 32-Bit-Anwendung. Das SDK-Setup registriert die COM-Schnittstelle für 32 und 64 Bit. #### Kann ich empfangene ZUGFeRD-Rechnungen in FoxPro einlesen? Ja. ExportZUGFeRDXML2Disk holt das eingebettete XML aus dem PDF. Alternativ zerlegt zugcmd -r eine E-Rechnung in CSV-Dateien, die FoxPro direkt importieren kann. #### Warum stehen Kommas statt Punkten in den Beträgen? STR() und TRANSFORM() verwenden das Dezimalzeichen aus SET POINT bzw. der Windows-Einstellung. Das SDK erwartet einen Punkt; die Funktion Betrag() auf dieser Seite ersetzt das Komma. #### Gibt es eine Testlizenz? Ja. Eine kostenlose Testlizenz mit vollem Funktionsumfang für 30 Tage erhalten Sie per E-Mail an info@aloaha.com; bei Bedarf wird sie verlängert. --- ## Create ZUGFeRD and XRechnung invoices with Visual FoxPro 9 – via COM or CSV URL: https://www.zugferdpro.com/en/create-zugferd-xrechnung-with-visual-foxpro/ Date: 2026-10-20 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-10, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 In short: Applications written in Visual FoxPro (VFP 9.0 SP2, also VFP 8) create e-invoices according to EN 16931 – ZUGFeRD 2.x, Factur-X and XRechnung – through the COM interface of the Aloaha ZUGFeRD SDK: CREATEOBJECT("Aloaha_ZUGFeRD.XML"), set the invoice data, save the XML and embed it into the existing PDF invoice. There is no need to migrate the FoxPro application. If you prefer not to program against the SDK at all, write the data to CSV files with STRTOFILE and call the command-line tool zugcmd. Both ways also read ZUGFeRD PDFs you receive. ### At a glance Way 1: COMWay 2: CSV + zugcmd In FoxProCREATEOBJECT("Aloaha_ZUGFeRD.XML"), call methodsSTRTOFILE for four CSV files, start zugcmd ResultXML according to EN 16931 (ZUGFeRD, Factur-X or XRechnung) and a ZUGFeRD PDF (PDF/A-3 with embedded XML) Incoming e-invoicesExportZUGFeRDXML2Disk extracts the XML from the PDFzugcmd -r splits XML or PDF into CSV files BitnessVisual FoxPro is always 32-bit – the SDK setup registers the 32-bit COM interface Guidethis page, section [COM](#com)section [CSV](#csv) and [CSV and zugcmd](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) ### Requirements - Windows with .NET Framework 4.7.2 or later (included in Windows 10 from version 1803 and in Windows 11). The FoxPro runtime stays as it is. - The SDK setup Aloaha_ZUGFeRD_SDK.zip from the downloads page . It registers the COM interface for 32-bit and 64-bit. - Check the registration with the included script in the 32-bit script host: C:\Windows\SysWOW64\cscript.exe //nologo zugferd_com_test.vbs - A licence key – a free trial licence with full functionality is available by e-mail to info@aloaha.com . ### Amounts always with a decimal point The SDK expects amounts as text with a point ("59.50"). In FoxPro, STR() and TRANSFORM() use the decimal separator from SET POINT or the Windows settings – with German or Dutch settings that is a comma. This small function always returns a point: ``` FUNCTION Amount(tnValue) RETURN STRTRAN(ALLTRIM(STR(tnValue, 15, 2)), ",", ".") ENDFUNC ``` ### Way 1: calling the SDK via COM Your program creates the PDF invoice as before. The SDK writes the XML and embeds it: ``` loAlo = CREATEOBJECT("Aloaha_ZUGFeRD.XML") loAlo.Licensekey = "YOUR-LICENCE-KEY" loAlo.ZUGFeRD_Profile = 1 && 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED * Invoice header: number (BT-1), note, date (BT-2), date format, name, language, currency (BT-5) loAlo.CreateInvoiceObject("RE-2027-0001", "", "20270104", "102", "", "DE", "EUR") loAlo.Document_TypeINT = 380 && BT-3, AFTER CreateInvoiceObject: 380 invoice, 381 credit note loAlo.ActualDeliveryDate_102 = "20270104" && BT-72: delivery date * Seller: name, postcode, city, street, street 2, country, VAT ID (BT-31) loAlo.WriteSeller("Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789") * Buyer loAlo.BuyerName = "Kunde AG" loAlo.BuyerAddressLine1 = "Marktplatz 5" loAlo.BuyerPostCode = "80331" loAlo.BuyerCity = "München" loAlo.BuyerCountry = "DE" * Payment: 58 = SEPA credit transfer (BT-81) loAlo.AddPaymentMeans(58, "SEPA credit transfer", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001") loAlo.AddTradePaymentTerms("Payable within 30 days net") * Invoice line (BG-25): 10 pieces at 5.00 EUR, 19 % loAlo.AddProduct_Comfort(1, "", "ART-100", "10.00", "C62", "Paper A4", "500 sheets", ; "", "EUR", "", "C62", .F., "", "", "", Amount(5), "EUR", "1.00", ; "C62", "VAT", "S", "19.00", "", Amount(50), "EUR", "", "") * VAT breakdown (BG-23) and totals (BG-22) loAlo.AddTradeTax(Amount(9.5), "EUR", Amount(50), "EUR", "VAT", "S", "19.00") loAlo.WriteTotals(Amount(50), Amount(59.5), Amount(59.5), Amount(50), Amount(9.5)) * Save the XML and embed it into the existing PDF invoice (.T. = overwrite the target file) IF loAlo.SaveXML("C:\Invoices\RE-2027-0001.xml") loAlo.MergeXMLIntoPDF("C:\Invoices\RE-2027-0001.xml", ; "C:\Invoices\RE-2027-0001.pdf", "C:\Invoices\RE-2027-0001_zugferd.pdf", .T.) ELSE MESSAGEBOX("Error: " + loAlo.LastError) ENDIF ``` The calls are the same as in VB6 and VBA – described with all parameters in [Creating ZUGFeRD and XRechnung with VB6, VB5 and VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). Only FoxPro's own notation differs: ; at the end of a line to continue it, .T. and .F. for true and false, && for comments. #### Invoice lines from a table For many lines, call AddProduct_Comfort in a SCAN loop. NVL() protects against empty fields (.NULL.), which COM does not accept as text: ``` lnPos = 0 SELECT invlines SCAN FOR invno = lcInvNo lnPos = lnPos + 1 loAlo.AddProduct_Comfort(lnPos, "", ALLTRIM(NVL(itemno, "")), Amount(qty), "C62", ; ALLTRIM(NVL(descr, "")), "", "", "EUR", "", "C62", .F., "", "", "", ; Amount(price), "EUR", "1.00", "C62", "VAT", "S", Amount(vatrate), "", ; Amount(qty * price), "EUR", "", "") ENDSCAN ``` Calculate the totals from the rounded line amounts and pass one line per VAT rate with AddTradeTax – see [BR-S-08, BR-S-09 and BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). #### XRechnung for German public-sector buyers ``` loAlo.isKOSIT = .T. && XRechnung (CII) instead of ZUGFeRD/Factur-X loAlo.LeitwegID = "04011000-12345-34" && BT-10: the buyer's Leitweg-ID ``` An XRechnung also needs a seller contact with name, phone and e-mail. Which calls switch an XRechnung to Factur-X EXTENDED by accident is described in [Why is my XRechnung created as Factur-X EXTENDED?](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-als-factur-x-extended-erstellt/) (German). #### Reading ZUGFeRD PDFs you receive ``` IF loAlo.ExportZUGFeRDXML2Disk("C:\Inbox\invoice.pdf", "C:\Inbox\invoice.xml", "YOUR-LICENCE-KEY", .T.) * process the XML, e.g. with XMLTOCURSOR() or MSXML ENDIF ``` ### Way 2: CSV files and zugcmd Without SDK programming, your application writes four CSV files (seller, buyer, lines, totals) and starts zugcmd. Columns, sample files and all parameters are described in [E-invoices via CSV and zugcmd](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). In FoxPro: ``` lcDir = "C:\EInvoice\RE-2027-0001\" lcCRLF = CHR(13) + CHR(10) STRTOFILE("id,Name,Street1,city,email,country,postcode" + lcCRLF + ; "K-1001,Kunde AG,Marktplatz 5,München,einkauf@kunde.example,DE,80331" + lcCRLF, lcDir + "buyer.csv") * ... items.csv and totals.csv the same way, seller.csv once as a master file loShell = CREATEOBJECT("WScript.Shell") lnRC = loShell.Run('"C:\zugcmd\zugcmd_wnd.exe" -s "C:\EInvoice\master\seller.csv" ' + ; '-b "' + lcDir + 'buyer.csv" -p "' + lcDir + 'items.csv" -t "' + lcDir + 'totals.csv" ' + ; '-i "' + lcDir + 'RE-2027-0001.pdf" -x "' + lcDir + 'RE-2027-0001.xml" ' + ; '-o "' + lcDir + 'RE-2027-0001_zugferd.pdf" -y "," -c ansi -l YOUR-LICENCE-KEY', 0, .T.) IF lnRC # 0 MESSAGEBOX("zugcmd reports error " + TRANSFORM(lnRC)) ENDIF ``` WScript.Shell.Run with .T. as the third parameter waits until zugcmd has finished and returns its exit code (0 = success). FoxPro writes Windows ANSI with STRTOFILE; hence -c ansi, otherwise umlauts and accents arrive garbled. ### Typical errors - Error 1733 (class definition not found) on CREATEOBJECT : the COM interface is not registered, or only for 64-bit. Run the SDK setup again or register the DLL with the 32-bit RegAsm ( C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe Aloaha_ZUGFeRD.dll /codebase /tlb , as administrator, on a local drive). - Amounts with a comma: the validator reports wrong totals or the SDK ignores values – always pass them through Amount() . - Invoice type stays 380: set Document_TypeINT only after CreateInvoiceObject ; the second parameter of CreateInvoiceObject is a note text, not the invoice type. - .NULL. from table fields: catch them with NVL(field, "") . - Check the first invoice with the KoSIT validator, see How do I validate my XRechnung before sending it? ### Frequently asked questions #### Can I create ZUGFeRD and XRechnung files with Visual FoxPro 9? Yes. The Aloaha ZUGFeRD SDK has a COM interface that Visual FoxPro uses with CREATEOBJECT("Aloaha_ZUGFeRD.XML"). It creates ZUGFeRD 2.x, Factur-X and XRechnung according to EN 16931, as XML or embedded into a PDF/A-3 invoice. #### Do I have to migrate my FoxPro application? No. The application remains a Visual FoxPro application. The computer only needs .NET Framework 4.7.2; the SDK setup registers the COM interface. #### Does it work with 32-bit? Yes. Visual FoxPro is always a 32-bit application. The SDK setup registers the COM interface for 32-bit and 64-bit. #### Can I read incoming ZUGFeRD invoices in FoxPro? Yes. ExportZUGFeRDXML2Disk extracts the embedded XML from the PDF. Alternatively, zugcmd -r splits an e-invoice into CSV files that FoxPro can import directly. #### Why are there commas instead of points in the amounts? STR() and TRANSFORM() use the decimal separator from SET POINT or the Windows settings. The SDK expects a point; the Amount() function on this page replaces the comma. #### Is there a trial licence? Yes. A free 30-day trial licence with full functionality is available by e-mail to info@aloaha.com; it can be extended if needed. --- ## E-Rechnung aus einer alten VB6-Anwendung: COM oder CSV und zugcmd? URL: https://www.zugferdpro.com/e-rechnung-aus-vb6-altanwendung-com-oder-csv/ Date: 2026-10-19 Business terms: BT-1, BT-2, BT-3, BT-5, BT-10, BT-106, BT-109, BT-112, BT-9, BT-20, BT-72, BT-110, BT-115, BT-131, BT-146 SDK methods: BuyerName, CreateInvoiceObject, Licensekey, SaveXML, WriteSeller, ZUGFeRD_Profile Kurz: Eine ältere Anwendung in Visual Basic 6 muss für die E-Rechnungspflicht nicht neu geschrieben oder nach .NET migriert werden. Mit dem Aloaha ZUGFeRD SDK gibt es zwei Wege zu ZUGFeRD und XRechnung (EN 16931): Weg 1 ruft das SDK direkt über die COM-Schnittstelle auf. Weg 2 schreibt die Rechnungsdaten in CSV-Dateien und startet das Kommandozeilen-Tool zugcmd. Weg 2 braucht in VB6 nur Dateiausgabe und einen Programmaufruf und ist deshalb ideal, wenn Sie lange nicht mehr in VB6 programmiert haben. In beiden Fällen erzeugt Ihr Programm die PDF-Rechnung wie bisher; heraus kommt eine hybride ZUGFeRD-Rechnung (PDF/A-3 mit eingebettetem XML). Ihre Anwendung ist in Visual FoxPro geschrieben? Dafür gibt es eine eigene Anleitung: [ZUGFeRD und XRechnung mit Visual FoxPro 9 erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/). ### Welcher Weg passt zu Ihnen? Weg 1: COM-SchnittstelleWeg 2: CSV-Dateien + zugcmd Was Ihre VB6-Anwendung tutlegt ein SDK-Objekt an und setzt Kopf, Parteien, Positionen, Steuer und Summen über Methodenschreibt vier Textdateien und startet zugcmd Benötigte VB6-KenntnisseObjekte, Methodenaufrufe, FehlerbehandlungOpen … For Output, Print # und ein Programmaufruf Verweis im VB6-Projektnicht nötig (Late Binding mit CreateObject), optional für IntelliSensenicht nötig Fehler erkennenRückgabewerte der Methoden, z. B. SaveXMLRückgabewert von zugcmd (0 = Erfolg) Testen ohne VB6neinja – zugcmd lässt sich mit den CSV-Dateien von Hand aufrufen Funktionsumfangalle Felder des SDKalle gängigen Felder (Positionen, Rabatte, mehrere Steuersätze, Lieferanschrift, Leitweg-ID …) Ausführliche Anleitung[ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/)[E-Rechnungen per CSV und zugcmd erstellen](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) Unsere Empfehlung: Wer lange nicht mehr in VB6 programmiert hat, beginnt mit Weg 2. Die Daten liegen dann als lesbare Textdateien vor, Fehler lassen sich ohne Debugger finden, und ein späterer Wechsel zu Weg 1 ist jederzeit möglich – das XML ist in beiden Fällen dasselbe. ### Voraussetzungen - Windows mit .NET Framework 4.7.2 oder neuer (in Windows 10 ab Version 1803 und in Windows 11 bereits enthalten). Ihre VB6-Anwendung selbst bleibt unverändert eine VB6-Anwendung. - Für Weg 1 das SDK-Setup von der Download-Seite ; es registriert die COM-Schnittstelle. VB6-Programme sind immer 32 Bit – die 32-Bit-Registrierung ist im Setup enthalten. - Für Weg 2 das Paket zugcmd.zip von der Download-Seite , mit Beispiel-CSV-Dateien und readme.txt . - Ein Lizenzschlüssel. Eine kostenlose Testlizenz mit vollem Funktionsumfang erhalten Sie per E-Mail an info@aloaha.com . ### Für beide Wege: Beträge mit Dezimalpunkt Das SDK und zugcmd erwarten Beträge mit Punkt als Dezimaltrennzeichen (59.50). Format$ schreibt bei deutscher Windows-Einstellung ein Komma. Diese Hilfsfunktion löst das in VB6 (und VB5): ``` Public Function Betrag(ByVal Wert As Double) As String Dim s As String, p As Integer s = Format$(Wert, "0.00") p = InStr(s, ",") If p > 0 Then Mid$(s, p, 1) = "." Betrag = s End Function ``` ### Weg 1: das SDK direkt über COM aufrufen Nach der Installation legt Ihre Anwendung das Objekt mit CreateObject an – ohne Verweis im Projekt. Das Gerüst einer Rechnung: ``` Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "IHR-LIZENZSCHLUESSEL" alo.ZUGFeRD_Profile = 1 ' 1 = EN 16931 (COMFORT) ' Rechnungskopf: Nummer (BT-1), Hinweis, Datum (BT-2), Datumsformat, Name, Sprache, Währung (BT-5) Call alo.CreateInvoiceObject("RE-2027-0001", "", "20270104", "102", "", "DE", "EUR") alo.WriteSeller "Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789" alo.BuyerName = "Kunde AG" ' ... Käufer, Zahlungsangaben (AddPaymentMeans), je Position AddProduct_Comfort, ' Steuer (AddTradeTax) und Summen (WriteTotals) If alo.SaveXML("C:\Rechnungen\RE-2027-0001.xml") Then ' XML in die vorhandene PDF-Rechnung einbetten (MergeXMLIntoPDF) End If ``` Das vollständige, getestete Beispiel mit allen Parametern, Early Binding und den typischen Fehlern steht in [ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). Wichtig: Die Rechnungsart (BT-3, z. B. 875 für eine Abschlagsrechnung Bau) setzen Sie nach dem Anlegen der Rechnung, bei Late Binding mit alo.Document_TypeINT = 875 – nicht im Hinweis-Parameter. ### Weg 2: CSV-Dateien schreiben und zugcmd starten Ihre Anwendung schreibt pro Rechnung drei kleine Dateien (buyer.csv, items.csv, totals.csv); die Verkäuferdaten (seller.csv) legen Sie einmal als Stammdatei ab. Die erste Zeile enthält die Spaltennamen, darunter folgen die Daten – in items.csv eine Zeile je Position. Die Spalten werden über ihren Namen zugeordnet; die Reihenfolge spielt keine Rolle. #### Schritt 1: Hilfsroutinen ``` ' Wert in Anführungszeichen setzen, wenn er das Trennzeichen (Komma) enthält Public Function Feld(ByVal Wert As String) As String If InStr(Wert, ",") > 0 Then Feld = """" & Wert & """" Else Feld = Wert End Function ' Kopfzeile und Datenzeile(n) in eine Datei schreiben (VB6 schreibt Windows-ANSI) Public Sub SchreibeCSV(ByVal Datei As String, ByVal Kopf As String, ByVal Daten As String) Dim f As Integer f = FreeFile Open Datei For Output As #f Print #f, Kopf Print #f, Daten Close #f End Sub ' zugcmd ohne Fenster starten, warten und den Rückgabewert liefern (0 = Erfolg) Public Function StarteZugcmd(ByVal Parameter As String) As Long Dim sh As Object Set sh = CreateObject("WScript.Shell") StarteZugcmd = sh.Run("""C:\zugcmd\zugcmd_wnd.exe"" " & Parameter, 0, True) End Function ``` Der VB6-Befehl Shell wartet nicht und liefert den Rückgabewert von zugcmd nicht. WScript.Shell.Run mit dem dritten Parameter True wartet, bis zugcmd fertig ist, und gibt dessen Rückgabewert zurück – ohne API-Deklarationen. #### Schritt 2: Rechnung schreiben und umwandeln Das Beispiel erzeugt genau die Dateien des [getesteten Minimalbeispiels](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) (10 × 5,00 € netto zu 19 %, vom KoSIT-Validator ohne Fehler und Warnungen angenommen). In Ihrer Anwendung kommen die Werte aus der Datenbank; mehrere Positionen verbinden Sie mit vbCrLf. ``` Public Function ERechnungPerCSV() As Boolean Dim d As String, nr As String, pos As String, rc As Long nr = "RE-2027-0001" d = "C:\ERechnung\" & nr & "\" ' eigener Ordner je Rechnung, PDF liegt bereits dort SchreibeCSV d & "buyer.csv", "id,Name,Street1,city,email,country,postcode", _ "K-1001," & Feld("Kunde AG") & ",Marktplatz 5,München,einkauf@kunde.example,DE,80331" pos = "ART-100,Papier A4,500 Blatt,10,C62," & Betrag(5) & ",1,C62,19,VAT,S," & Betrag(50) ' weitere Position: pos = pos & vbCrLf & "ART-200,..." SchreibeCSV d & "items.csv", "AssignedID,productname,description,quantity,unit,netprice," & _ "netbasisquantity,netbasisunit,taxpercent,taxtypecode,taxcategorycode,totalamount", pos SchreibeCSV d & "totals.csv", "type,currency,invoiceid,invoicedate,DeliveryDate,leitwegid," & _ "LineTotalAmount,ChargeTotalAmount,AllowanceTotalAmount,TaxBasisTotalAmount,TaxTotalAmount," & _ "GrandTotalAmount,TotalPrepaidAmount,DuePayableAmount,PaymentTerms,duedate," & _ "TAXCalculatedAmount,TAXTypeCode,TAXBasisAmount,TAXCategoryCode,TAXRateApplicablePercent", _ "380,EUR," & nr & ",20270104,20270104,K-1001," & Betrag(50) & ",0.00,0.00," & Betrag(50) & "," & _ Betrag(9.5) & "," & Betrag(59.5) & ",0.00," & Betrag(59.5) & ",Zahlbar innerhalb 30 Tagen netto,20270203," & _ Betrag(9.5) & ",VAT," & Betrag(50) & ",S,19" rc = StarteZugcmd("-s ""C:\ERechnung\stamm\seller.csv""" & _ " -b """ & d & "buyer.csv"" -p """ & d & "items.csv"" -t """ & d & "totals.csv""" & _ " -i """ & d & nr & ".pdf"" -x """ & d & nr & ".xml"" -o """ & d & nr & "_zugferd.pdf""" & _ " -y "","" -c ansi -l IHR-LIZENZSCHLUESSEL") If rc <> 0 Then MsgBox "zugcmd meldet Fehler " & rc, vbExclamation ERechnungPerCSV = (rc = 0) End Function ``` Die Stammdatei C:\ERechnung\stamm\seller.csv mit Name, Anschrift, Kontakt, USt-ID und Bankverbindung des Verkäufers legen Sie einmal an – Vorlage und Spalten stehen im [CSV-Artikel](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) und in zugcmd.zip. #### Worauf es ankommt - -c ansi : VB6 schreibt mit Print # im Windows-ANSI-Zeichensatz. Ohne diesen Parameter erwartet zugcmd UTF-8, und Umlaute wie in „München“ kommen falsch an. - Vollständige Pfade mit Laufwerk und Ordner angeben (oder mit -d ein Basisverzeichnis setzen). - Summen berechnet Ihre Anwendung; zugcmd übernimmt sie so, wie sie in totals.csv stehen. Die Spalten und ihre Business Terms (BT-106 Positionssumme, BT-109 Netto, BT-110 Steuer, BT-112 Brutto, BT-115 Zahlbetrag) beschreibt der CSV-Artikel . - Für eine XRechnung an öffentliche Auftraggeber gehört die Leitweg-ID in die Spalte leitwegid (BT-10). - Rückgabewerte : 0 bedeutet Erfolg, z. B. 57 „Eingabe-PDF nicht gefunden“ oder 59 „XML konnte nicht erstellt werden“. Die vollständige Liste steht auf der zugcmd-Seite . ### Testen ohne VB6 Den Aufruf aus Schritt 2 können Sie zuerst in einer Eingabeaufforderung mit zugcmd.exe und den Beispieldateien aus zugcmd.zip ausprobieren – Fehlermeldungen erscheinen dann direkt auf der Konsole. Umgekehrt zerlegt zugcmd -r rechnung.xml eine vorhandene E-Rechnung in genau diese CSV-Dateien; so sehen Sie an einem echten Beispiel, welches Feld in welche Spalte gehört. Die erste erzeugte Rechnung prüfen Sie mit einem Validator – siehe [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) ### Häufige Fragen #### Muss ich meine VB6-Anwendung für die E-Rechnung nach .NET migrieren? Nein. Das Aloaha ZUGFeRD SDK ist über COM aus VB6 aufrufbar, und das Kommandozeilen-Tool zugcmd lässt sich aus jeder Anwendung starten. Die VB6-Anwendung bleibt, wie sie ist; auf dem Rechner wird nur das .NET Framework 4.7.2 benötigt. #### Welcher Weg ist einfacher, wenn ich lange nicht mehr in VB6 programmiert habe? Der Weg über CSV-Dateien und zugcmd. In VB6 brauchen Sie dafür nur Dateiausgabe mit Open und Print sowie einen Programmaufruf. Die Dateien sind lesbar und lassen sich ohne VB6 testen. #### Wie erhalte ich in VB6 den Rückgabewert von zugcmd? Mit CreateObject("WScript.Shell").Run(Befehl, 0, True). Der dritte Parameter True wartet, bis zugcmd fertig ist, und liefert dessen Rückgabewert; 0 bedeutet Erfolg. Der VB6-Befehl Shell wartet nicht und liefert den Rückgabewert nicht. #### Warum stehen Umlaute falsch in der E-Rechnung? VB6 schreibt Textdateien im Windows-ANSI-Zeichensatz, zugcmd erwartet ohne Angabe UTF-8. Rufen Sie zugcmd mit -c ansi auf. #### Funktioniert das auch mit VB5, Access oder Excel (VBA)? Ja. Beide Wege funktionieren mit VB5 und VBA genauso. Bei VBA ist für den COM-Weg die Bitbreite von Office entscheidend; ein 64-Bit-Office braucht die 64-Bit-Registrierung, die das SDK-Setup mitbringt. #### Kann ich das SDK vor dem Kauf testen? Ja. Eine kostenlose Testlizenz mit vollem Funktionsumfang erhalten Sie per E-Mail an info@aloaha.com. Preise und Lizenzen stehen auf der Seite Lizenzen und Preise. --- ## CodeB Wallet – EU-Identitäts-Wallet (EUDI) für Android: Ausweis, Führerschein, PDF-Signatur URL: https://www.zugferdpro.com/codeb-wallet/ Date: 2026-10-17 Kurz: Die CodeB Wallet ist eine Wallet für die europäische digitale Identität (EUDI-Wallet) nach eIDAS 2.0 für Android-Telefone, entwickelt von der Aloaha Limited (Malta) – dem Hersteller von ZUGFeRD Pro. Sie speichert Ausweisdaten (PID), den mobilen Führerschein und Mitgliedskarten, zeigt sie vor Ort oder online vor, prüft Ausweise anderer und signiert PDFs: fortgeschritten (AdES) über den CodeB-Signaturdienst oder qualifiziert (QES) mit der maltesischen eID oder einer D-Trust-Signaturkarte, die einfach an das Telefon gehalten wird. Die App ist keine staatliche Wallet und nicht zertifiziert; den Zugang vergeben wir auf Einladung. Offizielle Seite: [myeuid.app](https://myeuid.app/de/). Die CodeB Wallet in 30 Sekunden: digitaler Ausweis auf dem Telefon, Karten im Design des Ausstellers, nur teilen, was nötig ist, PDFs am Telefon signieren und Ausweise oder nur das Alter prüfen. ### Die CodeB Wallet auf einen Blick MerkmalCodeB Wallet ArtWallet für die europäische digitale Identität (EUDI) nach eIDAS 2.0 (Verordnung (EU) 2024/1183), entwickelt nach dem EU Architecture and Reference Framework (ARF) HerstellerAloaha Limited, Pembroke, Malta – PKI, PDF und digitale Signaturen seit 2003; CodeB ist eine Marke der Aloaha Limited PlattformAndroid mit NFC NachweisePersonalausweis-Daten (PID, auch die deutsche PID), mobiler Führerschein (mDL), CodeB-Mitgliedskarte SignierenAdES über den CodeB-Signaturdienst; QES mit maltesischer eID bzw. Aufenthaltstitel und D-Trust Card 5.1; qualifiziertes Siegel mit D-Trust Card 5.4 DatenschutzDokumente und Verlauf bleiben auf dem Telefon, keine CodeB-Cloud, keine Werbung, kein Tracking SprachenDeutsch, Englisch, Maltesisch (folgt der Telefonsprache, umschaltbar unter Einstellungen → Sprache) Länderfür den EU-Rahmen gebaut; Schwerpunkt zunächst Malta, Deutschland und Österreich Zugangauf Einladung (Anfrage an info@aloaha.com); nicht zertifiziert Für Unternehmenals White-Label-App mit eigenem Namen und Logo erhältlich ### Was die CodeB Wallet kann FunktionDetails Nachweise speichernPID (auch deutsche PID, getrennt von der EU-PID), mobiler Führerschein und Mitgliedskarte als SD-JWT VC und ISO mdoc, ausgestellt per OpenID4VCI; Aussteller in der App wählen oder QR-Code des Ausstellers scannen; ein Dokument erscheint als eine Karte, auch wenn es in beiden Formaten vorliegt Ausweisen vor Ortper QR-Code oder NFC-Antippen, Datenübertragung per Bluetooth Low Energy nach ISO/IEC 18013-5 – auch offline; beide Bluetooth-Rollen für mehr Lesegeräte Ausweisen onlineper OpenID4VP; jede Anfrage wird mit PIN oder Biometrie bestätigt Nur das Nötige teilenselektive Offenlegung, z. B. „über 18“ ohne Geburtsdatum (SD-JWT VC und mdoc) Ausweise prüfenPrüfmodus als Lesegerät nach ISO/IEC 18013-5 für Ausweis, Führerschein oder Alter anderer Personen mit Sperrprüfung und klarem Ergebnis; es wird nichts gespeichert; Prüfen „Rücken an Rücken“ per NFC ohne QR-Code Vertrauenslistevertrauenswürdige Aussteller-Zertifikate verwalten; das CodeB-Zertifikat ist eingebaut, weitere lassen sich importieren Reisepass und Ausweis lesenChip nach ICAO Doc 9303 mit CAN oder MRZ (Kamera) lesen; Signatur des Ausstellerstaats und Echtheit des Chips werden geprüft PID aus dem Ausweis-Chipder PID-Provider liest den Chip über das Telefon durch einen Ende-zu-Ende verschlüsselten Kanal (PACE, Chip Authentication, Secure Messaging); das Telefon kann die Daten weder lesen noch verändern PDF signieren über den SignaturdienstPAdES B-T mit vertrauenswürdigem Zeitstempel über den CodeB-Signaturdienst – fortgeschrittene elektronische Signatur (AdES); jede Signatur wird vom Nutzer bestätigt PDF signieren mit Signaturkarteeigene Signaturkarte per NFC an das Telefon halten; der private Schlüssel verlässt den Chip nicht; die App zeigt an, ob das Kartenzertifikat qualifiziert ist (Details unten) Signaturanfragen von WebseitenPDFs von einer Webseite per QR-Code oder „In CodeB Wallet öffnen“ signieren; mehrere Dokumente werden einmal bestätigt und gemeinsam signiert, die signierten PDFs gehen direkt an die Webseite zurück Kostenloses CodeB-Kontoin der App mit Reisepass oder Ausweis (Chipprüfung) und E-Mail-Code anlegen; 5 eigene PDF-Signaturen pro Tag sowie eine Test-PID; Vorzeigen und Prüfen funktionieren ohne Konto Verlauf, Status und ErinnerungenVerlauf auf dem Gerät (was wann mit wem geteilt oder signiert wurde), automatische Status- und Sperrprüfung, Erneuerung vor Ablauf, lokale Erinnerungen ohne Datenübertragung BarrierefreiheitTalkBack, sehr große Schrift und reduzierte Animationen (European Accessibility Act) ### PDF qualifiziert signieren mit maltesischer eID und D-Trust-Karte Mit der CodeB Wallet wird das Android-Telefon zum Kartenleser: kein Computer, kein USB-Lesegerät, kein Browser-Plug-in. Die Signatur erzeugt die Karte selbst, die App bettet sie als PAdES (ETSI EN 319 142) mit vertrauenswürdigem Zeitstempel in das PDF ein, sodass gängige PDF-Programme sie prüfen können. Zum Zeitstempeldienst geht nur ein Hashwert – das PDF bleibt auf dem Telefon. KarteErgebnis Maltesische eID-Karte und maltesischer Aufenthaltstitel mit Signaturzertifikatqualifizierte elektronische Signatur (QES) – mit echten Karten vollständig getestet D-Trust Card 5.1 (Standard RSA und Multi ECC)qualifizierte elektronische Signatur (QES) einer Person D-Trust Card 5.4 (Standard RSA und Multi ECC)qualifiziertes elektronisches Siegel einer Organisation Heilberufsausweis (HBA G2.1) und elektronische Gesundheitskarte (eGK G2.1)Signatur mit dem Kartenzertifikat, bei der eGK fortgeschritten (AdES) über das Authentisierungszertifikat – Details auf [myeuid.app](https://myeuid.app/de/german-health-cards.html) D-Trust-Karten der Generation 4 werden nicht unterstützt, weil ihnen die kontaktlose Schnittstelle fehlt; die App erkennt sie und verweist auf einen Kartenleser am Computer. Eine neue Karte mit Transport-PIN muss zuerst mit den Werkzeugen des Ausstellers auf die eigene PIN umgestellt werden. #### So signieren Sie ein PDF mit Ihrer Signaturkarte - Auf dem Startbildschirm Signieren → Dokument auswählen tippen und das PDF wählen. - Das Dokument prüfen und Mit Signaturkarte signieren tippen. - Die sechsstellige Zugangsnummer (CAN) eingeben, die auf der Karte aufgedruckt ist – die App schlägt die zuletzt funktionierende CAN vor. - Die Karte flach an die Rückseite des Telefons halten, bis das Signieren fertig ist (ab Android 14 zeigt die App, wo die NFC-Antenne sitzt). - Die Signatur-PIN eingeben. Die Karte erzeugt die Signatur, die App fügt den Zeitstempel hinzu. - Die Bestätigung „Dokument unterschrieben“ zeigt die verwendete Karte und ob das Zertifikat qualifiziert ist; das PDF speichern oder teilen. Sicherheit: Die CAN öffnet nur den verschlüsselten Kanal (PACE); die PIN geht ausschließlich über diesen Kanal an den Chip und wird von der App nicht gespeichert. Eine falsche PIN wird nie automatisch wiederholt, die verbleibenden Versuche werden angezeigt. Wird die Karte zu früh entfernt, wird nichts signiert – die App setzt fort, sobald die Karte wieder anliegt. Gesperrte PINs setzt der Kartenaussteller zurück (bei der maltesischen eID Identity Malta), nicht die App. Die Qualifikation der Signatur kommt von der Karte und ihrem Zertifikat – die App selbst ist nicht zertifiziert. ### CodeB Wallet und ZUGFeRD: E-Rechnungen signieren Der CodeB-Signaturdienst, den die Wallet nutzt, ist derselbe Dienst, über den das Aloaha ZUGFeRD SDK mit [SignPDFRemote](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) fertige ZUGFeRD-PDFs signiert – ebenso die [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/), der [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) und das Kommandozeilen-Tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). Dabei entsteht eine fortgeschrittene Signatur (AdES, PAdES B-B bis B-LTA). - Automatische Rechnungssignatur: Für die Signatur aus Ihrer Anwendung brauchen Sie die App nicht – das SDK spricht den Signaturdienst direkt von Server zu Server an. - Einzelne PDFs am Telefon: Mit der Wallet signieren Sie ein PDF selbst – über den Signaturdienst oder qualifiziert mit Ihrer maltesischen eID bzw. D-Trust-Karte. - Signaturanfragen: Über eine Webseite (auf dem CodeB-Testserver unter phone.codeb.io/sign-request.html ) laden Sie PDFs hoch und laden Unterzeichner ein; diese scannen den QR-Code oder tippen „In CodeB Wallet öffnen“, signieren am Telefon und alle erhalten am Ende den Link zum signierten PDF. ### Datenschutz und Sicherheit - Dokumente und Verlauf bleiben auf dem Telefon – es gibt keine CodeB-Cloud. - Die Schlüssel liegen in der sicheren Hardware des Telefons und sind mit PIN oder Biometrie geschützt. - Keine Werbung, kein Tracking, keine Analyse in der App; die Webseite myeuid.app setzt keine Cookies und lädt nichts von Dritten. - Der Verlauf zeigt, wann ein Dokument mit wem geteilt wurde; Löschung beim Prüfer anfordern oder einen Prüfer melden ist möglich. ### Standards eIDAS 2.0 und ARF, OpenID4VCI, OpenID4VP, ISO/IEC 18013-5, SD-JWT VC, ISO mdoc, PAdES Baseline B-T (ETSI EN 319 142), ETSI Trusted Lists, ICAO Doc 9303 (PACE, BAC, Chip und Active Authentication, Passive Authentication), ISO/IEC TS 23220-4 mit ICAO DTC Typ 1, ISO/IEC 7816-4/-8 mit CAdES/PAdES und qcStatements für Kartensignaturen sowie ETSI TS 119 461 v2.1.1 (für das erweiterte Identitätsprüfungs-Niveau ausgelegt, nicht zertifiziert). ### Zugang auf Einladung Die CodeB Wallet wird laufend weiterentwickelt ([Änderungsprotokoll](https://myeuid.app/de/changelog.html)). Den Zugang vergeben wir auf Einladung: Die App bei Google Play steht eingeladenen Nutzern zur Verfügung, deren Google-Konto mit der freigeschalteten E-Mail-Adresse angemeldet ist. Zugang anfragen: E-Mail an [info@aloaha.com](mailto:info@aloaha.com?subject=CodeB%20Wallet%20%E2%80%93%20Zugang). ### White Label für Unternehmen Organisationen können die Wallet als eigene App anbieten: mit eigenem Namen, Logo, Farben und Store-Eintrag, vorkonfigurierten Ausstellern, Dokumenten und Diensten. Signiert wird über Ihren eigenen Signaturdienst oder mit NFC-Signaturkarten; Updates und Wartung übernimmt Aloaha in Malta. Auch die White-Label-Version ist nicht zertifiziert. Anfragen an info@aloaha.com mit dem Betreff „CodeB Wallet White Label“. ### Weiterführende Seiten auf myeuid.app - CodeB Wallet – Startseite (auch auf Englisch und Maltesisch ) - Anleitung - PDFs mit der maltesischen eID signieren - Signatur- und Siegelkarten von D-Trust - Heilberufsausweis und Gesundheitskarte - Kostenloses CodeB-Konto Die ausführliche Vorstellung der CodeB Identity Wallet auf YouTube: ### Häufige Fragen #### Was ist die CodeB Wallet? Die CodeB Wallet ist eine App für Android-Telefone für die europäische digitale Identität (EUDI-Wallet) nach eIDAS 2.0 von Aloaha Limited, Malta. Sie speichert Ausweisdaten (PID), den mobilen Führerschein und Mitgliedskarten, zeigt sie vor, prüft Ausweise anderer und signiert PDFs. #### Kann ich mit der CodeB Wallet qualifiziert signieren? Ja, mit einer passenden Signaturkarte: Mit der maltesischen eID (auch Aufenthaltstitel mit Signaturzertifikat) und der D-Trust Card 5.1 entsteht eine qualifizierte elektronische Signatur (QES), mit der D-Trust Card 5.4 ein qualifiziertes elektronisches Siegel. Die Karte wird per NFC an das Telefon gehalten. Signaturen über den CodeB-Signaturdienst sind fortgeschrittene elektronische Signaturen (AdES). #### Ist die CodeB Wallet eine staatliche EUDI-Wallet? Nein. Die CodeB Wallet ist nach eIDAS 2.0 und dem ARF entwickelt, aber keine staatliche Wallet und nicht zertifiziert. #### Auf welchen Telefonen läuft die CodeB Wallet? Auf Android-Telefonen; für Signaturkarten und das Lesen von Ausweis-Chips wird NFC benötigt. #### Was kostet die CodeB Wallet? Für die App selbst nennt myeuid.app keinen Preis. Vorzeigen und Prüfen von Dokumenten funktionieren ohne Konto; das kostenlose CodeB-Konto erlaubt 5 eigene PDF-Signaturen pro Tag über den Signaturdienst. #### Brauche ich die CodeB Wallet, um ZUGFeRD-Rechnungen zu signieren? Nein. Das Aloaha ZUGFeRD SDK signiert fertige ZUGFeRD-PDFs mit SignPDFRemote direkt von Server zu Server über den CodeB-Signaturdienst (AdES). Die Wallet brauchen Sie nur, wenn Sie ein PDF selbst am Telefon signieren möchten. #### Wo bleiben meine Daten? Auf Ihrem Telefon. Dokumente und Verlauf werden nicht in einer CodeB-Cloud gespeichert, die Schlüssel liegen in der sicheren Hardware des Geräts, und die App enthält weder Werbung noch Tracking. #### Wie erhalte ich Zugang zur CodeB Wallet? Per E-Mail an info@aloaha.com. Den Zugang vergeben wir auf Einladung; die App bei Google Play steht eingeladenen Nutzern zur Verfügung, deren Google-Konto mit der freigeschalteten E-Mail-Adresse angemeldet ist. --- ## CodeB Wallet – EU Digital Identity Wallet (EUDI) for Android: ID, driving licence, PDF signing URL: https://www.zugferdpro.com/en/codeb-wallet/ Date: 2026-10-17 In short: The CodeB Wallet is a wallet for the European Digital Identity (EUDI wallet) under eIDAS 2.0 for Android phones, developed by Aloaha Limited (Malta) – the maker of ZUGFeRD Pro. It stores identity data (PID), the mobile driving licence and membership cards, presents them in person or online, checks other people's IDs and signs PDFs: advanced (AdES) via the CodeB signing service, or qualified (QES) with the Maltese eID or a D-Trust signature card that you simply hold against the phone. The app is not a government wallet and is not certified; access is by invitation. Official website: [myeuid.app](https://myeuid.app/en/). The CodeB Wallet in 30 seconds (on-screen texts in German): digital ID on the phone, cards in the issuer's design, share only what is needed, sign PDFs on the phone and check an ID – or just the age. ### The CodeB Wallet at a glance FeatureCodeB Wallet TypeWallet for the European Digital Identity (EUDI) under eIDAS 2.0 (Regulation (EU) 2024/1183), developed according to the EU Architecture and Reference Framework (ARF) ManufacturerAloaha Limited, Pembroke, Malta – PKI, PDF and digital signatures since 2003; CodeB is a trademark of Aloaha Limited PlatformAndroid with NFC CredentialsPersonal identification data (PID, including the German PID), mobile driving licence (mDL), CodeB membership card SigningAdES via the CodeB signing service; QES with the Maltese eID or residence permit and the D-Trust Card 5.1; qualified seal with the D-Trust Card 5.4 PrivacyDocuments and history stay on the phone, no CodeB cloud, no ads, no tracking LanguagesEnglish, German, Maltese (follows the phone's language, can be changed under Settings → Language) CountriesBuilt for the EU framework; initial focus on Malta, Germany and Austria Accessby invitation (request via info@aloaha.com); not certified For businessesAvailable as a white-label app with your own name and logo ### What the CodeB Wallet can do FunctionDetails Store credentialsPID (also the German PID, separate from the EU PID), mobile driving licence and membership card as SD-JWT VC and ISO mdoc, issued via OpenID4VCI; choose an issuer in the app or scan the issuer's QR code; a document held in both formats appears as one card Present in personby QR code or NFC tap, data transfer via Bluetooth Low Energy according to ISO/IEC 18013-5 – also offline; both Bluetooth roles for more readers Present onlinevia OpenID4VP; every request is confirmed with PIN or biometrics Share only what is neededselective disclosure, e.g. "over 18" without the date of birth (SD-JWT VC and mdoc) Verify IDsverifier mode as an ISO/IEC 18013-5 reader for another person's ID, driving licence or age, with revocation check and a clear result; nothing is stored; back-to-back verification via NFC without a QR code Trust listmanage trusted issuer certificates; the CodeB certificate is built in, others can be imported Read passports and ID cardsread the chip according to ICAO Doc 9303 with the CAN or the MRZ (camera); the issuing state's signature and the authenticity of the chip are checked PID from the ID chipthe PID provider reads the chip through the phone over an end-to-end encrypted channel (PACE, Chip Authentication, Secure Messaging); the phone can neither read nor alter the data Sign PDFs via the signing servicePAdES B-T with a trusted timestamp via the CodeB signing service – advanced electronic signature (AdES); every signature is confirmed by the user Sign PDFs with a signature cardhold your own signature card against the phone via NFC; the private key never leaves the chip; the app shows whether the card's certificate is qualified (details below) Signing requests from websitessign PDFs from a website via QR code or "Open in CodeB Wallet"; several documents are confirmed once and signed together, the signed PDFs go straight back to the website Free CodeB accountcreate it in the app with a passport or ID card (chip check) and an e-mail code; 5 signatures of your own PDFs per day plus a test PID; presenting and verifying work without an account History, status and reminderson-device history (what was shared or signed, when and with whom), automatic status and revocation checks, renewal before expiry, local reminders without sending data AccessibilityTalkBack, very large text and reduced animations (European Accessibility Act) ### Qualified PDF signatures with the Maltese eID and D-Trust cards The CodeB Wallet turns the Android phone into a card reader: no computer, no USB reader, no browser plug-in. The card itself creates the signature; the app embeds it as PAdES (ETSI EN 319 142) with a trusted timestamp, so common PDF programs can validate it. Only a hash value is sent to the timestamp service – the PDF stays on the phone. CardResult Maltese eID card and Maltese residence permit with a signing certificatequalified electronic signature (QES) – fully tested with real cards D-Trust Card 5.1 (Standard RSA and Multi ECC)qualified electronic signature (QES) of a person D-Trust Card 5.4 (Standard RSA and Multi ECC)qualified electronic seal of an organisation German health professional card (HBA G2.1) and electronic health card (eGK G2.1)signature with the card's certificate; with the eGK an advanced signature (AdES) via the authentication certificate – details on [myeuid.app](https://myeuid.app/en/german-health-cards.html) Generation 4 D-Trust cards are not supported because they lack a contactless interface; the app recognises them and points you to a card reader on a computer. A new card with a transport PIN must first be switched to your own PIN with the issuer's tools. #### How to sign a PDF with your signature card - On the home screen, tap Sign → Select document and choose the PDF. - Review the document and tap Sign with signature card . - Enter the 6-digit card access number (CAN) printed on the card – the app suggests the last CAN that worked. - Hold the card flat against the back of the phone until signing has finished (from Android 14 the app shows where the NFC antenna is). - Enter the signature PIN. The card creates the signature, the app adds the timestamp. - The "Document signed" confirmation shows the card used and whether its certificate is qualified; save or share the PDF. Security: The CAN only opens the encrypted channel (PACE); the PIN travels only over this channel to the chip and is not stored by the app. A wrong PIN is never retried automatically, and the remaining attempts are shown. If the card is removed too early, nothing is signed – the app continues as soon as the card is back in place. Blocked PINs are reset by the card issuer (for the Maltese eID, Identity Malta), not by the app. The qualification of the signature comes from the card and its certificate – the app itself is not certified. ### CodeB Wallet and ZUGFeRD: signing e-invoices The CodeB signing service used by the wallet is the same service through which the Aloaha ZUGFeRD SDK signs finished ZUGFeRD PDFs with [SignPDFRemote](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (German) – as do the [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/), the [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) and the command-line tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). The result is an advanced signature (AdES, PAdES B-B to B-LTA). - Automatic invoice signing: you do not need the app to sign from your own application – the SDK talks to the signing service directly, server to server. - Individual PDFs on the phone: with the wallet you sign a PDF yourself – via the signing service, or qualified with your Maltese eID or D-Trust card. - Signing requests: on a website (on the CodeB test server at phone.codeb.io/sign-request.html ) you upload PDFs and invite signers; they scan the QR code or tap "Open in CodeB Wallet", sign on their phone, and at the end everyone receives the link to the signed PDF. ### Privacy and security - Documents and history stay on the phone – there is no CodeB cloud. - The keys are held in the phone's secure hardware and protected by PIN or biometrics. - No ads, no tracking, no analytics in the app; the myeuid.app website sets no cookies and loads nothing from third parties. - The history shows when a document was shared and with whom; you can ask a verifier to delete data or report a verifier. ### Standards eIDAS 2.0 and ARF, OpenID4VCI, OpenID4VP, ISO/IEC 18013-5, SD-JWT VC, ISO mdoc, PAdES Baseline B-T (ETSI EN 319 142), ETSI Trusted Lists, ICAO Doc 9303 (PACE, BAC, Chip and Active Authentication, Passive Authentication), ISO/IEC TS 23220-4 with ICAO DTC Type 1, ISO/IEC 7816-4/-8 with CAdES/PAdES and qcStatements for card signatures, and ETSI TS 119 461 v2.1.1 (designed for the extended level of identity proofing, not certified). ### Access by invitation The CodeB Wallet is developed continuously ([changelog](https://myeuid.app/en/changelog.html)). Access is by invitation: the app on Google Play is available to invited users whose Google account uses the approved e-mail address. To request access, e-mail [info@aloaha.com](mailto:info@aloaha.com?subject=CodeB%20Wallet%20%E2%80%93%20access). ### White label for businesses Organisations can offer the wallet as their own app: with their own name, logo, colours and store listing, preconfigured issuers, documents and services. Signing uses your own signing service or NFC signature cards; Aloaha in Malta provides updates and maintenance. The white-label version is not certified either. Enquiries to info@aloaha.com with the subject "CodeB Wallet White Label". ### Further pages on myeuid.app - CodeB Wallet – home page (also in German and Maltese ) - User guide - Signing PDFs with the Maltese eID - Signature and seal cards from D-Trust - German health professional and health cards - Free CodeB account The detailed presentation of the CodeB Identity Wallet on YouTube: ### Frequently asked questions #### What is the CodeB Wallet? The CodeB Wallet is an app for Android phones for the European Digital Identity (EUDI wallet) under eIDAS 2.0, made by Aloaha Limited, Malta. It stores identity data (PID), the mobile driving licence and membership cards, presents them, checks other people's IDs and signs PDFs. #### Can I create qualified signatures with the CodeB Wallet? Yes, with a suitable signature card: the Maltese eID (also residence permits with a signing certificate) and the D-Trust Card 5.1 produce a qualified electronic signature (QES), the D-Trust Card 5.4 a qualified electronic seal. The card is held against the phone via NFC. Signatures via the CodeB signing service are advanced electronic signatures (AdES). #### Is the CodeB Wallet a government EUDI wallet? No. The CodeB Wallet is developed according to eIDAS 2.0 and the ARF, but it is not a government wallet and it is not certified. #### Which phones does the CodeB Wallet run on? On Android phones; NFC is needed for signature cards and for reading ID chips. #### What does the CodeB Wallet cost? myeuid.app does not state a price for the app itself. Presenting and verifying documents work without an account; the free CodeB account allows 5 signatures of your own PDFs per day via the signing service. #### Do I need the CodeB Wallet to sign ZUGFeRD invoices? No. The Aloaha ZUGFeRD SDK signs finished ZUGFeRD PDFs with SignPDFRemote directly server to server via the CodeB signing service (AdES). You only need the wallet if you want to sign a PDF yourself on your phone. #### Where does my data stay? On your phone. Documents and history are not stored in a CodeB cloud, the keys are held in the device's secure hardware, and the app contains no ads and no tracking. #### How do I get access to the CodeB Wallet? By e-mail to info@aloaha.com. Access is by invitation; the app on Google Play is available to invited users whose Google account uses the approved e-mail address. --- ## CodeB Wallet – portefeuille d’identité numérique européenne (EUDI) pour Android : identité, permis, signature PDF URL: https://www.zugferdpro.com/fr/codeb-wallet/ Date: 2026-10-17 En bref : la CodeB Wallet est un portefeuille d’identité numérique européenne (portefeuille EUDI) conforme à eIDAS 2.0 pour téléphones Android, développé par Aloaha Limited (Malte) – l’éditeur de ZUGFeRD Pro. Elle conserve les données d’identité (PID), le permis de conduire mobile et des cartes de membre, les présente sur place ou en ligne, contrôle les pièces d’identité d’autres personnes et signe des PDF : de manière avancée (AdES) via le service de signature CodeB, ou qualifiée (QES) avec l’eID maltaise ou une carte de signature D-Trust qu’il suffit de tenir contre le téléphone. L’application n’est pas un portefeuille étatique et n’est pas certifiée ; l’accès se fait sur invitation. Site officiel : [myeuid.app](https://myeuid.app/en/) (en anglais). La CodeB Wallet en 30 secondes (textes à l’écran en allemand) : identité numérique sur le téléphone, cartes au design de l’émetteur, ne partager que le nécessaire, signer des PDF sur le téléphone et contrôler une pièce d’identité – ou seulement l’âge. ### La CodeB Wallet en un coup d’œil CaractéristiqueCodeB Wallet TypePortefeuille d’identité numérique européenne (EUDI) selon eIDAS 2.0 (règlement (UE) 2024/1183), développé selon l’EU Architecture and Reference Framework (ARF) ÉditeurAloaha Limited, Pembroke, Malte – PKI, PDF et signatures numériques depuis 2003 ; CodeB est une marque d’Aloaha Limited PlateformeAndroid avec NFC JustificatifsDonnées d’identification personnelle (PID, y compris la PID allemande), permis de conduire mobile (mDL), carte de membre CodeB SignatureAdES via le service de signature CodeB ; QES avec l’eID ou le titre de séjour maltais et la D-Trust Card 5.1 ; cachet qualifié avec la D-Trust Card 5.4 ConfidentialitéLes documents et l’historique restent sur le téléphone, pas de cloud CodeB, pas de publicité, pas de suivi Languesanglais, allemand, maltais (suit la langue du téléphone, modifiable sous Paramètres → Langue) PaysConçue pour le cadre de l’UE ; priorité initiale à Malte, l’Allemagne et l’Autriche Accèssur invitation (demande à info@aloaha.com) ; non certifiée Pour les entreprisesDisponible en marque blanche, avec votre nom et votre logo ### Ce que fait la CodeB Wallet FonctionDétails Conserver des justificatifsPID (y compris la PID allemande, distincte de la PID européenne), permis de conduire mobile et carte de membre aux formats SD-JWT VC et ISO mdoc, émis via OpenID4VCI ; choisir un émetteur dans l’application ou scanner son code QR ; un document disponible dans les deux formats apparaît comme une seule carte Présenter sur placepar code QR ou contact NFC, transfert des données par Bluetooth Low Energy selon ISO/IEC 18013-5 – également hors ligne ; les deux rôles Bluetooth pour davantage de lecteurs Présenter en lignevia OpenID4VP ; chaque demande est confirmée par PIN ou biométrie Ne partager que le nécessairedivulgation sélective, par exemple « plus de 18 ans » sans la date de naissance (SD-JWT VC et mdoc) Contrôler des pièces d’identitémode vérificateur en tant que lecteur ISO/IEC 18013-5 pour la pièce d’identité, le permis ou l’âge d’une autre personne, avec contrôle de révocation et résultat clair ; rien n’est enregistré ; vérification dos à dos par NFC sans code QR Liste de confiancegérer les certificats d’émetteurs de confiance ; le certificat CodeB est intégré, d’autres peuvent être importés Lire passeports et cartes d’identitélecture de la puce selon l’ICAO Doc 9303 avec le CAN ou la MRZ (caméra) ; la signature de l’État émetteur et l’authenticité de la puce sont vérifiées PID à partir de la pucele fournisseur de PID lit la puce via le téléphone par un canal chiffré de bout en bout (PACE, Chip Authentication, Secure Messaging) ; le téléphone ne peut ni lire ni modifier les données Signer des PDF via le service de signaturePAdES B-T avec horodatage de confiance via le service de signature CodeB – signature électronique avancée (AdES) ; chaque signature est confirmée par l’utilisateur Signer des PDF avec une carte de signaturetenir votre propre carte de signature contre le téléphone (NFC) ; la clé privée ne quitte jamais la puce ; l’application indique si le certificat de la carte est qualifié (détails ci-dessous) Demandes de signature depuis des sites websigner des PDF provenant d’un site web par code QR ou « Ouvrir dans CodeB Wallet » ; plusieurs documents sont confirmés une seule fois et signés ensemble, les PDF signés retournent directement au site Compte CodeB gratuità créer dans l’application avec un passeport ou une carte d’identité (contrôle de la puce) et un code envoyé par e-mail ; 5 signatures de vos propres PDF par jour, plus une PID de test ; présenter et vérifier fonctionnent sans compte Historique, statut et rappelshistorique sur l’appareil (ce qui a été partagé ou signé, quand et avec qui), contrôles automatiques de statut et de révocation, renouvellement avant expiration, rappels locaux sans envoi de données AccessibilitéTalkBack, très grand texte et animations réduites (European Accessibility Act) ### Signatures PDF qualifiées avec l’eID maltaise et les cartes D-Trust La CodeB Wallet transforme le téléphone Android en lecteur de cartes : ni ordinateur, ni lecteur USB, ni module de navigateur. La carte crée elle-même la signature ; l’application l’intègre au format PAdES (ETSI EN 319 142) avec un horodatage de confiance, afin que les logiciels PDF courants puissent la vérifier. Seule une valeur de hachage est envoyée au service d’horodatage – le PDF reste sur le téléphone. CarteRésultat Carte eID maltaise et titre de séjour maltais avec certificat de signaturesignature électronique qualifiée (QES) – entièrement testée avec de vraies cartes D-Trust Card 5.1 (Standard RSA et Multi ECC)signature électronique qualifiée (QES) d’une personne D-Trust Card 5.4 (Standard RSA et Multi ECC)cachet électronique qualifié d’une organisation Carte professionnelle de santé allemande (HBA G2.1) et carte d’assurance maladie électronique (eGK G2.1)signature avec le certificat de la carte ; avec l’eGK, signature avancée (AdES) via le certificat d’authentification – détails sur [myeuid.app](https://myeuid.app/en/german-health-cards.html) (en anglais) Les cartes D-Trust de génération 4 ne sont pas prises en charge, faute d’interface sans contact ; l’application les reconnaît et renvoie vers un lecteur de cartes sur ordinateur. Une nouvelle carte avec PIN de transport doit d’abord être passée à votre propre PIN avec les outils de l’émetteur. #### Comment signer un PDF avec votre carte de signature - Sur l’écran d’accueil, touchez Signer → Sélectionner un document et choisissez le PDF. - Vérifiez le document et touchez Signer avec la carte de signature . - Saisissez le numéro d’accès à 6 chiffres (CAN) imprimé sur la carte – l’application propose le dernier CAN qui a fonctionné. - Tenez la carte à plat contre le dos du téléphone jusqu’à la fin de la signature (à partir d’Android 14, l’application montre l’emplacement de l’antenne NFC). - Saisissez le PIN de signature. La carte crée la signature, l’application ajoute l’horodatage. - La confirmation « Document signé » indique la carte utilisée et si son certificat est qualifié ; enregistrez ou partagez le PDF. Sécurité : le CAN ouvre uniquement le canal chiffré (PACE) ; le PIN transite exclusivement par ce canal vers la puce et n’est pas enregistré par l’application. Un PIN erroné n’est jamais réessayé automatiquement, et les tentatives restantes sont affichées. Si la carte est retirée trop tôt, rien n’est signé – l’application reprend dès que la carte est de nouveau en place. Les PIN bloqués sont réinitialisés par l’émetteur de la carte (pour l’eID maltaise, Identity Malta), pas par l’application. Le caractère qualifié de la signature provient de la carte et de son certificat – l’application elle-même n’est pas certifiée. ### CodeB Wallet et ZUGFeRD : signer des factures électroniques Le service de signature CodeB utilisé par le portefeuille est le même que celui par lequel l’Aloaha ZUGFeRD SDK signe des PDF ZUGFeRD finalisés avec [SignPDFRemote](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) – tout comme la [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/), le [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) et l’outil en ligne de commande [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). Le résultat est une signature avancée (AdES, PAdES B-B à B-LTA). - Signature automatique des factures : vous n’avez pas besoin de l’application pour signer depuis votre propre logiciel – le SDK s’adresse directement au service de signature, de serveur à serveur. - PDF individuels sur le téléphone : avec le portefeuille, vous signez vous-même un PDF – via le service de signature, ou de manière qualifiée avec votre eID maltaise ou votre carte D-Trust. - Demandes de signature : sur un site web (sur le serveur de TEST CodeB à l’adresse phone.codeb.io/sign-request.html ), vous téléversez des PDF et invitez des signataires ; ceux-ci scannent le code QR ou touchent « Ouvrir dans CodeB Wallet », signent sur leur téléphone, et à la fin chacun reçoit le lien vers le PDF signé. ### Confidentialité et sécurité - Les documents et l’historique restent sur le téléphone – il n’y a pas de cloud CodeB. - Les clés sont conservées dans le matériel sécurisé du téléphone et protégées par PIN ou biométrie. - Pas de publicité, pas de suivi, pas d’analyse d’audience dans l’application ; le site myeuid.app ne dépose aucun cookie et ne charge rien depuis des tiers. - L’historique indique quand un document a été partagé et avec qui ; vous pouvez demander à un vérificateur de supprimer les données ou signaler un vérificateur. ### Normes eIDAS 2.0 et ARF, OpenID4VCI, OpenID4VP, ISO/IEC 18013-5, SD-JWT VC, ISO mdoc, PAdES Baseline B-T (ETSI EN 319 142), ETSI Trusted Lists, ICAO Doc 9303 (PACE, BAC, Chip et Active Authentication, Passive Authentication), ISO/IEC TS 23220-4 avec ICAO DTC Type 1, ISO/IEC 7816-4/-8 avec CAdES/PAdES et qcStatements pour les signatures par carte, ainsi qu’ETSI TS 119 461 v2.1.1 (conçu pour le niveau étendu de vérification d’identité, non certifié). ### Accès sur invitation La CodeB Wallet est développée en continu ([journal des modifications](https://myeuid.app/en/changelog.html), en anglais). L’accès se fait sur invitation : l’application sur Google Play est disponible pour les utilisateurs invités dont le compte Google utilise l’adresse e-mail validée. Pour demander l’accès, écrivez à [info@aloaha.com](mailto:info@aloaha.com?subject=CodeB%20Wallet%20%E2%80%93%20acc%C3%A8s). ### Marque blanche pour les entreprises Les organisations peuvent proposer le portefeuille comme leur propre application : avec leur nom, leur logo, leurs couleurs et leur fiche sur les stores, des émetteurs, documents et services préconfigurés. La signature passe par votre propre service de signature ou par des cartes de signature NFC ; Aloaha, à Malte, assure les mises à jour et la maintenance. La version en marque blanche n’est pas non plus certifiée. Demandes à info@aloaha.com avec l’objet « CodeB Wallet White Label ». ### Autres pages sur myeuid.app - CodeB Wallet – page d’accueil (en anglais ; également en allemand et en maltais ) - Guide d’utilisation (en anglais) - Signer des PDF avec l’eID maltaise (en anglais) - Cartes de signature et de cachet D-Trust (en anglais) - Cartes de santé allemandes (en anglais) - Compte CodeB gratuit (en anglais) La présentation détaillée de la CodeB Identity Wallet sur YouTube : ### Questions fréquentes #### Qu’est-ce que la CodeB Wallet ? La CodeB Wallet est une application pour téléphones Android dédiée à l’identité numérique européenne (portefeuille EUDI) selon eIDAS 2.0, éditée par Aloaha Limited, Malte. Elle conserve les données d’identité (PID), le permis de conduire mobile et des cartes de membre, les présente, contrôle les pièces d’identité d’autres personnes et signe des PDF. #### Puis-je créer des signatures qualifiées avec la CodeB Wallet ? Oui, avec une carte de signature adaptée : l’eID maltaise (y compris les titres de séjour avec certificat de signature) et la D-Trust Card 5.1 produisent une signature électronique qualifiée (QES), la D-Trust Card 5.4 un cachet électronique qualifié. La carte est tenue contre le téléphone (NFC). Les signatures via le service de signature CodeB sont des signatures électroniques avancées (AdES). #### La CodeB Wallet est-elle un portefeuille EUDI étatique ? Non. La CodeB Wallet est développée selon eIDAS 2.0 et l’ARF, mais ce n’est pas un portefeuille étatique et elle n’est pas certifiée. #### Sur quels téléphones fonctionne la CodeB Wallet ? Sur les téléphones Android ; le NFC est nécessaire pour les cartes de signature et la lecture des puces d’identité. #### Combien coûte la CodeB Wallet ? myeuid.app n’indique pas de prix pour l’application elle-même. Présenter et vérifier des documents fonctionnent sans compte ; le compte CodeB gratuit permet 5 signatures de vos propres PDF par jour via le service de signature. #### Ai-je besoin de la CodeB Wallet pour signer des factures ZUGFeRD ? Non. L’Aloaha ZUGFeRD SDK signe des PDF ZUGFeRD finalisés avec SignPDFRemote, directement de serveur à serveur via le service de signature CodeB (AdES). Le portefeuille n’est nécessaire que si vous souhaitez signer vous-même un PDF sur votre téléphone. #### Où restent mes données ? Sur votre téléphone. Les documents et l’historique ne sont pas stockés dans un cloud CodeB, les clés sont conservées dans le matériel sécurisé de l’appareil, et l’application ne contient ni publicité ni suivi. #### Comment obtenir l’accès à la CodeB Wallet ? Par e-mail à info@aloaha.com. L’accès se fait sur invitation ; l’application sur Google Play est disponible pour les utilisateurs invités dont le compte Google utilise l’adresse e-mail validée. --- ## F: Wie erstelle ich ZUGFeRD-Rechnungen und XRechnungen per CSV und zugcmd aus meiner eigenen Anwendung? URL: https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/ Date: 2026-10-16 Business terms: BT-1, BT-2, BT-3, BT-10, BT-72, BT-106, BT-109, BT-112, BT-115, BT-116, BT-117, BT-5, BT-9, BT-20, BT-107, BT-108, BT-110, BT-118, BT-119, BT-129, BT-130, BT-131, BT-146 Kurz: Ihre Anwendung – egal ob Delphi, VB6, Access, COBOL oder eine andere Sprache – schreibt die Rechnungsdaten in vier CSV-Dateien und ruft das Kommandozeilenwerkzeug [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) auf. zugcmd liest die Dateien, erzeugt das E-Rechnungs-XML nach EN 16931 (XRechnung 3.0, Syntax CII) und bettet es in Ihre vorhandene PDF-Rechnung ein. Heraus kommt eine hybride ZUGFeRD-Rechnung (PDF/A-3), die Sie wie gewohnt per E-Mail versenden. Eine Programmierung gegen das SDK ist dafür nicht nötig. ### Der Ablauf - Ihre Anwendung erzeugt die PDF-Rechnung wie bisher. - Sie schreibt die Rechnungsdaten in die CSV-Dateien (siehe unten). - Sie startet zugcmd und wertet den Rückgabewert aus (0 = Erfolg). - zugcmd schreibt das XML und die ZUGFeRD-PDF mit eingebettetem XML. - Ihre Anwendung versendet die ZUGFeRD-PDF per E-Mail. Den Versand übernimmt zugcmd nicht. Ohne vorhandenes PDF kann zugcmd das PDF auch aus einer Word-Vorlage (DOCX) erzeugen; das beschreibt die [zugcmd-Seite](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). ### Welche CSV-Dateien braucht zugcmd? DateiInhaltParameterPflicht [seller.csv](https://www.zugferdpro.com/csv-datei-seller-csv/)Verkäufer: Name, Anschrift, Kontakt, USt-ID, Bankverbindung-sja – ändert sich kaum, kann als Stammdatei liegen bleiben [buyer.csv](https://www.zugferdpro.com/csv-datei-buyer-csv/)Käufer / Rechnungsempfänger-bja [items.csv](https://www.zugferdpro.com/csv-datei-items-csv/)Rechnungspositionen, eine Zeile je Position-pja [totals.csv](https://www.zugferdpro.com/totals-csv/)Rechnungskopf, Summen und Umsatzsteuer-Aufschlüsselung-tja [allowances.csv](https://www.zugferdpro.com/csv-datei-allowances-csv/)Zu- und Abschläge auf Rechnungsebene-znur bei Bedarf deliverto.csv / deliverfrom.csvabweichende Liefer- bzw. Versandanschrift-h / -gnur bei Bedarf ### Aufbau der CSV-Dateien - Erste Zeile = Spaltennamen , darunter die Daten. In items.csv folgt eine Zeile je Position, in den anderen Dateien genau eine Datenzeile. - Zuordnung über den Spaltennamen: Groß-/Kleinschreibung und Reihenfolge der Spalten spielen keine Rolle. Nicht benötigte Spalten lassen Sie einfach weg. - Beträge mit Punkt als Dezimaltrennzeichen ( 59.50 ), Datumswerte als JJJJMMTT . - Trennzeichen mit -y angeben (z. B. , oder ; ). Werte, die das Trennzeichen enthalten, in Anführungszeichen setzen. - Zeichensatz mit -c angeben: Standard ist utf8 ; Programme, die Windows-ANSI schreiben (z. B. Delphi 5 bis 2007, VB6), nutzen -c ansi . - Mehrere Steuersätze: In totals.csv stehen bis zu 11 Steuersätze – der erste in den Spalten TAX… , weitere in TAX…1 bis TAX…10 (z. B. TAXBasisAmount1 ). ### Getestetes Minimalbeispiel Eine Rechnung über 10 × 5,00 € netto zu 19 %. Mit diesen vier Dateien erzeugt das SDK ein XML, das der KoSIT-Validator (XRechnung 3.0.2) ohne Fehler und ohne Warnungen annimmt (geprüft am 16.10.2026 mit der Funktion [ImportCSV](https://www.zugferdpro.com/api/importcsv/), die auch zugcmd verwendet). seller.csv ``` Name,personname,Street1,city,phone,email,vat,country,postcode,iban,bic,paymentmeans,paymentdescription,accountname Muster GmbH,Erika Muster,Hauptstr. 1,Hamburg,+49 40 123456,rechnung@muster.example,DE123456789,DE,20095,DE02120300000000202051,BYLADEM1001,58,SEPA-Überweisung,Muster GmbH ``` buyer.csv ``` id,Name,Street1,city,email,country,postcode K-1001,Kunde AG,Marktplatz 5,München,einkauf@kunde.example,DE,80331 ``` items.csv ``` AssignedID,productname,description,quantity,unit,netprice,netbasisquantity,netbasisunit,taxpercent,taxtypecode,taxcategorycode,totalamount ART-100,Papier A4,500 Blatt,10,C62,5.00,1,C62,19,VAT,S,50.00 ``` totals.csv ``` type,currency,invoiceid,invoicedate,DeliveryDate,leitwegid,LineTotalAmount,ChargeTotalAmount,AllowanceTotalAmount,TaxBasisTotalAmount,TaxTotalAmount,GrandTotalAmount,TotalPrepaidAmount,DuePayableAmount,PaymentTerms,duedate,TAXCalculatedAmount,TAXTypeCode,TAXBasisAmount,TAXCategoryCode,TAXRateApplicablePercent 380,EUR,RE-2027-0001,20270104,20270104,K-1001,50.00,0.00,0.00,50.00,9.50,59.50,0.00,59.50,Zahlbar innerhalb 30 Tagen netto,20270203,9.50,VAT,50.00,S,19 ``` ### Die wichtigsten Spalten und ihre Business Terms DateiSpalteBedeutung totals.csvtypeRechnungsart, BT-3 (380 Rechnung, 381 Gutschrift, 875 Abschlagsrechnung Bau) totals.csvinvoiceid / invoicedateRechnungsnummer BT-1 / Rechnungsdatum BT-2 totals.csvcurrencyWährung, BT-5 totals.csvDeliveryDateLeistungsdatum, BT-72 totals.csvleitwegidKäuferreferenz bzw. Leitweg-ID, BT-10 totals.csvPaymentTerms / duedateZahlungsbedingungen BT-20 / Fälligkeitsdatum BT-9 totals.csvLineTotalAmountSumme der Positionen, BT-106 totals.csvAllowanceTotalAmount / ChargeTotalAmountSumme Abschläge BT-107 / Zuschläge BT-108 totals.csvTaxBasisTotalAmountNettobetrag, BT-109 totals.csvTaxTotalAmountUmsatzsteuer gesamt, BT-110 totals.csvGrandTotalAmount / DuePayableAmountBruttobetrag BT-112 / Zahlbetrag BT-115 totals.csvTAXBasisAmount / TAXCalculatedAmountSteuerbasis BT-116 / Steuerbetrag BT-117 je Steuersatz totals.csvTAXCategoryCode / TAXRateApplicablePercentSteuerkategorie BT-118 (S, Z, E, AE, K …) / Steuersatz BT-119 items.csvquantity / unitMenge BT-129 / Mengeneinheit BT-130 (z. B. C62 Stück, H87 Stück, KGM Kilogramm) items.csvnetprice / netbasisquantity / netbasisunitNettopreis BT-146 je Basismenge BT-149 in Einheit BT-150 items.csvtotalamountNettobetrag der Position, BT-131 Alle weiteren Spalten (Bestellnummer, Projekt, Vertrag, Rabatte je Position, globale Artikelnummer …) beschreiben die Seiten der einzelnen Dateien, verlinkt in der Tabelle oben. Für eine gültige XRechnung braucht es außerdem die Käuferreferenz bzw. Leitweg-ID (leitwegid, BT-10), beim Verkäufer einen Kontakt mit Name, Telefon und E-Mail (personname, phone, email) und bei beiden Parteien eine E-Mail-Adresse. ### Summen berechnet Ihre Anwendung zugcmd übernimmt die Summen so, wie sie in totals.csv stehen. Die häufigsten Fehler: - Steuerbasis bei Rabatten: TAXBasisAmount ist der Nettobetrag nach Abschlägen und Zuschlägen dieses Steuersatzes, nicht die Summe der Positionen – siehe BR-S-08, BR-S-09 und BR-CO-17 . - Gerundete Positionen: LineTotalAmount ist die Summe der gerundeten Positionsbeträge (BR-CO-10). - Rundung nur auf den Zahlbetrag: siehe BR-CO-15 und BR-CO-16 . ### zugcmd aus der eigenen Anwendung starten Sie müssen zugcmd nicht von Hand auf der Kommandozeile starten; Ihre Anwendung ruft es selbst auf. Neben zugcmd.exe enthält das Paket zugcmd_wnd.exe, die ohne Konsolenfenster läuft – praktisch für den Aufruf aus Programmen mit Oberfläche. Ein Aufruf für eine Rechnung (in einer Zeile): ``` zugcmd_wnd.exe -s "C:\ERechnung\stamm\seller.csv" -b "C:\ERechnung\RE-2027-0001\buyer.csv" -p "C:\ERechnung\RE-2027-0001\items.csv" -t "C:\ERechnung\RE-2027-0001\totals.csv" -i "C:\ERechnung\RE-2027-0001\RE-2027-0001.pdf" -x "C:\ERechnung\RE-2027-0001\RE-2027-0001.xml" -o "C:\ERechnung\RE-2027-0001\RE-2027-0001_zugferd.pdf" -y "," -c ansi -l IHR-LIZENZSCHLUESSEL ``` Immer vollständige Pfade angeben (mit Laufwerk und Ordner) oder mit -d ein Basisverzeichnis setzen, gegen das bloße Dateinamen aufgelöst werden. Ein bloßer Dateiname ohne -d wird nicht gefunden. Den Erfolg erkennen Sie am Rückgabewert (ExitCode): 0 bedeutet Erfolg, z. B. 57 „Eingabe-PDF nicht gefunden“ oder 59 „XML konnte nicht erstellt werden“. Die vollständige Liste steht auf der [zugcmd-Seite](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). Funktionen wie ShellExecute (Delphi) oder Shell (VB6) liefern den Rückgabewert nicht; nutzen Sie CreateProcess mit GetExitCodeProcess. In VB6 und VBA geht es einfacher mit CreateObject("WScript.Shell").Run(Befehl, 0, True) – ein vollständiges VB6-Beispiel steht in [E-Rechnung aus einer alten VB6-Anwendung](https://www.zugferdpro.com/e-rechnung-aus-vb6-altanwendung-com-oder-csv/). Beispiel für Delphi (ab Version 5): ``` uses Windows, SysUtils; function StarteZugcmd(const Parameter: string): DWORD; var SI: TStartupInfo; PI: TProcessInformation; Cmd: string; begin Result := DWORD(-1); Cmd := '"C:\zugcmd\zugcmd_wnd.exe" ' + Parameter; FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(SI); if CreateProcess(nil, PChar(Cmd), nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForSingleObject(PI.hProcess, INFINITE); // warten, bis zugcmd fertig ist GetExitCodeProcess(PI.hProcess, Result); // 0 = Erfolg CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; end; ``` ### Dateinamen und Mengen - Dateinamen bestimmt Ihre Anwendung mit -x (XML) und -o (PDF), am besten mit der Rechnungsnummer. Ohne Angabe heißen die Dateien OutputXML.xml und OutputPDF.pdf ; eine automatische Nummerierung gibt es nicht. - Viele Rechnungen (z. B. einige hundert pro Tag) sind kein Problem: ein Aufruf je Rechnung. Legen Sie die CSV-Dateien jeder Rechnung in einen eigenen Ordner oder geben Sie ihnen eindeutige Namen, damit sich parallele Aufrufe nicht gegenseitig überschreiben. - Vorhandene Dateien überschreibt zugcmd standardmäßig; mit -f false bleiben sie erhalten. ### Tipp: Zuordnung an einer echten Rechnung ansehen zugcmd arbeitet auch rückwärts: -r rechnung.xml (oder ein ZUGFeRD-PDF) zerlegt eine vorhandene E-Rechnung in genau diese CSV-Dateien. So sehen Sie an einem echten Beispiel, welches Feld in welche Spalte gehört. Das Download-Paket zugcmd.zip ([Downloads](https://www.zugferdpro.com/tooldownloads/)) enthält außerdem Beispiel-CSV-Dateien, bei denen die BT-Nummern direkt in den Werten stehen, zwei komplette Beispielsätze (Überweisung, Bankeinzug) und die readme.txt mit allen Parametern. Wer lieber direkt programmiert, nutzt das SDK über COM: [mit Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/) oder [mit VB6, VB5 und VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Häufige Fragen #### Brauche ich Programmierkenntnisse für das SDK, um zugcmd zu nutzen? Nein. Ihre Anwendung schreibt CSV-Dateien und startet zugcmd mit Parametern. Programmiert wird nur das Schreiben der CSV-Dateien und der Aufruf. #### Gibt es eine Beschreibung der CSV-Spalten? Ja. Jede Datei hat eine eigene Seite mit allen Spalten und Business Terms: seller.csv, buyer.csv, items.csv, totals.csv und allowances.csv. Die Spalten werden über ihren Namen zugeordnet, die Reihenfolge ist beliebig. #### Muss zugcmd auf der Kommandozeile gestartet werden? Nein. Jede Anwendung kann zugcmd als Prozess starten. zugcmd_wnd.exe läuft ohne Konsolenfenster; der Rückgabewert 0 bedeutet Erfolg. #### Wie werden die erzeugten Dateien benannt? So, wie Ihre Anwendung sie mit -x (XML) und -o (PDF) angibt, zum Beispiel nach der Rechnungsnummer. Ohne Angabe heißen sie OutputXML.xml und OutputPDF.pdf. #### Schafft zugcmd 200 Rechnungen am Tag? Ja. Pro Rechnung genügt ein Aufruf. Wichtig ist nur, dass jede Rechnung eigene CSV- und Ausgabedateien hat. #### Verschickt zugcmd die Rechnung auch per E-Mail? Nein. zugcmd erzeugt das XML und die ZUGFeRD-PDF; den Versand übernimmt Ihre Anwendung oder Ihr Mailprogramm. --- ## How do I create e-invoices via CSV and zugcmd from my own application? URL: https://www.zugferdpro.com/en/e-invoices-via-csv-and-zugcmd/ Date: 2026-10-16 Business terms: BT-1, BT-2, BT-3, BT-10, BT-72, BT-106, BT-109, BT-112, BT-115, BT-116, BT-117, BT-5, BT-9, BT-20, BT-107, BT-108, BT-110, BT-118, BT-119, BT-129, BT-130, BT-131, BT-146 In short: Your application – whether Delphi, VB6, Access, COBOL or any other language – writes the invoice data to four CSV files and calls the command-line tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). zugcmd reads the files, creates the e-invoice XML according to EN 16931 (XRechnung 3.0, CII syntax) and embeds it into your existing PDF invoice. The result is a hybrid ZUGFeRD invoice (PDF/A-3) that you send by e-mail as usual. No programming against the SDK is needed. ### The process - Your application creates the PDF invoice as before. - It writes the invoice data to the CSV files (see below). - It starts zugcmd and evaluates the exit code (0 = success). - zugcmd writes the XML and the ZUGFeRD PDF with the embedded XML. - Your application sends the ZUGFeRD PDF by e-mail. zugcmd does not send it. Without an existing PDF, zugcmd can also create the PDF from a Word template (DOCX); this is described on the [zugcmd page](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). ### Which CSV files does zugcmd need? FileContentParameterRequired [seller.csv](https://www.zugferdpro.com/csv-datei-seller-csv/)Seller: name, address, contact, VAT ID, bank details-syes – hardly changes, can stay in place as a master file [buyer.csv](https://www.zugferdpro.com/csv-datei-buyer-csv/)Buyer / invoice recipient-byes [items.csv](https://www.zugferdpro.com/csv-datei-items-csv/)Invoice lines, one row per line-pyes [totals.csv](https://www.zugferdpro.com/totals-csv/)Invoice header, totals and VAT breakdown-tyes [allowances.csv](https://www.zugferdpro.com/csv-datei-allowances-csv/)Charges and allowances at document level-zonly if needed deliverto.csv / deliverfrom.csvdifferent delivery or ship-from address-h / -gonly if needed ### Structure of the CSV files - First row = column names , the data below. items.csv has one row per line; the other files have exactly one data row. - Mapping by column name: upper/lower case and the order of the columns do not matter. Simply leave out columns you do not need. - Amounts with a dot as the decimal separator ( 59.50 ), dates as YYYYMMDD . - Separator: specify it with -y (e.g. , or ; ). Put values that contain the separator in quotes. - Character set: specify it with -c : the default is utf8 ; programs that write Windows ANSI (e.g. Delphi 5 to 2007, VB6) use -c ansi . - Several VAT rates: totals.csv holds up to 11 VAT rates – the first in the columns TAX… , further ones in TAX…1 to TAX…10 (e.g. TAXBasisAmount1 ). ### Tested minimal example An invoice for 10 × EUR 5.00 net at 19 %. With these four files the SDK creates an XML that the KoSIT validator (XRechnung 3.0.2) accepts without errors and without warnings (checked on 16 October 2026 with the function [ImportCSV](https://www.zugferdpro.com/api/importcsv/), which zugcmd also uses). The sample values are German, as in a real German invoice. seller.csv ``` Name,personname,Street1,city,phone,email,vat,country,postcode,iban,bic,paymentmeans,paymentdescription,accountname Muster GmbH,Erika Muster,Hauptstr. 1,Hamburg,+49 40 123456,rechnung@muster.example,DE123456789,DE,20095,DE02120300000000202051,BYLADEM1001,58,SEPA-Überweisung,Muster GmbH ``` buyer.csv ``` id,Name,Street1,city,email,country,postcode K-1001,Kunde AG,Marktplatz 5,München,einkauf@kunde.example,DE,80331 ``` items.csv ``` AssignedID,productname,description,quantity,unit,netprice,netbasisquantity,netbasisunit,taxpercent,taxtypecode,taxcategorycode,totalamount ART-100,Papier A4,500 Blatt,10,C62,5.00,1,C62,19,VAT,S,50.00 ``` totals.csv ``` type,currency,invoiceid,invoicedate,DeliveryDate,leitwegid,LineTotalAmount,ChargeTotalAmount,AllowanceTotalAmount,TaxBasisTotalAmount,TaxTotalAmount,GrandTotalAmount,TotalPrepaidAmount,DuePayableAmount,PaymentTerms,duedate,TAXCalculatedAmount,TAXTypeCode,TAXBasisAmount,TAXCategoryCode,TAXRateApplicablePercent 380,EUR,RE-2027-0001,20270104,20270104,K-1001,50.00,0.00,0.00,50.00,9.50,59.50,0.00,59.50,Zahlbar innerhalb 30 Tagen netto,20270203,9.50,VAT,50.00,S,19 ``` ### The most important columns and their business terms FileColumnMeaning totals.csvtypeInvoice type, BT-3 (380 invoice, 381 credit note, 875 construction partial invoice) totals.csvinvoiceid / invoicedateInvoice number BT-1 / invoice date BT-2 totals.csvcurrencyCurrency, BT-5 totals.csvDeliveryDateDelivery date, BT-72 totals.csvleitwegidBuyer reference or Leitweg-ID, BT-10 totals.csvPaymentTerms / duedatePayment terms BT-20 / due date BT-9 totals.csvLineTotalAmountSum of the lines, BT-106 totals.csvAllowanceTotalAmount / ChargeTotalAmountSum of allowances BT-107 / charges BT-108 totals.csvTaxBasisTotalAmountNet amount, BT-109 totals.csvTaxTotalAmountTotal VAT, BT-110 totals.csvGrandTotalAmount / DuePayableAmountGross amount BT-112 / amount due BT-115 totals.csvTAXBasisAmount / TAXCalculatedAmountTax basis BT-116 / tax amount BT-117 per VAT rate totals.csvTAXCategoryCode / TAXRateApplicablePercentVAT category BT-118 (S, Z, E, AE, K …) / VAT rate BT-119 items.csvquantity / unitQuantity BT-129 / unit of measure BT-130 (e.g. C62 piece, H87 piece, KGM kilogram) items.csvnetprice / netbasisquantity / netbasisunitNet price BT-146 per base quantity BT-149 in unit BT-150 items.csvtotalamountNet amount of the line, BT-131 All further columns (order number, project, contract, allowances per line, global article number …) are described on the pages of the individual files, linked in the table above (German). For a valid XRechnung you also need the buyer reference or Leitweg-ID (leitwegid, BT-10), a seller contact with name, phone and e-mail (personname, phone, email) and an e-mail address for both parties. ### Your application calculates the totals zugcmd takes the totals exactly as they are in totals.csv. The most common errors: - Tax basis with allowances: TAXBasisAmount is the net amount after the allowances and charges of this VAT rate, not the sum of the lines – see BR-S-08, BR-S-09 and BR-CO-17 . - Rounded lines: LineTotalAmount is the sum of the rounded line amounts (BR-CO-10). - Rounding only on the amount due: see BR-CO-15 and BR-CO-16 . ### Starting zugcmd from your own application You do not have to start zugcmd by hand on the command line; your application calls it itself. Besides zugcmd.exe, the package contains zugcmd_wnd.exe, which runs without a console window – handy for calls from programs with a user interface. A call for one invoice (on one line): ``` zugcmd_wnd.exe -s "C:\ERechnung\stamm\seller.csv" -b "C:\ERechnung\RE-2027-0001\buyer.csv" -p "C:\ERechnung\RE-2027-0001\items.csv" -t "C:\ERechnung\RE-2027-0001\totals.csv" -i "C:\ERechnung\RE-2027-0001\RE-2027-0001.pdf" -x "C:\ERechnung\RE-2027-0001\RE-2027-0001.xml" -o "C:\ERechnung\RE-2027-0001\RE-2027-0001_zugferd.pdf" -y "," -c ansi -l YOUR-LICENCE-KEY ``` Always specify full paths (with drive and folder), or set a base directory with -d against which bare file names are resolved. A bare file name without -d is not found. You recognise success by the exit code: 0 means success; examples of errors are 57 "input PDF not found" or 59 "XML could not be created". The complete list is on the [zugcmd page](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). Functions such as ShellExecute (Delphi) or Shell (VB6) do not return the exit code; use CreateProcess with GetExitCodeProcess. In VB6 and VBA it is simpler: CreateObject("WScript.Shell").Run(command, 0, True) waits for zugcmd and returns its exit code. Example for Delphi (version 5 and later): ``` uses Windows, SysUtils; function StarteZugcmd(const Parameter: string): DWORD; var SI: TStartupInfo; PI: TProcessInformation; Cmd: string; begin Result := DWORD(-1); Cmd := '"C:\zugcmd\zugcmd_wnd.exe" ' + Parameter; FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(SI); if CreateProcess(nil, PChar(Cmd), nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForSingleObject(PI.hProcess, INFINITE); // wait until zugcmd has finished GetExitCodeProcess(PI.hProcess, Result); // 0 = success CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; end; ``` ### File names and volumes - File names are set by your application with -x (XML) and -o (PDF), ideally using the invoice number. Without them, the files are called OutputXML.xml and OutputPDF.pdf ; there is no automatic numbering. - Many invoices (e.g. a few hundred per day) are no problem: one call per invoice. Put the CSV files of each invoice in their own folder or give them unique names so that parallel calls do not overwrite each other. - Existing files are overwritten by zugcmd by default; with -f false they are kept. ### Tip: look at the mapping on a real invoice zugcmd also works in reverse: -r invoice.xml (or a ZUGFeRD PDF) splits an existing e-invoice into exactly these CSV files. That way you can see on a real example which field belongs in which column. The download package zugcmd.zip ([downloads](https://www.zugferdpro.com/tooldownloads/)) also contains sample CSV files with the BT numbers written directly into the values, two complete sample sets (credit transfer, direct debit) and the readme.txt with all parameters. If you prefer to program directly, use the SDK via COM: [with Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/) or [with VB6, VB5 and VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Frequently asked questions #### Do I need SDK programming skills to use zugcmd? No. Your application writes CSV files and starts zugcmd with parameters. The only programming needed is writing the CSV files and the call. #### Is there a description of the CSV columns? Yes. Each file has its own page with all columns and business terms: seller.csv, buyer.csv, items.csv, totals.csv and allowances.csv. The columns are mapped by their names; the order is arbitrary. #### Does zugcmd have to be started on the command line? No. Any application can start zugcmd as a process. zugcmd_wnd.exe runs without a console window; exit code 0 means success. #### How are the generated files named? As your application specifies them with -x (XML) and -o (PDF), for example after the invoice number. Without them, they are called OutputXML.xml and OutputPDF.pdf. #### Can zugcmd handle 200 invoices a day? Yes. One call per invoice is enough. It is only important that each invoice has its own CSV and output files. #### Does zugcmd also send the invoice by e-mail? No. zugcmd creates the XML and the ZUGFeRD PDF; sending is done by your application or your e-mail program. --- ## Comment créer des factures électroniques par CSV et zugcmd depuis mon application ? URL: https://www.zugferdpro.com/fr/factures-electroniques-par-csv-et-zugcmd/ Date: 2026-10-16 Business terms: BT-1, BT-2, BT-3, BT-10, BT-72, BT-106, BT-109, BT-112, BT-115, BT-116, BT-117, BT-5, BT-9, BT-20, BT-107, BT-108, BT-110, BT-118, BT-119, BT-129, BT-130, BT-131, BT-146 En bref : votre application – qu'elle soit écrite en Delphi, VB6, Access, COBOL ou tout autre langage – écrit les données de facture dans quatre fichiers CSV et appelle l'outil en ligne de commande [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). zugcmd lit les fichiers, crée le XML de la facture électronique selon EN 16931 (XRechnung 3.0, syntaxe CII) et l'intègre dans votre facture PDF existante. Le résultat est une facture ZUGFeRD hybride (PDF/A-3) que vous envoyez par e-mail comme d'habitude. Aucune programmation avec le SDK n'est nécessaire. ### Le déroulement - Votre application crée la facture PDF comme d'habitude. - Elle écrit les données de facture dans les fichiers CSV (voir ci-dessous). - Elle lance zugcmd et évalue le code retour (0 = succès). - zugcmd écrit le XML et le PDF ZUGFeRD avec le XML intégré. - Votre application envoie le PDF ZUGFeRD par e-mail. zugcmd ne l'envoie pas. Sans PDF existant, zugcmd peut aussi créer le PDF à partir d'un modèle Word (DOCX) ; c'est décrit sur la [page zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). ### De quels fichiers CSV zugcmd a-t-il besoin ? FichierContenuParamètreObligatoire [seller.csv](https://www.zugferdpro.com/csv-datei-seller-csv/)Vendeur : nom, adresse, contact, numéro de TVA, coordonnées bancaires-soui – change rarement, peut rester en place comme fichier de référence [buyer.csv](https://www.zugferdpro.com/csv-datei-buyer-csv/)Acheteur / destinataire de la facture-boui [items.csv](https://www.zugferdpro.com/csv-datei-items-csv/)Lignes de facture, une ligne CSV par ligne de facture-poui [totals.csv](https://www.zugferdpro.com/totals-csv/)En-tête de facture, totaux et ventilation de la TVA-toui [allowances.csv](https://www.zugferdpro.com/csv-datei-allowances-csv/)Charges et remises au niveau du document-zsi nécessaire deliverto.csv / deliverfrom.csvadresse de livraison ou d'expédition différente-h / -gsi nécessaire ### Structure des fichiers CSV - Première ligne = noms de colonnes , les données en dessous. items.csv contient une ligne par ligne de facture ; les autres fichiers ont exactement une ligne de données. - Correspondance par nom de colonne : majuscules/minuscules et ordre des colonnes n'ont pas d'importance. Omettez simplement les colonnes dont vous n'avez pas besoin. - Montants avec un point comme séparateur décimal ( 59.50 ), dates au format AAAAMMJJ . - Séparateur : indiquez-le avec -y (par ex. , ou ; ). Mettez entre guillemets les valeurs qui contiennent le séparateur. - Jeu de caractères : indiquez-le avec -c : la valeur par défaut est utf8 ; les programmes qui écrivent en ANSI Windows (par ex. Delphi 5 à 2007, VB6) utilisent -c ansi . - Plusieurs taux de TVA : totals.csv accepte jusqu'à 11 taux de TVA – le premier dans les colonnes TAX… , les suivants dans TAX…1 à TAX…10 (par ex. TAXBasisAmount1 ). ### Exemple minimal testé Une facture de 10 × 5,00 EUR HT à 19 %. Avec ces quatre fichiers, le SDK crée un XML que le validateur KoSIT (XRechnung 3.0.2) accepte sans erreur ni avertissement (vérifié le 16 octobre 2026 avec la fonction [ImportCSV](https://www.zugferdpro.com/api/importcsv/), que zugcmd utilise également). Les valeurs d'exemple sont en allemand, comme dans une vraie facture allemande. seller.csv ``` Name,personname,Street1,city,phone,email,vat,country,postcode,iban,bic,paymentmeans,paymentdescription,accountname Muster GmbH,Erika Muster,Hauptstr. 1,Hamburg,+49 40 123456,rechnung@muster.example,DE123456789,DE,20095,DE02120300000000202051,BYLADEM1001,58,SEPA-Überweisung,Muster GmbH ``` buyer.csv ``` id,Name,Street1,city,email,country,postcode K-1001,Kunde AG,Marktplatz 5,München,einkauf@kunde.example,DE,80331 ``` items.csv ``` AssignedID,productname,description,quantity,unit,netprice,netbasisquantity,netbasisunit,taxpercent,taxtypecode,taxcategorycode,totalamount ART-100,Papier A4,500 Blatt,10,C62,5.00,1,C62,19,VAT,S,50.00 ``` totals.csv ``` type,currency,invoiceid,invoicedate,DeliveryDate,leitwegid,LineTotalAmount,ChargeTotalAmount,AllowanceTotalAmount,TaxBasisTotalAmount,TaxTotalAmount,GrandTotalAmount,TotalPrepaidAmount,DuePayableAmount,PaymentTerms,duedate,TAXCalculatedAmount,TAXTypeCode,TAXBasisAmount,TAXCategoryCode,TAXRateApplicablePercent 380,EUR,RE-2027-0001,20270104,20270104,K-1001,50.00,0.00,0.00,50.00,9.50,59.50,0.00,59.50,Zahlbar innerhalb 30 Tagen netto,20270203,9.50,VAT,50.00,S,19 ``` ### Les colonnes les plus importantes et leurs termes métier FichierColonneSignification totals.csvtypeType de facture, BT-3 (380 facture, 381 avoir, 875 facture partielle de travaux) totals.csvinvoiceid / invoicedateNuméro de facture BT-1 / date de facture BT-2 totals.csvcurrencyDevise, BT-5 totals.csvDeliveryDateDate de livraison, BT-72 totals.csvleitwegidRéférence acheteur ou Leitweg-ID, BT-10 totals.csvPaymentTerms / duedateConditions de paiement BT-20 / date d'échéance BT-9 totals.csvLineTotalAmountSomme des lignes, BT-106 totals.csvAllowanceTotalAmount / ChargeTotalAmountSomme des remises BT-107 / des charges BT-108 totals.csvTaxBasisTotalAmountMontant HT, BT-109 totals.csvTaxTotalAmountTotal de la TVA, BT-110 totals.csvGrandTotalAmount / DuePayableAmountMontant TTC BT-112 / montant à payer BT-115 totals.csvTAXBasisAmount / TAXCalculatedAmountBase d'imposition BT-116 / montant de TVA BT-117 par taux totals.csvTAXCategoryCode / TAXRateApplicablePercentCatégorie de TVA BT-118 (S, Z, E, AE, K …) / taux de TVA BT-119 items.csvquantity / unitQuantité BT-129 / unité de mesure BT-130 (par ex. C62 pièce, H87 pièce, KGM kilogramme) items.csvnetprice / netbasisquantity / netbasisunitPrix net BT-146 par quantité de base BT-149 dans l'unité BT-150 items.csvtotalamountMontant net de la ligne, BT-131 Toutes les autres colonnes (numéro de commande, projet, contrat, remises par ligne, numéro d'article global …) sont décrites sur les pages de chaque fichier, liées dans le tableau ci-dessus (en allemand). Pour une XRechnung valide, il vous faut en plus la référence acheteur ou la Leitweg-ID (leitwegid, BT-10), un contact vendeur avec nom, téléphone et e-mail (personname, phone, email) ainsi qu'une adresse e-mail pour les deux parties. ### Votre application calcule les totaux zugcmd reprend les totaux exactement tels qu'ils figurent dans totals.csv. Les erreurs les plus fréquentes : - Base d'imposition avec remises : TAXBasisAmount est le montant HT après les remises et charges de ce taux de TVA, et non la somme des lignes – voir BR-S-08, BR-S-09 et BR-CO-17 . - Lignes arrondies : LineTotalAmount est la somme des montants de ligne arrondis (BR-CO-10). - Arrondi uniquement sur le montant à payer : voir BR-CO-15 et BR-CO-16 . ### Lancer zugcmd depuis votre application Vous n'avez pas à lancer zugcmd à la main en ligne de commande ; votre application l'appelle elle-même. Outre zugcmd.exe, le paquet contient zugcmd_wnd.exe, qui s'exécute sans fenêtre de console – pratique pour les appels depuis des programmes avec interface graphique. Un appel pour une facture (sur une seule ligne) : ``` zugcmd_wnd.exe -s "C:\ERechnung\stamm\seller.csv" -b "C:\ERechnung\RE-2027-0001\buyer.csv" -p "C:\ERechnung\RE-2027-0001\items.csv" -t "C:\ERechnung\RE-2027-0001\totals.csv" -i "C:\ERechnung\RE-2027-0001\RE-2027-0001.pdf" -x "C:\ERechnung\RE-2027-0001\RE-2027-0001.xml" -o "C:\ERechnung\RE-2027-0001\RE-2027-0001_zugferd.pdf" -y "," -c ansi -l VOTRE-CLE-DE-LICENCE ``` Indiquez toujours des chemins complets (avec lecteur et dossier), ou définissez avec -d un répertoire de base par rapport auquel les noms de fichiers seuls sont résolus. Un nom de fichier seul sans -d n'est pas trouvé. Le succès se reconnaît au code retour : 0 signifie succès ; exemples d'erreurs : 57 « PDF d'entrée introuvable » ou 59 « le XML n'a pas pu être créé ». La liste complète figure sur la [page zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). Des fonctions comme ShellExecute (Delphi) ou Shell (VB6) ne renvoient pas le code retour ; utilisez CreateProcess avec GetExitCodeProcess. En VB6 et VBA, c’est plus simple : CreateObject("WScript.Shell").Run(commande, 0, True) attend la fin de zugcmd et renvoie son code retour. Exemple pour Delphi (à partir de la version 5) : ``` uses Windows, SysUtils; function StarteZugcmd(const Parameter: string): DWORD; var SI: TStartupInfo; PI: TProcessInformation; Cmd: string; begin Result := DWORD(-1); Cmd := '"C:\zugcmd\zugcmd_wnd.exe" ' + Parameter; FillChar(SI, SizeOf(SI), 0); SI.cb := SizeOf(SI); if CreateProcess(nil, PChar(Cmd), nil, nil, False, 0, nil, nil, SI, PI) then begin WaitForSingleObject(PI.hProcess, INFINITE); // attendre la fin de zugcmd GetExitCodeProcess(PI.hProcess, Result); // 0 = succès CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; end; ``` ### Noms de fichiers et volumes - Les noms de fichiers sont définis par votre application avec -x (XML) et -o (PDF), idéalement d'après le numéro de facture. Sans ces paramètres, les fichiers s'appellent OutputXML.xml et OutputPDF.pdf ; il n'y a pas de numérotation automatique. - De nombreuses factures (par ex. quelques centaines par jour) ne posent pas de problème : un appel par facture. Placez les fichiers CSV de chaque facture dans un dossier propre ou donnez-leur des noms uniques afin que des appels parallèles ne s'écrasent pas. - Les fichiers existants sont écrasés par défaut ; avec -f false , ils sont conservés. ### Astuce : examiner la correspondance sur une vraie facture zugcmd fonctionne aussi dans l'autre sens : -r invoice.xml (ou un PDF ZUGFeRD) décompose une facture électronique existante exactement en ces fichiers CSV. Vous voyez ainsi sur un exemple réel quel champ va dans quelle colonne. Le paquet de téléchargement zugcmd.zip ([téléchargements](https://www.zugferdpro.com/tooldownloads/)) contient aussi des fichiers CSV d'exemple avec les numéros BT inscrits directement dans les valeurs, deux jeux d'exemple complets (virement, prélèvement) et le readme.txt avec tous les paramètres. Si vous préférez programmer directement, utilisez le SDK via COM : [avec Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/) ou [avec VB6, VB5 et VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Questions fréquentes #### Faut-il savoir programmer avec le SDK pour utiliser zugcmd ? Non. Votre application écrit des fichiers CSV et lance zugcmd avec des paramètres. La seule programmation nécessaire est l'écriture des fichiers CSV et l'appel. #### Existe-t-il une description des colonnes CSV ? Oui. Chaque fichier a sa propre page avec toutes les colonnes et tous les termes métier : seller.csv, buyer.csv, items.csv, totals.csv et allowances.csv. Les colonnes sont associées par leur nom ; l'ordre est libre. #### Faut-il lancer zugcmd en ligne de commande ? Non. Toute application peut lancer zugcmd comme processus. zugcmd_wnd.exe s'exécute sans fenêtre de console ; le code retour 0 signifie succès. #### Comment les fichiers générés sont-ils nommés ? Comme votre application les indique avec -x (XML) et -o (PDF), par exemple d'après le numéro de facture. Sans ces paramètres, ils s'appellent OutputXML.xml et OutputPDF.pdf. #### zugcmd peut-il traiter 200 factures par jour ? Oui. Un appel par facture suffit. Il importe seulement que chaque facture ait ses propres fichiers CSV et fichiers de sortie. #### zugcmd envoie-t-il aussi la facture par e-mail ? Non. zugcmd crée le XML et le PDF ZUGFeRD ; l'envoi est assuré par votre application ou votre programme de messagerie. --- ## F: Warum meldet der Validator BR-S-08, BR-S-09 und BR-CO-17, wenn die Rechnung einen Rabatt hat? URL: https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/ Date: 2026-10-15 Business terms: BT-116, BT-117, BT-92, BT-106, BT-107, BT-109, BT-110, BT-112, BT-114, BT-115, BT-119, BG-20, BG-23 SDK methods: AddProduct_Comfort, AddTradeAllowanceCharge, AddTradeTax, WriteTotals Kurz: Die drei Regeln BR-S-08, BR-S-09 und BR-CO-17 melden zusammen fast immer denselben Fehler: In der Umsatzsteuer-Aufschlüsselung (BG-23) steht als Basisbetrag (BT-116) die Summe der Positionen statt des Nettobetrags nach Rabatt. Richtig ist: Summe der Positionen dieses Steuersatzes − Rabatte + Zuschläge dieses Steuersatzes. Darauf wird die Steuer (BT-117) berechnet. ### Die drei Regeln - BR-S-08: Der Basisbetrag je Steuersatz (BT-116) muss gleich der Summe der Positionsbeträge mit diesem Satz minus der Rabatte (BT-92) plus der Zuschläge (BT-99) mit diesem Satz sein. - BR-S-09: Der Steuerbetrag (BT-117) muss Basisbetrag × Steuersatz (BT-119) sein, kaufmännisch auf 2 Stellen gerundet. - BR-CO-17: dieselbe Rechnung (Basis × Satz = Steuer) als allgemeine Regel für alle Steuerkategorien. Steht als Basis die Summe der Positionen, passt die Basis nicht zum Rabatt (BR-S-08) – und der eigentlich richtige Steuerbetrag passt nicht mehr zur falschen Basis (BR-S-09, BR-CO-17). Deshalb kommen die drei Meldungen immer zusammen. ### Beispiel: 20 % Rabatt auf zwei von drei Positionen FeldFalschRichtig Summe der Positionen (BT-106)105.05105.05 (67,23 + 16,81 + 21,01) Rabatt (BT-92 / BT-107)16.8116.81 (20 % von 84,04) Nettobetrag (BT-109)88.2488.24 Basisbetrag der Aufschlüsselung (BT-116)105.0588.24 Steuer (BT-117 / BT-110)16.7716.77 (88,24 × 19 %) Bruttobetrag (BT-112)105.01105.01 Rundungsbetrag (BT-114)-0.01-0.01 Zahlbetrag (BT-115)105.00105.00 Nur ein einziger Wert ist falsch – und genau der erzeugt alle drei Meldungen. Bei nur einem Steuersatz ist der Basisbetrag der Aufschlüsselung immer gleich dem Nettobetrag (BT-109). ### Im Aloaha ZUGFeRD SDK ``` ' Positionen (Positionsbeträge bereits auf 2 Stellen gerundet) alo.AddProduct_Comfort("1", "", "A-1", "1", "H87", "Miete Gerät", "", "", "EUR", "", "H87", _ False, "", "", "", "67.23", "EUR", "1", "H87", "VAT", "S", "19.00", "", "67.23", "EUR", "", "") alo.AddProduct_Comfort("2", "", "A-2", "1", "H87", "Miete Monitor", "", "", "EUR", "", "H87", _ False, "", "", "", "16.81", "EUR", "1", "H87", "VAT", "S", "19.00", "", "16.81", "EUR", "", "") alo.AddProduct_Comfort("3", "nicht rabattfähig", "A-3", "1", "H87", "Zusatzmodul", "", "", "EUR", "", "H87", _ False, "", "", "", "21.01", "EUR", "1", "H87", "VAT", "S", "19.00", "", "21.01", "EUR", "", "") ' 20 % Rabatt auf die Positionen 1 und 2 (Basis 84,04) – BG-20 alo.AddTradeAllowanceCharge(False, "84.04", "EUR", "16.81", "EUR", "VAT", "S", "19.00", "Rabatt", "20", "95") ' Umsatzsteuer-Aufschlüsselung: Basis = 105,05 - 16,81 = 88,24 (NICHT 105,05) alo.AddTradeTax("16.77", "EUR", "88.24", "EUR", "VAT", "S", "19.00") ' Summen: Positionen, Brutto, Zahlbetrag, Netto, Steuer, Rabatte, gezahlt, Rundung, Zuschläge alo.WriteTotals("105.05", "105.01", "105.00", "88.24", "16.77", "16.81", "0.00", "-0.01", "0.00") ``` Der dritte Parameter von [AddTradeTax](https://www.zugferdpro.com/api/addtradetax/) ist der Basisbetrag (BT-116), der erste der Steuerbetrag (BT-117). Wir haben beide Varianten mit dem SDK erzeugt und mit dem KoSIT-Validator (XRechnung-Konfiguration 3.0.2) geprüft: Mit 105,05 als Basis meldet er genau BR-CO-17, BR-S-08 und BR-S-09; mit 88,24 wird die Rechnung ohne Fehler und Warnungen angenommen (Stand 15.10.2026). ### Mehrere Steuersätze Die Regel gilt je Steuersatz: Für jeden Satz ein eigener AddTradeTax-Aufruf, Basis = Positionen mit diesem Satz − Rabatte mit diesem Satz + Zuschläge mit diesem Satz. Ein Rabatt oder Zuschlag auf Rechnungsebene muss deshalb immer eine Steuerkategorie und einen Steuersatz haben (siehe [Abschläge und Zuschläge mit Prozentsatz und Grundcode](https://www.zugferdpro.com/abschlaege-und-zuschlaege-mit-prozentsatz-und-grundcode-bt-94-bt-98-bt-101-bt-105/)). Die Summe aller Basisbeträge ergibt den Nettobetrag (BT-109), die Summe aller Steuerbeträge die Umsatzsteuer (BT-110). ### Verwandte Fehler - BR-CO-10: Die Summe der Positionen (BT-106) muss aus den gerundeten Positionsbeträgen gebildet werden – nicht aus ungerundeten Preisen. - BR-CO-15 / BR-CO-16: Rundung nur auf den Zahlbetrag, nie auf den Bruttobetrag: BR-CO-15 und BR-CO-16 beim Rundungsbetrag . - Rabatte gehören in einen Rabatt auf Rechnungsebene (BG-20), nicht in den Rundungsbetrag. Ihre Rechnung prüfen: [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) Verwandte Fehler: Hat der Nachlass eine andere Steuerkategorie als die Positionen (z. B. S statt AE bei § 13b), meldet der Validator BR-S-01, BR-S-06 oder BR-AE-08 – siehe [BR-S-01, BR-S-06 und BR-AE-08 beim Nachlass](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-01-br-s-06-oder-br-ae-08-beim-nachlass/). ### Häufige Fragen #### Was bedeutet BR-S-08? Der Basisbetrag einer Steuerkategorie S (BT-116) muss gleich der Summe der Positionsbeträge mit diesem Steuersatz minus Rabatte plus Zuschläge mit diesem Steuersatz sein. #### Was bedeuten BR-S-09 und BR-CO-17? Der Steuerbetrag der Aufschlüsselung (BT-117) muss Basisbetrag (BT-116) × Steuersatz sein, auf 2 Stellen gerundet. Ist die Basis falsch, passt die Steuer nicht mehr – deshalb erscheinen die Meldungen meist zusammen mit BR-S-08. #### Ist die Steuerbasis die Summe der Positionen oder der Betrag nach Rabatt? Der Betrag nach Rabatt (und nach Zuschlägen). Bei nur einem Steuersatz ist sie gleich dem Nettobetrag der Rechnung (BT-109). #### Welcher Parameter von AddTradeTax ist die Steuerbasis? Der dritte Parameter (BasisAmount, BT-116). Der erste Parameter ist der Steuerbetrag (CalculatedAmount, BT-117). --- ## ZUGFeRD und XRechnung mit Delphi erstellen – Late und Early Binding (ab Delphi 5) URL: https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/ Date: 2026-10-15 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 SDK methods: ActualDeliveryDate_102, AddPaymentMeans, AddProduct_Comfort, AddTradePaymentTerms, AddTradeTax, BuyerAddressLine1, BuyerCity, BuyerCountry, BuyerName, BuyerPostCode, CreateInvoiceObject, Document_TypeINT, Last_Error, Licensekey, MergeXMLIntoPDF, SaveXML, WriteSeller, WriteTotals, ZUGFeRD_Profile Kurz: Delphi-Anwendungen – auch ältere mit Delphi 5 oder Delphi 7 – erzeugen E-Rechnungen nach EN 16931 (ZUGFeRD 2.x, Factur-X, XRechnung) über die COM-Schnittstelle des Aloaha ZUGFeRD SDK. Eine Umstellung der Delphi-Version ist nicht nötig. Es gibt zwei Wege: Late Binding mit CreateOleObject('Aloaha_ZUGFeRD.XML') ohne Import, oder Early Binding über die mitgelieferte Typbibliothek Aloaha_ZUGFeRD.tlb. Ihr Programm erzeugt die PDF-Rechnung wie bisher; das SDK schreibt das XML und bettet es in das PDF ein (hybride ZUGFeRD-Rechnung, PDF/A-3). ### Late oder Early Binding? Late BindingEarly Binding Objekt anlegenCreateOleObject('Aloaha_ZUGFeRD.XML')CoXML.Create aus der importierten Unit Typbibliothek importierenneinja, einmalig (Aloaha_ZUGFeRD.tlb) Codevervollständigung in der IDEneinja Prüfung von Namen und Parameternzur Laufzeitbeim Kompilieren Optionale Parameteram Ende weglassenin Delphi 5 alle angeben Registrierung der DLLin beiden Fällen nötig – übernimmt das SDK-Setup Für den schnellen Einstieg und für kleine Anpassungen bestehender Programme ist Late Binding der einfachere Weg. Wer viel mit dem SDK programmiert, profitiert von Early Binding. ### Voraussetzungen - Windows mit .NET Framework 4.7.2 oder neuer. - Aloaha ZUGFeRD SDK von der Download-Seite . Das SDK-Setup (MSI) registriert die COM-Schnittstelle für 32 und 64 Bit. - Manuelle Verteilung ohne Setup: die DLL mit dem Regasm passender Bitbreite registrieren, als Administrator. Delphi 5 bis Delphi XE erzeugen 32-Bit-Programme; dafür gilt der Regasm aus C:\Windows\Microsoft.NET\Framework\v4.0.30319\ (nicht Framework64 ): ``` regasm /codebase Aloaha_ZUGFeRD.dll ``` Welche Dateien dazugehören, beschreibt Bibliotheken für Delphi registrieren . - COM-Selbsttest: Das Paket zugferdbinaries.zip enthält das Skript zugferd_com_test.vbs . Es prüft Registrierung und Bitbreite und legt das Objekt testweise an; für den 32-Bit-Test auf 64-Bit-Windows mit C:\Windows\SysWOW64\cscript.exe starten. - Lizenzschlüssel: Eine kostenlose Testlizenz mit vollem Funktionsumfang erhalten Sie per Mail an info@aloaha.com. ### Schritt für Schritt - SDK installieren (oder die DLL registrieren, siehe oben). - Objekt anlegen, Lizenzschlüssel und Profil setzen. - Rechnungskopf, Verkäufer, Käufer und Zahlungsangaben setzen. - Positionen in einer Schleife hinzufügen ( AddProduct_Comfort ). - Umsatzsteuer-Aufschlüsselung je Steuersatz ( AddTradeTax ) und Summen ( WriteTotals ) setzen. - XML speichern ( SaveXML ) und in die vorhandene PDF-Rechnung einbetten ( MergeXMLIntoPDF ). - Die erste Rechnung mit einem Validator prüfen – siehe Wie prüfe ich meine XRechnung vor dem Versand? ### Beträge immer mit Dezimalpunkt Das SDK erwartet Beträge als Text mit Punkt als Dezimaltrennzeichen (59.50). Bei deutscher Windows-Einstellung würde Delphi ein Komma schreiben. Diese Hilfsfunktion nutzen beide Beispiele: ``` // Delphi 5 bis 2010 function Betrag(Wert: Double): string; begin Result := StringReplace(FormatFloat('0.00', Wert), DecimalSeparator, '.', []); end; ``` ### Variante 1: Late Binding mit CreateOleObject ``` uses ComObj; procedure ErzeugeERechnung_LateBinding; var alo: OleVariant; begin alo := CreateOleObject('Aloaha_ZUGFeRD.XML'); alo.Licensekey := 'IHR-LIZENZSCHLUESSEL'; alo.ZUGFeRD_Profile := 1; // 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED // Rechnungskopf: Nummer (BT-1), Text, Datum (BT-2), Datumsformat, Name, Sprache, Währung (BT-5) alo.CreateInvoiceObject('RE-2027-0001', 'Rechnung gemäß Bestellung', '20270104', '102', '', 'DE', 'EUR'); alo.Document_TypeINT := 380; // BT-3: 380 = Rechnung, 381 = Gutschrift alo.ActualDeliveryDate_102 := '20270104'; // BT-72: Leistungsdatum // Verkäufer mit USt-ID (BT-31) alo.WriteSeller('Muster GmbH', '20095', 'Hamburg', 'Hauptstr. 1', '', 'DE', 'DE123456789'); // Käufer alo.BuyerName := 'Kunde AG'; alo.BuyerAddressLine1 := 'Marktplatz 5'; alo.BuyerPostCode := '80331'; alo.BuyerCity := 'München'; alo.BuyerCountry := 'DE'; // Zahlung: 58 = SEPA-Überweisung (BT-81) alo.AddPaymentMeans(58, 'SEPA-Überweisung', 'DE02120300000000202051', 'Muster GmbH', '', 'BYLADEM1001'); alo.AddTradePaymentTerms('Zahlbar innerhalb 30 Tagen netto'); // Position (BG-25): 10 Stück à 5,00 EUR, 19 % alo.AddProduct_Comfort(1, '', 'ART-100', '10.00', 'C62', 'Papier A4', '500 Blatt', '', 'EUR', '', 'C62', False, '', '', '', Betrag(5.00), 'EUR', '1.00', 'C62', 'VAT', 'S', '19.00', '', Betrag(50.00), 'EUR', '', ''); // Umsatzsteuer-Aufschlüsselung (BG-23): Steuer, Währung, Basis, Währung, Art, Kategorie, Satz alo.AddTradeTax(Betrag(9.50), 'EUR', Betrag(50.00), 'EUR', 'VAT', 'S', '19.00'); // Summen (BG-22): Positionen, Brutto, Zahlbetrag, Netto, Steuer alo.WriteTotals(Betrag(50.00), Betrag(59.50), Betrag(59.50), Betrag(50.00), Betrag(9.50)); // XML speichern und in die vorhandene PDF-Rechnung einbetten if alo.SaveXML('C:\Rechnungen\RE-2027-0001.xml') then alo.MergeXMLIntoPDF('C:\Rechnungen\RE-2027-0001.xml', 'C:\Rechnungen\RE-2027-0001.pdf', 'C:\Rechnungen\RE-2027-0001_zugferd.pdf', True, '', 'IHR-LIZENZSCHLUESSEL') else ShowMessage(alo.Last_Error); end; ``` In der Praxis ersetzen Sie die festen Werte durch die Felder Ihrer Rechnungstabelle und rufen AddProduct_Comfort in einer Schleife über die Positionen auf. Für eine XRechnung an Behörden setzen Sie zusätzlich alo.isKOSIT := True und alo.LeitwegID. ### Variante 2: Early Binding über die Typbibliothek Die Typbibliothek Aloaha_ZUGFeRD.tlb liegt dem SDK bei. Sie müssen sie nicht selbst erzeugen; bei Bedarf geht das mit regasm /codebase Aloaha_ZUGFeRD.dll /tlb:Aloaha_ZUGFeRD.tlb. - In Delphi 5: Projekt > Typbibliothek importieren > „Aloaha ZUGFeRD Toolkit“ wählen > Unit anlegen . Delphi erzeugt Aloaha_ZUGFeRD_TLB.pas und zusätzlich mscorlib_TLB.pas . - Meldet der Compiler in der erzeugten Unit Fehler zu _SetIUnknownProp , löschen Sie diese Zeilen. - Die Unit in die uses -Klausel aufnehmen. Die Rechnungsklasse heißt XML , ihre Schnittstelle _XML ; angelegt wird sie mit CoXML.Create . Prüfen Sie die Namen bitte in der erzeugten Unit. Delphi 5 übernimmt die Standardwerte optionaler Parameter aus der Typbibliothek nicht zuverlässig. Geben Sie deshalb alle Parameter an: ``` uses ComObj, Aloaha_ZUGFeRD_TLB; procedure ErzeugeERechnung_EarlyBinding; var alo: _XML; Standard: TOleEnum; begin alo := CoXML.Create; alo.Licensekey := 'IHR-LIZENZSCHLUESSEL'; alo.ZUGFeRD_Profile := 1; // 1 = EN 16931 (COMFORT) alo.CreateInvoiceObject('RE-2027-0001', 'Rechnung gemäß Bestellung', '20270104', '102', '', 'DE', 'EUR'); alo.Document_TypeINT := 380; alo.ActualDeliveryDate_102 := '20270104'; // Verkäufer: Name, PLZ, Ort, Straße, Straße 2, Land, USt-ID, Straße 3 alo.WriteSeller('Muster GmbH', '20095', 'Hamburg', 'Hauptstr. 1', '', 'DE', 'DE123456789', ''); alo.BuyerName := 'Kunde AG'; alo.BuyerAddressLine1 := 'Marktplatz 5'; alo.BuyerPostCode := '80331'; alo.BuyerCity := 'München'; alo.BuyerCountry := 'DE'; // Zahlung: Art, Text, IBAN, Kontoinhaber, Konto-ID, BIC, BLZ, Bank, // Lastschrift, Mandat, Gläubiger-ID alo.AddPaymentMeans(58, 'SEPA-Überweisung', 'DE02120300000000202051', 'Muster GmbH', '', 'BYLADEM1001', '', '', False, '', ''); alo.AddTradePaymentTerms('Zahlbar innerhalb 30 Tagen netto', '', '', '', '', '', '', '', ''); alo.AddProduct_Comfort(1, '', 'ART-100', '10.00', 'C62', 'Papier A4', '500 Blatt', '', 'EUR', '', 'C62', False, '', '', '', Betrag(5.00), 'EUR', '1.00', 'C62', 'VAT', 'S', '19.00', '', Betrag(50.00), 'EUR', '', ''); // 7 Pflicht- und 5 optionale Parameter alo.AddTradeTax(Betrag(9.50), 'EUR', Betrag(50.00), 'EUR', 'VAT', 'S', '19.00', '', '', '', '', ''); // Positionen, Brutto, Zahlbetrag, Netto, Steuer, Rabatte, gezahlt, Rundung, Zuschläge alo.WriteTotals(Betrag(50.00), Betrag(59.50), Betrag(59.50), Betrag(50.00), Betrag(9.50), '0.00', '0.00', '0.00', '0.00'); Standard := 2; // 2 = ZUGFeRD 2.x / Factur-X / XRechnung if alo.SaveXML('C:\Rechnungen\RE-2027-0001.xml', 'IHR-LIZENZSCHLUESSEL', Standard) then alo.MergeXMLIntoPDF('C:\Rechnungen\RE-2027-0001.xml', 'C:\Rechnungen\RE-2027-0001.pdf', 'C:\Rechnungen\RE-2027-0001_zugferd.pdf', True, '', 'IHR-LIZENZSCHLUESSEL', '', '', '', '') else ShowMessage(alo.Last_Error); end; ``` Die Reihenfolge der Methoden in der COM-Schnittstelle bleibt seit Version 10 unverändert; neue Funktionen kommen nur am Ende hinzu. Eine einmal importierte Unit funktioniert daher auch mit neueren SDK-Versionen weiter. ### Überladene Methoden heißen in COM anders COM kennt keine Überladungen. Gibt es eine Methode in .NET mehrfach, erhält die zweite Variante in Delphi das Suffix _2. Für Delphi wichtig: Name in DelphiParameter WriteTotalsBeträge als Text ('59.50') WriteTotals_2Beträge als Double AddProduct_ComfortPositionsnummer als Zahl AddProduct_Comfort_2Positionsnummer als Text (z. B. '1.1') AddPaymentMeansZahlungsart als Zahl (UNTDID 4461, z. B. 58) AddPaymentMeans_2Zahlungsart als Text ('58') Aufzählungen wie das Profil oder die Zahlungsart übergeben Sie in Delphi als Zahl. Für die Rechnungsart (BT-3) gibt es dafür eigens Document_TypeINT, siehe [Rechnung anlegen und Rechnungstyp (BT-3)](https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/). ### Neuere Delphi-Versionen - Delphi 2009 und neuer: string ist Unicode; Umlaute gehen ohne Umweg an das SDK. Der Code bleibt gleich. - Ab Delphi XE: Die globale Variable DecimalSeparator ist veraltet. Nutzen Sie TFormatSettings : ``` function Betrag(Wert: Double): string; var FS: TFormatSettings; begin FS := TFormatSettings.Create; FS.DecimalSeparator := '.'; Result := FormatFloat('0.00', Wert, FS); end; ``` - 64-Bit-Programme (ab Delphi XE2): Die DLL muss auch für 64 Bit registriert sein. Das SDK-Setup erledigt beides; bei manueller Registrierung den Regasm aus Framework64 verwenden. ### Typische Fehler MeldungUrsacheLösung „Ungültige Klassenzeichenfolge“Die COM-Klasse ist nicht registriert.SDK-Setup ausführen oder regasm /codebase als Administrator. „Klasse nicht registriert“Registriert nur für die andere Bitbreite, z. B. 64 Bit für ein 32-Bit-Programm.Mit dem passenden Regasm registrieren (Framework für 32 Bit). „Unbekannter Name“Tippfehler oder die überladene Variante heißt anders (_2).Namen prüfen; Early Binding zeigt solche Fehler schon beim Kompilieren. „Typenkonflikt“Text, wo das SDK eine Zahl erwartet (oder umgekehrt).Parametertyp der Variante prüfen, siehe Tabelle oben. Validator: BR-CO-10, BR-S-08, BR-CO-17Summen passen nicht zu den Positionen oder zur Steuerbasis.Steuerbasis = Netto nach Rabatt, siehe [BR-S-08, BR-S-09 und BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). Liefert SaveXML False, steht der Grund in Last_Error. ### Alternative ohne COM: zugcmd Soll der Delphi-Code möglichst unverändert bleiben, schreibt Ihr Programm die Rechnungsdaten als CSV-Datei und ruft das Kommandozeilenwerkzeug [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) auf, zum Beispiel per ShellExecute. zugcmd erzeugt daraus ZUGFeRD, Factur-X oder XRechnung und bettet das XML in Ihr PDF ein. Schritt für Schritt mit getesteten Beispieldateien, Aufruf aus der eigenen Anwendung und Dateinamen: [E-Rechnungen per CSV und zugcmd aus der eigenen Anwendung erstellen](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). Alle Aufrufe im Detail mit Rabatten und mehreren Steuersätzen: [Schnellstart mit VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) – die Methoden und Parameter sind in Delphi dieselben. Dieselbe Anleitung für Visual Basic: [ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Häufige Fragen #### Kann ich ZUGFeRD-Rechnungen mit Delphi 5 erstellen? Ja. Das Aloaha ZUGFeRD SDK hat eine COM-Schnittstelle, die Delphi 5 per CreateOleObject('Aloaha_ZUGFeRD.XML') oder über die mitgelieferte Typbibliothek nutzt. Eine neuere Delphi-Version ist nicht nötig. #### Brauche ich einen Import der Typbibliothek? Nein, nicht für Late Binding. Der Import (Early Binding) bringt Codevervollständigung und Prüfung beim Kompilieren. Registriert werden muss die DLL in beiden Fällen; das übernimmt das SDK-Setup. #### Funktioniert das auch mit Delphi 7, XE oder Delphi 12? Ja, der Weg über COM ist derselbe. Ab Delphi XE nutzen Sie für den Dezimalpunkt TFormatSettings, und 64-Bit-Programme brauchen die 64-Bit-Registrierung. #### Kann ich meine bestehende PDF-Rechnung aus Delphi weiter verwenden? Ja. MergeXMLIntoPDF bettet das XML in Ihre vorhandene PDF-Rechnung ein und erzeugt daraus eine hybride ZUGFeRD-Rechnung (PDF/A-3). #### Kann ich mit Delphi auch eine reine XRechnung erzeugen? Ja. Setzen Sie isKOSIT := True und die Leitweg-ID und speichern Sie nur das XML mit SaveXML. #### Warum heißt eine Methode in Delphi plötzlich WriteTotals_2? COM kennt keine Überladungen. Die zweite .NET-Variante einer Methode erhält das Suffix _2. WriteTotals erwartet Beträge als Text, WriteTotals_2 als Double. --- ## ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen – Late und Early Binding URL: https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/ Date: 2026-10-15 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 SDK methods: ActualDeliveryDate_102, AddPaymentMeans, AddProduct_Comfort, AddTradePaymentTerms, AddTradeTax, BuyerAddressLine1, BuyerCity, BuyerCountry, BuyerName, BuyerPostCode, CreateInvoiceObject, Document_TypeINT, Last_Error, Licensekey, MergeXMLIntoPDF, SaveXML, WriteSeller, WriteTotals, ZUGFeRD_Profile Kurz: Anwendungen in Visual Basic 6, Visual Basic 5 und VBA (Access, Excel, Word) erzeugen E-Rechnungen nach EN 16931 (ZUGFeRD 2.x, Factur-X, XRechnung) über die COM-Schnittstelle des Aloaha ZUGFeRD SDK. Eine Migration nach .NET ist dafür nicht nötig. Es gibt zwei Wege: Late Binding mit CreateObject("Aloaha_ZUGFeRD.XML") ohne Verweis, oder Early Binding mit einem Verweis auf die Typbibliothek „Aloaha ZUGFeRD Toolkit“. Ihr Programm erzeugt die PDF-Rechnung wie bisher; das SDK schreibt das XML und bettet es in das PDF ein (hybride ZUGFeRD-Rechnung, PDF/A-3). Lange nicht mehr in VB6 programmiert? Der Vergleich [E-Rechnung aus einer alten VB6-Anwendung: COM oder CSV und zugcmd?](https://www.zugferdpro.com/e-rechnung-aus-vb6-altanwendung-com-oder-csv/) zeigt auch den Weg ohne SDK-Programmierung. ### Late oder Early Binding? Late BindingEarly Binding Objekt anlegenSet alo = CreateObject("Aloaha_ZUGFeRD.XML")Set alo = New Aloaha_ZUGFeRD.XML Verweis im Projektneinja, „Aloaha ZUGFeRD Toolkit“ IntelliSense in der IDEneinja Prüfung von Namen und Parameternzur Laufzeitbeim Kompilieren Optionale Parameteram Ende weglassen Registrierung der DLLin beiden Fällen nötig – übernimmt das SDK-Setup Late Binding ist robust bei der Verteilung auf viele Rechner und funktioniert genauso in VBScript. Early Binding ist bequemer beim Programmieren. Beide Varianten nutzen dieselben Methoden. ### Voraussetzungen - Windows mit .NET Framework 4.7.2 oder neuer. - Aloaha ZUGFeRD SDK von der Download-Seite . Das SDK-Setup (MSI) registriert die COM-Schnittstelle für 32 und 64 Bit. - Bitbreite beachten: VB5- und VB6-Programme sind immer 32 Bit. VBA läuft mit der Bitbreite von Office – ein 64-Bit-Office braucht die 64-Bit-Registrierung. - Manuelle Verteilung ohne Setup: die DLL als Administrator mit dem Regasm passender Bitbreite registrieren – für 32 Bit aus C:\Windows\Microsoft.NET\Framework\v4.0.30319\ , für 64 Bit aus Framework64 : ``` regasm /codebase Aloaha_ZUGFeRD.dll ``` Welche Dateien dazugehören, beschreibt Bibliotheken registrieren . - COM-Selbsttest: Das Paket zugferdbinaries.zip enthält das Skript zugferd_com_test.vbs . Es prüft Registrierung und Bitbreite und legt das Objekt testweise an. Für den 32-Bit-Test auf 64-Bit-Windows: ``` C:\Windows\SysWOW64\cscript.exe //nologo zugferd_com_test.vbs ``` - Lizenzschlüssel: Eine kostenlose Testlizenz mit vollem Funktionsumfang erhalten Sie per Mail an info@aloaha.com. ### Schritt für Schritt - SDK installieren (oder die DLL registrieren, siehe oben). - Objekt anlegen, Lizenzschlüssel und Profil setzen. - Rechnungskopf, Verkäufer, Käufer und Zahlungsangaben setzen. - Positionen in einer Schleife hinzufügen ( AddProduct_Comfort ). - Umsatzsteuer-Aufschlüsselung je Steuersatz ( AddTradeTax ) und Summen ( WriteTotals ) setzen. - XML speichern ( SaveXML ) und in die vorhandene PDF-Rechnung einbetten ( MergeXMLIntoPDF ). - Die erste Rechnung mit einem Validator prüfen – siehe Wie prüfe ich meine XRechnung vor dem Versand? ### Beträge immer mit Dezimalpunkt Das SDK erwartet Beträge als Text mit Punkt als Dezimaltrennzeichen ("59.50"). Format$ schreibt bei deutscher Windows-Einstellung ein Komma. Diese Hilfsfunktion funktioniert in VB5, VB6 und VBA (VB5 kennt noch kein Replace): ``` Public Function Betrag(ByVal Wert As Double) As String Dim s As String, p As Integer s = Format$(Wert, "0.00") p = InStr(s, ",") If p > 0 Then Mid$(s, p, 1) = "." Betrag = s End Function ``` ### Variante 1: Late Binding mit CreateObject ``` Public Sub ErzeugeERechnung_LateBinding() Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "IHR-LIZENZSCHLUESSEL" alo.ZUGFeRD_Profile = 1 ' 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED ' Rechnungskopf: Nummer (BT-1), Text, Datum (BT-2), Datumsformat, Name, Sprache, Währung (BT-5) Call alo.CreateInvoiceObject("RE-2027-0001", "Rechnung gemäß Bestellung", _ "20270104", "102", "", "DE", "EUR") alo.Document_TypeINT = 380 ' BT-3: 380 = Rechnung, 381 = Gutschrift alo.ActualDeliveryDate_102 = "20270104" ' BT-72: Leistungsdatum ' Verkäufer mit USt-ID (BT-31) alo.WriteSeller "Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789" ' Käufer alo.BuyerName = "Kunde AG" alo.BuyerAddressLine1 = "Marktplatz 5" alo.BuyerPostCode = "80331" alo.BuyerCity = "München" alo.BuyerCountry = "DE" ' Zahlung: 58 = SEPA-Überweisung (BT-81) alo.AddPaymentMeans 58, "SEPA-Überweisung", "DE02120300000000202051", _ "Muster GmbH", "", "BYLADEM1001" alo.AddTradePaymentTerms "Zahlbar innerhalb 30 Tagen netto" ' Position (BG-25): 10 Stück à 5,00 EUR, 19 % Call alo.AddProduct_Comfort(1, "", "ART-100", "10.00", "C62", "Papier A4", "500 Blatt", _ "", "EUR", "", "C62", False, "", "", "", Betrag(5), "EUR", "1.00", _ "C62", "VAT", "S", "19.00", "", Betrag(50), "EUR", "", "") ' Umsatzsteuer-Aufschlüsselung (BG-23): Steuer, Währung, Basis, Währung, Art, Kategorie, Satz alo.AddTradeTax Betrag(9.5), "EUR", Betrag(50), "EUR", "VAT", "S", "19.00" ' Summen (BG-22): Positionen, Brutto, Zahlbetrag, Netto, Steuer alo.WriteTotals Betrag(50), Betrag(59.5), Betrag(59.5), Betrag(50), Betrag(9.5) ' XML speichern und in die vorhandene PDF-Rechnung einbetten If alo.SaveXML("C:\Rechnungen\RE-2027-0001.xml") Then Call alo.MergeXMLIntoPDF("C:\Rechnungen\RE-2027-0001.xml", _ "C:\Rechnungen\RE-2027-0001.pdf", _ "C:\Rechnungen\RE-2027-0001_zugferd.pdf", _ True, "", "IHR-LIZENZSCHLUESSEL") Else MsgBox alo.Last_Error End If Set alo = Nothing End Sub ``` In der Praxis ersetzen Sie die festen Werte durch die Felder Ihres Recordsets und rufen AddProduct_Comfort in einer Schleife über die Positionen auf. Für eine XRechnung an Behörden setzen Sie zusätzlich alo.isKOSIT = True und alo.LeitwegID. ### Variante 2: Early Binding mit Verweis - In VB6: Projekt > Verweise ; in VBA: Extras > Verweise . - „Aloaha ZUGFeRD Toolkit“ anhaken. Steht der Eintrag nicht in der Liste, über Durchsuchen die Datei Aloaha_ZUGFeRD.tlb wählen; sie liegt dem SDK bei. - Die Variable mit dem Klassentyp deklarieren. Die Aufrufe bleiben dieselben wie bei Late Binding: ``` Dim alo As Aloaha_ZUGFeRD.XML Set alo = New Aloaha_ZUGFeRD.XML alo.Licensekey = "IHR-LIZENZSCHLUESSEL" alo.ZUGFeRD_Profile = 1 ' ... weiter wie in Variante 1 ``` Mit dem Verweis zeigt die IDE alle Methoden und Parameter an (IntelliSense), und der Objektkatalog (F2) listet die komplette Schnittstelle. Die Reihenfolge der Methoden in der COM-Schnittstelle bleibt seit Version 10 unverändert; neue Funktionen kommen nur am Ende hinzu. Kompilierte Programme mit Verweis laufen daher auch mit neueren SDK-Versionen weiter. ### Überladene Methoden heißen in COM anders COM kennt keine Überladungen. Gibt es eine Methode in .NET mehrfach, erhält die zweite Variante in VB6 und VBA das Suffix _2: Name in VB6/VBAParameter WriteTotalsBeträge als Text ("59.50") WriteTotals_2Beträge als Double AddProduct_ComfortPositionsnummer als Zahl AddProduct_Comfort_2Positionsnummer als Text (z. B. "1.1") AddPaymentMeansZahlungsart als Zahl (UNTDID 4461, z. B. 58) AddPaymentMeans_2Zahlungsart als Text ("58") Aufzählungen wie das Profil oder die Zahlungsart übergeben Sie als Zahl. Für die Rechnungsart (BT-3) gibt es dafür eigens Document_TypeINT, siehe [Rechnung anlegen und Rechnungstyp (BT-3)](https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/). ### VB5, VBA und VBScript - Visual Basic 5: Der Code oben läuft unverändert. Die Hilfsfunktion Betrag nutzt bewusst nur Funktionen, die es schon in VB5 gibt. - VBA in Access, Excel und Word: Derselbe Code in einem Standardmodul. Bei 64-Bit-Office muss die 64-Bit-Registrierung vorhanden sein (das SDK-Setup erledigt beides). Rechnungen lesen und Positionswerte auswerten zeigt Positionswerte in VBA und Access auslesen . - VBScript: Variablen ohne Typ deklarieren ( Dim alo ) und nur Late Binding verwenden; sonst gleich. ### Typische Fehler MeldungUrsacheLösung Laufzeitfehler 429: „ActiveX-Komponente kann kein Objekt erstellen“Die COM-Klasse ist nicht registriert, nur für die andere Bitbreite registriert (z. B. 32 Bit bei 64-Bit-Office) oder .NET Framework fehlt.SDK-Setup ausführen oder mit dem passenden Regasm registrieren; zugferd_com_test.vbs zeigt die Ursache. Laufzeitfehler 438: „Objekt unterstützt diese Eigenschaft oder Methode nicht“Tippfehler oder die überladene Variante heißt anders (_2).Namen prüfen; mit Verweis zeigt der Objektkatalog (F2) alle Namen. Laufzeitfehler 13: „Typen unverträglich“Text, wo das SDK eine Zahl erwartet (oder umgekehrt).Parametertyp der Variante prüfen, siehe Tabelle oben. Laufzeitfehler 450: „Falsche Anzahl an Argumenten“Zu viele Parameter oder ein Pflichtparameter fehlt.Parameterliste mit der [API-Referenz](https://www.zugferdpro.com/api/) vergleichen. Automatisierungsfehler „Datei nicht gefunden“Registriert ohne /codebase, die DLL liegt nicht im GAC.Mit regasm /codebase neu registrieren. Validator: BR-CO-10, BR-S-08, BR-CO-17Summen passen nicht zu den Positionen oder zur Steuerbasis.Steuerbasis = Netto nach Rabatt, siehe [BR-S-08, BR-S-09 und BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). Liefert SaveXML False, steht der Grund in Last_Error. ### Alternative ohne COM: zugcmd Soll der VB-Code möglichst unverändert bleiben, schreibt Ihr Programm die Rechnungsdaten als CSV-Datei und ruft das Kommandozeilenwerkzeug [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) auf, zum Beispiel per Shell. zugcmd erzeugt daraus ZUGFeRD, Factur-X oder XRechnung und bettet das XML in Ihr PDF ein. Schritt für Schritt mit getesteten Beispieldateien, Aufruf aus der eigenen Anwendung und Dateinamen: [E-Rechnungen per CSV und zugcmd aus der eigenen Anwendung erstellen](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). Alle Aufrufe im Detail: [Schnellstart mit VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) – die Methoden und Parameter sind in VB6 dieselben. Für Delphi gibt es eine eigene Anleitung: [ZUGFeRD und XRechnung mit Delphi erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/). ### Häufige Fragen #### Kann ich mit Visual Basic 6 ZUGFeRD-Rechnungen und XRechnungen erstellen? Ja. Das Aloaha ZUGFeRD SDK hat eine COM-Schnittstelle, die VB6 per CreateObject("Aloaha_ZUGFeRD.XML") oder über einen Verweis auf „Aloaha ZUGFeRD Toolkit“ nutzt. Eine Migration nach .NET ist nicht nötig. #### Funktioniert das auch mit Visual Basic 5? Ja. VB5 nutzt dieselbe COM-Schnittstelle. Nur Funktionen wie Replace gibt es dort noch nicht; die Hilfsfunktion für den Dezimalpunkt in diesem Artikel kommt ohne sie aus. #### Geht das auch in Access oder Excel mit VBA? Ja, mit demselben Code in einem Standardmodul. Bei 64-Bit-Office muss die DLL auch für 64 Bit registriert sein; das SDK-Setup erledigt das. #### Brauche ich einen Verweis auf die Typbibliothek? Nein, nicht für Late Binding mit CreateObject. Der Verweis (Early Binding) bringt IntelliSense und Prüfung beim Kompilieren. Registriert werden muss die DLL in beiden Fällen. #### Was bedeutet Laufzeitfehler 429 beim CreateObject? Die COM-Klasse ist auf diesem Rechner nicht oder nur für die andere Bitbreite registriert. Führen Sie das SDK-Setup aus oder registrieren Sie die DLL mit dem passenden Regasm; das Skript zugferd_com_test.vbs zeigt die Ursache. #### Warum heißt eine Methode in VB6 WriteTotals_2? COM kennt keine Überladungen. Die zweite .NET-Variante einer Methode erhält das Suffix _2. WriteTotals erwartet Beträge als Text, WriteTotals_2 als Double. --- ## Why does the validator report BR-S-08, BR-S-09 and BR-CO-17? URL: https://www.zugferdpro.com/en/br-s-08-br-s-09-br-co-17-vat-basis-allowances/ Date: 2026-10-15 Business terms: BT-116, BT-117, BT-92, BT-106, BT-107, BT-109, BT-110, BT-112, BT-114, BT-115, BT-119, BG-20, BG-23 In short: Together, the three rules BR-S-08, BR-S-09 and BR-CO-17 almost always report the same mistake: the VAT breakdown (BG-23) contains the sum of the invoice lines as the taxable amount (BT-116) instead of the net amount after the allowance. Correct is: sum of the lines with this VAT rate − allowances + charges with this VAT rate. The tax (BT-117) is calculated on that. ### The three rules - BR-S-08: The taxable amount per VAT rate (BT-116) must equal the sum of the line net amounts with this rate minus the allowances (BT-92) plus the charges (BT-99) with this rate. - BR-S-09: The VAT category tax amount (BT-117) must be taxable amount × VAT rate (BT-119), rounded commercially to 2 decimals. - BR-CO-17: the same calculation (basis × rate = tax) as a general rule for all VAT categories. If the basis is the sum of the lines, the basis does not match the allowance (BR-S-08) – and the actually correct tax amount no longer matches the wrong basis (BR-S-09, BR-CO-17). That is why the three messages always appear together. ### Example: 20 % allowance on two of three lines FieldWrongCorrect Sum of invoice line net amounts (BT-106)105.05105.05 (67.23 + 16.81 + 21.01) Allowance (BT-92 / BT-107)16.8116.81 (20 % of 84.04) Total without VAT (BT-109)88.2488.24 Taxable amount of the breakdown (BT-116)105.0588.24 Tax (BT-117 / BT-110)16.7716.77 (88.24 × 19 %) Total with VAT (BT-112)105.01105.01 Rounding amount (BT-114)-0.01-0.01 Amount due for payment (BT-115)105.00105.00 Only one single value is wrong – and exactly that value produces all three messages. With only one VAT rate, the taxable amount of the breakdown always equals the total without VAT (BT-109). ### In the Aloaha ZUGFeRD SDK ``` ' lines (line net amounts already rounded to 2 decimals) alo.AddProduct_Comfort("1", "", "A-1", "1", "H87", "Device rental", "", "", "EUR", "", "H87", _ False, "", "", "", "67.23", "EUR", "1", "H87", "VAT", "S", "19.00", "", "67.23", "EUR", "", "") alo.AddProduct_Comfort("2", "", "A-2", "1", "H87", "Monitor rental", "", "", "EUR", "", "H87", _ False, "", "", "", "16.81", "EUR", "1", "H87", "VAT", "S", "19.00", "", "16.81", "EUR", "", "") alo.AddProduct_Comfort("3", "not discountable", "A-3", "1", "H87", "Add-on module", "", "", "EUR", "", "H87", _ False, "", "", "", "21.01", "EUR", "1", "H87", "VAT", "S", "19.00", "", "21.01", "EUR", "", "") ' 20 % allowance on lines 1 and 2 (basis 84.04) – BG-20 alo.AddTradeAllowanceCharge(False, "84.04", "EUR", "16.81", "EUR", "VAT", "S", "19.00", "Discount", "20", "95") ' VAT breakdown: basis = 105.05 - 16.81 = 88.24 (NOT 105.05) alo.AddTradeTax("16.77", "EUR", "88.24", "EUR", "VAT", "S", "19.00") ' totals: lines, gross, amount due, net, tax, allowances, paid, rounding, charges alo.WriteTotals("105.05", "105.01", "105.00", "88.24", "16.77", "16.81", "0.00", "-0.01", "0.00") ``` The third parameter of [AddTradeTax](https://www.zugferdpro.com/api/addtradetax/) is the taxable amount (BT-116), the first is the tax amount (BT-117). We created both variants with the SDK and checked them with the KoSIT validator (XRechnung configuration 3.0.2): with 105.05 as the basis it reports exactly BR-CO-17, BR-S-08 and BR-S-09; with 88.24 the invoice is accepted without errors or warnings (as of 15 October 2026). ### Several VAT rates The rule applies per VAT rate: one AddTradeTax call for each rate, basis = lines with this rate − allowances with this rate + charges with this rate. A document-level allowance or charge must therefore always have a VAT category and a VAT rate (see [allowances and charges with percentage and reason code](https://www.zugferdpro.com/abschlaege-und-zuschlaege-mit-prozentsatz-und-grundcode-bt-94-bt-98-bt-101-bt-105/), German). The sum of all taxable amounts gives the total without VAT (BT-109), the sum of all tax amounts the total VAT amount (BT-110). ### Related errors - BR-CO-10: The sum of the lines (BT-106) must be built from the rounded line net amounts – not from unrounded prices. - BR-CO-15 / BR-CO-16: rounding only on the amount due, never on the total with VAT: BR-CO-15 and BR-CO-16 for the rounding amount . - Discounts belong in a document-level allowance (BG-20), not in the rounding amount. Check your invoice: [How do I validate my XRechnung before sending it?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) Related errors: if the allowance has a different VAT category from the invoice lines (for example S instead of AE for reverse charge), the validator reports BR-S-01, BR-S-06 or BR-AE-08 – see [BR-S-01, BR-S-06 and BR-AE-08 for allowances](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-01-br-s-06-oder-br-ae-08-beim-nachlass/) (in German). ### Frequently asked questions #### What does BR-S-08 mean? The taxable amount of VAT category S (BT-116) must equal the sum of the line net amounts with this VAT rate minus allowances plus charges with this VAT rate. #### What do BR-S-09 and BR-CO-17 mean? The tax amount of the breakdown (BT-117) must be the taxable amount (BT-116) × VAT rate, rounded to 2 decimals. If the basis is wrong, the tax no longer matches – that is why these messages usually appear together with BR-S-08. #### Is the tax basis the sum of the lines or the amount after the allowance? The amount after allowances (and after charges). With only one VAT rate it equals the invoice total without VAT (BT-109). #### Which parameter of AddTradeTax is the tax basis? The third parameter (BasisAmount, BT-116). The first parameter is the tax amount (CalculatedAmount, BT-117). --- ## Create ZUGFeRD and XRechnung invoices with Delphi – late and early binding (Delphi 5 and later) URL: https://www.zugferdpro.com/en/create-zugferd-xrechnung-with-delphi/ Date: 2026-10-15 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 In short: Delphi applications – including older ones written in Delphi 5 or Delphi 7 – create e-invoices according to EN 16931 (ZUGFeRD 2.x, Factur-X, XRechnung) through the COM interface of the Aloaha ZUGFeRD SDK. There is no need to upgrade your Delphi version. There are two ways: late binding with CreateOleObject('Aloaha_ZUGFeRD.XML') without any import, or early binding via the supplied type library Aloaha_ZUGFeRD.tlb. Your program creates the PDF invoice as before; the SDK writes the XML and embeds it in the PDF (hybrid ZUGFeRD invoice, PDF/A-3). For Visual FoxPro there is a dedicated guide: [Creating ZUGFeRD and XRechnung with Visual FoxPro 9](https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/). ### Late or early binding? Late bindingEarly binding Create the objectCreateOleObject('Aloaha_ZUGFeRD.XML')CoXML.Create from the imported unit Import the type librarynoyes, once (Aloaha_ZUGFeRD.tlb) Code completion in the IDEnoyes Checking of names and parametersat run timeat compile time Optional parametersomit them at the endin Delphi 5, pass all of them Registration of the DLLrequired in both cases – done by the SDK setup For a quick start and for small changes to existing programs, late binding is the simpler way. If you program a lot against the SDK, early binding pays off. ### Requirements - Windows with .NET Framework 4.7.2 or later. - Aloaha ZUGFeRD SDK from the download page . The SDK setup (MSI) registers the COM interface for 32 and 64 bit. - Manual distribution without the setup: register the DLL with the Regasm of the matching bitness, as administrator. Delphi 5 to Delphi XE create 32-bit programs; for these, use the Regasm from C:\Windows\Microsoft.NET\Framework\v4.0.30319\ (not Framework64 ): ``` regasm /codebase Aloaha_ZUGFeRD.dll ``` Which files belong to it is described in Register libraries for Delphi . - COM self-test: the package zugferdbinaries.zip contains the script zugferd_com_test.vbs . It checks the registration and bitness and creates the object as a test; for the 32-bit test on 64-bit Windows, start it with C:\Windows\SysWOW64\cscript.exe . - Licence key: you get a free, fully functional trial licence by e-mail to info@aloaha.com. ### Step by step - Install the SDK (or register the DLL, see above). - Create the object, set the licence key and the profile. - Set the invoice header, seller, buyer and payment details. - Add the lines in a loop ( AddProduct_Comfort ). - Set the VAT breakdown per rate ( AddTradeTax ) and the totals ( WriteTotals ). - Save the XML ( SaveXML ) and embed it into the existing PDF invoice ( MergeXMLIntoPDF ). - Check the first invoice with a validator – see How do I check my XRechnung before sending it? ### Always pass amounts with a decimal point The SDK expects amounts as text with a dot as the decimal separator (59.50). With German Windows settings, Delphi would write a comma. Both examples use this helper function (Betrag = amount): ``` // Delphi 5 to 2010 function Betrag(Wert: Double): string; begin Result := StringReplace(FormatFloat('0.00', Wert), DecimalSeparator, '.', []); end; ``` ### Option 1: late binding with CreateOleObject ``` uses ComObj; procedure ErzeugeERechnung_LateBinding; var alo: OleVariant; begin alo := CreateOleObject('Aloaha_ZUGFeRD.XML'); alo.Licensekey := 'YOUR-LICENCE-KEY'; alo.ZUGFeRD_Profile := 1; // 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED // invoice header: number (BT-1), text, date (BT-2), date format, name, language, currency (BT-5) alo.CreateInvoiceObject('RE-2027-0001', 'Invoice as per order', '20270104', '102', '', 'DE', 'EUR'); alo.Document_TypeINT := 380; // BT-3: 380 = invoice, 381 = credit note alo.ActualDeliveryDate_102 := '20270104'; // BT-72: delivery date // seller with VAT ID (BT-31) alo.WriteSeller('Muster GmbH', '20095', 'Hamburg', 'Hauptstr. 1', '', 'DE', 'DE123456789'); // buyer alo.BuyerName := 'Kunde AG'; alo.BuyerAddressLine1 := 'Marktplatz 5'; alo.BuyerPostCode := '80331'; alo.BuyerCity := 'München'; alo.BuyerCountry := 'DE'; // payment: 58 = SEPA credit transfer (BT-81) alo.AddPaymentMeans(58, 'SEPA credit transfer', 'DE02120300000000202051', 'Muster GmbH', '', 'BYLADEM1001'); alo.AddTradePaymentTerms('Payable within 30 days net'); // line (BG-25): 10 pieces at EUR 5.00, 19 % alo.AddProduct_Comfort(1, '', 'ART-100', '10.00', 'C62', 'Paper A4', '500 sheets', '', 'EUR', '', 'C62', False, '', '', '', Betrag(5.00), 'EUR', '1.00', 'C62', 'VAT', 'S', '19.00', '', Betrag(50.00), 'EUR', '', ''); // VAT breakdown (BG-23): tax, currency, basis, currency, type, category, rate alo.AddTradeTax(Betrag(9.50), 'EUR', Betrag(50.00), 'EUR', 'VAT', 'S', '19.00'); // totals (BG-22): lines, grand total, amount due, net, tax alo.WriteTotals(Betrag(50.00), Betrag(59.50), Betrag(59.50), Betrag(50.00), Betrag(9.50)); // save the XML and embed it into the existing PDF invoice if alo.SaveXML('C:\Invoices\RE-2027-0001.xml') then alo.MergeXMLIntoPDF('C:\Invoices\RE-2027-0001.xml', 'C:\Invoices\RE-2027-0001.pdf', 'C:\Invoices\RE-2027-0001_zugferd.pdf', True, '', 'YOUR-LICENCE-KEY') else ShowMessage(alo.Last_Error); end; ``` In practice, replace the fixed values with the fields of your invoice table and call AddProduct_Comfort in a loop over the lines. For an XRechnung to German public authorities, also set alo.isKOSIT := True and alo.LeitwegID. ### Option 2: early binding via the type library The type library Aloaha_ZUGFeRD.tlb ships with the SDK. You do not have to create it yourself; if needed, use regasm /codebase Aloaha_ZUGFeRD.dll /tlb:Aloaha_ZUGFeRD.tlb. - In Delphi 5: Project > Import Type Library > choose "Aloaha ZUGFeRD Toolkit" > Create Unit . Delphi creates Aloaha_ZUGFeRD_TLB.pas and also mscorlib_TLB.pas . - If the compiler reports errors about _SetIUnknownProp in the generated unit, delete those lines. - Add the unit to the uses clause. The invoice class is called XML , its interface _XML ; it is created with CoXML.Create . Please check the names in the generated unit. Delphi 5 does not reliably take the default values of optional parameters from the type library. So pass all parameters: ``` uses ComObj, Aloaha_ZUGFeRD_TLB; procedure ErzeugeERechnung_EarlyBinding; var alo: _XML; Standard: TOleEnum; begin alo := CoXML.Create; alo.Licensekey := 'YOUR-LICENCE-KEY'; alo.ZUGFeRD_Profile := 1; // 1 = EN 16931 (COMFORT) alo.CreateInvoiceObject('RE-2027-0001', 'Invoice as per order', '20270104', '102', '', 'DE', 'EUR'); alo.Document_TypeINT := 380; alo.ActualDeliveryDate_102 := '20270104'; // seller: name, postcode, city, street, street 2, country, VAT ID, street 3 alo.WriteSeller('Muster GmbH', '20095', 'Hamburg', 'Hauptstr. 1', '', 'DE', 'DE123456789', ''); alo.BuyerName := 'Kunde AG'; alo.BuyerAddressLine1 := 'Marktplatz 5'; alo.BuyerPostCode := '80331'; alo.BuyerCity := 'München'; alo.BuyerCountry := 'DE'; // payment: type, text, IBAN, account holder, account ID, BIC, bank code, bank, // direct debit, mandate, creditor ID alo.AddPaymentMeans(58, 'SEPA credit transfer', 'DE02120300000000202051', 'Muster GmbH', '', 'BYLADEM1001', '', '', False, '', ''); alo.AddTradePaymentTerms('Payable within 30 days net', '', '', '', '', '', '', '', ''); alo.AddProduct_Comfort(1, '', 'ART-100', '10.00', 'C62', 'Paper A4', '500 sheets', '', 'EUR', '', 'C62', False, '', '', '', Betrag(5.00), 'EUR', '1.00', 'C62', 'VAT', 'S', '19.00', '', Betrag(50.00), 'EUR', '', ''); // 7 mandatory and 5 optional parameters alo.AddTradeTax(Betrag(9.50), 'EUR', Betrag(50.00), 'EUR', 'VAT', 'S', '19.00', '', '', '', '', ''); // lines, grand total, amount due, net, tax, allowances, paid, rounding, charges alo.WriteTotals(Betrag(50.00), Betrag(59.50), Betrag(59.50), Betrag(50.00), Betrag(9.50), '0.00', '0.00', '0.00', '0.00'); Standard := 2; // 2 = ZUGFeRD 2.x / Factur-X / XRechnung if alo.SaveXML('C:\Invoices\RE-2027-0001.xml', 'YOUR-LICENCE-KEY', Standard) then alo.MergeXMLIntoPDF('C:\Invoices\RE-2027-0001.xml', 'C:\Invoices\RE-2027-0001.pdf', 'C:\Invoices\RE-2027-0001_zugferd.pdf', True, '', 'YOUR-LICENCE-KEY', '', '', '', '') else ShowMessage(alo.Last_Error); end; ``` The order of the methods in the COM interface has not changed since version 10; new functions are only added at the end. A unit you have imported once therefore keeps working with newer SDK versions. ### Overloaded methods have different names in COM COM has no overloads. If a method exists more than once in .NET, the second variant gets the suffix _2 in Delphi. Important for Delphi: Name in DelphiParameters WriteTotalsamounts as text ('59.50') WriteTotals_2amounts as Double AddProduct_Comfortline number as a number AddProduct_Comfort_2line number as text (e.g. '1.1') AddPaymentMeanspayment means as a number (UNTDID 4461, e.g. 58) AddPaymentMeans_2payment means as text ('58') In Delphi, pass enumerations such as the profile or the payment means as numbers. For the invoice type (BT-3) there is a dedicated Document_TypeINT, see [Creating an invoice and the invoice type (BT-3)](https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/) (German). ### Newer Delphi versions - Delphi 2009 and later: string is Unicode; umlauts go to the SDK without any detour. The code stays the same. - From Delphi XE: the global variable DecimalSeparator is deprecated. Use TFormatSettings : ``` function Betrag(Wert: Double): string; var FS: TFormatSettings; begin FS := TFormatSettings.Create; FS.DecimalSeparator := '.'; Result := FormatFloat('0.00', Wert, FS); end; ``` - 64-bit programs (from Delphi XE2): the DLL must also be registered for 64 bit. The SDK setup does both; for manual registration use the Regasm from Framework64 . ### Typical errors MessageCauseSolution "Invalid class string"The COM class is not registered.Run the SDK setup or regasm /codebase as administrator. "Class not registered"Registered only for the other bitness, e.g. 64 bit for a 32-bit program.Register with the matching Regasm (Framework for 32 bit). "Unknown name"Typo, or the overloaded variant has a different name (_2).Check the name; early binding shows such errors at compile time. "Type mismatch"Text where the SDK expects a number (or vice versa).Check the parameter type of the variant, see the table above. Validator: BR-CO-10, BR-S-08, BR-CO-17Totals do not match the lines or the tax basis.Tax basis = net after allowances, see [BR-S-08, BR-S-09 and BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). If SaveXML returns False, the reason is in Last_Error. ### Alternative without COM: zugcmd If the Delphi code should stay as unchanged as possible, your program writes the invoice data to CSV files and calls the command-line tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/), for example via ShellExecute. zugcmd creates ZUGFeRD, Factur-X or XRechnung from them and embeds the XML in your PDF. Step by step with tested sample files, the call from your own application and file names: [Creating e-invoices via CSV and zugcmd from your own application](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). All calls in detail with allowances and several VAT rates: [Quick start with VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) – the methods and parameters are the same in Delphi. The same guide for Visual Basic: [Create ZUGFeRD and XRechnung with VB6, VB5 and VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Frequently asked questions #### Can I create ZUGFeRD invoices with Delphi 5? Yes. The Aloaha ZUGFeRD SDK has a COM interface that Delphi 5 uses via CreateOleObject('Aloaha_ZUGFeRD.XML') or via the supplied type library. A newer Delphi version is not needed. #### Do I need to import the type library? No, not for late binding. The import (early binding) gives you code completion and checks at compile time. The DLL has to be registered in both cases; the SDK setup does that. #### Does this also work with Delphi 7, XE or Delphi 12? Yes, the COM route is the same. From Delphi XE, use TFormatSettings for the decimal point, and 64-bit programs need the 64-bit registration. #### Can I keep using my existing PDF invoice from Delphi? Yes. MergeXMLIntoPDF embeds the XML into your existing PDF invoice and turns it into a hybrid ZUGFeRD invoice (PDF/A-3). #### Can I also create a pure XRechnung with Delphi? Yes. Set isKOSIT := True and the Leitweg-ID, and save only the XML with SaveXML. #### Why is a method suddenly called WriteTotals_2 in Delphi? COM has no overloads. The second .NET variant of a method gets the suffix _2. WriteTotals expects amounts as text, WriteTotals_2 as Double. --- ## Create ZUGFeRD and XRechnung invoices with VB6, VB5 and VBA – late and early binding URL: https://www.zugferdpro.com/en/create-zugferd-xrechnung-with-vb6-vba/ Date: 2026-10-15 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 In short: Applications in Visual Basic 6, Visual Basic 5 and VBA (Access, Excel, Word) create e-invoices according to EN 16931 (ZUGFeRD 2.x, Factur-X, XRechnung) through the COM interface of the Aloaha ZUGFeRD SDK. A migration to .NET is not needed. There are two ways: late binding with CreateObject("Aloaha_ZUGFeRD.XML") without a reference, or early binding with a reference to the type library "Aloaha ZUGFeRD Toolkit". Your program creates the PDF invoice as before; the SDK writes the XML and embeds it in the PDF (hybrid ZUGFeRD invoice, PDF/A-3). Your application is written in Visual FoxPro? There is a dedicated guide: [Creating ZUGFeRD and XRechnung with Visual FoxPro 9](https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/). ### Late or early binding? Late bindingEarly binding Create the objectSet alo = CreateObject("Aloaha_ZUGFeRD.XML")Set alo = New Aloaha_ZUGFeRD.XML Reference in the projectnoyes, "Aloaha ZUGFeRD Toolkit" IntelliSense in the IDEnoyes Checking of names and parametersat run timeat compile time Optional parametersomit them at the end Registration of the DLLrequired in both cases – done by the SDK setup Late binding is robust when you distribute to many computers and works the same way in VBScript. Early binding is more convenient while programming. Both use the same methods. ### Requirements - Windows with .NET Framework 4.7.2 or later. - Aloaha ZUGFeRD SDK from the download page . The SDK setup (MSI) registers the COM interface for 32 and 64 bit. - Mind the bitness: VB5 and VB6 programs are always 32 bit. VBA runs with the bitness of Office – a 64-bit Office needs the 64-bit registration. - Manual distribution without the setup: register the DLL as administrator with the Regasm of the matching bitness – for 32 bit from C:\Windows\Microsoft.NET\Framework\v4.0.30319\ , for 64 bit from Framework64 : ``` regasm /codebase Aloaha_ZUGFeRD.dll ``` Which files belong to it is described in Register libraries . - COM self-test: the package zugferdbinaries.zip contains the script zugferd_com_test.vbs . It checks the registration and bitness and creates the object as a test. For the 32-bit test on 64-bit Windows: ``` C:\Windows\SysWOW64\cscript.exe //nologo zugferd_com_test.vbs ``` - Licence key: you get a free, fully functional trial licence by e-mail to info@aloaha.com. ### Step by step - Install the SDK (or register the DLL, see above). - Create the object, set the licence key and the profile. - Set the invoice header, seller, buyer and payment details. - Add the lines in a loop ( AddProduct_Comfort ). - Set the VAT breakdown per rate ( AddTradeTax ) and the totals ( WriteTotals ). - Save the XML ( SaveXML ) and embed it into the existing PDF invoice ( MergeXMLIntoPDF ). - Check the first invoice with a validator – see How do I check my XRechnung before sending it? ### Always pass amounts with a decimal point The SDK expects amounts as text with a dot as the decimal separator ("59.50"). With German Windows settings, Format$ writes a comma. This helper function (Betrag = amount) works in VB5, VB6 and VBA (VB5 does not have Replace yet): ``` Public Function Betrag(ByVal Wert As Double) As String Dim s As String, p As Integer s = Format$(Wert, "0.00") p = InStr(s, ",") If p > 0 Then Mid$(s, p, 1) = "." Betrag = s End Function ``` ### Option 1: late binding with CreateObject ``` Public Sub ErzeugeERechnung_LateBinding() Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "YOUR-LICENCE-KEY" alo.ZUGFeRD_Profile = 1 ' 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED ' invoice header: number (BT-1), text, date (BT-2), date format, name, language, currency (BT-5) Call alo.CreateInvoiceObject("RE-2027-0001", "Invoice as per order", _ "20270104", "102", "", "DE", "EUR") alo.Document_TypeINT = 380 ' BT-3: 380 = invoice, 381 = credit note alo.ActualDeliveryDate_102 = "20270104" ' BT-72: delivery date ' seller with VAT ID (BT-31) alo.WriteSeller "Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789" ' buyer alo.BuyerName = "Kunde AG" alo.BuyerAddressLine1 = "Marktplatz 5" alo.BuyerPostCode = "80331" alo.BuyerCity = "München" alo.BuyerCountry = "DE" ' payment: 58 = SEPA credit transfer (BT-81) alo.AddPaymentMeans 58, "SEPA credit transfer", "DE02120300000000202051", _ "Muster GmbH", "", "BYLADEM1001" alo.AddTradePaymentTerms "Payable within 30 days net" ' line (BG-25): 10 pieces at EUR 5.00, 19 % Call alo.AddProduct_Comfort(1, "", "ART-100", "10.00", "C62", "Paper A4", "500 sheets", _ "", "EUR", "", "C62", False, "", "", "", Betrag(5), "EUR", "1.00", _ "C62", "VAT", "S", "19.00", "", Betrag(50), "EUR", "", "") ' VAT breakdown (BG-23): tax, currency, basis, currency, type, category, rate alo.AddTradeTax Betrag(9.5), "EUR", Betrag(50), "EUR", "VAT", "S", "19.00" ' totals (BG-22): lines, grand total, amount due, net, tax alo.WriteTotals Betrag(50), Betrag(59.5), Betrag(59.5), Betrag(50), Betrag(9.5) ' save the XML and embed it into the existing PDF invoice If alo.SaveXML("C:\Invoices\RE-2027-0001.xml") Then Call alo.MergeXMLIntoPDF("C:\Invoices\RE-2027-0001.xml", _ "C:\Invoices\RE-2027-0001.pdf", _ "C:\Invoices\RE-2027-0001_zugferd.pdf", _ True, "", "YOUR-LICENCE-KEY") Else MsgBox alo.Last_Error End If Set alo = Nothing End Sub ``` In practice, replace the fixed values with the fields of your recordset and call AddProduct_Comfort in a loop over the lines. For an XRechnung to German public authorities, also set alo.isKOSIT = True and alo.LeitwegID. ### Option 2: early binding with a reference - In VB6: Project > References ; in VBA: Tools > References . - Tick "Aloaha ZUGFeRD Toolkit". If the entry is not in the list, choose the file Aloaha_ZUGFeRD.tlb via Browse ; it ships with the SDK. - Declare the variable with the class type. The calls stay the same as with late binding: ``` Dim alo As Aloaha_ZUGFeRD.XML Set alo = New Aloaha_ZUGFeRD.XML alo.Licensekey = "YOUR-LICENCE-KEY" alo.ZUGFeRD_Profile = 1 ' ... continue as in option 1 ``` With the reference, the IDE shows all methods and parameters (IntelliSense), and the Object Browser (F2) lists the complete interface. The order of the methods in the COM interface has not changed since version 10; new functions are only added at the end. Compiled programs with a reference therefore keep working with newer SDK versions. ### Overloaded methods have different names in COM COM has no overloads. If a method exists more than once in .NET, the second variant gets the suffix _2 in VB6 and VBA: Name in VB6/VBAParameters WriteTotalsamounts as text ("59.50") WriteTotals_2amounts as Double AddProduct_Comfortline number as a number AddProduct_Comfort_2line number as text (e.g. "1.1") AddPaymentMeanspayment means as a number (UNTDID 4461, e.g. 58) AddPaymentMeans_2payment means as text ("58") Pass enumerations such as the profile or the payment means as numbers. For the invoice type (BT-3) there is a dedicated Document_TypeINT, see [Creating an invoice and the invoice type (BT-3)](https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/) (German). ### VB5, VBA and VBScript - Visual Basic 5: the code above runs unchanged. The helper function Betrag deliberately uses only functions that already exist in VB5. - VBA in Access, Excel and Word: the same code in a standard module. With 64-bit Office, the 64-bit registration must be present (the SDK setup does both). Reading invoices and evaluating line values is shown in Reading line values in VBA and Access (German). - VBScript: declare variables without a type ( Dim alo ) and use late binding only; otherwise the same. ### Typical errors MessageCauseSolution Run-time error 429: "ActiveX component can't create object"The COM class is not registered, is registered only for the other bitness (e.g. 32 bit with 64-bit Office), or the .NET Framework is missing.Run the SDK setup or register with the matching Regasm; zugferd_com_test.vbs shows the cause. Run-time error 438: "Object doesn't support this property or method"Typo, or the overloaded variant has a different name (_2).Check the name; with a reference, the Object Browser (F2) shows all names. Run-time error 13: "Type mismatch"Text where the SDK expects a number (or vice versa).Check the parameter type of the variant, see the table above. Run-time error 450: "Wrong number of arguments"Too many parameters, or a mandatory parameter is missing.Compare the parameter list with the [API reference](https://www.zugferdpro.com/api/). Automation error "File not found"Registered without /codebase, and the DLL is not in the GAC.Register again with regasm /codebase. Validator: BR-CO-10, BR-S-08, BR-CO-17Totals do not match the lines or the tax basis.Tax basis = net after allowances, see [BR-S-08, BR-S-09 and BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). If SaveXML returns False, the reason is in Last_Error. ### Alternative without COM: zugcmd If the VB code should stay as unchanged as possible, your program writes the invoice data to CSV files and calls the command-line tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/), for example via Shell. zugcmd creates ZUGFeRD, Factur-X or XRechnung from them and embeds the XML in your PDF. Step by step with tested sample files, the call from your own application and file names: [Creating e-invoices via CSV and zugcmd from your own application](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). All calls in detail: [Quick start with VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) – the methods and parameters are the same in VB6. There is a separate guide for Delphi: [Create ZUGFeRD and XRechnung with Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/). ### Frequently asked questions #### Can I create ZUGFeRD invoices and XRechnung with Visual Basic 6? Yes. The Aloaha ZUGFeRD SDK has a COM interface that VB6 uses via CreateObject("Aloaha_ZUGFeRD.XML") or via a reference to "Aloaha ZUGFeRD Toolkit". A migration to .NET is not needed. #### Does this also work with Visual Basic 5? Yes. VB5 uses the same COM interface. Only functions such as Replace do not exist there yet; the decimal-point helper function in this article does without them. #### Does it also work in Access or Excel with VBA? Yes, with the same code in a standard module. With 64-bit Office, the DLL must also be registered for 64 bit; the SDK setup does that. #### Do I need a reference to the type library? No, not for late binding with CreateObject. The reference (early binding) gives you IntelliSense and checks at compile time. The DLL has to be registered in both cases. #### What does run-time error 429 on CreateObject mean? The COM class is not registered on this computer, or only for the other bitness. Run the SDK setup or register the DLL with the matching Regasm; the script zugferd_com_test.vbs shows the cause. #### Why is a method called WriteTotals_2 in VB6? COM has no overloads. The second .NET variant of a method gets the suffix _2. WriteTotals expects amounts as text, WriteTotals_2 as Double. --- ## Pourquoi le validateur signale-t-il BR-S-08, BR-S-09 et BR-CO-17 ? URL: https://www.zugferdpro.com/fr/br-s-08-br-s-09-br-co-17-base-tva-remises/ Date: 2026-10-15 Business terms: BT-116, BT-117, BT-92, BT-106, BT-107, BT-109, BT-110, BT-112, BT-114, BT-115, BT-119, BG-20, BG-23 En bref : ensemble, les trois règles BR-S-08, BR-S-09 et BR-CO-17 signalent presque toujours la même erreur : dans le détail de la TVA (BG-23), la base d’imposition (BT-116) contient la somme des lignes au lieu du montant net après remise. La bonne valeur est : somme des lignes de ce taux de TVA − remises + frais de ce taux de TVA. La taxe (BT-117) est calculée sur cette base. ### Les trois règles - BR-S-08 : la base d’imposition par taux de TVA (BT-116) doit être égale à la somme des montants nets des lignes à ce taux, moins les remises (BT-92), plus les frais (BT-99) à ce taux. - BR-S-09 : le montant de la taxe (BT-117) doit être égal à base × taux de TVA (BT-119), arrondi commercialement à 2 décimales. - BR-CO-17 : le même calcul (base × taux = taxe), en tant que règle générale pour toutes les catégories de TVA. Si la base est la somme des lignes, elle ne correspond pas à la remise (BR-S-08) – et le montant de taxe, pourtant correct, ne correspond plus à la base erronée (BR-S-09, BR-CO-17). C’est pourquoi les trois messages apparaissent toujours ensemble. ### Exemple : remise de 20 % sur deux lignes sur trois ChampFauxCorrect Somme des montants nets des lignes (BT-106)105.05105.05 (67,23 + 16,81 + 21,01) Remise (BT-92 / BT-107)16.8116.81 (20 % de 84,04) Montant total hors TVA (BT-109)88.2488.24 Base d’imposition du détail (BT-116)105.0588.24 Taxe (BT-117 / BT-110)16.7716.77 (88,24 × 19 %) Montant total TTC (BT-112)105.01105.01 Montant d’arrondi (BT-114)-0.01-0.01 Montant à payer (BT-115)105.00105.00 Une seule valeur est fausse – et c’est précisément elle qui génère les trois messages. Avec un seul taux de TVA, la base d’imposition du détail est toujours égale au montant total hors TVA (BT-109). ### Dans le SDK Aloaha ZUGFeRD ``` ' lignes (montants nets des lignes déjà arrondis à 2 décimales) alo.AddProduct_Comfort("1", "", "A-1", "1", "H87", "Device rental", "", "", "EUR", "", "H87", _ False, "", "", "", "67.23", "EUR", "1", "H87", "VAT", "S", "19.00", "", "67.23", "EUR", "", "") alo.AddProduct_Comfort("2", "", "A-2", "1", "H87", "Monitor rental", "", "", "EUR", "", "H87", _ False, "", "", "", "16.81", "EUR", "1", "H87", "VAT", "S", "19.00", "", "16.81", "EUR", "", "") alo.AddProduct_Comfort("3", "not discountable", "A-3", "1", "H87", "Add-on module", "", "", "EUR", "", "H87", _ False, "", "", "", "21.01", "EUR", "1", "H87", "VAT", "S", "19.00", "", "21.01", "EUR", "", "") ' remise de 20 % sur les lignes 1 et 2 (base 84.04) – BG-20 alo.AddTradeAllowanceCharge(False, "84.04", "EUR", "16.81", "EUR", "VAT", "S", "19.00", "Discount", "20", "95") ' détail de la TVA : base = 105.05 - 16.81 = 88.24 (PAS 105.05) alo.AddTradeTax("16.77", "EUR", "88.24", "EUR", "VAT", "S", "19.00") ' totaux : lignes, TTC, à payer, net, taxe, remises, payé, arrondi, frais alo.WriteTotals("105.05", "105.01", "105.00", "88.24", "16.77", "16.81", "0.00", "-0.01", "0.00") ``` Le troisième paramètre de [AddTradeTax](https://www.zugferdpro.com/api/addtradetax/) est la base d’imposition (BT-116), le premier le montant de la taxe (BT-117). Nous avons généré les deux variantes avec le SDK et les avons contrôlées avec le validateur KoSIT (configuration XRechnung 3.0.2) : avec 105,05 comme base, il signale exactement BR-CO-17, BR-S-08 et BR-S-09 ; avec 88,24, la facture est acceptée sans erreur ni avertissement (état au 15 octobre 2026). ### Plusieurs taux de TVA La règle s’applique par taux de TVA : un appel AddTradeTax distinct pour chaque taux, base = lignes à ce taux − remises à ce taux + frais à ce taux. Une remise ou des frais au niveau du document doivent donc toujours avoir une catégorie et un taux de TVA (voir [remises et frais avec pourcentage et code motif](https://www.zugferdpro.com/abschlaege-und-zuschlaege-mit-prozentsatz-und-grundcode-bt-94-bt-98-bt-101-bt-105/), en allemand). La somme de toutes les bases donne le montant total hors TVA (BT-109), la somme de tous les montants de taxe le montant total de la TVA (BT-110). ### Erreurs apparentées - BR-CO-10 : la somme des lignes (BT-106) doit être calculée à partir des montants nets des lignes arrondis – et non à partir de prix non arrondis. - BR-CO-15 / BR-CO-16 : l’arrondi ne porte que sur le montant à payer, jamais sur le montant TTC : BR-CO-15 et BR-CO-16 pour le montant d’arrondi . - Les remises se placent dans une remise au niveau du document (BG-20), pas dans le montant d’arrondi. Contrôler votre facture : [comment valider ma XRechnung avant de l’envoyer ?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) Erreurs liées : si la remise a une autre catégorie de TVA que les lignes (par exemple S au lieu de AE en autoliquidation), le validateur signale BR-S-01, BR-S-06 ou BR-AE-08 – voir [BR-S-01, BR-S-06 et BR-AE-08 pour les remises](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-01-br-s-06-oder-br-ae-08-beim-nachlass/) (en allemand). ### Questions fréquentes #### Que signifie BR-S-08 ? La base d’imposition de la catégorie de TVA S (BT-116) doit être égale à la somme des montants nets des lignes à ce taux, moins les remises, plus les frais à ce taux. #### Que signifient BR-S-09 et BR-CO-17 ? Le montant de taxe du détail (BT-117) doit être égal à la base d’imposition (BT-116) × taux de TVA, arrondi à 2 décimales. Si la base est fausse, la taxe ne correspond plus – c’est pourquoi ces messages apparaissent généralement avec BR-S-08. #### La base d’imposition est-elle la somme des lignes ou le montant après remise ? Le montant après remises (et après frais). Avec un seul taux de TVA, elle est égale au montant total hors TVA de la facture (BT-109). #### Quel paramètre d’AddTradeTax correspond à la base d’imposition ? Le troisième paramètre (BasisAmount, BT-116). Le premier paramètre est le montant de la taxe (CalculatedAmount, BT-117). --- ## Créer des factures ZUGFeRD et XRechnung avec Delphi – liaison tardive et anticipée (à partir de Delphi 5) URL: https://www.zugferdpro.com/fr/creer-zugferd-xrechnung-avec-delphi/ Date: 2026-10-15 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 En bref : les applications Delphi – y compris les plus anciennes écrites en Delphi 5 ou Delphi 7 – créent des factures électroniques conformes à la EN 16931 (ZUGFeRD 2.x, Factur-X, XRechnung) via l'interface COM du SDK Aloaha ZUGFeRD. Il n'est pas nécessaire de changer de version de Delphi. Deux voies sont possibles : la liaison tardive avec CreateOleObject('Aloaha_ZUGFeRD.XML'), sans importation, ou la liaison anticipée via la bibliothèque de types fournie Aloaha_ZUGFeRD.tlb. Votre programme crée la facture PDF comme auparavant ; le SDK écrit le XML et l'intègre dans le PDF (facture ZUGFeRD hybride, PDF/A-3). ### Liaison tardive ou anticipée ? Liaison tardiveLiaison anticipée Créer l'objetCreateOleObject('Aloaha_ZUGFeRD.XML')CoXML.Create depuis l'unité importée Importer la bibliothèque de typesnonoui, une fois (Aloaha_ZUGFeRD.tlb) Complétion de code dans l'IDEnonoui Contrôle des noms et des paramètresà l'exécutionà la compilation Paramètres facultatifsles omettre en fin de listesous Delphi 5, tous les transmettre Enregistrement de la DLLnécessaire dans les deux cas – effectué par le programme d'installation du SDK Pour un démarrage rapide et pour de petites modifications de programmes existants, la liaison tardive est la voie la plus simple. Si vous programmez beaucoup avec le SDK, la liaison anticipée est rentable. ### Prérequis - Windows avec .NET Framework 4.7.2 ou ultérieur. - SDK Aloaha ZUGFeRD depuis la page de téléchargement . Le programme d'installation du SDK (MSI) enregistre l'interface COM pour 32 et 64 bits. - Distribution manuelle sans programme d'installation : enregistrez la DLL avec le Regasm de l'architecture correspondante, en tant qu'administrateur. Delphi 5 à Delphi XE produisent des programmes 32 bits ; utilisez pour ceux-ci le Regasm de C:\Windows\Microsoft.NET\Framework\v4.0.30319\ (et non Framework64 ) : ``` regasm /codebase Aloaha_ZUGFeRD.dll ``` Les fichiers nécessaires sont décrits dans Register libraries for Delphi . - Autotest COM : le paquet zugferdbinaries.zip contient le script zugferd_com_test.vbs . Il vérifie l'enregistrement et l'architecture et crée l'objet à titre de test ; pour le test 32 bits sur un Windows 64 bits, lancez-le avec C:\Windows\SysWOW64\cscript.exe . - Clé de licence : vous obtenez une licence d'essai gratuite et complète par e-mail à info@aloaha.com. ### Étape par étape - Installer le SDK (ou enregistrer la DLL, voir ci-dessus). - Créer l'objet, définir la clé de licence et le profil. - Renseigner l'en-tête de facture, le vendeur, l'acheteur et les données de paiement. - Ajouter les lignes dans une boucle ( AddProduct_Comfort ). - Définir la ventilation de la TVA par taux ( AddTradeTax ) et les totaux ( WriteTotals ). - Enregistrer le XML ( SaveXML ) et l'intégrer dans la facture PDF existante ( MergeXMLIntoPDF ). - Contrôler la première facture avec un validateur – voir Comment contrôler ma XRechnung avant l'envoi ? ### Toujours transmettre les montants avec un point décimal Le SDK attend des montants sous forme de texte avec un point comme séparateur décimal (59.50). Avec des paramètres régionaux Windows français ou allemands, Delphi écrirait une virgule. Les deux exemples utilisent cette fonction d'aide (Betrag = montant) : ``` // Delphi 5 à 2010 function Betrag(Wert: Double): string; begin Result := StringReplace(FormatFloat('0.00', Wert), DecimalSeparator, '.', []); end; ``` ### Variante 1 : liaison tardive avec CreateOleObject ``` uses ComObj; procedure ErzeugeERechnung_LateBinding; var alo: OleVariant; begin alo := CreateOleObject('Aloaha_ZUGFeRD.XML'); alo.Licensekey := 'VOTRE-CLE-DE-LICENCE'; alo.ZUGFeRD_Profile := 1; // 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED // en-tête : numéro (BT-1), texte, date (BT-2), format de date, nom, langue, devise (BT-5) alo.CreateInvoiceObject('RE-2027-0001', 'Invoice as per order', '20270104', '102', '', 'DE', 'EUR'); alo.Document_TypeINT := 380; // BT-3 : 380 = facture, 381 = avoir alo.ActualDeliveryDate_102 := '20270104'; // BT-72 : date de livraison // vendeur avec numéro de TVA (BT-31) alo.WriteSeller('Muster GmbH', '20095', 'Hamburg', 'Hauptstr. 1', '', 'DE', 'DE123456789'); // acheteur alo.BuyerName := 'Kunde AG'; alo.BuyerAddressLine1 := 'Marktplatz 5'; alo.BuyerPostCode := '80331'; alo.BuyerCity := 'München'; alo.BuyerCountry := 'DE'; // paiement : 58 = virement SEPA (BT-81) alo.AddPaymentMeans(58, 'SEPA credit transfer', 'DE02120300000000202051', 'Muster GmbH', '', 'BYLADEM1001'); alo.AddTradePaymentTerms('Payable within 30 days net'); // ligne (BG-25) : 10 pièces à 5,00 EUR, 19 % alo.AddProduct_Comfort(1, '', 'ART-100', '10.00', 'C62', 'Paper A4', '500 sheets', '', 'EUR', '', 'C62', False, '', '', '', Betrag(5.00), 'EUR', '1.00', 'C62', 'VAT', 'S', '19.00', '', Betrag(50.00), 'EUR', '', ''); // ventilation TVA (BG-23) : taxe, devise, base, devise, type, catégorie, taux alo.AddTradeTax(Betrag(9.50), 'EUR', Betrag(50.00), 'EUR', 'VAT', 'S', '19.00'); // totaux (BG-22) : lignes, total TTC, montant dû, net, taxe alo.WriteTotals(Betrag(50.00), Betrag(59.50), Betrag(59.50), Betrag(50.00), Betrag(9.50)); // enregistrer le XML et l'intégrer dans la facture PDF existante if alo.SaveXML('C:\Invoices\RE-2027-0001.xml') then alo.MergeXMLIntoPDF('C:\Invoices\RE-2027-0001.xml', 'C:\Invoices\RE-2027-0001.pdf', 'C:\Invoices\RE-2027-0001_zugferd.pdf', True, '', 'VOTRE-CLE-DE-LICENCE') else ShowMessage(alo.Last_Error); end; ``` En pratique, remplacez les valeurs fixes par les champs de votre table de factures et appelez AddProduct_Comfort dans une boucle sur les lignes. Pour une XRechnung destinée aux administrations allemandes, définissez en outre alo.isKOSIT := True et alo.LeitwegID. ### Variante 2 : liaison anticipée via la bibliothèque de types La bibliothèque de types Aloaha_ZUGFeRD.tlb est fournie avec le SDK. Vous n'avez pas à la créer vous-même ; si nécessaire, utilisez regasm /codebase Aloaha_ZUGFeRD.dll /tlb:Aloaha_ZUGFeRD.tlb. - Sous Delphi 5 : Project > Import Type Library > choisir « Aloaha ZUGFeRD Toolkit » > Create Unit . Delphi crée Aloaha_ZUGFeRD_TLB.pas ainsi que mscorlib_TLB.pas . - Si le compilateur signale des erreurs concernant _SetIUnknownProp dans l'unité générée, supprimez ces lignes. - Ajoutez l'unité à la clause uses . La classe de facture s'appelle XML , son interface _XML ; elle est créée avec CoXML.Create . Vérifiez les noms dans l'unité générée. Delphi 5 ne reprend pas de manière fiable les valeurs par défaut des paramètres facultatifs depuis la bibliothèque de types. Transmettez donc tous les paramètres : ``` uses ComObj, Aloaha_ZUGFeRD_TLB; procedure ErzeugeERechnung_EarlyBinding; var alo: _XML; Standard: TOleEnum; begin alo := CoXML.Create; alo.Licensekey := 'VOTRE-CLE-DE-LICENCE'; alo.ZUGFeRD_Profile := 1; // 1 = EN 16931 (COMFORT) alo.CreateInvoiceObject('RE-2027-0001', 'Invoice as per order', '20270104', '102', '', 'DE', 'EUR'); alo.Document_TypeINT := 380; alo.ActualDeliveryDate_102 := '20270104'; // vendeur : nom, code postal, ville, rue, rue 2, pays, n° TVA, rue 3 alo.WriteSeller('Muster GmbH', '20095', 'Hamburg', 'Hauptstr. 1', '', 'DE', 'DE123456789', ''); alo.BuyerName := 'Kunde AG'; alo.BuyerAddressLine1 := 'Marktplatz 5'; alo.BuyerPostCode := '80331'; alo.BuyerCity := 'München'; alo.BuyerCountry := 'DE'; // paiement : type, texte, IBAN, titulaire, ID de compte, BIC, code banque, banque, // prélèvement, mandat, ID créancier alo.AddPaymentMeans(58, 'SEPA credit transfer', 'DE02120300000000202051', 'Muster GmbH', '', 'BYLADEM1001', '', '', False, '', ''); alo.AddTradePaymentTerms('Payable within 30 days net', '', '', '', '', '', '', '', ''); alo.AddProduct_Comfort(1, '', 'ART-100', '10.00', 'C62', 'Paper A4', '500 sheets', '', 'EUR', '', 'C62', False, '', '', '', Betrag(5.00), 'EUR', '1.00', 'C62', 'VAT', 'S', '19.00', '', Betrag(50.00), 'EUR', '', ''); // 7 paramètres obligatoires et 5 facultatifs alo.AddTradeTax(Betrag(9.50), 'EUR', Betrag(50.00), 'EUR', 'VAT', 'S', '19.00', '', '', '', '', ''); // lignes, total TTC, montant dû, net, taxe, remises, payé, arrondi, frais alo.WriteTotals(Betrag(50.00), Betrag(59.50), Betrag(59.50), Betrag(50.00), Betrag(9.50), '0.00', '0.00', '0.00', '0.00'); Standard := 2; // 2 = ZUGFeRD 2.x / Factur-X / XRechnung if alo.SaveXML('C:\Invoices\RE-2027-0001.xml', 'VOTRE-CLE-DE-LICENCE', Standard) then alo.MergeXMLIntoPDF('C:\Invoices\RE-2027-0001.xml', 'C:\Invoices\RE-2027-0001.pdf', 'C:\Invoices\RE-2027-0001_zugferd.pdf', True, '', 'VOTRE-CLE-DE-LICENCE', '', '', '', '') else ShowMessage(alo.Last_Error); end; ``` L'ordre des méthodes dans l'interface COM n'a pas changé depuis la version 10 ; les nouvelles fonctions ne sont ajoutées qu'à la fin. Une unité importée une fois continue donc de fonctionner avec les versions plus récentes du SDK. ### Les méthodes surchargées portent d'autres noms en COM COM ne connaît pas la surcharge. Si une méthode existe plusieurs fois en .NET, la deuxième variante reçoit le suffixe _2 dans Delphi. Points importants pour Delphi : Nom dans DelphiParamètres WriteTotalsmontants sous forme de texte ('59.50') WriteTotals_2montants en Double AddProduct_Comfortnuméro de ligne sous forme de nombre AddProduct_Comfort_2numéro de ligne sous forme de texte (p. ex. '1.1') AddPaymentMeansmoyen de paiement sous forme de nombre (UNTDID 4461, p. ex. 58) AddPaymentMeans_2moyen de paiement sous forme de texte ('58') Dans Delphi, transmettez les énumérations comme le profil ou le moyen de paiement sous forme de nombres. Pour le type de facture (BT-3), il existe une propriété dédiée Document_TypeINT, voir [Créer une facture et le type de facture (BT-3)](https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/) (en allemand). ### Versions plus récentes de Delphi - Delphi 2009 et ultérieur : string est en Unicode ; les caractères accentués parviennent au SDK sans détour. Le code reste identique. - À partir de Delphi XE : la variable globale DecimalSeparator est obsolète. Utilisez TFormatSettings : ``` function Betrag(Wert: Double): string; var FS: TFormatSettings; begin FS := TFormatSettings.Create; FS.DecimalSeparator := '.'; Result := FormatFloat('0.00', Wert, FS); end; ``` - Programmes 64 bits (à partir de Delphi XE2) : la DLL doit aussi être enregistrée pour 64 bits. Le programme d'installation du SDK fait les deux ; pour un enregistrement manuel, utilisez le Regasm de Framework64 . ### Erreurs fréquentes MessageCauseSolution « Invalid class string »La classe COM n'est pas enregistrée.Exécuter le programme d'installation du SDK ou regasm /codebase en tant qu'administrateur. « Class not registered »Enregistrée uniquement pour l'autre architecture, p. ex. 64 bits pour un programme 32 bits.Enregistrer avec le Regasm correspondant (Framework pour 32 bits). « Unknown name »Faute de frappe, ou la variante surchargée porte un autre nom (_2).Vérifier le nom ; la liaison anticipée signale ces erreurs dès la compilation. « Type mismatch »Du texte là où le SDK attend un nombre (ou inversement).Vérifier le type de paramètre de la variante, voir le tableau ci-dessus. Validateur : BR-CO-10, BR-S-08, BR-CO-17Les totaux ne correspondent pas aux lignes ou à la base d'imposition.Base d'imposition = net après remises, voir [BR-S-08, BR-S-09 et BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). Si SaveXML renvoie False, la cause figure dans Last_Error. ### Alternative sans COM : zugcmd Si le code Delphi doit rester aussi inchangé que possible, votre programme écrit les données de facture dans des fichiers CSV et appelle l'outil en ligne de commande [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/), par exemple via ShellExecute. zugcmd en produit une facture ZUGFeRD, Factur-X ou XRechnung et intègre le XML dans votre PDF. Étape par étape, avec des fichiers d'exemple testés, l'appel depuis votre propre application et les noms de fichiers : [Créer des factures électroniques via CSV et zugcmd depuis votre application](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). Tous les appels en détail, avec remises et plusieurs taux de TVA : [démarrage rapide avec VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) – les méthodes et paramètres sont les mêmes en Delphi. Le même guide pour Visual Basic : [Créer ZUGFeRD et XRechnung avec VB6, VB5 et VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Questions fréquentes #### Puis-je créer des factures ZUGFeRD avec Delphi 5 ? Oui. Le SDK Aloaha ZUGFeRD dispose d'une interface COM que Delphi 5 utilise via CreateOleObject('Aloaha_ZUGFeRD.XML') ou via la bibliothèque de types fournie. Une version plus récente de Delphi n'est pas nécessaire. #### Dois-je importer la bibliothèque de types ? Non, pas pour la liaison tardive. L'importation (liaison anticipée) apporte la complétion de code et des contrôles à la compilation. La DLL doit être enregistrée dans les deux cas ; le programme d'installation du SDK s'en charge. #### Cela fonctionne-t-il aussi avec Delphi 7, XE ou Delphi 12 ? Oui, la voie COM est la même. À partir de Delphi XE, utilisez TFormatSettings pour le point décimal ; les programmes 64 bits nécessitent l'enregistrement 64 bits. #### Puis-je continuer à utiliser ma facture PDF existante produite par Delphi ? Oui. MergeXMLIntoPDF intègre le XML dans votre facture PDF existante et en fait une facture ZUGFeRD hybride (PDF/A-3). #### Puis-je aussi créer une XRechnung pure avec Delphi ? Oui. Définissez isKOSIT := True et le Leitweg-ID, puis enregistrez uniquement le XML avec SaveXML. #### Pourquoi une méthode s'appelle-t-elle soudain WriteTotals_2 dans Delphi ? COM ne connaît pas la surcharge. La deuxième variante .NET d'une méthode reçoit le suffixe _2. WriteTotals attend les montants sous forme de texte, WriteTotals_2 en Double. --- ## Créer des factures ZUGFeRD et XRechnung avec VB6, VB5 et VBA – liaison tardive et anticipée URL: https://www.zugferdpro.com/fr/creer-zugferd-xrechnung-avec-vb6-vba/ Date: 2026-10-15 Business terms: BT-1, BT-2, BT-3, BT-5, BT-31, BT-72, BG-25, BG-23, BG-22, BT-81, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116 En bref : les applications Visual Basic 6, Visual Basic 5 et VBA (Access, Excel, Word) créent des factures électroniques conformes à la EN 16931 (ZUGFeRD 2.x, Factur-X, XRechnung) via l'interface COM du SDK Aloaha ZUGFeRD. Une migration vers .NET n'est pas nécessaire. Deux voies sont possibles : la liaison tardive avec CreateObject("Aloaha_ZUGFeRD.XML"), sans référence, ou la liaison anticipée avec une référence à la bibliothèque de types « Aloaha ZUGFeRD Toolkit ». Votre programme crée la facture PDF comme auparavant ; le SDK écrit le XML et l'intègre dans le PDF (facture ZUGFeRD hybride, PDF/A-3). ### Liaison tardive ou anticipée ? Liaison tardiveLiaison anticipée Créer l'objetSet alo = CreateObject("Aloaha_ZUGFeRD.XML")Set alo = New Aloaha_ZUGFeRD.XML Référence dans le projetnonoui, « Aloaha ZUGFeRD Toolkit » IntelliSense dans l'IDEnonoui Contrôle des noms et des paramètresà l'exécutionà la compilation Paramètres facultatifsles omettre en fin de liste Enregistrement de la DLLnécessaire dans les deux cas – effectué par le programme d'installation du SDK La liaison tardive est robuste lorsque vous distribuez sur de nombreux postes et fonctionne de la même manière en VBScript. La liaison anticipée est plus confortable pendant la programmation. Les deux utilisent les mêmes méthodes. ### Prérequis - Windows avec .NET Framework 4.7.2 ou ultérieur. - SDK Aloaha ZUGFeRD depuis la page de téléchargement . Le programme d'installation du SDK (MSI) enregistre l'interface COM pour 32 et 64 bits. - Attention à l'architecture : les programmes VB5 et VB6 sont toujours en 32 bits. VBA s'exécute avec l'architecture d'Office – un Office 64 bits nécessite l'enregistrement 64 bits. - Distribution manuelle sans programme d'installation : enregistrez la DLL en tant qu'administrateur avec le Regasm de l'architecture correspondante – pour 32 bits depuis C:\Windows\Microsoft.NET\Framework\v4.0.30319\ , pour 64 bits depuis Framework64 : ``` regasm /codebase Aloaha_ZUGFeRD.dll ``` Les fichiers nécessaires sont décrits dans Register libraries . - Autotest COM : le paquet zugferdbinaries.zip contient le script zugferd_com_test.vbs . Il vérifie l'enregistrement et l'architecture et crée l'objet à titre de test. Pour le test 32 bits sur un Windows 64 bits : ``` C:\Windows\SysWOW64\cscript.exe //nologo zugferd_com_test.vbs ``` - Clé de licence : vous obtenez une licence d'essai gratuite et complète par e-mail à info@aloaha.com. ### Étape par étape - Installer le SDK (ou enregistrer la DLL, voir ci-dessus). - Créer l'objet, définir la clé de licence et le profil. - Renseigner l'en-tête de facture, le vendeur, l'acheteur et les données de paiement. - Ajouter les lignes dans une boucle ( AddProduct_Comfort ). - Définir la ventilation de la TVA par taux ( AddTradeTax ) et les totaux ( WriteTotals ). - Enregistrer le XML ( SaveXML ) et l'intégrer dans la facture PDF existante ( MergeXMLIntoPDF ). - Contrôler la première facture avec un validateur – voir Comment contrôler ma XRechnung avant l'envoi ? ### Toujours transmettre les montants avec un point décimal Le SDK attend des montants sous forme de texte avec un point comme séparateur décimal ("59.50"). Avec des paramètres régionaux Windows français ou allemands, Format$ écrit une virgule. Cette fonction d'aide (Betrag = montant) fonctionne en VB5, VB6 et VBA (VB5 ne connaît pas encore Replace) : ``` Public Function Betrag(ByVal Wert As Double) As String Dim s As String, p As Integer s = Format$(Wert, "0.00") p = InStr(s, ",") If p > 0 Then Mid$(s, p, 1) = "." Betrag = s End Function ``` ### Variante 1 : liaison tardive avec CreateObject ``` Public Sub ErzeugeERechnung_LateBinding() Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "VOTRE-CLE-DE-LICENCE" alo.ZUGFeRD_Profile = 1 ' 0 = BASIC, 1 = EN 16931 (COMFORT), 2 = EXTENDED ' en-tête : numéro (BT-1), texte, date (BT-2), format de date, nom, langue, devise (BT-5) Call alo.CreateInvoiceObject("RE-2027-0001", "Invoice as per order", _ "20270104", "102", "", "DE", "EUR") alo.Document_TypeINT = 380 ' BT-3 : 380 = facture, 381 = avoir alo.ActualDeliveryDate_102 = "20270104" ' BT-72 : date de livraison ' vendeur avec numéro de TVA (BT-31) alo.WriteSeller "Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789" ' acheteur alo.BuyerName = "Kunde AG" alo.BuyerAddressLine1 = "Marktplatz 5" alo.BuyerPostCode = "80331" alo.BuyerCity = "München" alo.BuyerCountry = "DE" ' paiement : 58 = virement SEPA (BT-81) alo.AddPaymentMeans 58, "SEPA credit transfer", "DE02120300000000202051", _ "Muster GmbH", "", "BYLADEM1001" alo.AddTradePaymentTerms "Payable within 30 days net" ' ligne (BG-25) : 10 pièces à 5,00 EUR, 19 % Call alo.AddProduct_Comfort(1, "", "ART-100", "10.00", "C62", "Paper A4", "500 sheets", _ "", "EUR", "", "C62", False, "", "", "", Betrag(5), "EUR", "1.00", _ "C62", "VAT", "S", "19.00", "", Betrag(50), "EUR", "", "") ' ventilation TVA (BG-23) : taxe, devise, base, devise, type, catégorie, taux alo.AddTradeTax Betrag(9.5), "EUR", Betrag(50), "EUR", "VAT", "S", "19.00" ' totaux (BG-22) : lignes, total TTC, montant dû, net, taxe alo.WriteTotals Betrag(50), Betrag(59.5), Betrag(59.5), Betrag(50), Betrag(9.5) ' enregistrer le XML et l'intégrer dans la facture PDF existante If alo.SaveXML("C:\Invoices\RE-2027-0001.xml") Then Call alo.MergeXMLIntoPDF("C:\Invoices\RE-2027-0001.xml", _ "C:\Invoices\RE-2027-0001.pdf", _ "C:\Invoices\RE-2027-0001_zugferd.pdf", _ True, "", "VOTRE-CLE-DE-LICENCE") Else MsgBox alo.Last_Error End If Set alo = Nothing End Sub ``` En pratique, remplacez les valeurs fixes par les champs de votre jeu d'enregistrements (recordset) et appelez AddProduct_Comfort dans une boucle sur les lignes. Pour une XRechnung destinée aux administrations allemandes, définissez en outre alo.isKOSIT = True et alo.LeitwegID. ### Variante 2 : liaison anticipée avec une référence - Sous VB6 : Project > References ; sous VBA : Outils > Références . - Cochez « Aloaha ZUGFeRD Toolkit ». Si l'entrée ne figure pas dans la liste, choisissez le fichier Aloaha_ZUGFeRD.tlb via Parcourir ; il est fourni avec le SDK. - Déclarez la variable avec le type de classe. Les appels restent les mêmes qu'avec la liaison tardive : ``` Dim alo As Aloaha_ZUGFeRD.XML Set alo = New Aloaha_ZUGFeRD.XML alo.Licensekey = "VOTRE-CLE-DE-LICENCE" alo.ZUGFeRD_Profile = 1 ' ... suite comme dans la variante 1 ``` Avec la référence, l'IDE affiche toutes les méthodes et tous les paramètres (IntelliSense), et l'Explorateur d'objets (F2) présente l'interface complète. L'ordre des méthodes dans l'interface COM n'a pas changé depuis la version 10 ; les nouvelles fonctions ne sont ajoutées qu'à la fin. Les programmes compilés avec une référence continuent donc de fonctionner avec les versions plus récentes du SDK. ### Les méthodes surchargées portent d'autres noms en COM COM ne connaît pas la surcharge. Si une méthode existe plusieurs fois en .NET, la deuxième variante reçoit le suffixe _2 en VB6 et VBA : Nom en VB6/VBAParamètres WriteTotalsmontants sous forme de texte ("59.50") WriteTotals_2montants en Double AddProduct_Comfortnuméro de ligne sous forme de nombre AddProduct_Comfort_2numéro de ligne sous forme de texte (p. ex. "1.1") AddPaymentMeansmoyen de paiement sous forme de nombre (UNTDID 4461, p. ex. 58) AddPaymentMeans_2moyen de paiement sous forme de texte ("58") Transmettez les énumérations comme le profil ou le moyen de paiement sous forme de nombres. Pour le type de facture (BT-3), il existe une propriété dédiée Document_TypeINT, voir [Créer une facture et le type de facture (BT-3)](https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/) (en allemand). ### VB5, VBA et VBScript - Visual Basic 5 : le code ci-dessus fonctionne sans modification. La fonction d'aide Betrag n'utilise volontairement que des fonctions déjà disponibles en VB5. - VBA dans Access, Excel et Word : le même code dans un module standard. Avec un Office 64 bits, l'enregistrement 64 bits doit être présent (le programme d'installation du SDK fait les deux). La lecture des factures et l'exploitation des valeurs de ligne sont présentées dans Lire les valeurs de ligne en VBA et Access (en allemand). - VBScript : déclarez les variables sans type ( Dim alo ) et utilisez uniquement la liaison tardive ; le reste est identique. ### Erreurs fréquentes MessageCauseSolution Erreur d'exécution 429 : « Un composant ActiveX ne peut pas créer d'objet »La classe COM n'est pas enregistrée, n'est enregistrée que pour l'autre architecture (p. ex. 32 bits avec un Office 64 bits), ou le .NET Framework est absent.Exécuter le programme d'installation du SDK ou enregistrer avec le Regasm correspondant ; zugferd_com_test.vbs indique la cause. Erreur d'exécution 438 : « Propriété ou méthode non gérée par cet objet »Faute de frappe, ou la variante surchargée porte un autre nom (_2).Vérifier le nom ; avec une référence, l'Explorateur d'objets (F2) affiche tous les noms. Erreur d'exécution 13 : « Incompatibilité de type »Du texte là où le SDK attend un nombre (ou inversement).Vérifier le type de paramètre de la variante, voir le tableau ci-dessus. Erreur d'exécution 450 : « Nombre d'arguments incorrect »Trop de paramètres, ou un paramètre obligatoire manque.Comparer la liste des paramètres avec la [référence de l'API](https://www.zugferdpro.com/api/). Erreur Automation « Fichier introuvable »Enregistrée sans /codebase, et la DLL ne se trouve pas dans le GAC.Réenregistrer avec regasm /codebase. Validateur : BR-CO-10, BR-S-08, BR-CO-17Les totaux ne correspondent pas aux lignes ou à la base d'imposition.Base d'imposition = net après remises, voir [BR-S-08, BR-S-09 et BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). Si SaveXML renvoie False, la cause figure dans Last_Error. ### Alternative sans COM : zugcmd Si le code VB doit rester aussi inchangé que possible, votre programme écrit les données de facture dans des fichiers CSV et appelle l'outil en ligne de commande [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/), par exemple via Shell. zugcmd en produit une facture ZUGFeRD, Factur-X ou XRechnung et intègre le XML dans votre PDF. Étape par étape, avec des fichiers d'exemple testés, l'appel depuis votre propre application et les noms de fichiers : [Créer des factures électroniques via CSV et zugcmd depuis votre application](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). Tous les appels en détail : [démarrage rapide avec VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) – les méthodes et paramètres sont les mêmes en VB6. Un guide distinct existe pour Delphi : [Créer ZUGFeRD et XRechnung avec Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/). ### Questions fréquentes #### Puis-je créer des factures ZUGFeRD et des XRechnung avec Visual Basic 6 ? Oui. Le SDK Aloaha ZUGFeRD dispose d'une interface COM que VB6 utilise via CreateObject("Aloaha_ZUGFeRD.XML") ou via une référence à « Aloaha ZUGFeRD Toolkit ». Une migration vers .NET n'est pas nécessaire. #### Cela fonctionne-t-il aussi avec Visual Basic 5 ? Oui. VB5 utilise la même interface COM. Seules des fonctions comme Replace n'y existent pas encore ; la fonction d'aide pour le point décimal de cet article s'en passe. #### Cela fonctionne-t-il aussi dans Access ou Excel avec VBA ? Oui, avec le même code dans un module standard. Avec un Office 64 bits, la DLL doit aussi être enregistrée pour 64 bits ; le programme d'installation du SDK s'en charge. #### Ai-je besoin d'une référence à la bibliothèque de types ? Non, pas pour la liaison tardive avec CreateObject. La référence (liaison anticipée) apporte IntelliSense et des contrôles à la compilation. La DLL doit être enregistrée dans les deux cas. #### Que signifie l'erreur d'exécution 429 lors de CreateObject ? La classe COM n'est pas enregistrée sur cet ordinateur, ou seulement pour l'autre architecture. Exécutez le programme d'installation du SDK ou enregistrez la DLL avec le Regasm correspondant ; le script zugferd_com_test.vbs indique la cause. #### Pourquoi une méthode s'appelle-t-elle WriteTotals_2 en VB6 ? COM ne connaît pas la surcharge. La deuxième variante .NET d'une méthode reçoit le suffixe _2. WriteTotals attend les montants sous forme de texte, WriteTotals_2 en Double. --- ## F: Was bedeuten „zero rated goods“ und „commercial invoice“ bei einer §13b-Abschlagsrechnung? URL: https://www.zugferdpro.com/f-was-bedeuten-zero-rated-goods-und-commercial-invoice-bei-13b-abschlagsrechnungen/ Date: 2026-10-14 Business terms: BT-3, BT-118, BT-151, BT-121, BT-120, BT-31, BT-48, BT-12, BG-20 SDK methods: ActualDeliveryDate_102, AddBuyerAssignedID, AddContractReferencedDocument, AddDocumentNote, AddPaymentMeans, AddProduct_Comfort, AddTradeAllowanceCharge, AddTradePaymentTerms, AddTradeTax, BusinessProcessSpecifiedDocumentContextParameter, BuyerReference, CreateInvoice, Document_Type, IsKosit, Last_Error, SaveXML, WriteBuyer, WriteSeller, WriteSellerContactPerson, WriteTotals, ZUGfeRDStandard, set_URIUniversalCommunication Kurz: Wenn ein Rechnungsempfänger meldet, Ihre E-Rechnung enthalte „zero rated goods“ statt „VAT reverse charge“ und sei eine „commercial invoice“ statt einer „partial construction invoice“, dann zitiert er die englischen Namen der Codes im XML. „Zero rated goods“ ist die Steuerkategorie Z, „commercial invoice“ die Rechnungsart 380. Für eine Abschlagsrechnung über Bauleistungen nach § 13b UStG sind richtig: Steuerkategorie AE mit dem Befreiungsgrund VATEX-EU-AE und die Rechnungsart 875. Beides lässt sich mit dem Aloaha ZUGFeRD SDK setzen. ### Warum man die Begriffe im XML nicht findet Eine XRechnung oder ZUGFeRD-Rechnung enthält keine Klartexte für Steuerart und Rechnungsart, sondern Codes aus Codelisten. Prüfprogramme und Rechnungseingangssysteme zeigen dazu die englische Bezeichnung aus der Codeliste an: Im XMLFeldBezeichnung in der CodelisteBedeutung Z[BT-118](https://www.zugferdpro.com/bt/bt-118/), [BT-151](https://www.zugferdpro.com/bt/bt-151/)Zero rated goodsSteuersatz 0 % (Nullsatz) AEBT-118, BT-151VAT Reverse ChargeSteuerschuldnerschaft des Leistungsempfängers (§ 13b UStG) 380[BT-3](https://www.zugferdpro.com/bt/bt-3/)Commercial invoicenormale Rechnung 875BT-3Partial construction invoiceAbschlagsrechnung (Bauleistung) 876BT-3Partial final construction invoiceTeilschlussrechnung 877BT-3Final construction invoiceSchlussrechnung Technisch ist eine Rechnung mit Z und 380 oft gültig – der Validator findet keinen Fehler. Inhaltlich ist sie aber falsch: Bei § 13b schuldet der Empfänger die Umsatzsteuer, die Leistung ist nicht steuerfrei. Viele Empfänger prüfen deshalb Steuerkategorie und Rechnungsart und lehnen die Rechnung ab. ### So setzen Sie es mit dem SDK - Rechnungsart (BT-3): Eigenschaft Document_Type mit PartialConstructionInvoice (875), PartialFinalConstructionInvoice (876) oder FinalConstructionInvoice (877). Aus VBA/COM geht auch Document_TypeINT = 875 . Ohne Angabe schreibt das SDK 380. Wichtig: Die Eigenschaft erst nach CreateInvoice setzen – CreateInvoice legt jede neue Rechnung mit 380 an. - Steuerkategorie in den Positionen (BT-151): in AddProduct_Comfort "AE" statt "Z" , Steuersatz 0. - Steueraufschlüsselung (BG-23): AddTradeTax mit Kategorie "AE" , Befreiungsgrund als Text (BT-120) und Code VATEX-EU-AE (BT-121). - USt-IdNr.: Bei AE müssen die USt-IdNr. des Verkäufers (BT-31) und des Käufers (BT-48) in der Rechnung stehen – über WriteSeller und WriteBuyer bzw. AddBuyerTAX . ### Beispiel: Abschlagsrechnung mit Reverse Charge (VB.NET) ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice alo.isKOSIT = True ' XRechnung alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" alo.CreateInvoice("AR-2026-001", "", "20261008", "102", , "", "EUR") alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.PartialConstructionInvoice ' BT-3 = 875 alo.AddDocumentNote("Steuerschuldnerschaft des Leistungsempfängers nach § 13b UStG.") alo.WriteSeller("Bau Beispiel GmbH", "35390", "Gießen", "Werkstraße 5", "", "DE", "DE123456789") ' BT-31 alo.WriteSellerContactPerson("Erika Beispiel", "", "rechnung@bau-beispiel.example", "+49 641 123456") alo.set_URIUniversalCommunication("rechnung@bau-beispiel.example", "EM", True) alo.WriteBuyer("Kunde Beispiel GmbH & Co. KG", "63667", "Nidda", "Kundenstraße 1", "", "DE", "", "DE987654321") ' BT-48 alo.BuyerReference = "25000151" alo.set_URIUniversalCommunication("rechnungseingang@kunde.example", "EM", False) alo.AddBuyerAssignedID("25000151") ' Bestellnummer BT-13 alo.AddContractReferencedDocument("7615") ' Vertragsnummer BT-12 alo.ActualDeliveryDate_102 = "20261007" alo.AddPaymentMeans("58", "Überweisung", "DE02120300000000202051", "Bau Beispiel GmbH") alo.AddTradePaymentTerms("Zahlbar ohne Abzug innerhalb von 21 Tagen", "20261029", "102") ' Position mit Kategorie AE und 0 % alo.AddProduct_Comfort("1", "", "", "1", "H87", "1. Abschlagsrechnung gemäß Aufstellung", "", "", "EUR", "", "H87", _ False, "", "", "", "196289.81", "EUR", "1", "H87", "VAT", "AE", "0.00", "", "196289.81", "EUR", "", "") ' 4 % Nachlass auf Rechnungsebene (BG-20), ebenfalls Kategorie AE alo.AddTradeAllowanceCharge(False, "196289.81", "EUR", "7851.59", "EUR", "VAT", "AE", "0.00", "Nachlass", "4", "95") ' Steueraufschlüsselung mit Befreiungsgrund und VATEX-Code alo.AddTradeTax("0.00", "EUR", "188438.22", "EUR", "VAT", "AE", "0.00", _ "Steuerschuldnerschaft des Leistungsempfängers (§ 13b UStG)", "", "", "", "VATEX-EU-AE") alo.WriteTotals("196289.81", "188438.22", "188438.22", "188438.22", "0.00", "7851.59", "0.00", "0.00", "0.00") alo.SaveXML("C:\Rechnungen\abschlag.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ``` Alle Namen, Nummern und Bankdaten sind Muster-Werte. Eine mit genau diesem Aufbau erzeugte XRechnung wurde vom KoSIT-Validator (XRechnung-Konfiguration 3.0.2) ohne Fehler und ohne Warnungen angenommen (Stand 14.10.2026). ### Weitere typische Fehler bei solchen Rechnungen - Rechnungsart als Hinweistext: Der zweite Parameter von CreateInvoice ist kein Code für die Rechnungsart, sondern ein Rechnungshinweis (BT-22). alo.CreateInvoice(Nr, "875", Datum, …) schreibt deshalb 875 ins XML, die Rechnungsart bleibt 380. Richtig: ``` alo.CreateInvoice(Nr, "", Datum, "102", , "", "EUR") ' 2. Parameter = Hinweistext (BT-22), hier leer alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.PartialConstructionInvoice ' danach: BT-3 = 875 ``` - Nachlass als Position: Eine Position „abzgl. 4 % Nachlass“ mit positivem Einzelpreis und negativem Positionsbetrag passt nicht zusammen (Preis × Menge ≠ Betrag). Besser ist ein Nachlass auf Rechnungsebene wie im Beispiel. - Nachlass mit falscher Steuerkategorie: Auch der Nachlass braucht die Kategorie AE mit 0 %. Steht dort S , meldet der Validator BR-S-01, BR-S-06 und BR-AE-08 – siehe BR-S-01, BR-S-06 und BR-AE-08 beim Nachlass . - Abrechnungszeitraum vertauscht (BR-29): Das Ende (BT-74) darf nicht vor dem Beginn (BT-73) liegen. - SEPA-Lastschrift ohne Gläubiger-ID: Bei Zahlungsart 59 gehört die Gläubiger-Identifikationsnummer (BT-90) in alo.CreditorReferenceID , die IBAN des Zahlers ohne Leerzeichen – siehe XRechnung mit SEPA-Lastschrift . - Vertragsnummer nur als Freitext: Sie gehört in BT-12 ( AddContractReferencedDocument ), damit sie maschinell zugeordnet werden kann. - Platzhalter: Werte wie „Buchungsreferenz“ in BT-19 oder „1“ als Käuferreferenz weglassen bzw. durch die echten Werte des Kunden ersetzen. Wie Abschläge in der Schlussrechnung verrechnet werden, steht unter [Schlussrechnung mit Abschlagsrechnungen als XRechnung](https://www.zugferdpro.com/schlussrechnung-mit-abschlagsrechnungen-xrechnung-bt-113-bg-3/). Ihre eigene Rechnung prüfen Sie wie unter [XRechnung vor dem Versand prüfen](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) beschrieben. Befreiungsgrund nur in der Steueraufschlüsselung: Übergeben Sie den Grund für AE nicht zusätzlich in jeder Position (AddProduct_Comfort, WriteItemTradeTax) – ein Befreiungsgrund je Position stellt die Rechnung auf Factur-X EXTENDED um, und sie ist dann keine XRechnung mehr. Welche Aufrufe das außerdem auslösen, steht in [Warum wird meine XRechnung als Factur-X EXTENDED erstellt?](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-als-factur-x-extended-erstellt/) ### Häufige Fragen #### Was bedeutet „zero rated goods“ in einer E-Rechnung? Das ist die englische Bezeichnung der Umsatzsteuerkategorie Z (Nullsatz, 0 %). Sie steht im XML als CategoryCode Z. Für Rechnungen nach § 13b UStG ist sie falsch – richtig ist AE (VAT Reverse Charge). #### Welche Steuerkategorie gilt für § 13b UStG? AE („VAT Reverse Charge“) mit 0 % Steuersatz, einem Befreiungsgrund als Text und dem Code VATEX-EU-AE. Die USt-IdNr. von Verkäufer und Käufer müssen in der Rechnung stehen. #### Was bedeutet „commercial invoice“? Das ist die Rechnungsart 380, die normale Handelsrechnung. Abschlagsrechnungen über Bauleistungen haben die Rechnungsart 875 („partial construction invoice“), Teilschlussrechnungen 876 und Schlussrechnungen 877. #### Erlaubt die XRechnung die Rechnungsart 875? Ja. Die XRechnung erlaubt unter anderem 326, 380, 381, 384, 389, 875, 876 und 877. Eine Abschlagsrechnung mit 875 und Reverse Charge wurde vom KoSIT-Validator ohne Fehler angenommen. #### Wie setze ich die Rechnungsart 875 mit dem Aloaha ZUGFeRD SDK? Mit alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.PartialConstructionInvoice oder aus VBA/COM mit alo.Document_TypeINT = 875 – immer nach CreateInvoice. Ohne Angabe schreibt das SDK 380. #### Warum steht 875 im Hinweis statt in der Rechnungsart? Weil 875 als zweiter Parameter an CreateInvoice übergeben wurde. Dieser Parameter ist der Rechnungshinweis (BT-22), nicht die Rechnungsart. Die Rechnungsart setzen Sie nach CreateInvoice mit Document_Type bzw. Document_TypeINT. --- ## F: Warum warnt der Validator vor einem leeren ApplicableHeaderTradeDelivery (PEPPOL-EN16931-R008)? URL: https://www.zugferdpro.com/f-warum-warnt-der-validator-vor-einem-leeren-applicableheadertradedelivery/ Date: 2026-10-14 Business terms: BG-13, BT-72, BT-70, BT-75, BT-77, BT-78, BT-80, BG-14, BT-73, BT-74 SDK methods: ActualDeliveryDate_102, AddProduct_Comfort, WriteBillingPeriod, WriteShipFromTradeParty, WriteShipToTradeParty, WriteShipToTradePartyItem Kurz: Die Warnung PEPPOL-EN16931-R008 („Document MUST not contain empty elements“) beim Element ApplicableHeaderTradeDelivery bedeutet: Der Lieferblock ist vorhanden, aber leer. Der Block ist im Schema Pflicht und muss im XML stehen – leer ist er gültig, erzeugt aber diese Warnung. Sie verschwindet, sobald Sie auf Rechnungsebene eine Lieferanschrift (BG-13) oder ein Liefer- bzw. Leistungsdatum (BT-72) angeben. ### Warum der Block leer im XML steht In ZUGFeRD 2.x, Factur-X und XRechnung (CII) muss ram:ApplicableHeaderTradeDelivery immer vorkommen. Fehlt er, lehnt der Validator die Rechnung mit einem Schemafehler ab (siehe [„One of ApplicableHeaderTradeDelivery is expected“](https://www.zugferdpro.com/f-was-bedeutet-applicableheadertradedelivery-is-expected/)). Ab Version 11 schreibt das Aloaha ZUGFeRD SDK den Block deshalb immer – auch wenn keine Lieferangaben auf Rechnungsebene gemacht wurden. Dann steht im XML nur: ``` ``` Das ist schemakonform. Die Regel PEPPOL-EN16931-R008 meldet leere Elemente aber als Warnung. Die Rechnung bleibt gültig, die Warnung lässt sich jedoch leicht vermeiden. Typischer Fall: Lieferscheine und Lieferdaten stehen nur in den Positionen, auf Rechnungsebene fehlt jede Lieferangabe. ### Lösung: den Lieferblock füllen 1. Lieferanschrift angeben (BG-13) – etwa die Baustelle oder das Lager, an das geliefert wurde: ``` alo.WriteShipToTradeParty("Baustelle 4711", "12345", "Musterstadt", "Bahnhofstraße 1", "", "DE") ' BT-70, BT-78, BT-77, BT-75, BT-80 ``` 2. oder ein Liefer- bzw. Leistungsdatum angeben (BT-72): ``` alo.ActualDeliveryDate_102 = "20261013" ' Format JJJJMMTT ``` Eines von beiden genügt. Bei Sammelrechnungen über mehrere Baustellen siehe den Abschnitt [Sammelrechnung](#sammelrechnung) unten. Ein Abrechnungszeitraum (BG-14, [WriteBillingPeriod](https://www.zugferdpro.com/api/writebillingperiod/)) steht dagegen im Abrechnungsblock und füllt den Lieferblock nicht. Wir haben eine Rechnung mit leerem Lieferblock mit dem Mustang-Validator geprüft: gültig, eine Warnung PEPPOL-EN16931-R008. Mit Lieferanschrift auf Rechnungsebene: gültig, ohne Warnung (Stand 14.10.2026). ### Wann ist was sinnvoll? - Warenlieferung an eine abweichende Adresse (Baustelle, Filiale, Lager): Lieferanschrift mit WriteShipToTradeParty . Mehr dazu unter Lieferanschrift in der E-Rechnung (BT-75 bis BT-80) . - Lieferung oder Leistung an einem Tag: Leistungsdatum mit ActualDeliveryDate_102 – das ist nach § 14 UStG ohnehin eine Pflichtangabe, sofern nicht ein Abrechnungszeitraum angegeben ist. - Innergemeinschaftliche Lieferung (Kategorie K): Hier ist das Land der Lieferanschrift (BT-80) sogar Pflicht (Regel BR-IC-12). ### Sammelrechnung mit mehreren Baustellen oder Lieferorten Bei einer Sammelrechnung über einen Abrechnungszeitraum (BG-14) mit Lieferungen an verschiedene Baustellen passt weder eine einzelne Lieferanschrift noch ein einzelnes Lieferdatum auf Rechnungsebene. Erfundene Werte sind keine Lösung. Im Profil EXTENDED gibt es eine Angabe, die trotzdem immer stimmt: den Abgangsort (Ship From), also das eigene Werk oder Lager, von dem aus geliefert wird. Die Baustellen gehören dann als Lieferanschrift in die jeweilige Position: ``` alo.WriteBillingPeriod("20260811", "20260813", "102") ' BG-14 Abrechnungszeitraum alo.WriteShipFromTradeParty("Schotterwerk Beispiel, Werk Musterort", "92353", "Musterort", "Werkstraße 3", "", "DE") ' Abgangsort (EXTENDED) Dim p As Integer = alo.AddProduct_Comfort(...) ' Position 1 alo.WriteShipToTradePartyItem(p.ToString(), "Baustelle 4711", "12345", "Musterstadt", "Bahnhofstraße 1", "", "DE") ' Baustelle dieser Position alo.AddDeliveryNoteItem(p, "708805", "20260811", "102", "") ' Lieferschein dieser Position ``` Eine so aufgebaute Sammelrechnung (Abrechnungszeitraum, Abgangsort auf Rechnungsebene, je Position eigene Baustelle und eigener Lieferschein) hat der Mustang-Validator als gültig ohne Fehler und ohne Warnungen bewertet. Ohne den Abgangsort erscheint die Warnung PEPPOL-EN16931-R008. Abgangsort, Lieferanschrift je Position und Lieferschein je Position ([WriteShipFromTradeParty](https://www.zugferdpro.com/api/writeshipfromtradeparty/), [WriteShipToTradePartyItem](https://www.zugferdpro.com/api/writeshiptotradepartyitem/), [AddDeliveryNoteItem](https://www.zugferdpro.com/api/adddeliverynoteitem/)) gibt es nur im Profil EXTENDED. In EN 16931 und XRechnung bleibt der Lieferblock einer reinen Sammelrechnung ohne Lieferangaben auf Rechnungsebene leer – die Warnung ist dann hinzunehmen, die Rechnung bleibt gültig. ### Häufige Fragen #### Was bedeutet PEPPOL-EN16931-R008? Die Regel meldet leere Elemente im XML („Document MUST not contain empty elements“). Sie ist eine Warnung, kein Fehler – die Rechnung bleibt gültig. #### Ist ein leeres ApplicableHeaderTradeDelivery ein Fehler? Nein. Der Block ist im Schema Pflicht und darf leer sein. Fehlt er ganz, ist das ein Schemafehler. Leer erzeugt er nur die Warnung PEPPOL-EN16931-R008. #### Wie fülle ich den Lieferblock mit dem Aloaha ZUGFeRD SDK? Mit einer Lieferanschrift über WriteShipToTradeParty (BG-13) oder einem Leistungsdatum über ActualDeliveryDate_102 (BT-72). Eines von beiden genügt. #### Reichen Lieferscheine in den Positionen? Nein. Lieferscheine und Lieferdaten in den Positionen stehen im Lieferblock der Position, nicht im Lieferblock der Rechnung. Der Block auf Rechnungsebene bleibt dann leer. #### Was trage ich bei einer Sammelrechnung über mehrere Baustellen ein? Im Profil EXTENDED den Abgangsort (eigenes Werk oder Lager) auf Rechnungsebene mit WriteShipFromTradeParty und die Baustellen als Lieferanschrift der jeweiligen Position mit WriteShipToTradePartyItem. Der Abrechnungszeitraum bleibt bei WriteBillingPeriod. #### Warum schreibt das SDK den Block auch ohne Inhalt? Weil er im ZUGFeRD-, Factur-X- und XRechnung-Schema vorgeschrieben ist. Ohne ihn würde die Rechnung mit dem Schemafehler „One of ApplicableHeaderTradeDelivery is expected“ abgelehnt. --- ## F: Was bedeutet „One of ApplicableHeaderTradeDelivery is expected“ im Prüfbericht? URL: https://www.zugferdpro.com/f-was-bedeutet-applicableheadertradedelivery-is-expected/ Date: 2026-10-13 Business terms: BT-72, BG-13, BG-14, BT-73, BT-74 SDK methods: ActualDeliveryDate_102, WriteBillingPeriod Kurz: Der Prüfbericht meldet „Invalid content was found starting with element ApplicableHeaderTradeSettlement. One of ApplicableHeaderTradeDelivery is expected“ (Fehlercode cvc-complex-type.2.4.a), wenn im XML der Lieferblock fehlt. In ZUGFeRD 2.x, Factur-X und XRechnung muss dieser Block immer vorhanden sein – auch leer. ### Ursache Ältere Versionen des Aloaha ZUGFeRD SDK (Version 10) schreiben den Block nur, wenn Lieferangaben vorhanden sind – zum Beispiel ein Liefer- oder Leistungsdatum (BT-72) oder eine Lieferanschrift (BG-13). Rechnungen über Dienstleistungen, Gebühren oder Zinsen ohne Leistungsdatum werden deshalb mit diesem Schemafehler abgelehnt. Da der Schemafehler die Prüfung früh abbricht, zeigt der Bericht oft nur diesen einen Fehler. ### Lösung 1. Leistungsdatum angeben – das ist ohnehin Pflichtangabe nach § 14 UStG: ``` alo.ActualDeliveryDate_102 = "20261013" ' BT-72, Format JJJJMMTT ``` Bei Leistungen über einen Zeitraum (z. B. Zinsen oder Gebühren eines Monats) zusätzlich den Abrechnungszeitraum (BG-14): ``` alo.WriteBillingPeriod("20260901", "20260930", "102") ' BT-73 / BT-74 ``` 2. Auf Version 11 aktualisieren: Ab Version 11 schreibt das SDK den Lieferblock für ZUGFeRD 2.x, Factur-X und XRechnung immer. Download und Versionshinweise unter [Downloads](https://www.zugferdpro.com/tooldownloads/). Ohne Lieferangaben bleibt er dann leer – das ist gültig, erzeugt aber eine Warnung: [Warum warnt der Validator vor einem leeren ApplicableHeaderTradeDelivery?](https://www.zugferdpro.com/f-warum-warnt-der-validator-vor-einem-leeren-applicableheadertradedelivery/) Nach der Korrektur die Rechnung erneut prüfen – jetzt werden auch die inhaltlichen Regeln (Schematron) ausgewertet: [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) Siehe auch: [ActualDeliveryDate_102](https://www.zugferdpro.com/api/actualdeliverydate_102/), [WriteBillingPeriod](https://www.zugferdpro.com/api/writebillingperiod/) und [XRechnung mit Verrechnung statt Zahlung](https://www.zugferdpro.com/f-wie-erstelle-ich-eine-xrechnung-die-verrechnet-statt-bezahlt-wird/). --- ## F: Was bedeutet BR-CL-06 in der XRechnung? URL: https://www.zugferdpro.com/f-was-bedeutet-br-cl-06-in-der-xrechnung/ Date: 2026-10-13 Business terms: BT-8, BT-7, BG-23 SDK methods: AddTradeTax Kurz: Die Regel BR-CL-06 („Value added tax point date code MUST be coded using a restriction of UNTDID 2475“) meldet, dass im Feld BT-8 (ram:DueDateTypeCode) etwas anderes als ein erlaubter Code steht. Erlaubt sind nur 5 (Rechnungsdatum), 29 (Liefer-/Leistungsdatum) und 72 (Zahlungsdatum). Häufigster Fehler: Dort wird ein Datum übergeben. ### Die Ursache im Code Der Parameter DueDateTypeCode von [AddTradeTax](https://www.zugferdpro.com/api/addtradetax/) heißt wie ein Datum, ist aber ein Code: ``` ' falsch: Rechnungsdatum als DueDateTypeCode alo.AddTradeTax("19.00", "EUR", "100.00", "EUR", "VAT", "S", "19.00", "", "", "102", "20261013") ' richtig: leer lassen (der Normalfall) ... alo.AddTradeTax("19.00", "EUR", "100.00", "EUR", "VAT", "S", "19.00") ' ... oder einen der Codes 5, 29 oder 72 angeben alo.AddTradeTax("19.00", "EUR", "100.00", "EUR", "VAT", "S", "19.00", "", "", "", "5") ``` In Deutschland wird BT-8 praktisch nie benötigt: Die Umsatzsteuer entsteht nach dem Leistungsdatum (BT-72), das Sie ohnehin angeben. Ein festes Steuerdatum gehört – wenn überhaupt – in BT-7 (Parameter TaxPointDate); BT-7 und BT-8 dürfen nicht gemeinsam vorkommen. Siehe auch: [XRechnung vor dem Versand prüfen](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) und [XRechnung mit Verrechnung statt Zahlung](https://www.zugferdpro.com/f-wie-erstelle-ich-eine-xrechnung-die-verrechnet-statt-bezahlt-wird/). --- ## F: Wie erstelle ich eine XRechnung, die verrechnet statt bezahlt wird? URL: https://www.zugferdpro.com/f-wie-erstelle-ich-eine-xrechnung-die-verrechnet-statt-bezahlt-wird/ Date: 2026-10-13 Business terms: BT-81, BT-82, BT-20, BT-72, BG-16, BG-14, BT-9, BT-83 SDK methods: ActualDeliveryDate_102, AddPaymentMeans, AddProduct_Comfort, AddTradePaymentTerms, AddTradeTax, BusinessProcessSpecifiedDocumentContextParameter, BuyerReference, CreateInvoice, IsKosit, Last_Error, PaymentReference, SaveXML, WriteBillingPeriod, WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson, WriteTotals, ZUGfeRDStandard, set_URIUniversalCommunication Kurz: Wird der Rechnungsbetrag nicht überwiesen, sondern mit einer Abrechnung oder Gutschrift verrechnet (einbehalten), verwenden Sie als Zahlungsart (BT-81) den Code 97 „Verrechnung zwischen Partnern“. Den Hinweis zur Verrechnung schreiben Sie in den Zahlungsart-Text (BT-82) und in die Zahlungsbedingungen (BT-20). Bankdaten sind dann nicht nötig. ### Was die XRechnung verlangt - Die Gruppe Zahlungsanweisungen ( BG-16 ) mit der Zahlungsart ist in der XRechnung Pflicht – auch wenn nichts überwiesen wird. Code 97 ist dafür vorgesehen. - IBAN und BIC werden nur für Überweisung (30, 58) und Lastschrift (59) verlangt – bei 97 bleiben sie leer. - Ist ein Betrag fällig, braucht die Rechnung ein Fälligkeitsdatum ( BT-9 ) oder Zahlungsbedingungen ( BT-20 ). Ein Satz wie „Der Betrag wird mit Abrechnung … verrechnet.“ erfüllt das. - Das Liefer- bzw. Leistungsdatum ( BT-72 ) oder einen Leistungszeitraum ( BG-14 ) sollten Sie immer angeben – das verlangt § 14 UStG ohnehin. ### Beispiel mit dem Aloaha ZUGFeRD SDK (VB.NET) ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice alo.isKOSIT = True ' XRechnung alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" alo.CreateInvoice("2026-0815", "Gebührenrechnung zur Abrechnung 2026-0815", "20261013", "102", , "", "EUR") ' Leistungsdatum (BT-72) und Abrechnungszeitraum (BG-14) alo.ActualDeliveryDate_102 = "20261013" alo.WriteBillingPeriod("20260901", "20260930", "102") ' Käufer, Verkäufer, Kontaktpersonen (Name ODER Abteilung, nicht beides) alo.WriteBuyer("Muster GmbH", "12345", "Musterstadt", "Musterstraße 1", "", "DE", "K-4711") ' Land (BT-55) und Kundennummer (BT-46) alo.BuyerReference = "4711" alo.WriteBuyerContactPerson("Max Muster", "", "rechnung@muster.example", "+49 30 123456") alo.set_URIUniversalCommunication("rechnung@muster.example", "EM", False) ' BT-49 alo.WriteSeller("Beispiel AG", "54321", "Beispielstadt", "Hauptstraße 2", "", "DE", "DE123456789") alo.WriteSellerContactPerson("Erika Beispiel", "", "buchhaltung@beispiel.example", "+49 40 654321") alo.set_URIUniversalCommunication("buchhaltung@beispiel.example", "EM", True) ' BT-34 ' Zahlungsart 97 = Verrechnung, ohne Bankdaten (BT-81, BT-82) alo.AddPaymentMeans(Aloaha_ZUGFeRD.iXML.Payment_Means.ClearanceBetweenPartners, _ "Verrechnung mit Abrechnung 2026-0815", "") ' Zahlungsbedingungen (BT-20) alo.AddTradePaymentTerms("Der Betrag wird mit der Abrechnung 2026-0815 verrechnet. Keine Zahlung erforderlich.") alo.PaymentReference = "2026-0815" ' BT-83 ' Position, Steuer, Summen wie bei jeder anderen Rechnung alo.AddProduct_Comfort("1", "", "", "1.00", "C62", "Abrechnungsgebühr", "", "", "EUR", "", "C62", False, "", "", "", _ "100.00", "EUR", "1.00", "C62", "VAT", "S", "19.00", "", "100.00", "EUR", "", "") alo.AddTradeTax("19.00", "EUR", "100.00", "EUR", "VAT", "S", "19.00") ' DueDateTypeCode leer lassen alo.WriteTotals("100.00", "119.00", "119.00", "100.00", "19.00", "0.00", "0.00", "0.00", "0.00") alo.SaveXML("C:\Rechnungen\xrechnung.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ``` Das mit diesem Code erzeugte XML wird vom KoSIT-Validator (XRechnung 3.0.2) ohne Fehler und ohne Warnungen angenommen. Alle Namen, Nummern und Adressen im Beispiel sind Muster-Werte. Fälliger Betrag (BT-115) bleibt der Rechnungsbetrag – verrechnet wird er außerhalb der Rechnung. ### Typische Stolpersteine - Kein Liefer- oder Leistungsdatum: Ältere SDK-Versionen lassen dann den Lieferblock weg, die XRechnung wird mit einem Schemafehler abgelehnt – siehe „ApplicableHeaderTradeDelivery is expected“ . - Datum statt Code bei der Steuer: Der letzte Parameter von AddTradeTax ist ein Code, kein Datum – siehe BR-CL-06 . - Name und Abteilung beim Ansprechpartner: nur eines von beiden – siehe CII-SR-465 . - Land des Käufers vergessen: Das Land (BT-55) ist Pflicht. Übergeben Sie es bei WriteBuyer oder setzen Sie alo.BuyerCountry = "DE" . - Variablenname in Anführungszeichen: set_URIUniversalCommunication("MeineEmailVariable", …) schreibt den Text statt der Adresse in die Rechnung. Der Validator merkt das nicht. - Beträge mit Komma: Beträge immer mit Punkt übergeben, z. B. Betrag.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture) . Prüfen Sie das Ergebnis vor dem Versand mit dem KoSIT-Validator: [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) Mehr zu den Zahlungsarten: [AddPaymentMeans](https://www.zugferdpro.com/api/addpaymentmeans/) und [AddTradePaymentTerms](https://www.zugferdpro.com/api/addtradepaymentterms/). --- ## „E-Rechnung bereit für den Handel“: Alle 39 VeR-Pflichtfelder mit dem Aloaha ZUGFeRD SDK URL: https://www.zugferdpro.com/e-rechnung-bereit-fuer-den-handel-ver-pflichtfelder/ Date: 2026-10-13 Business terms: BT-29, BT-46, BT-13, BT-16, BT-71, BT-157, BT-155, BT-156, BT-33, BT-41, BT-48, BT-70, BT-19, BT-22, BT-72, BT-73, BT-99, BT-84, BT-120, BT-127, BT-133, BT-160 SDK methods: ActualDeliveryDate_102, AddBuyerAssignedID, AddBuyerGlobalID, AddBuyerTAX, AddDocumentNote, AddPaymentMeans, AddProduct_Comfort, AddReceivableSpecifiedTradeAccountingAccount, AddSellerGlobalID, AddTradeAllowanceCharge, AddTradePaymentTerms, AddTradeTax, Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount, BusinessProcessSpecifiedDocumentContextParameter, BuyerReference, CreateInvoice, IsKosit, Last_Error, SaveXML, SellerDescription, SellerID, SetDespatchAdviceReferencedDocument, Trade_ItemTradeBuyerAssignedID, WriteBillingPeriod, WriteBuyer, WriteSeller, WriteSellerContactPerson, WriteShipToTradeParty, WriteTotals, ZUGfeRDStandard, addApplicableProductCharacteristics, set_URIUniversalCommunication Kurz: Der Verband elektronische Rechnung (VeR) hat für die Initiative „E-Rechnung bereit für den Handel“ 39 Felder der EN 16931 festgelegt, die Handelsunternehmen in jeder E-Rechnung erwarten – darunter GLN von Verkäufer, Käufer und Lieferort, Bestell- und Lieferscheinnummer, GTIN sowie Artikelnummern von Verkäufer und Käufer. Das Aloaha ZUGFeRD SDK schreibt alle 39 Felder, sowohl in der XRechnung als auch in ZUGFeRD / Factur-X EN 16931. Die Tabelle zeigt für jedes Feld die passende SDK-Methode. ### Was ist das VeR-Siegel? Von den 39 Feldern sind 11 ohnehin gesetzliche bzw. bedingte Pflichtangaben einer E-Rechnung (z. B. Leistungsdatum, Bankverbindung, Steuerbefreiungsgrund). 28 Felder gehen darüber hinaus und sind für automatisierte Handelsprozesse wichtig: eindeutige Identifikatoren für Geschäftspartner und Lieferorte, Bestell- und Lieferscheininformationen und Artikelkennungen. Der VeR vergibt dafür an E-Rechnungs-Lösungen das Qualitätssiegel „E-Rechnung bereit für den Handel“ – nach Antrag und einem Prüf- und Testverfahren, nur für Funktionen, die produktiv verfügbar sind. Quelle: [Pflichtfelder-Empfehlung des VeR (PDF)](https://www.verband-e-rechnung.org/wp-content/uploads/2026/09/Pflichtfelder-VeR-Siegel.pdf). ### Alle 39 Felder und die SDK-Methoden FeldBezeichnung (VeR-Liste)SDKHinweis [BT-29](https://www.zugferdpro.com/bt/bt-29/)Kennung / Globaler Identifier des Verkäufers[SellerID](https://www.zugferdpro.com/api/sellerid/) / [AddSellerGlobalID](https://www.zugferdpro.com/api/addsellerglobalid/)z. B. GLN mit Schema 0088 [BT-33](https://www.zugferdpro.com/bt/bt-33/)Sonstige rechtliche Informationen des VerkäufersSellerDescriptionSitz, Registergericht, HRB [BT-41](https://www.zugferdpro.com/bt/bt-41/)Ansprechpartner Verkäufer[WriteSellerContactPerson](https://www.zugferdpro.com/api/writesellercontactperson/)Name oder Abteilung, nicht beides [BT-42](https://www.zugferdpro.com/bt/bt-42/)Telefonnummer des Ansprechpartners[WriteSellerContactPerson](https://www.zugferdpro.com/api/writesellercontactperson/) [BT-43](https://www.zugferdpro.com/bt/bt-43/)E-Mail-Adresse des Ansprechpartners[WriteSellerContactPerson](https://www.zugferdpro.com/api/writesellercontactperson/) [BT-46](https://www.zugferdpro.com/bt/bt-46/)Kennung / Globaler Identifier des Käufers[WriteBuyer (Kundennummer)](https://www.zugferdpro.com/api/writebuyer/) / [AddBuyerGlobalID](https://www.zugferdpro.com/api/addbuyerglobalid/)ID oder GLN, nicht beides [BT-48](https://www.zugferdpro.com/bt/bt-48/)USt-IdNr. des Käufers[AddBuyerTAX](https://www.zugferdpro.com/api/addbuyertax/)Schema VA [BT-13](https://www.zugferdpro.com/bt/bt-13/)Bestellnummer[AddBuyerAssignedID](https://www.zugferdpro.com/api/addbuyerassignedid/) [BT-70](https://www.zugferdpro.com/bt/bt-70/)Firmenname des Waren- bzw. Leistungsempfängers[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/) [BT-71](https://www.zugferdpro.com/bt/bt-71/)Identifier / Globaler Identifier des Lieferorts[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/)LocationID oder GLN, nicht beides [BT-75](https://www.zugferdpro.com/bt/bt-75/)Straße und Hausnummer – Adresszeile 1[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/) [BT-76](https://www.zugferdpro.com/bt/bt-76/)Adresszeile 2[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/) [BT-77](https://www.zugferdpro.com/bt/bt-77/)Stadt des Leistungsempfängers[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/) [BT-78](https://www.zugferdpro.com/bt/bt-78/)PLZ des Leistungsempfängers[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/) [BT-80](https://www.zugferdpro.com/bt/bt-80/)Land des Leistungsempfängers[WriteShipToTradeParty](https://www.zugferdpro.com/api/writeshiptotradeparty/) [BT-19](https://www.zugferdpro.com/bt/bt-19/)Buchungsreferenz des Käufers[AddReceivableSpecifiedTradeAccountingAccount](https://www.zugferdpro.com/api/addreceivablespecifiedtradeaccountingaccount/) [BT-22](https://www.zugferdpro.com/bt/bt-22/)Freitext zur Rechnung[AddDocumentNote](https://www.zugferdpro.com/api/adddocumentnote/) [BT-21](https://www.zugferdpro.com/bt/bt-21/)Code zum Freitext[AddDocumentNote](https://www.zugferdpro.com/api/adddocumentnote/)z. B. AAI, REG [BT-16](https://www.zugferdpro.com/bt/bt-16/)Lieferscheinnummer[SetDespatchAdviceReferencedDocument](https://www.zugferdpro.com/api/setdespatchadvicereferenceddocument/)nicht AddDeliveryNote (EXTENDED) [BT-72](https://www.zugferdpro.com/bt/bt-72/)Liefer-/Leistungsdatum[ActualDeliveryDate_102](https://www.zugferdpro.com/api/actualdeliverydate_102/) [BT-73](https://www.zugferdpro.com/bt/bt-73/)Beginn der Rechnungsperiode[WriteBillingPeriod](https://www.zugferdpro.com/api/writebillingperiod/) [BT-74](https://www.zugferdpro.com/bt/bt-74/)Ende der Rechnungsperiode[WriteBillingPeriod](https://www.zugferdpro.com/api/writebillingperiod/) [BT-99](https://www.zugferdpro.com/bt/bt-99/)Zuschlag auf Dokumentebene[AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/)ChargeIndicator = True [BT-104](https://www.zugferdpro.com/bt/bt-104/)Text zum Zuschlag[AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/)Parameter Reason [BT-105](https://www.zugferdpro.com/bt/bt-105/)Code zum Zuschlag[AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/)Parameter ReasonCode (UNTDID 7161) [BT-97](https://www.zugferdpro.com/bt/bt-97/)Rabattgrund[AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/)ChargeIndicator = False, Reason [BT-98](https://www.zugferdpro.com/bt/bt-98/)Konditionsart (Code)[AddTradeAllowanceCharge](https://www.zugferdpro.com/api/addtradeallowancecharge/)ReasonCode (UNTDID 5189) [BT-84](https://www.zugferdpro.com/bt/bt-84/)IBAN[AddPaymentMeans](https://www.zugferdpro.com/api/addpaymentmeans/) [BT-85](https://www.zugferdpro.com/bt/bt-85/)Name des Kontoinhabers[AddPaymentMeans](https://www.zugferdpro.com/api/addpaymentmeans/) [BT-86](https://www.zugferdpro.com/bt/bt-86/)BIC[AddPaymentMeans](https://www.zugferdpro.com/api/addpaymentmeans/) [BT-120](https://www.zugferdpro.com/bt/bt-120/)Umsatzsteuer-Befreiungsgrund (Text)[AddTradeTax](https://www.zugferdpro.com/api/addtradetax/)auf Kopfebene, nicht in der Position [BT-121](https://www.zugferdpro.com/bt/bt-121/)Umsatzsteuer-Befreiungsgrund (Code)[AddTradeTax](https://www.zugferdpro.com/api/addtradetax/)VATEX-Code [BT-127](https://www.zugferdpro.com/bt/bt-127/)Freitext zur Rechnungsposition[AddProduct_Comfort (Note)](https://www.zugferdpro.com/api/addproduct_comfort/) / [Add_Trade_ItemTradeNote](https://www.zugferdpro.com/api/add_trade_itemtradenote/) [BT-133](https://www.zugferdpro.com/bt/bt-133/)Buchungsreferenz des Käufers zur Position[Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount](https://www.zugferdpro.com/api/add_specifiedlinetradesettlement_receivablespecifiedtradeaccountingaccount/) [BT-157](https://www.zugferdpro.com/bt/bt-157/)Artikelkennung nach Schema (GTIN)[AddProduct_Comfort (GlobalID, Schema 0160)](https://www.zugferdpro.com/api/addproduct_comfort/) [BT-155](https://www.zugferdpro.com/bt/bt-155/)Artikelnummer des Verkäufers[AddProduct_Comfort (SellerAssignedID)](https://www.zugferdpro.com/api/addproduct_comfort/) [BT-156](https://www.zugferdpro.com/bt/bt-156/)Artikelnummer des Käufers[Trade_ItemTradeBuyerAssignedID](https://www.zugferdpro.com/api/trade_itemtradebuyerassignedid/) [BT-160](https://www.zugferdpro.com/bt/bt-160/)Name des Artikelmerkmals[addApplicableProductCharacteristics](https://www.zugferdpro.com/api/addapplicableproductcharacteristics/) [BT-161](https://www.zugferdpro.com/bt/bt-161/)Wert des Artikelmerkmals[addApplicableProductCharacteristics](https://www.zugferdpro.com/api/addapplicableproductcharacteristics/) ### Geprüft: XRechnung und EN 16931 Wir haben mit dem Beispielcode unten eine Rechnung erzeugt, die alle 39 Felder enthält (Stand 13.10.2026): - XRechnung 3.0 (CII): vom KoSIT-Validator mit der XRechnung-Konfiguration 3.0.2 angenommen – ohne Fehler und ohne Warnungen. - ZUGFeRD / Factur-X EN 16931: vom Mustang-Validator als gültig bewertet. Alle 39 Felder sind im XML vorhanden. Wie Sie Ihre eigenen Rechnungen prüfen, steht unter [XRechnung vor dem Versand prüfen](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/). ### Beispiel: Rechnung mit allen 39 Feldern (VB.NET) ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice alo.isKOSIT = True ' XRechnung; ohne diese Zeile: ZUGFeRD/Factur-X EN 16931 alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" alo.CreateInvoice("VER-2026-001", "", "20261013", "102", , "", "EUR") alo.AddDocumentNote("Es gelten unsere Allgemeinen Geschäftsbedingungen.", "AAI") ' BT-22, BT-21 ' Verkäufer alo.WriteSeller("Lieferant Beispiel GmbH", "54321", "Beispielstadt", "Hauptstraße 2", "", "DE", "DE123456789") alo.SellerID = "LIEF-001" ' BT-29 alo.AddSellerGlobalID("4000001000005", "0088") ' BT-29 (GLN) alo.SellerDescription = "Sitz: Beispielstadt, Amtsgericht Beispielstadt HRB 12345" ' BT-33 alo.WriteSellerContactPerson("Erika Beispiel", "", "buchhaltung@beispiel.example", "+49 40 654321") ' BT-41..43 alo.set_URIUniversalCommunication("buchhaltung@beispiel.example", "EM", True) ' Käufer alo.WriteBuyer("Handel Muster AG", "12345", "Musterstadt", "Musterstraße 1", "", "DE") alo.AddBuyerGlobalID("4000002000004", "0088") ' BT-46 (GLN) alo.AddBuyerTAX("DE987654321", "VA") ' BT-48 alo.BuyerReference = "REF-2026" alo.set_URIUniversalCommunication("rechnungseingang@muster.example", "EM", False) ' Bestellung, Lieferschein, Buchungsreferenz alo.AddBuyerAssignedID("PO-4711") ' BT-13 alo.SetDespatchAdviceReferencedDocument("LS-0815") ' BT-16 alo.AddReceivableSpecifiedTradeAccountingAccount("4400") ' BT-19 ' Lieferort (Filiale) mit GLN alo.WriteShipToTradeParty("Handel Muster AG Filiale 12", "12346", "Musterdorf", "Lagerstraße 3", "Tor 5", "DE", _ "", "", "", "", "4000003000003", "0088") ' BT-70, BT-71, BT-75..80 alo.ActualDeliveryDate_102 = "20261005" ' BT-72 alo.WriteBillingPeriod("20261001", "20261005", "102") ' BT-73, BT-74 ' Zahlung alo.AddPaymentMeans("58", "Überweisung", "DE02120300000000202051", "Lieferant Beispiel GmbH", "", "BYLADEM1001") ' BT-84..86 alo.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen netto.", "20261112", "102") ' Positionen: Notiz, Artikelnummern, GTIN, Merkmal, Buchungsreferenz Dim p As Integer = alo.AddProduct_Comfort("1", "Bitte kühl lagern.", "ART-100", "10", "C62", "Artikel Blau", "", "", "EUR", "", "C62", _ False, "", "", "", "10.00", "EUR", "1", "C62", "VAT", "S", "19.00", "", "100.00", "EUR", _ "4006381333931", "0160") ' BT-127, BT-155, BT-157 alo.Trade_ItemTradeBuyerAssignedID(p) = "KD-ART-555" ' BT-156 alo.Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount(p, "KST-12") ' BT-133 alo.addApplicableProductCharacteristics(p, "Farbe", "Blau") ' BT-160, BT-161 alo.AddProduct_Comfort("2", "", "ART-200", "1", "C62", "Beratung (steuerfrei)", "", "", "EUR", "", "C62", _ False, "", "", "", "50.00", "EUR", "1", "C62", "VAT", "E", "0.00", "", "50.00", "EUR", "", "") ' Zuschlag und Rabatt auf Dokumentebene alo.AddTradeAllowanceCharge(True, "", "EUR", "10.00", "EUR", "VAT", "S", "19.00", "Frachtkosten", "", "FC") ' BT-99, BT-104, BT-105 alo.AddTradeAllowanceCharge(False, "", "EUR", "5.00", "EUR", "VAT", "S", "19.00", "Rabatt", "", "95") ' BT-97, BT-98 ' Steuern (Befreiungsgrund auf Kopfebene) und Summen alo.AddTradeTax("19.95", "EUR", "105.00", "EUR", "VAT", "S", "19.00") alo.AddTradeTax("0.00", "EUR", "50.00", "EUR", "VAT", "E", "0.00", "Steuerbefreit nach Art. 132 MwStSystRL", _ "", "", "", "VATEX-EU-132") ' BT-120, BT-121 alo.WriteTotals("150.00", "174.95", "174.95", "155.00", "19.95", "5.00", "0.00", "0.00", "10.00") alo.SaveXML("C:\Rechnungen\xrechnung.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ``` Alle Namen, Nummern, GLN, GTIN und Bankdaten sind Muster-Werte. ### Drei Stolpersteine - Lieferscheinnummer (BT-16): Dafür ist SetDespatchAdviceReferencedDocument zuständig. AddDeliveryNote schreibt dagegen den Lieferschein-Bezug des Profils EXTENDED und stellt die ganze Rechnung auf Factur-X EXTENDED um – eine XRechnung ist sie dann nicht mehr. - Steuerbefreiungsgrund (BT-120/121): gehört auf Kopfebene in AddTradeTax . Ein Befreiungsgrund in der Position (Parameter TaxExemptionReason von AddProduct_Comfort) gibt es nur in EXTENDED und stellt ebenfalls um. - Kennung oder GLN: Bei Käufer (BT-46) und Lieferort (BT-71) entweder die eigene Kennung oder die GLN angeben, nicht beides – sonst warnt der Validator (CII-SR-450, CII-SR-449). Beim Verkäufer (BT-29) sind mehrere Kennungen erlaubt. Neuere Versionen des SDK melden eine solche Umstellung von XRechnung auf EXTENDED in [LastWarning](https://www.zugferdpro.com/api/lastwarning/). Prüfen Sie diese Eigenschaft nach dem Speichern. ### Häufige Fragen #### Welche Felder verlangt das VeR-Siegel „E-Rechnung bereit für den Handel“? 39 Felder der EN 16931: Kennungen und GLN von Verkäufer, Käufer und Lieferort, Ansprechpartner mit Telefon und E-Mail, USt-IdNr. des Käufers, Bestell- und Lieferscheinnummer, Lieferanschrift, Buchungsreferenzen, Rechnungs- und Positionstexte, Leistungsdatum und -zeitraum, Zu- und Abschläge mit Grund, Bankverbindung, Steuerbefreiungsgrund sowie GTIN, Artikelnummern von Verkäufer und Käufer und Artikelmerkmale. #### Kann eine XRechnung alle 39 VeR-Felder enthalten? Ja. Alle 39 Felder gehören zur EN 16931 und sind in der XRechnung erlaubt. Eine mit dem Aloaha ZUGFeRD SDK erzeugte XRechnung mit allen Feldern wurde vom KoSIT-Validator ohne Fehler und Warnungen angenommen. #### Wie schreibe ich GLN und GTIN mit dem Aloaha ZUGFeRD SDK? Die GLN von Verkäufer, Käufer und Lieferort mit AddSellerGlobalID, AddBuyerGlobalID und WriteShipToTradeParty jeweils mit dem Schema 0088; die GTIN eines Artikels über die Parameter GlobalID und GlobalIDScheme (0160) von AddProduct_Comfort. #### Welche Methode schreibt die Lieferscheinnummer (BT-16)? SetDespatchAdviceReferencedDocument. AddDeliveryNote ist der Lieferschein-Bezug des Profils EXTENDED und macht aus einer XRechnung eine Factur-X-EXTENDED-Rechnung. --- ## XRechnung an Vermögen und Bau Baden-Württemberg: Alle Pflichtangaben mit dem Aloaha ZUGFeRD SDK URL: https://www.zugferdpro.com/xrechnung-an-vermoegen-und-bau-baden-wuerttemberg/ Date: 2026-10-13 Business terms: BT-10, BT-11, BT-13, BT-18, BT-56, BT-128, BT-126, BT-84, BT-44, BT-48, BT-29, BT-12, BT-14, BT-17, BT-20, BT-9, BT-22, BT-41, BT-42, BT-43, BT-57, BT-58, BT-122 SDK methods: ActualDeliveryDate_102, AddBuyerAssignedID, AddBuyerTAX, AddContractReferencedDocument, AddDocumentNote, AddPaymentMeans, AddProduct_Comfort, AddSellerAssignedID, AddSpecifiedProcuringProject, AddTradePaymentTerms, AddTradeTax, Add_AdditionalReferencedDocument, Add_AdditionalReferencedFile, Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument, BusinessProcessSpecifiedDocumentContextParameter, CreateInvoice, IsKosit, Last_Error, SaveXML, SellerID, WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson, WriteTotals, ZUGfeRDStandard, set_URIUniversalCommunication Kurz: Vermögen und Bau Baden-Württemberg (Amt Freiburg) verlangt in jeder E-Rechnung neben den üblichen Angaben die Leitweg-ID (BT-10), eine Projektnummer (BT-11), die Bestellreferenz bzw. Mittelbindungsnummer (BT-13), eine Objektkennung (BT-18), Kontaktdaten des Rechnungsstellers (BT-41 bis BT-43), die IBAN (BT-84) und eine eindeutige Positionsnummer (BT-126). Das Aloaha ZUGFeRD SDK schreibt alle Felder aus den „Hinweisen zur elektronischen Rechnungsstellung“ – als XRechnung oder als ZUGFeRD-PDF mit XRechnung. Eine damit erzeugte Rechnung mit allen Angaben wurde vom KoSIT-Validator ohne Fehler und Warnungen angenommen. ### Worum geht es? Seit dem 1. Januar 2022 nehmen die Behörden des Landes Baden-Württemberg Rechnungen nur noch elektronisch an. Vermögen und Bau Baden-Württemberg, Amt Freiburg, hat dazu ein Merkblatt für Auftragnehmer veröffentlicht. Es legt fest, in welchem Datenfeld der EN 16931 welche Angabe stehen muss – etwa die Projektnummer in BT-11 und die Objektkennung (Ort, Straße, Hausnummer, Nutzer) in BT-18. Fehlt eine Pflichtangabe, kann die Rechnung nicht zugeordnet werden. Die Leitweg-IDs und Projektnummern stehen in der Anlage „Leitweg-IDs des Amtes Freiburg“, die Sie mit dem Auftrag erhalten. ### Angaben des Rechnungsempfängers AngabeFeldPflichtSDK Name, Straße, Ort, PLZ, Land des Auftraggebers[BT-44](https://www.zugferdpro.com/bt/bt-44/), BT-50, BT-52, BT-53, BT-55ja[WriteBuyer](https://www.zugferdpro.com/api/writebuyer/) Leitweg-ID (Käuferreferenz)[BT-10](https://www.zugferdpro.com/bt/bt-10/)ja[WriteBuyer](https://www.zugferdpro.com/api/writebuyer/) (Parameter Leitweg_ID) oder [BuyerReference](https://www.zugferdpro.com/api/buyerreference/) Kontaktstelle (Abteilung/Referat oder Person)[BT-56](https://www.zugferdpro.com/bt/bt-56/)optional[WriteBuyerContactPerson](https://www.zugferdpro.com/api/writebuyercontactperson/) Telefon und E-Mail der KontaktstelleBT-57, BT-58optional[WriteBuyerContactPerson](https://www.zugferdpro.com/api/writebuyercontactperson/) Lieferantennummer[BT-29](https://www.zugferdpro.com/bt/bt-29/)optional[SellerID](https://www.zugferdpro.com/api/sellerid/) USt-IdNr. des Käufers[BT-48](https://www.zugferdpro.com/bt/bt-48/)ja[AddBuyerTAX](https://www.zugferdpro.com/api/addbuyertax/) (Schema VA) Projektnummer (Projektdefinition oder Leistungsart)[BT-11](https://www.zugferdpro.com/bt/bt-11/)ja[AddSpecifiedProcuringProject](https://www.zugferdpro.com/api/addspecifiedprocuringproject/) Vertragsnummer[BT-12](https://www.zugferdpro.com/bt/bt-12/)optional[AddContractReferencedDocument](https://www.zugferdpro.com/api/addcontractreferenceddocument/) Bestellreferenz, bei Baumaßnahmen die Mittelbindungsnummer[BT-13](https://www.zugferdpro.com/bt/bt-13/)ja[AddBuyerAssignedID](https://www.zugferdpro.com/api/addbuyerassignedid/) Ausschreibungsreferenz (Vergabe- oder Losnummer)[BT-17](https://www.zugferdpro.com/bt/bt-17/)optional[Add_AdditionalReferencedDocument](https://www.zugferdpro.com/api/add_additionalreferenceddocument/) mit TypeCode 50 Objektkennung (Ort, Straße, Hausnummer, Nutzer)[BT-18](https://www.zugferdpro.com/bt/bt-18/)ja[Add_AdditionalReferencedDocument](https://www.zugferdpro.com/api/add_additionalreferenceddocument/) mit TypeCode 130 Bemerkungen (Ansprechperson, Hinweis auf Anlagen)[BT-22](https://www.zugferdpro.com/bt/bt-22/)ja[AddDocumentNote](https://www.zugferdpro.com/api/adddocumentnote/) Anlagen (Stundenlohnzettel, Rapporte, PDF-Rechnung)BG-24 (BT-122 bis BT-125)je nach Auftrag[Add_AdditionalReferencedFile](https://www.zugferdpro.com/api/add_additionalreferencedfile/) ### Angaben des Rechnungsstellers AngabeFeldPflichtSDK Kontaktstelle, Telefon, E-Mail[BT-41](https://www.zugferdpro.com/bt/bt-41/), BT-42, BT-43ja[WriteSellerContactPerson](https://www.zugferdpro.com/api/writesellercontactperson/) Auftragsreferenz (Auftragsbestätigung)[BT-14](https://www.zugferdpro.com/bt/bt-14/)optional[AddSellerAssignedID](https://www.zugferdpro.com/api/addsellerassignedid/) Zahlungsbedingungen bzw. Fälligkeitsdatum[BT-20](https://www.zugferdpro.com/bt/bt-20/) / BT-9eins von beiden bei positivem Zahlbetrag[AddTradePaymentTerms](https://www.zugferdpro.com/api/addtradepaymentterms/) IBAN[BT-84](https://www.zugferdpro.com/bt/bt-84/)ja[AddPaymentMeans](https://www.zugferdpro.com/api/addpaymentmeans/) Kennung der Rechnungsposition[BT-126](https://www.zugferdpro.com/bt/bt-126/)jaerster Parameter von [AddProduct_Comfort](https://www.zugferdpro.com/api/addproduct_comfort/) Objektkennung der Position (z. B. Raum, Zählernummer)[BT-128](https://www.zugferdpro.com/bt/bt-128/)optional[Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument](https://www.zugferdpro.com/api/add_specifiedlinetradesettlement_additionalreferenceddocument/) mit TypeCode 130 Der Weg der Einreichung (Portal service-bw.de oder E-Mail an die im Merkblatt genannte Adresse) ist kein Datenfeld der Rechnung. Das SDK erzeugt die Datei, versendet wird sie über Ihr Portal-Konto oder Ihr E-Mail-Programm. ### Geprüft mit dem KoSIT-Validator Wir haben mit dem Beispielcode unten eine XRechnung erzeugt, die alle Angaben aus dem Merkblatt enthält, und sie mit dem KoSIT-Validator (XRechnung-Konfiguration 3.0.2) geprüft (Stand 13.10.2026): - ohne Anlage: angenommen, keine Fehler, keine Warnungen; - mit eingebettetem Stundenlohnzettel als PDF (BG-24): angenommen, keine Fehler, keine Warnungen. Das SDK bleibt dabei im Profil EN 16931 (COMFORT); keines der Felder erfordert EXTENDED. Wie Sie Ihre eigenen Rechnungen prüfen, steht unter [XRechnung vor dem Versand prüfen](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/). ### Beispiel: XRechnung für Vermögen und Bau BW (VB.NET) ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice alo.isKOSIT = True ' XRechnung alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" alo.CreateInvoice("RE-2026-0815", "", "20261013", "102", , "", "EUR") alo.AddDocumentNote("Ansprechperson: Bauleitung Abschnitt 3. Anlagen: Stundenlohnzettel KW 40.") ' BT-22 ' Rechnungssteller alo.WriteSeller("Bau Beispiel GmbH", "79098", "Freiburg im Breisgau", "Werkstraße 5", "", "DE", "DE123456789") alo.WriteSellerContactPerson("Erika Beispiel", "", "rechnung@bau-beispiel.example", "+49 761 123456") ' BT-41..43 alo.set_URIUniversalCommunication("rechnung@bau-beispiel.example", "EM", True) ' BT-34 alo.SellerID = "LIEF-4711" ' BT-29 Lieferantennummer ' Rechnungsempfänger mit Leitweg-ID aus der Anlage des Amtes alo.WriteBuyer("Öffentlicher Auftraggeber (Beispiel)", "79098", "Freiburg im Breisgau", "Amtsstraße 1", "", "DE", _ "", "", "04011000-12345-34") ' BT-44..55, BT-10 alo.AddBuyerTAX("DE999999999", "VA") ' BT-48 alo.WriteBuyerContactPerson("Referat Hochbau", "", "hochbau@amt.example", "+49 761 000000") ' BT-56..58 alo.set_URIUniversalCommunication("rechnung@amt.example", "EM", False) ' BT-49 ' Transaktionsspezifische Angaben alo.AddSpecifiedProcuringProject("P-2026-17", "Sanierung Verwaltungsgebäude") ' BT-11 alo.AddContractReferencedDocument("V-2026-0042") ' BT-12 alo.AddBuyerAssignedID("MB-2026-123456") ' BT-13 Mittelbindungsnummer alo.AddSellerAssignedID("AB-7781") ' BT-14 alo.Add_AdditionalReferencedDocument("VG-2026-55", "", "50") ' BT-17 alo.Add_AdditionalReferencedDocument("Freiburg, Amtsstraße 1, Gebäude B", "", "130") ' BT-18 alo.Add_AdditionalReferencedFile("C:\Rechnungen\stunden-kw40.pdf", "STZ-KW40", "", "916", _ "Stundenlohnzettel KW 40") ' BG-24 alo.ActualDeliveryDate_102 = "20261009" ' BT-72 ' Zahlung alo.AddPaymentMeans("58", "Überweisung", "DE02120300000000202051", "Bau Beispiel GmbH", "", "BYLADEM1001") ' BT-84..86 alo.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen ohne Abzug.", "20261112", "102") ' BT-20, BT-9 ' Position mit eindeutiger Kennung (BT-126) und Objektkennung (BT-128) Dim p As Integer = alo.AddProduct_Comfort("1", "", "ART-100", "40", "HUR", "Facharbeiterstunden", "", "", "EUR", "", "HUR", _ False, "", "", "", "55.00", "EUR", "1", "HUR", "VAT", "S", "19.00", "", "2200.00", "EUR", "", "") alo.Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument(p, "130", "Raum B.2.14") ' BT-128 ' Steuern und Summen alo.AddTradeTax("418.00", "EUR", "2200.00", "EUR", "VAT", "S", "19.00") alo.WriteTotals("2200.00", "2618.00", "2618.00", "2200.00", "418.00", "0.00", "0.00", "0.00", "0.00") alo.SaveXML("C:\Rechnungen\xrechnung.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) If alo.LastWarning <> "" Then Console.WriteLine(alo.LastWarning) ``` Alle Namen, Nummern, die Leitweg-ID, die USt-IdNr. und die Bankdaten sind Muster-Werte. Die echten Werte – Leitweg-ID, Projektnummer und USt-IdNr. des Amtes – entnehmen Sie dem Merkblatt und seiner Anlage. ### Drei Stolpersteine - Kontaktstelle des Amtes (BT-56): Geben Sie eine Person oder eine Abteilung an, nicht beides – Name und Abteilung gleichzeitig führen in der XRechnung zu Warnungen (CII-SR-465/466). Eine Person steht im ersten Parameter von WriteBuyerContactPerson , eine Abteilung im zweiten: WriteBuyerContactPerson("", "Referat Hochbau", mail, telefon) schreibt DepartmentName . Ältere Versionen des SDK schreiben ohne ersten Parameter keinen Kontakt; tragen Sie dort das Referat im ersten Parameter ein (wie im Beispiel oben). - Objektkennung (BT-18) und Ausschreibung (BT-17): Beide stehen im selben Element (AdditionalReferencedDocument) und unterscheiden sich nur im TypeCode: 130 für das Objekt, 50 für die Ausschreibung. Ohne TypeCode schreibt das SDK 916 – das wäre eine Anlage (BT-122), keine Objektkennung. - Positionsnummer (BT-126): Jede Position braucht eine eigene Kennung. Vergeben Sie im ersten Parameter von AddProduct_Comfort fortlaufende Nummern und verwenden Sie keine Nummer doppelt. ### Als ZUGFeRD-PDF statt als reine XML-Datei Das Merkblatt erlaubt auch ZUGFeRD im Profil XRechnung. Mit isKOSIT = True erzeugt das SDK das XML im XRechnung-Format; daraus wird mit dem SDK oder mit [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) ein PDF/A-3 mit eingebettetem XML. Prüfen Sie das fertige PDF vor dem Versand ebenfalls mit einem Validator. ### Weiterführend - Vertrags-, Projekt- und Lieferavis-Referenz (BT-11, BT-12, BT-16) - Objektkennung und Buchungsreferenz je Position (BT-128, BT-133) - Rechnungsbegründende Unterlagen (BG-24) angeben und auslesen - VeR-Pflichtfelder für den Handel ### Häufige Fragen #### Welche Pflichtangaben verlangt Vermögen und Bau Baden-Württemberg in der E-Rechnung? Anschrift des Auftraggebers (BT-44 bis BT-55), Leitweg-ID (BT-10), USt-IdNr. des Käufers (BT-48), Projektnummer (BT-11), Bestellreferenz bzw. Mittelbindungsnummer (BT-13), Objektkennung (BT-18), Bemerkungen (BT-22), Kontaktdaten des Rechnungsstellers (BT-41 bis BT-43), IBAN (BT-84) und eine eindeutige Kennung je Rechnungsposition (BT-126). #### In welches Feld gehört die Projektnummer? In BT-11 (Projektreferenz, im CII-Format SpecifiedProcuringProject). Mit dem Aloaha ZUGFeRD SDK schreiben Sie sie mit AddSpecifiedProcuringProject. #### Wo trage ich die Mittelbindungsnummer bei Baumaßnahmen ein? In BT-13, die Bestellreferenz des Käufers. Im SDK ist das AddBuyerAssignedID. #### Wie schreibe ich die Objektkennung (BT-18)? Mit Add_AdditionalReferencedDocument und dem TypeCode 130, zum Beispiel Add_AdditionalReferencedDocument("Freiburg, Amtsstraße 1, Gebäude B", "", "130"). #### Kann ich Stundenlohnzettel als Anlage mitschicken? Ja. Add_AdditionalReferencedFile bettet eine PDF-Datei als Anlage (BG-24) in die XRechnung ein. Eine solche XRechnung wurde vom KoSIT-Validator ohne Fehler und Warnungen angenommen. --- ## Aloaha ZUGFeRD PDF Viewer & Editor – E-Rechnungen anzeigen, bearbeiten und signieren URL: https://www.zugferdpro.com/aloaha-pdf-viewer/ Date: 2026-10-12 Kurz: Der Aloaha ZUGFeRD PDF Viewer (auch Aloaha PDF Editor) ist ein Windows-Programm zum Anzeigen, Bearbeiten und Signieren von PDF-Dateien und hybriden E-Rechnungen. Er zeigt ZUGFeRD- und Factur-X-Rechnungen wie gewohnt als PDF an, öffnet die eingebetteten Rechnungsdaten in der eingebauten [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) und signiert Dokumente – mit einem lokalen Zertifikat oder ab Version 11.0.0.2 auch über die [CodeB-Fernsignatur (PAdES)](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/). ### Funktionen im Überblick - ZUGFeRD anzeigen: PDF/A-3-Rechnungen öffnen; Document > Show ZUGFeRD Data zeigt die eingebetteten Rechnungsdaten in der ZUGFeRD GUI an, wo Sie sie auch bearbeiten und neu speichern können. - ZUGFeRD erstellen: Rechnungs-XML in ein PDF einbetten – mit allen Registern der ZUGFeRD GUI. - Öffnen vieler Formate: PDF sowie Bilder (BMP, JPG, GIF, TIFF, PNG, WMF, EMF), RTF, TXT, XML und DOCX; ein neues Dokument auch aus der Zwischenablage. - Seiten bearbeiten: Dokumente anhängen oder einfügen, neue Seiten einfügen, Seiten löschen, verschieben und drehen, Bilder und Text platzieren, Dateianhänge einfügen. - Weitergeben: Drucken, als Outlook-Mail versenden, hochladen, einzelne Seiten als Bild speichern, Text kopieren oder vorlesen lassen. - Signieren: PDFs mit sichtbarer Signatur unterschreiben, Speichern digital signiert , fertige ZUGFeRD-PDFs signieren (neu) und viele Dateien mit dem PDF Batch Signer signieren. - Portabel: Die portable Version läuft ohne Installation, z. B. direkt von einem USB-Stick. ### PDF und ZUGFeRD-Rechnungen signieren Der Viewer bietet drei Wege zur digitalen Signatur: MenüWofür File > Save digitally signedSpeichert eine signierte Kopie des geöffneten PDFs unter dem gewählten Namen – mit dem Verfahren aus den Signatur-Einstellungen. Das Original bleibt unverändert erhalten (ab 11.0.0.3). Tools > PDF / ZUGFeRD-PDF signieren… (neu)Signiert eine fertige ZUGFeRD-, Factur-X- oder XRechnung-PDF-Datei. Das geöffnete Dokument ist vorausgewählt, Ziel ist _signed.pdf. Der Viewer prüft vorher, ob ein Rechnungs-XML eingebettet ist; das XML bleibt beim Signieren unverändert. Tools > PDF Batch SignerSigniert viele PDFs auf einmal. #### Signatur-Einstellungen Unter Settings > Signature settings (deutsche Oberfläche: Signatur-Einstellungen) wählen Sie das Verfahren. Die Einstellungen teilt sich der Viewer mit der [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (je Windows-Benutzer). - Lokales Zertifikat: Zertifikat aus dem Windows-Zertifikatsspeicher oder von einer Smartcard; optional mit Zeitstempel-Server (RFC 3161). Ohne gespeicherte Einstellungen signiert der Viewer wie bisher lokal. - CodeB-Fernsignatur (Signaturdienst der CodeB EUID Wallet Software) : Server-URL Ihres produktiven CodeB-Servers ( https://phone.codeb.io ist nur der Testserver von CodeB und nicht für produktive Umgebungen gedacht), Benutzername, Passwort und Signaturstufe PAdES B-B bis B-LTA sowie eine Mindeststufe (liefert der Dienst weniger, wird nicht signiert) – kein lokales Zertifikat nötig. Verbindung testen lässt ein kleines Test-PDF signieren. Während der Fernsignatur zeigt ein Fortschrittsfenster die verstrichene Zeit, damit klar ist, dass der Editor arbeitet. Das Passwort wird auf Wunsch mit Windows (DPAPI) verschlüsselt gespeichert. - Grund, Ort, Kontakt: optionale Angaben in der Signatur. Wichtig für E-Rechnungen: Erst das XML einbetten, dann signieren. Eine Signatur ist für E-Rechnungen in Deutschland nicht vorgeschrieben, sichert aber Echtheit und Unversehrtheit nachweisbar ab. ### Download VarianteDownloadHinweis Portable Version[aloahapdfviewer.zip](https://www.aloaha.com/download/aloahapdfviewer.zip)Entpacken und aloahapdfviewer.exe starten – keine Installation nötig. Windows Installer[aloaha_pdfeditor.zip](https://www.aloaha.com/download/aloaha_pdfeditor.zip)Enthält Aloaha_PDF_Editor_Setup.msi für die feste Installation. Voraussetzung: Windows mit .NET Framework 4.7.2. Für die Fernsignatur ein Konto beim CodeB Remote Signature Service und Internetzugang per HTTPS. Wenn Sie die Aloaha PDF Suite verwenden, ist der PDF Editor bereits installiert. Weitere Funktionen beschreibt die Produktseite des Aloaha PDF Editors. ### Lizenz Der PDF Viewer benötigt keine zusätzliche Lizenz, wenn auf Ihrem Rechner bereits ein Aloaha Produkt lizenziert ist – etwa die [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (199 Euro zzgl. MwSt.). Eine Testlizenz erhalten Sie über info@aloaha.com. ### Video Ein kurzes Demo des ZUGFeRD PDF Viewers: ### Verwandte Werkzeuge - Aloaha ZUGFeRD GUI – ZUGFeRD-Rechnungen erstellen, bearbeiten und signieren. - SignPDFRemote – die Fernsignatur als SDK-Funktion für eigene Programme. - zugcmd – ZUGFeRD-Verarbeitung per Kommandozeile. - Downloads – alle Installer des Aloaha ZUGFeRD SDK. ### Häufige Fragen #### Wie sehe ich die XML-Daten einer ZUGFeRD-Rechnung an? Öffnen Sie die ZUGFeRD-PDF im Aloaha ZUGFeRD PDF Viewer und wählen Sie Document > Show ZUGFeRD Data. Die eingebetteten Rechnungsdaten erscheinen in der ZUGFeRD GUI und können dort bearbeitet werden. #### Kann ich mit dem Viewer eine ZUGFeRD-Rechnung signieren? Ja. Über Tools > PDF / ZUGFeRD-PDF signieren oder File > Save digitally signed – mit lokalem Zertifikat oder per CodeB-Fernsignatur (PAdES B-B bis B-LTA). Das eingebettete XML bleibt unverändert. #### Brauche ich für die Signatur eine Smartcard? Nein, nicht bei der CodeB-Fernsignatur: Benutzername und Passwort beim CodeB Remote Signature Service genügen. Für die lokale Signatur wird ein Zertifikat im Windows-Zertifikatsspeicher oder auf einer Smartcard benötigt. #### Was kostet der Aloaha ZUGFeRD PDF Viewer? Er benötigt keine eigene Lizenz, wenn bereits ein Aloaha Produkt lizenziert ist, z. B. die Aloaha ZUGFeRD GUI für 199 Euro zzgl. MwSt. --- ## Aloaha ZUGFeRD GUI – E-Rechnungen ohne Programmierung erstellen, prüfen und signieren URL: https://www.zugferdpro.com/aloaha-zugferd-gui/ Date: 2026-10-12 Kurz: Die Aloaha ZUGFeRD GUI ist ein Windows-Programm, mit dem Sie E-Rechnungen im Format ZUGFeRD, Factur-X und XRechnung ohne Programmierung erstellen, einlesen, bearbeiten und signieren. Sie erfasst Rechnungsdaten in Formularen, speichert sie als XML nach EN 16931, bettet das XML in ein PDF/A-3 ein und signiert die fertige ZUGFeRD-Rechnung – mit einem lokalen Zertifikat oder über die CodeB-Fernsignatur (PAdES). Die GUI basiert vollständig auf der [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/). Preis: 199 Euro zzgl. MwSt. Preis: 199 Euro zzgl. MwSt. Verkauf ausschließlich an Unternehmen (B2B), nicht an Privatpersonen. Bestellung per E-Mail an [info@aloaha.com](mailto:info@aloaha.com?subject=Lizenz%20Aloaha%20ZUGFeRD%20GUI). Die Lizenz gilt auch für den [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/). Eine kostenlose Testlizenz erhalten Sie ebenfalls über info@aloaha.com. ### Funktionen im Überblick - E-Rechnung erstellen: Rechnungsdaten, Adressen, Bankverbindungen und Positionen in Formularen erfassen und als ZUGFeRD- / XRechnung-XML speichern. - E-Rechnung einlesen: ZUGFeRD-PDF, Factur-X-PDF, XRechnung (CII) und UBL-Rechnungen öffnen; die Daten erscheinen in den Formularen und lassen sich ändern. - UBL konvertieren: UBL-XRechnungen einlesen und als XRechnung (CII) oder ZUGFeRD-PDF/A ausgeben. - XML in PDF einbetten: Ein vorhandenes PDF/A mit dem Rechnungs-XML zu einer hybriden ZUGFeRD-Rechnung (PDF/A-3) zusammenführen. - PDF aus Word-Vorlage: Aus XML und einer DOCX-Vorlage direkt eine ZUGFeRD-Rechnung als PDF/A erzeugen. - Signieren (neu ab 11.0.0.2): Fertige ZUGFeRD-PDFs digital signieren – lokal mit Zertifikat oder per CodeB-Fernsignatur (PAdES B-B bis B-LTA). - Zweisprachig: Oberfläche auf Deutsch oder Englisch, umschaltbar in der Statusleiste. - Portabel oder installiert: Läuft ohne Installation oder als Windows-Installer. ### Die Register der GUI #### Erstelle XML Hier erfassen Sie die Rechnung in vier Unterregistern: - Rechnungsdaten: Rechnungsnummer, Rechnungsdatum, Rechnungstyp (z. B. Rechnung 380, Gutschrift 381, Korrekturrechnung 384 oder Schlussrechnung 877), Lieferdatum, Zahlungsreferenz, Währung, Zahlungsart, Notizen, Umsatzsteuersatz, Steuerkategorie mit Befreiungsgrund und die Summen (Netto, Zuschläge, Nachlässe, Umsatzsteuer, Brutto, Anzahlung, zahlbarer Betrag). Über Lade XML oder PDF öffnen Sie eine vorhandene E-Rechnung, über Speicher XML speichern Sie das Ergebnis. Das deutsche Zahlenformat (1.000,00) lässt sich ein- und ausschalten. - Adressen: Anschrift, Kontakt und Umsatzsteuer-ID von Verkäufer und Käufer. - Bankverbindungen: Kontodaten von Verkäufer und Käufer, z. B. IBAN und BIC für die Überweisung. - Rechnungsposten: Positionen mit Menge, Einheit, Bezeichnung, Beschreibung und Nettopreis; neue Zeilen mit Posten hinzufügen , Löschen über das Kontextmenü. #### Konvertiere XML nach PDF/A Erzeugt aus einer ZUGFeRD-XML und einer DOCX-Vorlage eine fertige ZUGFeRD-Rechnung als PDF/A-3. Eine Vorlage legen Sie mit Template erstellen an; optional hängen Sie eine weitere Datei an (z. B. einen Leistungsnachweis). Mit PDF digital unterschreiben wird das Ergebnis gleich nach dem Erstellen mit dem Verfahren aus den Signatur-Einstellungen signiert. Für diese Funktion muss Microsoft Word installiert sein. #### Führe XML mit PDF zusammen Bettet ein Rechnungs-XML in ein vorhandenes PDF/A ein und speichert das Ergebnis als hybride ZUGFeRD-Rechnung. So machen Sie aus der Rechnung Ihres bisherigen Rechnungsprogramms eine E-Rechnung, ohne das Layout zu ändern. #### PDF signieren (neu) Signiert eine fertige ZUGFeRD-, Factur-X- oder XRechnung-PDF-Datei. Sie wählen das PDF (auch per Drag & Drop), die GUI prüft, ob ein Rechnungs-XML eingebettet ist und ob das PDF schon eine Signatur enthält, und schlägt als Ziel _signed.pdf vor. Ein Klick auf PDF signieren signiert mit dem eingestellten Verfahren; das eingebettete XML bleibt unverändert. Bei der Fernsignatur zeigt die GUI anschließend die tatsächlich erzeugte Signaturstufe an. ### Signatur-Einstellungen Unter Einstellungen > Signatur-Einstellungen legen Sie fest, wie die GUI signiert. Die Einstellungen gelten auch für den [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (je Windows-Benutzer). EinstellungBedeutung Lokales ZertifikatSigniert mit einem Zertifikat aus dem Windows-Zertifikatsspeicher oder von einer Smartcard. Die Seriennummer wählen Sie über Auswählen…; bleibt das Feld leer, wird das Zertifikat beim Signieren ausgewählt. Optional mit Zeitstempel-Server (RFC 3161). CodeB-FernsignaturSigniert über den [CodeB Remote Signature Service](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (Teil der CodeB EUID Wallet Software) – ohne lokales Zertifikat. Ein Fortschrittsfenster zeigt, dass die Signatur läuft. Mit der Mindeststufe legen Sie fest, welche Stufe der Dienst mindestens liefern muss – sonst wird nicht signiert. Angaben: Server-URL Ihres produktiven CodeB-Servers, Benutzername, Passwort und Signaturstufe PAdES B-B, B-T, B-LT oder B-LTA. Testserverhttps://phone.codeb.io ist nur der Testserver von CodeB – zum Ausprobieren geeignet, nicht für produktive Umgebungen. Die GUI weist darauf hin, wenn er eingetragen ist. Passwort speichernOptional. Das Passwort wird dann mit Windows (DPAPI) für den angemeldeten Benutzer verschlüsselt gespeichert; ohne Häkchen gilt es nur bis zum Schließen des Programms. Verbindung testenLässt den Dienst ein kleines Test-PDF signieren und meldet Erfolg und gelieferte Signaturstufe – es wird nichts gespeichert. Grund, Ort, KontaktOptionale Angaben, die in die Signatur geschrieben werden. Ohne gespeicherte Einstellungen signiert die GUI wie bisher mit einem lokalen Zertifikat. ### In drei Schritten zur signierten ZUGFeRD-Rechnung - XML erstellen: Im Register Erstelle XML die Rechnung erfassen und als XML speichern (oder eine vorhandene Rechnung laden). - XML einbetten: Im Register Führe XML mit PDF zusammen das XML in das PDF/A einbetten – oder im Register Konvertiere XML nach PDF/A mit einer Word-Vorlage direkt ein PDF erzeugen. - Signieren: Im Register PDF signieren die fertige ZUGFeRD-PDF auswählen und signieren. Die Signatur kommt immer zuletzt, damit das eingebettete XML unverändert bleibt. ### Download und Installation VarianteDownloadHinweis Portable Version[Aloaha_ZUGFeRD_GUI_bin.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip)Entpacken und starten – keine Installation nötig. Beim ersten Start bitte als Administrator ausführen. Windows Installer[aloaha_zugferdgui.zip](https://www.aloaha.com/download/aloaha_zugferdgui.zip)Feste Installation; startet schneller als die portable Version. Voraussetzungen: Windows mit .NET Framework 4.7.2 (in Windows 10 ab Version 1803 und Windows 11 enthalten). Für Konvertiere XML nach PDF/A zusätzlich Microsoft Word. Für die Fernsignatur ein Konto beim CodeB Remote Signature Service und Internetzugang per HTTPS. Die GUI ist auch im [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) enthalten (Document > Show ZUGFeRD Data). ### Video Die Fernsignatur der GUI läuft über den Signaturdienst der CodeB Identity Wallet (EUID Wallet). So sieht die Wallet aus: Weitere Videos: [Aloaha ZUGFeRD GUI Videos](https://www.zugferdpro.com/aloaha-zugferd-gui-videos/). ### Für Entwickler Alles, was die GUI kann, steht auch als API der [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/) für .NET und COM (VB6, VBA, Delphi) zur Verfügung – etwa [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/) für die Fernsignatur. Für SDK-Kunden stellen wir die Quellen der GUI auf Anfrage bereit. Für die Stapelverarbeitung per Kommandozeile gibt es [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). ### Häufige Fragen #### Kann ich mit der Aloaha ZUGFeRD GUI eine XRechnung ohne Programmierung erstellen? Ja. Sie erfassen die Rechnungsdaten in Formularen und speichern sie als XML nach EN 16931; die GUI basiert auf des Aloaha ZUGFeRD SDK und erzeugt ZUGFeRD-, Factur-X- und XRechnung-Daten. #### Wie signiere ich eine fertige ZUGFeRD-Rechnung mit der GUI? Im Register „PDF signieren“ das fertige ZUGFeRD-PDF auswählen und „PDF signieren“ klicken. Signiert wird mit dem Verfahren aus Einstellungen > Signatur-Einstellungen: lokales Zertifikat oder CodeB-Fernsignatur (PAdES). Das eingebettete XML bleibt unverändert. #### Brauche ich für die Signatur ein eigenes Zertifikat? Nicht bei der CodeB-Fernsignatur: Dafür genügen Benutzername und Passwort beim CodeB Remote Signature Service. Für die lokale Signatur wird ein Zertifikat mit privatem Schlüssel im Windows-Zertifikatsspeicher oder auf einer Smartcard benötigt. #### Kann die GUI UBL-Rechnungen lesen? Ja. UBL-Rechnungen werden eingelesen und können als XRechnung (CII) oder als ZUGFeRD-PDF/A gespeichert werden. #### Was kostet die Aloaha ZUGFeRD GUI? 199 Euro zzgl. MwSt., Verkauf nur an Unternehmen. Die Lizenz gilt auch für den Aloaha ZUGFeRD PDF Viewer; eine Testlizenz gibt es kostenlos über info@aloaha.com. --- ## PDF und ZUGFeRD-Rechnung remote signieren (PAdES) – SignPDFRemote URL: https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/ Date: 2026-10-12 SDK methods: LastError, Licensekey Kurz: Mit [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/) signiert das Aloaha ZUGFeRD SDK (ab Version 11.0.0.2) ein PDF – auch eine hybride ZUGFeRD-/Factur-X-Rechnung – über den CodeB Remote Signature Service – einen Bestandteil der CodeB EUID Wallet Software. Das SDK schickt das PDF per HTTPS an den Dienst und erhält es mit einer PAdES-Signatur (Level B-B bis B-LTA) zurück. Ein lokales Zertifikat, eine Smartcard oder ein Kartenleser werden nicht benötigt; die Signatur funktioniert auch unbeaufsichtigt im Stapel und aus VB6/VBA über COM. ### Wann remote signieren? - Server und Batch-Jobs: Rechnungen werden automatisch erzeugt und signiert, ohne dass auf dem Server ein Zertifikat oder eine Karte installiert sein muss. - Zentrale Schlüsselverwaltung: Der Signaturschlüssel liegt beim Signaturdienst, nicht auf jedem Arbeitsplatz. - Langzeitprüfbarkeit: Mit Level B-LTA enthält das PDF Zeitstempel und Prüfdaten für die spätere Validierung. ### CodeB EUID Wallet – jetzt auch für ZUGFeRD Der CodeB Remote Signature Service ist Teil der CodeB EUID Wallet Software. Die EUID Wallet wird damit jetzt auch für ZUGFeRD genutzt: Das Aloaha ZUGFeRD SDK (SignPDFRemote), die [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/), der [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) und das Kommandozeilen-Tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) signieren E-Rechnungen direkt über den Signaturdienst der EUID Wallet – ohne Zertifikat oder Smartcard auf dem eigenen Rechner. Zur Software gehört die App [CodeB Wallet](https://www.zugferdpro.com/codeb-wallet/) – eine EUDI-Wallet nach eIDAS 2.0 für Android: Ausweisdaten (PID), mobiler Führerschein, Ausweisprüfung und PDF-Signatur am Telefon, fortgeschritten (AdES) über den Signaturdienst oder qualifiziert (QES) mit der maltesischen eID bzw. einer D-Trust-Karte per NFC. Alle Funktionen, Video und Zugang: [CodeB Wallet – die EU-Identitäts-Wallet von Aloaha](https://www.zugferdpro.com/codeb-wallet/) und [myeuid.app](https://myeuid.app/de/). Für die Rechnungssignatur mit dem SDK brauchen Sie die App nicht: SignPDFRemote, die ZUGFeRD GUI, der PDF Viewer und zugcmd sprechen den Signaturdienst direkt von Server zu Server an. ### Voraussetzungen - Aloaha ZUGFeRD SDK ab Version 11.0.0.2 mit gültiger Lizenz. - Ein Benutzerkonto auf einem produktiven CodeB-Server (Remote Signature Service der CodeB EUID Wallet); für den Server-zu-Server-Aufruf muss im Mandanten die Anmeldung mit Benutzername und Passwort freigeschaltet sein. Wichtig: https://phone.codeb.io ist nur der Testserver von CodeB. Er eignet sich zum Ausprobieren, darf aber nicht für produktive Umgebungen verwendet werden. Für den Produktivbetrieb benötigen Sie einen eigenen CodeB-Server bzw. Mandanten – sprechen Sie uns an: info@aloaha.com. In den Beispielen steht deshalb der Platzhalter https://IHR-CODEB-SERVER. - Internetzugang per HTTPS vom aufrufenden Rechner zum Signaturdienst. - Das PDF ist höchstens 10 MiB groß und nicht verschlüsselt. ### VB.NET ``` Dim LicenseKey As String = "IHR-LIZENZSCHLUESSEL" Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' Argumente: Eingabe-PDF, Ausgabe ("" = Eingabe ersetzen), Ihr CodeB-Server, Benutzer, Passwort, ' PAdES-Level, Grund, Ort, Kontakt, Überschreiben, Lizenz, tatsächliches Level (Rückgabe) Dim level As String = "" If alo.SignPDFRemote("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf", _ "https://IHR-CODEB-SERVER", "benutzer@firma.de", "IHR-PASSWORT", "B-LTA", _ "Rechnungsfreigabe", "Musterstadt", "", True, LicenseKey, level) Then Console.WriteLine("Signiert, Level: " & level) Else Console.WriteLine("Fehler: " & alo.LastError) End If ``` ### C# ``` var alo = new Aloaha_ZUGFeRD.XML(); alo.Licensekey = licenseKey; string level = ""; bool ok = alo.SignPDFRemote(@"C:\Rechnungen\RE-2026-0001_zugferd.pdf", @"C:\Rechnungen\RE-2026-0001_signiert.pdf", "https://IHR-CODEB-SERVER", "benutzer@firma.de", "IHR-PASSWORT", "B-T", "Rechnungsfreigabe", "Musterstadt", "", true, licenseKey, ref level); Console.WriteLine(ok ? "Signiert, Level: " + level : "Fehler: " + alo.LastError); ``` ### VBA / VB6 (COM) ``` Dim alo As Object, level As String Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "IHR-LIZENZSCHLUESSEL" If alo.SignPDFRemote("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf", _ "https://IHR-CODEB-SERVER", "benutzer@firma.de", "IHR-PASSWORT", "B-LTA", _ "Rechnungsfreigabe", "Musterstadt", "", True, "", level) Then Debug.Print "Signiert, Level: " & level Else Debug.Print "Fehler: " & alo.LastError End If ``` Nach dem Update auf 11.0.0.2 die Typbibliothek neu registrieren, damit COM-Clients die neue Funktion sehen. ### Ohne Dateien: SignPDFRemoteBytes Für Web-Services und Datenbankanwendungen arbeitet [SignPDFRemoteBytes](https://www.zugferdpro.com/api/signpdfremotebytes/) direkt mit Bytes und gibt das signierte PDF zurück (oder Nothing im Fehlerfall): ``` Dim signiert() As Byte = alo.SignPDFRemoteBytes(pdfBytes, "https://IHR-CODEB-SERVER", "benutzer@firma.de", "IHR-PASSWORT", "B-T") If signiert Is Nothing Then Console.WriteLine(alo.LastError) ``` ### Mit Mindeststufe: Klasse RemoteSigner (ab 11.0.0.3) Für Server und Stapelverarbeitung gibt es ab Version 11.0.0.3 die eigene COM-Klasse Aloaha_ZUGFeRD.RemoteSigner. Sie signiert genauso wie SignPDFRemote (Firmensiegel über signDocBasic), bietet aber zusätzlich: - Mindeststufe ( MinLevel , Standard B-B ): Liefert der Dienst eine niedrigere Stufe, gilt die Signatur als fehlgeschlagen und es wird keine Datei geschrieben. - Begründung einer Herabstufung ( LevelNote ) sowie angeforderte und erzeugte Stufe ( RequestedLevel , EffectiveLevel ). - Wiederholung bei Ratenlimit ( MaxRetries ): Bei HTTP 429 wartet die Klasse die vom Dienst genannte Zeit ab und versucht es erneut. - Einstellungen aus der Registry ( LoadSettings ) für Server: HKLM\Software\Aloaha\ZUGFeRD\CSC mit BaseURL , User , PasswordProtected (mit ProtectPassword per Windows-DPAPI für den Rechner verschlüsselt), Level , MinLevel , Reason , Location , Contact , TimeoutSeconds , MaxRetries . ``` Dim rs As New Aloaha_ZUGFeRD.RemoteSigner rs.LicenseKey = "IHR-LIZENZSCHLUESSEL" rs.ServerURL = "https://IHR-CODEB-SERVER" rs.UserName = "rechnungssiegel" rs.Password = "IHR-PASSWORT" rs.Level = "B-LTA" rs.MinLevel = "B-T" ' ohne Zeitstempel wird nicht signiert rs.Reason = "Rechnungsfreigabe" rs.MaxRetries = 2 ' Stapelverarbeitung: bei HTTP 429 abwarten und wiederholen If rs.SealFile("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf") Then Console.WriteLine("Signiert, Level: " & rs.EffectiveLevel & " " & rs.LevelNote) Else Console.WriteLine("Fehler: " & rs.LastError) End If ``` Aus VBA/VB6: Set rs = CreateObject("Aloaha_ZUGFeRD.RemoteSigner"), danach dieselben Eigenschaften. Die Klasse folgt keinen Weiterleitungen – Benutzername und Passwort gehen nur an die eingetragene Server-URL. Das Passwort wird nie ausgegeben. ### Signatur-Level (PAdES) LevelInhaltEinsatz B-BBasis-Signatur (CMS mit Signaturzertifikat)einfache Integritätssicherung B-Tzusätzlich Zeitstempel eines Zeitstempeldienstes (RFC 3161)nachweisbarer Signaturzeitpunkt B-LTzusätzlich Prüfdaten (Zertifikate, OCSP) im PDFPrüfung ohne Online-Abfrage B-LTA (Standard)zusätzlich Archiv-ZeitstempelLangzeitarchivierung Kann der Dienst ein höheres Level gerade nicht erzeugen (z. B. weil der Zeitstempeldienst nicht erreichbar ist), signiert er mit dem nächstniedrigeren Level, statt abzubrechen. Welches Level tatsächlich entstanden ist, liefert der Parameter EffectiveLevel (z. B. AdES-B-T). Prüfen Sie es immer gegen Ihre Mindestanforderung – am einfachsten mit RemoteSigner.MinLevel, der GUI-Einstellung Mindeststufe oder zugcmd -minlevel. ### ZUGFeRD-Rechnung signieren: Reihenfolge - Rechnungsdaten erzeugen und als XML speichern ( Schnellstart VB.NET ). - Das XML mit MergeXMLIntoPDF in das PDF/A-3 einbetten. - Zuletzt mit SignPDFRemote signieren. Die Signatur wird als inkrementelle Aktualisierung angehängt; Inhalt und eingebettetes XML bleiben unverändert. Jede spätere Änderung am PDF macht die Signatur ungültig. - Das signierte PDF in Ihren Tests mit einem PDF/A-Prüfprogramm (z. B. veraPDF) und einem E-Rechnungs-Validator prüfen. B-LT ergänzt ein /DSS -Verzeichnis, B-LTA einen Dokument-Zeitstempel – beides ist nach PAdES zulässig. ### Fehlerbehandlung Liefert die Funktion False (bzw. Nothing), steht der Grund in LastError. Das Passwort erscheint nie in Fehlermeldungen. LastErrorBedeutung HTTP 401 … invalid_credentialsBenutzername oder Passwort falsch, oder die Passwort-Anmeldung ist im Mandanten nicht freigeschaltet. HTTP 400 … pdf_encrypted_unsupportedDas PDF ist verschlüsselt – vorher entschlüsseln. HTTP 429 … (Retry-After: 30 s)Zu viele Aufrufe in kurzer Zeit (Limit: 30 pro Minute); nach der angegebenen Zeit erneut versuchen – RemoteSigner.MaxRetries erledigt das automatisch. service delivered B-T, below the minimum B-LTNur bei RemoteSigner: Der Dienst konnte die Mindeststufe nicht erreichen (z. B. Prüfdaten nicht verfügbar); es wurde keine Datei geschrieben. HTTP 301/302 … (redirect not followed)Die Server-URL leitet weiter. Aus Sicherheitsgründen folgt das SDK keinen Weiterleitungen – die endgültige https-Adresse eintragen. PDF larger than 10 MiBGrenze des Signaturdienstes; das SDK prüft sie vor dem Senden. ServerURL must start with https://Unverschlüsselte Verbindungen werden nicht unterstützt. License ProblemKeine gültige Lizenz des SDK gesetzt. ### Ohne Programmierung: ZUGFeRD GUI, PDF Viewer und zugcmd Dieselbe Fernsignatur steckt ab Version 11.0.0.2 auch in der [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (Register PDF signieren) und im [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (Tools > PDF / ZUGFeRD-PDF signieren). Server-URL, Benutzer, Passwort und Signaturstufe tragen Sie einmal unter Signatur-Einstellungen ein; Verbindung testen prüft die Zugangsdaten mit einem Test-PDF; während der Signatur zeigt ein Fortschrittsfenster, dass der Dienst arbeitet. Ab Version 11.0.0.3 signiert auch das Kommandozeilen-Tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) per Fernsignatur (-remoteurl, -remoteuser, -remotepw, -level) – ideal für Stapelverarbeitung. ### Rechtlicher Rahmen Der CodeB Remote Signature Service erzeugt fortgeschrittene elektronische Signaturen (AdES) im Sinne der eIDAS-Verordnung, keine qualifizierten Signaturen (QES). Qualifizierte Signaturen (QES) entstehen nur mit einer qualifizierten Signaturkarte wie der maltesischen eID oder der D-Trust Card 5.1 – in der CodeB Wallet per NFC am Telefon. Für E-Rechnungen ist eine elektronische Signatur in Deutschland nicht vorgeschrieben; sie sichert aber Echtheit und Unversehrtheit des Dokuments nachweisbar ab. Ob ein Prüfprogramm die Signatur als „vertrauenswürdig“ anzeigt, hängt davon ab, ob es dem ausstellenden Zertifikat vertraut. ### Technischer Hintergrund Die Funktion nutzt den Endpunkt signatures/signDocBasic der [CSC-v2-Schnittstelle](https://phone.codeb.io/csc-v2-api.html) (Cloud Signature Consortium): ein HTTPS-POST mit Basic-Authentifizierung, das PDF im Request, das signierte PDF in der Antwort. Mehr zum Dienst: [Remote-Signaturen bei CodeB](https://phone.codeb.io/digital-signatures-cookbook.html). ### Häufige Fragen #### Wie signiere ich ein PDF per API ohne lokales Zertifikat? Mit SignPDFRemote des Aloaha ZUGFeRD SDK: Die Funktion sendet das PDF per HTTPS an den CodeB Remote Signature Service und speichert das zurückgegebene, PAdES-signierte PDF. Ein Zertifikat oder eine Smartcard auf dem Rechner ist nicht nötig. #### Bleibt eine ZUGFeRD-Rechnung nach dem Signieren gültig? Ja, wenn zuerst das XML eingebettet und erst danach signiert wird. Die Signatur wird inkrementell angehängt, Inhalt und eingebettete Rechnungsdaten bleiben unverändert. #### Welches Signatur-Level soll ich wählen? Für die Archivierung B-LTA (Standard), sonst mindestens B-T mit Zeitstempel. Das tatsächlich erzeugte Level steht nach dem Aufruf im Parameter EffectiveLevel. #### Was hat die CodeB EUID Wallet mit ZUGFeRD zu tun? Der CodeB Remote Signature Service, über den SignPDFRemote signiert, ist Teil der CodeB EUID Wallet Software. Damit wird die EUID Wallet jetzt auch für ZUGFeRD genutzt: SDK, ZUGFeRD GUI, PDF Viewer und zugcmd signieren E-Rechnungen über ihren Signaturdienst. #### Was ist die CodeB Wallet? Die App zur CodeB EUID Wallet: eine Wallet für die europäische digitale Identität (EUDI) nach eIDAS 2.0 für Android. Sie speichert Ausweisdaten, mobilen Führerschein und Mitgliedskarte, prüft Ausweise und signiert PDFs. Sie ist nicht zertifiziert; den Zugang vergeben wir auf Einladung. #### Brauche ich die CodeB Wallet, um Rechnungen mit dem SDK zu signieren? Nein. SignPDFRemote, die ZUGFeRD GUI, der PDF Viewer und zugcmd nutzen den Signaturdienst der EUID Wallet direkt von Server zu Server. Die App ist für Signaturen am Telefon gedacht. #### Kann ich phone.codeb.io produktiv nutzen? Nein. https://phone.codeb.io ist nur der Testserver von CodeB und nicht für produktive Umgebungen gedacht. Für den Produktivbetrieb tragen Sie die URL Ihres eigenen CodeB-Servers ein. #### Ist das eine qualifizierte elektronische Signatur? Nein. Der Dienst und damit SignPDFRemote erzeugen fortgeschrittene elektronische Signaturen (AdES) nach eIDAS. Eine qualifizierte Signatur (QES) entsteht mit einer qualifizierten Signaturkarte wie der maltesischen eID oder der D-Trust Card 5.1, zum Beispiel in der CodeB Wallet. Für E-Rechnungen ist in Deutschland keine Signatur vorgeschrieben. #### Kann ich SignPDFRemote aus VBA oder VB6 aufrufen? Ja. Die Funktion ist Teil der COM-Schnittstelle iXML und über CreateObject("Aloaha_ZUGFeRD.XML") verfügbar; nach dem Update die Typbibliothek neu registrieren. --- ## Über ZUGFeRD Pro – das ZUGFeRD-SDK von Aloaha seit 2014 URL: https://www.zugferdpro.com/ueber-zugferd-pro/ Date: 2026-10-12 Kurz: ZUGFeRD Pro – das Aloaha ZUGFeRD SDK – ist eine Programmbibliothek zum Erstellen, Lesen und Verarbeiten elektronischer Rechnungen nach EN 16931 (ZUGFeRD, XRechnung, Factur-X). Hersteller ist die Aloaha Limited (Malta, EU). Das SDK ist seit Februar 2014 öffentlich dokumentiert – noch bevor das Forum elektronische Rechnung Deutschland (FeRD) ZUGFeRD 1.0 am 25. Juni 2014 veröffentlicht hat – und zählt damit zu den ersten ZUGFeRD-SDKs am Markt. Seit über 12 Jahren wird es ohne Unterbrechung gepflegt und unterstützt heute den aktuellen Standard ZUGFeRD 2.5.2 / Factur-X 1.09.2. ### Zahlen und Fakten MerkmalZUGFeRD Pro HerstellerAloaha Limited, Malta (EU) – PDF-Werkzeuge und SDKs seit über 25 Jahren Am Markt seit2014 (erste öffentliche Dokumentation: [22. Februar 2014](https://www.zugferdpro.com/q-how-do-i-use-the-zugferd-sdk/)) Aktuelle Version11.0.0.6 ([Versionsgeschichte](https://www.zugferdpro.com/tooldownloads/)) StandardsZUGFeRD 2.x bis 2.5.2, Factur-X 1.09.2, XRechnung (CII), EN 16931; Einlesen von UBL-Rechnungen ProfileBASIC, EN 16931 (COMFORT), EXTENDED und XRECHNUNG Plattformen.NET (C#, VB.NET), COM für VB6, VBA/Access und andere COM-fähige Sprachen, Kommandozeile ([zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/)), Windows-Programm ([ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/)) BetriebOn-Premise – Rechnungsdaten verlassen Ihr Haus nicht; keine Cloud nötig (Ausnahme nur, wenn Sie bewusst die optionale Fernsignatur nutzen) SignaturLokal mit Zertifikat oder über den [CodeB Remote Signature Service](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) – Teil der CodeB EUID Wallet Software, die damit jetzt auch für ZUGFeRD genutzt wird DokumentationFür jede rechnungsrelevante SDK-Funktion mindestens ein Anwendungsartikel, dazu der [BT/BG-Explorer](https://www.zugferdpro.com/bt/) für alle Business Terms der EN 16931 TestenKostenlose Testlizenz mit vollem Funktionsumfang über info@aloaha.com ### Meilensteine ZeitpunktEreignis Februar 2014Erste öffentliche Anleitung zum Aloaha ZUGFeRD SDK für .NET – noch vor der Veröffentlichung des Standards. 25. Juni 2014FeRD veröffentlicht ZUGFeRD 1.0; das SDK erzeugt und liest ZUGFeRD-Rechnungen von Anfang an. 2014 – 2025Laufende Pflege für ZUGFeRD 2.x, Factur-X und XRechnung, COM-Schnittstelle für VB6/VBA, CSV-Schnittstelle für die Massenverarbeitung, Einlesen von UBL-Rechnungen. Version 10 ist die letzte Hauptversion auf Basis von .NET 3.5. 2026Hauptversion 11 auf Basis von .NET Framework 4.7.2 – im 64-Bit-Modus rund viermal schneller. 11.0.0.1: Lieferschein-Referenz je Position und standardkonforme Verweise auf vorausgegangene Rechnungen. 11.0.0.2: [PAdES-Fernsignatur](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) für fertige ZUGFeRD-PDFs über die CodeB EUID Wallet. 11.0.0.3: Signieren per Kommandozeile (zugcmd), Fortschrittsanzeige und neuer Info-Dialog in GUI und PDF Viewer. 11.0.0.6: sauberere Anhänge in ZUGFeRD-PDFs (PDF/A), Warnhinweis LastWarning, COM-Schnittstelle wieder kompatibel zu Version 10. 1. September 2026ZUGFeRD 2.5.2 / Factur-X 1.09.2 gültig – vom SDK unterstützt. ### Warum Unternehmen ZUGFeRD Pro einsetzen - Erfahrung: Über 12 Jahre Praxis mit ZUGFeRD – vom ersten Standard bis zur aktuellen Version, ohne Produktwechsel für die Kunden. - Vollständig: Erzeugen, Lesen, Ändern, in PDF/A-3 einbetten, aus PDF extrahieren, PDF aus Word-Vorlage erstellen, signieren – in einer Bibliothek. - Kompatibel: Bestehende COM-Schnittstellen bleiben bei Updates erhalten; neue Funktionen kommen hinzu, ohne vorhandene Programme zu brechen. - On-Premise: Keine Cloud, keine Datenweitergabe – geeignet für regulierte Branchen und Umgebungen ohne Internet. - Begleitung: Wir unterstützen bei der Integration, bis Ihre Rechnungen die gängigen E-Rechnungs-Validatoren bestehen. - Transparente Preise: SDK-Lizenz einmalig 1.350 € zzgl. MwSt. pro Entwicklerarbeitsplatz – Details unter Lizenzen & Preise . Verkauf nur an Unternehmen (B2B). ### Einstieg - Schnellstart: ZUGFeRD-Rechnung in VB.NET erstellen - Beispielcode für .NET und COM - E-Rechnungspflicht in Deutschland - Downloads und Versionsgeschichte ### Häufige Fragen #### Seit wann gibt es das Aloaha ZUGFeRD SDK? Seit 2014. Die erste öffentliche Anleitung zum SDK stammt vom 22. Februar 2014 – noch vor der Veröffentlichung von ZUGFeRD 1.0 am 25. Juni 2014. Damit gehört ZUGFeRD Pro zu den ersten ZUGFeRD-SDKs am Markt und wird seit über 12 Jahren gepflegt. #### Wer stellt ZUGFeRD Pro her? Die Aloaha Limited mit Sitz in Malta (EU). Aloaha entwickelt seit über 25 Jahren PDF-Werkzeuge und SDKs. #### Unterstützt ZUGFeRD Pro den aktuellen ZUGFeRD-Standard? Ja. Das SDK unterstützt ZUGFeRD 2.5.2 / Factur-X 1.09.2 (gültig seit 1. September 2026), XRechnung (CII) und die rechnungsrelevanten Profile BASIC, EN 16931 (COMFORT), EXTENDED und XRECHNUNG. #### Ist ZUGFeRD Pro eine Cloud-Lösung? Nein. ZUGFeRD Pro läuft vollständig On-Premise in Ihrer eigenen Anwendung; Rechnungsdaten werden nicht an Dritte übertragen. Einzige Ausnahme ist die optionale Fernsignatur: Nutzen Sie sie, wird das zu signierende PDF an den von Ihnen eingetragenen CodeB-Server gesendet. #### Wie kann ich ZUGFeRD Pro testen? Eine kostenlose Testlizenz mit vollem Funktionsumfang erhalten Sie per E-Mail an info@aloaha.com; das SDK steht auf der Download-Seite bereit. --- ## zugcmd: das ZUGFeRD-Kommandozeilen-Tool URL: https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/ Date: 2026-10-12 zugcmd.exe ist das Kommandozeilen-Tool des Aloaha ZUGFeRD SDK. Damit erzeugen und verarbeiten Sie elektronische Rechnungen nach EN 16931 (ZUGFeRD, Factur-X, XRechnung) ohne eigene Programmierung: aus Batch-Dateien, geplanten Tasks, Skripten, VBA/Access oder direkt vom SQL Server. Jeder Aufruf liefert einen Rückgabewert (ExitCode), sodass sich zugcmd leicht in bestehende Abläufe einbinden lässt. ### Was zugcmd kann - ZUGFeRD aus CSV erzeugen: Verkäufer, Käufer, Positionen, Summen und Zu-/Abschläge kommen aus einfachen CSV-Dateien; heraus kommt das ZUGFeRD-/XRechnung-XML und auf Wunsch die fertige ZUGFeRD-PDF/A-3. - XML in ein PDF einbetten: ein vorhandenes ZUGFeRD-/XRechnung-XML wird in Ihr Rechnungs-PDF eingebettet (PDF/A-3). - PDF aus XML über eine Word-Vorlage: ohne vorhandenes PDF erzeugt zugcmd die Rechnung aus einer DOCX-Vorlage. - E-Rechnungen nach CSV exportieren: ein ZUGFeRD-/XRechnung-XML oder ein ZUGFeRD-PDF wird wieder in die CSV-Dateien zerlegt – z. B. für den Import in Ihre Buchhaltung. - DOCX-Visualisierung: aus dem XML entsteht ein lesbares Word-Dokument. - ASCII-/DAT-Dateien: Rechnungsdaten im SAP-/inconso-Format („SATZART“) werden direkt nach ZUGFeRD gewandelt. - Signieren (neu ab 11.0.0.3): vorhandene PDFs oder die gerade erzeugte ZUGFeRD-Rechnung signieren – mit einem lokalen Zertifikat oder über die CodeB-Fernsignatur (PAdES) der CodeB EUID Wallet, auch in einem einzigen Aufruf. Intern nutzt zugcmd dieselben Funktionen wie Ihr eigener Code, etwa [ImportCSV](https://www.zugferdpro.com/api/importcsv/), [MergeXMLIntoPDF](https://www.zugferdpro.com/api/mergexmlintopdf/), [CreateDocFromXML](https://www.zugferdpro.com/api/createdocfromxml/) und [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/). ### Download und Einrichtung zugcmd liegt als [zugcmd.zip](https://www.aloaha.com/download/zugcmd.zip) auf der [Download-Seite](https://www.zugferdpro.com/tooldownloads/) – mit Beispiel-CSV-Dateien und einer ausführlichen readme.txt. Einige Funktionen der mitgelieferten Bibliothek müssen einmalig im System registriert werden: Starten Sie zugcmd dazu einmal mit Administratorrechten (z. B. mit einer ersten Rechnungserstellung) oder installieren Sie einen der Installer von der [Download-Seite](https://www.zugferdpro.com/tooldownloads/). Für die lizenzierten Funktionen geben Sie Ihren Lizenzschlüssel mit -l an; eine kostenlose Testlizenz erhalten Sie über [info@aloaha.com](mailto:info@aloaha.com). Voraussetzung: zugcmd ab Version 11 benötigt das .NET Framework 4.7.2 (in Windows 10 ab Version 1803 und in Windows 11 bereits enthalten). Die Versionen 10 und älter laufen mit der .NET Framework 3.5 Runtime. Integration in die eigene Anwendung: Wie Sie die CSV-Dateien aufbauen, zugcmd aus Delphi, VB6 oder einer anderen Sprache starten und den Rückgabewert auswerten, zeigt [E-Rechnungen per CSV und zugcmd aus der eigenen Anwendung erstellen](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) – mit getesteten Beispieldateien. ### Parameter Parameter beginnen mit - oder / (z. B. -x oder /x). Pfade mit Leerzeichen setzen Sie in Anführungszeichen. #### Allgemein ParameterBedeutung -l Lizenzschlüssel (für lizenzierte Funktionen erforderlich) -d Basis-/Datenverzeichnis. Bloße Dateinamen werden gegen diesen Pfad aufgelöst; für nicht angegebene Dateien gelten die Standardnamen. -y Trennzeichen der CSV-Dateien, z. B. , oder ; -c Zeichensatz der Eingabe, Standard utf8 (weitere: ansi, ascii, unicode, utf7, utf32) -f true|falseAusgabedatei überschreiben (Standard true); mit -f false bleibt eine vorhandene Datei erhalten -silentkeinerlei Ausgabe auf der Konsole #### Ein- und Ausgabedateien ParameterBedeutungStandardname -x Ausgabe-XML (ZUGFeRD/XRechnung)OutputXML.xml -o Ausgabe-PDF (ZUGFeRD-PDF/A-3)OutputPDF.pdf -i Eingabe-PDF, in das eingebettet wirdInputPDF.pdf -a Eingabe im ASCII-/DAT-Format (SAP/inconso „SATZART“)– -r Export: vorhandenes XML bzw. ZUGFeRD-PDF einlesen und nach CSV schreiben– -v DOCX-Visualisierung des XML erzeugen– -w Ausgabe-PDF aus dem XML über diese Word-Vorlage erzeugen– #### CSV-Dateien (Import und Export) ParameterInhaltStandardname -sVerkäufer / RechnungsstellerSeller.csv -bKäufer / RechnungsempfängerBuyer.csv -pRechnungspositionenItems.csv -tSummen und BeträgeTotals.csv -zZu- und Abschlägeallowances.csv -hLieferanschrift (Deliver To)deliverto.csv -gVersandanschrift (Deliver From)deliverfrom.csv #### Signieren (ab Version 11.0.0.3) Die Fernsignatur läuft über den CodeB Remote Signature Service – einen Bestandteil der CodeB EUID Wallet Software, die damit jetzt auch für ZUGFeRD genutzt wird. ParameterBedeutung -cert Signatur mit einem lokalen Zertifikat (Windows-Zertifikatsspeicher oder Smartcard) -pin PIN zum lokalen Signaturzertifikat -tsa Zeitstempeldienst (RFC 3161) für die lokale Signatur -remoteurl Fernsignatur: URL Ihres CodeB-Servers (nur https). https://phone.codeb.io ist nur der Testserver von CodeB und nicht für den produktiven Einsatz gedacht. -remoteuser Benutzername beim CodeB-Server -remotepw Passwort – besser über die Umgebungsvariable ZUGCMD_REMOTE_PASSWORD, dann steht es nicht in der Kommandozeile; zugcmd gibt es nie aus -level PAdES-Stufe B-B, B-T, B-LT oder B-LTA (Standard B-LTA); die tatsächlich erzeugte Stufe wird ausgegeben -minlevel Mindeststufe (Standard B-B). Liefert der Dienst weniger, wird keine signierte Datei geschrieben (Exit-Code 60). Bei HTTP 429 (Limit 30 Aufrufe pro Minute) wartet zugcmd und versucht es bis zu zweimal erneut. -reason, -contact, -locationGrund, Kontakt und Ort in der Signatur (lokal und Fernsignatur) Allein mit -i (und optional -o) signiert zugcmd ein vorhandenes PDF. Zusammen mit einer ZUGFeRD-Erzeugung – XML einbetten, CSV, Word-Vorlage oder ASCII – wird das erzeugte Ausgabe-PDF zum Schluss signiert, sodass das eingebettete XML unverändert bleibt. Ist -remoteurl gesetzt, hat die Fernsignatur Vorrang vor -cert. Schlägt die Signatur fehl, bleibt kein unsigniertes PDF unter dem Zielnamen liegen: zugcmd benennt es in .pdf.unsigned um (Exit-Code 60 bzw. 1). Wurde eine Signatur angefordert, aber kein Ausgabe-PDF erzeugt, endet zugcmd mit Exit-Code 62. So kann ein Folgeprozess, der nur nach der PDF-Datei schaut, nie versehentlich eine unsignierte Rechnung weitergeben. Den Aufbau der CSV-Dateien beschreibt der Artikel [CSV-Dateien in eine ZUGFeRD-konforme X-Rechnung importieren](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/). ### Beispiele #### 1. ZUGFeRD aus CSV erzeugen (XML und PDF) ``` zugcmd.exe -x "OutputXML.xml" -o "OutputPDF.pdf" -i "InputPDF.pdf" ^ -b "Buyer.csv" -s "Seller.csv" -p "Items.csv" -t "Totals.csv" ^ -z "allowances.csv" -y "," -l ``` Kurzform mit Basisverzeichnis – alle Dateien tragen dort ihre Standardnamen: ``` zugcmd.exe -d "C:\Daten" -y "," -l ``` #### 2. Vorhandenes XML in ein PDF einbetten ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -i "C:\Daten\rechnung.pdf" ^ -o "C:\Daten\zugferd.pdf" -l ``` #### 3. ZUGFeRD oder XRechnung nach CSV exportieren ``` zugcmd.exe -d "C:\Daten" -r "xrechnung.xml" -b "Buyer.csv" -s "Seller.csv" ^ -p "Items.csv" -t "Totals.csv" -z "allowances.csv" -y "," -l ``` Statt des XML kann mit -r auch direkt ein ZUGFeRD-PDF angegeben werden. Mehr dazu: [ZUGFeRD-Rechnungen nach CSV konvertieren](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/). #### 4. ASCII-/DAT-Datei (SAP/inconso) nach ZUGFeRD ``` zugcmd.exe -a "rechnung.DAT" -i "rechnung.pdf" -o "zugferd.pdf" -f true ^ -l ``` #### 5. DOCX-Visualisierung Geben Sie bei einem der Aufrufe zusätzlich -v "C:\Daten\visualisierung.docx" an; zugcmd schreibt dann eine lesbare Word-Fassung der Rechnung. #### 6. PDF aus XML über eine Word-Vorlage ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -w "C:\Daten\Vorlage.docx" ^ -o "C:\Daten\rechnung.pdf" -l ``` Die Platzhalter der Vorlage erklärt der Artikel [Word-Vorlage und Platzhalter](https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/). #### 7. Von CSV über die Word-Vorlage zum PDF (zwei Schritte) CSV-Import und Word-Vorlage lassen sich nicht in einem Aufruf kombinieren. Erzeugen Sie zuerst das XML aus den CSV-Dateien und danach das PDF aus der Vorlage: ``` zugcmd.exe -d "C:\Daten" -x "zugferd.xml" -b "Buyer.csv" -s "Seller.csv" ^ -p "Items.csv" -t "Totals.csv" -z "allowances.csv" -y "," -l zugcmd.exe -x "C:\Daten\zugferd.xml" -w "C:\Daten\Vorlage.docx" ^ -o "C:\Daten\zugferd.pdf" -l ``` Wichtig für den zweiten Schritt: vollständige Pfade verwenden und -d nicht auf den CSV-Ordner zeigen lassen – sonst wird der Aufruf wieder als CSV-Import behandelt und die Vorlage ignoriert. Die Ausgabedatei darf in diesem Schritt noch nicht existieren. Im ersten Schritt kann ein Hinweis zum fehlenden Eingabe-PDF (ExitCode 57/58) erscheinen; das XML wird trotzdem geschrieben. #### 8. Vorhandenes PDF per Fernsignatur signieren ``` set ZUGCMD_REMOTE_PASSWORD=IHR-PASSWORT zugcmd.exe -remoteurl "https://IHR-CODEB-SERVER" -remoteuser "benutzer@firma.de" ^ -level B-LTA -i "C:\Daten\rechnung_zugferd.pdf" -o "C:\Daten\rechnung_signiert.pdf" ^ -reason "Rechnungsfreigabe" -l ``` #### 9. ZUGFeRD-PDF erzeugen und in einem Aufruf signieren ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -i "C:\Daten\basis.pdf" -o "C:\Daten\rechnung_zugferd.pdf" ^ -remoteurl "https://IHR-CODEB-SERVER" -remoteuser "benutzer@firma.de" -l ``` Mit -cert "" statt der -remote…-Parameter wird das Ausgabe-PDF mit Ihrem lokalen Zertifikat signiert. ### Rückgabewerte (ExitCode) 0 bedeutet Erfolg, jeder andere Wert einen Fehler. Damit können Batch-Dateien, VBA oder der SQL Server das Ergebnis direkt auswerten. ExitCodeBedeutung 0Erfolg 1allgemeiner Fehler bzw. lokale Signatur fehlgeschlagen 2nicht lizenziert bzw. Ausgabedatei nicht gefunden 3Word-Vorlage oder Eingabe-PDF fehlt 4Dateiname/XML fehlt 55Ausgabe-PDF konnte nicht erstellt werden 56Ausgabe-PDF existiert bereits 57Eingabe-PDF nicht gefunden 58Eingabedatei ist kein PDF 59XML konnte nicht erstellt werden 60Fernsignatur fehlgeschlagen oder unter -minlevel (Grund in der Konsolenausgabe) 61Fernsignatur: -remoteurl (https), -remoteuser oder Passwort fehlt 62Signatur angefordert (-remoteurl oder -cert), aber kein Ausgabe-PDF erzeugt 99 / 100keine (gültigen) Argumente übergeben 101ZUGFeRD-Objekt konnte nicht erzeugt werden 102ZUGFeRD-Bibliothek nicht geladen bzw. Struktur nicht lesbar 103 / 105Laufzeitfehler bei der Verarbeitung 12345sonstiger Fehler bei der PDF-Erstellung Ein Beispiel für eine Batch-Datei: ``` zugcmd.exe -d "C:\Daten" -y ";" -silent -l if errorlevel 1 echo ZUGFeRD-Erstellung fehlgeschlagen, ExitCode %errorlevel% ``` ### Weitere Kommandozeilen-Tools - Direkte Konvertierung von doc/docx nach PDF/A - Kommandozeilendruck von Office-doc/docx-Dokumenten - ZUGFeRD-XML nach Word (DOCX) konvertieren - Alle Artikel zu den Kommandozeilen-Tools Lieber mit Oberfläche? Die [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) erstellt, bearbeitet und signiert ZUGFeRD-Dateien per Mausklick. Ohne Argumente gestartet zeigt zugcmd eine kurze Übersicht aller Parameter. ### Häufige Fragen #### Kann ich ZUGFeRD-Rechnungen per Kommandozeile signieren? Ja, ab zugcmd 11.0.0.3: mit -cert über ein lokales Zertifikat oder mit -remoteurl, -remoteuser und Passwort über die CodeB-Fernsignatur der CodeB EUID Wallet (PAdES B-B bis B-LTA). Zusammen mit einer ZUGFeRD-Erzeugung wird das fertige PDF zum Schluss signiert. #### Wie übergebe ich das Passwort für die Fernsignatur sicher? Über die Umgebungsvariable ZUGCMD_REMOTE_PASSWORD. Dann steht das Passwort weder in der Batch-Zeile noch in der Prozessliste; zugcmd gibt es auch nie aus. #### Kann ich phone.codeb.io für die Fernsignatur verwenden? Nur zum Testen. https://phone.codeb.io ist der Testserver von CodeB und nicht für produktive Umgebungen gedacht; geben Sie mit -remoteurl die URL Ihres produktiven CodeB-Servers an. #### Woran erkenne ich in einem Skript, ob alles geklappt hat? Am ExitCode: 0 bedeutet Erfolg. Bei der Fernsignatur steht 60 für einen Fehler des Dienstes und 61 für fehlende Zugangsdaten; 62 bedeutet, dass eine Signatur angefordert, aber kein PDF erzeugt wurde. Ein PDF, dessen Signatur fehlgeschlagen ist, liegt nie unter dem Zielnamen. --- ## About ZUGFeRD Pro – the ZUGFeRD SDK by Aloaha since 2014 URL: https://www.zugferdpro.com/en/about-zugferd-pro/ Date: 2026-10-12 In short: ZUGFeRD Pro – the Aloaha ZUGFeRD SDK – is a software library for creating, reading and processing electronic invoices according to EN 16931 (ZUGFeRD, XRechnung, Factur-X). It is made by Aloaha Limited (Malta, EU). The SDK has been publicly documented since February 2014 – before the German Forum elektronische Rechnung Deutschland (FeRD) published ZUGFeRD 1.0 on 25 June 2014 – which makes it one of the first ZUGFeRD SDKs on the market. It has been maintained without interruption for more than 12 years and today supports the current standard ZUGFeRD 2.5.2 / Factur-X 1.09.2. ### Facts and figures FeatureZUGFeRD Pro ManufacturerAloaha Limited, Malta (EU) – PDF tools and SDKs for more than 25 years On the market since2014 (first public documentation: [22 February 2014](https://www.zugferdpro.com/q-how-do-i-use-the-zugferd-sdk/)) Current version11.0.0.6 ([version history](https://www.zugferdpro.com/tooldownloads/)) StandardsZUGFeRD 2.x up to 2.5.2, Factur-X 1.09.2, XRechnung (CII), EN 16931; reading UBL invoices ProfilesBASIC, EN 16931 (COMFORT), EXTENDED and XRECHNUNG Platforms.NET (C#, VB.NET), COM for VB6, VBA/Access and other COM-capable languages, command line ([zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/)), Windows application ([ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/)) OperationOn-premise – invoice data does not leave your company; no cloud required (the only exception is the optional remote signing, if you choose to use it) SigningLocally with a certificate, or via the [CodeB Remote Signature Service](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) – part of the CodeB EUID Wallet software, which is now also used for ZUGFeRD DocumentationAt least one how-to article for every invoice-related SDK function, plus the [BT/BG explorer](https://www.zugferdpro.com/bt/) for all EN 16931 business terms TrialFree, fully functional trial licence via info@aloaha.com ### Milestones DateEvent February 2014First public guide to the Aloaha ZUGFeRD SDK for .NET – before the standard was published. 25 June 2014FeRD publishes ZUGFeRD 1.0; the SDK creates and reads ZUGFeRD invoices from day one. 2014 – 2025Continuous maintenance for ZUGFeRD 2.x, Factur-X and XRechnung, COM interface for VB6/VBA, CSV interface for bulk processing, reading UBL invoices. Version 10 is the last major version based on .NET 3.5. 2026Major version 11 based on .NET Framework 4.7.2 – about four times faster in 64-bit mode. 11.0.0.1: delivery note reference per line and standard-compliant references to preceding invoices. 11.0.0.2: [PAdES remote signing](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) of finished ZUGFeRD PDFs via the CodeB EUID Wallet. 11.0.0.3: signing from the command line (zugcmd), progress display and a new info dialog in the GUI and PDF Viewer. 11.0.0.6: cleaner attachments in ZUGFeRD PDFs (PDF/A), LastWarning notice, COM interface compatible with version 10 again. 1 September 2026ZUGFeRD 2.5.2 / Factur-X 1.09.2 in force – supported by the SDK. ### Why companies use ZUGFeRD Pro - Experience: more than 12 years of practice with ZUGFeRD – from the first standard to the current version, without customers having to switch products. - Complete: create, read, modify, embed in PDF/A-3, extract from PDF, create a PDF from a Word template and sign – in one library. - Compatible: existing COM interfaces are kept with every update; new functions are added without breaking existing programs. - On-premise: no cloud, no data sharing – suitable for regulated industries and environments without internet access. - Support: we help with the integration until your invoices pass the common e-invoice validators. - Transparent pricing: SDK licence a one-time EUR 1,350 excl. VAT per development workstation – details under licences & pricing . Sold to businesses only (B2B). ### Getting started - Quick start: create a ZUGFeRD invoice in VB.NET - Sample code for .NET and COM - The e-invoicing mandate in Germany - Downloads and version history ### Frequently asked questions #### Since when has the Aloaha ZUGFeRD SDK existed? Since 2014. The first public guide to the SDK dates from 22 February 2014 – before ZUGFeRD 1.0 was published on 25 June 2014. This makes ZUGFeRD Pro one of the first ZUGFeRD SDKs on the market; it has been maintained for more than 12 years. #### Who makes ZUGFeRD Pro? Aloaha Limited, based in Malta (EU). Aloaha has been developing PDF tools and SDKs for more than 25 years. #### Does ZUGFeRD Pro support the current ZUGFeRD standard? Yes. The SDK supports ZUGFeRD 2.5.2 / Factur-X 1.09.2 (in force since 1 September 2026), XRechnung (CII) and the invoice profiles BASIC, EN 16931 (COMFORT), EXTENDED and XRECHNUNG. #### Is ZUGFeRD Pro a cloud solution? No. ZUGFeRD Pro runs entirely on-premise inside your own application; invoice data is not transferred to third parties. The only exception is the optional remote signing: if you use it, the PDF to be signed is sent to the CodeB server you have configured. #### How can I try ZUGFeRD Pro? You get a free, fully functional trial licence by e-mail to info@aloaha.com; the SDK is available on the download page. --- ## Aloaha ZUGFeRD GUI – create, read and sign e-invoices without programming URL: https://www.zugferdpro.com/en/aloaha-zugferd-gui/ Date: 2026-10-12 In short: The Aloaha ZUGFeRD GUI is a Windows application to create, read, edit and sign ZUGFeRD, Factur-X and XRechnung e-invoices without programming. You enter the invoice data in forms, save it as EN 16931 XML, embed the XML into a PDF/A-3 and sign the finished ZUGFeRD invoice – with a local certificate or with the CodeB remote signing service (PAdES). The GUI is built entirely on the [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/). Price: EUR 199 excl. VAT. Price: EUR 199 excl. VAT. We sell to businesses only (B2B), not to private consumers. Order by e-mail to [info@aloaha.com](mailto:info@aloaha.com?subject=Aloaha%20ZUGFeRD%20GUI%20licence). The licence is also valid for the [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/). A free trial licence is available from info@aloaha.com as well. ### Features - Create e-invoices: enter invoice data, addresses, bank details and line items and save them as ZUGFeRD / XRechnung XML. - Read e-invoices: open ZUGFeRD PDF, Factur-X PDF, XRechnung (CII) and UBL invoices; the data appears in the forms and can be changed. - Convert UBL: import UBL invoices and save them as XRechnung (CII) or ZUGFeRD PDF/A. - Embed XML into PDF: merge an existing PDF/A with the invoice XML into a hybrid ZUGFeRD invoice (PDF/A-3). - PDF from a Word template: create a ZUGFeRD PDF/A directly from the XML and a DOCX template. - Signing (new in 11.0.0.2): digitally sign finished ZUGFeRD PDFs – locally with a certificate or with CodeB remote signing (PAdES B-B to B-LTA). - Bilingual: English or German user interface, switchable in the status bar. - Portable or installed: runs without installation or from a Windows installer. ### The tabs #### Create XML Four sub-tabs: Basic Information (invoice ID, invoice date, document type such as invoice 380, credit note 381, corrected invoice 384 or final construction invoice 877, delivery date, payment reference, currency, payment type, notes, VAT rate, VAT category with exemption reason and the totals), Postal Addresses and Bank Details of seller and buyer, and Items (quantity, unit, name, description, net price). Load XML or PDF opens an existing e-invoice, Save XML saves the result. #### Convert XML to PDF/A Creates a finished ZUGFeRD PDF/A-3 from a ZUGFeRD XML and a DOCX template, optionally with an additional attached file. With Digitally Sign PDF the result is signed right away using the signature settings. Requires Microsoft Word. #### Merge XML into PDF Embeds an invoice XML into an existing PDF/A and saves it as a hybrid ZUGFeRD invoice – the layout of your current invoicing software stays as it is. #### Sign PDF (new) Signs a finished ZUGFeRD, Factur-X or XRechnung PDF. Choose the file (drag & drop works too); the GUI checks whether an invoice XML is embedded and whether the PDF is already signed, and suggests _signed.pdf as the target. Sign PDF signs with the configured method; the embedded XML stays unchanged. With remote signing the GUI shows the signature level that was actually produced. ### Signature settings Settings > Signature settings defines how the GUI signs. The same settings are used by the [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (per Windows user). SettingMeaning Local certificateSigns with a certificate from the Windows certificate store or a smart card. Pick the serial number with Choose…; if empty, the certificate is chosen when signing. Optional RFC 3161 time stamp server. CodeB remote signingSigns via the [CodeB Remote Signature Service](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (part of the CodeB EUID Wallet software, now also used for ZUGFeRD) – no local certificate; a progress window shows that the signature is running. The minimum level defines the lowest level the service must deliver – otherwise nothing is signed. URL of your production CodeB server, user name, password and PAdES level B-B, B-T, B-LT or B-LTA. Test serverhttps://phone.codeb.io is only the CodeB test server – fine for trying it out, not for production environments. The GUI warns when it is entered. Save passwordOptional; the password is stored encrypted with Windows DPAPI for the logged-on user. Otherwise it is kept only until the program is closed. Test connectionLets the service sign a small test PDF and reports success and the level delivered – nothing is saved. Reason, location, contactOptional details written into the signature. ### Download EditionDownloadNote Portable[Aloaha_ZUGFeRD_GUI_bin.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip)Unzip and run – please start it once with elevated rights. Windows installer[aloaha_zugferdgui.zip](https://www.aloaha.com/download/aloaha_zugferdgui.zip)Permanent installation; starts faster than the portable edition. Requirements: Windows with .NET Framework 4.7.2; Microsoft Word for Convert XML to PDF/A; for remote signing a CodeB account and HTTPS internet access. The GUI is also built into the [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (Document > Show ZUGFeRD Data). ### Video Remote signing in the GUI uses the signature service of the CodeB Identity Wallet (EUID Wallet). This is what the wallet looks like: Everything the GUI does is also available as an API of the [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/) for .NET and COM. SDK customers can request the GUI sources. Questions? Write to info@aloaha.com. ### Frequently asked questions #### Can I create an XRechnung or ZUGFeRD invoice without programming? Yes. Enter the invoice data in the forms of the Aloaha ZUGFeRD GUI and save it as EN 16931 XML; the GUI is based on the Aloaha ZUGFeRD SDK. #### How do I sign a finished ZUGFeRD invoice? Open the "Sign PDF" tab, choose the finished ZUGFeRD PDF and click "Sign PDF". The method comes from Settings > Signature settings: local certificate or CodeB remote signing (PAdES). The embedded XML is not changed. #### Do I need my own certificate? Not for CodeB remote signing – a user name and password for the CodeB Remote Signature Service are enough. Local signing needs a certificate with private key in the Windows certificate store or on a smart card. #### What does the Aloaha ZUGFeRD GUI cost? EUR 199 excl. VAT, sold to businesses only. The licence also covers the Aloaha ZUGFeRD PDF Viewer; a trial licence is free via info@aloaha.com. --- ## Sign PDF and ZUGFeRD invoices remotely (PAdES) with SignPDFRemote URL: https://www.zugferdpro.com/en/sign-pdf-remotely-signpdfremote/ Date: 2026-10-12 In short: With [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/) the Aloaha ZUGFeRD SDK (version 11.0.0.2 and later) signs a PDF – including a hybrid ZUGFeRD/Factur-X invoice – via the CodeB Remote Signature Service, part of the CodeB EUID Wallet software. The SDK sends the PDF to the service over HTTPS and receives it back with a PAdES signature (level B-B to B-LTA). No local certificate, smartcard or card reader is needed; signing also works unattended in batch jobs and from VB6/VBA via COM. ### When to sign remotely? - Servers and batch jobs: invoices are created and signed automatically without a certificate or card having to be installed on the server. - Central key management: the signing key is held by the signing service, not on every workstation. - Long-term verifiability: with level B-LTA the PDF contains timestamps and validation data for later verification. ### CodeB EUID Wallet – now also for ZUGFeRD The CodeB Remote Signature Service is part of the CodeB EUID Wallet software. The EUID Wallet is therefore now also used for ZUGFeRD: the Aloaha ZUGFeRD SDK (SignPDFRemote), the [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/), the [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) and the command-line tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) sign e-invoices directly via the EUID Wallet's signing service – without a certificate or smartcard on your own computer. The software includes the [CodeB Wallet](https://www.zugferdpro.com/codeb-wallet/) – an EUDI wallet under eIDAS 2.0 for Android phones: identity data (PID), mobile driving licence, ID checks and PDF signing on the phone, advanced (AdES) via the signing service or qualified (QES) with the Maltese eID or a D-Trust card via NFC. All functions, video and access: [CodeB Wallet – Aloaha's EU identity wallet](https://www.zugferdpro.com/codeb-wallet/) and [myeuid.app](https://myeuid.app/en/). You do not need the app to sign invoices with the SDK: SignPDFRemote, the ZUGFeRD GUI, the PDF Viewer and zugcmd talk to the signing service directly, server to server. ### Requirements - Aloaha ZUGFeRD SDK version 11.0.0.2 or later with a valid licence. - A user account on a production CodeB server (Remote Signature Service of the CodeB EUID Wallet); for the server-to-server call, sign-in with user name and password must be enabled for the tenant. Important: https://phone.codeb.io is only CodeB's test server. It is suitable for trying things out but must not be used for production environments. For production you need your own CodeB server or tenant – contact us: info@aloaha.com. The examples therefore use the placeholder https://YOUR-CODEB-SERVER. - Internet access via HTTPS from the calling computer to the signing service. - The PDF is at most 10 MiB in size and not encrypted. ### VB.NET ``` Dim LicenseKey As String = "YOUR-LICENCE-KEY" Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' Arguments: input PDF, output ("" = replace input), your CodeB server, user, password, ' PAdES level, reason, location, contact, overwrite, licence, actual level (returned) Dim level As String = "" If alo.SignPDFRemote("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf", _ "https://YOUR-CODEB-SERVER", "benutzer@firma.de", "YOUR-PASSWORD", "B-LTA", _ "Invoice approval", "Musterstadt", "", True, LicenseKey, level) Then Console.WriteLine("Signed, level: " & level) Else Console.WriteLine("Error: " & alo.LastError) End If ``` ### C# ``` var alo = new Aloaha_ZUGFeRD.XML(); alo.Licensekey = licenseKey; string level = ""; bool ok = alo.SignPDFRemote(@"C:\Rechnungen\RE-2026-0001_zugferd.pdf", @"C:\Rechnungen\RE-2026-0001_signiert.pdf", "https://YOUR-CODEB-SERVER", "benutzer@firma.de", "YOUR-PASSWORD", "B-T", "Invoice approval", "Musterstadt", "", true, licenseKey, ref level); Console.WriteLine(ok ? "Signed, level: " + level : "Error: " + alo.LastError); ``` ### VBA / VB6 (COM) ``` Dim alo As Object, level As String Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "YOUR-LICENCE-KEY" If alo.SignPDFRemote("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf", _ "https://YOUR-CODEB-SERVER", "benutzer@firma.de", "YOUR-PASSWORD", "B-LTA", _ "Invoice approval", "Musterstadt", "", True, "", level) Then Debug.Print "Signed, level: " & level Else Debug.Print "Error: " & alo.LastError End If ``` After updating to 11.0.0.2, re-register the type library so that COM clients see the new function. ### Without files: SignPDFRemoteBytes For web services and database applications, [SignPDFRemoteBytes](https://www.zugferdpro.com/api/signpdfremotebytes/) works directly with bytes and returns the signed PDF (or Nothing on error): ``` Dim signiert() As Byte = alo.SignPDFRemoteBytes(pdfBytes, "https://YOUR-CODEB-SERVER", "benutzer@firma.de", "YOUR-PASSWORD", "B-T") If signiert Is Nothing Then Console.WriteLine(alo.LastError) ``` ### With a minimum level: the RemoteSigner class (from 11.0.0.3) For servers and batch processing, version 11.0.0.3 and later provide a separate COM class Aloaha_ZUGFeRD.RemoteSigner. It signs just like SignPDFRemote (company seal via signDocBasic), but additionally offers: - Minimum level ( MinLevel , default B-B ): if the service delivers a lower level, the signature counts as failed and no file is written. - Reason for a downgrade ( LevelNote ) as well as requested and produced level ( RequestedLevel , EffectiveLevel ). - Retry on rate limit ( MaxRetries ): on HTTP 429 the class waits for the time given by the service and tries again. - Settings from the registry ( LoadSettings ) for servers: HKLM\Software\Aloaha\ZUGFeRD\CSC with BaseURL , User , PasswordProtected (encrypted for the machine with Windows DPAPI via ProtectPassword ), Level , MinLevel , Reason , Location , Contact , TimeoutSeconds , MaxRetries . ``` Dim rs As New Aloaha_ZUGFeRD.RemoteSigner rs.LicenseKey = "YOUR-LICENCE-KEY" rs.ServerURL = "https://YOUR-CODEB-SERVER" rs.UserName = "rechnungssiegel" rs.Password = "YOUR-PASSWORD" rs.Level = "B-LTA" rs.MinLevel = "B-T" ' no signing without a timestamp rs.Reason = "Invoice approval" rs.MaxRetries = 2 ' batch processing: on HTTP 429 wait and retry If rs.SealFile("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf") Then Console.WriteLine("Signed, level: " & rs.EffectiveLevel & " " & rs.LevelNote) Else Console.WriteLine("Error: " & rs.LastError) End If ``` From VBA/VB6: Set rs = CreateObject("Aloaha_ZUGFeRD.RemoteSigner"), then the same properties. The class does not follow redirects – user name and password are only sent to the configured server URL. The password is never output. ### Signature levels (PAdES) LevelContentUse B-BBasic signature (CMS with signing certificate)simple integrity protection B-Tplus a timestamp from a time-stamping service (RFC 3161)provable signing time B-LTplus validation data (certificates, OCSP) in the PDFvalidation without an online query B-LTA (default)plus an archive timestamplong-term archiving If the service cannot produce a higher level at the moment (e.g. because the time-stamping service is unreachable), it signs with the next lower level instead of aborting. The level actually produced is returned in the parameter EffectiveLevel (e.g. AdES-B-T). Always check it against your minimum requirement – most easily with RemoteSigner.MinLevel, the GUI setting minimum level or zugcmd -minlevel. ### Signing a ZUGFeRD invoice: the order - Create the invoice data and save it as XML ( quick start VB.NET ). - Embed the XML into the PDF/A-3 with MergeXMLIntoPDF . - Sign with SignPDFRemote last . The signature is appended as an incremental update; the content and the embedded XML remain unchanged. Any later change to the PDF invalidates the signature. - In your tests, check the signed PDF with a PDF/A checker (e.g. veraPDF) and an e-invoice validator. B-LT adds a /DSS dictionary, B-LTA a document timestamp – both are permitted under PAdES. ### Error handling If the function returns False (or Nothing), the reason is in LastError. The password never appears in error messages. LastErrorMeaning HTTP 401 … invalid_credentialsUser name or password wrong, or password sign-in is not enabled for the tenant. HTTP 400 … pdf_encrypted_unsupportedThe PDF is encrypted – decrypt it first. HTTP 429 … (Retry-After: 30 s)Too many calls in a short time (limit: 30 per minute); try again after the time given – RemoteSigner.MaxRetries does this automatically. service delivered B-T, below the minimum B-LTOnly with RemoteSigner: the service could not reach the minimum level (e.g. validation data not available); no file was written. HTTP 301/302 … (redirect not followed)The server URL redirects. For security reasons the SDK does not follow redirects – enter the final https address. PDF larger than 10 MiBLimit of the signing service; the SDK checks it before sending. ServerURL must start with https://Unencrypted connections are not supported. License ProblemNo valid SDK licence set. ### Without programming: ZUGFeRD GUI, PDF Viewer and zugcmd The same remote signing is built into the [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (tab Sign PDF) and the [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (Tools > Sign PDF / ZUGFeRD PDF) from version 11.0.0.2. Enter server URL, user, password and signature level once under signature settings; test connection checks the credentials with a test PDF; during signing a progress window shows that the service is working. From version 11.0.0.3 the command-line tool [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) also signs remotely (-remoteurl, -remoteuser, -remotepw, -level) – ideal for batch processing. ### Legal framework The CodeB Remote Signature Service creates advanced electronic signatures (AdES) within the meaning of the eIDAS Regulation, not qualified signatures (QES). Qualified signatures (QES) are only created with a qualified signature card such as the Maltese eID or the D-Trust Card 5.1 – in the CodeB Wallet via NFC on the phone. An electronic signature is not required for e-invoices in Germany; it does, however, provide verifiable proof of the authenticity and integrity of the document. Whether a validator displays the signature as "trusted" depends on whether it trusts the issuing certificate. ### Technical background The function uses the endpoint signatures/signDocBasic of the [CSC v2 interface](https://phone.codeb.io/csc-v2-api.html) (Cloud Signature Consortium): an HTTPS POST with basic authentication, the PDF in the request, the signed PDF in the response. More about the service: [Remote signatures at CodeB](https://phone.codeb.io/digital-signatures-cookbook.html). ### Frequently asked questions #### How do I sign a PDF via an API without a local certificate? With SignPDFRemote of the Aloaha ZUGFeRD SDK: the function sends the PDF via HTTPS to the CodeB Remote Signature Service and saves the returned PAdES-signed PDF. A certificate or smartcard on the computer is not needed. #### Does a ZUGFeRD invoice remain valid after signing? Yes, if the XML is embedded first and the PDF is signed afterwards. The signature is appended incrementally; the content and the embedded invoice data remain unchanged. #### Which signature level should I choose? B-LTA (default) for archiving, otherwise at least B-T with a timestamp. The level actually produced is in the parameter EffectiveLevel after the call. #### What does the CodeB EUID Wallet have to do with ZUGFeRD? The CodeB Remote Signature Service used by SignPDFRemote is part of the CodeB EUID Wallet software. The EUID Wallet is therefore now also used for ZUGFeRD: the SDK, ZUGFeRD GUI, PDF Viewer and zugcmd sign e-invoices via its signing service. #### What is the CodeB Wallet? The app for the CodeB EUID Wallet: a wallet for the European Digital Identity (EUDI) under eIDAS 2.0 for Android phones. It stores identity data, the mobile driving licence and a membership card, checks IDs and signs PDFs. It is not certified; access is by invitation. #### Do I need the CodeB Wallet to sign invoices with the SDK? No. SignPDFRemote, the ZUGFeRD GUI, the PDF Viewer and zugcmd use the EUID Wallet's signing service directly, server to server. The app is intended for signing on the phone. #### Can I use phone.codeb.io in production? No. https://phone.codeb.io is only CodeB's test server and is not intended for production environments. For production, enter the URL of your own CodeB server. #### Is this a qualified electronic signature? No. The service, and therefore SignPDFRemote, creates advanced electronic signatures (AdES) under eIDAS. A qualified signature (QES) is created with a qualified signature card such as the Maltese eID or the D-Trust Card 5.1, for example in the CodeB Wallet. No signature is required for e-invoices in Germany. #### Can I call SignPDFRemote from VBA or VB6? Yes. The function is part of the COM interface iXML and available via CreateObject("Aloaha_ZUGFeRD.XML"); re-register the type library after the update. --- ## zugcmd – the command-line tool for ZUGFeRD and XRechnung URL: https://www.zugferdpro.com/en/zugcmd-command-line-tool/ Date: 2026-10-12 zugcmd.exe is the command-line tool of the Aloaha ZUGFeRD SDK. With it you create and process electronic invoices according to EN 16931 (ZUGFeRD, Factur-X, XRechnung) without writing code: from batch files, scheduled tasks, scripts, VBA/Access or directly from SQL Server. Every call returns an exit code, so zugcmd is easy to integrate into existing workflows. ### What zugcmd can do - Create ZUGFeRD from CSV: seller, buyer, line items, totals and allowances/charges come from simple CSV files; the result is the ZUGFeRD/XRechnung XML and, if required, the finished ZUGFeRD PDF/A-3. - Embed XML into a PDF: an existing ZUGFeRD/XRechnung XML is embedded into your invoice PDF (PDF/A-3). - PDF from XML via a Word template: without an existing PDF, zugcmd creates the invoice from a DOCX template. - Export e-invoices to CSV: a ZUGFeRD/XRechnung XML or a ZUGFeRD PDF is split back into the CSV files – e.g. for importing into your accounting system. - DOCX visualisation: a readable Word document is created from the XML. - ASCII/DAT files: invoice data in SAP/inconso format ("SATZART") is converted directly to ZUGFeRD. - Signing (new in 11.0.0.3): sign existing PDFs or the ZUGFeRD invoice just created – with a local certificate or via the CodeB remote signature (PAdES) of the CodeB EUID Wallet, even in a single call. Internally, zugcmd uses the same functions as your own code, such as [ImportCSV](https://www.zugferdpro.com/api/importcsv/), [MergeXMLIntoPDF](https://www.zugferdpro.com/api/mergexmlintopdf/), [CreateDocFromXML](https://www.zugferdpro.com/api/createdocfromxml/) and [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/). ### Download and setup zugcmd is available as [zugcmd.zip](https://www.aloaha.com/download/zugcmd.zip) on the [download page](https://www.zugferdpro.com/tooldownloads/) – with sample CSV files and a detailed readme.txt. Some functions of the included library must be registered in the system once: run zugcmd once with administrator rights (e.g. with a first invoice) or install one of the installers from the [download page](https://www.zugferdpro.com/tooldownloads/). For the licensed functions, pass your licence key with -l; you can get a free trial licence from [info@aloaha.com](mailto:info@aloaha.com). Requirement: zugcmd version 11 and later requires .NET Framework 4.7.2 (already included in Windows 10 from version 1803 and in Windows 11). Versions 10 and older run with the .NET Framework 3.5 runtime. Integration into your own application: how to build the CSV files, start zugcmd from Delphi, VB6 or another language and evaluate the exit code is shown in [Creating e-invoices via CSV and zugcmd from your own application](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) – with tested sample files. ### Parameters Parameters start with - or / (e.g. -x or /x). Put paths containing spaces in quotation marks. #### General ParameterMeaning -l Licence key (required for licensed functions) -d Base/data directory. Bare file names are resolved against this path; files not specified use the default names. -y Separator of the CSV files, e.g. , or ; -c Character set of the input, default utf8 (others: ansi, ascii, unicode, utf7, utf32) -f true|falseOverwrite the output file (default true); with -f false an existing file is kept -silentno console output at all #### Input and output files ParameterMeaningDefault name -x Output XML (ZUGFeRD/XRechnung)OutputXML.xml -o Output PDF (ZUGFeRD PDF/A-3)OutputPDF.pdf -i Input PDF into which the XML is embeddedInputPDF.pdf -a Input in ASCII/DAT format (SAP/inconso "SATZART")– -r Export: read an existing XML or ZUGFeRD PDF and write it to CSV– -v Create a DOCX visualisation of the XML– -w Create the output PDF from the XML via this Word template– #### CSV files (import and export) ParameterContentDefault name -sSeller / invoice issuerSeller.csv -bBuyer / invoice recipientBuyer.csv -pInvoice linesItems.csv -tTotals and amountsTotals.csv -zAllowances and chargesallowances.csv -hDelivery address (Deliver To)deliverto.csv -gShip-from address (Deliver From)deliverfrom.csv #### Signing (from version 11.0.0.3) Remote signing runs via the CodeB Remote Signature Service – part of the CodeB EUID Wallet software, which is now also used for ZUGFeRD. ParameterMeaning -cert Signature with a local certificate (Windows certificate store or smartcard) -pin PIN of the local signing certificate -tsa Time-stamping service (RFC 3161) for the local signature -remoteurl Remote signing: URL of your CodeB server (https only). https://phone.codeb.io is only CodeB's test server and is not intended for production use. -remoteuser User name on the CodeB server -remotepw Password – better via the environment variable ZUGCMD_REMOTE_PASSWORD, so it does not appear on the command line; zugcmd never prints it -level PAdES level B-B, B-T, B-LT or B-LTA (default B-LTA); the level actually produced is printed -minlevel Minimum level (default B-B). If the service delivers less, no signed file is written (exit code 60). On HTTP 429 (limit 30 calls per minute) zugcmd waits and retries up to twice. -reason, -contact, -locationReason, contact and location in the signature (local and remote) With -i alone (and optionally -o) zugcmd signs an existing PDF. Combined with ZUGFeRD creation – embedding XML, CSV, Word template or ASCII – the generated output PDF is signed at the very end, so the embedded XML remains unchanged. If -remoteurl is set, remote signing takes precedence over -cert. If signing fails, no unsigned PDF is left under the target name: zugcmd renames it to .pdf.unsigned (exit code 60 or 1). If a signature was requested but no output PDF was created, zugcmd ends with exit code 62. This way, a follow-up process that only looks for the PDF file can never pass on an unsigned invoice by mistake. The structure of the CSV files is described in the article [Importing CSV files into a ZUGFeRD-compliant XRechnung](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) (German). ### Examples #### 1. Create ZUGFeRD from CSV (XML and PDF) ``` zugcmd.exe -x "OutputXML.xml" -o "OutputPDF.pdf" -i "InputPDF.pdf" ^ -b "Buyer.csv" -s "Seller.csv" -p "Items.csv" -t "Totals.csv" ^ -z "allowances.csv" -y "," -l ``` Short form with a base directory – all files there carry their default names: ``` zugcmd.exe -d "C:\Daten" -y "," -l ``` #### 2. Embed an existing XML into a PDF ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -i "C:\Daten\rechnung.pdf" ^ -o "C:\Daten\zugferd.pdf" -l ``` #### 3. Export ZUGFeRD or XRechnung to CSV ``` zugcmd.exe -d "C:\Daten" -r "xrechnung.xml" -b "Buyer.csv" -s "Seller.csv" ^ -p "Items.csv" -t "Totals.csv" -z "allowances.csv" -y "," -l ``` Instead of the XML, -r also accepts a ZUGFeRD PDF directly. More on this: [Converting ZUGFeRD invoices to CSV](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/) (German). #### 4. ASCII/DAT file (SAP/inconso) to ZUGFeRD ``` zugcmd.exe -a "rechnung.DAT" -i "rechnung.pdf" -o "zugferd.pdf" -f true ^ -l ``` #### 5. DOCX visualisation Add -v "C:\Daten\visualisierung.docx" to any of the calls; zugcmd then writes a readable Word version of the invoice. #### 6. PDF from XML via a Word template ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -w "C:\Daten\Vorlage.docx" ^ -o "C:\Daten\rechnung.pdf" -l ``` The placeholders of the template are explained in the article [Word template and placeholders](https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/) (German). #### 7. From CSV via the Word template to PDF (two steps) CSV import and Word template cannot be combined in one call. First create the XML from the CSV files, then the PDF from the template: ``` zugcmd.exe -d "C:\Daten" -x "zugferd.xml" -b "Buyer.csv" -s "Seller.csv" ^ -p "Items.csv" -t "Totals.csv" -z "allowances.csv" -y "," -l zugcmd.exe -x "C:\Daten\zugferd.xml" -w "C:\Daten\Vorlage.docx" ^ -o "C:\Daten\zugferd.pdf" -l ``` Important for the second step: use full paths and do not point -d at the CSV folder – otherwise the call is treated as a CSV import again and the template is ignored. The output file must not exist yet in this step. In the first step a notice about the missing input PDF (exit code 57/58) may appear; the XML is written anyway. #### 8. Sign an existing PDF via remote signing ``` set ZUGCMD_REMOTE_PASSWORD=YOUR-PASSWORD zugcmd.exe -remoteurl "https://YOUR-CODEB-SERVER" -remoteuser "benutzer@firma.de" ^ -level B-LTA -i "C:\Daten\rechnung_zugferd.pdf" -o "C:\Daten\rechnung_signiert.pdf" ^ -reason "Invoice approval" -l ``` #### 9. Create a ZUGFeRD PDF and sign it in one call ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -i "C:\Daten\basis.pdf" -o "C:\Daten\rechnung_zugferd.pdf" ^ -remoteurl "https://YOUR-CODEB-SERVER" -remoteuser "benutzer@firma.de" -l ``` With -cert "" instead of the -remote… parameters, the output PDF is signed with your local certificate. ### Return values (exit codes) 0 means success, any other value an error. Batch files, VBA or SQL Server can therefore evaluate the result directly. Exit codeMeaning 0Success 1General error or local signature failed 2Not licensed or output file not found 3Word template or input PDF missing 4File name/XML missing 55Output PDF could not be created 56Output PDF already exists 57Input PDF not found 58Input file is not a PDF 59XML could not be created 60Remote signing failed or below -minlevel (reason in the console output) 61Remote signing: -remoteurl (https), -remoteuser or password missing 62Signature requested (-remoteurl or -cert), but no output PDF created 99 / 100No (valid) arguments passed 101ZUGFeRD object could not be created 102ZUGFeRD library not loaded or structure not readable 103 / 105Runtime error during processing 12345Other error during PDF creation An example batch file: ``` zugcmd.exe -d "C:\Daten" -y ";" -silent -l if errorlevel 1 echo ZUGFeRD creation failed, ExitCode %errorlevel% ``` ### More command-line tools - Direct conversion of doc/docx to PDF/A (German) - Command-line printing of Office doc/docx documents (German) - Converting ZUGFeRD XML to Word (DOCX) (German) - All articles on the command-line tools (German) Prefer a user interface? The [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) creates, edits and signs ZUGFeRD files at the click of a mouse. Started without arguments, zugcmd shows a short overview of all parameters. ### Frequently asked questions #### Can I sign ZUGFeRD invoices from the command line? Yes, from zugcmd 11.0.0.3: with -cert using a local certificate, or with -remoteurl, -remoteuser and a password via the CodeB remote signature of the CodeB EUID Wallet (PAdES B-B to B-LTA). Combined with ZUGFeRD creation, the finished PDF is signed at the very end. #### How do I pass the password for remote signing securely? Via the environment variable ZUGCMD_REMOTE_PASSWORD. The password then appears neither in the batch line nor in the process list; zugcmd never prints it either. #### Can I use phone.codeb.io for remote signing? Only for testing. https://phone.codeb.io is CodeB's test server and is not intended for production environments; use -remoteurl to specify the URL of your production CodeB server. #### How can a script tell whether everything worked? By the exit code: 0 means success. For remote signing, 60 stands for a service error and 61 for missing credentials; 62 means a signature was requested but no PDF was created. A PDF whose signature failed is never left under the target name. --- ## Aloaha ZUGFeRD PDF Viewer – view, edit and sign ZUGFeRD invoices URL: https://www.zugferdpro.com/en/zugferd-pdf-viewer/ Date: 2026-10-12 In short: The Aloaha ZUGFeRD PDF Viewer (also Aloaha PDF Editor) is a Windows program for viewing, editing and signing PDF files and hybrid e-invoices. It displays ZUGFeRD and Factur-X invoices as a normal PDF, opens the embedded invoice data in the built-in [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) and signs documents – with a local certificate or, from version 11.0.0.2, also via [CodeB remote signing (PAdES)](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/). ### Features at a glance - View ZUGFeRD: open PDF/A-3 invoices; Document > Show ZUGFeRD Data shows the embedded invoice data in the ZUGFeRD GUI, where you can also edit and save it again. - Create ZUGFeRD: embed invoice XML into a PDF – with all tabs of the ZUGFeRD GUI. - Opens many formats: PDF as well as images (BMP, JPG, GIF, TIFF, PNG, WMF, EMF), RTF, TXT, XML and DOCX; a new document can also be created from the clipboard. - Edit pages: append or insert documents, insert new pages, delete, move and rotate pages, place images and text, insert file attachments. - Share: print, send as an Outlook e-mail, upload, save individual pages as images, copy text or have it read aloud. - Sign: sign PDFs with a visible signature, Save digitally signed , sign finished ZUGFeRD PDFs (new) and sign many files with the PDF Batch Signer. - Portable: the portable version runs without installation, e.g. directly from a USB stick. ### Signing PDFs and ZUGFeRD invoices The viewer offers three ways to sign digitally: MenuPurpose File > Save digitally signedSaves a signed copy of the open PDF under the chosen name – using the method from the signature settings. The original stays unchanged (from 11.0.0.3). Tools > Sign PDF / ZUGFeRD PDF… (new)Signs a finished ZUGFeRD, Factur-X or XRechnung PDF file. The open document is preselected, the target is _signed.pdf. The viewer first checks whether an invoice XML is embedded; the XML stays unchanged when signing. Tools > PDF Batch SignerSigns many PDFs at once. #### Signature settings Under Settings > Signature settings (German interface: Signatur-Einstellungen) you choose the method. The viewer shares these settings with the [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (per Windows user). - Local certificate: certificate from the Windows certificate store or from a smartcard; optionally with a timestamp server (RFC 3161). Without saved settings the viewer signs locally as before. - CodeB remote signing (signing service of the CodeB EUID Wallet software) : server URL of your production CodeB server ( https://phone.codeb.io is only CodeB's test server and not intended for production environments), user name, password and signature level PAdES B-B to B-LTA plus a minimum level (if the service delivers less, nothing is signed) – no local certificate needed. Test connection has a small test PDF signed. During remote signing a progress window shows the elapsed time so that it is clear the editor is working. On request, the password is stored encrypted with Windows (DPAPI). - Reason, location, contact: optional details in the signature. Important for e-invoices: embed the XML first, then sign. A signature is not required for e-invoices in Germany, but it secures authenticity and integrity in a verifiable way. ### Download VariantDownloadNote Portable version[aloahapdfviewer.zip](https://www.aloaha.com/download/aloahapdfviewer.zip)Unzip and start aloahapdfviewer.exe – no installation needed. Windows Installer[aloaha_pdfeditor.zip](https://www.aloaha.com/download/aloaha_pdfeditor.zip)Contains Aloaha_PDF_Editor_Setup.msi for a permanent installation. Requirements: Windows with .NET Framework 4.7.2. For remote signing, an account with the CodeB Remote Signature Service and internet access via HTTPS. If you use the Aloaha PDF Suite, the PDF Editor is already installed. Further features are described on the product page of the Aloaha PDF Editor. ### Licence The PDF Viewer needs no additional licence if an Aloaha product is already licensed on your computer – for example the [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (EUR 199 excl. VAT). You can get a trial licence via info@aloaha.com. ### Video A short demo of the ZUGFeRD PDF Viewer: ### Related tools - Aloaha ZUGFeRD GUI – create, edit and sign ZUGFeRD invoices. - SignPDFRemote – remote signing as an SDK function for your own programs. - zugcmd – ZUGFeRD processing from the command line. - Downloads – all installers of the Aloaha ZUGFeRD SDK. ### Frequently asked questions #### How do I view the XML data of a ZUGFeRD invoice? Open the ZUGFeRD PDF in the Aloaha ZUGFeRD PDF Viewer and choose Document > Show ZUGFeRD Data. The embedded invoice data appears in the ZUGFeRD GUI and can be edited there. #### Can I sign a ZUGFeRD invoice with the viewer? Yes. Via Tools > Sign PDF / ZUGFeRD PDF or File > Save digitally signed – with a local certificate or via CodeB remote signing (PAdES B-B to B-LTA). The embedded XML stays unchanged. #### Do I need a smartcard to sign? No, not with CodeB remote signing: a user name and password with the CodeB Remote Signature Service are enough. Local signing needs a certificate in the Windows certificate store or on a smartcard. #### What does the Aloaha ZUGFeRD PDF Viewer cost? It needs no licence of its own if an Aloaha product is already licensed, e.g. the Aloaha ZUGFeRD GUI for EUR 199 excl. VAT. --- ## À propos de ZUGFeRD Pro – le SDK ZUGFeRD d'Aloaha depuis 2014 URL: https://www.zugferdpro.com/fr/a-propos-de-zugferd-pro/ Date: 2026-10-12 En bref : ZUGFeRD Pro – le SDK Aloaha ZUGFeRD – est une bibliothèque logicielle permettant de créer, lire et traiter des factures électroniques conformes à la norme EN 16931 (ZUGFeRD, XRechnung, Factur-X). Il est édité par Aloaha Limited (Malte, UE). Le SDK est documenté publiquement depuis février 2014 – avant même que le Forum elektronische Rechnung Deutschland (FeRD) ne publie ZUGFeRD 1.0 le 25 juin 2014 – ce qui en fait l'un des premiers SDK ZUGFeRD du marché. Il est maintenu sans interruption depuis plus de 12 ans et prend aujourd'hui en charge la norme actuelle ZUGFeRD 2.5.2 / Factur-X 1.09.2. ### Faits et chiffres CaractéristiqueZUGFeRD Pro ÉditeurAloaha Limited, Malte (UE) – outils et SDK PDF depuis plus de 25 ans Sur le marché depuis2014 (première documentation publique : [22 février 2014](https://www.zugferdpro.com/q-how-do-i-use-the-zugferd-sdk/)) Version actuelle11.0.0.6 ([historique des versions](https://www.zugferdpro.com/tooldownloads/)) NormesZUGFeRD 2.x jusqu'à 2.5.2, Factur-X 1.09.2, XRechnung (CII), EN 16931 ; lecture des factures UBL ProfilsBASIC, EN 16931 (COMFORT), EXTENDED et XRECHNUNG Plateformes.NET (C#, VB.NET), COM pour VB6, VBA/Access et autres langages compatibles COM, ligne de commande ([zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/)), application Windows ([ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/)) ExploitationSur site – les données de facturation ne quittent pas votre entreprise ; aucun cloud nécessaire (seule exception : la signature à distance optionnelle, si vous choisissez de l'utiliser) SignatureEn local avec un certificat, ou via le [CodeB Remote Signature Service](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) – composant du logiciel CodeB EUID Wallet, désormais aussi utilisé pour ZUGFeRD DocumentationAu moins un article pratique pour chaque fonction du SDK liée à la facturation, plus l'[explorateur BT/BG](https://www.zugferdpro.com/bt/) de tous les termes métier de l'EN 16931 EssaiLicence d'essai gratuite et complète via info@aloaha.com ### Étapes clés DateÉvénement Février 2014Premier guide public du SDK Aloaha ZUGFeRD pour .NET – avant la publication de la norme. 25 juin 2014Le FeRD publie ZUGFeRD 1.0 ; le SDK crée et lit des factures ZUGFeRD dès le premier jour. 2014 – 2025Maintenance continue pour ZUGFeRD 2.x, Factur-X et XRechnung, interface COM pour VB6/VBA, interface CSV pour le traitement par lots, lecture des factures UBL. La version 10 est la dernière version majeure basée sur .NET 3.5. 2026Version majeure 11 basée sur .NET Framework 4.7.2 – environ quatre fois plus rapide en mode 64 bits. 11.0.0.1 : référence de bon de livraison par ligne et références conformes aux factures antérieures. 11.0.0.2 : [signature PAdES à distance](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) des PDF ZUGFeRD finalisés via la CodeB EUID Wallet. 11.0.0.3 : signature depuis la ligne de commande (zugcmd), affichage de la progression et nouvelle boîte de dialogue d'information dans la GUI et le PDF Viewer. 11.0.0.6 : pièces jointes plus propres dans les PDF ZUGFeRD (PDF/A), avertissement LastWarning, interface COM de nouveau compatible avec la version 10. 1er septembre 2026ZUGFeRD 2.5.2 / Factur-X 1.09.2 en vigueur – pris en charge par le SDK. ### Pourquoi les entreprises choisissent ZUGFeRD Pro - Expérience : plus de 12 ans de pratique de ZUGFeRD – de la première norme à la version actuelle, sans que les clients aient à changer de produit. - Complet : créer, lire, modifier, intégrer dans un PDF/A-3, extraire d'un PDF, générer un PDF à partir d'un modèle Word et signer – dans une seule bibliothèque. - Compatible : les interfaces COM existantes sont conservées à chaque mise à jour ; les nouvelles fonctions sont ajoutées sans casser les programmes existants. - Sur site : pas de cloud, pas de partage de données – adapté aux secteurs réglementés et aux environnements sans accès Internet. - Assistance : nous vous accompagnons dans l'intégration jusqu'à ce que vos factures passent les validateurs de factures électroniques courants. - Tarifs transparents : licence SDK unique de 1 350 EUR HT par poste de développement – détails sous licences et tarifs . Vente uniquement aux entreprises (B2B). ### Pour commencer - Démarrage rapide : créer une facture ZUGFeRD en VB.NET - Exemples de code pour .NET et COM - L'obligation de facturation électronique en Allemagne - Téléchargements et historique des versions ### Questions fréquentes #### Depuis quand le SDK Aloaha ZUGFeRD existe-t-il ? Depuis 2014. Le premier guide public du SDK date du 22 février 2014 – avant la publication de ZUGFeRD 1.0 le 25 juin 2014. ZUGFeRD Pro compte ainsi parmi les premiers SDK ZUGFeRD du marché ; il est maintenu depuis plus de 12 ans. #### Qui édite ZUGFeRD Pro ? Aloaha Limited, dont le siège est à Malte (UE). Aloaha développe des outils et SDK PDF depuis plus de 25 ans. #### ZUGFeRD Pro prend-il en charge la norme ZUGFeRD actuelle ? Oui. Le SDK prend en charge ZUGFeRD 2.5.2 / Factur-X 1.09.2 (en vigueur depuis le 1er septembre 2026), XRechnung (CII) et les profils de facture BASIC, EN 16931 (COMFORT), EXTENDED et XRECHNUNG. #### ZUGFeRD Pro est-il une solution cloud ? Non. ZUGFeRD Pro fonctionne entièrement sur site, au sein de votre propre application ; les données de facturation ne sont pas transmises à des tiers. Seule exception : la signature à distance optionnelle – si vous l'utilisez, le PDF à signer est envoyé au serveur CodeB que vous avez configuré. #### Comment puis-je essayer ZUGFeRD Pro ? Vous obtenez une licence d'essai gratuite et complète par e-mail à info@aloaha.com ; le SDK est disponible sur la page de téléchargement. --- ## Aloaha ZUGFeRD GUI – créer, lire et signer des factures électroniques sans programmation URL: https://www.zugferdpro.com/fr/aloaha-zugferd-gui/ Date: 2026-10-12 En bref : l'Aloaha ZUGFeRD GUI est un programme Windows qui permet de créer, lire, modifier et signer des factures électroniques aux formats ZUGFeRD, Factur-X et XRechnung sans programmation. Vous saisissez les données de facturation dans des formulaires, les enregistrez au format XML selon l'EN 16931, intégrez le XML dans un PDF/A-3 et signez la facture ZUGFeRD finalisée – avec un certificat local ou via la signature à distance CodeB (PAdES). La GUI repose entièrement sur le [SDK Aloaha ZUGFeRD](https://www.zugferdpro.com/tooldownloads/). Prix : 199 EUR HT. Prix : 199 EUR HT. Vente exclusivement aux entreprises (B2B), pas aux particuliers. Commande par e-mail à [info@aloaha.com](mailto:info@aloaha.com?subject=Licence%20Aloaha%20ZUGFeRD%20GUI). La licence est également valable pour l'[Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/). Une licence d'essai gratuite est également disponible via info@aloaha.com. ### Fonctions en un coup d'œil - Créer une facture électronique : saisir les données de facturation, les adresses, les coordonnées bancaires et les lignes dans des formulaires et les enregistrer en XML ZUGFeRD / XRechnung. - Lire une facture électronique : ouvrir des PDF ZUGFeRD, des PDF Factur-X, des XRechnung (CII) et des factures UBL ; les données apparaissent dans les formulaires et peuvent être modifiées. - Convertir l'UBL : importer des XRechnung UBL et les enregistrer en XRechnung (CII) ou en PDF/A ZUGFeRD. - Intégrer le XML dans un PDF : fusionner un PDF/A existant avec le XML de la facture pour obtenir une facture ZUGFeRD hybride (PDF/A-3). - PDF à partir d'un modèle Word : générer directement une facture ZUGFeRD en PDF/A à partir du XML et d'un modèle DOCX. - Signature (nouveau depuis la 11.0.0.2) : signer numériquement des PDF ZUGFeRD finalisés – en local avec un certificat ou via la signature à distance CodeB (PAdES B-B à B-LTA). - Bilingue : interface en allemand ou en anglais, commutable dans la barre d'état. - Portable ou installée : fonctionne sans installation ou via un programme d'installation Windows. ### Les onglets de la GUI #### Créer le XML (« Create XML ») Vous y saisissez la facture dans quatre sous-onglets : - Données de facturation : numéro de facture, date de facture, type de facture (p. ex. facture 380, avoir 381, facture rectificative 384 ou facture finale 877), date de livraison, référence de paiement, devise, mode de paiement, notes, taux de TVA, catégorie de TVA avec motif d'exonération et totaux (HT, majorations, remises, TVA, TTC, acompte, montant à payer). Charger un XML ou un PDF ouvre une facture électronique existante, Enregistrer le XML enregistre le résultat. Le format numérique allemand (1.000,00) peut être activé ou désactivé. - Adresses : adresse, contact et numéro de TVA du vendeur et de l'acheteur. - Coordonnées bancaires : données de compte du vendeur et de l'acheteur, p. ex. IBAN et BIC pour le virement. - Lignes de facture : lignes avec quantité, unité, désignation, description et prix net ; nouvelles lignes avec Ajouter une ligne , suppression via le menu contextuel. #### Convertir le XML en PDF/A Génère une facture ZUGFeRD finalisée en PDF/A-3 à partir d'un XML ZUGFeRD et d'un modèle DOCX. Vous créez un modèle avec Créer un modèle ; vous pouvez aussi joindre un autre fichier (p. ex. un justificatif de prestation). Avec Signer numériquement le PDF, le résultat est signé dès sa création selon la méthode définie dans les paramètres de signature. Cette fonction nécessite Microsoft Word. #### Fusionner le XML avec le PDF Intègre un XML de facture dans un PDF/A existant et enregistre le résultat sous forme de facture ZUGFeRD hybride. Vous transformez ainsi la facture de votre logiciel de facturation actuel en facture électronique, sans en modifier la mise en page. #### Signer le PDF (nouveau) Signe un fichier PDF ZUGFeRD, Factur-X ou XRechnung finalisé. Vous choisissez le PDF (également par glisser-déposer) ; la GUI vérifie si un XML de facture est intégré et si le PDF contient déjà une signature, et propose _signed.pdf comme fichier cible. Un clic sur Signer le PDF signe avec la méthode configurée ; le XML intégré reste inchangé. Avec la signature à distance, la GUI affiche ensuite le niveau de signature réellement obtenu. ### Paramètres de signature Sous Paramètres > Paramètres de signature, vous définissez la manière dont la GUI signe. Ces paramètres s'appliquent aussi à l'[Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (par utilisateur Windows). ParamètreSignification Certificat localSigne avec un certificat du magasin de certificats Windows ou d'une carte à puce. Vous choisissez le numéro de série via Sélectionner… ; si le champ reste vide, le certificat est choisi au moment de la signature. Serveur d'horodatage (RFC 3161) en option. Signature à distance CodeBSigne via le [CodeB Remote Signature Service](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (composant du logiciel CodeB EUID Wallet) – sans certificat local. Une fenêtre de progression indique que la signature est en cours. Le niveau minimal définit le niveau que le service doit au moins fournir – sinon, rien n'est signé. Données : URL de votre serveur CodeB de production, nom d'utilisateur, mot de passe et niveau de signature PAdES B-B, B-T, B-LT ou B-LTA. Serveur de testhttps://phone.codeb.io est uniquement le serveur de test de CodeB – adapté aux essais, pas aux environnements de production. La GUI vous avertit s'il est saisi. Enregistrer le mot de passeOptionnel. Le mot de passe est alors enregistré chiffré par Windows (DPAPI) pour l'utilisateur connecté ; sans cette case cochée, il n'est valable que jusqu'à la fermeture du programme. Tester la connexionFait signer un petit PDF de test par le service et indique le succès ainsi que le niveau de signature fourni – rien n'est enregistré. Motif, lieu, contactInformations optionnelles inscrites dans la signature. Sans paramètres enregistrés, la GUI signe comme auparavant avec un certificat local. ### Une facture ZUGFeRD signée en trois étapes - Créer le XML : dans l'onglet Créer le XML , saisir la facture et l'enregistrer en XML (ou charger une facture existante). - Intégrer le XML : dans l'onglet Fusionner le XML avec le PDF , intégrer le XML dans le PDF/A – ou, dans l'onglet Convertir le XML en PDF/A , générer directement un PDF avec un modèle Word. - Signer : dans l'onglet Signer le PDF , choisir le PDF ZUGFeRD finalisé et le signer. La signature intervient toujours en dernier, afin que le XML intégré reste inchangé. L'interface de la GUI est en allemand ou en anglais ; les noms d'onglets et de boutons ci-dessus sont des traductions descriptives. ### Téléchargement et installation VarianteTéléchargementRemarque Version portable[Aloaha_ZUGFeRD_GUI_bin.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip)Décompresser et lancer – aucune installation nécessaire. Au premier lancement, exécuter en tant qu'administrateur. Programme d'installation Windows[aloaha_zugferdgui.zip](https://www.aloaha.com/download/aloaha_zugferdgui.zip)Installation permanente ; démarre plus vite que la version portable. Prérequis : Windows avec .NET Framework 4.7.2 (inclus dans Windows 10 à partir de la version 1803 et dans Windows 11). Pour Convertir le XML en PDF/A, également Microsoft Word. Pour la signature à distance, un compte auprès du CodeB Remote Signature Service et un accès Internet en HTTPS. La GUI est également intégrée à l'[Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (Document > Show ZUGFeRD Data). ### Vidéo La signature à distance de la GUI passe par le service de signature de la CodeB Identity Wallet (EUID Wallet). Voici à quoi ressemble la wallet : Autres vidéos : [vidéos de l'Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui-videos/). ### Pour les développeurs Tout ce que fait la GUI est également disponible sous forme d'API du [SDK Aloaha ZUGFeRD](https://www.zugferdpro.com/tooldownloads/) pour .NET et COM (VB6, VBA, Delphi) – par exemple [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/) pour la signature à distance. Pour les clients du SDK, nous fournissons les sources de la GUI sur demande. Pour le traitement par lots en ligne de commande, il existe [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/). ### Questions fréquentes #### Puis-je créer une XRechnung sans programmation avec l'Aloaha ZUGFeRD GUI ? Oui. Vous saisissez les données de facturation dans des formulaires et les enregistrez en XML selon l'EN 16931 ; la GUI repose sur le SDK Aloaha ZUGFeRD et génère des données ZUGFeRD, Factur-X et XRechnung. #### Comment signer une facture ZUGFeRD finalisée avec la GUI ? Dans l'onglet « Signer le PDF », choisissez le PDF ZUGFeRD finalisé et cliquez sur « Signer le PDF ». La signature utilise la méthode définie dans Paramètres > Paramètres de signature : certificat local ou signature à distance CodeB (PAdES). Le XML intégré reste inchangé. #### Ai-je besoin de mon propre certificat pour signer ? Pas avec la signature à distance CodeB : un nom d'utilisateur et un mot de passe auprès du CodeB Remote Signature Service suffisent. Pour la signature locale, il faut un certificat avec clé privée dans le magasin de certificats Windows ou sur une carte à puce. #### La GUI peut-elle lire des factures UBL ? Oui. Les factures UBL sont importées et peuvent être enregistrées en XRechnung (CII) ou en PDF/A ZUGFeRD. #### Combien coûte l'Aloaha ZUGFeRD GUI ? 199 EUR HT, vente uniquement aux entreprises. La licence est également valable pour l'Aloaha ZUGFeRD PDF Viewer ; une licence d'essai est disponible gratuitement via info@aloaha.com. --- ## Signer à distance des PDF et des factures ZUGFeRD (PAdES) avec SignPDFRemote URL: https://www.zugferdpro.com/fr/signer-un-pdf-a-distance-signpdfremote/ Date: 2026-10-12 En bref : avec [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/), le SDK Aloaha ZUGFeRD (à partir de la version 11.0.0.2) signe un PDF – y compris une facture hybride ZUGFeRD/Factur-X – via le CodeB Remote Signature Service, qui fait partie du logiciel CodeB EUID Wallet. Le SDK envoie le PDF au service en HTTPS et le reçoit en retour avec une signature PAdES (niveau B-B à B-LTA). Aucun certificat local, carte à puce ou lecteur de carte n'est nécessaire ; la signature fonctionne aussi sans surveillance dans des traitements par lots et depuis VB6/VBA via COM. ### Quand signer à distance ? - Serveurs et traitements par lots : les factures sont créées et signées automatiquement, sans qu'un certificat ou une carte doive être installé sur le serveur. - Gestion centralisée des clés : la clé de signature est détenue par le service de signature, et non sur chaque poste de travail. - Vérifiabilité à long terme : avec le niveau B-LTA, le PDF contient des horodatages et des données de validation pour une vérification ultérieure. ### CodeB EUID Wallet – désormais aussi pour ZUGFeRD Le CodeB Remote Signature Service fait partie du logiciel CodeB EUID Wallet. L'EUID Wallet est donc désormais aussi utilisée pour ZUGFeRD : le SDK Aloaha ZUGFeRD (SignPDFRemote), la [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/), le [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) et l'outil en ligne de commande [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) signent les factures électroniques directement via le service de signature de l'EUID Wallet – sans certificat ni carte à puce sur votre propre ordinateur. Le logiciel comprend la [CodeB Wallet](https://www.zugferdpro.com/codeb-wallet/) – un portefeuille EUDI selon eIDAS 2.0 pour téléphones Android : données d'identité (PID), permis de conduire mobile, contrôle d'identité et signature de PDF sur le téléphone, avancée (AdES) via le service de signature ou qualifiée (QES) avec l'eID maltaise ou une carte D-Trust par NFC. Toutes les fonctions, la vidéo et l'accès : [CodeB Wallet – le portefeuille d'identité européen d'Aloaha](https://www.zugferdpro.com/codeb-wallet/) et [myeuid.app](https://myeuid.app/en/). Vous n'avez pas besoin de l'application pour signer des factures avec le SDK : SignPDFRemote, la ZUGFeRD GUI, le PDF Viewer et zugcmd s'adressent directement au service de signature, de serveur à serveur. ### Prérequis - SDK Aloaha ZUGFeRD à partir de la version 11.0.0.2 avec une licence valide. - Un compte utilisateur sur un serveur CodeB de production (Remote Signature Service de la CodeB EUID Wallet) ; pour l'appel de serveur à serveur, la connexion par nom d'utilisateur et mot de passe doit être activée pour le locataire. Important : https://phone.codeb.io est uniquement le serveur de test de CodeB. Il convient pour des essais mais ne doit pas être utilisé en production. Pour la production, il vous faut votre propre serveur ou locataire CodeB – contactez-nous : info@aloaha.com. Les exemples utilisent donc l'espace réservé https://VOTRE-SERVEUR-CODEB. - Un accès Internet en HTTPS depuis l'ordinateur appelant vers le service de signature. - Le PDF fait au maximum 10 Mio et n'est pas chiffré. ### VB.NET ``` Dim LicenseKey As String = "VOTRE-CLE-DE-LICENCE" Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' Arguments : PDF d'entrée, sortie ("" = remplacer l'entrée), votre serveur CodeB, utilisateur, mot de passe, ' niveau PAdES, motif, lieu, contact, écraser, licence, niveau effectif (retour) Dim level As String = "" If alo.SignPDFRemote("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf", _ "https://VOTRE-SERVEUR-CODEB", "benutzer@firma.de", "VOTRE-MOT-DE-PASSE", "B-LTA", _ "Validation de la facture", "Musterstadt", "", True, LicenseKey, level) Then Console.WriteLine("Signé, niveau : " & level) Else Console.WriteLine("Erreur : " & alo.LastError) End If ``` ### C# ``` var alo = new Aloaha_ZUGFeRD.XML(); alo.Licensekey = licenseKey; string level = ""; bool ok = alo.SignPDFRemote(@"C:\Rechnungen\RE-2026-0001_zugferd.pdf", @"C:\Rechnungen\RE-2026-0001_signiert.pdf", "https://VOTRE-SERVEUR-CODEB", "benutzer@firma.de", "VOTRE-MOT-DE-PASSE", "B-T", "Validation de la facture", "Musterstadt", "", true, licenseKey, ref level); Console.WriteLine(ok ? "Signé, niveau : " + level : "Erreur : " + alo.LastError); ``` ### VBA / VB6 (COM) ``` Dim alo As Object, level As String Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "VOTRE-CLE-DE-LICENCE" If alo.SignPDFRemote("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf", _ "https://VOTRE-SERVEUR-CODEB", "benutzer@firma.de", "VOTRE-MOT-DE-PASSE", "B-LTA", _ "Validation de la facture", "Musterstadt", "", True, "", level) Then Debug.Print "Signé, niveau : " & level Else Debug.Print "Erreur : " & alo.LastError End If ``` Après la mise à jour vers 11.0.0.2, réenregistrez la bibliothèque de types afin que les clients COM voient la nouvelle fonction. ### Sans fichiers : SignPDFRemoteBytes Pour les services web et les applications de base de données, [SignPDFRemoteBytes](https://www.zugferdpro.com/api/signpdfremotebytes/) travaille directement avec des octets et renvoie le PDF signé (ou Nothing en cas d'erreur) : ``` Dim signiert() As Byte = alo.SignPDFRemoteBytes(pdfBytes, "https://VOTRE-SERVEUR-CODEB", "benutzer@firma.de", "VOTRE-MOT-DE-PASSE", "B-T") If signiert Is Nothing Then Console.WriteLine(alo.LastError) ``` ### Avec un niveau minimal : la classe RemoteSigner (à partir de 11.0.0.3) Pour les serveurs et le traitement par lots, la version 11.0.0.3 et les suivantes fournissent une classe COM distincte Aloaha_ZUGFeRD.RemoteSigner. Elle signe comme SignPDFRemote (cachet d'entreprise via signDocBasic), mais offre en plus : - Niveau minimal ( MinLevel , par défaut B-B ) : si le service fournit un niveau inférieur, la signature est considérée comme échouée et aucun fichier n'est écrit. - Motif d'une rétrogradation ( LevelNote ) ainsi que les niveaux demandé et produit ( RequestedLevel , EffectiveLevel ). - Nouvel essai en cas de limitation de débit ( MaxRetries ) : en cas de HTTP 429, la classe attend le délai indiqué par le service et réessaie. - Paramètres depuis le registre ( LoadSettings ) pour les serveurs : HKLM\Software\Aloaha\ZUGFeRD\CSC avec BaseURL , User , PasswordProtected (chiffré pour la machine avec Windows DPAPI via ProtectPassword ), Level , MinLevel , Reason , Location , Contact , TimeoutSeconds , MaxRetries . ``` Dim rs As New Aloaha_ZUGFeRD.RemoteSigner rs.LicenseKey = "VOTRE-CLE-DE-LICENCE" rs.ServerURL = "https://VOTRE-SERVEUR-CODEB" rs.UserName = "rechnungssiegel" rs.Password = "VOTRE-MOT-DE-PASSE" rs.Level = "B-LTA" rs.MinLevel = "B-T" ' pas de signature sans horodatage rs.Reason = "Validation de la facture" rs.MaxRetries = 2 ' traitement par lots : en cas de HTTP 429, attendre et réessayer If rs.SealFile("C:\Rechnungen\RE-2026-0001_zugferd.pdf", "C:\Rechnungen\RE-2026-0001_signiert.pdf") Then Console.WriteLine("Signé, niveau : " & rs.EffectiveLevel & " " & rs.LevelNote) Else Console.WriteLine("Erreur : " & rs.LastError) End If ``` Depuis VBA/VB6 : Set rs = CreateObject("Aloaha_ZUGFeRD.RemoteSigner"), puis les mêmes propriétés. La classe ne suit pas les redirections – le nom d'utilisateur et le mot de passe ne sont envoyés qu'à l'URL de serveur configurée. Le mot de passe n'est jamais affiché. ### Niveaux de signature (PAdES) NiveauContenuUsage B-BSignature de base (CMS avec certificat de signature)protection simple de l'intégrité B-Tplus un horodatage d'un service d'horodatage (RFC 3161)heure de signature prouvable B-LTplus des données de validation (certificats, OCSP) dans le PDFvalidation sans requête en ligne B-LTA (par défaut)plus un horodatage d'archivagearchivage à long terme Si le service ne peut pas produire momentanément un niveau supérieur (par ex. parce que le service d'horodatage est injoignable), il signe avec le niveau immédiatement inférieur au lieu d'interrompre. Le niveau effectivement produit est renvoyé dans le paramètre EffectiveLevel (par ex. AdES-B-T). Vérifiez-le toujours par rapport à votre exigence minimale – le plus simplement avec RemoteSigner.MinLevel, le réglage niveau minimal de la GUI ou zugcmd -minlevel. ### Signer une facture ZUGFeRD : l'ordre des étapes - Créer les données de facture et les enregistrer en XML ( démarrage rapide VB.NET ). - Intégrer le XML dans le PDF/A-3 avec MergeXMLIntoPDF . - Signer avec SignPDFRemote en dernier . La signature est ajoutée sous forme de mise à jour incrémentielle ; le contenu et le XML intégré restent inchangés. Toute modification ultérieure du PDF invalide la signature. - Lors de vos tests, vérifiez le PDF signé avec un contrôleur PDF/A (par ex. veraPDF) et un validateur de factures électroniques. B-LT ajoute un dictionnaire /DSS , B-LTA un horodatage de document – les deux sont autorisés par PAdES. ### Gestion des erreurs Si la fonction renvoie False (ou Nothing), la raison se trouve dans LastError. Le mot de passe n'apparaît jamais dans les messages d'erreur. LastErrorSignification HTTP 401 … invalid_credentialsNom d'utilisateur ou mot de passe erroné, ou connexion par mot de passe non activée pour le locataire. HTTP 400 … pdf_encrypted_unsupportedLe PDF est chiffré – déchiffrez-le d'abord. HTTP 429 … (Retry-After: 30 s)Trop d'appels en peu de temps (limite : 30 par minute) ; réessayez après le délai indiqué – RemoteSigner.MaxRetries le fait automatiquement. service delivered B-T, below the minimum B-LTUniquement avec RemoteSigner : le service n'a pas pu atteindre le niveau minimal (par ex. données de validation indisponibles) ; aucun fichier n'a été écrit. HTTP 301/302 … (redirect not followed)L'URL du serveur redirige. Pour des raisons de sécurité, le SDK ne suit pas les redirections – indiquez l'adresse https finale. PDF larger than 10 MiBLimite du service de signature ; le SDK la vérifie avant l'envoi. ServerURL must start with https://Les connexions non chiffrées ne sont pas prises en charge. License ProblemAucune licence SDK valide définie. ### Sans programmation : ZUGFeRD GUI, PDF Viewer et zugcmd La même signature à distance est intégrée à l'[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (onglet Sign PDF) et à l'[Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) (menu Tools > Sign PDF / ZUGFeRD PDF) à partir de la version 11.0.0.2. Saisissez une fois l'URL du serveur, l'utilisateur, le mot de passe et le niveau de signature dans les paramètres de signature ; tester la connexion vérifie les identifiants avec un PDF de test ; pendant la signature, une fenêtre de progression indique que le service travaille. À partir de la version 11.0.0.3, l'outil en ligne de commande [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) signe aussi à distance (-remoteurl, -remoteuser, -remotepw, -level) – idéal pour le traitement par lots. ### Cadre juridique Le CodeB Remote Signature Service crée des signatures électroniques avancées (AdES) au sens du règlement eIDAS, et non des signatures qualifiées (QES). Les signatures qualifiées (QES) ne sont créées qu'avec une carte de signature qualifiée comme l'eID maltaise ou la D-Trust Card 5.1 – dans la CodeB Wallet par NFC sur le téléphone. Une signature électronique n'est pas exigée pour les factures électroniques en Allemagne ; elle apporte toutefois une preuve vérifiable de l'authenticité et de l'intégrité du document. Le fait qu'un validateur affiche la signature comme « de confiance » dépend de sa confiance dans le certificat émetteur. ### Contexte technique La fonction utilise le point de terminaison signatures/signDocBasic de l'[interface CSC v2](https://phone.codeb.io/csc-v2-api.html) (Cloud Signature Consortium) : un POST HTTPS avec authentification basique, le PDF dans la requête, le PDF signé dans la réponse. En savoir plus sur le service : [Signatures à distance chez CodeB](https://phone.codeb.io/digital-signatures-cookbook.html). ### Questions fréquentes #### Comment signer un PDF via une API sans certificat local ? Avec SignPDFRemote du SDK Aloaha ZUGFeRD : la fonction envoie le PDF en HTTPS au CodeB Remote Signature Service et enregistre le PDF signé PAdES renvoyé. Aucun certificat ni carte à puce n'est nécessaire sur l'ordinateur. #### Une facture ZUGFeRD reste-t-elle valide après la signature ? Oui, si le XML est intégré d'abord et le PDF signé ensuite. La signature est ajoutée de manière incrémentielle ; le contenu et les données de facture intégrées restent inchangés. #### Quel niveau de signature choisir ? B-LTA (par défaut) pour l'archivage, sinon au moins B-T avec horodatage. Le niveau effectivement produit figure dans le paramètre EffectiveLevel après l'appel. #### Quel est le lien entre la CodeB EUID Wallet et ZUGFeRD ? Le CodeB Remote Signature Service utilisé par SignPDFRemote fait partie du logiciel CodeB EUID Wallet. L'EUID Wallet est donc désormais aussi utilisée pour ZUGFeRD : le SDK, la ZUGFeRD GUI, le PDF Viewer et zugcmd signent les factures électroniques via son service de signature. #### Qu'est-ce que la CodeB Wallet ? L'application de la CodeB EUID Wallet : un portefeuille pour l'identité numérique européenne (EUDI) selon eIDAS 2.0 pour téléphones Android. Elle stocke les données d'identité, le permis de conduire mobile et une carte de membre, contrôle des pièces d'identité et signe des PDF. Elle n'est pas certifiée ; l'accès se fait sur invitation. #### Ai-je besoin de la CodeB Wallet pour signer des factures avec le SDK ? Non. SignPDFRemote, la ZUGFeRD GUI, le PDF Viewer et zugcmd utilisent directement le service de signature de l'EUID Wallet, de serveur à serveur. L'application est destinée à la signature sur le téléphone. #### Puis-je utiliser phone.codeb.io en production ? Non. https://phone.codeb.io est uniquement le serveur de test de CodeB et n'est pas destiné aux environnements de production. Pour la production, indiquez l'URL de votre propre serveur CodeB. #### S'agit-il d'une signature électronique qualifiée ? Non. Le service, et donc SignPDFRemote, crée des signatures électroniques avancées (AdES) au sens d'eIDAS. Une signature qualifiée (QES) est créée avec une carte de signature qualifiée comme l'eID maltaise ou la D-Trust Card 5.1, par exemple dans la CodeB Wallet. Aucune signature n'est exigée pour les factures électroniques en Allemagne. #### Puis-je appeler SignPDFRemote depuis VBA ou VB6 ? Oui. La fonction fait partie de l'interface COM iXML et est disponible via CreateObject("Aloaha_ZUGFeRD.XML") ; réenregistrez la bibliothèque de types après la mise à jour. --- ## Aloaha ZUGFeRD PDF Viewer – afficher, modifier et signer des factures ZUGFeRD URL: https://www.zugferdpro.com/fr/visionneuse-pdf-zugferd/ Date: 2026-10-12 En bref : l’Aloaha ZUGFeRD PDF Viewer (également appelé Aloaha PDF Editor) est un programme Windows permettant d’afficher, de modifier et de signer des fichiers PDF et des factures électroniques hybrides. Il affiche les factures ZUGFeRD et Factur-X comme un PDF habituel, ouvre les données de facture intégrées dans l’[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) incluse et signe les documents – avec un certificat local ou, à partir de la version 11.0.0.2, également via la [signature à distance CodeB (PAdES)](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/). ### Fonctions en un coup d’œil - Afficher ZUGFeRD : ouvrir des factures PDF/A-3 ; Document > Show ZUGFeRD Data affiche les données de facture intégrées dans la ZUGFeRD GUI, où vous pouvez également les modifier et les enregistrer à nouveau. - Créer ZUGFeRD : intégrer un XML de facture dans un PDF – avec tous les onglets de la ZUGFeRD GUI. - Ouverture de nombreux formats : PDF ainsi qu’images (BMP, JPG, GIF, TIFF, PNG, WMF, EMF), RTF, TXT, XML et DOCX ; un nouveau document peut aussi être créé à partir du presse-papiers. - Modifier les pages : ajouter ou insérer des documents, insérer de nouvelles pages, supprimer, déplacer et faire pivoter des pages, placer des images et du texte, insérer des pièces jointes. - Partager : imprimer, envoyer par e-mail Outlook, téléverser, enregistrer des pages individuelles en image, copier le texte ou le faire lire à voix haute. - Signer : signer des PDF avec une signature visible, Save digitally signed , signer des PDF ZUGFeRD terminés (nouveau) et signer de nombreux fichiers avec le PDF Batch Signer. - Portable : la version portable fonctionne sans installation, par exemple directement depuis une clé USB. ### Signer des PDF et des factures ZUGFeRD La visionneuse propose trois façons de signer numériquement : MenuUsage File > Save digitally signedEnregistre une copie signée du PDF ouvert sous le nom choisi – avec la méthode définie dans les paramètres de signature. L’original reste inchangé (à partir de 11.0.0.3). Tools > PDF / ZUGFeRD-PDF signieren… (nouveau)Signe un fichier PDF ZUGFeRD, Factur-X ou XRechnung terminé. Le document ouvert est présélectionné, la cible est _signed.pdf. La visionneuse vérifie d’abord qu’un XML de facture est intégré ; le XML reste inchangé lors de la signature. Tools > PDF Batch SignerSigne de nombreux PDF en une seule fois. #### Paramètres de signature Sous Settings > Signature settings (interface allemande : Signatur-Einstellungen), vous choisissez la méthode. La visionneuse partage ces paramètres avec l’[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (par utilisateur Windows). - Certificat local : certificat du magasin de certificats Windows ou d’une carte à puce ; en option avec un serveur d’horodatage (RFC 3161). Sans paramètres enregistrés, la visionneuse signe en local comme auparavant. - Signature à distance CodeB (service de signature du logiciel CodeB EUID Wallet) : URL de votre serveur CodeB de production ( https://phone.codeb.io n’est que le serveur de test de CodeB et n’est pas destiné aux environnements de production), nom d’utilisateur, mot de passe et niveau de signature PAdES B-B à B-LTA, ainsi qu’un niveau minimal (si le service fournit moins, rien n’est signé) – aucun certificat local n’est nécessaire. Il s’agit d’une signature électronique avancée (AdES). Tester la connexion fait signer un petit PDF de test. Pendant la signature à distance, une fenêtre de progression affiche le temps écoulé, afin qu’il soit clair que l’éditeur travaille. Sur demande, le mot de passe est enregistré chiffré par Windows (DPAPI). - Motif, lieu, contact : informations facultatives dans la signature. Important pour les factures électroniques : intégrez d’abord le XML, puis signez. Une signature n’est pas obligatoire pour les factures électroniques en Allemagne, mais elle garantit de manière vérifiable l’authenticité et l’intégrité. ### Téléchargement VarianteTéléchargementRemarque Version portable[aloahapdfviewer.zip](https://www.aloaha.com/download/aloahapdfviewer.zip)Décompressez et lancez aloahapdfviewer.exe – aucune installation nécessaire. Programme d’installation Windows[aloaha_pdfeditor.zip](https://www.aloaha.com/download/aloaha_pdfeditor.zip)Contient Aloaha_PDF_Editor_Setup.msi pour une installation permanente. Prérequis : Windows avec .NET Framework 4.7.2. Pour la signature à distance, un compte auprès du CodeB Remote Signature Service et un accès Internet en HTTPS. Si vous utilisez l’Aloaha PDF Suite, le PDF Editor est déjà installé. D’autres fonctions sont décrites sur la page produit de l’Aloaha PDF Editor. ### Licence La visionneuse PDF ne nécessite aucune licence supplémentaire si un produit Aloaha est déjà sous licence sur votre ordinateur – par exemple l’[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (199 euros HT). Vous obtenez une licence d’essai via info@aloaha.com. ### Vidéo Une courte démonstration de la visionneuse PDF ZUGFeRD : ### Outils associés - Aloaha ZUGFeRD GUI – créer, modifier et signer des factures ZUGFeRD. - SignPDFRemote – la signature à distance en tant que fonction du SDK pour vos propres programmes. - zugcmd – traitement ZUGFeRD en ligne de commande. - Téléchargements – tous les programmes d’installation du SDK Aloaha ZUGFeRD. ### Questions fréquentes #### Comment afficher les données XML d’une facture ZUGFeRD ? Ouvrez le PDF ZUGFeRD dans l’Aloaha ZUGFeRD PDF Viewer et choisissez Document > Show ZUGFeRD Data. Les données de facture intégrées apparaissent dans la ZUGFeRD GUI et peuvent y être modifiées. #### Puis-je signer une facture ZUGFeRD avec la visionneuse ? Oui. Via Tools > PDF / ZUGFeRD-PDF signieren ou File > Save digitally signed – avec un certificat local ou via la signature à distance CodeB (PAdES B-B à B-LTA, signature électronique avancée). Le XML intégré reste inchangé. #### Ai-je besoin d’une carte à puce pour signer ? Non, pas avec la signature à distance CodeB : un nom d’utilisateur et un mot de passe auprès du CodeB Remote Signature Service suffisent. La signature locale nécessite un certificat dans le magasin de certificats Windows ou sur une carte à puce. #### Combien coûte l’Aloaha ZUGFeRD PDF Viewer ? Il ne nécessite pas de licence propre si un produit Aloaha est déjà sous licence, par exemple l’Aloaha ZUGFeRD GUI pour 199 euros HT. --- ## zugcmd – l'outil en ligne de commande pour ZUGFeRD et XRechnung URL: https://www.zugferdpro.com/fr/zugcmd-outil-en-ligne-de-commande/ Date: 2026-10-12 zugcmd.exe est l'outil en ligne de commande du SDK Aloaha ZUGFeRD. Il permet de créer et de traiter des factures électroniques selon EN 16931 (ZUGFeRD, Factur-X, XRechnung) sans écrire de code : depuis des fichiers batch, des tâches planifiées, des scripts, VBA/Access ou directement depuis SQL Server. Chaque appel renvoie un code retour, ce qui facilite l'intégration de zugcmd dans les processus existants. ### Ce que zugcmd sait faire - Créer du ZUGFeRD à partir de CSV : vendeur, acheteur, lignes, totaux et remises/charges proviennent de simples fichiers CSV ; le résultat est le XML ZUGFeRD/XRechnung et, si nécessaire, le PDF/A-3 ZUGFeRD finalisé. - Intégrer un XML dans un PDF : un XML ZUGFeRD/XRechnung existant est intégré dans votre facture PDF (PDF/A-3). - PDF à partir du XML via un modèle Word : sans PDF existant, zugcmd crée la facture à partir d'un modèle DOCX. - Exporter des factures électroniques en CSV : un XML ZUGFeRD/XRechnung ou un PDF ZUGFeRD est redécomposé en fichiers CSV – par ex. pour l'import dans votre comptabilité. - Visualisation DOCX : un document Word lisible est créé à partir du XML. - Fichiers ASCII/DAT : les données de facture au format SAP/inconso (« SATZART ») sont converties directement en ZUGFeRD. - Signature (nouveau en 11.0.0.3) : signer des PDF existants ou la facture ZUGFeRD qui vient d'être créée – avec un certificat local ou via la signature à distance CodeB (PAdES) de la CodeB EUID Wallet, même en un seul appel. En interne, zugcmd utilise les mêmes fonctions que votre propre code, comme [ImportCSV](https://www.zugferdpro.com/api/importcsv/), [MergeXMLIntoPDF](https://www.zugferdpro.com/api/mergexmlintopdf/), [CreateDocFromXML](https://www.zugferdpro.com/api/createdocfromxml/) et [SignPDFRemote](https://www.zugferdpro.com/api/signpdfremote/). ### Téléchargement et mise en place zugcmd est disponible sous forme de [zugcmd.zip](https://www.aloaha.com/download/zugcmd.zip) sur la [page de téléchargement](https://www.zugferdpro.com/tooldownloads/) – avec des fichiers CSV d'exemple et un readme.txt détaillé. Certaines fonctions de la bibliothèque fournie doivent être enregistrées une fois dans le système : exécutez zugcmd une fois avec des droits d'administrateur (par ex. avec une première facture) ou installez l'un des programmes d'installation de la [page de téléchargement](https://www.zugferdpro.com/tooldownloads/). Pour les fonctions sous licence, transmettez votre clé de licence avec -l ; vous obtenez une licence d'essai gratuite auprès de [info@aloaha.com](mailto:info@aloaha.com). Prérequis : zugcmd à partir de la version 11 nécessite le .NET Framework 4.7.2 (déjà inclus dans Windows 10 à partir de la version 1803 et dans Windows 11). Les versions 10 et antérieures fonctionnent avec le runtime .NET Framework 3.5. Intégration dans votre propre application : la construction des fichiers CSV, le lancement de zugcmd depuis Delphi, VB6 ou un autre langage et l'évaluation du code retour sont décrits dans [Créer des factures électroniques par CSV et zugcmd depuis votre application](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) – avec des fichiers d'exemple testés. ### Paramètres Les paramètres commencent par - ou / (par ex. -x ou /x). Mettez entre guillemets les chemins contenant des espaces. #### Général ParamètreSignification -l Clé de licence (obligatoire pour les fonctions sous licence) -d Répertoire de base/de données. Les noms de fichiers seuls sont résolus par rapport à ce chemin ; les fichiers non indiqués utilisent les noms par défaut. -y Séparateur des fichiers CSV, par ex. , ou ; -c Jeu de caractères de l'entrée, par défaut utf8 (autres : ansi, ascii, unicode, utf7, utf32) -f true|falseÉcraser le fichier de sortie (par défaut true) ; avec -f false, un fichier existant est conservé -silentaucune sortie console #### Fichiers d'entrée et de sortie ParamètreSignificationNom par défaut -x XML de sortie (ZUGFeRD/XRechnung)OutputXML.xml -o PDF de sortie (PDF/A-3 ZUGFeRD)OutputPDF.pdf -i PDF d'entrée dans lequel le XML est intégréInputPDF.pdf -a Entrée au format ASCII/DAT (SAP/inconso « SATZART »)– -r Export : lire un XML ou un PDF ZUGFeRD existant et l'écrire en CSV– -v Créer une visualisation DOCX du XML– -w Créer le PDF de sortie à partir du XML via ce modèle Word– #### Fichiers CSV (import et export) ParamètreContenuNom par défaut -sVendeur / émetteur de la factureSeller.csv -bAcheteur / destinataire de la factureBuyer.csv -pLignes de factureItems.csv -tTotaux et montantsTotals.csv -zRemises et chargesallowances.csv -hAdresse de livraison (Deliver To)deliverto.csv -gAdresse d'expédition (Deliver From)deliverfrom.csv #### Signature (à partir de la version 11.0.0.3) La signature à distance passe par le CodeB Remote Signature Service – qui fait partie du logiciel CodeB EUID Wallet, désormais utilisé aussi pour ZUGFeRD. ParamètreSignification -cert Signature avec un certificat local (magasin de certificats Windows ou carte à puce) -pin PIN du certificat de signature local -tsa Service d'horodatage (RFC 3161) pour la signature locale -remoteurl Signature à distance : URL de votre serveur CodeB (https uniquement). https://phone.codeb.io est uniquement le serveur de test de CodeB et n'est pas destiné à la production. -remoteuser Nom d'utilisateur sur le serveur CodeB -remotepw Mot de passe – de préférence via la variable d'environnement ZUGCMD_REMOTE_PASSWORD, afin qu'il n'apparaisse pas sur la ligne de commande ; zugcmd ne l'affiche jamais -level Niveau PAdES B-B, B-T, B-LT ou B-LTA (par défaut B-LTA) ; le niveau effectivement produit est affiché -minlevel Niveau minimal (par défaut B-B). Si le service fournit moins, aucun fichier signé n'est écrit (code retour 60). En cas de HTTP 429 (limite de 30 appels par minute), zugcmd attend et réessaie jusqu'à deux fois. -reason, -contact, -locationMotif, contact et lieu dans la signature (locale et à distance) Avec -i seul (et éventuellement -o), zugcmd signe un PDF existant. Combiné à la création ZUGFeRD – intégration XML, CSV, modèle Word ou ASCII –, le PDF de sortie généré est signé tout à la fin, de sorte que le XML intégré reste inchangé. Si -remoteurl est défini, la signature à distance a priorité sur -cert. Si la signature échoue, aucun PDF non signé ne reste sous le nom cible : zugcmd le renomme en .pdf.unsigned (code retour 60 ou 1). Si une signature a été demandée mais qu'aucun PDF de sortie n'a été créé, zugcmd se termine avec le code retour 62. Ainsi, un processus en aval qui ne cherche que le fichier PDF ne peut jamais transmettre par erreur une facture non signée. La structure des fichiers CSV est décrite dans l'article [Importer des fichiers CSV dans une XRechnung conforme à ZUGFeRD](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) (en allemand). ### Exemples #### 1. Créer du ZUGFeRD à partir de CSV (XML et PDF) ``` zugcmd.exe -x "OutputXML.xml" -o "OutputPDF.pdf" -i "InputPDF.pdf" ^ -b "Buyer.csv" -s "Seller.csv" -p "Items.csv" -t "Totals.csv" ^ -z "allowances.csv" -y "," -l ``` Forme courte avec un répertoire de base – tous les fichiers qui s'y trouvent portent leurs noms par défaut : ``` zugcmd.exe -d "C:\Daten" -y "," -l ``` #### 2. Intégrer un XML existant dans un PDF ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -i "C:\Daten\rechnung.pdf" ^ -o "C:\Daten\zugferd.pdf" -l ``` #### 3. Exporter ZUGFeRD ou XRechnung en CSV ``` zugcmd.exe -d "C:\Daten" -r "xrechnung.xml" -b "Buyer.csv" -s "Seller.csv" ^ -p "Items.csv" -t "Totals.csv" -z "allowances.csv" -y "," -l ``` Au lieu du XML, -r accepte aussi directement un PDF ZUGFeRD. Pour en savoir plus : [Convertir des factures ZUGFeRD en CSV](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/) (en allemand). #### 4. Fichier ASCII/DAT (SAP/inconso) vers ZUGFeRD ``` zugcmd.exe -a "rechnung.DAT" -i "rechnung.pdf" -o "zugferd.pdf" -f true ^ -l ``` #### 5. Visualisation DOCX Ajoutez -v "C:\Daten\visualisierung.docx" à n'importe lequel des appels ; zugcmd écrit alors une version Word lisible de la facture. #### 6. PDF à partir du XML via un modèle Word ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -w "C:\Daten\Vorlage.docx" ^ -o "C:\Daten\rechnung.pdf" -l ``` Les espaces réservés du modèle sont expliqués dans l'article [Modèle Word et espaces réservés](https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/) (en allemand). #### 7. De CSV vers PDF via le modèle Word (en deux étapes) L'import CSV et le modèle Word ne peuvent pas être combinés en un seul appel. Créez d'abord le XML à partir des fichiers CSV, puis le PDF à partir du modèle : ``` zugcmd.exe -d "C:\Daten" -x "zugferd.xml" -b "Buyer.csv" -s "Seller.csv" ^ -p "Items.csv" -t "Totals.csv" -z "allowances.csv" -y "," -l zugcmd.exe -x "C:\Daten\zugferd.xml" -w "C:\Daten\Vorlage.docx" ^ -o "C:\Daten\zugferd.pdf" -l ``` Important pour la deuxième étape : utilisez des chemins complets et ne faites pas pointer -d sur le dossier CSV – sinon l'appel est de nouveau traité comme un import CSV et le modèle est ignoré. Le fichier de sortie ne doit pas encore exister à cette étape. À la première étape, un avis concernant le PDF d'entrée manquant (code retour 57/58) peut apparaître ; le XML est tout de même écrit. #### 8. Signer un PDF existant par signature à distance ``` set ZUGCMD_REMOTE_PASSWORD=VOTRE-MOT-DE-PASSE zugcmd.exe -remoteurl "https://VOTRE-SERVEUR-CODEB" -remoteuser "benutzer@firma.de" ^ -level B-LTA -i "C:\Daten\rechnung_zugferd.pdf" -o "C:\Daten\rechnung_signiert.pdf" ^ -reason "Validation de la facture" -l ``` #### 9. Créer un PDF ZUGFeRD et le signer en un seul appel ``` zugcmd.exe -x "C:\Daten\rechnung.xml" -i "C:\Daten\basis.pdf" -o "C:\Daten\rechnung_zugferd.pdf" ^ -remoteurl "https://VOTRE-SERVEUR-CODEB" -remoteuser "benutzer@firma.de" -l ``` Avec -cert "" à la place des paramètres -remote…, le PDF de sortie est signé avec votre certificat local. ### Valeurs de retour (codes retour) 0 signifie succès, toute autre valeur une erreur. Les fichiers batch, VBA ou SQL Server peuvent donc évaluer directement le résultat. Code retourSignification 0Succès 1Erreur générale ou échec de la signature locale 2Pas de licence ou fichier de sortie introuvable 3Modèle Word ou PDF d'entrée manquant 4Nom de fichier/XML manquant 55Le PDF de sortie n'a pas pu être créé 56Le PDF de sortie existe déjà 57PDF d'entrée introuvable 58Le fichier d'entrée n'est pas un PDF 59Le XML n'a pas pu être créé 60Échec de la signature à distance ou niveau inférieur à -minlevel (raison dans la sortie console) 61Signature à distance : -remoteurl (https), -remoteuser ou mot de passe manquant 62Signature demandée (-remoteurl ou -cert), mais aucun PDF de sortie créé 99 / 100Aucun argument (valide) transmis 101L'objet ZUGFeRD n'a pas pu être créé 102Bibliothèque ZUGFeRD non chargée ou structure illisible 103 / 105Erreur d'exécution pendant le traitement 12345Autre erreur lors de la création du PDF Exemple de fichier batch : ``` zugcmd.exe -d "C:\Daten" -y ";" -silent -l if errorlevel 1 echo Echec de la creation ZUGFeRD, ExitCode %errorlevel% ``` ### Autres outils en ligne de commande - Conversion directe de doc/docx en PDF/A (en allemand) - Impression en ligne de commande de documents Office doc/docx (en allemand) - Convertir un XML ZUGFeRD en Word (DOCX) (en allemand) - Tous les articles sur les outils en ligne de commande (en allemand) Vous préférez une interface graphique ? L'[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) crée, modifie et signe des fichiers ZUGFeRD en quelques clics. Lancé sans arguments, zugcmd affiche un bref aperçu de tous les paramètres. ### Questions fréquentes #### Puis-je signer des factures ZUGFeRD en ligne de commande ? Oui, à partir de zugcmd 11.0.0.3 : avec -cert et un certificat local, ou avec -remoteurl, -remoteuser et un mot de passe via la signature à distance CodeB de la CodeB EUID Wallet (PAdES B-B à B-LTA). Combiné à la création ZUGFeRD, le PDF finalisé est signé tout à la fin. #### Comment transmettre en toute sécurité le mot de passe pour la signature à distance ? Via la variable d'environnement ZUGCMD_REMOTE_PASSWORD. Le mot de passe n'apparaît alors ni dans la ligne batch ni dans la liste des processus ; zugcmd ne l'affiche jamais non plus. #### Puis-je utiliser phone.codeb.io pour la signature à distance ? Uniquement pour des tests. https://phone.codeb.io est le serveur de test de CodeB et n'est pas destiné aux environnements de production ; indiquez avec -remoteurl l'URL de votre serveur CodeB de production. #### Comment un script sait-il si tout a fonctionné ? Grâce au code retour : 0 signifie succès. Pour la signature à distance, 60 correspond à une erreur du service et 61 à des identifiants manquants ; 62 signifie qu'une signature a été demandée mais qu'aucun PDF n'a été créé. Un PDF dont la signature a échoué ne reste jamais sous le nom cible. --- ## ZUGFeRD-Rechnung online erstellen – mit dem Aloaha eForms Server URL: https://www.zugferdpro.com/aloaha-zugferd-formular/ Date: 2026-10-10 Kurz: Eine E-Rechnung im ZUGFeRD- oder XRechnung-Format lässt sich ohne eigene Rechnungssoftware online erstellen: Im Rechnungsformular des Aloaha eForms Servers füllen Sie Rechnungsdaten, Absender, Empfänger und Positionen im Browser aus. Beim Absenden entsteht ein PDF/A-3 mit eingebettetem XML nach EN 16931 (XRechnung 3.0), das per E-Mail an Sie und Ihren Kunden geht. Nicht jedes Unternehmen braucht eine Programmierbibliothek. Wer nur wenige Rechnungen schreibt oder keine Software installieren kann, erstellt E-Rechnungen mit dem Rechnungsformular des Aloaha eForms Servers direkt im Browser: Formular ausfüllen, absenden – und der Server erzeugt eine hybride ZUGFeRD-Rechnung, also ein PDF/A-3 mit eingebettetem XML nach EN 16931 im XRechnung-3.0-Format. Das ZUGFeRD-Testformular des Aloaha eForms Servers im Browser. ### Testformular ausprobieren VarianteLinkHinweis Im Browser (HTML)[ZUGFeRD-Testformular öffnen](https://www.form-provider.com/pdfforms.aspx?fid=zugferd)Funktioniert auf PC, Tablet und Smartphone – ohne Installation. Als PDF-Formular[PDF-Formular herunterladen](https://www.form-provider.com/pdfforms.aspx?fid=zugferd&pdf=1)In einem PDF-Reader mit Formularunterstützung ausfüllen und über die Schaltfläche im Formular absenden. Bitte nur Testdaten eingeben. Das Formular wird auf dem Aloaha eForms Server verarbeitet, also nicht auf Ihrem Rechner. Die Testrechnung erhalten Sie als ZUGFeRD-/XRechnung-E-Rechnung per E-Mail an die im Formular angegebene Adresse. ### So funktioniert es - Formular ausfüllen: Rechnungsdaten, Rechnungssteller und -empfänger, Positionen. Für öffentliche Auftraggeber gibt es das Feld Käuferreferenz / Leitweg-ID; Fälligkeitsdatum, IBAN und Steuerkategorien (auch 0 % bei Steuerbefreiung, Reverse Charge oder Ausfuhr) sind vorgesehen. - Absenden: Der eForms Server erzeugt daraus ein PDF/A-3 mit eingebettetem ZUGFeRD-XML (EN 16931, XRechnung 3.0). - Versand: Die fertige E-Rechnung geht per E-Mail an Sie und an Ihren Kunden – für Menschen lesbar, für die Buchhaltung des Empfängers maschinell verarbeitbar. Die Ausgabe des Testformulars besteht laut Hersteller die Prüfungen auf PDF/A-3b, EN 16931 und XRechnung (Mustang-Validator). Ihre eigene Rechnung prüfen Sie zusätzlich mit dem offiziellen KoSIT-Validator: [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) ### Eigenes Rechnungsformular Mit dem Formular-Designer des eForms Servers entsteht ein Rechnungsformular mit Ihren Firmendaten und Ihrem Briefkopf, das Sie für jede Rechnung nur noch ausfüllen. Mehr dazu auf [form-provider.com: E-Rechnung mit dem eForms Server](https://www.form-provider.com/de/zugferd.html) und in den [Beispielformularen](https://www.form-provider.com/de/samples.html#zugferd). Gerne gestalten wir Ihr Formular nach Ihren Vorstellungen – schreiben Sie uns an info@aloaha.com. ### Formular, GUI oder SDK? LösungGeeignet fürBetrieb eForms Server (Formular)wenige Rechnungen, keine Installation möglichim Browser, Verarbeitung auf dem eForms Server [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/)Sachbearbeitung am Arbeitsplatz: Rechnungen erstellen, prüfen, bearbeitenWindows, lokal [ZUGFeRD Pro SDK](https://www.zugferdpro.com/)Einbindung in die eigene Software (.NET, COM, Kommandozeile)On-Premise, ohne Cloud ### Video ### Häufige Fragen #### Kann ich eine ZUGFeRD-Rechnung ohne Rechnungssoftware erstellen? Ja. Mit dem Rechnungsformular des Aloaha eForms Servers füllen Sie die Rechnung im Browser aus; beim Absenden entsteht ein PDF/A-3 mit eingebettetem ZUGFeRD-XML nach EN 16931 (XRechnung 3.0). #### Wie erstelle ich eine XRechnung online für einen öffentlichen Auftraggeber? Tragen Sie im Formular die Leitweg-ID des Auftraggebers als Käuferreferenz ein. Das Formular erzeugt daraus eine E-Rechnung nach EN 16931 im XRechnung-3.0-Format; prüfen Sie sie vor dem Versand mit dem KoSIT-Validator. #### Welches Format erzeugt das Online-Formular? Ein PDF/A-3 mit eingebettetem ZUGFeRD-XML (UN/CEFACT CII) nach EN 16931 im XRechnung-3.0-Format – lesbar für Menschen, maschinell verarbeitbar für die Buchhaltung des Empfängers. ZUGFeRD und Factur-X sind technisch identisch. #### Ist die Rechnung aus dem Formular eine gültige XRechnung? Das erzeugte XML folgt EN 16931 im XRechnung-3.0-Format. Prüfen Sie Ihre Rechnung vor dem Versand zusätzlich mit dem KoSIT-Validator. #### Werden meine Daten lokal verarbeitet? Nein. Das Formular wird auf dem Aloaha eForms Server verarbeitet. Wer Rechnungen vollständig in der eigenen Infrastruktur erzeugen möchte, nutzt die Aloaha ZUGFeRD GUI oder das ZUGFeRD Pro SDK. --- ## F: Warum meldet der Validator BR-CO-15 und BR-CO-16, wenn ich den Rechnungsbetrag runde? URL: https://www.zugferdpro.com/f-warum-meldet-der-validator-br-co-15-und-br-co-16-beim-rundungsbetrag/ Date: 2026-10-10 Business terms: BT-112, BT-114, BT-115, BT-109, BT-110, BT-113, BG-22 SDK methods: WriteTotals Kurz: Der Rundungsbetrag (BT-114) darf nur den Zahlbetrag (BT-115) verändern, nie den Bruttobetrag (BT-112). Wer den Bruttobetrag auf einen „glatten“ Wert setzt und die Differenz als Rundung angibt, verletzt zwei Rechenregeln der EN 16931 – die Rechnung wird abgelehnt. ### Die beiden Regeln - BR-CO-15: Bruttobetrag (BT-112) = Nettobetrag (BT-109) + Umsatzsteuer (BT-110). - BR-CO-16: Zahlbetrag (BT-115) = Bruttobetrag (BT-112) − bereits gezahlter Betrag (BT-113) + Rundungsbetrag (BT-114). Der Bruttobetrag ergibt sich also immer exakt aus Netto und Steuer. Die Rundung kommt erst im letzten Schritt dazu. ### Beispiel Netto 84,04 EUR, 19 % Umsatzsteuer = 15,97 EUR. Brutto sind das 100,01 EUR – berechnet werden sollen aber glatte 100,00 EUR. FeldFalschRichtig Nettobetrag (BT-109)84.0484.04 Umsatzsteuer (BT-110)15.9715.97 Bruttobetrag (BT-112)100.00100.01 Rundungsbetrag (BT-114)0.01-0.01 Zahlbetrag (BT-115)100.00100.00 In der falschen Variante stimmt BT-112 nicht mit Netto + Steuer überein (BR-CO-15), und 100,00 + 0,01 ergibt nicht den Zahlbetrag (BR-CO-16). Beachten Sie auch das Vorzeichen: Wird abgerundet, ist der Rundungsbetrag negativ. ### Im Aloaha ZUGFeRD SDK WriteTotals erwartet die Summen in dieser Reihenfolge: Nettosumme der Positionen, Bruttobetrag, Zahlbetrag, Nettobetrag, Steuer, Abschläge, gezahlter Betrag, Rundungsbetrag, Zuschläge. ``` alo.WriteTotals("84.04", "100.01", "100.00", "84.04", "15.97", "0.00", "0.00", "-0.01", "0.00") ``` Übergeben Sie für den Zahlbetrag 0 oder einen leeren Wert, berechnet das SDK ihn selbst als Bruttobetrag − gezahlter Betrag + Rundungsbetrag. ### Ohne Rundung zum glatten Betrag Soll die Rechnung ohne Rundungsbetrag auf einen glatten Betrag kommen, passen Sie den Nettopreis einer Position an. Im Beispiel ergeben 84,03 EUR netto 15,97 EUR Steuer und damit genau 100,00 EUR brutto. Mehr zu den Gesamtsummen: [Gesamtsummen (BG-22) einzeln setzen](https://www.zugferdpro.com/gesamtsummen-bg-22-einzeln-setzen-und-als-csv-exportieren/) und [RoundingAmount](https://www.zugferdpro.com/roundingamount/). Meldet der Validator zusätzlich BR-S-08, BR-S-09 oder BR-CO-17, stimmt meist die Steuerbasis bei einem Rabatt nicht: [BR-S-08, BR-S-09 und BR-CO-17 bei Rabatt](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). --- ## F: Warum wird meine XRechnung wegen CII-SR-465 oder CII-SR-466 abgelehnt? URL: https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-wegen-cii-sr-465-abgelehnt/ Date: 2026-10-10 Business terms: BT-41, BT-56, BG-6, BG-9, BT-42, BT-43, BT-57, BT-58 SDK methods: WriteBuyerContactPerson, WriteSellerContactPerson Kurz: Im Ansprechpartner des Verkäufers (BT-41) bzw. des Käufers (BT-56) steht in der CII-Syntax entweder ein Personenname (PersonName) oder eine Abteilung (DepartmentName). Sind beide gesetzt, meldet der Validator CII-SR-465 (Verkäufer) bzw. CII-SR-466 (Käufer). ### Warnung oder Fehler? In den allgemeinen Prüfregeln der EN 16931 sind beide Regeln nur Warnungen. In der aktuellen KoSIT-Prüfkonfiguration für die XRechnung (XRechnung 3.0.2, Stand 31.08.2026) sind sie zu Fehlern hochgestuft – eine XRechnung mit Name und Abteilung im selben Ansprechpartner wird damit abgelehnt. ### Lösung Geben Sie nur einen der beiden Werte an. Wenn Sie beides zeigen möchten, fassen Sie es in einem Wert zusammen, z. B. „Buchhaltung, Max Mustermann“. Telefon (BT-42) und E-Mail (BT-43) bleiben davon unberührt. ``` ' Nur der Name – die Abteilung bleibt leer alo.WriteSellerContactPerson("Buchhaltung, Max Mustermann", "", "buchhaltung@example.com", "+49 30 1234567") ' Gleiches gilt für den Käufer (CII-SR-466) alo.WriteBuyerContactPerson("Erika Musterfrau", "", "einkauf@example.org") ``` Der zweite Parameter von WriteSellerContactPerson und WriteBuyerContactPerson ist die Abteilung. Lassen Sie ihn für XRechnungen leer. Mehr dazu: [Verkäufer und Käufer: Anschrift und Kontakt](https://www.zugferdpro.com/verkaeufer-und-kaeufer-anschrift-und-kontakt-bg-4-bis-bg-9/). --- ## F: Wie gebe ich eine SEPA-Lastschrift in der E-Rechnung richtig an? URL: https://www.zugferdpro.com/f-wie-gebe-ich-eine-sepa-lastschrift-in-der-e-rechnung-richtig-an/ Date: 2026-10-10 Business terms: BT-81, BT-89, BT-90, BT-91, BG-16, BG-19, BT-20, BT-84 SDK methods: AddPaymentMeans, AddTradePaymentTerms, CreditorReferenceID Kurz: Bei einer SEPA-Lastschrift ist die Zahlungsart (BT-81) der Code 59, nicht 58 (Überweisung). Dazu gehören die Mandatsreferenz (BT-89), Ihre Gläubiger-Identifikationsnummer (BT-90) und die IBAN des Kontos, das belastet wird (BT-91). ### Häufiger Fehler Oft steht in den Zahlungsbedingungen „wird per SEPA-Lastschrift abgebucht“, die Zahlungsart ist aber 58 mit der eigenen IBAN. Die Rechnung ist dann formal gültig, sagt aber maschinenlesbar „bitte überweisen“ – der Empfänger zahlt im schlimmsten Fall doppelt. In der XRechnung sind Gläubiger-ID und IBAN des Zahlers bei einer Lastschrift Pflicht (Regeln BR-DE-30 und BR-DE-31). ### Im Aloaha ZUGFeRD SDK ``` ' Zahlungsart 59 mit der IBAN des Kunden (letzter Parameter True = belastetes Konto, BT-91) alo.AddPaymentMeans(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_direct_debit, "SEPA-Lastschrift", "DE02120300000000202051", "", "", "", "", "", True) ' Gläubiger-Identifikationsnummer (BT-90) alo.CreditorReferenceID = "DE98ZZZ09999999999" ' Zahlungsbedingung mit Fälligkeit und Mandatsreferenz (BT-89) alo.AddTradePaymentTerms("Der Betrag wird am Fälligkeitstag per SEPA-Lastschrift eingezogen.", "20261101", "102", "MANDAT-0001") ``` Die IBAN und die Gläubiger-ID im Beispiel sind Muster-Werte. Mehr dazu: [Zahlungsanweisungen: Überweisung und Lastschrift](https://www.zugferdpro.com/zahlungsanweisungen-ueberweisung-lastschrift-bg-16-bg-17/), [Mandatsreferenz für SEPA](https://www.zugferdpro.com/mandatsreferenz-fur-sepa/) und [CreditorReferenceID](https://www.zugferdpro.com/creditorreferenceid/). --- ## F: Wie prüfe ich meine XRechnung vor dem Versand? URL: https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/ Date: 2026-10-10 Kurz: Verbindlich ist der Prüfbericht des offiziellen KoSIT-Validators mit der aktuellen XRechnung-Prüfkonfiguration. Diese Kombination nutzen auch viele Rechnungseingangsplattformen. Prüfen Sie Ihre Dateien damit, bevor Sie sie versenden. ### Was Sie brauchen - Den Validator als Java-Programm: KoSIT Validator (Releases) – Datei validator-…-standalone.jar . - Die Prüfkonfiguration für die XRechnung: Validator-Konfiguration XRechnung (Releases) – ZIP-Datei entpacken. - Eine Java-Laufzeitumgebung. Die Prüfkonfiguration wird regelmäßig aktualisiert. Verwenden Sie immer die neueste Fassung – Regeln können sich ändern, wie zuletzt bei [CII-SR-465](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-wegen-cii-sr-465-abgelehnt/). ### Prüfung starten ``` java -jar validator-standalone.jar -s konfiguration\scenarios.xml -r konfiguration -o bericht rechnung.xml ``` -s zeigt auf die Datei scenarios.xml der entpackten Konfiguration, -r auf deren Ordner, -o auf den Ausgabeordner für den Prüfbericht. Der Validator prüft XRechnungen in beiden Syntaxen (CII und UBL). ### Ergebnis lesen Die Konsole zeigt ACCEPTABLE oder REJECT. Im Ordner bericht liegt der ausführliche Prüfbericht mit allen Meldungen und der Fundstelle in der Datei. Fehler führen zur Ablehnung, Warnungen nicht. ### Häufige Fehler - BR-CO-15 / BR-CO-16: Bruttobetrag und Rundungsbetrag passen nicht zusammen – siehe Rundungsbetrag richtig angeben . - CII-SR-465 / CII-SR-466: Name und Abteilung im selben Ansprechpartner – siehe Ansprechpartner in der XRechnung . - BR-DE-30 / BR-DE-31: Lastschrift ohne Gläubiger-ID oder IBAN des Zahlers – siehe SEPA-Lastschrift richtig angeben . ### Und die Schema-Prüfung des SDK? ValidateXmlAgainstXsd des Aloaha ZUGFeRD SDK prüft eine Datei gegen ein XSD-Schema, also nur die Struktur. Die Geschäftsregeln (Rechenregeln, Pflichtfelder, BR-DE-Regeln) prüft erst der KoSIT-Validator. --- ## Schlussrechnung mit Abschlagsrechnungen als XRechnung und ZUGFeRD (BT-113, BG-3) URL: https://www.zugferdpro.com/schlussrechnung-mit-abschlagsrechnungen-xrechnung-bt-113-bg-3/ Date: 2026-10-10 Business terms: BT-113, BG-3, BT-25, BT-26, BT-22, BT-3, BT-112, BT-115, BG-22, BG-23 SDK methods: AddDocumentNote, AddInvoiceReferencedDocument, AddProduct_Comfort, AddTradeTax, BuyerReference, CreateInvoice, Document_Type, InvoiceCurrencyCode, Last_Error, SaveXML, VatCategoryCode, WriteSeller, WriteTotals Eine Schlussrechnung rechnet die gesamte Leistung ab und zieht die bereits bezahlten Abschlagsrechnungen ab. Nach § 14 Abs. 5 UStG müssen dabei die vereinnahmten Abschläge und die darauf entfallende Umsatzsteuer abgesetzt werden. Bei einer E-Rechnung gilt das für die XML-Daten – die PDF-Ansicht allein reicht nicht. Steht in der XML nur der gezahlte Bruttobetrag, lehnen Rechnungsempfänger die Rechnung häufig mit dem Hinweis ab, die genaue Anzahlung fehle. Diese Seite zeigt an einem vollständigen Beispiel mit Musterdaten, welche Angaben in die XML gehören und wie Sie sie mit dem Aloaha ZUGFeRD SDK schreiben. ### Was in die XML gehört AngabeFeldSDK Rechnungsart Schlussrechnung (Bau)[BT-3](https://www.zugferdpro.com/bt/bt-3/) = 877 (optional, sonst 380)[Document_Type](https://www.zugferdpro.com/api/document_type/) Bezug auf die Abschlagsrechnung: Nummer und Datum[BG-3](https://www.zugferdpro.com/bt/bg-3/) mit [BT-25](https://www.zugferdpro.com/bt/bt-25/), [BT-26](https://www.zugferdpro.com/bt/bt-26/)[AddInvoiceReferencedDocument](https://www.zugferdpro.com/api/addinvoicereferenceddocument/) Abschläge mit Netto, Umsatzsteuer und Brutto, Restzahlung[BT-22](https://www.zugferdpro.com/bt/bt-22/) (Rechnungshinweis)[AddDocumentNote](https://www.zugferdpro.com/api/adddocumentnote/) Bereits gezahlter Betrag (Summe der Abschläge, brutto)[BT-113](https://www.zugferdpro.com/bt/bt-113/)[WriteTotals](https://www.zugferdpro.com/api/writetotals/) (Parameter Prepaid) Zahlbetrag[BT-115](https://www.zugferdpro.com/bt/bt-115/)WriteTotals (Parameter DuePayable) Die EN 16931 kennt kein eigenes strukturiertes Feld für Netto und Steuer einer Abschlagszahlung. In XRechnung und den ZUGFeRD-Profilen bis EN 16931 (COMFORT) gehört diese Aufschlüsselung deshalb in einen Rechnungshinweis (BT-22). Die Umsatzsteueraufschlüsselung ([BG-23](https://www.zugferdpro.com/bt/bg-23/)) und die Summen bleiben die der gesamten Leistung. ### Beispiel: Zahlen Kanalsanierung, drei Positionen, 19 % Umsatzsteuer, zwei Abschlagsrechnungen (alle Daten frei erfunden): NettoUSt 19 %Brutto Gesamtleistung56.280,0010.693,2066.973,20 Abschlagsrechnung AR-2026-0101 vom 15.07.202620.000,003.800,0023.800,00 Abschlagsrechnung AR-2026-0102 vom 14.08.202625.000,004.750,0029.750,00 Summe Abschläge45.000,008.550,0053.550,00 Restzahlung11.280,002.143,2013.423,20 In der XML wird daraus: Bruttobetrag BT-112 = 66.973,20, gezahlter Betrag BT-113 = 53.550,00, Zahlbetrag BT-115 = 66.973,20 − 53.550,00 = 13.423,20 (Rechenregel BR-CO-16). ### VB.NET ``` Dim LicenseKey As String = "IHR-LIZENZSCHLUESSEL" Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) alo.CreateInvoice("SR-2026-0042", "Schlussrechnung Kanalsanierung Musterweg 12", "20260930", "102", , "", "EUR") alo.InvoiceCurrencyCode = "EUR" alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.FinalConstructionInvoice ' 877 = Schlussrechnung Bauleistung alo.BuyerReference = "04011000-12345-34" ' Leitweg-ID / Käuferreferenz (BT-10) ' Verkäufer, Käufer und Zahlungsdaten wie im Schnellstart alo.WriteSeller("Muster Tiefbau GmbH", "12345", "Musterstadt", "Baustraße 1", "", "DE", "DE123456789") ' ... ' Positionen der gesamten Leistung Dim MwStKat As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) alo.AddProduct_Comfort("1", "", "POS-01", "120", "MTQ", "Erdaushub Rohrgraben", "inkl. Abfuhr", "", "EUR", "", "MTQ", False, "", "", "", "85.00", "EUR", "1", "MTQ", "VAT", MwStKat, "19.00", "", "10200.00", "EUR") alo.AddProduct_Comfort("2", "", "POS-02", "240", "MTR", "Rohrleitung DN 150 verlegen", "", "", "EUR", "", "MTR", False, "", "", "", "145.50", "EUR", "1", "MTR", "VAT", MwStKat, "19.00", "", "34920.00", "EUR") alo.AddProduct_Comfort("3", "", "POS-03", "180", "MTK", "Oberfläche wiederherstellen", "Asphalt", "", "EUR", "", "MTK", False, "", "", "", "62.00", "EUR", "1", "MTK", "VAT", MwStKat, "19.00", "", "11160.00", "EUR") ' Umsatzsteuer der gesamten Leistung (BG-23) alo.AddTradeTax("10693.20", "EUR", "56280.00", "EUR", "VAT", MwStKat, "19.00") ' 1. Bezug auf die Abschlagsrechnung (BG-3) – XRechnung erlaubt nur einen Verweis, siehe Hinweise alo.AddInvoiceReferencedDocument("AR-2026-0102", "", "20260814", "102") ' 2. Aufschlüsselung aller Abschläge mit Netto und Umsatzsteuer (BT-22) alo.AddDocumentNote("Abzüglich Abschlagsrechnung AR-2026-0101 vom 15.07.2026: netto 20.000,00 EUR, USt 19 % 3.800,00 EUR, brutto 23.800,00 EUR. " & "Abzüglich Abschlagsrechnung AR-2026-0102 vom 14.08.2026: netto 25.000,00 EUR, USt 19 % 4.750,00 EUR, brutto 29.750,00 EUR. " & "Summe Abschläge: netto 45.000,00 EUR, USt 8.550,00 EUR, brutto 53.550,00 EUR. " & "Restzahlung: netto 11.280,00 EUR, USt 2.143,20 EUR, brutto 13.423,20 EUR.", "AAI") ' 3. Summen: Netto Positionen, Brutto, Zahlbetrag, Steuerbasis, Steuer, Abschläge, bereits gezahlt (BT-113) alo.WriteTotals(56280.0, 66973.2, 13423.2, 56280.0, 10693.2, 0, 53550.0) alo.SaveXML("C:\Rechnungen\SR-2026-0042.xml", LicenseKey, Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice) If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ``` ### VBA / VB6 (COM) ``` alo.Document_Type = 877 ' Schlussrechnung Bauleistung alo.AddInvoiceReferencedDocument "AR-2026-0102", "", "20260814", "102" alo.AddDocumentNote "Abzüglich Abschlagsrechnung AR-2026-0101 vom 15.07.2026: netto 20.000,00 EUR, USt 19 % 3.800,00 EUR, brutto 23.800,00 EUR. " & _ "Abzüglich Abschlagsrechnung AR-2026-0102 vom 14.08.2026: netto 25.000,00 EUR, USt 19 % 4.750,00 EUR, brutto 29.750,00 EUR. " & _ "Restzahlung: netto 11.280,00 EUR, USt 2.143,20 EUR, brutto 13.423,20 EUR.", "AAI" alo.WriteTotals 56280, 66973.2, 13423.2, 56280, 10693.2, 0, 53550 ``` ### Ergebnis in der XML (Auszug) ``` SR-2026-0042 877 ... Abzüglich Abschlagsrechnung AR-2026-0101 vom 15.07.2026: netto 20.000,00 EUR, USt 19 % 3.800,00 EUR, ... Restzahlung: netto 11.280,00 EUR, USt 2.143,20 EUR, brutto 13.423,20 EUR. AAI ... 56280.00 56280.00 10693.20 66973.20 53550.00 13423.20 AR-2026-0102 20260814 ``` Die mit diesem Code erzeugte XRechnung besteht die Prüfung mit dem KoSIT-Validator (XRechnung 3.0) ohne Fehler und Warnungen. So prüfen Sie Ihre eigene Datei: [Wie prüfe ich meine XRechnung vor dem Versand?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) ### Hinweise - Nur ein Verweis in XRechnung: XRechnung 3.0 erlaubt im Rechnungskopf nur eine vorausgegangene Rechnung (BG-3); ab Version 11.0.0.1 schreibt das SDK bei XRechnung nur den ersten Verweis (ältere Versionen schrieben alle, was zu einem Schemafehler führte). Rufen Sie AddInvoiceReferencedDocument deshalb einmal mit der letzten Abschlagsrechnung auf und führen Sie alle Abschläge im Rechnungshinweis auf. ZUGFeRD 2.5.2 / Factur-X 1.09.2 erlauben mehrere Verweise; dort schreibt das SDK alle. - Nicht nur brutto: Der gezahlte Betrag BT-113 ist immer brutto. Netto und Umsatzsteuer jeder Abschlagszahlung stehen deshalb im Rechnungshinweis – sonst fehlt dem Empfänger die Angabe für den Vorsteuerabzug. - Summen nicht kürzen: Positionen, Steueraufschlüsselung, Nettobetrag, Steuer und Bruttobetrag beziehen sich auf die gesamte Leistung. Nur BT-113 und der Zahlbetrag BT-115 berücksichtigen die Abschläge. - Rechnungsart: 877 (Schlussrechnung Bauleistung) ist in XRechnung zulässig. Klären Sie im Zweifel mit dem Empfänger, ob er 877 verarbeitet; 380 (Handelsrechnung) ist ebenfalls gültig. - ZUGFeRD EXTENDED: Im Profil EXTENDED gibt es strukturierte Felder für Abschlagszahlungen mit Steuerangaben: AddSpecifiedAdvancePayment . Für XRechnung-Empfänger ist der Rechnungshinweis der richtige Weg. - Diese Seite beschreibt die technische Umsetzung und ersetzt keine Steuerberatung. Mehr zum Verweis auf frühere Rechnungen: [Vorausgegangene Rechnung referenzieren (BG-3)](https://www.zugferdpro.com/vorausgegangene-rechnung-referenzieren-bg-3-bt-25-bt-26/). Zu Rechnungshinweisen: [Freitexte zur Rechnung und Position](https://www.zugferdpro.com/freitexte-zur-rechnung-und-position-bt-22-bt-127/). ### Häufige Fragen #### Warum lehnt der Empfänger meine Schlussrechnung wegen der Anzahlung ab? Meist steht in der XML nur der gezahlte Bruttobetrag (BT-113). Für den Vorsteuerabzug braucht der Empfänger die abgezogenen Abschläge mit Nettobetrag und Umsatzsteuer sowie den Bezug auf die Abschlagsrechnung. Ergänzen Sie BG-3 und einen Rechnungshinweis mit der Aufschlüsselung. #### Wo trage ich Netto und Umsatzsteuer einer Abschlagszahlung ein? In XRechnung und ZUGFeRD bis EN 16931 als Rechnungshinweis (BT-22, AddDocumentNote). Nur das Profil ZUGFeRD EXTENDED hat dafür eigene Felder (AddSpecifiedAdvancePayment). #### Kann ich in einer XRechnung auf mehrere Abschlagsrechnungen verweisen? Im Rechnungskopf nur auf eine. Verweisen Sie auf die letzte Abschlagsrechnung und nennen Sie alle Abschläge im Rechnungshinweis. --- ## Why does the validator report BR-CO-15 and BR-CO-16 for the rounding amount? URL: https://www.zugferdpro.com/en/br-co-15-br-co-16-rounding-amount/ Date: 2026-10-10 Business terms: BT-112, BT-114, BT-115, BT-109, BT-110, BT-113, BG-22 In short: The rounding amount (BT-114) may only change the amount due for payment (BT-115), never the invoice total with VAT (BT-112). If you set the total with VAT to a "round" value and declare the difference as rounding, you break two calculation rules of EN 16931 – the invoice is rejected. ### The two rules - BR-CO-15: Invoice total with VAT (BT-112) = invoice total without VAT (BT-109) + invoice total VAT amount (BT-110). - BR-CO-16: Amount due for payment (BT-115) = invoice total with VAT (BT-112) − paid amount (BT-113) + rounding amount (BT-114). The total with VAT is therefore always exactly net plus tax. Rounding is only added in the last step. ### Example Net EUR 84.04, 19 % VAT = EUR 15.97. That is EUR 100.01 gross – but a round EUR 100.00 is to be charged. FieldWrongCorrect Total without VAT (BT-109)84.0484.04 VAT amount (BT-110)15.9715.97 Total with VAT (BT-112)100.00100.01 Rounding amount (BT-114)0.01-0.01 Amount due for payment (BT-115)100.00100.00 In the wrong variant, BT-112 does not equal net + tax (BR-CO-15), and 100.00 + 0.01 does not give the amount due (BR-CO-16). Also note the sign: when rounding down, the rounding amount is negative. ### In the Aloaha ZUGFeRD SDK WriteTotals expects the totals in this order: sum of line net amounts, total with VAT, amount due, total without VAT, tax, allowances, paid amount, rounding amount, charges. ``` alo.WriteTotals("84.04", "100.01", "100.00", "84.04", "15.97", "0.00", "0.00", "-0.01", "0.00") ``` If you pass 0 or an empty value for the amount due, the SDK calculates it itself as total with VAT − paid amount + rounding amount. ### A round amount without rounding If the invoice should reach a round amount without a rounding amount, adjust the net price of a line. In the example, EUR 84.03 net gives EUR 15.97 tax and therefore exactly EUR 100.00 gross. More on the document totals: [setting the document totals (BG-22) individually](https://www.zugferdpro.com/gesamtsummen-bg-22-einzeln-setzen-und-als-csv-exportieren/) (German) and [RoundingAmount](https://www.zugferdpro.com/roundingamount/) (German). If the validator also reports BR-S-08, BR-S-09 or BR-CO-17, the tax basis is usually wrong when an allowance is applied: [BR-S-08, BR-S-09 and BR-CO-17 with allowances](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). ### Frequently asked questions #### What does BR-CO-15 mean? The invoice total with VAT (BT-112) must equal the invoice total without VAT (BT-109) plus the total VAT amount (BT-110). It must not be rounded to a round value. #### What does BR-CO-16 mean? The amount due for payment (BT-115) must equal the total with VAT (BT-112) minus the paid amount (BT-113) plus the rounding amount (BT-114). #### Is a rounding amount negative when rounding down? Yes. If EUR 100.01 is rounded down to EUR 100.00, the rounding amount (BT-114) is -0.01. --- ## Create a ZUGFeRD or XRechnung invoice online – without software URL: https://www.zugferdpro.com/en/zugferd-xrechnung-online-form/ Date: 2026-10-10 In short: You can create an e-invoice in ZUGFeRD or XRechnung format online without your own invoicing software: in the invoice form of the Aloaha eForms Server you fill in the invoice data, sender, recipient and line items in your browser. When you submit it, a PDF/A-3 with embedded XML according to EN 16931 (XRechnung 3.0) is created and sent by e-mail to you and your customer. Not every company needs a programming library. If you only write a few invoices or cannot install software, you can create e-invoices directly in the browser with the invoice form of the Aloaha eForms Server: fill in the form, submit it – and the server creates a hybrid ZUGFeRD invoice, i.e. a PDF/A-3 with embedded XML according to EN 16931 in XRechnung 3.0 format. The ZUGFeRD test form of the Aloaha eForms Server in the browser (German interface). ### Try the test form VariantLinkNote In the browser (HTML)[Open the ZUGFeRD test form](https://www.form-provider.com/pdfforms.aspx?fid=zugferd)Works on PC, tablet and smartphone – no installation. As a PDF form[Download the PDF form](https://www.form-provider.com/pdfforms.aspx?fid=zugferd&pdf=1)Fill it in with a PDF reader that supports forms and submit it with the button in the form. Please enter test data only. The form is processed on the Aloaha eForms Server, not on your computer. You receive the test invoice as a ZUGFeRD / XRechnung e-invoice by e-mail at the address entered in the form. ### How it works - Fill in the form: invoice data, seller and buyer, line items. For public-sector buyers there is a buyer reference / Leitweg-ID field; due date, IBAN and VAT categories (including 0 % for exemption, reverse charge or export) are provided for. - Submit: the eForms Server creates a PDF/A-3 with embedded ZUGFeRD XML (EN 16931, XRechnung 3.0). - Delivery: the finished e-invoice is sent by e-mail to you and to your customer – readable for people and machine-processable for the recipient's accounting. According to the manufacturer, the output of the test form passes the checks for PDF/A-3b, EN 16931 and XRechnung (Mustang validator). Additionally check your own invoice with the official KoSIT validator: [How do I check my XRechnung before sending it?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) ### Your own invoice form With the form designer of the eForms Server you create an invoice form with your company data and letterhead that you then only need to fill in for each invoice. More on [form-provider.com: e-invoicing with the eForms Server](https://www.form-provider.com/en/zugferd.html) and in the [sample forms](https://www.form-provider.com/en/samples.html#zugferd). We are happy to design your form to your requirements – write to us at info@aloaha.com. ### Form, GUI or SDK? SolutionSuitable forOperation eForms Server (form)few invoices, no installation possiblein the browser, processing on the eForms Server [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/)clerks at their workstation: create, check and edit invoicesWindows, local [ZUGFeRD Pro SDK](https://www.zugferdpro.com/)integration into your own software (.NET, COM, command line)on-premise, no cloud ### Video ### Frequently asked questions #### Can I create a ZUGFeRD invoice without invoicing software? Yes. With the invoice form of the Aloaha eForms Server you fill in the invoice in your browser; when you submit it, a PDF/A-3 with embedded ZUGFeRD XML according to EN 16931 (XRechnung 3.0) is created. #### How do I create an XRechnung online for a German public-sector buyer? Enter the buyer's Leitweg-ID as the buyer reference in the form. The form creates an e-invoice according to EN 16931 in XRechnung 3.0 format; check it with the KoSIT validator before sending. #### Which format does the online form create? A PDF/A-3 with embedded ZUGFeRD XML (UN/CEFACT CII) according to EN 16931 in XRechnung 3.0 format – readable for people, machine-processable for the recipient's accounting. ZUGFeRD and Factur-X are technically identical. #### Is the invoice from the form a valid XRechnung? The generated XML follows EN 16931 in XRechnung 3.0 format. Additionally check your invoice with the KoSIT validator before sending it. #### Is my data processed locally? No. The form is processed on the Aloaha eForms Server. If you want to create invoices entirely within your own infrastructure, use the Aloaha ZUGFeRD GUI or the ZUGFeRD Pro SDK. --- ## How do I validate my XRechnung before sending it? URL: https://www.zugferdpro.com/en/validate-xrechnung-before-sending/ Date: 2026-10-10 In short: The authoritative result is the report of the official KoSIT validator with the current XRechnung validation configuration. Many invoice receiving platforms use the same combination. Check your files with it before you send them. ### What you need - The validator as a Java program: KoSIT Validator (releases) – file validator-…-standalone.jar . - The validation configuration for XRechnung: validator configuration XRechnung (releases) – unpack the ZIP file. - A Java runtime environment. The validation configuration is updated regularly. Always use the latest version – rules can change, as most recently with [CII-SR-465](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-wegen-cii-sr-465-abgelehnt/) (German). ### Running the validation ``` java -jar validator-standalone.jar -s configuration\scenarios.xml -r configuration -o report invoice.xml ``` -s points to the scenarios.xml file of the unpacked configuration, -r to its folder, -o to the output folder for the report. The validator checks XRechnungen in both syntaxes (CII and UBL). ### Reading the result The console shows ACCEPTABLE or REJECT. The report folder contains the detailed report with all messages and their location in the file. Errors lead to rejection, warnings do not. ### Common errors - BR-CO-15 / BR-CO-16: total with VAT and rounding amount do not match – see setting the rounding amount correctly . - CII-SR-465 / CII-SR-466: name and department in the same contact – see contact person in the XRechnung (German). - BR-DE-30 / BR-DE-31: direct debit without creditor ID or payer IBAN – see specifying a SEPA direct debit correctly (German). ### And the SDK's schema check? ValidateXmlAgainstXsd of the Aloaha ZUGFeRD SDK checks a file against an XSD schema, i.e. only the structure. The business rules (calculation rules, mandatory fields, BR-DE rules) are only checked by the KoSIT validator. ### Frequently asked questions #### Which validator is authoritative for the XRechnung? The official KoSIT validator with the current XRechnung validation configuration. Many invoice receiving platforms use the same combination. #### Do warnings lead to rejection? No. Only errors lead to REJECT; warnings appear in the report but the invoice is still ACCEPTABLE. #### Is the XSD schema check of the SDK enough? No. ValidateXmlAgainstXsd only checks the structure against the schema. Calculation rules, mandatory fields and the German BR-DE rules are only checked by the KoSIT validator. --- ## Pourquoi le validateur signale-t-il BR-CO-15 et BR-CO-16 pour le montant d’arrondi ? URL: https://www.zugferdpro.com/fr/br-co-15-br-co-16-montant-d-arrondi/ Date: 2026-10-10 Business terms: BT-112, BT-114, BT-115, BT-109, BT-110, BT-113, BG-22 En bref : le montant d’arrondi (BT-114) ne peut modifier que le montant à payer (BT-115), jamais le montant total TTC de la facture (BT-112). Si vous fixez le total TTC à une valeur « ronde » et déclarez la différence comme arrondi, vous enfreignez deux règles de calcul de la norme EN 16931 – la facture est rejetée. ### Les deux règles - BR-CO-15 : montant total TTC (BT-112) = montant total HT (BT-109) + montant total de la TVA (BT-110). - BR-CO-16 : montant à payer (BT-115) = montant total TTC (BT-112) − montant déjà payé (BT-113) + montant d’arrondi (BT-114). Le total TTC résulte donc toujours exactement du montant HT et de la taxe. L’arrondi n’intervient qu’à la dernière étape. ### Exemple Montant HT 84,04 EUR, TVA 19 % = 15,97 EUR. Cela donne 100,01 EUR TTC – mais c’est un montant rond de 100,00 EUR qui doit être facturé. ChampIncorrectCorrect Montant total HT (BT-109)84.0484.04 Montant de la TVA (BT-110)15.9715.97 Montant total TTC (BT-112)100.00100.01 Montant d’arrondi (BT-114)0.01-0.01 Montant à payer (BT-115)100.00100.00 Dans la variante incorrecte, BT-112 ne correspond pas à HT + taxe (BR-CO-15), et 100,00 + 0,01 ne donne pas le montant à payer (BR-CO-16). Attention aussi au signe : en cas d’arrondi à la baisse, le montant d’arrondi est négatif. ### Dans l’Aloaha ZUGFeRD SDK WriteTotals attend les totaux dans cet ordre : somme des montants HT des lignes, total TTC, montant à payer, total HT, taxe, remises, montant déjà payé, montant d’arrondi, majorations. ``` alo.WriteTotals("84.04", "100.01", "100.00", "84.04", "15.97", "0.00", "0.00", "-0.01", "0.00") ``` Si vous transmettez 0 ou une valeur vide pour le montant à payer, le SDK le calcule lui-même : total TTC − montant déjà payé + montant d’arrondi. ### Un montant rond sans arrondi Si la facture doit aboutir à un montant rond sans montant d’arrondi, ajustez le prix HT d’une ligne. Dans l’exemple, 84,03 EUR HT donnent 15,97 EUR de taxe et donc exactement 100,00 EUR TTC. Pour en savoir plus sur les totaux du document : [définir individuellement les totaux (BG-22)](https://www.zugferdpro.com/gesamtsummen-bg-22-einzeln-setzen-und-als-csv-exportieren/) (en allemand) et [RoundingAmount](https://www.zugferdpro.com/roundingamount/) (en allemand). Si le validateur signale en plus BR-S-08, BR-S-09 ou BR-CO-17, c’est généralement la base d’imposition qui est erronée en cas de remise : [BR-S-08, BR-S-09 et BR-CO-17 en cas de remise](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). ### Questions fréquentes #### Que signifie BR-CO-15 ? Le montant total TTC de la facture (BT-112) doit être égal au montant total HT (BT-109) augmenté du montant total de la TVA (BT-110). Il ne doit pas être arrondi à une valeur ronde. #### Que signifie BR-CO-16 ? Le montant à payer (BT-115) doit être égal au total TTC (BT-112), moins le montant déjà payé (BT-113), plus le montant d’arrondi (BT-114). #### Le montant d’arrondi est-il négatif en cas d’arrondi à la baisse ? Oui. Si 100,01 EUR sont arrondis à 100,00 EUR, le montant d’arrondi (BT-114) est de -0.01. --- ## Créer une facture ZUGFeRD ou XRechnung en ligne – sans logiciel URL: https://www.zugferdpro.com/fr/formulaire-en-ligne-zugferd-xrechnung/ Date: 2026-10-10 En bref : vous pouvez créer une facture électronique au format ZUGFeRD ou XRechnung en ligne, sans logiciel de facturation : dans le formulaire de facture du serveur Aloaha eForms, vous saisissez dans votre navigateur les données de la facture, l’émetteur, le destinataire et les lignes. À l’envoi, un PDF/A-3 avec XML intégré selon EN 16931 (XRechnung 3.0) est créé et vous est envoyé par e-mail, ainsi qu’à votre client. Toutes les entreprises n’ont pas besoin d’une bibliothèque de programmation. Si vous n’émettez que peu de factures ou ne pouvez pas installer de logiciel, vous créez vos factures électroniques directement dans le navigateur avec le formulaire de facture du serveur Aloaha eForms : remplissez le formulaire, envoyez-le – et le serveur crée une facture ZUGFeRD hybride, c’est-à-dire un PDF/A-3 avec XML intégré selon EN 16931 au format XRechnung 3.0. Le formulaire de test ZUGFeRD du serveur Aloaha eForms dans le navigateur (interface en allemand). ### Essayer le formulaire de test VarianteLienRemarque Dans le navigateur (HTML)[Ouvrir le formulaire de test ZUGFeRD](https://www.form-provider.com/pdfforms.aspx?fid=zugferd)Fonctionne sur PC, tablette et smartphone – sans installation. En formulaire PDF[Télécharger le formulaire PDF](https://www.form-provider.com/pdfforms.aspx?fid=zugferd&pdf=1)À remplir dans un lecteur PDF prenant en charge les formulaires, puis à envoyer avec le bouton du formulaire. Veuillez saisir uniquement des données de test. Le formulaire est traité sur le serveur Aloaha eForms, et non sur votre ordinateur. Vous recevez la facture de test sous forme de facture électronique ZUGFeRD / XRechnung par e-mail à l’adresse indiquée dans le formulaire. ### Fonctionnement - Remplir le formulaire : données de la facture, émetteur et destinataire, lignes. Pour les acheteurs publics allemands, un champ référence acheteur / Leitweg-ID est prévu ; la date d’échéance, l’IBAN et les catégories de TVA (y compris 0 % en cas d’exonération, d’autoliquidation ou d’exportation) sont également disponibles. - Envoyer : le serveur eForms en crée un PDF/A-3 avec XML ZUGFeRD intégré (EN 16931, XRechnung 3.0). - Envoi : la facture électronique terminée vous est envoyée par e-mail, ainsi qu’à votre client – lisible par l’humain et exploitable automatiquement par la comptabilité du destinataire. Selon l’éditeur, le résultat du formulaire de test réussit les contrôles PDF/A-3b, EN 16931 et XRechnung (validateur Mustang). Contrôlez en outre votre propre facture avec le validateur officiel KoSIT : [comment valider ma XRechnung avant de l’envoyer ?](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) ### Votre propre formulaire de facture Avec le concepteur de formulaires du serveur eForms, vous créez un formulaire de facture avec les données et l’en-tête de votre entreprise, qu’il vous suffit ensuite de remplir pour chaque facture. Pour en savoir plus : [form-provider.com : facturation électronique avec le serveur eForms](https://www.form-provider.com/en/zugferd.html) (en anglais) et les [exemples de formulaires](https://www.form-provider.com/en/samples.html#zugferd) (en anglais). Nous concevons volontiers votre formulaire selon vos besoins – écrivez-nous à info@aloaha.com. ### Formulaire, GUI ou SDK ? SolutionAdaptée pourFonctionnement Serveur eForms (formulaire)peu de factures, aucune installation possibledans le navigateur, traitement sur le serveur eForms [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/)gestionnaires à leur poste : créer, contrôler et modifier des facturesWindows, en local [ZUGFeRD Pro SDK](https://www.zugferdpro.com/)intégration dans votre propre logiciel (.NET, COM, ligne de commande)sur site, sans cloud ### Vidéo ### Questions fréquentes #### Puis-je créer une facture ZUGFeRD sans logiciel de facturation ? Oui. Avec le formulaire de facture du serveur Aloaha eForms, vous remplissez la facture dans votre navigateur ; à l’envoi, un PDF/A-3 avec XML ZUGFeRD intégré selon EN 16931 (XRechnung 3.0) est créé. #### Comment créer en ligne une XRechnung pour un acheteur public allemand ? Saisissez dans le formulaire la Leitweg-ID de l’acheteur comme référence acheteur. Le formulaire en crée une facture électronique selon EN 16931 au format XRechnung 3.0 ; contrôlez-la avec le validateur KoSIT avant l’envoi. #### Quel format le formulaire en ligne génère-t-il ? Un PDF/A-3 avec XML ZUGFeRD intégré (UN/CEFACT CII) selon EN 16931 au format XRechnung 3.0 – lisible par l’humain, exploitable automatiquement par la comptabilité du destinataire. ZUGFeRD et Factur-X sont techniquement identiques. #### La facture issue du formulaire est-elle une XRechnung valide ? Le XML généré suit EN 16931 au format XRechnung 3.0. Contrôlez en outre votre facture avec le validateur KoSIT avant de l’envoyer. #### Mes données sont-elles traitées en local ? Non. Le formulaire est traité sur le serveur Aloaha eForms. Si vous souhaitez créer vos factures entièrement dans votre propre infrastructure, utilisez l’Aloaha ZUGFeRD GUI ou le ZUGFeRD Pro SDK. --- ## Comment valider ma XRechnung avant de l’envoyer ? URL: https://www.zugferdpro.com/fr/valider-une-xrechnung-avant-envoi/ Date: 2026-10-10 En bref : le résultat qui fait foi est le rapport du validateur officiel KoSIT avec la configuration de validation XRechnung actuelle. De nombreuses plateformes de réception de factures utilisent cette même combinaison. Vérifiez vos fichiers avec elle avant de les envoyer. ### Ce dont vous avez besoin - Le validateur sous forme de programme Java : KoSIT Validator (versions) – fichier validator-…-standalone.jar . - La configuration de validation pour la XRechnung : configuration du validateur XRechnung (versions) – décompressez le fichier ZIP. - Un environnement d’exécution Java. La configuration de validation est mise à jour régulièrement. Utilisez toujours la version la plus récente – les règles peuvent changer, comme récemment pour [CII-SR-465](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-wegen-cii-sr-465-abgelehnt/) (en allemand). ### Lancer la validation ``` java -jar validator-standalone.jar -s configuration\scenarios.xml -r configuration -o report invoice.xml ``` -s désigne le fichier scenarios.xml de la configuration décompressée, -r son dossier et -o le dossier de sortie du rapport. Le validateur contrôle les XRechnungen dans les deux syntaxes (CII et UBL). ### Lire le résultat La console affiche ACCEPTABLE ou REJECT. Le dossier report contient le rapport détaillé avec tous les messages et leur emplacement dans le fichier. Les erreurs entraînent le rejet, les avertissements non. ### Erreurs fréquentes - BR-CO-15 / BR-CO-16 : le montant TTC et le montant d’arrondi ne concordent pas – voir indiquer correctement le montant d’arrondi . - CII-SR-465 / CII-SR-466 : nom et service dans le même contact – voir l’interlocuteur dans la XRechnung (en allemand). - BR-DE-30 / BR-DE-31 : prélèvement sans identifiant créancier ou sans IBAN du payeur – voir indiquer correctement un prélèvement SEPA (en allemand). ### Et le contrôle de schéma du SDK ? ValidateXmlAgainstXsd du SDK Aloaha ZUGFeRD vérifie un fichier par rapport à un schéma XSD, donc uniquement la structure. Les règles métier (règles de calcul, champs obligatoires, règles BR-DE) ne sont contrôlées que par le validateur KoSIT. ### Questions fréquentes #### Quel validateur fait foi pour la XRechnung ? Le validateur officiel KoSIT avec la configuration de validation XRechnung actuelle. De nombreuses plateformes de réception de factures utilisent cette même combinaison. #### Les avertissements entraînent-ils un rejet ? Non. Seules les erreurs entraînent un REJECT ; les avertissements figurent dans le rapport, mais la facture reste ACCEPTABLE. #### Le contrôle de schéma XSD du SDK suffit-il ? Non. ValidateXmlAgainstXsd ne vérifie que la structure par rapport au schéma. Les règles de calcul, les champs obligatoires et les règles allemandes BR-DE ne sont contrôlés que par le validateur KoSIT. --- ## Rabatte und Zuschläge: Prozentsatz und Grundcode URL: https://www.zugferdpro.com/abschlaege-und-zuschlaege-mit-prozentsatz-und-grundcode-bt-94-bt-98-bt-101-bt-105/ Date: 2026-10-07 Business terms: BT-94, BT-98, BT-101, BT-105, BG-20, BG-21, BT-92, BT-93, BT-95, BT-96, BT-97, BT-99, BT-100, BT-102, BT-103, BT-104, BT-107, BT-108 SDK methods: AddTradeAllowanceCharge Ein Abschlag (Rabatt) oder Zuschlag auf die ganze Rechnung steht in der Gruppe BG-20 (Abschläge) bzw. BG-21 (Zuschläge). Neben Betrag und Grund kann die Rechnung den Prozentsatz und einen Grundcode enthalten. Das Aloaha ZUGFeRD SDK setzt alle diese Felder mit AddTradeAllowanceCharge. Die Grundlagen zum Aufruf erklärt der Artikel [AddTradeAllowanceCharge (BG-20, BG-21)](https://www.zugferdpro.com/addtradeallowancecharge/). ### Prozentsatz und Code AbschlagZuschlagParameterInhalt [BT-94](https://www.zugferdpro.com/bt/bt-94/)[BT-101](https://www.zugferdpro.com/bt/bt-101/)CalculationPercentProzentsatz, z. B. 3.00 [BT-93](https://www.zugferdpro.com/bt/bt-93/)[BT-100](https://www.zugferdpro.com/bt/bt-100/)BasisAmountGrundbetrag, auf den sich der Prozentsatz bezieht [BT-92](https://www.zugferdpro.com/bt/bt-92/)[BT-99](https://www.zugferdpro.com/bt/bt-99/)ActualAmountBetrag des Abschlags bzw. Zuschlags [BT-97](https://www.zugferdpro.com/bt/bt-97/)[BT-104](https://www.zugferdpro.com/bt/bt-104/)ReasonGrund als Text [BT-98](https://www.zugferdpro.com/bt/bt-98/)[BT-105](https://www.zugferdpro.com/bt/bt-105/)ReasonCodeGrund als Code – Abschläge nach UNTDID 5189, Zuschläge nach UNTDID 7161 Grundcode und Grundtext müssen zueinander passen. Mindestens eines von beiden ist Pflicht. ### Beispiel: 3 % Rabatt auf 1.000 € VB.NET ``` alo.AddTradeAllowanceCharge(ChargeIndicator:=False, BasisAmount:="1000.00", BasisAmountCurrencyID:="EUR", ActualAmount:="30.00", ActualAmountCurrencyID:="EUR", TypeCode:="VAT", CategoryCode:="S", TAXRateApplicablePercent:="19.00", Reason:="Rabatt", CalculationPercent:="3.00", ReasonCode:="95") ``` VBA / VB6 (COM) ``` alo.AddTradeAllowanceCharge False, "1000.00", "EUR", "30.00", "EUR", "VAT", "S", "19.00", "Rabatt", "3.00", "95" ``` Für einen Zuschlag setzen Sie ChargeIndicator auf True und einen Code aus der UNTDID 7161, zum Beispiel FC für Frachtkosten. ### Rechenregel Werden Prozentsatz und Grundbetrag angegeben, muss gelten: Betrag = Grundbetrag × Prozentsatz ÷ 100. Im Beispiel: 1.000,00 × 3 ÷ 100 = 30,00. Die Summe aller Abschläge erscheint in [BT-107](https://www.zugferdpro.com/bt/bt-107/), die aller Zuschläge in [BT-108](https://www.zugferdpro.com/bt/bt-108/). ### Auslesen GetTradeAllowanceCharge liefert für jeden Abschlag bzw. Zuschlag (Index ab 0) Indikator, Prozentsatz, Beträge, Grund und Grundcode zurück. ### Häufige Fragen #### Welche Codeliste gilt für den Grund eines Rabatts? Für Abschläge (BT-98) die UNTDID 5189, zum Beispiel 95 für Rabatt. Für Zuschläge (BT-105) die UNTDID 7161. #### Muss ich den Prozentsatz angeben? Nein, BT-94 und BT-101 sind optional. Wird ein Prozentsatz angegeben, sollte auch der Grundbetrag angegeben werden, damit der Empfänger den Betrag nachrechnen kann. --- ## Artikelmerkmale, Klassifizierung und Herkunftsland URL: https://www.zugferdpro.com/artikelmerkmale-klassifizierung-und-herkunftsland-bt-158-bis-bt-161/ Date: 2026-10-07 Business terms: BG-31, BG-32, BT-158, BT-159, BT-160, BT-161, BG-25, BT-153, BT-154, BT-155, BT-156, BT-157 SDK methods: ApplicableProductCharacteristicsCount, FillZUGFeRD_Structure, TradeItemsCount, WriteLineItemOriginTradeCountry, addApplicableProductCharacteristics, addDesignatedProductClassification, getApplicableProductCharacteristics Zu jeder Rechnungsposition gehören die Artikelinformationen (BG-31): Name, Beschreibung und Artikelnummern. Darüber hinaus kann die E-Rechnung die Ware genauer beschreiben – mit einer Klassifizierung (BT-158), dem Herkunftsland (BT-159) und beliebig vielen Artikelattributen wie Farbe oder Größe (BG-32 mit BT-160 und BT-161). Das Aloaha ZUGFeRD SDK bietet dafür drei Methoden. Alle erwarten als ersten Parameter den Index der Position, beginnend bei 0. ### Übersicht FeldBedeutungMethode [BT-158](https://www.zugferdpro.com/bt/bt-158/)Kennung der Artikelklassifizierung, z. B. Zolltarifnummer, mit Schema und VersionaddDesignatedProductClassification [BT-159](https://www.zugferdpro.com/bt/bt-159/)Herkunftsland (ISO 3166-1, z. B. DE)WriteLineItemOriginTradeCountry [BT-160](https://www.zugferdpro.com/bt/bt-160/)Name des Attributs, z. B. „Farbe“addApplicableProductCharacteristics [BT-161](https://www.zugferdpro.com/bt/bt-161/)Wert des Attributs, z. B. „Rot“addApplicableProductCharacteristics Name, Beschreibung und Artikelnummern ([BT-153](https://www.zugferdpro.com/bt/bt-153/) bis [BT-157](https://www.zugferdpro.com/bt/bt-157/)) setzen Sie wie gewohnt beim Anlegen der Position mit [AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/). ### Beispiel VB.NET – Position 0 wurde zuvor mit AddProduct_Comfort angelegt: ``` ' Klassifizierung: Zolltarifnummer nach Harmonisiertem System (Schema "HS") alo.addDesignatedProductClassification(0, "61091000", "HS", "") ' Herkunftsland alo.WriteLineItemOriginTradeCountry(0, "PT") ' Artikelattribute alo.addApplicableProductCharacteristics(0, "Farbe", "Rot") alo.addApplicableProductCharacteristics(0, "Größe", "XL") ``` VBA / VB6 (COM) ``` alo.addDesignatedProductClassification 0, "61091000", "HS", "" alo.WriteLineItemOriginTradeCountry 0, "PT" alo.addApplicableProductCharacteristics 0, "Farbe", "Rot" ``` ### Hinweise - Die Klassifizierung (BT-158) darf mehrfach vorkommen; jeder Aufruf fügt eine weitere hinzu. Das Schema ( listID , BT-158-1) stammt aus der UNTDID 7143. - Der optionale fünfte Parameter ClassName (Name der Klassifizierung) gibt es nur in ZUGFeRD EXTENDED. Ist er gefüllt, stellt das SDK das Profil automatisch auf EXTENDED um. - Bei Artikelattributen sind Name und Wert immer gemeinsam anzugeben. Die optionalen Parameter TypeCode , ValueMeasure und ValueMeasureUnitCode gehören zu ZUGFeRD EXTENDED. ### Artikelattribute lesen ApplicableProductCharacteristicsCount(Position) nennt die Zahl der Attribute einer Position, getApplicableProductCharacteristics liefert Name (BT-160) und Wert (BT-161) eines Attributs über Referenzparameter. Beide Indizes beginnen bei 0. Die optionalen Ausgaben TypeCode, ValueMeasure und ValueMeasureUnitCode sind nur bei EXTENDED-Rechnungen belegt; fehlende Werte kommen als leere Zeichenkette zurück. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML("IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.TradeItemsCount - 1 For k As Integer = 0 To alo.ApplicableProductCharacteristicsCount(i) - 1 Dim Name As String = "", Wert As String = "" alo.getApplicableProductCharacteristics(i, k, Name, Wert) Console.WriteLine($"Position {i + 1}: {Name} = {Wert}") Next Next End If ``` VBA / VB6 (COM) ``` Dim i As Long, k As Long Dim AttrName As String, AttrWert As String For i = 0 To alo.TradeItemsCount - 1 For k = 0 To alo.ApplicableProductCharacteristicsCount(i) - 1 alo.getApplicableProductCharacteristics i, k, AttrName, AttrWert Debug.Print i + 1, AttrName, AttrWert Next k Next i ``` Bei einem ungültigen Index liefert die Zählfunktion 0, und getApplicableProductCharacteristics lässt die übergebenen Variablen unverändert. ### Häufige Fragen #### Wie gebe ich die Farbe eines Artikels in der E-Rechnung an? Als Artikelattribut (BG-32): Name „Farbe“ in BT-160 und Wert „Rot“ in BT-161. Im SDK mit addApplicableProductCharacteristics. #### Wo trage ich die Zolltarifnummer ein? In der Artikelklassifizierung BT-158 mit dem Schema HS. Im SDK mit addDesignatedProductClassification. #### Ab welchem Profil sind Artikelattribute erlaubt? Ab dem Profil EN 16931 (COMFORT), also auch in EXTENDED und XRECHNUNG. --- ## Word-Vorlage für ZUGFeRD-PDF/A: Platzhalter und BT-Nummern URL: https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/ Date: 2026-10-07 Business terms: BT-1, BT-2, BT-5, BT-9, BT-10, BT-20, BT-22, BT-27, BT-29, BT-31, BT-44, BT-46, BT-48, BT-72, BT-73, BT-74, BT-83, BT-84, BT-106, BT-109, BT-110, BT-112, BT-115, BT-116, BT-117, BT-119, BT-126, BT-129, BT-131, BT-146, BT-153, BT-154, BG-23, BG-25, BT-32, BT-34, BT-35, BT-36, BT-37, BT-38, BT-40, BT-41, BT-42, BT-43, BT-49, BT-50, BT-51, BT-52, BT-53, BT-55, BT-56, BT-57, BT-58, BT-86, BT-91, BT-107, BT-108, BT-113, BT-127, BT-130, BT-136, BT-137, BT-138, BT-139, BT-148, BT-149, BT-152, BT-155, BT-156, BT-162, BT-163 SDK methods: ConvertDOCX2PDF, CreateDocFromXML, Last_Error, MergeXMLIntoPDF Neben dem Einbetten von XML in ein vorhandenes PDF bietet das Aloaha ZUGFeRD SDK einen zweiten Weg zur hybriden E-Rechnung: Sie gestalten Ihr Rechnungslayout einmal als Word-Vorlage (DOCX) mit Platzhaltern. Das SDK füllt die Vorlage mit den Werten aus dem ZUGFeRD- bzw. XRechnung-XML, wandelt sie in ein PDF/A-3 um und bettet das XML ein – ganz ohne Ausgangs-PDF. Derselbe Weg eignet sich, um empfangene XRechnungen lesbar darzustellen oder zu drucken. ### Vorlagen zum Download - template.docx – vollständige Beispielrechnung mit Anschrift, Positionstabelle (Menge, Einheit, Artikelname und -beschreibung, Einzel- und Gesamtpreis), Nettosumme, Umsatzsteuer, Gesamtbetrag, Verwendungszweck, Zahlungsbedingungen und Hinweistext. 25 Platzhalter. - TemplateEUR_VAT.docx – schlankere Variante in Euro mit Positionstabelle, Umsatzsteuersatz, Steuerbetrag und Gesamtbetrag. 17 Platzhalter. Beide Vorlagen sind normale Word-Dokumente: Logo, Schriften, Farben und Texte passen Sie frei an. Entscheidend sind nur die Platzhalter in eckigen Klammern. ### So funktioniert es Die Funktion CreateDocFromXML liest das XML, ersetzt die Platzhalter und speichert das Ergebnis. Endet der Ausgabepfad auf .pdf, erzeugt sie in einem Schritt die fertige ZUGFeRD-PDF/A-3-Rechnung mit eingebettetem XML; endet er auf .docx, erhalten Sie die befüllte Word-Datei. VB.NET – in einem Schritt ``` Dim LicenseKey As String = "IHR-LIZENZSCHLUESSEL" ' Testlizenz: info@aloaha.com Dim alo As New Aloaha_ZUGFeRD.XML(LicenseKey) Dim Vorlage As String = "C:\Rechnungen\TemplateEUR_VAT.docx" If alo.CreateDocFromXML("C:\Rechnungen\RE-0001.xml", "C:\Rechnungen\RE-0001.pdf", Vorlage, LicenseKey, True) Then ' fertig: PDF/A-3 mit eingebettetem ZUGFeRD-XML Else Console.WriteLine(alo.Last_Error) End If ``` VBA / VB6 (COM) – in drei Schritten, wenn Sie das Word-Dokument vor der Umwandlung prüfen oder einen Anhang (z. B. AGB) mit einbetten möchten: ``` Set alo = CreateObject("Aloaha_ZUGFeRD.XML") If alo.CreateDocFromXML(XMLDatei, WordDatei, Vorlage, Lizenz, True) Then If alo.ConvertDOCX2PDF(WordDatei, PDFDatei, True, Lizenz) Then If alo.MergeXMLIntoPDF(XMLDatei, PDFDatei, Zieldatei, True, "C:\AGB\AGB.pdf", Lizenz) Then MsgBox "ok" End If End If End If ``` #### Parameter von CreateDocFromXML ParameterBedeutung XMLPathPfad zum ZUGFeRD-, Factur-X- oder XRechnung-XML (CII). OutputDocPathZieldatei. Endung .docx = befüllte Word-Datei, .pdf = fertige ZUGFeRD-PDF/A-3 mit eingebettetem XML. DocxTemplatePathPfad zur Vorlage. Leer oder nicht vorhanden: Das SDK verwendet ihre eingebaute Standardvorlage und gibt deren Pfad zurück (auch über DocXTemplate_Path lesbar). LicensekeyIhr Lizenzschlüssel. DoOverWriteVorhandene Zieldatei überschreiben (Standard True). AdditionalAttachmentOptionale weitere Datei, die bei .pdf-Ausgabe mit eingebettet wird. ConverDecimalDot2CommaTrue gibt Beträge, Mengen und Prozentsätze mit Dezimalkomma aus (z. B. 1.234,50 statt 1234.50). ### Regeln für Platzhalter - Platzhalter stehen in eckigen Klammern und werden exakt so geschrieben wie unten – mit Punkt, ohne Leerzeichen, Groß- und Kleinschreibung beachten: [Buyer.Country] , nicht [Buyer. Country] . - Tippen Sie einen Platzhalter am Stück und formatieren Sie ihn einheitlich. Wird er nachträglich teilweise umformatiert, kann Word ihn intern aufteilen; dann den Platzhalter einfach neu eintippen. - Positions-Platzhalter (Abschnitt „Rechnungspositionen“) gehören in eine Zeile einer Word-Tabelle. Das SDK vervielfältigt diese Zeile für jede Rechnungsposition. - Fehlt ein Wert im XML, wird der Platzhalter durch einen leeren Text ersetzt. - Datumsfelder werden als TT.MM.JJJJ ausgegeben. - Bei mehreren Steuersätzen stehen die weiteren Sätze in [VatRate1] bis [VatRate10] , analog [BasisAmount1] …, [CalculatedAmount1] … und [LineTotalBasisAmount1] …; nicht benötigte werden geleert. - Feste Texte, die je nach Rechnung entfallen sollen, tragen Sie vor dem Aufruf in das Feld Strings2Delete ein – das SDK entfernt sie aus dem Dokument. - Für die Umwandlung in PDF muss Microsoft Word auf dem Rechner installiert sein. ### Platzhalter-Referenz Die Namen folgen den Elementen der ZUGFeRD-Spezifikation. Die Spalte BT nennt das zugehörige Feld der EN 16931; „–“ heißt: kein Feld der Norm (z. B. ZUGFeRD-EXTENDED oder ein vom SDK berechneter Wert). #### Rechnungskopf PlatzhalterBTInhalt [Document_ID][BT-1](https://www.zugferdpro.com/bt/bt-1/)Rechnungsnummer [Document_Date][BT-2](https://www.zugferdpro.com/bt/bt-2/)Rechnungsdatum [Document_Name]–Dokumentname (ZUGFeRD EXTENDED) [Document_Note][BT-22](https://www.zugferdpro.com/bt/bt-22/)erster Freitext zur Rechnung [Comment]–Hinweistexte aus reinen Text-/Kommentarzeilen der Positionsliste (Zeilen ohne Positionsnummer) [InvoiceCurrencyCode][BT-5](https://www.zugferdpro.com/bt/bt-5/)Rechnungswährung, z. B. EUR [ActualDeliveryDate][BT-72](https://www.zugferdpro.com/bt/bt-72/)Tatsächliches Lieferdatum [BillingPeriodStart][BT-73](https://www.zugferdpro.com/bt/bt-73/)Beginn des Rechnungszeitraums [BillingPeriodEnd][BT-74](https://www.zugferdpro.com/bt/bt-74/)Ende des Rechnungszeitraums [BuyerReference], [LeitwegID][BT-10](https://www.zugferdpro.com/bt/bt-10/)Käuferreferenz bzw. Leitweg-ID (XRechnung) [FormattedDateString]–Datum der Erstellung, TT.MM.JJJJ [ShortDateString]–Datum der Erstellung, kurzes Format des Rechners [LongDateString]–Datum der Erstellung, langes Format des Rechners #### Zahlung PlatzhalterBTInhalt [PaymentTerms][BT-20](https://www.zugferdpro.com/bt/bt-20/)Zahlungsbedingungen (mehrere untereinander) [DueDate][BT-9](https://www.zugferdpro.com/bt/bt-9/)Fälligkeitsdatum [PaymentReference][BT-83](https://www.zugferdpro.com/bt/bt-83/)Verwendungszweck [Creditor.IBAN][BT-84](https://www.zugferdpro.com/bt/bt-84/)IBAN des Zahlungsempfängers (Überweisung) [Creditor.BIC][BT-86](https://www.zugferdpro.com/bt/bt-86/)BIC des Zahlungsempfängers [Creditor.Bankname]–Name der Bank des Zahlungsempfängers [Creditor.BLZ]–Bankleitzahl (nur ältere ZUGFeRD-Versionen) [Debtor.IBAN][BT-91](https://www.zugferdpro.com/bt/bt-91/)IBAN des zu belastenden Kontos (Lastschrift) [Debtor.BIC], [Debtor.Bankname], [Debtor.BLZ]–Bankdaten des Zahlungspflichtigen #### Summen PlatzhalterBTInhalt [LineTotalAmount][BT-106](https://www.zugferdpro.com/bt/bt-106/)Summe der Nettobeträge aller Positionen [AllowanceTotalAmount][BT-107](https://www.zugferdpro.com/bt/bt-107/)Summe der Abschläge auf Dokumentebene [ChargeTotalAmount][BT-108](https://www.zugferdpro.com/bt/bt-108/)Summe der Zuschläge auf Dokumentebene [TaxBasisTotalAmount][BT-109](https://www.zugferdpro.com/bt/bt-109/)Gesamtbetrag ohne Umsatzsteuer [TaxTotalAmount][BT-110](https://www.zugferdpro.com/bt/bt-110/)Umsatzsteuer gesamt [GrandTotalAmount][BT-112](https://www.zugferdpro.com/bt/bt-112/)Gesamtbetrag einschließlich Umsatzsteuer [TotalPrepaidAmount][BT-113](https://www.zugferdpro.com/bt/bt-113/)Vorauszahlungsbetrag [DuePayableAmount][BT-115](https://www.zugferdpro.com/bt/bt-115/)Fälliger Zahlungsbetrag #### Umsatzsteuer-Aufschlüsselung (BG-23) Ohne Ziffer: erster Steuersatz. Mit Ziffer 1 bis 10: weitere Steuersätze in der Reihenfolge des XML. PlatzhalterBTInhalt [VatRate], [VatRate1]…[BT-119](https://www.zugferdpro.com/bt/bt-119/)Umsatzsteuersatz in Prozent [BasisAmount], [BasisAmount1]…[BT-116](https://www.zugferdpro.com/bt/bt-116/)Steuerbasisbetrag je Steuersatz [CalculatedAmount], [CalculatedAmount1]…[BT-117](https://www.zugferdpro.com/bt/bt-117/)Steuerbetrag je Steuersatz [LineTotalBasisAmount], [LineTotalBasisAmount1]…–Summe der Positionsbeträge je Steuersatz (ZUGFeRD EXTENDED) #### Verkäufer PlatzhalterBTInhalt [Seller.Name][BT-27](https://www.zugferdpro.com/bt/bt-27/)Name des Verkäufers [Seller.ID][BT-29](https://www.zugferdpro.com/bt/bt-29/)Kennung des Verkäufers, z. B. Ihre Kreditorennummer beim Kunden [Seller.GlobalID][BT-29](https://www.zugferdpro.com/bt/bt-29/)globale Kennung mit Schema, z. B. GLN [Seller.TAXNumber][BT-31](https://www.zugferdpro.com/bt/bt-31/)erste Steuerregistrierung, üblicherweise die USt-IdNr. [Seller.TAXNumber1][BT-32](https://www.zugferdpro.com/bt/bt-32/)zweite Steuerregistrierung, üblicherweise die Steuernummer [Seller.URIUniversalCommunication][BT-34](https://www.zugferdpro.com/bt/bt-34/)elektronische Adresse [Seller.AddressLine1][BT-35](https://www.zugferdpro.com/bt/bt-35/)Anschrift Zeile 1 [Seller.AddressLine2][BT-36](https://www.zugferdpro.com/bt/bt-36/)Anschrift Zeile 2 [Seller.AddressLine3][BT-162](https://www.zugferdpro.com/bt/bt-162/)Anschrift Zeile 3 [Seller.PostCode][BT-38](https://www.zugferdpro.com/bt/bt-38/)Postleitzahl [Seller.City][BT-37](https://www.zugferdpro.com/bt/bt-37/)Ort [Seller.Country][BT-40](https://www.zugferdpro.com/bt/bt-40/)Ländercode, z. B. DE [Seller.PersonName][BT-41](https://www.zugferdpro.com/bt/bt-41/)Ansprechpartner [Seller.Department][BT-41](https://www.zugferdpro.com/bt/bt-41/)Abteilung der Kontaktstelle [Seller.Telephone][BT-42](https://www.zugferdpro.com/bt/bt-42/)Telefon [Seller.Email][BT-43](https://www.zugferdpro.com/bt/bt-43/)E-Mail [Seller.fax]–Fax (ZUGFeRD EXTENDED) #### Käufer PlatzhalterBTInhalt [Buyer.Name][BT-44](https://www.zugferdpro.com/bt/bt-44/)Name des Käufers [Buyer.ID][BT-46](https://www.zugferdpro.com/bt/bt-46/)Kennung des Käufers, z. B. Kundennummer [Buyer.GlobalID][BT-46](https://www.zugferdpro.com/bt/bt-46/)globale Kennung mit Schema, z. B. GLN [Buyer.TAXNumber][BT-48](https://www.zugferdpro.com/bt/bt-48/)erste Steuerregistrierung, üblicherweise die USt-IdNr. [Buyer.TAXNumber1]–zweite Steuerregistrierung [Buyer.URIUniversalCommunication][BT-49](https://www.zugferdpro.com/bt/bt-49/)elektronische Adresse [Buyer.BuyerReference], [Buyer.LeitwegID][BT-10](https://www.zugferdpro.com/bt/bt-10/)Käuferreferenz bzw. Leitweg-ID [Buyer.AddressLine1][BT-50](https://www.zugferdpro.com/bt/bt-50/)Anschrift Zeile 1 [Buyer.AddressLine2][BT-51](https://www.zugferdpro.com/bt/bt-51/)Anschrift Zeile 2 [Buyer.AddressLine3][BT-163](https://www.zugferdpro.com/bt/bt-163/)Anschrift Zeile 3 [Buyer.PostCode][BT-53](https://www.zugferdpro.com/bt/bt-53/)Postleitzahl [Buyer.City][BT-52](https://www.zugferdpro.com/bt/bt-52/)Ort [Buyer.Country][BT-55](https://www.zugferdpro.com/bt/bt-55/)Ländercode [Buyer.PersonName][BT-56](https://www.zugferdpro.com/bt/bt-56/)Ansprechpartner [Buyer.Department][BT-56](https://www.zugferdpro.com/bt/bt-56/)Abteilung der Kontaktstelle [Buyer.Telephone][BT-57](https://www.zugferdpro.com/bt/bt-57/)Telefon [Buyer.Email][BT-58](https://www.zugferdpro.com/bt/bt-58/)E-Mail [Buyer.fax]–Fax (ZUGFeRD EXTENDED) #### Rechnungspositionen (BG-25) – in einer Tabellenzeile PlatzhalterBTInhalt [Product.LineID][BT-126](https://www.zugferdpro.com/bt/bt-126/)Positionsnummer [Product.Name][BT-153](https://www.zugferdpro.com/bt/bt-153/)Artikelname [Product.Description][BT-154](https://www.zugferdpro.com/bt/bt-154/)Artikelbeschreibung [Product.Note][BT-127](https://www.zugferdpro.com/bt/bt-127/)Freitext zur Position [SellerAssignedID][BT-155](https://www.zugferdpro.com/bt/bt-155/)Artikelnummer des Verkäufers [BuyerAssignedID][BT-156](https://www.zugferdpro.com/bt/bt-156/)Artikelnummer des Käufers [BilledQuantity][BT-129](https://www.zugferdpro.com/bt/bt-129/)Menge [UnitCode][BT-130](https://www.zugferdpro.com/bt/bt-130/)Mengeneinheit, z. B. C62 = Stück (ersatzweise aus der Basismenge, BT-150) [NetPriceProductTradePrice][BT-146](https://www.zugferdpro.com/bt/bt-146/)Nettopreis [GrossPriceProductTradePrice][BT-148](https://www.zugferdpro.com/bt/bt-148/)Bruttopreis (Listenpreis vor Rabatt) [BasisQuantity][BT-149](https://www.zugferdpro.com/bt/bt-149/)Basismenge zum Preis [Product.TotalAmount][BT-131](https://www.zugferdpro.com/bt/bt-131/)Nettobetrag der Position [Product.Currency][BT-5](https://www.zugferdpro.com/bt/bt-5/)Währung der Position (sonst Rechnungswährung) [Product.Tax][BT-152](https://www.zugferdpro.com/bt/bt-152/)Umsatzsteuersatz der Position [ProductAllowanceAmount][BT-136](https://www.zugferdpro.com/bt/bt-136/)Abschlagsbetrag der Position [ProductAllowanceBasis][BT-137](https://www.zugferdpro.com/bt/bt-137/)Grundbetrag des Abschlags [ProductAllowancePercent][BT-138](https://www.zugferdpro.com/bt/bt-138/)Abschlag in Prozent [ProductAllowanceReason][BT-139](https://www.zugferdpro.com/bt/bt-139/)Grund des Abschlags Es wird jeweils der erste Abschlag einer Position ausgegeben. ### Ohne Installation testen Laden Sie ein XML im Webdienst hoch und erhalten Sie das Ergebnis mit der Standardvorlage: [als Word-Datei](https://eforms.aloaha.com/xmluploader.aspx?o=docx) oder [als ZUGFeRD-PDF](https://eforms.aloaha.com/xmluploader.aspx?o=pdf). In der [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) geht es ebenfalls per Mausklick (siehe [Automatische XML nach PDF/A Konvertierung](https://www.zugferdpro.com/automatische-xml-nach-pdfa-konvertierung/)), auf der Kommandozeile mit [zugcmd](https://www.zugferdpro.com/konvertierung-von-zugferd-x-rechnung-xml-nach-winword-docx/). ### Häufige Fragen #### Brauche ich ein vorhandenes PDF? Nein. Die PDF/A-3-Rechnung entsteht direkt aus dem XML und Ihrer Word-Vorlage. Wenn Sie bereits ein PDF aus Ihrem System haben, betten Sie das XML stattdessen mit MergeXMLIntoPDF ein. #### Was passiert, wenn ein Wert im XML fehlt? Der Platzhalter wird durch einen leeren Text ersetzt. Texte, die dann überflüssig sind, entfernen Sie über Strings2Delete. #### Wie bekomme ich Beträge mit Dezimalkomma? Setzen Sie beim Aufruf von CreateDocFromXML den Parameter ConverDecimalDot2Comma auf True. #### Ein Platzhalter wird nicht ersetzt – warum? Meist ist er falsch geschrieben (Leerzeichen, Groß-/Kleinschreibung) oder Word hat ihn durch Formatierung intern aufgeteilt. Löschen Sie den Platzhalter und tippen Sie ihn in einem Zug neu ein. --- ## Elektronische Adresse von Verkäufer und Käufer (BT-34, BT-49) URL: https://www.zugferdpro.com/elektronische-adresse-bt-34-bt-49/ Date: 2026-10-07 Business terms: BT-34, BT-49, BG-4, BG-7, BT-10, BT-31, BT-48 SDK methods: ElectronicAddressSchemeFromString, ElectronicAddressSchemeToString, FillZUGFeRD_Structure, get_URIUniversalCommunication, remove_URIUniversalCommunication, set_URIUniversalCommunication Jede Partei einer E-Rechnung kann eine elektronische Adresse haben, über die Geschäftsdokumente zugestellt werden: beim Verkäufer BT-34 (in BG-4), beim Käufer BT-49 (in BG-7). Zur Adresse gehört immer eine Schemakennung (BT-34-1 bzw. BT-49-1), die sagt, um welche Art Adresse es sich handelt – etwa EM für eine E-Mail-Adresse oder 0204 für eine Leitweg-ID. Das Aloaha ZUGFeRD SDK bietet dafür set_URIUniversalCommunication, get_URIUniversalCommunication und remove_URIUniversalCommunication sowie zwei Hilfsfunktionen für die Schemacodes. ### Felder FeldBedeutungParameter [BT-34](https://www.zugferdpro.com/bt/bt-34/)Elektronische Adresse des VerkäufersURI mit UseSeller = True BT-34-1Schema der VerkäuferadresseschemeID [BT-49](https://www.zugferdpro.com/bt/bt-49/)Elektronische Adresse des KäufersURI mit UseSeller = False BT-49-1Schema der KäuferadresseschemeID ### Schreiben set_URIUniversalCommunication(URI, schemeID, UseSeller) setzt Adresse und Schema. Der dritte Parameter ist optional; ohne Angabe gilt der Verkäufer. Den Schemacode übergeben Sie als Text. Für Codes aus der EAS-Liste wandelt ElectronicAddressSchemeToString einen Wert der Aufzählung ElectronicAddressSchemes in den vierstelligen Code um: ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf, Verkäufer und Käufer wie gewohnt setzen ' BT-34: Verkäufer per E-Mail erreichbar alo.set_URIUniversalCommunication("rechnung@musterfirma.de", "EM", True) ' BT-49: Käufer (Behörde) über seine Leitweg-ID, Schema 0204 Dim schema As String = alo.ElectronicAddressSchemeToString(Aloaha_ZUGFeRD.iXML.ElectronicAddressSchemes.LeitwegID) ' "0204" alo.set_URIUniversalCommunication("04011000-12345-67", schema, False) ``` VBA / VB6 (COM) – hier übergeben Sie den Schemacode direkt als Text: ``` alo.set_URIUniversalCommunication "rechnung@musterfirma.de", "EM", True alo.set_URIUniversalCommunication "04011000-12345-67", "0204", False ``` Wichtig: Das SDK ändert nur dann etwas, wenn beide Werte – Adresse und Schema – nicht leer sind. Ein Aufruf mit leerer Adresse löscht also nichts, er bleibt einfach ohne Wirkung. Ein zweiter Aufruf für dieselbe Partei ersetzt den vorherigen Wert. #### Häufige Schemacodes CodeBedeutungWert in ElectronicAddressSchemes EME-Mail-Adresse– (kein Enum-Wert, als Text übergeben) 0204Leitweg-ID (XRechnung)LeitwegID 0088GLN (Global Location Number)EanLocationCode 9930deutsche Umsatzsteuer-IDGermanyVatNumber 9914österreichische Umsatzsteuer-IDAustriaVatNumber 9943maltesische Umsatzsteuer-IDMaltaVatNumber Die Aufzählung enthält außerdem die Umsatzsteuer-ID-Schemata weiterer europäischer Länder (9910 bis 9957). Für einen Wert, der nicht in der Aufzählung definiert ist, liefert ElectronicAddressSchemeToString eine leere Zeichenkette. ### Lesen Nach dem Einlesen einer Rechnung mit FillZUGFeRD_Structure liefert get_URIUniversalCommunication die Adresse als Rückgabewert und das Schema über den zweiten Parameter (ByRef). Ist keine Adresse vorhanden, erhalten Sie leere Zeichenketten. ``` If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then Dim vSchema As String = "" Dim vAdresse As String = alo.get_URIUniversalCommunication(True, vSchema) ' BT-34 / BT-34-1 Dim kSchema As String = "" Dim kAdresse As String = alo.get_URIUniversalCommunication(False, kSchema) ' BT-49 / BT-49-1 Dim eas As Aloaha_ZUGFeRD.iXML.ElectronicAddressSchemes = alo.ElectronicAddressSchemeFromString(kSchema) If CInt(eas) = 0 Then Console.WriteLine("Käufer: " & kAdresse & " (Schema " & kSchema & ")") Else Console.WriteLine("Käufer: " & kAdresse & " (" & eas.ToString() & ")") ' z. B. LeitwegID End If End If ``` ElectronicAddressSchemeFromString ignoriert führende und folgende Leerzeichen sowie Groß- und Kleinschreibung. Für die GLN und die Leitweg-ID akzeptiert sie auch die Form ohne führende Nullen ("88", "204"). Für unbekannte Codes – auch für EM – gibt sie den Wert 0 zurück, der in der Aufzählung keinem Schema entspricht. Prüfen Sie deshalb wie im Beispiel auf 0. In älteren Versionen des SDK musste der Code exakt vierstellig und ohne Leerzeichen übergeben werden; bereinigen Sie ihn dort vorher mit Trim. ### Entfernen ``` alo.remove_URIUniversalCommunication() ' leert BT-34 und BT-34-1 ``` remove_URIUniversalCommunication löscht nur die Adresse des Verkäufers. Die Käuferadresse (BT-49) bleibt unverändert; ein entsprechender Aufruf für den Käufer existiert nicht. ### Hinweise - Automatische Vorbelegung beim Speichern: Ist BT-34 bzw. BT-49 beim Aufruf von SaveXML leer, füllt das SDK das Feld selbst – mit der E-Mail-Adresse der Partei (z. B. aus WriteSellerContactPerson ) und Schema EM oder, ohne E-Mail, mit einer deutschen bzw. maltesischen Umsatzsteuer-ID und Schema 9930 bzw. 9943. Das gilt auch nach remove_URIUniversalCommunication : Ist eine Verkäufer-E-Mail hinterlegt, steht sie anschließend wieder in BT-34. - Leitweg-ID: Wenn Sie die Eigenschaft LeitwegID setzen, schreibt das SDK den Wert in BT-10 und – falls BT-49 noch leer ist – zusätzlich als Käuferadresse mit Schema 0204 . - Profile: BT-34 und BT-49 gibt es ab dem Profil BASIC WL, also auch in BASIC, EN 16931 (COMFORT) und EXTENDED, nicht aber in MINIMUM. In der XRechnung sind beide Adressen Pflicht. - XML: Die Adresse steht als ram:URIUniversalCommunication/ram:URIID mit dem Attribut schemeID im Verkäufer- bzw. Käuferblock. Ein vollständiges Beispiel mit Verkäufer, Käufer und elektronischen Adressen zeigt der [Schnellstart für VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). Die API-Referenz finden Sie unter [set_URIUniversalCommunication](https://www.zugferdpro.com/api/set_uriuniversalcommunication/) und [get_URIUniversalCommunication](https://www.zugferdpro.com/api/get_uriuniversalcommunication/). ### Häufige Fragen #### Welches Schema nehme ich für eine E-Mail-Adresse? Den Code EM. Er ist nicht Teil der Aufzählung ElectronicAddressSchemes; übergeben Sie ihn einfach als Text. #### Wie lösche ich die elektronische Adresse des Käufers? Dafür gibt es keine eigene Methode. remove_URIUniversalCommunication wirkt nur auf den Verkäufer, und set_URIUniversalCommunication mit leeren Werten ändert nichts. #### Ist die elektronische Adresse in der XRechnung Pflicht? Ja, die XRechnung verlangt sowohl BT-34 als auch BT-49, jeweils mit Schemakennung. --- ## Freitexte zur Rechnung und Position (BG-1, BT-22, BT-127) URL: https://www.zugferdpro.com/freitexte-zur-rechnung-und-position-bt-22-bt-127/ Date: 2026-10-07 Business terms: BG-1, BT-21, BT-22, BT-127, BG-25 SDK methods: AddDocumentNote, Add_Trade_ItemTradeNote, DocumentNotesCount, FillZUGFeRD_Structure, SetIncludedNote, TradeItemNoteLine, TradeItemNotesCount, TradeItemsCount, Trade_ItemTradeNotes, getDocumentNote Eine E-Rechnung kann Freitexte an zwei Stellen tragen: auf Rechnungsebene in der Gruppe Freitext zur Rechnung (BG-1) – etwa Hinweise auf AGB, Registerangaben oder den Grund einer Korrektur – und je Rechnungsposition als Freitext zur Rechnungsposition (BT-127), zum Beispiel für eine Seriennummer. Dieser Artikel zeigt, wie Sie beide mit dem Aloaha ZUGFeRD SDK schreiben, ersetzen und wieder auslesen. ### Felder FeldBedeutungSDK [BT-22](https://www.zugferdpro.com/bt/bt-22/)Freitext zur RechnungContent in SetIncludedNote / getDocumentNote [BT-21](https://www.zugferdpro.com/bt/bt-21/)Code zur Qualifizierung des Freitextes (UNTDID 4451, z. B. AAI, REG, SUR)SubjectCode [BT-127](https://www.zugferdpro.com/bt/bt-127/)Freitext zur RechnungspositionAdd_Trade_ItemTradeNote / Trade_ItemTradeNotes Die Gruppe [BG-1](https://www.zugferdpro.com/bt/bg-1/) darf mehrfach vorkommen. Die Codes für BT-21 und ihre Bedeutung beschreibt der Artikel [Angabe rechnungsrelevanter Freitexte](https://www.zugferdpro.com/includednote-bg-1-bt-21-bt-22/). ### Freitext zur Rechnung schreiben Zum Hinzufügen eines Freitextes dient [AddDocumentNote](https://www.zugferdpro.com/api/adddocumentnote/): Jeder Aufruf hängt einen weiteren Freitext an. [SetIncludedNote](https://www.zugferdpro.com/api/setincludednote/) dagegen ersetzt alle vorhandenen Freitexte durch genau einen – praktisch, wenn Sie eine eingelesene oder per CSV erzeugte Rechnung übernehmen und den Text neu setzen wollen. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf, Verkäufer, Käufer und Positionen setzen ... ' zwei Freitexte anhängen alo.AddDocumentNote("Es gelten unsere AGB in der Fassung vom 01.01.2026.", "AAI") alo.AddDocumentNote("Musterfirma GmbH, HRB 12345, Amtsgericht Musterstadt", "REG") ' alle bisherigen Freitexte durch einen einzigen ersetzen alo.SetIncludedNote("Die Lieferung erfolgte in zwei Teilsendungen.", "AAI") ``` Verhalten von SetIncludedNote im Detail: - Ist Content leer, übernimmt das SDK den Text des bisher ersten Freitextes; alle weiteren Freitexte entfallen. Gibt es keinen Freitext, ändert sich nichts. So können Sie zum Beispiel nur den Code neu setzen: alo.SetIncludedNote("", "SUR") . - Der optionale dritte Parameter ContentCode existiert nur in ZUGFeRD EXTENDED. Ist er gefüllt, stellt das SDK das Profil automatisch auf EXTENDED um. ### Freitext zur Rechnungsposition schreiben [Add_Trade_ItemTradeNote](https://www.zugferdpro.com/api/add_trade_itemtradenote/) hängt einer Position einen Freitext an. Der erste Parameter ist der Index der Position, beginnend bei 0. Der Rückgabewert ist der Index des neuen Freitextes innerhalb der Position oder -1, wenn die Position nicht existiert – auch bei negativem Index oder wenn die Rechnung noch keine Positionen hat. In diesem Fall ändert das SDK nichts, auch nicht das Profil. ``` ' Position 0 wurde zuvor angelegt, z. B. mit AddProduct_Comfort Dim NoteIndex As Integer = alo.Add_Trade_ItemTradeNote(0, "Seriennummer SN-2026-4711") If NoteIndex < 0 Then Console.WriteLine("Position 0 existiert nicht.") End If ``` Die optionalen Parameter ContentCode und SubjectCode gibt es auf Positionsebene nur in EXTENDED; sobald einer davon gefüllt ist und die Position existiert, schaltet das SDK auf EXTENDED um. In älteren Versionen des SDK schaltete auch ein Aufruf mit ungültigem Index um, und ohne angelegte Positionen konnte eine Ausnahme auftreten. ### Freitexte auslesen Nach dem Einlesen mit FillZUGFeRD_Structure liefert DocumentNotesCount die Anzahl der Freitexte zur Rechnung; [getDocumentNote](https://www.zugferdpro.com/api/getdocumentnote/) füllt Text und Codes per Referenz. Die Freitexte der Positionen gibt [Trade_ItemTradeNotes](https://www.zugferdpro.com/api/trade_itemtradenotes/) als Array von TradeItemNote zurück; Content ist dabei selbst ein Array von Textzeilen. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then ' Freitexte zur Rechnung (BG-1) For i As Integer = 0 To alo.DocumentNotesCount - 1 Dim Notiz As String = "", ContentCode As String = "", Betreff As String = "" alo.getDocumentNote(i, Notiz, ContentCode, Betreff) Console.WriteLine(Betreff & ": " & Notiz) Next ' Freitexte je Position (BT-127) For p As Integer = 0 To alo.TradeItemsCount - 1 For Each n As Aloaha_ZUGFeRD.iXML.TradeItemNote In alo.Trade_ItemTradeNotes(p) Console.WriteLine("Position " & (p + 1) & ": " & String.Join(" ", n.Content)) Next Next End If ``` VBA / VB6 (COM) – hier greifen Sie statt auf das Array auf einzelne Zeilen zu: ``` Dim i As Long, p As Long, n As Long Dim Notiz As String, ContentCode As String, Betreff As String For i = 0 To alo.DocumentNotesCount - 1 Notiz = "": ContentCode = "": Betreff = "" alo.getDocumentNote i, Notiz, ContentCode, Betreff Debug.Print Betreff, Notiz Next i For p = 0 To alo.TradeItemsCount - 1 For n = 0 To alo.TradeItemNotesCount(p) - 1 Debug.Print "Position " & p + 1, alo.TradeItemNoteLine(p, n, 0) Next n Next p ``` ### Hinweise - Variablen zurücksetzen: Bei einem ungültigen Index lässt getDocumentNote die übergebenen Variablen unverändert. Setzen Sie sie daher vor jedem Aufruf auf "" , wie im Beispiel. - Profile: Freitexte zur Rechnung sind ab BASIC WL erlaubt. Freitexte zur Position schreibt das SDK ab dem Profil BASIC (ZUGFeRD 2.x / Factur-X); in BASIC ohne SubjectCode . In älteren Versionen des SDK wurden sie erst ab EN 16931 (COMFORT) ausgegeben. - Ein Positions-Freitext in BASIC, EN 16931 und XRechnung: BT-127 kommt je Position höchstens einmal vor. Haben Sie mehrere Freitexte angehängt, schreibt das SDK in diesen Profilen nur den ersten mit Text; in EXTENDED werden alle geschrieben. ### Häufige Fragen #### Was ist der Unterschied zwischen AddDocumentNote und SetIncludedNote? AddDocumentNote hängt einen weiteren Freitext an. SetIncludedNote ersetzt alle vorhandenen Freitexte zur Rechnung durch genau einen. #### Wie lese ich alle Freitexte einer eingehenden E-Rechnung? Mit einer Schleife von 0 bis DocumentNotesCount - 1 und getDocumentNote. Für Positionen nutzen Sie Trade_ItemTradeNotes oder unter VBA TradeItemNotesCount und TradeItemNoteLine. #### Warum erscheint mein zweiter Positions-Freitext nicht in der XRechnung? BASIC, EN 16931 und XRechnung erlauben je Position nur einen Freitext (BT-127). Mehrere Freitexte je Position schreibt das SDK nur im Profil EXTENDED. --- ## Gesamtsummen (BG-22) einzeln setzen und als CSV exportieren URL: https://www.zugferdpro.com/gesamtsummen-bg-22-einzeln-setzen-und-als-csv-exportieren/ Date: 2026-10-07 Business terms: BG-22, BT-106, BT-107, BT-108, BT-109, BT-110, BT-112, BT-113, BT-114, BT-115, BG-20, BG-21, BT-1, BT-3, BT-5, BG-23 SDK methods: AddMonetarySummation, FillZUGFeRD_Structure, GetMonetarySummation, ReadTotalsCSV, ReadTradeAllowanceChargesCSV, WriteTotals Die Gruppe Gesamtsummen auf Dokumentenebene (BG-22) enthält die Beträge, die jede E-Rechnung am Ende ausweist: Summe der Positionen, Zu- und Abschläge, Steuerbasis, Umsatzsteuer, Bruttobetrag, Vorauszahlung, Rundung und Zahlbetrag. Üblicherweise schreiben Sie alle Summen auf einmal mit [WriteTotals](https://www.zugferdpro.com/writetotals/). Mit AddMonetarySummation setzen Sie einen einzelnen Betrag, und mit ReadTotalsCSV und ReadTradeAllowanceChargesCSV exportieren Sie Summen sowie Zu- und Abschläge (BG-20, BG-21) einer Rechnung als CSV-Text. ### Felder FeldBedeutungSummationTypeParameter von WriteTotals [BT-106](https://www.zugferdpro.com/bt/bt-106/)Summe der Nettobeträge aller PositionenLineTotalAmountNettoTotal [BT-107](https://www.zugferdpro.com/bt/bt-107/)Summe der Abschläge auf DokumentenebeneAllowanceTotalAmountDiscountTotal [BT-108](https://www.zugferdpro.com/bt/bt-108/)Summe der Zuschläge auf DokumentenebeneChargeTotalAmountChargeTotal [BT-109](https://www.zugferdpro.com/bt/bt-109/)Rechnungsgesamtbetrag ohne UmsatzsteuerTaxBasisTotalAmountTaxableTotal [BT-110](https://www.zugferdpro.com/bt/bt-110/)Gesamtbetrag der UmsatzsteuerTaxTotalAmountTaxTotal [BT-112](https://www.zugferdpro.com/bt/bt-112/)Rechnungsgesamtbetrag einschließlich UmsatzsteuerGrandTotalAmountTotal [BT-113](https://www.zugferdpro.com/bt/bt-113/)VorauszahlungsbetragTotalPrepaidAmountPrepaid [BT-114](https://www.zugferdpro.com/bt/bt-114/)RundungsbetragRoundingAmountRoundingAmount [BT-115](https://www.zugferdpro.com/bt/bt-115/)Fälliger ZahlungsbetragDuePayableAmountDuePayable ### Einzelne Summe schreiben AddMonetarySummation(Amount, SummationType, CurrencyID) setzt genau einen Betrag. Ein Komma im Betrag wird als Dezimaltrennzeichen gelesen, der Wert auf zwei Nachkommastellen gebracht. Bleibt CurrencyID leer, gilt die Rechnungswährung (BT-5); ist noch keine Rechnungswährung gesetzt, übernimmt das SDK die hier angegebene. ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf, Parteien, Positionen, Umsatzsteuer (AddTradeTax) ' alle Summen auf einmal: Netto 100,00 – Abschlag 10,00 + 19 % USt = 107,10 alo.WriteTotals("100.00", "107.10", "107.10", "90.00", "17.10", "10.00") ' danach eine einzelne Summe ergänzen: 50,00 € wurden bereits angezahlt alo.AddMonetarySummation("50.00", Aloaha_ZUGFeRD.iXML.SummationType.TotalPrepaidAmount, "EUR") alo.AddMonetarySummation("57.10", Aloaha_ZUGFeRD.iXML.SummationType.DuePayableAmount, "EUR") ``` VBA / VB6 (COM) – statt der Aufzählung übergeben Sie deren Zahlenwert (7 = TotalPrepaidAmount, 8 = DuePayableAmount): ``` alo.AddMonetarySummation "50.00", 7, "EUR" alo.AddMonetarySummation "57.10", 8, "EUR" ``` #### Zusammenspiel mit WriteTotals WriteTotals ruft intern für alle neun Beträge AddMonetarySummation auf. Daraus folgt: - Ein späterer Aufruf von WriteTotals überschreibt alle Summen – auch solche, die Sie vorher einzeln gesetzt haben; nicht übergebene Werte werden zu 0.00 . Setzen Sie Einzelbeträge daher immer nach WriteTotals . - Nur WriteTotals rechnet: Übergeben Sie dort Total oder DuePayable als 0, ermittelt das SDK BT-112 = BT-106 − BT-107 + BT-108 + BT-110 bzw. BT-115 = BT-112 − BT-113 + BT-114. AddMonetarySummation übernimmt den Betrag dagegen unverändert; passen Sie abhängige Summen (wie im Beispiel BT-115) selbst an. Einen einzelnen Betrag lesen Sie mit GetMonetarySummation, alle auf einmal mit getTotals: ``` Dim zahlbetrag As String = alo.GetMonetarySummation(Aloaha_ZUGFeRD.iXML.SummationType.DuePayableAmount) ' "0.00", wenn nicht gesetzt ``` ### Summen als CSV exportieren ReadTotalsCSV liefert den Rechnungskopf mit allen Summen als CSV-Text: eine Kopfzeile und eine Datenzeile, getrennt durch einen Zeilenumbruch (CRLF). Der Parameter bestimmt das Trennzeichen (Standard: Komma). ``` If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then Dim csv As String = alo.ReadTotalsCSV(vbTab) Dim zeilen() As String = csv.Split(New String() {vbCrLf}, StringSplitOptions.None) Dim kopf() As String = zeilen(0).Split(CChar(vbTab)) Dim werte() As String = zeilen(1).Split(CChar(vbTab)) For i As Integer = 0 To kopf.Length - 1 Console.WriteLine(kopf(i) & " = " & werte(i)) Next End If ``` Die ersten Spalten sind currency, type (BT-3), leitwegid, invoiceid, invoicedate und dann die Summen in der Reihenfolge LineTotalAmount, ChargeTotalAmount, AllowanceTotalAmount, TaxBasisTotalAmount, TaxTotalAmount, RoundingAmount, GrandTotalAmount, TotalPrepaidAmount, DuePayableAmount. Es folgen u. a. Zahlungsbedingungen, Verwendungszweck, Rechnungsnotizen, Liefer- und Abrechnungszeitraum, je Steuersatz ein Spaltenblock der Umsatzsteueraufschlüsselung (BG-23) sowie Projekt-, Vertrags- und Bestellreferenzen. Wiederholte Gruppen erhalten ab dem zweiten Eintrag eine Nummer (InvoiceNote1, TAXTypeCode1 …). Leere Summen erscheinen als 0.00. Die Spalten entsprechen der Datei [totals.csv](https://www.zugferdpro.com/totals-csv/) des CSV-Imports. ### Zu- und Abschläge als CSV (BG-20, BG-21) ReadTradeAllowanceChargesCSV exportiert die Abschläge ([BG-20](https://www.zugferdpro.com/bt/bg-20/)) und Zuschläge ([BG-21](https://www.zugferdpro.com/bt/bg-21/)) auf Dokumentenebene: eine Kopfzeile und eine Zeile je Eintrag. Gibt es keine, ist das Ergebnis eine leere Zeichenkette. ``` Dim zuab As String = alo.ReadTradeAllowanceChargesCSV(";") If zuab <> "" Then Console.WriteLine(zuab) ' chargeindicator;basisamount;calculationpercent;actualamount;reason;taxpercent;taxtypecode;taxcategorycode;reasoncode;currency ' 0;100.00;10.00;10.00;Treuerabatt;19.00;VAT;S;95;EUR ``` chargeindicator ist 1 für einen Zuschlag und 0 für einen Abschlag. Je Eintrag wird nur die erste Steuerangabe exportiert. Am Ende jeder Zeile stehen der Begründungscode ([BT-98](https://www.zugferdpro.com/bt/bt-98/) bzw. [BT-105](https://www.zugferdpro.com/bt/bt-105/), Spalte reasoncode) und die Währung (currency); da sie angehängt sind, bleiben die Positionen der übrigen Spalten unverändert. In älteren Versionen des SDK fehlten diese beiden Spalten. Das Format entspricht der Datei [allowances.csv](https://www.zugferdpro.com/csv-datei-allowances-csv/). Alle fünf Datensätze einer Rechnung auf einmal erzeugt CreateCSV – siehe [Konvertierung nach CSV](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/). ### Hinweise - Keine Anführungszeichen: Beide Funktionen setzen Werte nicht in Anführungszeichen. Wählen Sie ein Trennzeichen, das in Texten wie Notizen oder Begründungen nicht vorkommt, z. B. den Tabulator. In ReadTotalsCSV werden Zeilenumbrüche in Freitexten ersetzt. - Keine Nebenwirkungen: ReadTotalsCSV verändert die Rechnung nicht; Summen und Rechnungswährung (BT-5) bleiben so, wie Sie sie gesetzt oder eingelesen haben. In älteren Versionen des SDK setzte die Funktion bei fehlendem Zahlbetrag BT-115 auf BT-112 und übernahm eine leere Rechnungswährung aus den Summen. - COM: ReadTotalsCSV ist Teil der Schnittstelle iXML (als letztes Mitglied angehängt) und damit auch aus VBA/VB6 frühgebunden aufrufbar. Registrieren Sie nach einem Update die Typbibliothek neu. - Profile: BG-22 ist in allen Profilen Pflicht. BT-106 sowie die Zu- und Abschläge gibt es ab BASIC WL, den Rundungsbetrag BT-114 erst ab EN 16931 (COMFORT). --- ## Handelsname und Registernummer in der E-Rechnung URL: https://www.zugferdpro.com/handelsname-und-rechtliche-angaben-bt-28-bt-33-bt-45-bt-47/ Date: 2026-10-07 Business terms: BT-28, BT-33, BT-45, BT-47, BT-27, BT-30, BT-44, BG-4, BG-7 SDK methods: BuyerLegalID, BuyerTradingBusinessName, SellerDescription, SellerLegalID, SellerTradingBusinessName Neben dem offiziellen Namen kennt die E-Rechnung für Verkäufer und Käufer einen Handelsnamen, unter dem das Unternehmen am Markt auftritt. Dazu kommen rechtliche Angaben wie Registernummer oder Stammkapital. Das Aloaha ZUGFeRD SDK stellt dafür einfache Eigenschaften bereit. ### Übersicht FeldBedeutungEigenschaft [BT-28](https://www.zugferdpro.com/bt/bt-28/)Handelsname des Verkäufers, falls abweichend vom Namen ([BT-27](https://www.zugferdpro.com/bt/bt-27/))SellerTradingBusinessName [BT-33](https://www.zugferdpro.com/bt/bt-33/)Sonstige rechtliche Informationen des Verkäufers, z. B. Stammkapital, RegistergerichtSellerDescription [BT-30](https://www.zugferdpro.com/bt/bt-30/)Registernummer des Verkäufers (Handelsregister)SellerLegalID [BT-45](https://www.zugferdpro.com/bt/bt-45/)Handelsname des Käufers, falls abweichend vom Namen ([BT-44](https://www.zugferdpro.com/bt/bt-44/))BuyerTradingBusinessName [BT-47](https://www.zugferdpro.com/bt/bt-47/)Registernummer des KäufersBuyerLegalID ### Beispiel VB.NET ``` ' Verkäufer alo.SellerTradingBusinessName = "Muster Shop" alo.SellerDescription = "Stammkapital 25.000 EUR, Geschäftsführung: Erika Muster" alo.SellerLegalID = "HRB 12345" ' Käufer alo.BuyerTradingBusinessName = "Kunde Online" alo.BuyerLegalID = "HRB 98765" ``` VBA / VB6 (COM) ``` alo.SellerTradingBusinessName = "Muster Shop" alo.SellerDescription = "Stammkapital 25.000 EUR" alo.BuyerLegalID = "HRB 98765" ``` SellerLegalID und BuyerLegalID haben einen optionalen Parameter für das Kennungsschema, als Parameter in Klammern: alo.BuyerLegalID(Schema) = Registernummer. Ohne Schema sollte die Kennung beiden Seiten bekannt sein, etwa die Handelsregisternummer. ### Wann gehören welche Angaben in die Rechnung? - Den Handelsnamen nur angeben, wenn er sich vom offiziellen Namen unterscheidet. - BT-33 nimmt Pflichtangaben auf, die das Handelsrecht für Geschäftsbriefe verlangt und die sonst keinen Platz in der Rechnung haben. - Alle Werte werden vom SDK beim Einlesen einer Rechnung wieder in dieselben Eigenschaften geladen. ### Häufige Fragen #### Was ist der Unterschied zwischen Name und Handelsname des Verkäufers? Der Name (BT-27) ist die vollständige, im Register eingetragene Firma. Der Handelsname (BT-28) ist der Name, unter dem das Unternehmen bekannt ist, zum Beispiel eine Marke oder ein Shopname. #### Wohin gehört das Stammkapital? In die sonstigen rechtlichen Informationen des Verkäufers (BT-33), im SDK die Eigenschaft SellerDescription. --- ## Lieferanschrift in der E-Rechnung angeben (BT-75 bis BT-80) URL: https://www.zugferdpro.com/lieferanschrift-in-der-e-rechnung-bt-75-bis-bt-80/ Date: 2026-10-07 Business terms: BT-75, BT-76, BT-77, BT-78, BT-165, BG-15, BG-13, BT-70, BT-71, BT-80, BT-44 SDK methods: GetShipToTradeParty, WriteShipToTradeParty Werden Waren an eine andere Adresse geliefert als an den Käufer, gehört diese Adresse als Lieferanschrift (BG-15) in die E-Rechnung. Sie ist Teil der Lieferinformationen (BG-13) und besteht aus bis zu drei Adresszeilen, Ort, Postleitzahl und Ländercode. Mit dem Aloaha ZUGFeRD SDK setzen Sie alle Felder mit einem einzigen Aufruf von WriteShipToTradeParty. ### Welche Felder gehören dazu? FeldBedeutungParameter [BT-70](https://www.zugferdpro.com/bt/bt-70/)Name des Waren- oder DienstleistungsempfängersCompanyName [BT-71](https://www.zugferdpro.com/bt/bt-71/)Kennung des LieferortsLocationID, global: GlobalID + GlobalIDSchemeID [BT-75](https://www.zugferdpro.com/bt/bt-75/)Zeile 1 der Lieferanschrift (Straße, Hausnummer)Streetline1 [BT-76](https://www.zugferdpro.com/bt/bt-76/)Zeile 2 der LieferanschriftStreetline2 [BT-165](https://www.zugferdpro.com/bt/bt-165/)Zeile 3 der LieferanschriftStreetline3 [BT-77](https://www.zugferdpro.com/bt/bt-77/)StadtCity [BT-78](https://www.zugferdpro.com/bt/bt-78/)PostleitzahlPostCode [BT-80](https://www.zugferdpro.com/bt/bt-80/)Ländercode (ISO 3166-1, z. B. DE)CountryCode_2Letter_ISO ### Lieferanschrift setzen VB.NET (benannte Parameter machen den Aufruf lesbar): ``` alo.WriteShipToTradeParty(CompanyName:="Muster GmbH – Lager Süd", PostCode:="80331", City:="München", Streetline1:="Lagerstraße 7", Streetline2:="Tor 3", CountryCode_2Letter_ISO:="DE", Streetline3:="Rampe B") ``` VBA / VB6 (COM) – Parameter in fester Reihenfolge: ``` alo.WriteShipToTradeParty "Muster GmbH – Lager Süd", "80331", "München", "Lagerstraße 7", "Tor 3", "DE" ``` Die Reihenfolge lautet: CompanyName, PostCode, City, Streetline1, Streetline2, CountryCode_2Letter_ISO, LocationID, VAT_No, Leitweg_ID, Streetline3, GlobalID, GlobalIDSchemeID. Nicht benötigte optionale Werte lassen Sie leer. ### Lieferanschrift auslesen Beim Einlesen einer empfangenen Rechnung liefert GetShipToTradeParty dieselben Werte über Referenzparameter zurück: ``` Dim Name, PLZ, Ort, Zeile1, Zeile2, Land As String alo.GetShipToTradeParty(Name, PLZ, Ort, Zeile1, Zeile2, Land) ``` ### Hinweise - Der Ländercode (BT-80) ist Pflicht, sobald eine Lieferanschrift angegeben wird. - Den Empfängernamen (BT-70) nur angeben, wenn der Empfänger nicht mit dem Käufer identisch ist. - Für eine abweichende Lieferanschrift je Rechnungsposition (nur ZUGFeRD EXTENDED) gibt es WriteShipToTradePartyItem mit dem Positionsindex als erstem Parameter. - Mehr zum Lieferort und zur Kennung BT-71: Wie gebe ich eine abweichende Lieferanschrift an? ### Häufige Fragen #### Muss die Lieferanschrift immer angegeben werden? Nein. Die Lieferanschrift (BG-15) ist optional. Sie wird nur angegeben, wenn Ware oder Leistung an eine andere Adresse als die des Käufers geht. #### In welchen ZUGFeRD-Profilen ist die Lieferanschrift erlaubt? Ab dem Profil BASIC WL, also auch in BASIC, EN 16931 (COMFORT), EXTENDED und XRECHNUNG. #### Wie lautet die dritte Adresszeile in der Norm? Die dritte Zeile der Lieferanschrift ist BT-165. Sie wird mit dem Parameter Streetline3 von WriteShipToTradeParty gesetzt. --- ## Objektkennung und Buchungsreferenz je Position (BT-128, BT-133) URL: https://www.zugferdpro.com/objektkennung-und-buchungsreferenz-je-position-bt-128-bt-133/ Date: 2026-10-07 Business terms: BT-128, BT-133, BG-25, BT-18, BT-19 SDK methods: Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument, Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount, FillZUGFeRD_Structure, Get_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount, TradeItemsCount, get_SpecifiedLineTradeSettlement_AdditionalReferencedDocument Zwei Angaben einer Rechnungsposition helfen dem Käufer bei der Zuordnung und Verbuchung: - Die Objektkennung auf Positionsebene ( BT-128 ) nennt den Gegenstand, auf dem die Position beruht – etwa eine Abonnementnummer, eine Telefonnummer oder eine Zählernummer. - Die Buchungsreferenz des Käufers ( BT-133 ) sagt, wo der Käufer die Position verbucht, zum Beispiel ein Sachkonto oder eine Kostenstelle. Der Käufer muss sie dem Verkäufer vorher mitteilen. Beide stehen in der XML unter SpecifiedLineTradeSettlement der Position. Für die Gegenstücke auf Rechnungsebene siehe [Vergabenummer und Objektkennung (BT-17, BT-18)](https://www.zugferdpro.com/angabe-von-vergabenummer-und-objektkennung/) und [Kostenstelle / Buchungsreferenz (BT-19)](https://www.zugferdpro.com/kostenstelle-buchungsreferenz/). ### Felder und Methoden FeldParameterSchreiben / Lesen [BT-128](https://www.zugferdpro.com/bt/bt-128/) ObjektkennungIssuerAssignedIDAdd_SpecifiedLineTradeSettlement_AdditionalReferencedDocument / get_SpecifiedLineTradeSettlement_AdditionalReferencedDocument Dokumentart, immer 130TypeCode BT-128-1 Schema der Kennung (UNTDID 1153)ReferenceTypeCode [BT-133](https://www.zugferdpro.com/bt/bt-133/) BuchungsreferenzIDAdd_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount / Get_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount Art des Kontos (nur EXTENDED)TypeCode Alle Methoden erwarten den Index der Position, beginnend bei 0. Die Lesemethoden haben einen zweiten Index für den Eintrag innerhalb der Position, ebenfalls ab 0. ### Schreiben VB.NET – Position 0 wurde zuvor mit [AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/) angelegt: ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf und Positionen anlegen ' BT-128: Zählernummer, auf die sich Position 0 bezieht alo.Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument(0, "130", "ZAEHLER-0815") ' BT-133: Kostenstelle des Käufers für Position 0 alo.Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount(0, "KST-4711") ``` VBA / VB6 (COM) ``` alo.Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument 0, "130", "ZAEHLER-0815" alo.Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount 0, "KST-4711" ``` Ein Schema für die Objektkennung übergeben Sie bei Bedarf als vierten Parameter ReferenceTypeCode. ### Lesen VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML("IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.TradeItemsCount - 1 Dim DokArt As String = "", Objekt As String = "", Schema As String = "" alo.get_SpecifiedLineTradeSettlement_AdditionalReferencedDocument(i, 0, DokArt, Objekt, Schema) Dim Konto As String = "", KontoArt As String = "" alo.Get_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount(i, 0, Konto, KontoArt) Console.WriteLine($"Position {i + 1}: Objekt {Objekt}, Buchungsreferenz {Konto}") Next End If ``` VBA / VB6 (COM) ``` Dim i As Long Dim DokArt As String, Objekt As String, Schema As String, Konto As String For i = 0 To alo.TradeItemsCount - 1 DokArt = "": Objekt = "": Schema = "": Konto = "" alo.get_SpecifiedLineTradeSettlement_AdditionalReferencedDocument i, 0, DokArt, Objekt, Schema alo.Get_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount i, 0, Konto Debug.Print i + 1, Objekt, Konto Next i ``` Gibt es den Eintrag nicht, lassen beide Lesemethoden die übergebenen Variablen unverändert. Setzen Sie sie deshalb vor jedem Aufruf auf "", sonst sehen Sie den Wert der vorigen Position. Eine eigene Zählfunktion gibt es nicht; weitere Einträge einer Position lesen Sie mit Index 1, 2 und so fort, bis der Wert leer bleibt. ### Hinweise - Profil: BT-128 und BT-133 gibt es ab EN 16931 (COMFORT), also auch in EXTENDED und XRechnung. - Nur ein Eintrag je Position: Die EN 16931 erlaubt je Position höchstens eine Objektkennung und eine Buchungsreferenz. Jeder Aufruf der Add-Methoden hängt einen weiteren Eintrag an; außerhalb von EXTENDED schreibt das SDK aber nur den ersten (gültigen) Eintrag je Position in die XML, weitere bleiben gespeichert und lesbar. Nur im Profil EXTENDED werden alle Einträge geschrieben. In älteren Versionen des SDK wurden in jedem Profil alle Einträge geschrieben – rufen Sie die Methoden dort je Position nur einmal auf. - Leere Werte: Ein Eintrag ohne IssuerAssignedID bzw. ohne ID wird nicht in die XML geschrieben. - Rückgabewert: Add_..._AdditionalReferencedDocument gibt True zurück, wenn TypeCode gefüllt ist; Add_..._ReceivableSpecifiedTradeAccountingAccount , wenn ID gefüllt ist. Bei ungültigem Positionsindex (negativ, zu groß oder noch keine Positionen) geben beide False zurück und speichern nichts. In älteren Versionen des SDK konnte auch dann True zurückkommen. - Art des Kontos: Den TypeCode der Buchungsreferenz schreibt das SDK nur im Profil EXTENDED, weil die anderen Profile das Element nicht kennen. ### Häufige Fragen #### Wo gebe ich die Zählernummer einer Strom- oder Wasserrechnung an? Je Position in der Objektkennung BT-128, mit Dokumentart 130. Gilt die Kennung für die ganze Rechnung, gehört sie in BT-18 auf Rechnungsebene. #### Was ist der Unterschied zwischen BT-19 und BT-133? Beide sind Buchungsreferenzen des Käufers. BT-19 gilt für die ganze Rechnung, BT-133 nur für eine einzelne Position. #### Welcher Index gilt beim Auslesen? Der erste Parameter ist der Positionsindex ab 0, der zweite der Eintrag innerhalb der Position, ebenfalls ab 0. --- ## Zu- und Abschläge je Position auslesen (BG-27, BG-28, BT-147) URL: https://www.zugferdpro.com/zu-und-abschlaege-je-position-auslesen-bg-27-bg-28-bt-147/ Date: 2026-10-07 Business terms: BG-27, BG-28, BT-147, BG-25, BG-29, BT-131, BT-136, BT-137, BT-138, BT-139, BT-140, BT-141, BT-142, BT-143, BT-144, BT-145, BT-146, BT-148 SDK methods: FillZUGFeRD_Structure, TradeItemsCount, Trade_ItemAllowance, getItemSpecifiedTradeAllowanceCharge, getItemSpecifiedTradeAllowanceChargeCount Ein Rabatt kann in einer E-Rechnung an zwei verschiedenen Stellen einer Position stehen – und beide wirken unterschiedlich: - Abschläge und Zuschläge der Position (BG-27, BG-28) wirken auf den Positionsbetrag als Ganzes. Sie sind im Nettobetrag der Position ( BT-131 ) bereits verrechnet. - Der Nachlass auf den Artikelpreis ( BT-147 ) gehört zu den Preisangaben (BG-29): Bruttopreis ( BT-148 ) minus Nachlass ergibt den Nettopreis je Einheit ( BT-146 ). Das Aloaha ZUGFeRD SDK hat für beide Stellen eigene Zugriffe. Wie Sie BG-27/BG-28 schreiben, zeigt [Zu- und Abschläge je Rechnungsposition](https://www.zugferdpro.com/zuschlaege-und-abschlaege-je-rechnungsposition-bg-27-bg-28/); hier geht es ums Auslesen und um den Preisnachlass. ### Übersicht AufrufLiest bzw. schreibt getItemSpecifiedTradeAllowanceChargeCount(ItemIndex)Anzahl der Zu- und Abschläge (BG-27 + BG-28) einer Position getItemSpecifiedTradeAllowanceChargeeinen Zu- oder Abschlag der Position Trade_ItemAllowance(ItemIndex, AllowanceIndex)Nachlass auf den Artikelpreis (BT-147), nicht BG-27/BG-28 ### BG-27 und BG-28 lesen ParameterAbschlag (BG-27)Zuschlag (BG-28) isChargeFalseTrue CalculationPercent[BT-138](https://www.zugferdpro.com/bt/bt-138/)[BT-143](https://www.zugferdpro.com/bt/bt-143/) BasisAmount[BT-137](https://www.zugferdpro.com/bt/bt-137/)[BT-142](https://www.zugferdpro.com/bt/bt-142/) ActualAmount[BT-136](https://www.zugferdpro.com/bt/bt-136/)[BT-141](https://www.zugferdpro.com/bt/bt-141/) ReasonCode[BT-140](https://www.zugferdpro.com/bt/bt-140/)[BT-145](https://www.zugferdpro.com/bt/bt-145/) Reason[BT-139](https://www.zugferdpro.com/bt/bt-139/)[BT-144](https://www.zugferdpro.com/bt/bt-144/) Alle Ausgabeparameter werden per Referenz gefüllt. Beide Indizes beginnen bei 0. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML("IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.TradeItemsCount - 1 For k As Integer = 0 To alo.getItemSpecifiedTradeAllowanceChargeCount(i) - 1 Dim isCharge As Boolean = False Dim Prozent As String = "", Grundbetrag As String = "", Betrag As String = "" Dim GrundCode As String = "", Grund As String = "" alo.getItemSpecifiedTradeAllowanceCharge(i, k, isCharge, Prozent, Grundbetrag, Betrag, GrundCode, Grund) Console.WriteLine($"Position {i + 1}: {If(isCharge, "Zuschlag", "Abschlag")} {Betrag} ({Grund})") Next Next End If ``` VBA / VB6 (COM) – die Variablen müssen typisiert sein, damit VBA sie per Referenz übergeben kann: ``` Dim i As Long, k As Long Dim isCharge As Boolean Dim Prozent As String, Grundbetrag As String, Betrag As String, GrundCode As String, Grund As String For i = 0 To alo.TradeItemsCount - 1 For k = 0 To alo.getItemSpecifiedTradeAllowanceChargeCount(i) - 1 alo.getItemSpecifiedTradeAllowanceCharge i, k, isCharge, Prozent, Grundbetrag, Betrag, GrundCode, Grund Debug.Print i + 1, IIf(isCharge, "Zuschlag", "Abschlag"), Val(Betrag), Grund Next k Next i ``` Ist ein Index ungültig, liefert getItemSpecifiedTradeAllowanceChargeCount 0, und getItemSpecifiedTradeAllowanceCharge lässt die übergebenen Variablen unverändert. Setzen Sie sie daher vor jedem Aufruf zurück, wenn Sie nicht über die Anzahl gehen. Beträge stehen mit Dezimalpunkt in der Rechnung; in VBA rechnen Sie sie mit Val() um. ### Preisnachlass BT-147: Trade_ItemAllowance Die Eigenschaft Trade_ItemAllowance heißt zwar nach Zu- und Abschlägen, greift aber auf den Rabatt im Bruttopreis der Position zu (GrossPriceProductTradePrice). Sie liefert eine Struktur iXML.AppliedTradeAllowanceCharge; der Nachlass je Einheit (BT-147) steht in ActualAmount.Amount. AddProduct_Comfort füllt diesen Eintrag über die Parameter AllowanceAmount und AllowanceReason; er hat dort immer den Index 0. VB.NET – lesen und ändern ``` Dim Nachlass As Aloaha_ZUGFeRD.iXML.AppliedTradeAllowanceCharge = alo.Trade_ItemAllowance(0, 0) Console.WriteLine("Preisnachlass je Einheit: " & Nachlass.ActualAmount.Amount) ' Nachlass von Position 0 auf 1,50 je Einheit ändern Nachlass.ChargeIndicator = False Nachlass.ActualAmount.Amount = "1.50" alo.Trade_ItemAllowance(0, 0) = Nachlass ``` - Lesen Sie den Eintrag vor dem Ändern aus, wie im Beispiel: Der Setter ersetzt den kompletten Eintrag. - Hat die Position noch keinen solchen Eintrag (AddProduct_Comfort ohne Basismenge und Rabatt), legt der Setter ihn an; ein Index hinter dem letzten Eintrag erweitert die Liste. Beim Lesen eines nicht vorhandenen Eintrags erhalten Sie eine leere Struktur. In älteren Versionen des SDK verwarf der Setter den Wert in diesem Fall ohne Fehlermeldung. - Den Nettopreis (BT-146) und den Positionsbetrag (BT-131) rechnet das SDK nicht neu; passen Sie sie selbst an. - In die XML gelangt der Nachlass nur zusammen mit einem Bruttopreis (BT-148) und nur, wenn ein Betrag gesetzt ist. In VBA ist Trade_ItemAllowance nicht sinnvoll nutzbar, weil die Struktur über COM nicht als Objekt ankommt. Dort lesen Sie Brutto- und Nettopreis aus den Spalten grossprice und netprice von ReadTradeItemCSV, siehe [Positionswerte in VBA/Access auslesen](https://www.zugferdpro.com/positionswerte-in-vba-und-access-auslesen/). ### Profile - BG-27/BG-28 sind ab BASIC erlaubt; Grundbetrag und Prozentsatz (BT-137/138, BT-142/143) ab EN 16931 (COMFORT). - BT-147 ist ab BASIC erlaubt. Bis EN 16931 ist hier nur ein Abschlag mit Betrag vorgesehen; Prozentsatz, Grundbetrag und Zuschläge auf den Preis gehören zu EXTENDED. Prozentsatz ( CalculationPercent ) und Grundbetrag ( BasisAmount ) des Preisnachlasses schreibt das SDK deshalb nur im Profil EXTENDED in die XML; Betrag, Grund und Code in jedem Profil. In älteren Versionen des SDK wurden Prozentsatz und Grundbetrag in jedes Profil geschrieben. ### Häufige Fragen #### Liest Trade_ItemAllowance die Positionsrabatte BG-27? Nein. Trade_ItemAllowance liest den Rabatt im Bruttopreis (BT-147). Für BG-27 und BG-28 verwenden Sie getItemSpecifiedTradeAllowanceChargeCount und getItemSpecifiedTradeAllowanceCharge. #### Muss ich BG-27/BG-28 vom Positionsbetrag abziehen? Nein. Der Nettobetrag der Position (BT-131) enthält die Zu- und Abschläge der Position bereits. #### Wie unterscheide ich Rabatt und Zuschlag beim Auslesen? Am Parameter isCharge: False steht für einen Abschlag (BG-27), True für einen Zuschlag (BG-28). --- ## Positionswerte in VBA/Access auslesen: Steuer und Betrag URL: https://www.zugferdpro.com/positionswerte-in-vba-und-access-auslesen/ Date: 2026-10-07 Business terms: BT-151, BT-152, BT-131, BT-5, BG-25, BG-30, BT-126, BT-129, BT-146 SDK methods: FillZUGFeRD_Structure, GetItemTradeTax, InvoiceCurrencyCode, Invoice_TradeItem, Licensekey, ReadTradeItemCSV, TradeItemsCount Wer eine ZUGFeRD- oder XRechnung in Microsoft Access, Excel oder einer anderen VBA-Umgebung einliest, will für jede Rechnungsposition meist dieselben vier Werte: Umsatzsteuersatz, Steuerkategorie, Nettobetrag und Währung. Der naheliegende Weg über Invoice_TradeItem(i).TradeSettlement funktioniert in VB.NET, scheitert aber unter VBA. Dieser Artikel zeigt, warum das so ist und mit welchen Aufrufen des Aloaha ZUGFeRD SDK Sie die Werte über COM zuverlässig bekommen. ### Das Problem: verschachtelte .NET-Strukturen über COM Ein typischer erster Versuch in VBA sieht so aus: ``` ' funktioniert unter VBA NICHT Kategorie = alo.Invoice_TradeItem(i).TradeSettlement.TradeTax.CategoryCode Steuersatz = alo.Invoice_TradeItem(i).TradeSettlement.TradeTax.RateApplicablePercent Betrag = alo.Invoice_TradeItem(i).TradeSettlement.Monetary_Summation.LineTotalAmount.Amount Waehrung = alo.Invoice_TradeItem(i).TradeSettlement.Monetary_Summation.LineTotalAmount.CurrencyID ``` Invoice_TradeItem liefert zwar ein Objekt zurück, aber TradeSettlement und die Ebenen darunter sind .NET-Structures (Werttypen), keine Klassen. Die COM-Schnittstelle, über die VBA mit dem SDK spricht, kann solche verschachtelten Werttypen nicht als Objekte durchreichen. Je nach Office-Version endet der Zugriff mit einem Laufzeitfehler, einem leeren Wert oder „Objekt unterstützt diese Eigenschaft oder Methode nicht“. In VB.NET und C# tritt das Problem nicht auf, dort ist der Zugriff über die Struktur völlig in Ordnung. Für COM-Clients bietet das SDK deshalb flache Aufrufe, die nur Zeichenketten und Zahlen übergeben. ### Die passenden Aufrufe für VBA WertEN-16931-FeldAufruf in VBA Anzahl der PositionenBG-25 (Rechnungsposition)alo.TradeItemsCount Umsatzsteuersatz der Position[BT-152](https://www.zugferdpro.com/bt/bt-152/)alo.GetItemTradeTax i, Steuersatz, Kategorie Steuerkategorie der Position (S, Z, E, AE, K, G, O, L, M)[BT-151](https://www.zugferdpro.com/bt/bt-151/)alo.GetItemTradeTax i, Steuersatz, Kategorie Nettobetrag der Position[BT-131](https://www.zugferdpro.com/bt/bt-131/)Spalte totalamount aus alo.ReadTradeItemCSV(vbTab) Währung[BT-5](https://www.zugferdpro.com/bt/bt-5/)alo.InvoiceCurrencyCode Eine eigene Währung pro Position gibt es in der EN 16931 nicht: Alle Positionsbeträge stehen immer in der Rechnungswährung BT-5. InvoiceCurrencyCode reicht deshalb für jede Zeile. ### Rechnung laden FillZUGFeRD_Structure liest wahlweise eine XML-Datei (ZUGFeRD, Factur-X, XRechnung) oder ein ZUGFeRD-PDF; aus dem PDF holt das SDK die eingebettete XML selbst heraus. ``` Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "IHR-LIZENZSCHLUESSEL" If Not alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.pdf", "IHR-LIZENZSCHLUESSEL") Then MsgBox "Rechnung konnte nicht gelesen werden." Exit Sub End If ``` ### Steuersatz und Steuerkategorie je Position GetItemTradeTax füllt die übergebenen Variablen per Referenz (ByRef). Wichtig: Die Variablen müssen als String deklariert sein, sonst kann VBA sie nicht als Referenz übergeben. Der Index ist 0-basiert – die erste Position hat den Index 0, die letzte TradeItemsCount - 1. ``` Dim i As Long Dim Steuersatz As String, Kategorie As String For i = 0 To alo.TradeItemsCount - 1 Steuersatz = "": Kategorie = "" alo.GetItemTradeTax i, Steuersatz, Kategorie Debug.Print "Position " & i + 1, Kategorie, Steuersatz Next i ``` Optional liefert derselbe Aufruf auch Text und Code des Befreiungsgrunds (entsprechend [BT-120](https://www.zugferdpro.com/bt/bt-120/) und [BT-121](https://www.zugferdpro.com/bt/bt-121/) auf Rechnungsebene), falls die Position steuerbefreit ist: ``` Dim Grund As String, GrundCode As String alo.GetItemTradeTax i, Steuersatz, Kategorie, Grund, GrundCode ``` ### Nettobetrag der Position über ReadTradeItemCSV ReadTradeItemCSV gibt alle Positionen als Text zurück: in der ersten Zeile die Spaltennamen, danach eine Zeile pro Position, getrennt durch vbCrLf. Den Nettobetrag der Position (BT-131) finden Sie in der Spalte totalamount. Suchen Sie die Spalte über ihren Namen statt über eine feste Nummer – dann bleibt Ihr Code auch bei künftigen zusätzlichen Spalten richtig. ``` Dim Zeilen() As String, Kopf() As String, Felder() As String Dim k As Long, colBetrag As Long Dim Waehrung As String Waehrung = alo.InvoiceCurrencyCode Zeilen = Split(alo.ReadTradeItemCSV(vbTab), vbCrLf) Kopf = Split(Zeilen(0), vbTab) colBetrag = -1 For k = 0 To UBound(Kopf) If Kopf(k) = "totalamount" Then colBetrag = k Next k For i = 1 To UBound(Zeilen) If Len(Zeilen(i)) > 0 Then Felder = Split(Zeilen(i), vbTab) Debug.Print "Position " & i, Val(Felder(colBetrag)), Waehrung End If Next i ``` Drei Hinweise dazu: - Tabulator als Trennzeichen. Standard ist das Komma. Weil Artikelbezeichnungen und Beschreibungen selbst Kommas enthalten können, ist vbTab sicherer. - Dezimalpunkt. Beträge und Prozentsätze stehen so in der Liste, wie sie in der XML stehen, also mit Punkt ( 119.00 ). Val() wertet den Punkt unabhängig von den Ländereinstellungen richtig aus; CDbl() oder CCur() würden auf einem deutschen System falsch rechnen. - Textspalten sind HTML-kodiert. Freitextfelder wie productname , description oder ItemNote enthalten Sonderzeichen in kodierter Form ( & statt & ). Für Beträge, Sätze und Codes spielt das keine Rolle. ### Weitere Spalten der Positionsliste Die Liste enthält deutlich mehr als nur den Betrag. Die wichtigsten Spalten: SpalteInhaltFeld LineIDPositionsnummer[BT-126](https://www.zugferdpro.com/bt/bt-126/) AssignedIDArtikelnummer des Verkäufers[BT-155](https://www.zugferdpro.com/bt/bt-155/) productnameArtikelbezeichnung[BT-153](https://www.zugferdpro.com/bt/bt-153/) quantity, unitMenge und Einheit[BT-129](https://www.zugferdpro.com/bt/bt-129/), [BT-130](https://www.zugferdpro.com/bt/bt-130/) netpriceNettopreis[BT-146](https://www.zugferdpro.com/bt/bt-146/) grosspriceBruttopreis vor Preisnachlass[BT-148](https://www.zugferdpro.com/bt/bt-148/) totalamountNettobetrag der Position[BT-131](https://www.zugferdpro.com/bt/bt-131/) taxpercentUmsatzsteuersatz[BT-152](https://www.zugferdpro.com/bt/bt-152/) taxcategorycodeSteuerkategorie[BT-151](https://www.zugferdpro.com/bt/bt-151/) DeliveryNoteLieferscheinnummer der Position– Steuersatz und Kategorie stehen also auch in der Liste. Wenn Sie ohnehin alle Positionsdaten in eine Access-Tabelle übernehmen, reicht ReadTradeItemCSV allein; GetItemTradeTax lohnt sich, wenn Sie gezielt nur die Steuerdaten einer Position brauchen oder den Befreiungsgrund benötigen. ### Komplettbeispiel für Access Das folgende Beispiel liest eine Rechnung ein und schreibt jede Position mit Betrag, Steuersatz, Kategorie und Währung in eine Tabelle tblPositionen. ``` Public Sub PositionenEinlesen(ByVal Pfad As String) Dim alo As Object Dim rs As DAO.Recordset Dim Zeilen() As String, Kopf() As String, Felder() As String Dim i As Long, k As Long Dim colPos As Long, colBetrag As Long, colSatz As Long, colKat As Long Dim Waehrung As String Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "IHR-LIZENZSCHLUESSEL" If Not alo.FillZUGFeRD_Structure(Pfad, "IHR-LIZENZSCHLUESSEL") Then Exit Sub If alo.TradeItemsCount = 0 Then Exit Sub Waehrung = alo.InvoiceCurrencyCode Zeilen = Split(alo.ReadTradeItemCSV(vbTab), vbCrLf) Kopf = Split(Zeilen(0), vbTab) For k = 0 To UBound(Kopf) Select Case Kopf(k) Case "LineID": colPos = k Case "totalamount": colBetrag = k Case "taxpercent": colSatz = k Case "taxcategorycode": colKat = k End Select Next k Set rs = CurrentDb.OpenRecordset("tblPositionen", dbOpenDynaset) For i = 1 To UBound(Zeilen) If Len(Zeilen(i)) > 0 Then Felder = Split(Zeilen(i), vbTab) rs.AddNew rs!PositionNr = Felder(colPos) rs!Nettobetrag = Val(Felder(colBetrag)) rs!Steuersatz = Val(Felder(colSatz)) rs!Steuerkategorie = Felder(colKat) rs!Waehrung = Waehrung rs.Update End If Next i rs.Close End Sub ``` Ersetzen Sie IHR-LIZENZSCHLUESSEL durch Ihren Lizenzschlüssel. Für einen Test genügt eine [Testlizenz](mailto:info@aloaha.com?subject=Testlizenz%20Aloaha%20ZUGFeRD%20SDK). ### Und in VB.NET oder C#? Dort können Sie weiterhin direkt auf die Struktur zugreifen, zum Beispiel alo.Invoice_TradeItem(i).TradeSettlement.TradeTax.CategoryCode. Die hier gezeigten Aufrufe funktionieren aber ebenso, und wer Code zwischen VBA und .NET teilt, fährt mit ihnen einheitlich. Rechnungen mit VBA, VB6 oder VB5 erstellen: [ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/). ### Häufige Fragen #### Warum kann ich in VBA nicht auf Invoice_TradeItem(i).TradeSettlement zugreifen? TradeSettlement ist eine .NET-Structure, also ein Werttyp. Über COM lassen sich solche verschachtelten Werttypen nicht als Objekte an VBA weitergeben. Nutzen Sie stattdessen GetItemTradeTax und ReadTradeItemCSV. #### Ist der Positionsindex 0- oder 1-basiert? 0-basiert. Die Schleife läuft von 0 bis TradeItemsCount - 1. In der Liste von ReadTradeItemCSV ist Zeile 0 die Kopfzeile, die erste Position steht also in Zeile 1. #### Woher bekomme ich die Währung einer einzelnen Position? Aus der Rechnungswährung BT-5 über InvoiceCurrencyCode. Die EN 16931 kennt keine abweichende Währung pro Position; alle Positionsbeträge stehen in der Rechnungswährung. #### Warum rechnet CDbl mit den Beträgen falsch? Die Beträge stehen mit Dezimalpunkt in der Rechnung. CDbl und CCur richten sich nach den Ländereinstellungen und lesen den Punkt auf deutschen Systemen als Tausendertrennzeichen. Val() wertet den Punkt immer als Dezimaltrennzeichen. #### Kann ich statt einer XML auch ein ZUGFeRD-PDF einlesen? Ja. FillZUGFeRD_Structure erkennt die Endung .pdf und liest die eingebettete XML aus dem PDF selbst aus. --- ## Prozesssteuerung (BG-2): Geschäftsprozess und Profil URL: https://www.zugferdpro.com/prozesssteuerung-bg-2-geschaeftsprozess-und-spezifikation/ Date: 2026-10-07 Business terms: BG-2, BT-23, BT-24 SDK methods: BusinessProcessSpecifiedDocumentContextParameter, IsKosit Die Gruppe Prozesssteuerung (BG-2) steht am Anfang jeder E-Rechnung und sagt dem Empfänger, nach welchen Regeln die Rechnung erstellt wurde. Sie enthält zwei Felder: den Geschäftsprozess ([BT-23](https://www.zugferdpro.com/bt/bt-23/)) und die Spezifikationskennung ([BT-24](https://www.zugferdpro.com/bt/bt-24/)), also das Profil, zum Beispiel EN 16931 oder XRechnung. ### Spezifikationskennung (BT-24) Die Spezifikationskennung setzt das Aloaha ZUGFeRD SDK automatisch passend zum Profil, das Sie beim Anlegen des Objekts wählen. Für eine XRechnung genügt alo.isKOSIT = True. ``` ' Profil EN 16931 (COMFORT) – BT-24 wird automatisch gesetzt Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' XRechnung alo.isKOSIT = True ``` Wer eine abweichende Kennung erzwingen muss – etwa für eine Branchenspezifikation –, kann sie im Feld forecedGuidelineSpecifiedDocumentContextParameter vorgeben. Der Wert muss eine vollständige Kennung mit Doppelpunkt sein; in allen anderen Fällen sollten Sie die Automatik nutzen. ### Geschäftsprozess (BT-23) Der Geschäftsprozess ist optional, wird in der XRechnung aber erwartet. Das SDK setzt ihn über eine Eigenschaft: ``` alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" ``` Details und gängige Werte: [Wie setze ich BusinessProcessSpecifiedDocumentContextParameter (BT-23)](https://www.zugferdpro.com/wie-setze-ich-businessprocessspecifieddocumentcontextparameter-bt-23/). Welches Profil zu Ihrer Rechnung passt, zeigt der [Profilvergleich](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### Häufige Fragen #### Muss ich die Spezifikationskennung selbst setzen? Nein. Das SDK leitet BT-24 aus dem gewählten Profil ab. Selbst setzen müssen Sie sie nur in Sonderfällen. #### Ist der Geschäftsprozess Pflicht? Nach EN 16931 ist BT-23 optional. Für XRechnung und Peppol wird er üblicherweise angegeben. --- ## Rechnung anlegen, Rechnungstyp (BT-3) und einfache Position URL: https://www.zugferdpro.com/rechnung-anlegen-createinvoiceobject-rechnungstyp-bt-3/ Date: 2026-10-07 Business terms: BT-1, BT-2, BT-3, BT-5, BT-22, BT-83, BG-25, BG-1, BT-126, BT-129, BT-130, BT-131, BT-146, BT-148, BT-149, BT-151, BT-152, BT-153, BT-154 SDK methods: AddProduct_Basic, CreateInvoiceObject, Document_Type, Document_TypeINT, Licensekey, Trade_ItemTradeSettlement, WriteItemTradeTax Jede E-Rechnung beginnt mit dem Rechnungskopf: Rechnungsnummer (BT-1), Rechnungsdatum (BT-2), Rechnungstyp (BT-3) und Währung (BT-5). Dieser Artikel zeigt drei Bausteine des Aloaha ZUGFeRD SDK: CreateInvoiceObject legt die Rechnung an, Document_TypeINT setzt den Rechnungstyp als Zahl und AddProduct_Basic fügt eine einfache Rechnungsposition (BG-25) hinzu. ### Rechnung anlegen FeldBedeutungParameter von CreateInvoiceObject [BT-1](https://www.zugferdpro.com/bt/bt-1/)Rechnungsnummer – wird auch als Verwendungszweck ([BT-83](https://www.zugferdpro.com/bt/bt-83/)) übernommenInvoiceID [BT-22](https://www.zugferdpro.com/bt/bt-22/)Freitext zur Rechnung (BG-1), optionalInvoiceNote [BT-2](https://www.zugferdpro.com/bt/bt-2/)Rechnungsdatum, z. B. 20261007; leer = heutiges DatumInvoiceDate, InvoiceDateFormat (102 = JJJJMMTT) –Dokumentname (Freitext), sollte normalerweise leer bleibenInvoiceName_FreeText –Sprache des Dokuments, z. B. DEInvoiceLanguageID_2Letter_ISO [BT-5](https://www.zugferdpro.com/bt/bt-5/)Rechnungswährung, z. B. EURCurrencyID ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") alo.CreateInvoiceObject("RE-2026-0042", "Vielen Dank für Ihren Auftrag.", "20261007", "102", "", "DE", "EUR") ``` VBA / VB6 (COM): ``` Set alo = CreateObject("Aloaha_ZUGFeRD.XML") alo.Licensekey = "IHR-LIZENZSCHLUESSEL" Call alo.CreateInvoiceObject("RE-2026-0042", "Vielen Dank für Ihren Auftrag.", "20261007", "102", "", "DE", "EUR") ``` CreateInvoiceObject arbeitet wie CreateInvoice: Alle Daten, die das Objekt bisher enthielt, werden durch eine neue, leere Rechnung ersetzt. Der Rechnungstyp steht danach auf 380 (Rechnung). Der Rückgabewert ist eine Kopie der Rechnungsstruktur als Object (bei einem Fehler Nothing); Sie brauchen ihn in der Regel nicht, denn alle weiteren Angaben setzen Sie über die Methoden des Objekts. Änderungen an der zurückgegebenen Kopie wirken sich nicht auf das Objekt aus. Der Dokumentname aus InvoiceName_FreeText wird nur im Profil EXTENDED (und bei ZUGFeRD 1.0) in die XML geschrieben. ### Rechnungstyp (BT-3) als Zahl BT-3 ist ein Code aus der Liste UNTDID 1001. In VB.NET setzen Sie ihn bequem über die Aufzählung Document_Type. Document_TypeINT ist dieselbe Angabe als ganze Zahl – das ist der Weg für VBA/COM, wo die Aufzählung nicht zur Verfügung steht: ``` alo.Document_TypeINT = 381 ' Gutschrift ' gleichwertig in VB.NET: alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.CreditNote ``` ``` ' VBA / VB6 alo.Document_TypeINT = 384 ' Rechnungskorrektur ``` CodeBedeutungDocumentType 380RechnungInvoice 381Gutschrift (Rechnungsminderung)CreditNote 384RechnungskorrekturCorrectedInvoice 389Selbst ausgestellte Rechnung (Gutschriftsverfahren)SelfBilledInvoice 326TeilrechnungPartialInvoice 875Abschlagsrechnung (Bauleistung)PartialConstructionInvoice 876Teilschlussrechnung (Bauleistung)PartialFinalConstructionInvoice 877Schlussrechnung (Bauleistung)FinalConstructionInvoice Die Aufzählung kennt außerdem u. a. 261, 383, 386 (Vorauszahlungsrechnung) und 751. Document_TypeINT prüft den Wert nicht: Jede Zahl wird unverändert als ram:TypeCode geschrieben, auch ein Code, der nicht in der Aufzählung steht. Nur Werte kleiner als 1 ersetzt SaveXML durch 380. Welche Codes zulässig sind, hängt von Profil und Empfänger ab; die XRechnung erlaubt z. B. nur 326, 380, 381, 384, 389, 875, 876 und 877. Zu Korrekturen und Gutschriften gehört meist ein Verweis auf die ursprüngliche Rechnung – siehe [Rechnungskorrektur / Gutschrift](https://www.zugferdpro.com/rechnungskorrektur-gutschrift-bt-25/). Beim Lesen liefert Document_TypeINT nach FillZUGFeRD_Structure den Code der eingelesenen Rechnung, z. B. If alo.Document_TypeINT = 381 Then .... ### Einfache Position mit AddProduct_Basic AddProduct_Basic legt eine neue Rechnungsposition mit wenigen Angaben an und gibt deren Index zurück (0-basiert: die erste Position hat den Index 0). FeldBedeutungParameter [BT-129](https://www.zugferdpro.com/bt/bt-129/)In Rechnung gestellte MengeBilledQuantity [BT-130](https://www.zugferdpro.com/bt/bt-130/)Mengeneinheit, z. B. C62 (Stück); gilt auch für die BasismengeQuantityUnit [BT-153](https://www.zugferdpro.com/bt/bt-153/)ArtikelnameProductName [BT-154](https://www.zugferdpro.com/bt/bt-154/)ArtikelbeschreibungProductDescription [BT-148](https://www.zugferdpro.com/bt/bt-148/)BruttopreisGrossPrice [BT-146](https://www.zugferdpro.com/bt/bt-146/)NettopreisNetPrice [BT-149](https://www.zugferdpro.com/bt/bt-149/)Basismenge zum PreisNetPriceBasisQuantity AddProduct_Basic setzt keine Umsatzsteuer der Position (BT-151, BT-152) und keinen Nettobetrag der Position ([BT-131](https://www.zugferdpro.com/bt/bt-131/)). Beides ist ab BASIC Pflicht. Ergänzen Sie die Werte über den zurückgegebenen Index: ``` Dim pos As Integer = alo.AddProduct_Basic("10", "C62", "Papier A4", "500 Blatt, 80 g/m²", "5.00", "5.00", "1", "EUR") ' BT-151 / BT-152: Umsatzsteuer der Position alo.WriteItemTradeTax(pos, "19", "S") ' BT-131: Nettobetrag der Position (10 × 5,00 €) Dim st As Aloaha_ZUGFeRD.iXML.TradeItemSettlement = alo.Trade_ItemTradeSettlement(pos) st.Monetary_Summation.LineTotalAmount.Amount = "50.00" st.Monetary_Summation.LineTotalAmount.CurrencyID = "EUR" alo.Trade_ItemTradeSettlement(pos) = st ``` Die Reihenfolge ist wichtig: Lesen Sie Trade_ItemTradeSettlement erst nach WriteItemTradeTax, sonst überschreiben Sie die Steuerangaben beim Zurückschreiben. Unter VBA lassen sich solche Strukturen nicht bearbeiten; dort verwenden Sie besser gleich AddProduct_Comfort, das alle Positionswerte in einem Aufruf setzt – siehe [Posten mit AddProduct_Comfort hinzufügen](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/). ### Hinweise - Nettopreis nur mit Basismenge: BT-146 wird nur geschrieben, wenn NetPrice und NetPriceBasisQuantity angegeben sind. Da der Nettopreis ab BASIC Pflicht ist, übergeben Sie immer beide (Basismenge meist "1" ). - Zahlenformat: Übergeben Sie Mengen und Preise mit Dezimalpunkt. Preise werden auf vier Nachkommastellen normiert. - Positionsnummer: AddProduct_Basic vergibt keine Positionsnummer ( BT-126 ). SaveXML nummeriert Positionen ohne Nummer beim Speichern fortlaufend (1, 2, 3 …). - Währung: Ist CurrencyID leer, gilt die Rechnungswährung; ist noch keine gesetzt, übernimmt das SDK die hier angegebene. - Profile: Rechnungspositionen (BG-25) gibt es ab BASIC; die Artikelbeschreibung BT-154 erst ab EN 16931 (COMFORT). Den vollständigen Ablauf vom Anlegen bis zum PDF/A-3 zeigt der [Schnellstart für VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). --- ## Rechnungsbegründende Unterlagen (BG-24) angeben und auslesen URL: https://www.zugferdpro.com/rechnungsbegruendende-unterlagen-bg-24-angeben-und-auslesen/ Date: 2026-10-07 Business terms: BG-24, BT-17, BT-122, BT-123, BT-124, BT-125, BT-18, BT-128 SDK methods: AddAdditionalReferencedDocument, AdditionalReferencedDocumentCount, AdditionalReferencedFileCount, FillZUGFeRD_Structure, GetAdditionalReferencedFile, ReadAdditionalReferencedDocument Mit den rechnungsbegründenden Unterlagen (BG-24) verweist eine E-Rechnung auf Dokumente, die die Forderung belegen: Stundennachweise, Aufmaße, Lieferscheine oder eine öffentliche Ausschreibung. Technisch landet all das im Rechnungskopf als ram:AdditionalReferencedDocument – auch die Ausschreibungs- oder Losreferenz (BT-17) und die Objektkennung (BT-18), die nur über den Dokumenttyp unterschieden werden. Dieser Artikel zeigt den schnellen Weg zum Schreiben mit AddAdditionalReferencedDocument und vor allem das Auslesen eingehender Rechnungen. ### Felder FeldBedeutungSDK (Lesen) [BT-122](https://www.zugferdpro.com/bt/bt-122/)Kennung der Unterlage (Dokumenttyp 916)IssuerAssignedID [BT-17](https://www.zugferdpro.com/bt/bt-17/)Ausschreibungs- oder Losreferenz (Dokumenttyp 50)IssuerAssignedID [BT-18](https://www.zugferdpro.com/bt/bt-18/)Objektkennung (Dokumenttyp 130)IssuerAssignedID, Schema in ReferenceTypeCode –Dokumenttyp (UNTDID 1001: 916, 50 oder 130)TypeCode [BT-123](https://www.zugferdpro.com/bt/bt-123/)Beschreibung der UnterlageName [BT-124](https://www.zugferdpro.com/bt/bt-124/)Bezugsort (URL) der UnterlageURIID [BT-125](https://www.zugferdpro.com/bt/bt-125/)Anhangsdokument mit Dateiname und MIME-TypFileName, MimeType ### Schreiben: Vergabenummer und Belegreferenz [AddAdditionalReferencedDocument](https://www.zugferdpro.com/api/addadditionalreferenceddocument/) legt mit einem Aufruf einen Eintrag aus Kennung und Dokumenttyp an. Achtung: Der zweite Parameter heißt zwar ReferenceTypeCode, das SDK speichert ihn aber als Dokumenttyp (TypeCode). Sind Kennung oder Dokumenttyp leer, wird nichts angelegt. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf, Parteien und Positionen setzen ... ' BT-17: Vergabe-/Losnummer der Ausschreibung alo.AddAdditionalReferencedDocument("VG-2026-0815", "50") ' BT-122: Kennung eines Belegs, z. B. eines Stundennachweises alo.AddAdditionalReferencedDocument("STD-2026-09", "916") ``` Beim Speichern als ZUGFeRD 2.x, Factur-X oder XRechnung schreibt das SDK die Kennung als IssuerAssignedID. Ist sie eine Web-Adresse (http bzw. https), wird sie zusätzlich als URIID (BT-124) ausgegeben. Ist die Rechnung auf BASIC eingestellt, stellt das SDK sie auf EN 16931 (COMFORT) um, denn BG-24 gibt es erst ab diesem Profil. Brauchen Sie eine Beschreibung (BT-123), einen getrennten Bezugsort (BT-124), das Schema der Objektkennung (BT-18-1) oder einen eingebetteten Anhang (BT-125), verwenden Sie [Add_AdditionalReferencedDocument](https://www.zugferdpro.com/api/add_additionalreferenceddocument/) bzw. [Add_AdditionalReferencedFile](https://www.zugferdpro.com/api/add_additionalreferencedfile/) – siehe [Vergabenummer und Objektkennung](https://www.zugferdpro.com/angabe-von-vergabenummer-und-objektkennung/) und [Unterlagen in die XML einbetten](https://www.zugferdpro.com/unterlagen-in-zugferd-xrechnung-xml-einbetten/). ### Lesen: alle Unterlagen einer Rechnung [AdditionalReferencedDocumentCount](https://www.zugferdpro.com/api/additionalreferenceddocumentcount/) liefert die Anzahl der Einträge im Rechnungskopf, [ReadAdditionalReferencedDocument](https://www.zugferdpro.com/api/readadditionalreferenceddocument/) füllt die Felder eines Eintrags per Referenz. Der Index beginnt bei 0. Den Inhalt eines eingebetteten Anhangs gibt diese Methode nicht zurück – dafür gibt es [GetAdditionalReferencedFile](https://www.zugferdpro.com/api/getadditionalreferencedfile/), das ihn als Byte-Array liefert. ReadAdditionalReferencedDocument füllt die Ausgaben für jeden vorhandenen Index, auch für die häufigen Einträge ohne URL (BT-124); nicht vorhandene Angaben kommen als leere Zeichenkette zurück. In älteren Versionen des SDK blieben die Variablen bei Einträgen ohne URIID unverändert – dort hilft GetAdditionalReferencedFile, das jeden Eintrag liefert. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.pdf", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.AdditionalReferencedDocumentCount() - 1 Dim Kennung As String = "", Ort As String = "", Typ As String = "", Beschreibung As String = "" Dim MimeCode As String = "", Dateiname As String = "", Datum As String = "", DatumFormat As String = "" Dim Schema As String = "", MimeType As String = "" alo.ReadAdditionalReferencedDocument(i, Kennung, Ort, Typ, Beschreibung, MimeCode, Dateiname, Datum, DatumFormat, Schema, MimeType) Dim Anhang() As Byte = {} If Dateiname <> "" Then ' Eingebetteten Anhang (BT-125) als Byte-Array holen Dim LineID As String = "" Anhang = alo.GetAdditionalReferencedFile(i, Ort, Dateiname, MimeType, Kennung, LineID, Typ, Schema, Datum, Beschreibung) End If Select Case Typ Case "50" : Console.WriteLine("Vergabenummer (BT-17): " & Kennung) Case "130" : Console.WriteLine("Objektkennung (BT-18): " & Kennung & " Schema " & Schema) Case Else : Console.WriteLine("Unterlage (BT-122): " & Kennung & " – " & Beschreibung & " " & Ort) End Select If Dateiname <> "" Then Console.WriteLine(" Anhang: " & Dateiname & " (" & MimeType & ")") Next End If ``` VBA / VB6 (COM) – AdditionalReferencedFileCount liefert dieselbe Anzahl wie AdditionalReferencedDocumentCount. Die Variablen müssen als String deklariert sein und sollten vor jedem Aufruf geleert werden: ``` Dim i As Long Dim Kennung As String, Ort As String, Typ As String, Beschreibung As String For i = 0 To alo.AdditionalReferencedFileCount - 1 Kennung = "": Ort = "": Typ = "": Beschreibung = "" alo.ReadAdditionalReferencedDocument i, Kennung, Ort, Typ, Beschreibung Debug.Print i, Typ, Kennung, Beschreibung, Ort Next i ``` ### Hinweise - Profile: BG-24 mit BT-17, BT-18 und BT-122 bis BT-125 gibt es ab EN 16931 (COMFORT), also auch in EXTENDED und XRechnung. - MimeCode und MimeType: Beide Ausgaben von ReadAdditionalReferencedDocument enthalten den MIME-Typ des Anhangs (z. B. application/pdf ), sofern einer vorhanden ist. - Im selben Programmlauf angelegt: Lesen Sie einen Eintrag, den Sie gerade erst mit AddAdditionalReferencedDocument angelegt haben (also ohne Speichern und erneutes Einlesen), steht die Kennung im Parameter URIID , nicht in IssuerAssignedID . - Das Belegdatum (optionale Parameter IssueDateTime und Document_DateFormat ) ist kein Feld der EN 16931. Für EN 16931 und XRechnung genügen Kennung und Dokumenttyp. - Objektkennungen auf Positionsebene ( BT-128 ) sind ein eigenes Feld, siehe Rechnungsbezugsobjekt BT-128 . ### Häufige Fragen #### Wo trage ich die Vergabenummer einer öffentlichen Ausschreibung ein? In BT-17, technisch ein AdditionalReferencedDocument mit Dokumenttyp 50. Im SDK zum Beispiel mit AddAdditionalReferencedDocument("VG-2026-0815", "50"). #### Wie erkenne ich beim Lesen, ob es sich um BT-17, BT-18 oder eine Unterlage handelt? Am Dokumenttyp im Parameter TypeCode: 50 steht für die Ausschreibungs- oder Losreferenz, 130 für die Objektkennung, 916 für eine rechnungsbegründende Unterlage. #### Wie komme ich an eine eingebettete Datei? Mit GetAdditionalReferencedFile. Die Methode gibt den Inhalt als Byte-Array zurück und füllt Dateiname und MIME-Typ. --- ## Rechnungsposition: Preis, Steuer und Zeitraum URL: https://www.zugferdpro.com/rechnungsposition-preis-steuer-und-zeitraum-bg-26-bis-bg-31/ Date: 2026-10-07 Business terms: BG-26, BG-29, BG-30, BG-25, BG-31, BT-129, BT-130, BT-131, BT-134, BT-135, BT-146, BT-147, BT-148, BT-149, BT-150, BT-151, BT-152 SDK methods: AddProduct_Comfort, ItemWriteBillingPeriod, VatCategoryCode Jede Rechnungsposition (BG-25) besteht aus mehreren Gruppen: den Preisangaben (BG-29), der Umsatzsteuer der Position (BG-30), den Artikelinformationen (BG-31) und optional einem Positionszeitraum (BG-26). Das Aloaha ZUGFeRD SDK legt Preis, Steuer und Artikel in einem Aufruf von AddProduct_Comfort an; den Zeitraum ergänzt ItemWriteBillingPeriod. ### Preis (BG-29) Parameter von AddProduct_ComfortFeldInhalt NetPrice[BT-146](https://www.zugferdpro.com/bt/bt-146/)Nettopreis je Einheit (nach Abzug des Preisrabatts) AllowanceAmount[BT-147](https://www.zugferdpro.com/bt/bt-147/)Rabatt auf den Stückpreis GrossPrice[BT-148](https://www.zugferdpro.com/bt/bt-148/)Bruttopreis je Einheit (vor Rabatt) BasisQuantity[BT-149](https://www.zugferdpro.com/bt/bt-149/)Basismenge zum Preis, z. B. 1 oder 100 BasisQuantityUnitCode[BT-150](https://www.zugferdpro.com/bt/bt-150/)Einheit der Basismenge, z. B. C62 ### Umsatzsteuer der Position (BG-30) Parameter von AddProduct_ComfortFeldInhalt TaxTypeCode–Steuerart, immer VAT TAXCategoryCode[BT-151](https://www.zugferdpro.com/bt/bt-151/)Umsatzsteuerkategorie: S (Normalsatz), Z, E, AE (Reverse Charge), K, G, O, L, M TAXPercent[BT-152](https://www.zugferdpro.com/bt/bt-152/)Steuersatz der Position, z. B. 19.00 Den Kategoriecode liefert bequem die Eigenschaft VatCategoryCode, zum Beispiel alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) für „S“. ### Beispiel ``` Dim MwStKat As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) alo.AddProduct_Comfort("1", "", "ART-100", "10.00", "C62", "Papier A4", "500 Blatt", "5.00", "EUR", "1.00", "C62", False, "", "EUR", "", "5.00", "EUR", "1.00", "C62", "VAT", MwStKat, "19.00", "", "50.00", "EUR", "", "") ``` Alle 27 Parameter erklärt der Artikel [Der Rechnung Posten mit AddProduct_Comfort hinzufügen](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/). ### Positionszeitraum (BG-26) Für Leistungen über einen Zeitraum – Miete, Wartung, Abonnements – kann jede Position einen eigenen Zeitraum tragen: Beginn ([BT-134](https://www.zugferdpro.com/bt/bt-134/)) und Ende ([BT-135](https://www.zugferdpro.com/bt/bt-135/)). Der Index der Position beginnt bei 0, Datumsangaben im Format JJJJMMTT: ``` alo.ItemWriteBillingPeriod(0, "20261001", "20261031") ``` Für den Zeitraum der ganzen Rechnung gibt es WriteBillingPeriod, siehe [Beginn und Ende der Rechnungsperiode](https://www.zugferdpro.com/beginn-und-ende-der-rechnungsperiode/). ### Häufige Fragen #### Was ist der Unterschied zwischen Brutto- und Nettopreis einer Position? Der Bruttopreis (BT-148) ist der Stückpreis vor Rabatt, der Nettopreis (BT-146) der Stückpreis nach Abzug des Preisrabatts (BT-147). Beide verstehen sich ohne Umsatzsteuer. #### Muss jede Position einen Steuersatz haben? Ja. Jede Position trägt eine Umsatzsteuerkategorie (BT-151); bei Kategorie S zusätzlich den Steuersatz (BT-152). #### Darf das Ende des Positionszeitraums vor dem Beginn liegen? Nein. Sind beide Daten angegeben, muss das Enddatum gleich oder nach dem Anfangsdatum liegen. --- ## Registernummer und globale Kennungen lesen (BT-30, BT-47, BT-71) URL: https://www.zugferdpro.com/registernummer-und-globale-kennungen-bt-30-bt-47-bt-71/ Date: 2026-10-07 Business terms: BT-30, BT-47, BT-71, BT-29, BG-4, BG-7, BG-13, BT-46, BT-157, BT-70 SDK methods: AddShipToTradePartyGlobalID, FillZUGFeRD_Structure, GetShipToTradeParty, GlobalID2String, GlobalIDFromString, ReadBuyerLegalID, ReadSellerLegalID, WriteShipToTradeParty E-Rechnungen identifizieren Unternehmen und Orte auf mehreren Wegen: über die Registernummer (Handelsregister o. Ä.) von Verkäufer (BT-30) und Käufer (BT-47) und über globale Kennungen wie GLN oder DUNS, etwa beim Verkäufer ([BT-29](https://www.zugferdpro.com/bt/bt-29/)) oder beim Lieferort (BT-71). Zu jeder Kennung kann ein Schema nach ISO/IEC 6523 gehören, z. B. 0088 für die GLN. Dieser Artikel zeigt, wie Sie Registernummern samt Schema auslesen, Schemacodes umwandeln und dem Lieferort eine globale Kennung geben. ### Übersicht FeldBedeutungSDK [BT-30](https://www.zugferdpro.com/bt/bt-30/), BT-30-1Kennung der rechtlichen Registrierung des Verkäufers und ihr SchemaReadSellerLegalID(LegalID, Schema) [BT-47](https://www.zugferdpro.com/bt/bt-47/), BT-47-1Kennung der rechtlichen Registrierung des Käufers und ihr SchemaReadBuyerLegalID(LegalID, Schema) [BT-71](https://www.zugferdpro.com/bt/bt-71/), BT-71-1Kennung des Lieferorts als globale Kennung mit SchemaAddShipToTradePartyGlobalID(IDVal, IDType) BT-29-1, BT-46-1, BT-71-1, [BT-157-1](https://www.zugferdpro.com/bt/bt-157/)Schema einer globalen Kennung (ISO 6523)GlobalIDFromString(s) ### Registernummer mit Schema lesen Geschrieben werden die Registernummern über die Eigenschaften SellerLegalID und BuyerLegalID; das zeigt der Artikel [Handelsname und Registernummer in der E-Rechnung](https://www.zugferdpro.com/handelsname-und-rechtliche-angaben-bt-28-bt-33-bt-45-bt-47/). Beim Lesen geben diese Eigenschaften nur die Nummer zurück, nicht das Schema. ReadSellerLegalID und ReadBuyerLegalID liefern beides über Referenzparameter: ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then Dim vNummer As String = "", vSchema As String = "" alo.ReadSellerLegalID(vNummer, vSchema) ' BT-30 / BT-30-1 Dim kNummer As String = "", kSchema As String = "" alo.ReadBuyerLegalID(kNummer, kSchema) ' BT-47 / BT-47-1 Console.WriteLine("Verkäufer: " & vNummer & If(vSchema <> "", " (Schema " & vSchema & ")", "")) Console.WriteLine("Käufer: " & kNummer & If(kSchema <> "", " (Schema " & kSchema & ")", "")) End If ``` VBA / VB6 (COM) – deklarieren Sie die Variablen als String, sonst kann VBA sie nicht als Referenz übergeben: ``` Dim Nummer As String, Schema As String alo.ReadSellerLegalID Nummer, Schema ``` Ist keine Registernummer vorhanden, erhalten Sie leere Zeichenketten. Für eine deutsche Handelsregisternummer wie „HRB 12345“ ist das Schema meist leer; ein Schema steht z. B. bei französischen SIREN-Nummern (0002). Das gilt für CII- und UBL-Rechnungen gleichermaßen: Bei UBL übernimmt das SDK das Schema aus dem Attribut schemeID von cac:PartyLegalEntity/cbc:CompanyID. In älteren Versionen des SDK blieb das Schema beim Einlesen einer UBL-Rechnung leer. ### Schemacodes umwandeln GlobalIDFromString wandelt einen vierstelligen ISO-6523-Code in einen Wert der Aufzählung GlobalIDSchemas um. Das ist praktisch, wenn Sie Kennungen in Ihrer Software nach Typ verarbeiten wollen: ``` Dim art As Aloaha_ZUGFeRD.iXML.GlobalIDSchemas = alo.GlobalIDFromString("0088") If art = Aloaha_ZUGFeRD.iXML.GlobalIDSchemas.GLN Then Console.WriteLine("Kennung ist eine GLN") End If ' Gegenrichtung: Aufzählung -> Code Dim code As String = alo.GlobalID2String(Aloaha_ZUGFeRD.iXML.GlobalIDSchemas.DUNS) ' "0060" ``` CodeGlobalIDSchemasBedeutung 0002SireneSIRENE (Frankreich) 0009SiretCodeSIRET (Frankreich) 0021SwiftSWIFT 0060DUNSD-U-N-S-Nummer 0088GLNGlobal Location Number (GS1) 0160EANGTIN/EAN (GS1) 0177ODETTEODETTE 0208CompanyNumberUnternehmensnummer (Belgien) Jeder andere Text – auch ein Code ohne führende Nullen wie "88" – ergibt GlobalIDSchemas.Unknown. GlobalID2String liefert für Unknown den Text "0000". ### Globale Kennung des Lieferorts (BT-71) Hat der Lieferort eine GLN, setzen Sie sie mit AddShipToTradePartyGlobalID. Ist der zweite Parameter leer, verwendet das SDK das Schema 0088 (GLN). Ein erneuter Aufruf ersetzt den vorherigen Wert; ist die Kennung leer, passiert nichts. ``` alo.WriteShipToTradeParty("Musterfirma GmbH – Lager Süd", "80331", "München", "Lagerstraße 7", "", "DE") alo.AddShipToTradePartyGlobalID("4000001123452", "0088") ' BT-71 / BT-71-1 ``` Ergebnis in der XML: ``` 4000001123452 Musterfirma GmbH – Lager Süd ... ``` Dieselbe Kennung können Sie auch über die letzten beiden Parameter von WriteShipToTradeParty (GlobalID, GlobalIDSchemeID) übergeben. Gelesen wird sie mit GetShipToTradeParty: ``` Dim name As String = "", plz As String = "", ort As String = "", zeile1 As String = "", zeile2 As String = "" Dim land As String = "", ortID As String = "", ustid As String = "", leitweg As String = "", zeile3 As String = "" Dim gid As String = "", gidSchema As String = "" alo.GetShipToTradeParty(name, plz, ort, zeile1, zeile2, land, ortID, ustid, leitweg, zeile3, gid, gidSchema) If alo.GlobalIDFromString(gidSchema) = Aloaha_ZUGFeRD.iXML.GlobalIDSchemas.GLN Then Console.WriteLine("GLN Lieferort: " & gid) ``` Die vollständige Lieferanschrift beschreibt der Artikel [Lieferanschrift in der E-Rechnung](https://www.zugferdpro.com/lieferanschrift-in-der-e-rechnung-bt-75-bis-bt-80/). ### Hinweise zu Profilen - BT-30 und BT-47 sind schon im Profil MINIMUM erlaubt. - BT-71 gibt es ab BASIC WL. Eine Lieferanschrift, die nur aus der globalen Kennung besteht, schreibt das SDK nur, wenn Kennung und Schema vorhanden sind. - Die globale Kennung des Verkäufers (BT-29) setzen Sie mit AddSellerGlobalID , die des Käufers (BT-46) mit AddBuyerGlobalID – siehe Kreditorennummer (BT-29) . --- ## Rechnungspositionen mit Trade_Item-Eigenschaften lesen und ändern URL: https://www.zugferdpro.com/rechnungspositionen-ueber-trade_item-eigenschaften-lesen-und-aendern/ Date: 2026-10-07 Business terms: BG-31, BT-153, BT-154, BT-155, BT-156, BG-25, BT-157, BT-158, BT-159, BG-32, BG-26, BG-29, BG-30 SDK methods: FillZUGFeRD_Structure, TradeItemsCount, Trade_ItemTradeBuyerAssignedID, Trade_ItemTradeDescription, Trade_ItemTradeProduct, Trade_ItemTradeProductName, Trade_ItemTradeSellerAssignedID Mit AddProduct_Comfort legen Sie eine Rechnungsposition (BG-25) an. Wollen Sie eine Position danach noch ändern oder aus einer eingelesenen Rechnung auslesen, nutzen Sie die Trade_Item-Eigenschaften des Aloaha ZUGFeRD SDK. Sie erwarten als Argument den Index der Position und greifen direkt auf deren Daten zu. Dieser Artikel behandelt die Artikelinformationen (BG-31): Name, Beschreibung und Artikelnummern. Preis, Menge, Steuer und Zeitraum der Position beschreibt der Artikel [Preis, Menge, Steuer und Zeitraum einer Position ändern](https://www.zugferdpro.com/preis-menge-steuer-und-zeitraum-einer-position-aendern/). ### Übersicht FeldBedeutungEigenschaftTyp [BT-153](https://www.zugferdpro.com/bt/bt-153/)Artikelname (Pflichtfeld)[Trade_ItemTradeProductName](https://www.zugferdpro.com/api/trade_itemtradeproductname/)String [BT-154](https://www.zugferdpro.com/bt/bt-154/)Artikelbeschreibung[Trade_ItemTradeDescription](https://www.zugferdpro.com/api/trade_itemtradedescription/)String [BT-155](https://www.zugferdpro.com/bt/bt-155/)Artikelkennung des Verkäufers (Ihre Artikelnummer)[Trade_ItemTradeSellerAssignedID](https://www.zugferdpro.com/api/trade_itemtradesellerassignedid/)String [BT-156](https://www.zugferdpro.com/bt/bt-156/)Artikelkennung des Käufers (Artikelnummer des Kunden)[Trade_ItemTradeBuyerAssignedID](https://www.zugferdpro.com/api/trade_itemtradebuyerassignedid/)String BG-31gesamte Artikelinformation einschließlich [BT-157](https://www.zugferdpro.com/bt/bt-157/) (GTIN), [BT-158](https://www.zugferdpro.com/bt/bt-158/), [BT-159](https://www.zugferdpro.com/bt/bt-159/) und Attributen (BG-32)[Trade_ItemTradeProduct](https://www.zugferdpro.com/api/trade_itemtradeproduct/)Structure iXML.TradeProduct Alle Eigenschaften sind lesbar und schreibbar. Der Index beginnt bei 0; die letzte Position hat den Index TradeItemsCount - 1. ### Lesen Nach dem Einlesen einer Rechnung mit FillZUGFeRD_Structure (XML oder ZUGFeRD-PDF) durchlaufen Sie die Positionen: ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.TradeItemsCount - 1 Console.WriteLine("Position " & (i + 1)) Console.WriteLine(" Artikelnummer: " & alo.Trade_ItemTradeSellerAssignedID(i)) Console.WriteLine(" Kunden-Nr.: " & alo.Trade_ItemTradeBuyerAssignedID(i)) Console.WriteLine(" Name: " & alo.Trade_ItemTradeProductName(i)) Console.WriteLine(" Beschreibung: " & alo.Trade_ItemTradeDescription(i)) Next End If ``` Die vier String-Eigenschaften liefern nie Nothing: Fehlt ein Wert in der Rechnung, erhalten Sie eine leere Zeichenkette. ### Ändern Die String-Eigenschaften schreiben den Wert direkt in die Position. Im folgenden Beispiel wurde Position 0 zuvor mit [AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/) angelegt: ``` alo.Trade_ItemTradeProductName(0) = "Kopierpapier A4, 80 g/m²" alo.Trade_ItemTradeDescription(0) = "Karton mit 5 Paketen à 500 Blatt" alo.Trade_ItemTradeSellerAssignedID(0) = "ART-100" alo.Trade_ItemTradeBuyerAssignedID(0) = "K-4711" ' Artikelnummer aus der Bestellung des Kunden ``` Der Wert wird unverändert gespeichert; beim Erzeugen der XML entfernt das SDK führende und folgende Leerzeichen und lässt leere Felder weg. Eine leere Zeichenkette löscht ein Feld also. Beim Artikelnamen (BT-153) sollten Sie das nicht tun, denn er ist Pflicht. ### Die ganze Artikelinformation: Trade_ItemTradeProduct Trade_ItemTradeProduct liefert die vollständige Struktur iXML.TradeProduct mit den Feldern Name.Value, Description.Value, SellerAssignedID, BuyerAssignedID, GlobalID (BT-157 mit Schema), OriginTradeCountry (BT-159) sowie den Arrays DesignatedProductClassification (BT-158) und ApplicableProductCharacteristics (BG-32). Wichtig: TradeProduct ist eine .NET-Structure, also ein Werttyp. Die Eigenschaft gibt eine Kopie zurück. Eine Änderung an der Kopie wirkt erst, wenn Sie die Struktur wieder zuweisen – lesen, ändern, zurückschreiben: ``` Dim p As Aloaha_ZUGFeRD.iXML.TradeProduct = alo.Trade_ItemTradeProduct(0) p.Name.Value = "Kopierpapier A4, 80 g/m²" p.GlobalID.GlobalID = "4012345678901" ' BT-157: GTIN p.GlobalID.GlobalID_schemeID = "0160" ' BT-157-1: Schema GTIN alo.Trade_ItemTradeProduct(0) = p ' zurückschreiben ``` Eine direkte Zuweisung wie alo.Trade_ItemTradeProduct(0).Name.Value = "…" lehnt der VB.NET-Compiler ab („Der Ausdruck ist ein Wert und kann daher nicht das Ziel einer Zuweisung sein“), in C# ebenso. Beim Zurückschreiben ersetzt das SDK die gesamte Artikelinformation der Position – lesen Sie die Struktur deshalb immer zuerst aus, statt eine neue, leere Struktur zuzuweisen, sonst gehen Klassifizierung, Herkunftsland und Attribute verloren. Die Arrays in der Struktur können Nothing sein, wenn die Position keine Klassifizierung oder keine Attribute hat. Prüfen Sie das vor einer Schleife: ``` Dim prod As Aloaha_ZUGFeRD.iXML.TradeProduct = alo.Trade_ItemTradeProduct(0) If prod.ApplicableProductCharacteristics IsNot Nothing Then For Each c As Aloaha_ZUGFeRD.iXML.TradeProductCharacteristic In prod.ApplicableProductCharacteristics Console.WriteLine(c.Description & ": " & c.CharacteristicsValue) Next End If ``` Zum Hinzufügen von Klassifizierung, Herkunftsland und Attributen gibt es eigene Methoden, siehe [Artikelmerkmale, Klassifizierung und Herkunftsland](https://www.zugferdpro.com/artikelmerkmale-klassifizierung-und-herkunftsland-bt-158-bis-bt-161/). ### Ungültiger Index Die Eigenschaften werfen keine Ausnahme und setzen keinen Fehlertext. Ist der Index zu groß oder negativ oder enthält die Rechnung keine Positionen, - liefern die String-Eigenschaften eine leere Zeichenkette, - liefert Trade_ItemTradeProduct eine leere Struktur, deren Felder Nothing sind, - wird eine Zuweisung stillschweigend ignoriert. Eine neue Position entsteht dadurch nicht; neue Positionen legen Sie mit AddProduct_Comfort an. Begrenzen Sie Schleifen deshalb immer mit TradeItemsCount. ### VBA, VB6 und Access Die vier String-Eigenschaften funktionieren auch über COM, weil sie nur Zeichenketten übergeben: ``` Dim i As Long For i = 0 To alo.TradeItemsCount - 1 Debug.Print alo.Trade_ItemTradeSellerAssignedID(i), alo.Trade_ItemTradeProductName(i) Next i alo.Trade_ItemTradeBuyerAssignedID(0) = "K-4711" ``` Die Struktur aus Trade_ItemTradeProduct und deren verschachtelte Felder lassen sich in VBA dagegen nicht zuverlässig verwenden. Warum das so ist und welche Aufrufe stattdessen helfen, erklärt [Positionswerte in VBA/Access auslesen](https://www.zugferdpro.com/positionswerte-in-vba-und-access-auslesen/). ### Profile Den Artikelnamen (BT-153) gibt es in allen Profilen ab BASIC. Beschreibung (BT-154) sowie die Artikelkennungen von Verkäufer und Käufer (BT-155, BT-156) sieht der Standard ab dem Profil EN 16931 (COMFORT) vor. Die Trade_Item-Eigenschaften schalten das Profil nicht um; erstellen Sie die Rechnung daher mindestens im Profil COMFORT, wenn Sie diese Felder nutzen. ### Häufige Fragen #### Warum wirkt meine Änderung an Trade_ItemTradeProduct nicht? Die Eigenschaft liefert eine Kopie der Struktur. Ändern Sie die Kopie und weisen Sie sie anschließend wieder alo.Trade_ItemTradeProduct(Index) zu. #### Ist der Positionsindex 0- oder 1-basiert? 0-basiert. Die erste Position hat den Index 0, die letzte TradeItemsCount - 1. Die Positionsnummer in der Rechnung (BT-126) ist davon unabhängig. #### Kann ich mit diesen Eigenschaften eine neue Position anlegen? Nein. Bei einem Index außerhalb der vorhandenen Positionen wird die Zuweisung ignoriert. Neue Positionen legen Sie mit AddProduct_Comfort an. --- ## Preis, Menge, Steuer und Zeitraum einer Position lesen und ändern URL: https://www.zugferdpro.com/preis-menge-steuer-und-zeitraum-einer-position-aendern/ Date: 2026-10-07 Business terms: BG-29, BG-26, BT-129, BG-30, BG-25, BT-130, BT-131, BT-132, BT-134, BT-135, BT-146, BT-148, BT-149, BT-150, BT-151, BT-152, BG-22, BG-23, BG-27, BG-28 SDK methods: FillZUGFeRD_Structure, ItemWriteBillingPeriod, TradeItemsCount, Trade_ItemTradeAgreement, Trade_ItemTradeBillingPeriod, Trade_ItemTradeDelivery, Trade_ItemTradeSettlement Neben den Artikelinformationen besteht jede Rechnungsposition (BG-25) aus Preisangaben, Liefermenge, Steuer und optional einem Zeitraum. Für jeden dieser Teile hat das Aloaha ZUGFeRD SDK eine Trade_Item-Eigenschaft, die die zugehörige Struktur einer vorhandenen Position liefert und wieder entgegennimmt. Wie die Eigenschaften grundsätzlich arbeiten – 0-basierter Index, Strukturen als Kopie, Verhalten bei ungültigem Index – erklärt der Artikel [Rechnungspositionen mit Trade_Item-Eigenschaften lesen und ändern](https://www.zugferdpro.com/rechnungspositionen-ueber-trade_item-eigenschaften-lesen-und-aendern/). ### Übersicht EigenschaftStrukturWichtige Felder [Trade_ItemTradeAgreement](https://www.zugferdpro.com/api/trade_itemtradeagreement/)iXML.TradeAgreement – Preisangaben (BG-29)NetPriceProductTradePrice.ChargeAmount.Amount = Nettopreis ([BT-146](https://www.zugferdpro.com/bt/bt-146/))GrossPriceProductTradePrice.ChargeAmount.Amount = Bruttopreis ([BT-148](https://www.zugferdpro.com/bt/bt-148/))NetPriceProductTradePrice.BasisQuantity = Basismenge und Einheit ([BT-149](https://www.zugferdpro.com/bt/bt-149/), [BT-150](https://www.zugferdpro.com/bt/bt-150/))BuyerOrderReferencedDocument.LineID = Bestellposition ([BT-132](https://www.zugferdpro.com/bt/bt-132/)) [Trade_ItemTradeDelivery](https://www.zugferdpro.com/api/trade_itemtradedelivery/)iXML.TradeDelivery – Lieferangaben der PositionBilledQuantity.BasisQuantity = Menge ([BT-129](https://www.zugferdpro.com/bt/bt-129/))BilledQuantity.UnitCode = Einheit ([BT-130](https://www.zugferdpro.com/bt/bt-130/)) [Trade_ItemTradeSettlement](https://www.zugferdpro.com/api/trade_itemtradesettlement/)iXML.TradeItemSettlement – Steuer und Betrag (BG-30)TradeTax.CategoryCode = Steuerkategorie ([BT-151](https://www.zugferdpro.com/bt/bt-151/))TradeTax.RateApplicablePercent = Steuersatz ([BT-152](https://www.zugferdpro.com/bt/bt-152/))Monetary_Summation.LineTotalAmount.Amount = Nettobetrag ([BT-131](https://www.zugferdpro.com/bt/bt-131/))AppliedTradeAllowanceCharge = Ab- und Zuschläge der Position (BG-27, BG-28) [Trade_ItemTradeBillingPeriod](https://www.zugferdpro.com/api/trade_itemtradebillingperiod/)iXML.BillingPeriod – Positionszeitraum (BG-26)StartDateTime = Beginn ([BT-134](https://www.zugferdpro.com/bt/bt-134/))EndDateTime = Ende ([BT-135](https://www.zugferdpro.com/bt/bt-135/)), jeweils mit Document_Date und Document_DateFormat Alle Werte sind Zeichenketten. Beträge und Mengen stehen mit Dezimalpunkt darin, so wie in der XML (5.00). ### Lesen ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.TradeItemsCount - 1 Dim pr As Aloaha_ZUGFeRD.iXML.TradeAgreement = alo.Trade_ItemTradeAgreement(i) Dim lf As Aloaha_ZUGFeRD.iXML.TradeDelivery = alo.Trade_ItemTradeDelivery(i) Dim st As Aloaha_ZUGFeRD.iXML.TradeItemSettlement = alo.Trade_ItemTradeSettlement(i) Dim zr As Aloaha_ZUGFeRD.iXML.BillingPeriod = alo.Trade_ItemTradeBillingPeriod(i) Console.WriteLine("Menge: " & lf.BilledQuantity.BasisQuantity & " " & lf.BilledQuantity.UnitCode) Console.WriteLine("Nettopreis: " & pr.NetPriceProductTradePrice.ChargeAmount.Amount) Console.WriteLine("Steuer: " & st.TradeTax.CategoryCode & " " & st.TradeTax.RateApplicablePercent & " %") Console.WriteLine("Nettobetrag: " & st.Monetary_Summation.LineTotalAmount.Amount) Console.WriteLine("Zeitraum: " & zr.StartDateTime.Document_Date & " - " & zr.EndDateTime.Document_Date) Next End If ``` Felder, die in der Rechnung fehlen, sind Nothing – etwa der Bruttopreis oder der Zeitraum. Beim Verketten mit & ist das harmlos; vor Aufrufen wie .Trim oder Val prüfen Sie mit String.IsNullOrEmpty. Auch das Array AppliedTradeAllowanceCharge kann Nothing sein, wenn die Position keine Ab- oder Zuschläge hat. ### Ändern: lesen, anpassen, zurückschreiben Alle vier Eigenschaften liefern eine Kopie der Struktur. Ändern Sie die Kopie und weisen Sie sie anschließend wieder zu. Beispiel: Position 0 wurde mit 10 Stück zu 5,00 EUR angelegt und soll auf 12 Stück geändert werden. ``` ' Menge (BT-129) Dim lf As Aloaha_ZUGFeRD.iXML.TradeDelivery = alo.Trade_ItemTradeDelivery(0) lf.BilledQuantity.BasisQuantity = "12" alo.Trade_ItemTradeDelivery(0) = lf ' Nettobetrag der Position (BT-131) selbst nachrechnen: 12 x 5.00 Dim st As Aloaha_ZUGFeRD.iXML.TradeItemSettlement = alo.Trade_ItemTradeSettlement(0) st.Monetary_Summation.LineTotalAmount.Amount = "60.00" alo.Trade_ItemTradeSettlement(0) = st ' Bezug zur Bestellposition (BT-132) Dim pr As Aloaha_ZUGFeRD.iXML.TradeAgreement = alo.Trade_ItemTradeAgreement(0) pr.BuyerOrderReferencedDocument.LineID = "3" alo.Trade_ItemTradeAgreement(0) = pr ``` Wie Sie die Bestellpositionsnummer aus dem System Ihres Kunden (z. B. SAP) in jeder Position übergeben und welcher Weg eine XRechnung als XRechnung erhält, zeigt [Bestellpositionsnummer (BT-132) je Rechnungsposition übergeben](https://www.zugferdpro.com/f-wie-uebergebe-ich-die-positionsnummer-der-bestellung-bt-132-in-der-rechnungsposition/). Die Eigenschaften speichern nur, was Sie zuweisen. Sie rechnen nichts nach: Ändern Sie Menge oder Preis, passen Sie den Nettobetrag der Position (BT-131) selbst an. Dasselbe gilt für die Umsatzsteueraufschlüsselung (BG-23) und die Summen der Rechnung (BG-22). Am einfachsten ändern Sie Positionen, bevor Sie AddTradeTax und WriteTotals aufrufen (siehe [ZUGFeRD-Rechnung in VB.NET erstellen](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/)). Weisen Sie immer die zuvor gelesene Struktur zurück und keine neue: Die Zuweisung ersetzt den ganzen Teil der Position. Eine neue, leere TradeAgreement würde zum Beispiel auch Brutto- und Nettopreis löschen. ### Positionszeitraum (BG-26) Für den Zeitraum ist ItemWriteBillingPeriod meist bequemer, denn es setzt das Datumsformat selbst: ``` alo.ItemWriteBillingPeriod(0, "20261001", "20261031") ``` Über die Struktur geht es ebenso. Ein angegebenes Format übernimmt das SDK beim Speichern unverändert; lassen Sie Document_DateFormat leer, schreibt sie für ZUGFeRD 2.x, Factur-X und XRechnung das Format 102 (JJJJMMTT): ``` Dim zr As Aloaha_ZUGFeRD.iXML.BillingPeriod = alo.Trade_ItemTradeBillingPeriod(0) zr.StartDateTime.Document_Date = "20261001" zr.StartDateTime.Document_DateFormat = "102" zr.EndDateTime.Document_Date = "20261031" zr.EndDateTime.Document_DateFormat = "102" alo.Trade_ItemTradeBillingPeriod(0) = zr ``` Sie können auch nur Beginn oder nur Ende angeben: Das SDK schreibt jedes Datum nur, wenn es gesetzt ist; ein leeres oder fehlendes (Nothing) Datum lässt sie weg. In älteren Versionen des SDK konnte bei fehlendem Beginn ein leeres StartDateTime entstehen – setzen Sie dort das nicht benötigte Datum auf "" und geben Sie das Format immer an. ### Lieferangaben und Profil EXTENDED Die Struktur TradeDelivery enthält außer der Menge auch Felder, die es nur im Profil EXTENDED gibt: PackageQuantity (Packstückanzahl), ShipToTradeParty (abweichende Lieferanschrift der Position) und ActualDeliverySupplyChainEvent (Lieferdatum der Position). Wenn Sie diese Felder direkt in der Struktur setzen, schaltet das SDK das Profil nicht um. Nutzen Sie dafür besser setActualDeliveryDateItem und WriteShipToTradePartyItem, die das Profil auf EXTENDED stellen (WriteShipToTradePartyItem, sobald ein Name, eine Kennung oder eine globale Kennung übergeben wird), oder erstellen Sie die Rechnung gleich im Profil EXTENDED. ### Ab- und Zuschläge der Position Das Array AppliedTradeAllowanceCharge in TradeItemSettlement enthält die Ab- und Zuschläge der Position (BG-27, BG-28). Zum Anlegen und Lesen gibt es eigene Methoden, siehe [Zuschläge und Abschläge je Rechnungsposition](https://www.zugferdpro.com/zuschlaege-und-abschlaege-je-rechnungsposition-bg-27-bg-28/). Den Preisnachlass auf den Stückpreis (BT-147) finden Sie dagegen in TradeAgreement.GrossPriceProductTradePrice.AppliedTradeAllowanceCharge. ### VBA und VB6 Alle vier Eigenschaften liefern verschachtelte .NET-Strukturen. Über COM lassen sich diese in VBA nicht zuverlässig verwenden. Für Steuer und Beträge je Position nutzen Sie dort GetItemTradeTax und ReadTradeItemCSV, für den Zeitraum ItemWriteBillingPeriod; Details in [Positionswerte in VBA/Access auslesen](https://www.zugferdpro.com/positionswerte-in-vba-und-access-auslesen/). ### Häufige Fragen #### Rechnet das SDK den Positionsbetrag nach, wenn ich die Menge ändere? Nein. Die Trade_Item-Eigenschaften speichern nur die zugewiesenen Werte. Nettobetrag der Position (BT-131), Steueraufschlüsselung und Summen passen Sie selbst an. #### Was passiert bei einem ungültigen Positionsindex? Beim Lesen erhalten Sie eine leere Struktur, deren Felder Nothing sind; eine Zuweisung wird ohne Fehlermeldung ignoriert. #### Welches Datumsformat gilt für den Positionszeitraum? Format 102, also JJJJMMTT, zum Beispiel 20261031. ItemWriteBillingPeriod setzt es automatisch; bleibt Document_DateFormat in der Struktur leer, schreibt das SDK für ZUGFeRD 2.x ebenfalls 102. --- ## Umsatzsteuer je Rechnungsposition setzen und lesen (BG-30) URL: https://www.zugferdpro.com/umsatzsteuer-je-rechnungsposition-setzen-und-lesen-bg-30/ Date: 2026-10-07 Business terms: BG-30, BT-151, BT-152, BG-23, BG-25, BT-95, BT-102, BT-118, BT-120, BT-121 SDK methods: AddTradeTax, FillZUGFeRD_Structure, GetItemTradeTax, GetVatTypeByCategoryCode, TaxExemptionReasonCodeStr, TradeItemTaxValues, TradeItemsCount, Trade_ItemTradeTax, VatCategoryCode, WriteItemTradeTax Jede Rechnungsposition (BG-25) trägt eine eigene Gruppe Umsatzsteuerinformationen auf Positionsebene (BG-30): den Code der Umsatzsteuerkategorie ([BT-151](https://www.zugferdpro.com/bt/bt-151/)) und den Steuersatz ([BT-152](https://www.zugferdpro.com/bt/bt-152/)). Beim Anlegen einer Position mit [AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/) setzen Sie beides bereits mit. Mit WriteItemTradeTax ändern oder ergänzen Sie die Steuer einer bestehenden Position nachträglich; zum Auslesen gibt es GetItemTradeTax, Trade_ItemTradeTax und TradeItemTaxValues. Dazu kommen zwei Hilfsfunktionen für Kategorie- und Befreiungscodes. ### Felder und Parameter von WriteItemTradeTax ParameterFeldInhalt ItemIndex–Index der Position, beginnend bei 0 RateApplicablePercent[BT-152](https://www.zugferdpro.com/bt/bt-152/)Steuersatz, z. B. 19.00 CategoryCode[BT-151](https://www.zugferdpro.com/bt/bt-151/)Kategorie: S, Z, E, AE, K, G, O, L, M ReasonBT-X-96Befreiungsgrund als Text (nur EXTENDED) ExemptionReasonCodeBT-X-97Befreiungsgrund als VATEX-Code (nur EXTENDED) CalculatedAmountBT-X-95Steuerbetrag der Position (nur EXTENDED) TypeCodeBT-151-0Steuerart, Standard und bei leerem Wert VAT ### Schreiben VB.NET – die Positionen 0 und 1 wurden zuvor mit AddProduct_Comfort angelegt: ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf und Positionen anlegen ' Position 0: Normalsatz 19 % alo.WriteItemTradeTax(0, "19.00", alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate)) ' Position 1: ermäßigter Satz 7 %, ebenfalls Kategorie S alo.WriteItemTradeTax(1, "7.00", "S") ``` WriteItemTradeTax ersetzt die komplette Steuergruppe der Position. Ist der Index ungültig, passiert nichts. Den Steuersatz schreibt das SDK mit zwei Nachkommastellen in die XML; bei Kategorie O (nicht steuerbar) lässt sie ihn weg. Mit Befreiungsgrund je Position (Profil EXTENDED), hier für eine steuerfreie innergemeinschaftliche Lieferung: ``` Dim Code As String = alo.TaxExemptionReasonCodeStr(Aloaha_ZUGFeRD.iXML.TaxExemptionReasonCodes.VATEX_EU_IC) ' "VATEX-EU-IC" alo.WriteItemTradeTax(2, "0", "K", "Steuerfreie innergemeinschaftliche Lieferung", Code) ``` VBA / VB6 (COM) ``` alo.WriteItemTradeTax 0, "19.00", "S" alo.WriteItemTradeTax 2, "0", "K", "Steuerfreie innergemeinschaftliche Lieferung", "VATEX-EU-IC" ``` ### Wichtig: automatische Umstellung auf EXTENDED Befreiungsgrund, Befreiungscode und Steuerbetrag auf Positionsebene gibt es nur in ZUGFeRD EXTENDED. Sobald Sie Reason, ExemptionReasonCode oder CalculatedAmount füllen, stellt WriteItemTradeTax das Profil auf EXTENDED um und schaltet eine XRechnung (KoSIT) ab. Für Reverse Charge ohne diese Parameter gilt das nicht: Rufen Sie die Methode mit Kategorie AE, leerem Satz oder Satz 0 und ohne Grund auf, ergänzt das SDK den Code VATEX-EU-AE auf Positionsebene nur, wenn die Rechnung bereits EXTENDED ist. Das Profil bleibt dabei unverändert; COMFORT (EN 16931) und XRechnung bleiben erhalten. Befreiungsgrund und -code einer Position schreibt das SDK ohnehin nur im Profil EXTENDED in die XML. In älteren Versionen des SDK stellte bereits der automatisch ergänzte Code das Profil auf EXTENDED um. Der Befreiungsgrund der Rechnung gehört in COMFORT und XRechnung in die Umsatzsteueraufschlüsselung (BG-23) mit [BT-120](https://www.zugferdpro.com/bt/bt-120/) und [BT-121](https://www.zugferdpro.com/bt/bt-121/), also in AddTradeTax: ``` alo.AddTradeTax("0.00", "EUR", "800.00", "EUR", "VAT", "K", "0", "Steuerfreie innergemeinschaftliche Lieferung", "", "", "", Code) ``` ### Lesen VB.NET – GetItemTradeTax füllt die Variablen per Referenz; der Index ist 0-basiert: ``` Dim alo As New Aloaha_ZUGFeRD.XML("IHR-LIZENZSCHLUESSEL") If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.TradeItemsCount - 1 Dim Satz As String = "", Kategorie As String = "", Grund As String = "", GrundCode As String = "" alo.GetItemTradeTax(i, Satz, Kategorie, Grund, GrundCode) Dim Art As Aloaha_ZUGFeRD.iXML.VAT_Category = alo.GetVatTypeByCategoryCode(Kategorie) Console.WriteLine($"Position {i + 1}: {Kategorie} ({Art}) {Satz} % {GrundCode}") Next End If ``` In VB.NET können Sie auch die ganze Struktur holen. Trade_ItemTradeTax liefert ein iXML.Trade_Tax; bei ZUGFeRD 2.x, Factur-X und XRechnung steht der Satz im Feld RateApplicablePercent: ``` Dim Steuer As Aloaha_ZUGFeRD.iXML.Trade_Tax = alo.Trade_ItemTradeTax(0) Console.WriteLine(Steuer.CategoryCode & " " & Steuer.RateApplicablePercent & " " & Steuer.ExemptionReasonCode) ``` Die Eigenschaft ist auch schreibbar (alo.Trade_ItemTradeTax(0) = Steuer). Anders als WriteItemTradeTax stellt der Setter das Profil aber nicht um und setzt keine Codes automatisch. Befreiungsgrund und -code der Position landen deshalb nur dann in der XML, wenn die Rechnung EXTENDED ist. TradeItemTaxValues(ItemNo, ApplicablePercent, CalculatedAmount, TypeCode, CategoryCode, Reason) stammt aus ZUGFeRD 1.0 und liest zuerst das dortige Feld ApplicablePercent. Ist es leer, liefert die Methode den Satz aus RateApplicablePercent – sie funktioniert also auch für Rechnungen nach ZUGFeRD 2.x, Factur-X und XRechnung. Den Befreiungscode liefert sie nicht; nutzen Sie für neue Projekte daher GetItemTradeTax. In älteren Versionen des SDK blieben die Ausgaben bei ZUGFeRD-2.x-Rechnungen leer. ``` Dim Prozent As String = "", Betrag As String = "", Steuerart As String = "", Kat As String = "", Text As String = "" alo.TradeItemTaxValues(0, Prozent, Betrag, Steuerart, Kat, Text) ``` ### Hilfsfunktionen für Codes GetVatTypeByCategoryCode wandelt einen Kategoriecode (BT-151, ebenso [BT-95](https://www.zugferdpro.com/bt/bt-95/), [BT-102](https://www.zugferdpro.com/bt/bt-102/) und [BT-118](https://www.zugferdpro.com/bt/bt-118/)) in die Aufzählung VAT_Category um; VatCategoryCode geht den umgekehrten Weg. CodeVAT_CategoryBedeutung SStandardRateNormalsatz (auch ermäßigter Satz) ZZeroRatedGoodsNullsatz EExemptFromTaxsteuerbefreit AEVATReverseChargeUmkehr der Steuerschuldnerschaft KVATExempt, IntraCommunitySupplyinnergemeinschaftliche Lieferung GFreeExportItemAusfuhr außerhalb der EU OOutsideScopeOfTaxnicht steuerbar L / MCanaryIslands / CeutaMelillaIGIC / IPSI GetVatTypeByCategoryCode ignoriert führende und folgende Leerzeichen sowie Groß- und Kleinschreibung (" ae" ergibt VATReverseCharge); unbekannte Codes ergeben ohne Fehlermeldung StandardRate. Für die innergemeinschaftliche Lieferung gilt der Code K: VatCategoryCode liefert ihn sowohl für VATExempt als auch für IntraCommunitySupply, und GetVatTypeByCategoryCode("K") ergibt VATExempt. In älteren Versionen des SDK ergab IntraCommunitySupply den ungültigen Code „IC“; solche Altdaten liest GetVatTypeByCategoryCode weiterhin als IntraCommunitySupply. TaxExemptionReasonCodeStr macht aus einem Wert der Aufzählung TaxExemptionReasonCodes den Code für BT-121 bzw. BT-X-97, indem sie Unterstriche durch Bindestriche ersetzt: VATEX_EU_AE ergibt VATEX-EU-AE, VATEX_EU_G ergibt VATEX-EU-G. Einzige Ausnahme ist VATEX_132_2: Er ergibt den offiziellen Code VATEX-EU-132 (in älteren Versionen des SDK das ungültige „VATEX-132-2“). In VBA übergeben Sie den Code einfach als Text. ### Profile und Hinweise - BG-30 mit Kategorie und Satz ist ab dem Profil BASIC Pflicht für jede Position. - Befreiungsgrund, Befreiungscode und Steuerbetrag je Position: nur EXTENDED (siehe oben). - Trade_ItemTradeTax gibt eine .NET-Struktur zurück und lässt sich deshalb aus VBA nicht sinnvoll nutzen. Dort nehmen Sie GetItemTradeTax , siehe Positionswerte in VBA/Access auslesen . - Für die Steuersummen der Rechnung siehe Umsatzsteuer / VAT . ### Häufige Fragen #### Wie ändere ich den Steuersatz einer bereits angelegten Position? Mit WriteItemTradeTax(Index, Satz, Kategorie). Die Methode ersetzt die gesamte Steuergruppe BG-30 der Position. #### Warum ist meine Rechnung nach WriteItemTradeTax plötzlich EXTENDED? Weil Sie einen Befreiungsgrund, einen Befreiungscode oder einen Steuerbetrag übergeben haben. Diese Angaben gibt es auf Positionsebene nur in EXTENDED. Kategorie AE ohne Grund stellt das Profil nicht um. #### Welcher Kategoriecode gilt für die innergemeinschaftliche Lieferung? K. In der Aufzählung des SDK entspricht das VAT_Category.VATExempt, als Befreiungscode gehört VATEX-EU-IC dazu. --- ## Verkäufer und Käufer: Anschrift und Kontakt (BG-4 bis BG-9) URL: https://www.zugferdpro.com/verkaeufer-und-kaeufer-anschrift-und-kontakt-bg-4-bis-bg-9/ Date: 2026-10-07 Business terms: BG-5, BG-6, BG-7, BG-8, BG-9, BG-4, BT-27, BT-31, BT-35, BT-36, BT-37, BT-38, BT-39, BT-40, BT-41, BT-42, BT-43, BT-44, BT-46, BT-48, BT-50, BT-51, BT-52, BT-53, BT-54, BT-55, BT-56, BT-57, BT-58, BT-162, BT-163, BT-10 SDK methods: WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson Verkäufer und Käufer bilden in jeder E-Rechnung eigene Gruppen: Verkäufer (BG-4) mit Postanschrift (BG-5) und Kontaktdaten (BG-6), Käufer (BG-7) mit Postanschrift (BG-8) und Kontaktdaten (BG-9). Das Aloaha ZUGFeRD SDK füllt sie mit je zwei Aufrufen. ### Verkäufer ``` ' Name, Anschrift (BG-5) und USt-IdNr. alo.WriteSeller("Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789") ' Kontaktdaten (BG-6) alo.WriteSellerContactPerson("Erika Muster", "Vertrieb", "vertrieb@muster.de", "+49 40 123456") ``` ParameterFeld CompanyName[BT-27](https://www.zugferdpro.com/bt/bt-27/) Name Streetline1, Streetline2, Streetline3[BT-35](https://www.zugferdpro.com/bt/bt-35/), [BT-36](https://www.zugferdpro.com/bt/bt-36/), [BT-162](https://www.zugferdpro.com/bt/bt-162/) City, PostCode, CountryCode_2Letter_ISO[BT-37](https://www.zugferdpro.com/bt/bt-37/), [BT-38](https://www.zugferdpro.com/bt/bt-38/), [BT-40](https://www.zugferdpro.com/bt/bt-40/) VAT_No[BT-31](https://www.zugferdpro.com/bt/bt-31/) USt-IdNr. Person_Name, Department[BT-41](https://www.zugferdpro.com/bt/bt-41/) Kontaktstelle Telephone, email[BT-42](https://www.zugferdpro.com/bt/bt-42/), [BT-43](https://www.zugferdpro.com/bt/bt-43/) Das Bundesland bzw. die Region ([BT-39](https://www.zugferdpro.com/bt/bt-39/)) setzen Sie über die Eigenschaft SellerState. ### Käufer ``` ' Name, Anschrift (BG-8), Kundennummer, USt-IdNr., Leitweg-ID alo.WriteBuyer("Kunde AG", "80331", "München", "Marktplatz 5", "", "DE", "K-4711", "DE987654321", "") ' Kontaktdaten (BG-9) alo.WriteBuyerContactPerson("Max Mustermann", "Einkauf", "einkauf@kunde.de", "+49 89 654321") ``` ParameterFeld CompanyName[BT-44](https://www.zugferdpro.com/bt/bt-44/) Name Streetline1, Streetline2, Streetline3[BT-50](https://www.zugferdpro.com/bt/bt-50/), [BT-51](https://www.zugferdpro.com/bt/bt-51/), [BT-163](https://www.zugferdpro.com/bt/bt-163/) City, PostCode, CountryCode_2Letter_ISO[BT-52](https://www.zugferdpro.com/bt/bt-52/), [BT-53](https://www.zugferdpro.com/bt/bt-53/), [BT-55](https://www.zugferdpro.com/bt/bt-55/) CustomerNo[BT-46](https://www.zugferdpro.com/bt/bt-46/) Kennung des Käufers VAT_No[BT-48](https://www.zugferdpro.com/bt/bt-48/) USt-IdNr. Leitweg_ID[BT-10](https://www.zugferdpro.com/bt/bt-10/) Leitweg-ID (XRechnung) Person_Name, Department[BT-56](https://www.zugferdpro.com/bt/bt-56/) Kontaktstelle Telephone, email[BT-57](https://www.zugferdpro.com/bt/bt-57/), [BT-58](https://www.zugferdpro.com/bt/bt-58/) Die Region des Käufers ([BT-54](https://www.zugferdpro.com/bt/bt-54/)) setzt die Eigenschaft BuyerState. ### Was ist Pflicht? - Name und Ländercode von Verkäufer und Käufer sind immer Pflicht. Straße, Postleitzahl und Ort sollten ab dem Profil BASIC WL angegeben werden; in der XRechnung sind Ort und Postleitzahl für beide Seiten Pflicht. - Für XRechnung verlangt die KoSIT zusätzlich Kontaktdaten des Verkäufers (BG-6) mit Telefon und E-Mail. - Die Kontaktgruppen BG-6 und BG-9 gibt es ab dem Profil EN 16931 (COMFORT). ### Häufige Fragen #### Wo trage ich meine Kundennummer beim Käufer ein? Die Kundennummer, unter der Sie den Käufer führen, ist die Kennung des Käufers (BT-46) – in WriteBuyer der Parameter CustomerNo. Ihre Lieferantennummer beim Kunden gehört dagegen in BT-29. #### Ist die Kontaktperson des Verkäufers Pflicht? In der EN 16931 nicht, in der XRechnung schon: dort müssen Kontaktstelle, Telefon und E-Mail des Verkäufers angegeben werden. --- ## Vertrags-, Projekt- und Lieferavisreferenz lesen (BT-11, BT-12, BT-16) URL: https://www.zugferdpro.com/vertrags-projekt-und-lieferavis-referenz-bt-11-bt-12-bt-16/ Date: 2026-10-07 Business terms: BT-11, BT-12, BT-16, BT-13, BT-15 SDK methods: AddContractReferencedDocument, AddSpecifiedProcuringProject, FillZUGFeRD_Structure, GetContractReferencedDocument, GetSpecifiedProcuringProject, SetDespatchAdviceReferencedDocument, getDespatchAdviceReferencedDocument Drei Referenzen im Rechnungskopf helfen dem Empfänger, eine Rechnung ohne Rückfrage zuzuordnen: die Projektreferenz (BT-11), die Vertragsreferenz (BT-12) und die Lieferavisreferenz (BT-16), also die Nummer der Versandanzeige. Für jede gibt es im Aloaha ZUGFeRD SDK eine Methode zum Setzen und eine zum Lesen. Dieser Artikel zeigt beide Seiten und worauf Sie beim Auslesen eingehender Rechnungen achten sollten. ### Felder und Methoden FeldBedeutungSetzenLesen [BT-11](https://www.zugferdpro.com/bt/bt-11/)Projektreferenz (Kennung und Name des Projekts)AddSpecifiedProcuringProjectGetSpecifiedProcuringProject [BT-12](https://www.zugferdpro.com/bt/bt-12/)Vertragsreferenz (Vertragsnummer)AddContractReferencedDocumentGetContractReferencedDocument [BT-16](https://www.zugferdpro.com/bt/bt-16/)LieferavisreferenzSetDespatchAdviceReferencedDocumentgetDespatchAdviceReferencedDocument Die Bestellreferenz ([BT-13](https://www.zugferdpro.com/bt/bt-13/)) und die Wareneingangsmeldung ([BT-15](https://www.zugferdpro.com/bt/bt-15/)) gehören thematisch dazu; zu BT-15 siehe [Wareneingangsmeldung referenzieren](https://www.zugferdpro.com/wareneingangsmeldung-in-der-e-rechnung-bt-15/). ### Referenzen setzen VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf, Parteien und Positionen setzen ... ' BT-11: Projektkennung und Projektname alo.AddSpecifiedProcuringProject("PRJ-2026-042", "Neubau Lager Musterstadt") ' BT-12: Vertragsnummer alo.AddContractReferencedDocument("RV-2025-117") ' BT-16: Nummer des Lieferavis alo.SetDespatchAdviceReferencedDocument("LA-2026-5531") ``` VBA / VB6 (COM) ``` alo.AddSpecifiedProcuringProject "PRJ-2026-042", "Neubau Lager Musterstadt" alo.AddContractReferencedDocument "RV-2025-117" alo.SetDespatchAdviceReferencedDocument "LA-2026-5531" ``` Alle drei Methoden setzen jeweils einen Wert; ein zweiter Aufruf überschreibt den ersten. Leere Argumente lassen bereits gesetzte Werte unverändert – eine Referenz lässt sich also nicht durch Übergabe eines Leerstrings löschen. Ältere Kurzanleitungen zu den Setzern: [Vertragsreferenz](https://www.zugferdpro.com/kennung-eines-vertrags/), [Projekt](https://www.zugferdpro.com/name-und-kennung-des-projektes-auf-das-sich-die-rechnung-bezieht/), [Lieferavis](https://www.zugferdpro.com/lieferavis/). ### Referenzen auslesen Nach FillZUGFeRD_Structure liefern die Lesemethoden die Werte über ByRef-Parameter. getDespatchAdviceReferencedDocument ist eine Funktion: Sie gibt die Nummer des Lieferavis direkt zurück und füllt Datum und Datumsformat optional per Referenz. Ist eine Referenz nicht vorhanden, erhalten Sie jeweils einen Leerstring. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then ' BT-11 Dim ProjektID As String = "", ProjektName As String = "" alo.GetSpecifiedProcuringProject(ProjektID, ProjektName) ' BT-12 Dim Vertrag As String = "", VertragDatum As String = "", VertragFormat As String = "" alo.GetContractReferencedDocument(Vertrag, VertragDatum, VertragFormat) ' BT-16 Dim AvisDatum As String = "", AvisFormat As String = "" Dim Lieferavis As String = alo.getDespatchAdviceReferencedDocument(AvisDatum, AvisFormat) If ProjektID <> "" Then Console.WriteLine("Projekt: " & ProjektID & " (" & ProjektName & ")") If Vertrag <> "" Then Console.WriteLine("Vertrag: " & Vertrag) If Lieferavis <> "" Then Console.WriteLine("Lieferavis: " & Lieferavis & " " & AvisDatum) End If ``` VBA / VB6 (COM) ``` Dim ProjektID As String, ProjektName As String Dim Vertrag As String, Lieferavis As String alo.GetSpecifiedProcuringProject ProjektID, ProjektName alo.GetContractReferencedDocument Vertrag Lieferavis = alo.getDespatchAdviceReferencedDocument() Debug.Print "Projekt: "; ProjektID; " / "; ProjektName Debug.Print "Vertrag: "; Vertrag Debug.Print "Lieferavis: "; Lieferavis ``` ### Hinweise - Profile: Vertragsreferenz (BT-12) und Lieferavisreferenz (BT-16) gibt es ab BASIC WL. Die Projektreferenz (BT-11) gibt es erst ab EN 16931 (COMFORT); das SDK stellt das Profil dafür nicht selbst um – wählen Sie mindestens COMFORT oder XRechnung. - Projektname: Im XML ist zum Projekt immer auch ein Name vorgeschrieben. Lassen Sie ProjectName leer, schreibt das SDK die Projektkennung zusätzlich als Namen. Ein Projekt ohne Kennung wird nicht geschrieben; ein gesetzter Name bleibt aber im Objekt und ist über GetSpecifiedProcuringProject lesbar. - Datumsangaben: Vertrags- und Lieferavisdatum (optionale Parameter DocumentDate bzw. FormattedIssueDateTime ) sind keine Felder der EN 16931. Das SDK schreibt sie, wenn Sie sie angeben; für EN 16931 und XRechnung genügt die Nummer. - Datumsformat beim Lesen: Beim Einlesen übernimmt das SDK das Datumsformat des Lieferavis aus dem Attribut format von qdt:DateTimeString ; Format enthält dann z. B. 102 (JJJJMMTT). Ist kein Datum vorhanden, liefern Datum und Format einen Leerstring – das gilt auch für GetContractReferencedDocument . In älteren Versionen des SDK konnte das Format des Lieferavis trotz Datum leer sein; werten Sie das Datum dann als JJJJMMTT (Format 102). ### Häufige Fragen #### Wie lese ich die Vertragsnummer aus einer XRechnung aus? Mit GetContractReferencedDocument. Der erste Parameter enthält danach die Vertragsreferenz BT-12 oder einen Leerstring, wenn keine angegeben ist. #### Wo finde ich die Lieferavisnummer einer eingehenden Rechnung? getDespatchAdviceReferencedDocument gibt die Lieferavisreferenz BT-16 als Rückgabewert zurück. #### Muss ich zur Projektreferenz einen Projektnamen angeben? Nein. Fehlt der Name, setzt das SDK beim Speichern die Projektkennung als Namen ein, damit das XML gültig bleibt. --- ## Vorausgegangene Rechnung referenzieren und lesen (BG-3, BT-25) URL: https://www.zugferdpro.com/vorausgegangene-rechnung-referenzieren-bg-3-bt-25-bt-26/ Date: 2026-10-07 Business terms: BG-3, BT-25, BT-26, BT-3 SDK methods: AddInvoiceReferencedDocument, FillZUGFeRD_Structure, GetInvoiceReferencedDocument, InvoiceReferencedDocuments Korrigiert eine Rechnung eine frühere, ist sie eine Gutschrift zu einer Rechnung oder fasst eine Schlussrechnung mehrere Abschlagsrechnungen zusammen, verweist sie in der Gruppe Referenz auf die vorausgegangene Rechnung (BG-3) auf diese Belege. Jeder Verweis besteht aus der Nummer der vorausgegangenen Rechnung (BT-25) und optional ihrem Rechnungsdatum (BT-26). Sie steht im Kopf der Rechnung unter ram:ApplicableHeaderTradeSettlement/ram:InvoiceReferencedDocument. In ZUGFeRD 2.5.2 / Factur-X 1.09.2 darf sie mehrfach vorkommen, in XRechnung 3.0 nur einmal (siehe Hinweise). ### Felder FeldBedeutungSchreibenLesen [BT-25](https://www.zugferdpro.com/bt/bt-25/)Nummer der vorausgegangenen RechnungIssuerAssignedIDInvoiceReferencedDocument [BT-26](https://www.zugferdpro.com/bt/bt-26/)Rechnungsdatum der vorausgegangenen RechnungIssueDateTimeInvoiceReferencedDocumentDate –Datumsformat, in der Regel 102 (JJJJMMTT)Document_DateFormatInvoiceReferencedDocumentDateFormat Ob die neue Rechnung eine Korrektur oder Gutschrift ist, steht nicht in BG-3, sondern im Rechnungstyp [BT-3](https://www.zugferdpro.com/bt/bt-3/) (z. B. 384 für eine korrigierte Rechnung, 381 für eine Gutschrift). ### Schreiben [AddInvoiceReferencedDocument](https://www.zugferdpro.com/api/addinvoicereferenceddocument/) hängt bei jedem Aufruf einen weiteren Verweis an. Der zweite Parameter ReferenceTypeCode muss immer übergeben werden, ist aber normalerweise ein Leerstring (siehe Hinweise). VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL") ' ... Rechnungskopf (z. B. Typ 384 = korrigierte Rechnung), Parteien, Positionen ... ' korrigierte Rechnung RE-2026-0815 vom 15.09.2026 alo.AddInvoiceReferencedDocument("RE-2026-0815", "", "20260915", "102") ' Schlussrechnung: Verweis auf die Abschlagsrechnung alo.AddInvoiceReferencedDocument("AR-2026-0102", "", "20260610") ' nur ZUGFeRD 2.3 / Factur-X: weiterer Verweis (bei XRechnung schreibt das SDK nur den ersten) alo.AddInvoiceReferencedDocument("AR-2026-0101", "", "20260310") ``` VBA / VB6 (COM) ``` alo.AddInvoiceReferencedDocument "RE-2026-0815", "", "20260915", "102" ``` - Ist die Rechnungsnummer leer, legt das SDK keinen Verweis an. - Das Datumsformat ist mit 102 vorbelegt. Lassen Sie das Datum weg, schreibt das SDK nur die Nummer. - Laut EN 16931 soll das Datum (BT-26) angegeben werden, wenn die Rechnungsnummer allein nicht eindeutig ist. ### Lesen [InvoiceReferencedDocuments](https://www.zugferdpro.com/api/invoicereferenceddocuments/) liefert die Anzahl der Verweise, [GetInvoiceReferencedDocument](https://www.zugferdpro.com/api/getinvoicereferenceddocument/) füllt Nummer, Datum, Datumsformat und Typcode eines Verweises per Referenz. Der Index beginnt bei 0. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML If alo.FillZUGFeRD_Structure("C:\Rechnungen\gutschrift.xml", "IHR-LIZENZSCHLUESSEL") Then For i As Integer = 0 To alo.InvoiceReferencedDocuments() - 1 Dim Nummer As String = "", Datum As String = "", DatumFormat As String = "", Typ As String = "" alo.GetInvoiceReferencedDocument(i, Nummer, Datum, DatumFormat, Typ) Console.WriteLine("Bezug auf Rechnung " & Nummer & " vom " & Datum) Next End If ``` VBA / VB6 (COM) ``` Dim i As Long Dim Nummer As String, Datum As String For i = 0 To alo.InvoiceReferencedDocuments - 1 Nummer = "": Datum = "" alo.GetInvoiceReferencedDocument i, Nummer, Datum Debug.Print "Vorausgegangene Rechnung: "; Nummer; " vom "; Datum Next i ``` Beim Einlesen übernimmt das SDK alle Verweise – aus CII (ZUGFeRD, Factur-X, XRechnung) ebenso wie aus UBL-Rechnungen und -Gutschriften (cac:BillingReference). Bei einem Index außerhalb des gültigen Bereichs lässt GetInvoiceReferencedDocument die übergebenen Variablen unverändert; setzen Sie sie deshalb vor jedem Aufruf zurück. ### Hinweise - Anzahl der Verweise: ZUGFeRD 2.5.2 / Factur-X 1.09.2 erlauben mehrere Verweise in allen Profilen. XRechnung 3.0 (geprüft gegen das CII-Schema D16B) erlaubt im Rechnungskopf nur einen Verweis. Ab Version 11.0.0.1 schreibt das SDK bei XRechnung deshalb nur den ersten Verweis; ältere Versionen schrieben alle, was beim KoSIT-Validator zu einem Schemafehler führte. Die gespeicherten Verweise bleiben über GetInvoiceReferencedDocument lesbar. Bei mehreren Abschlagsrechnungen verweisen Sie auf die letzte und nennen alle im Rechnungshinweis: Schlussrechnung mit Abschlagsrechnungen . - Profile: BG-3 gibt es ab BASIC WL, also in BASIC WL, BASIC, EN 16931 (COMFORT), EXTENDED und XRechnung. Ein Profilwechsel ist nicht nötig. - Typcode: Einen in ReferenceTypeCode übergebenen Wert speichert das SDK in Großbuchstaben als Typcode (lesbar über GetInvoiceReferencedDocument ). Als ram:TypeCode schreibt sie ihn nur im Profil EXTENDED; in BASIC, EN 16931 und XRechnung, die in BG-3 nur Nummer und Datum kennen, lässt sie ihn weg. In älteren Versionen des SDK wurde der Typcode in jedes Profil geschrieben – übergeben Sie dort außerhalb von EXTENDED einen Leerstring. - Der Verweis auf eine frühere Rechnung je Position ist ein eigenes Feld der Positionsebene und wird nicht mit AddInvoiceReferencedDocument gesetzt. - Mehr zum Anlass solcher Verweise: Rechnungskorrektur und Gutschrift . ### Häufige Fragen #### Wie verweise ich in einer Gutschrift auf die ursprüngliche Rechnung? Mit AddInvoiceReferencedDocument und der Nummer der ursprünglichen Rechnung (BT-25), am besten mit Rechnungsdatum (BT-26). Den Rechnungstyp BT-3 setzen Sie zusätzlich auf Gutschrift. #### Kann eine Rechnung auf mehrere frühere Rechnungen verweisen? In ZUGFeRD 2.3 / Factur-X ja: jeder Aufruf von AddInvoiceReferencedDocument fügt einen weiteren Verweis hinzu. In XRechnung 3.0 ist im Rechnungskopf nur ein Verweis erlaubt; weitere Rechnungen nennen Sie im Rechnungshinweis. #### Wie lese ich die referenzierten Rechnungen aus? Mit einer Schleife von 0 bis InvoiceReferencedDocuments - 1 und GetInvoiceReferencedDocument. --- ## Wareneingangsmeldung referenzieren (BT-15) URL: https://www.zugferdpro.com/wareneingangsmeldung-in-der-e-rechnung-bt-15/ Date: 2026-10-07 Business terms: BT-15, BT-13, BT-16 SDK methods: SetReceivingAdviceReferencedDocument, getReceivingAdviceReferencedDocument Viele Einkaufsabteilungen bestätigen den Wareneingang mit einer eigenen Belegnummer. Steht diese Referenz auf die Wareneingangsmeldung (BT-15) in der Rechnung, kann der Kunde die Rechnung automatisch dem Wareneingang zuordnen. Das Aloaha ZUGFeRD SDK setzt sie mit SetReceivingAdviceReferencedDocument. ### Wareneingangsmeldung setzen VB.NET ``` alo.SetReceivingAdviceReferencedDocument("WE-2026-0815", "20261005", "102") ``` VBA / VB6 (COM) ``` alo.SetReceivingAdviceReferencedDocument "WE-2026-0815", "20261005", "102" ``` Der erste Parameter ist die Nummer der Wareneingangsmeldung. Datum (im Format JJJJMMTT) und Formatcode (102) sind optional; ohne Formatangabe verwendet das SDK 102. Bleibt die Nummer leer, schreibt das SDK nichts. ### Auslesen ``` Dim Datum As String = "", Format As String = "" Dim Wareneingang As String = alo.getReceivingAdviceReferencedDocument(Datum, Format) ``` ### Verwandte Referenzen - Bestellnummer des Käufers: BT-13 , siehe Bestellnummer - Lieferavis (Versandanzeige): BT-16 , siehe Lieferavis ### Häufige Fragen #### Was ist der Unterschied zwischen Wareneingangsmeldung und Lieferavis? Das Lieferavis (BT-16) stammt vom Verkäufer und kündigt die Lieferung an. Die Wareneingangsmeldung (BT-15) stammt vom Käufer und bestätigt den Empfang. #### Ab welchem Profil ist BT-15 erlaubt? Ab dem Profil EN 16931 (COMFORT), also auch in EXTENDED und XRECHNUNG. --- ## Zahlungsanweisungen: Überweisung und Lastschrift URL: https://www.zugferdpro.com/zahlungsanweisungen-ueberweisung-lastschrift-bg-16-bg-17/ Date: 2026-10-07 Business terms: BG-16, BG-17, BT-81, BT-82, BT-84, BT-85, BT-86, BT-91, BG-18, BG-19 SDK methods: AddPaymentMeans Die Zahlungsanweisungen (BG-16) sagen dem Rechnungsempfänger, wie er zahlen soll: per Überweisung, Lastschrift oder Karte. Für eine Überweisung enthält die Rechnung die Gruppe Überweisung (BG-17) mit dem Zielkonto. Das Aloaha ZUGFeRD SDK legt beides mit AddPaymentMeans an. Mehrere Aufrufe ergeben mehrere Zahlungswege. ### Parameter und Felder ParameterFeldInhalt Payment_Type[BT-81](https://www.zugferdpro.com/bt/bt-81/)Zahlungsart, z. B. 58 = SEPA-Überweisung, 59 = SEPA-Lastschrift Comment[BT-82](https://www.zugferdpro.com/bt/bt-82/)Freitext zur Zahlungsart FinancialAccount_IBANID[BT-84](https://www.zugferdpro.com/bt/bt-84/) bzw. [BT-91](https://www.zugferdpro.com/bt/bt-91/)IBAN – bei Überweisung das Empfängerkonto, bei Lastschrift das zu belastende Konto AccountName[BT-85](https://www.zugferdpro.com/bt/bt-85/)Name des Kontos BICID[BT-86](https://www.zugferdpro.com/bt/bt-86/)BIC des Zahlungsdienstleisters isDirectDebit–True für Lastschrift Die Parameter FinancialAccount_ProprietaryID, GermanBankleitzahlID, BankName, DirectDebitID und DirectDebitAgencyID werden nicht mehr verwendet; lassen Sie sie leer. ### SEPA-Überweisung VB.NET ``` alo.AddPaymentMeans(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer, "Überweisung", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001") ``` VBA / VB6 (COM) ``` alo.AddPaymentMeans "58", "Überweisung", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001" ``` ### SEPA-Lastschrift ``` alo.AddPaymentMeans(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_direct_debit, "Lastschrift", "DE02120300000000202051", "", "", "", "", "", True) ``` Für die Lastschrift gehören außerdem Mandatsreferenz und Gläubiger-ID in die Rechnung, siehe [CreditorReferenceID](https://www.zugferdpro.com/creditorreferenceid/). Für Kartenzahlungen gibt es eine eigene Methode: [Kartenzahlung in der E-Rechnung](https://www.zugferdpro.com/zahlungskarte-in-der-e-rechnung-bt-87-bt-88/). ### Häufige Fragen #### Kann eine Rechnung mehrere Bankverbindungen enthalten? Ja. Die Überweisungsgruppe BG-17 darf mehrfach vorkommen. Rufen Sie AddPaymentMeans für jedes Konto einmal auf. #### Welcher Code steht für die SEPA-Überweisung? 58 (SEPA credit transfer). Im SDK ist das Payment_Means.SEPA_credit_transfer, für die SEPA-Lastschrift Payment_Means.SEPA_direct_debit (59). #### Wird die BIC noch benötigt? Für Zahlungen innerhalb des SEPA-Raums ist die BIC (BT-86) optional; die IBAN genügt. --- ## Abweichender Zahlungsempfänger in der E-Rechnung (BG-10) URL: https://www.zugferdpro.com/zahlungsempfaenger-in-der-e-rechnung-bg-10/ Date: 2026-10-07 Business terms: BG-10, BT-59, BT-60, BT-27, BT-84 SDK methods: GetPayeeTradeParty, SetPayeeTradeParty Nicht immer zahlt der Kunde direkt an den Verkäufer. Bei Factoring, einer Konzern-Zentralkasse oder einem Inkassodienst nimmt eine andere Stelle die Zahlung entgegen. Diese Stelle steht in der E-Rechnung als Zahlungsempfänger (BG-10). Das Aloaha ZUGFeRD SDK setzt sie mit SetPayeeTradeParty. ### Felder des Zahlungsempfängers FeldBedeutungParameter [BT-59](https://www.zugferdpro.com/bt/bt-59/)Firmierung/Name des Zahlungsempfängers – Pflicht, sobald BG-10 verwendet wirdCompanyName [BT-60](https://www.zugferdpro.com/bt/bt-60/)Kennung des ZahlungsempfängersID, mit Schema: GlobalID + GlobalIDScheme Weitere Parameter wie Ansprechpartner, Telefon, E-Mail und Anschrift des Zahlungsempfängers sind in der EN 16931 nicht vorgesehen und werden nur im Profil ZUGFeRD EXTENDED genutzt. Für EN 16931 und XRechnung lassen Sie sie leer. ### Zahlungsempfänger setzen VB.NET ``` alo.SetPayeeTradeParty(ID:="", GlobalID:="", GlobalIDScheme:="", CompanyName:="Muster Factoring AG", RoleCode:="", VAT:="", PersonName:="", DepartmentName:="", PhoneNumber:="", FAXNumber:="", email:="", Street1:="", Street2:="", Street3:="", PostCode:="", City:="", Country:="", CountrySubDivisionName:="") ``` VBA / VB6 (COM) – alle 18 Parameter in dieser Reihenfolge: ID, GlobalID, GlobalIDScheme, CompanyName, RoleCode, VAT, PersonName, DepartmentName, PhoneNumber, FAXNumber, email, Street1, Street2, Street3, PostCode, City, Country, CountrySubDivisionName. ``` alo.SetPayeeTradeParty "", "", "", "Muster Factoring AG", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ``` Die Bankverbindung, auf die gezahlt werden soll (IBAN, [BT-84](https://www.zugferdpro.com/bt/bt-84/)), geben Sie wie gewohnt mit AddPaymentMeans an – dann die IBAN des Zahlungsempfängers. ### Zahlungsempfänger auslesen GetPayeeTradeParty hat dieselben Parameter als Referenzparameter (alle optional) und füllt sie beim Einlesen einer Rechnung: ``` Dim ID As String = "", GlobalID As String = "", Schema As String = "", Name As String = "" alo.GetPayeeTradeParty(ID, GlobalID, Schema, Name) ``` ### Häufige Fragen #### Wann muss ich einen Zahlungsempfänger angeben? Wenn die Zahlung an eine andere Partei als den Verkäufer gehen soll, zum Beispiel an einen Factoring-Dienstleister. Ist der Verkäufer selbst Empfänger, entfällt BG-10. #### Darf der Name des Zahlungsempfängers dem Verkäufer entsprechen? Ja. Die Norm erlaubt das ausdrücklich; BT-59 ist aber nur dann Pflicht, wenn der Zahlungsempfänger vom Verkäufer abweicht. --- ## Kartenzahlung in der E-Rechnung angeben (BT-87, BT-88) URL: https://www.zugferdpro.com/zahlungskarte-in-der-e-rechnung-bt-87-bt-88/ Date: 2026-10-07 Business terms: BG-18, BT-87, BT-88, BG-16, BT-81, BT-82 SDK methods: AddPaymentMeansCard Hat der Käufer bereits mit einer Zahlungskarte bezahlt – etwa Kreditkarte oder Debitkarte –, beschreibt die E-Rechnung dies in der Gruppe Informationen zur Zahlungskarte (BG-18). Sie ist Teil der Zahlungsanweisungen (BG-16). Das Aloaha ZUGFeRD SDK legt sie mit AddPaymentMeansCard an. ### Felder FeldBedeutungParameter [BT-81](https://www.zugferdpro.com/bt/bt-81/)Code für die Zahlungsart – für Karten 48 (Bank card)Payment_Type [BT-82](https://www.zugferdpro.com/bt/bt-82/)Freitext zur ZahlungsartComment [BT-87](https://www.zugferdpro.com/bt/bt-87/)Zahlungskartennummer (nur die letzten Ziffern, siehe unten)CardNumber [BT-88](https://www.zugferdpro.com/bt/bt-88/)Name des KarteninhabersCardholderName ### Kartenzahlung setzen VB.NET ``` alo.AddPaymentMeansCard(Aloaha_ZUGFeRD.iXML.Payment_Means.BankCard, "Bezahlt per Kreditkarte", "1234", "Erika Muster") ``` VBA / VB6 (COM) – hier übergeben Sie den Zahlungsartcode als Text: ``` alo.AddPaymentMeansCard "48", "Bezahlt per Kreditkarte", "1234", "Erika Muster" ``` ### Wichtig: niemals die vollständige Kartennummer Nach den Sicherheitsnormen für Kartenzahlungen (PCI DSS) darf eine Rechnung nie die vollständige Kartennummer enthalten. Übergeben Sie in CardNumber nur die letzten vier bis sechs Ziffern. Das SDK übernimmt den Wert unverändert in die Rechnung. ### Häufige Fragen #### Welcher Zahlungsartcode gilt für Kartenzahlungen? Der Code 48 (Bank card) aus der UNTDID 4461. Im SDK entspricht das Payment_Means.BankCard. #### Wie viele Ziffern der Kartennummer gehören in die Rechnung? Nur die letzten vier bis sechs Ziffern. Die vollständige Kartennummer darf nicht übermittelt werden. #### Ab welchem Profil ist BG-18 erlaubt? Ab dem Profil EN 16931 (COMFORT), also auch in EXTENDED und XRECHNUNG. --- ## Zu- und Abschläge je Rechnungsposition (BG-27, BG-28) URL: https://www.zugferdpro.com/zuschlaege-und-abschlaege-je-rechnungsposition-bg-27-bg-28/ Date: 2026-10-07 Business terms: BG-28, BT-140, BT-141, BT-142, BT-143, BT-144, BT-145, BG-25, BG-27, BT-131, BT-136, BT-137, BT-138, BT-139 SDK methods: addItemSpecifiedTradeAllowanceCharge Abschläge und Zuschläge können statt auf die ganze Rechnung auch auf eine einzelne Rechnungsposition wirken: zum Beispiel ein Mengenrabatt auf einen Artikel oder ein Expresszuschlag auf eine Lieferung. Dafür gibt es die Gruppen BG-27 (Abschläge) und BG-28 (Zuschläge) innerhalb der Position. Das Aloaha ZUGFeRD SDK setzt sie mit addItemSpecifiedTradeAllowanceCharge – beliebig viele je Position. ### Parameter und Felder ParameterAbschlag (BG-27)Zuschlag (BG-28) ItemIndexIndex der Position, beginnend bei 0 (erste mit AddProduct_Comfort angelegte Position = 0) isChargeFalseTrue ActualAmount[BT-136](https://www.zugferdpro.com/bt/bt-136/)[BT-141](https://www.zugferdpro.com/bt/bt-141/) BasisAmount[BT-137](https://www.zugferdpro.com/bt/bt-137/)[BT-142](https://www.zugferdpro.com/bt/bt-142/) CalculationPercent[BT-138](https://www.zugferdpro.com/bt/bt-138/)[BT-143](https://www.zugferdpro.com/bt/bt-143/) Reason[BT-139](https://www.zugferdpro.com/bt/bt-139/)[BT-144](https://www.zugferdpro.com/bt/bt-144/) ReasonCode[BT-140](https://www.zugferdpro.com/bt/bt-140/) (UNTDID 5189)[BT-145](https://www.zugferdpro.com/bt/bt-145/) (UNTDID 7161) Beträge und Prozentsätze werden vom SDK auf zwei Nachkommastellen normalisiert. Die Funktion gibt die laufende Nummer des neuen Zu- oder Abschlags innerhalb der Position zurück. ### Beispiel: Expresszuschlag auf Position 1 VB.NET ``` ' Position anlegen (siehe AddProduct_Comfort), dann Zuschlag auf diese Position (Index 0) alo.addItemSpecifiedTradeAllowanceCharge(0, True, "10.00", "200.00", "20.00", "", "Expresszuschlag") ``` VBA / VB6 (COM) ``` alo.addItemSpecifiedTradeAllowanceCharge 0, True, "10.00", "200.00", "20.00", "", "Expresszuschlag" ``` Ein Abschlag funktioniert genauso mit isCharge = False, zum Beispiel mit dem Code 95 (Rabatt). ### Wichtig für die Summen Der Nettobetrag der Position ([BT-131](https://www.zugferdpro.com/bt/bt-131/)) enthält bereits alle Zu- und Abschläge der Position: Menge × Nettopreis + Zuschläge − Abschläge. Positionsrabatte erscheinen deshalb nicht noch einmal in den Rabattsummen auf Dokumentebene. ### Auslesen getItemSpecifiedTradeAllowanceChargeCount nennt die Anzahl je Position, getItemSpecifiedTradeAllowanceCharge(ItemIndex, ChargeIndex, isCharge, CalculationPercent, BasisAmount, ActualAmount, ReasonCode, Reason) liefert die Werte über Referenzparameter. Ein vollständiges Lesebeispiel für VB.NET und VBA sowie den Unterschied zum Preisnachlass BT-147 (Trade_ItemAllowance) zeigt [Zu- und Abschläge je Position auslesen](https://www.zugferdpro.com/zu-und-abschlaege-je-position-auslesen-bg-27-bg-28-bt-147/). ### Häufige Fragen #### Ab welchem Profil sind Positionszuschläge erlaubt? Ab dem Profil BASIC. Grundbetrag und Prozentsatz (BT-142, BT-143) erst ab EN 16931 (COMFORT). #### Wie zählt der Positionsindex? Er beginnt bei 0. Die erste mit AddProduct_Comfort angelegte Position hat den Index 0, die zweite den Index 1. #### Was ist der Unterschied zum Rabatt im Bruttopreis? Ein Rabatt im Preis (Bruttopreis minus Rabatt ergibt Nettopreis) betrifft den Stückpreis. BG-27/BG-28 wirken auf den Positionsbetrag als Ganzes. --- ## Datenschutzerklärung URL: https://www.zugferdpro.com/datenschutz/ Date: 2026-10-06 Diese Website ist ein Informationsangebot zum Aloaha ZUGFeRD SDK, kein Datenprodukt. Wir setzen keine Cookies, lassen keine Analyse über Sie laufen, zeigen keine Werbung und verkaufen keine Daten. Diese Seite zählt vollständig auf, was beim Besuch tatsächlich passiert. ### Verantwortlicher Aloaha Limited„Helgoland“, 45, Triq Gio Felice InglottPembroke PBK1131, Malta E-Mail: [info@aloaha.com](mailto:info@aloaha.com) · Telefon: +49 541 3859 4554 Weitere Angaben im [Impressum](https://www.zugferdpro.com/impressum/). ### Was wir nicht tun - Keine Cookies – weder eigene noch von Dritten. - Keine Analyse- oder Statistikdienste – kein Google Analytics, kein Matomo, keine Besucherzählung, auch keine eigene. - Keine Werbe- und Tracking-Pixel , kein Retargeting, kein Fingerprinting. - Keine Session-Aufzeichnungen, Heatmaps oder A/B-Tests. - Keine externen Schriftarten oder CDNs – Schriften, Skripte, Bilder und die Suche werden ausschließlich von www.zugferdpro.com ausgeliefert. - Keine Formulare und keine Benutzerkonten – Sie müssen nichts eingeben, um die Website zu nutzen. ### Server-Protokolle Wie jeder Webserver protokolliert unser Server technische Zugriffsdaten: IP-Adresse, Datum und Uhrzeit, aufgerufene Adresse (einschließlich eines Suchbegriffs, wenn Sie die Suche nutzen), Statuscode, übertragene Datenmenge, Referrer und Browserkennung (User-Agent). Diese Daten brauchen wir, um die Website sicher und fehlerfrei auszuliefern und Angriffe abzuwehren. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse am sicheren Betrieb). Die Protokolle werden nach 14 Tagen automatisch gelöscht. Wir werten sie nicht zu Werbe- oder Profilzwecken aus, führen sie nicht mit anderen Daten zusammen und geben sie nicht an Dritte weiter. Die Website wird in der Europäischen Union gehostet. ### Speicher in Ihrem Browser Wenn Sie das Farbschema (hell/dunkel) oder die Sprache (DE/EN) umschalten, merkt sich Ihr Browser diese Wahl im lokalen Speicher (localStorage, Schlüssel zfp_theme und zfp_lang). Die Werte bleiben auf Ihrem Gerät und werden nicht an uns übertragen. Sie können sie jederzeit über die Browser-Einstellungen („Websitedaten löschen“) entfernen. Die Speicherung ist für die von Ihnen gewünschte Funktion unbedingt erforderlich (§ 25 Abs. 2 Nr. 2 TDDDG). ### Suche Die Volltextsuche läuft vollständig in Ihrem Browser. Der Suchindex wird von unserem eigenen Server geladen; Suchbegriffe gehen an keinen Suchdienst. Da der Suchbegriff Teil der Seitenadresse ist (/suche/?q=…), kann er in den oben beschriebenen Server-Protokollen erscheinen. ### YouTube-Videos Einige Seiten enthalten Anleitungsvideos von YouTube. Diese werden erst geladen, wenn Sie auf „abspielen“ klicken. Vorher besteht keine Verbindung zu YouTube. Nach dem Klick wird das Video im erweiterten Datenschutzmodus über www.youtube-nocookie.com eingebunden; dabei werden Ihre IP-Adresse und technische Daten an YouTube übertragen. Anbieter ist die Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Irland. Eine Übermittlung an die Google LLC in den USA ist möglich; Google ist unter dem EU-US Data Privacy Framework zertifiziert. Rechtsgrundlage ist Ihre Einwilligung durch den Klick (Art. 6 Abs. 1 lit. a DSGVO, § 25 Abs. 1 TDDDG). Sie gilt nur für das jeweilige Video und den aktuellen Seitenaufruf. Was YouTube mit den Daten macht, beschreibt die [Datenschutzerklärung von Google](https://policies.google.com/privacy?hl=de). ### Kontakt per E-Mail oder Telefon Wenn Sie uns schreiben oder anrufen – etwa für eine Lizenzanfrage –, verarbeiten wir Ihre Angaben (Name, E-Mail-Adresse, Telefonnummer, Inhalt der Anfrage), um Ihr Anliegen zu bearbeiten. Rechtsgrundlage ist Art. 6 Abs. 1 lit. b DSGVO, wenn Ihre Anfrage auf einen Vertrag zielt, sonst Art. 6 Abs. 1 lit. f DSGVO. Wir löschen die Daten, wenn sie nicht mehr benötigt werden, sofern keine gesetzlichen Aufbewahrungspflichten (etwa handels- oder steuerrechtliche) bestehen. ### Links zu anderen Websites Links zu anderen Angeboten (zum Beispiel aloaha.com, codeb.io, unser WhatsApp-Kanal oder der Shop für die ZUGFeRD GUI) werden erst beim Anklicken aufgerufen. Ab dann gelten die Datenschutzbestimmungen des jeweiligen Anbieters. ### Ihre Rechte Sie haben das Recht auf Auskunft (Art. 15 DSGVO), Berichtigung (Art. 16), Löschung (Art. 17), Einschränkung der Verarbeitung (Art. 18), Datenübertragbarkeit (Art. 20) und Widerspruch gegen Verarbeitungen auf Grundlage berechtigter Interessen (Art. 21). Eine erteilte Einwilligung können Sie jederzeit mit Wirkung für die Zukunft widerrufen. Eine E-Mail an [info@aloaha.com](mailto:info@aloaha.com) genügt. Sie können sich außerdem bei einer Datenschutz-Aufsichtsbehörde beschweren – etwa bei der für uns zuständigen maltesischen Behörde, dem [Information and Data Protection Commissioner (IDPC)](https://idpc.org.mt), oder bei der Behörde Ihres Wohnorts oder Arbeitsplatzes. ### Keine automatisierten Entscheidungen Wir treffen keine automatisierten Entscheidungen und erstellen keine Profile im Sinne von Art. 22 DSGVO. ### Sicherheit Die Website wird ausschließlich verschlüsselt über HTTPS ausgeliefert. Stand: Oktober 2026 --- ## E-Rechnungspflicht in Deutschland: Fristen 2025, 2027 und 2028 URL: https://www.zugferdpro.com/e-rechnungspflicht-deutschland/ Date: 2026-10-06 Business terms: BT-10 Mit dem Wachstumschancengesetz wurde die elektronische Rechnung im inländischen B2B-Geschäft in Deutschland schrittweise zur Pflicht. Hier der Überblick über Rechtsgrundlage, Fristen, Übergangsregeln und zulässige Formate – Stand Oktober 2026. ### Rechtsgrundlage Die Pflicht beruht auf den umsatzsteuerlichen Änderungen des Wachstumschancengesetzes vom 27. März 2024 (BGBl. 2024 I Nr. 108). Sie gilt für Umsätze, die nach dem 31. Dezember 2024 ausgeführt werden, und betrifft ausschließlich Leistungen zwischen inländischen Unternehmen (B2B) – nicht den Geschäftsverkehr mit Endverbrauchern. Seit dem 1. Januar 2025 definiert § 14 Abs. 1 Satz 3 UStG die elektronische Rechnung als Rechnung, die in einem strukturierten elektronischen Format ausgestellt, übermittelt und empfangen wird und eine elektronische Verarbeitung ermöglicht. Nach § 14 Abs. 1 Satz 6 UStG muss dieses Format der europäischen Norm für die elektronische Rechnungsstellung entsprechen – der EN 16931, auf die die Richtlinie 2014/55/EU verweist – oder zwischen den Beteiligten vereinbart und verlustfrei in ein solches Format überführbar sein. Alle anderen Rechnungen, auf Papier oder in einem anderen elektronischen Format, sind „sonstige Rechnungen“ (§ 14 Abs. 1 Satz 4 UStG). ### Die Fristen AbWas gilt 1. Januar 2025Alle inländischen Unternehmen müssen E-Rechnungen empfangen können – unabhängig von Umsatz oder Größe. bis 31. Dezember 2026Übergang: Rechnungen dürfen noch auf Papier oder – mit Zustimmung des Empfängers – in anderen elektronischen Formaten (z. B. PDF) ausgestellt werden. 1. Januar 2027Unternehmen mit mehr als 800.000 € Vorjahresumsatz müssen E-Rechnungen ausstellen. bis 31. Dezember 2027Übergang für Unternehmen bis 800.000 € Vorjahresumsatz sowie für EDI-Verfahren, die nicht der EN 16931 entsprechen. 1. Januar 2028Alle Unternehmen müssen im inländischen B2B-Verkehr E-Rechnungen ausstellen. ### Empfangspflicht trotz Übergangsregeln Die Übergangsregeln für 2025 bis 2027 betreffen nur den Versand. Empfangen und verarbeiten müssen alle inländischen Unternehmen E-Rechnungen bereits seit dem 1. Januar 2025 – denn jeder Rechnungsaussteller darf schon jetzt auf die Übergangsregeln verzichten und E-Rechnungen schicken. Eine Zustimmung des Empfängers ist dafür nicht mehr erforderlich. Das gilt auch für Kleinunternehmer und für Unternehmen, die selbst nur steuerfreie Umsätze ausführen. ### Was ist eine E-Rechnung – und was nicht? Konforme Formate sind insbesondere die [XRechnung](https://www.zugferdpro.com/zugferd-xrechnung-factur-x-unterschiede/), die im öffentlichen Auftragswesen schon länger eingesetzt wird, und das hybride ZUGFeRD-Format ab Version 2.0.1: ein PDF/A-3-Dokument mit eingebetteter XML-Datei. Das Bundesministerium der Finanzen hat diese Formate zuerst in Vorabhinweisen vom 2. Oktober 2023 genannt und in den BMF-Schreiben vom 15. Oktober 2024 und 15. Oktober 2025 bestätigt – nicht jedoch die ZUGFeRD-Profile MINIMUM und BASIC WL, die nicht alle Pflichtangaben enthalten (siehe [Profilvergleich](https://www.zugferdpro.com/zugferd-profile-im-vergleich/)). Andere Formate sind möglich, wenn sie die Anforderungen der EN 16931 erfüllen. Keine E-Rechnung ist dagegen eine per E-Mail versandte PDF-Rechnung ohne strukturierten Datensatz, ein Scan oder eine Rechnung im E-Mail-Text. Solche Rechnungen sind nur noch im Rahmen der Übergangsregeln und mit Zustimmung des Empfängers zulässig. ### Was das zweite BMF-Schreiben (15. Oktober 2025) präzisiert - Der strukturierte Teil ist führend: Bei ZUGFeRD gilt das XML als maßgebliche Rechnung, das PDF ist nur die Ansicht. Alle Pflichtangaben nach §§ 14, 14a UStG müssen im XML stehen; ein Verweis auf eine Anlage oder einen Link genügt nicht. - Drei Fehlerarten: Formatfehler (z. B. XML entspricht nicht der EN 16931) machen aus der E-Rechnung eine sonstige Rechnung. Geschäftsregelfehler schaden nur, wenn sie Pflichtangaben betreffen – ein fehlender Wert wie die Käuferreferenz ( BT-10 ) ist umsatzsteuerlich unschädlich, solange er keine Pflichtangabe ist. Inhaltsfehler (z. B. falscher Steuersatz) betreffen den Vorsteuerabzug wie bisher. - Validierung: Prüfprogramme helfen, ersetzen aber nicht die inhaltliche Prüfung. Wer sorgfältig validiert, darf sich auf das Ergebnis zu Format und Geschäftsregeln verlassen; der Prüfbericht sollte aufbewahrt werden. - Aufbewahrung: Der strukturierte Datensatz ist acht Jahre unverändert aufzubewahren – eine Ablage nur des PDF-Bildes genügt nicht. ### Ausnahmen - Kleinbetragsrechnungen bis 250 € (brutto) und Fahrausweise dürfen weiterhin als sonstige Rechnung ausgestellt werden. - Kleinunternehmer müssen keine E-Rechnungen ausstellen, aber empfangen können. - Rechnungen an Privatpersonen (B2C) und an Empfänger im Ausland fallen nicht unter die inländische B2B-Pflicht. ### Was Unternehmen jetzt tun sollten - Empfang sicherstellen: E-Rechnungen müssen gelesen, geprüft und GoBD-konform archiviert werden – das XML ist das maßgebliche Original. - Versand vorbereiten: Rechnungssoftware oder ERP so erweitern, dass sie XRechnung bzw. ZUGFeRD (Profil EN 16931) erzeugt. Wer nur wenige Rechnungen schreibt, kann E-Rechnungen auch ohne eigene Software online im Browser erstellen . - Stammdaten prüfen: Pflichtangaben wie Umsatzsteuer-ID (BT-31) , Kontaktdaten und Zahlungsinformationen müssen strukturiert vorliegen. ### Umsetzung mit dem Aloaha ZUGFeRD SDK Das Aloaha ZUGFeRD SDK ergänzt bestehende Software um das Erzeugen, Auslesen und Prüfen von E-Rechnungen – on-premise, ohne Cloud, für .NET, COM/VB6, Kommandozeile und als Web-Service. Einstieg: [Schnellstart mit VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) · [kostenlose Testlizenz](https://www.zugferdpro.com/tooldownloads/). Stand: Oktober 2026. Keine Rechts- oder Steuerberatung – maßgeblich sind Gesetz und BMF-Schreiben in der jeweils aktuellen Fassung. ### Häufige Fragen #### Ab wann gilt die E-Rechnungspflicht? Seit dem 1. Januar 2025 müssen alle inländischen Unternehmen E-Rechnungen empfangen können. Die Pflicht zum Ausstellen gilt ab 1. Januar 2027 für Unternehmen mit mehr als 800.000 € Vorjahresumsatz und ab 1. Januar 2028 für alle. #### Ist eine PDF-Rechnung eine E-Rechnung? Nein. Eine reine PDF-Rechnung – auch per E-Mail versandt – ist eine sonstige Rechnung. Eine ZUGFeRD-Rechnung ist dagegen ein PDF/A-3 mit eingebettetem, strukturiertem XML und gilt ab Profil BASIC als E-Rechnung; maßgeblich ist das XML. #### Muss der Empfänger einer E-Rechnung zustimmen? Nein. Seit dem 1. Januar 2025 ist für E-Rechnungen im Sinne von § 14 UStG keine Zustimmung des Empfängers mehr nötig. Zustimmen muss er nur noch, wenn er während der Übergangszeit eine PDF- oder andere sonstige elektronische Rechnung erhalten soll. #### Gilt die E-Rechnungspflicht auch gegenüber Privatkunden? Nein. Die Pflicht betrifft nur Umsätze zwischen inländischen Unternehmen (B2B). Rechnungen an Endverbraucher können weiterhin auf Papier oder als PDF ausgestellt werden. #### Gibt es Ausnahmen von der E-Rechnungspflicht? Ja, unter anderem für Kleinbetragsrechnungen bis 250 € und Fahrausweise. Kleinunternehmer müssen keine E-Rechnungen ausstellen, aber empfangen können. --- ## Impressum URL: https://www.zugferdpro.com/impressum/ Date: 2026-10-06 Rechtliche Angaben für www.zugferdpro.com und das Produkt ZUGFeRD Pro. Anbieter ist die Aloaha Limited, eine in Malta registrierte Gesellschaft. Dieselbe Rechtsperson betreibt auch [www.aloaha.com](https://www.aloaha.com) und [www.codeb.io](https://www.codeb.io). ### Anbieter Aloaha Limited„Helgoland“45, Triq Gio Felice InglottPembroke PBK1131Malta ### Unternehmensangaben AngabeWert RechtsformPrivate Limited Company (Limited) SitzPembroke, Malta RechtsraumRepublik Malta · EU-Mitgliedstaat USt-IDMT14814406 ### Kontakt E-Mail: [info@aloaha.com](mailto:info@aloaha.com) Telefon: [+49 541 3859 4554](tel:+4954138594554) und [+49 151 5761 0183](tel:+4915157610183) Erreichbarkeit: Montag bis Freitag zu den üblichen Geschäftszeiten (MEZ), auf Deutsch und Englisch Internet: [www.aloaha.com](https://www.aloaha.com) News-Kanal: [WhatsApp](https://whatsapp.com/channel/0029VadPFO523n3mZvlfIO1L) Jede E-Mail an info@aloaha.com wird von einem Mitarbeiter aus Technik oder Vertrieb gelesen und beantwortet – keine automatische KI-Antwort, keine Ticket-Warteschlange. Sie können uns auch jederzeit eine E-Mail schreiben, wir rufen gern zurück. ### Verantwortlich für den Inhalt Büro der Geschäftsführung, Aloaha Limited – postalisch über die oben angegebene Anschrift, per E-Mail über [info@aloaha.com](mailto:info@aloaha.com). ### Verbraucherstreitbeilegung Die Aloaha Limited ist nicht verpflichtet und nicht bereit, an einem Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen. ### Datenschutz Diese Website setzt keine Cookies, nutzt keine Analyse- oder Tracking-Werkzeuge und lädt keine Inhalte von Drittanbietern, solange Sie das nicht selbst auslösen. Einzelheiten stehen in der [Datenschutzerklärung](https://www.zugferdpro.com/datenschutz/). ### Marken „Aloaha“, „CodeB“, „CodeB Identity Solutions“ und das CodeB-Logo sind Marken der Aloaha Limited. Marken Dritter – unter anderem ZUGFeRD, Factur-X, XRechnung, Microsoft, Windows und .NET – sind Eigentum der jeweiligen Inhaber und werden nur zu beschreibenden Zwecken genannt. ### Haftung für Inhalte Die Inhalte dieser Website wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte übernimmt die Aloaha Limited jedoch keine Gewähr. Fristen und Rechtslage zur E-Rechnung können sich ändern; maßgeblich sind die jeweils geltenden gesetzlichen Vorschriften. Als Diensteanbieter sind wir für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich, aber nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben unberührt. ### Haftung für Links Externe Links führen zu Websites Dritter, auf deren Inhalte wir keinen Einfluss haben; für diese Inhalte ist stets der jeweilige Anbieter verantwortlich. Zum Zeitpunkt der Verlinkung waren keine Rechtsverstöße erkennbar. Werden uns Rechtsverletzungen bekannt, entfernen wir die betreffenden Links umgehend. ### Urheberrecht Die Inhalte und Werke auf dieser Website unterliegen dem Urheberrecht. Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechts bedürfen der vorherigen Zustimmung der Aloaha Limited. © 2026 Aloaha Limited · Alle Rechte vorbehalten. --- ## Kreditorennummer (BT-29) in der ZUGFeRD-Rechnung angeben URL: https://www.zugferdpro.com/kreditorennummer-bt-29-in-zugferd-angeben/ Date: 2026-10-06 Business terms: BT-29, BG-4, BT-30, BT-31 SDK methods: AddSellerGlobalID, SaveXML, SellerID Die Kreditorennummer, unter der Ihr Kunde Sie in seiner Buchhaltung führt, gehört in einer E-Rechnung in das Feld BT-29 „Seller identifier“ (Kennung des Verkäufers). Die EN 16931 beschreibt BT-29 als vom Käufer zugewiesene Kennung des Verkäufers – damit kann der Rechnungsempfänger Ihre Rechnung automatisch dem richtigen Lieferanten zuordnen. ### BT-29 mit dem SDK setzen Die Kennung setzen Sie über die Eigenschaft SellerID. VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML ' ... Rechnungsdaten und Verkäufer (WriteSeller) wie gewohnt setzen alo.SellerID = "4711" ' BT-29: Ihre Kreditorennummer beim Kunden alo.SaveXML("c:\temp\rechnung.xml") ``` VB6 / VBA (COM) ``` Set alo = CreateObject("Aloaha_ZUGFeRD.XML") ' ... Rechnungsdaten und Verkäufer (WriteSeller) wie gewohnt setzen alo.SellerID = "4711" ' BT-29: Ihre Kreditorennummer beim Kunden alo.SaveXML ("c:\temp\rechnung.xml") ``` Das SDK schreibt den Wert als ram:ID in den Verkäuferblock (BG-4): ``` 4711 Muster GmbH ... ``` ### Globale Kennung statt Kreditorennummer (GLN, DUNS …) BT-29 kann auch eine weltweit eindeutige Kennung mit Angabe des Schemas enthalten (BT-29-0 und BT-29-1), zum Beispiel eine GLN. Das Schema ist ein Code aus der ISO/IEC-6523-Liste; geben Sie keines an, verwendet das SDK 0088 (GLN). ``` alo.AddSellerGlobalID("4000001123452", "0088") ' BT-29-0 / BT-29-1: GLN ' VB6 / VBA: Call alo.AddSellerGlobalID("4000001123452", "0088") ``` Ergebnis in der XML: ``` 4000001123452 ``` Kreditorennummer und globale Kennung können Sie auch gemeinsam angeben. ### Über den CSV-Import Arbeiten Sie mit dem CSV-Import, stehen die Werte in der Datei [seller.csv](https://www.zugferdpro.com/csv-datei-seller-csv/): ID für die Kreditorennummer (BT-29), globalid für die globale Kennung (BT-29-0) und globalidscheme für deren Schema (BT-29-1, Standard 0088). Die Groß-/Kleinschreibung der Wertenamen spielt keine Rolle. ### In welchen Profilen ist BT-29 erlaubt? ProfilBT-29 MINIMUMnein BASIC WLja BASICja EN 16931 (COMFORT)ja EXTENDEDja Laut ZUGFeRD 2.3.3 darf BT-29 mehrfach vorkommen (Kardinalität 0..unbounded). Ist im SDK das Profil BASIC eingestellt, schaltet es beim Setzen von SellerID automatisch auf EN 16931 (COMFORT) um. ### Pflicht oder optional? BT-29 selbst ist optional. Die Geschäftsregel BR-CO-26 verlangt aber, dass der Käufer den Lieferanten automatisch identifizieren kann: Mindestens eines der Felder BT-29 (Kennung des Verkäufers), BT-30 (Registernummer, z. B. Handelsregisternummer) oder BT-31 ([Umsatzsteuer-ID](https://www.zugferdpro.com/umsatzsteuer-id-steuerunmmer/)) soll vorhanden sein. Fragt Ihr Kunde ausdrücklich nach der Kreditorennummer, ist BT-29 der richtige Platz dafür. --- ## ZUGFeRD-Profile im Vergleich: MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED, XRECHNUNG URL: https://www.zugferdpro.com/zugferd-profile-im-vergleich/ Date: 2026-10-06 Business terms: BT-29, BG-25 ZUGFeRD kennt mehrere Profile. Ein Profil legt fest, welche Felder (Business Terms der EN 16931) eine Rechnung enthalten darf bzw. muss. Je höher das Profil, desto mehr Informationen kann die strukturierte Rechnung transportieren. Für die deutsche E-Rechnungspflicht ist die Profilwahl entscheidend: MINIMUM und BASIC WL gelten nicht als E-Rechnung. ### Die Profile auf einen Blick ProfilBusiness TermsRechnungspositionenE-Rechnung nach § 14 UStG?Typischer Einsatz MINIMUM18neinneinBuchungshilfe, Kopfdaten und Summen BASIC WL103neinneinKopf- und Zahlungsdaten ohne Positionen („without lines“) BASIC125jajaeinfache Rechnungen mit Positionen EN 16931 (COMFORT)164jajavollständige Abbildung der europäischen Norm – der Standardfall EXTENDED164 + Erweiterungenjajakomplexe Branchenfälle, zusätzliche Felder über die Norm hinaus XRECHNUNGEN 16931 + nationale Regelnjajaöffentliche Auftraggeber (B2G), deutsche CIUS Die Anzahl der Business Terms (BT) je Profil stammt aus der Feldtabelle der Spezifikation ZUGFeRD 2.5.2 / Factur-X 1.09.2 (gültig seit 1. September 2026). Welche Felder genau in welchem Profil vorkommen, sehen Sie im [BT/BG-Explorer](https://www.zugferdpro.com/bt/) – zum Beispiel ist die [Kennung des Verkäufers (BT-29)](https://www.zugferdpro.com/bt/bt-29/) ab BASIC WL erlaubt, die [Rechnungsposition (BG-25)](https://www.zugferdpro.com/bt/bg-25/) erst ab BASIC. ### Welche Profile gelten seit 2025 als E-Rechnung? Laut BMF-Schreiben vom 15. Oktober 2024 erfüllt ZUGFeRD ab Version 2.0.1 die Anforderungen an eine E-Rechnung – ausgenommen die Profile MINIMUM und BASIC WL. Diese beiden Profile enthalten nicht alle Pflichtangaben der EN 16931 und sind deshalb im inländischen B2B-Verkehr nur noch als „sonstige Rechnung“ möglich, solange die Übergangsfristen laufen. Mehr dazu in unserem Überblick zur [E-Rechnungspflicht in Deutschland](https://www.zugferdpro.com/e-rechnungspflicht-deutschland/). ### Welches Profil sollten Sie wählen? - EN 16931 (COMFORT) ist für die meisten Unternehmen die richtige Wahl: Es bildet die Norm vollständig ab und wird von allen gängigen Empfängern verarbeitet. - XRECHNUNG , wenn Sie an Behörden und öffentliche Auftraggeber fakturieren (Leitweg-ID erforderlich). - EXTENDED nur, wenn Sie Informationen übermitteln müssen, die die Norm nicht vorsieht – der Empfänger muss EXTENDED dann auch verarbeiten können. - BASIC reicht für einfache Rechnungen, bietet aber weniger Felder (z. B. für Zu- und Abschläge oder Lieferinformationen). ### Profil im Aloaha ZUGFeRD SDK einstellen Das Profil übergeben Sie beim Erzeugen des Objekts. Für EN 16931 (COMFORT): ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ``` Für eine XRechnung setzen Sie zusätzlich alo.isKOSIT = True und die [Leitweg-ID](https://www.zugferdpro.com/leitwegid-und-kundennummer/). Ein vollständiges Beispiel finden Sie im [Schnellstart: ZUGFeRD-Rechnung mit VB.NET erstellen](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). ### Häufige Fragen #### Ist ZUGFeRD MINIMUM eine E-Rechnung? Nein. Nach dem BMF-Schreiben vom 15. Oktober 2024 gelten die Profile MINIMUM und BASIC WL nicht als E-Rechnung im Sinne von § 14 UStG, weil sie nicht alle Pflichtangaben der EN 16931 enthalten. #### Was ist der Unterschied zwischen ZUGFeRD COMFORT und EN 16931? Keiner: COMFORT ist die frühere Bezeichnung des Profils, das die europäische Norm EN 16931 vollständig abbildet. In aktuellen Spezifikationen heißt es „EN 16931 (COMFORT)“. #### Brauche ich für Behörden das Profil XRECHNUNG? Öffentliche Auftraggeber in Deutschland verlangen in der Regel eine XRechnung. Mit dem ZUGFeRD-Profil XRECHNUNG erzeugen Sie eine Rechnung, die die Regeln der XRechnung erfüllt. --- ## Schnellstart: ZUGFeRD-Rechnung mit VB.NET erstellen und in PDF/A-3 einbetten URL: https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/ Date: 2026-10-06 Business terms: BT-1, BT-2, BT-5, BT-31, BT-81, BT-20, BG-25, BG-23, BG-22, BT-34, BT-49, BT-10 SDK methods: AddPaymentMeans, AddProduct_Comfort, AddTradePaymentTerms, AddTradeTax, BuyerAddressLine1, BuyerCity, BuyerCountry, BuyerName, BuyerPostCode, CreateInvoice, Document_Type, InvoiceCurrencyCode, Last_Error, MergeXMLIntoPDF, PaymentMeansCode, PaymentReference, SaveXML, TodayDate, VatCategoryCode, WriteSeller, WriteSellerContactPerson, WriteTotals, set_URIUniversalCommunication Dieser Schnellstart zeigt den kompletten Weg zu einer E-Rechnung nach EN 16931 mit dem Aloaha ZUGFeRD SDK: Objekt anlegen, Rechnungskopf, Verkäufer und Käufer, Zahlung, eine Position, Umsatzsteuer, Summen – dann das XML speichern und in ein PDF/A-3 einbetten. Das Beispiel ist eine Rechnung über 10 × 5,00 € netto zu 19 % Umsatzsteuer. ### 1. Objekt anlegen und Profil wählen ``` Dim LicenseKey As String = "IHR-LIZENZSCHLUESSEL" ' Testlizenz: info@aloaha.com ' Dezimalpunkt sicherstellen Dim culturebackup = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("de-DE") Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' Profil EN 16931 (COMFORT) ``` Für eine XRechnung an Behörden setzen Sie zusätzlich alo.isKOSIT = True und alo.LeitwegID. Welches Profil passt, erklärt der [Profilvergleich](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### 2. Rechnungskopf ``` alo.CreateInvoice("RE-2026-0001", "Rechnung gemäß Bestellung", alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , "", "EUR") alo.InvoiceCurrencyCode = "EUR" ' BT-5 alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice ``` ### 3. Verkäufer und Käufer ``` ' Verkäufer mit Umsatzsteuer-ID (BT-31) alo.WriteSeller("Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789") alo.WriteSellerContactPerson("Erika Muster", "Vertrieb", "vertrieb@muster.de", "+49 40 123456") alo.set_URIUniversalCommunication("rechnung@muster.de", "EM", True) ' BT-34 ' Käufer alo.BuyerName = "Kunde AG" alo.BuyerAddressLine1 = "Marktplatz 5" alo.BuyerPostCode = "80331" alo.BuyerCity = "München" alo.BuyerCountry = "DE" alo.set_URIUniversalCommunication("einkauf@kunde.de", "EM", False) ' BT-49 ``` ### 4. Zahlung ``` alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer), "SEPA-Überweisung", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001", "", "", False) alo.AddTradePaymentTerms("Zahlbar innerhalb 30 Tagen netto") ' BT-20 alo.PaymentReference = "RE-2026-0001" ``` ### 5. Rechnungsposition ``` Dim MwStKat As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) alo.AddProduct_Comfort("1", "", "ART-100", "10.00", "C62", "Papier A4", "500 Blatt", "", "EUR", "", "C62", False, "", "", "", "5.00", "EUR", "1.00", "C62", "VAT", MwStKat, "19.00", "", "50.00", "EUR", "", "") ``` Mengeneinheiten sind fest definiert (UN/ECE Recommendation 20, z. B. C62 = Stück). Alle Parameter von AddProduct_Comfort erklärt der Artikel [Der Rechnung Posten mit AddProduct_Comfort hinzufügen](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/). ### 6. Umsatzsteuer und Summen ``` ' Umsatzsteueraufschlüsselung (BG-23): 19 % auf 50,00 € alo.AddTradeTax("9.50", "EUR", "50.00", "EUR", "VAT", MwStKat, "19.00") ' Summen (BG-22): Netto, Brutto, Zahlbetrag, Steuerbasis, Steuer alo.WriteTotals("50.00", "59.50", "59.50", "50.00", "9.50") ``` ### 7. XML speichern und in PDF/A-3 einbetten ``` alo.SaveXML("C:\Rechnungen\RE-2026-0001.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ' Hybride ZUGFeRD-Rechnung: XML in Ihre bestehende PDF-Rechnung einbetten alo.MergeXMLIntoPDF("C:\Rechnungen\RE-2026-0001.xml", "C:\Rechnungen\RE-2026-0001.pdf", "C:\Rechnungen\RE-2026-0001_zugferd.pdf", True, "", LicenseKey) System.Threading.Thread.CurrentThread.CurrentCulture = culturebackup ``` Haben Sie noch kein PDF, erzeugen Sie es mit CreateDocFromXML direkt aus dem XML und einer DOCX-Vorlage – siehe [ZUGFeRD-XML mit DOCX-Template zusammenführen](https://www.zugferdpro.com/zugferd-xml-mit-docx-template-zusammenfuehren-und-in-zugferd-pdfa-umwandeln/). Ein umfangreiches Beispiel mit Rabatten und zwei Steuersätzen zeigt der [Beispielcode für XRechnung](https://www.zugferdpro.com/beispiel-code/). ### Häufige Fragen #### Funktioniert das auch mit C# oder VB6? Ja. Das Aloaha ZUGFeRD SDK ist eine .NET-Bibliothek mit COM-Schnittstelle; dieselben Methoden stehen in C#, VB.NET, VB6/VBA und anderen COM-fähigen Sprachen zur Verfügung. #### Welches Profil sollte ich verwenden? Für die meisten B2B-Rechnungen das Profil EN 16931 (COMFORT), für Behörden die XRechnung (isKOSIT = True plus Leitweg-ID). #### Wie finde ich Fehler in der erzeugten Rechnung? Nach SaveXML enthält Last_Error eine Fehlermeldung, falls die Datei nicht erzeugt werden konnte. Zur fachlichen Prüfung validieren Sie das XML gegen die EN-16931- bzw. XRechnung-Regeln. --- ## ZUGFeRD, XRechnung und Factur-X: Was ist der Unterschied? URL: https://www.zugferdpro.com/zugferd-xrechnung-factur-x-unterschiede/ Date: 2026-10-06 ZUGFeRD, XRechnung und Factur-X sind keine Konkurrenten, sondern Varianten derselben Idee: Rechnungsdaten strukturiert und maschinenlesbar nach der europäischen Norm EN 16931 zu übermitteln. Die Unterschiede liegen im Format (hybrides PDF oder reines XML), in nationalen Zusatzregeln und darin, wer welches Format verlangt. ### Die Formate im Vergleich ZUGFeRDFactur-XXRechnungPeppol BIS Billing 3.0 HerkunftDeutschland (FeRD)Frankreich (FNFE-MPE)Deutschland (KoSIT)OpenPeppol (europäisches Netzwerk) Formathybrid: PDF/A-3 mit eingebettetem XMLhybrid: PDF/A-3 mit eingebettetem XMLreines XML (kein Sichtbeleg)reines XML XML-SyntaxUN/CEFACT CII (D16B)UN/CEFACT CII (D16B)CII oder UBLUBL 2.1 GrundlageEN 16931 (Profile MINIMUM bis EXTENDED)EN 16931 (identisch mit ZUGFeRD 2.x)EN 16931 + nationale Regeln (CIUS)EN 16931 + Peppol-Regeln (CIUS) Typischer EinsatzB2B in DeutschlandB2B in Frankreich, internationalB2G (öffentliche Auftraggeber)Versand über das Peppol-Netzwerk, B2G und B2B ### ZUGFeRD: das hybride Format Eine ZUGFeRD-Rechnung ist eine PDF/A-3-Datei mit eingebetteter XML-Datei. Menschen lesen das PDF, Buchhaltungssysteme lesen das XML. Seit Version 2.1 ist ZUGFeRD technisch identisch mit Factur-X; die aktuelle Spezifikation trägt beide Namen (ZUGFeRD 2.5.2 / Factur-X 1.09.2). Welche Felder enthalten sind, bestimmt das [ZUGFeRD-Profil](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### XRechnung: das reine XML-Format Die XRechnung ist die deutsche Umsetzung (CIUS) der EN 16931 mit zusätzlichen Geschäftsregeln, zum Beispiel der Leitweg-ID für die Adressierung von Behörden. Sie besteht nur aus XML; eine Sichtdarstellung erzeugt erst das Empfangssystem. Öffentliche Auftraggeber verlangen in der Regel die XRechnung. ZUGFeRD bietet mit dem Profil XRECHNUNG eine Variante, deren XML die Regeln der XRechnung erfüllt. ### EN 16931: die gemeinsame Basis Alle drei Formate setzen das semantische Datenmodell der EN 16931 um: rund 160 Business Terms (BT) in 32 Gruppen (BG), etwa die [Rechnungsnummer (BT-1)](https://www.zugferdpro.com/bt/bt-1/) oder die [Umsatzsteuer-Identifikationsnummer des Verkäufers (BT-31)](https://www.zugferdpro.com/bt/bt-31/). Alle Felder mit deutscher Bezeichnung, XPath und Profilzuordnung finden Sie im [BT/BG-Explorer](https://www.zugferdpro.com/bt/). ### Rechtsgrundlage: EN 16931 und zwei zulässige Syntaxen Die europäische Grundlage ist die Richtlinie 2014/55/EU über die elektronische Rechnungsstellung bei öffentlichen Aufträgen. Nach Artikel 7 müssen öffentliche Auftraggeber elektronische Rechnungen empfangen und verarbeiten können, die der europäischen Norm EN 16931 entsprechen – und einer der Syntaxen auf der veröffentlichten Liste. Diese Liste enthält der Durchführungsbeschluss (EU) 2017/1870 der Kommission vom 16. Oktober 2017. Er nennt genau zwei Syntaxen: SyntaxVersionVerwendet von OASIS Universal Business Language (UBL)UBL 2.1 (ISO/IEC 19845:2015)Peppol BIS Billing 3.0, XRechnung (UBL-Variante) UN/CEFACT Cross Industry Invoice (CII)D16BZUGFeRD, Factur-X, XRechnung (CII-Variante) Eine ZUGFeRD-Rechnung verbindet ein lesbares PDF/A-3 mit einer eingebetteten EN-16931-Rechnung in CII-XML – sie nutzt also eine der beiden von der EU gelisteten Syntaxen. In Deutschland steht ZUGFeRD damit neben XRechnung und Peppol; in Frankreich ist dasselbe Format als Factur-X bekannt. Das Aloaha ZUGFeRD SDK erzeugt CII-XML für ZUGFeRD, Factur-X und XRechnung und liest auch eingehende UBL-Rechnungen. ### Was gilt in Deutschland als E-Rechnung? Seit 2025 gelten Rechnungen als E-Rechnung, die der EN 16931 entsprechen – also XRechnung und ZUGFeRD ab Version 2.0.1 mit Ausnahme der Profile MINIMUM und BASIC WL. Eine einfache PDF-Rechnung ist keine E-Rechnung. Zu Fristen und Übergangsregeln siehe [E-Rechnungspflicht in Deutschland](https://www.zugferdpro.com/e-rechnungspflicht-deutschland/). ### Ein SDK für alle Formate Mit dem Aloaha ZUGFeRD SDK erzeugen Sie aus denselben Rechnungsdaten ZUGFeRD-, Factur-X- und XRechnung-XML, betten das XML in ein bestehendes oder neu erzeugtes PDF/A-3 ein und lesen eingegangene Rechnungen wieder aus – on-premise, für .NET, COM/VB6 und Kommandozeile. Einstieg: [Schnellstart mit VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). ### Häufige Fragen #### Sind ZUGFeRD und Factur-X dasselbe? Technisch ja: Seit ZUGFeRD 2.1 sind beide Formate identisch und werden gemeinsam spezifiziert (aktuell ZUGFeRD 2.5.2 / Factur-X 1.09.2). Unterschiedlich sind nur Name und Herkunft. #### Ist eine XRechnung ein PDF? Nein. Die XRechnung ist ein reines XML-Format. Eine ZUGFeRD-Rechnung dagegen ist ein PDF/A-3 mit eingebettetem XML. #### Kann ich mit ZUGFeRD an Behörden fakturieren? Viele öffentliche Auftraggeber verlangen eine XRechnung. Ob sie ZUGFeRD akzeptieren, hängt vom Empfänger ab; das ZUGFeRD-Profil XRECHNUNG erfüllt die Regeln der XRechnung. #### Welche Syntaxen sind für E-Rechnungen nach EN 16931 zulässig? Der Durchführungsbeschluss (EU) 2017/1870 listet zwei Syntaxen: UBL 2.1, die Peppol BIS Billing 3.0 verwendet, und UN/CEFACT Cross Industry Invoice (CII) D16B, die ZUGFeRD und Factur-X verwenden. Öffentliche Auftraggeber müssen nach Artikel 7 der Richtlinie 2014/55/EU Rechnungen nach EN 16931 in einer dieser Syntaxen empfangen und verarbeiten können. #### Welche Syntax verwendet ZUGFeRD? ZUGFeRD (und das identische Factur-X) verwendet UN/CEFACT Cross Industry Invoice (CII) in der Version D16B. Das CII-XML ist in ein PDF/A-3 eingebettet; die XRechnung gibt es dagegen als CII- oder UBL-Variante, Peppol BIS Billing 3.0 nutzt UBL 2.1. --- ## Quick start: create a ZUGFeRD invoice in VB.NET and embed it in PDF/A-3 URL: https://www.zugferdpro.com/en/create-zugferd-invoice-vb-net/ Date: 2026-10-06 Business terms: BT-1, BT-2, BT-5, BT-31, BT-81, BT-20, BG-25, BG-23, BG-22, BT-34, BT-49, BT-10 This quick start shows the complete path to an EN 16931 e-invoice with the Aloaha ZUGFeRD SDK: create the object, set the invoice header, seller and buyer, payment, one line item, VAT and totals – then save the XML and embed it in a PDF/A-3. The example is an invoice for 10 × EUR 5.00 net at 19 % VAT. ### 1. Create the object and choose the profile ``` Dim LicenseKey As String = "YOUR-LICENCE-KEY" ' trial licence: info@aloaha.com ' fix the number format culture for the conversion Dim culturebackup = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("de-DE") Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' profile EN 16931 (COMFORT) ``` For an XRechnung to German public authorities, also set alo.isKOSIT = True and alo.LeitwegID. Which profile fits is explained in the [profile comparison](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### 2. Invoice header ``` alo.CreateInvoice("RE-2026-0001", "Invoice as per order", alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , "", "EUR") alo.InvoiceCurrencyCode = "EUR" ' BT-5 alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice ``` The second parameter of CreateInvoice is an invoice note (BT-22), not the invoice type. Set the type (BT-3) afterwards with Document_Type. ### 3. Seller and buyer ``` ' seller with VAT ID (BT-31) alo.WriteSeller("Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789") alo.WriteSellerContactPerson("Erika Muster", "Sales", "sales@muster.example", "+49 40 123456") alo.set_URIUniversalCommunication("invoice@muster.example", "EM", True) ' BT-34 ' buyer alo.BuyerName = "Kunde AG" alo.BuyerAddressLine1 = "Marktplatz 5" alo.BuyerPostCode = "80331" alo.BuyerCity = "München" alo.BuyerCountry = "DE" alo.set_URIUniversalCommunication("purchasing@kunde.example", "EM", False) ' BT-49 ``` ### 4. Payment ``` alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer), "SEPA credit transfer", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001", "", "", False) alo.AddTradePaymentTerms("Payable within 30 days net") ' BT-20 alo.PaymentReference = "RE-2026-0001" ``` ### 5. Invoice line ``` Dim VatCat As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) alo.AddProduct_Comfort("1", "", "ART-100", "10.00", "C62", "Paper A4", "500 sheets", "", "EUR", "", "C62", False, "", "", "", "5.00", "EUR", "1.00", "C62", "VAT", VatCat, "19.00", "", "50.00", "EUR", "", "") ``` Units of measure are fixed codes (UN/ECE Recommendation 20, e.g. C62 = piece). All parameters of AddProduct_Comfort are explained in the article [Adding invoice lines with AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/) (German). ### 6. VAT and totals ``` ' VAT breakdown (BG-23): 19 % on EUR 50.00 alo.AddTradeTax("9.50", "EUR", "50.00", "EUR", "VAT", VatCat, "19.00") ' totals (BG-22): line total, grand total, amount due, tax basis, tax alo.WriteTotals("50.00", "59.50", "59.50", "50.00", "9.50") ``` If the invoice has allowances, the tax basis is the net amount after allowances – see [BR-S-08, BR-S-09 and BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). ### 7. Save the XML and embed it in PDF/A-3 ``` alo.SaveXML("C:\Invoices\RE-2026-0001.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ' hybrid ZUGFeRD invoice: embed the XML into your existing PDF invoice alo.MergeXMLIntoPDF("C:\Invoices\RE-2026-0001.xml", "C:\Invoices\RE-2026-0001.pdf", "C:\Invoices\RE-2026-0001_zugferd.pdf", True, "", LicenseKey) System.Threading.Thread.CurrentThread.CurrentCulture = culturebackup ``` If you do not have a PDF yet, create it with CreateDocFromXML directly from the XML and a DOCX template – see [merging ZUGFeRD XML with a DOCX template](https://www.zugferdpro.com/zugferd-xml-mit-docx-template-zusammenfuehren-und-in-zugferd-pdfa-umwandeln/) (German). A larger example with allowances and two VAT rates is the [sample code for XRechnung](https://www.zugferdpro.com/beispiel-code/). Other languages: [Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/), [VB6, VB5 and VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/), or without programming against the SDK: [CSV and zugcmd](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). ### Frequently asked questions #### Does this also work with C# or VB6? Yes. The Aloaha ZUGFeRD SDK is a .NET library with a COM interface; the same methods are available in C#, VB.NET, VB6/VBA and other COM-capable languages. #### Which profile should I use? For most B2B invoices the EN 16931 (COMFORT) profile; for German public authorities the XRechnung (isKOSIT = True plus Leitweg-ID). #### How do I find errors in the generated invoice? After SaveXML, Last_Error contains an error message if the file could not be created. To check the content, validate the XML against the EN 16931 and XRechnung rules. --- ## E-invoicing mandate in Germany: requirements for e-invoices to and within Germany URL: https://www.zugferdpro.com/en/e-invoicing-mandate-germany/ Date: 2026-10-06 Business terms: BT-10 With the Growth Opportunities Act (Wachstumschancengesetz), the electronic invoice gradually became mandatory for domestic B2B transactions in Germany. This page gives international readers an overview of the requirements for e-invoices to and within Germany: legal basis, deadlines, transition rules and accepted formats – as of October 2026. ### Legal basis The mandate is based on the VAT changes of the Growth Opportunities Act (Wachstumschancengesetz) of 27 March 2024 (BGBl. 2024 I No. 108). It applies to supplies made after 31 December 2024 and concerns only transactions between businesses established in Germany (domestic B2B) – not business with consumers. Since 1 January 2025, Section 14 (1) sentence 3 of the German VAT Act (UStG) defines an electronic invoice as an invoice that is issued, transmitted and received in a structured electronic format and allows electronic processing. Under Section 14 (1) sentence 6 UStG, this format must comply with the European standard on electronic invoicing – EN 16931, to which Directive 2014/55/EU refers – or be agreed between the parties and be convertible into such a format without loss of information. All other invoices, on paper or in another electronic format, are "other invoices" (Section 14 (1) sentence 4 UStG). ### The deadlines FromWhat applies 1 January 2025All domestic businesses must be able to receive e-invoices – regardless of turnover or size. until 31 December 2026Transition: invoices may still be issued on paper or – with the recipient's consent – in other electronic formats (e.g. PDF). 1 January 2027Businesses with a previous-year turnover of more than EUR 800,000 must issue e-invoices. until 31 December 2027Transition for businesses with a previous-year turnover of up to EUR 800,000 and for EDI procedures that do not comply with EN 16931. 1 January 2028All businesses must issue e-invoices in domestic B2B transactions. ### Obligation to receive despite the transition rules The transition rules for 2025 to 2027 only concern sending. All domestic businesses have had to receive and process e-invoices since 1 January 2025 – because every invoice issuer may already waive the transition rules and send e-invoices. The recipient's consent is no longer required for this. This also applies to small businesses (Kleinunternehmer) and to businesses that only make VAT-exempt supplies themselves. ### What is an e-invoice – and what is not? Compliant formats are in particular [XRechnung](https://www.zugferdpro.com/zugferd-xrechnung-factur-x-unterschiede/), which has long been used in public procurement, and the hybrid ZUGFeRD format from version 2.0.1: a PDF/A-3 document with an embedded XML file. The German Federal Ministry of Finance (BMF) first named these formats in preliminary notes of 2 October 2023 and confirmed them in the BMF letters of 15 October 2024 and 15 October 2025 – but not the ZUGFeRD profiles MINIMUM and BASIC WL, which do not contain all mandatory details (see the [profile comparison](https://www.zugferdpro.com/zugferd-profile-im-vergleich/)). Other formats are possible if they meet the requirements of EN 16931. By contrast, a PDF invoice sent by e-mail without a structured data set, a scan or an invoice in the body of an e-mail is not an e-invoice. Such invoices are only permitted under the transition rules and with the recipient's consent. ### What the second BMF letter (15 October 2025) clarifies - The structured part prevails: with ZUGFeRD, the XML is the authoritative invoice; the PDF is only the visual representation. All mandatory details under Sections 14 and 14a UStG must be in the XML; a reference to an attachment or a link is not sufficient. - Three types of errors: format errors (e.g. the XML does not comply with EN 16931) turn the e-invoice into an "other invoice". Business rule errors only matter if they concern mandatory details – a missing value such as the buyer reference ( BT-10 ) is harmless for VAT purposes as long as it is not a mandatory detail. Content errors (e.g. a wrong VAT rate) affect input VAT deduction as before. - Validation: validation tools help, but do not replace checking the content. Anyone who validates carefully may rely on the result regarding format and business rules; the validation report should be kept. - Retention: the structured data set must be kept unchanged for eight years – storing only the PDF image is not sufficient. ### Exceptions - Small-amount invoices up to EUR 250 (gross) and travel tickets may still be issued as other invoices. - Small businesses (Kleinunternehmer) do not have to issue e-invoices, but must be able to receive them. - Invoices to private individuals (B2C) and to recipients abroad are not covered by the domestic B2B mandate. ### What businesses should do now - Ensure receipt: e-invoices must be read, checked and archived in compliance with GoBD – the XML is the authoritative original. - Prepare sending: extend your invoicing software or ERP so that it creates XRechnung or ZUGFeRD (EN 16931 profile). If you only write a few invoices, you can also create e-invoices online in the browser without your own software. - Check master data: mandatory details such as the VAT ID (BT-31) , contact details and payment information must be available in structured form. ### Implementation with the Aloaha ZUGFeRD SDK The Aloaha ZUGFeRD SDK adds creating, reading and checking e-invoices to existing software – on-premise, without a cloud, for .NET, COM/VB6, the command line and as a web service. Getting started: [quick start with VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) · [free trial licence](https://www.zugferdpro.com/tooldownloads/). As of October 2026. Not legal or tax advice – the law and the BMF letters in their current version are authoritative. ### Frequently asked questions #### When does the e-invoicing mandate in Germany apply? Since 1 January 2025, all domestic businesses must be able to receive e-invoices. The obligation to issue them applies from 1 January 2027 for businesses with a previous-year turnover of more than EUR 800,000 and from 1 January 2028 for all businesses. #### Is a PDF invoice an e-invoice? No. A plain PDF invoice – even when sent by e-mail – is an "other invoice". A ZUGFeRD invoice, by contrast, is a PDF/A-3 with embedded, structured XML and counts as an e-invoice from the BASIC profile upwards; the XML is authoritative. #### Does the recipient have to consent to an e-invoice? No. Since 1 January 2025, the recipient's consent is no longer required for e-invoices within the meaning of Section 14 UStG. Consent is only required if the recipient is to receive a PDF or another "other" electronic invoice during the transition period. #### Does the e-invoicing mandate also apply to private customers? No. The mandate only concerns supplies between domestic businesses (B2B). Invoices to consumers can still be issued on paper or as a PDF. #### Are there exceptions to the e-invoicing mandate? Yes, among others for small-amount invoices up to EUR 250 and travel tickets. Small businesses do not have to issue e-invoices, but must be able to receive them. --- ## ZUGFeRD profiles compared: MINIMUM, BASIC, EN 16931, EXTENDED, XRECHNUNG URL: https://www.zugferdpro.com/en/zugferd-profiles-compared/ Date: 2026-10-06 Business terms: BT-29, BG-25 ZUGFeRD has several profiles. A profile defines which fields (business terms of EN 16931) an invoice may or must contain. The higher the profile, the more information the structured invoice can carry. For the German e-invoicing mandate the choice of profile is decisive: MINIMUM and BASIC WL do not count as e-invoices. ### The profiles at a glance ProfileBusiness termsInvoice linesE-invoice under § 14 UStG?Typical use MINIMUM18nonobooking aid, header data and totals BASIC WL103nonoheader and payment data without lines ("without lines") BASIC125yesyessimple invoices with lines EN 16931 (COMFORT)164yesyescomplete coverage of the European standard – the standard case EXTENDED164 + extensionsyesyescomplex industry cases, additional fields beyond the standard XRECHNUNGEN 16931 + national rulesyesyespublic-sector buyers (B2G), German CIUS The number of business terms (BT) per profile is taken from the field table of the ZUGFeRD 2.5.2 / Factur-X 1.09.2 specification (in force since 1 September 2026). Which fields appear in which profile is shown in the [BT/BG explorer](https://www.zugferdpro.com/bt/) – for example, the [seller identifier (BT-29)](https://www.zugferdpro.com/bt/bt-29/) is allowed from BASIC WL, the [invoice line (BG-25)](https://www.zugferdpro.com/bt/bg-25/) only from BASIC. ### Which profiles count as e-invoices since 2025? According to the German Federal Ministry of Finance (BMF) letter of 15 October 2024, ZUGFeRD from version 2.0.1 meets the requirements for an e-invoice – except for the MINIMUM and BASIC WL profiles. These two profiles do not contain all mandatory information of EN 16931 and are therefore only possible as an "other invoice" in domestic German B2B trade while the transition periods run. More on this in our overview of the [e-invoicing mandate in Germany](https://www.zugferdpro.com/e-rechnungspflicht-deutschland/). ### Which profile should you choose? - EN 16931 (COMFORT) is the right choice for most companies: it covers the standard completely and is processed by all common recipients. - XRECHNUNG if you invoice German authorities and public-sector buyers (Leitweg-ID required). - EXTENDED only if you need to transmit information the standard does not provide for – the recipient must then also be able to process EXTENDED. - BASIC is sufficient for simple invoices but offers fewer fields (e.g. for allowances and charges or delivery information). ### Setting the profile in the Aloaha ZUGFeRD SDK You pass the profile when creating the object. For EN 16931 (COMFORT): ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ``` For an XRechnung also set alo.isKOSIT = True and the [Leitweg-ID](https://www.zugferdpro.com/leitwegid-und-kundennummer/) (German). A complete example is in the [quick start: create a ZUGFeRD invoice with VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). ### Frequently asked questions #### Is ZUGFeRD MINIMUM an e-invoice? No. According to the BMF letter of 15 October 2024, the MINIMUM and BASIC WL profiles do not count as e-invoices within the meaning of § 14 UStG because they do not contain all mandatory information of EN 16931. #### What is the difference between ZUGFeRD COMFORT and EN 16931? None: COMFORT is the former name of the profile that fully covers the European standard EN 16931. Current specifications call it "EN 16931 (COMFORT)". #### Do I need the XRECHNUNG profile for German authorities? Public-sector buyers in Germany usually require an XRechnung. With the ZUGFeRD profile XRECHNUNG you create an invoice that meets the XRechnung rules. --- ## ZUGFeRD, XRechnung and Factur-X: the differences explained URL: https://www.zugferdpro.com/en/zugferd-xrechnung-factur-x-differences/ Date: 2026-10-06 ZUGFeRD, XRechnung and Factur-X are not competitors but variants of the same idea: transmitting invoice data in a structured, machine-readable way according to the European standard EN 16931. The differences lie in the format (hybrid PDF or pure XML), in national additional rules and in who requires which format. ### The formats compared ZUGFeRDFactur-XXRechnungPeppol BIS Billing 3.0 OriginGermany (FeRD)France (FNFE-MPE)Germany (KoSIT)OpenPeppol (European network) Formathybrid: PDF/A-3 with embedded XMLhybrid: PDF/A-3 with embedded XMLpure XML (no visual document)pure XML XML syntaxUN/CEFACT CII (D16B)UN/CEFACT CII (D16B)CII or UBLUBL 2.1 BasisEN 16931 (profiles MINIMUM to EXTENDED)EN 16931 (identical to ZUGFeRD 2.x)EN 16931 + national rules (CIUS)EN 16931 + Peppol rules (CIUS) Typical useB2B in GermanyB2B in France, internationalB2G (public-sector buyers)exchange over the Peppol network, B2G and B2B ### ZUGFeRD: the hybrid format A ZUGFeRD invoice is a PDF/A-3 file with an embedded XML file. People read the PDF, accounting systems read the XML. Since version 2.1, ZUGFeRD is technically identical to Factur-X; the current specification carries both names (ZUGFeRD 2.5.2 / Factur-X 1.09.2). Which fields it contains is determined by the [ZUGFeRD profile](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### XRechnung: the pure XML format XRechnung is the German implementation (CIUS) of EN 16931 with additional business rules, for example the Leitweg-ID for addressing authorities. It consists of XML only; a human-readable view is created by the receiving system. Public-sector buyers usually require the XRechnung. With the XRECHNUNG profile, ZUGFeRD offers a variant whose XML meets the XRechnung rules. ### EN 16931: the common basis All three formats implement the semantic data model of EN 16931: around 160 business terms (BT) in 32 groups (BG), such as the [invoice number (BT-1)](https://www.zugferdpro.com/bt/bt-1/) or the [seller VAT identifier (BT-31)](https://www.zugferdpro.com/bt/bt-31/). All fields with their German name, XPath and profile assignment are in the [BT/BG explorer](https://www.zugferdpro.com/bt/). ### Legal basis: EN 16931 and two permitted syntaxes The European basis is Directive 2014/55/EU on electronic invoicing in public procurement. Under Article 7, contracting authorities must receive and process electronic invoices that comply with the European standard EN 16931 – and with any of the syntaxes on the published list. That list is set out in Commission Implementing Decision (EU) 2017/1870 of 16 October 2017. It names exactly two syntaxes: SyntaxVersionUsed by OASIS Universal Business Language (UBL)UBL 2.1 (ISO/IEC 19845:2015)Peppol BIS Billing 3.0, XRechnung (UBL variant) UN/CEFACT Cross Industry Invoice (CII)D16BZUGFeRD, Factur-X, XRechnung (CII variant) A ZUGFeRD invoice combines a readable PDF/A-3 with an embedded EN 16931 invoice in CII XML – so it uses one of the two syntaxes listed by the EU. In Germany, ZUGFeRD therefore stands alongside XRechnung and Peppol; in France the same format is known as Factur-X. The Aloaha ZUGFeRD SDK creates CII XML for ZUGFeRD, Factur-X and XRechnung and also reads incoming UBL invoices. ### What counts as an e-invoice in Germany? Since 2025, invoices that comply with EN 16931 count as e-invoices – i.e. XRechnung and ZUGFeRD from version 2.0.1, except for the MINIMUM and BASIC WL profiles. A plain PDF invoice is not an e-invoice. For deadlines and transition rules see the [e-invoicing mandate in Germany](https://www.zugferdpro.com/e-rechnungspflicht-deutschland/). ### One SDK for all formats With the Aloaha ZUGFeRD SDK you create ZUGFeRD, Factur-X and XRechnung XML from the same invoice data, embed the XML in an existing or newly created PDF/A-3 and read incoming invoices back – on-premise, for .NET, COM/VB6 and the command line. Getting started: [quick start with VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). ### Frequently asked questions #### Are ZUGFeRD and Factur-X the same? Technically yes: since ZUGFeRD 2.1 both formats are identical and are specified jointly (currently ZUGFeRD 2.5.2 / Factur-X 1.09.2). Only the name and origin differ. #### Is an XRechnung a PDF? No. The XRechnung is a pure XML format. A ZUGFeRD invoice, on the other hand, is a PDF/A-3 with embedded XML. #### Can I invoice German authorities with ZUGFeRD? Many public-sector buyers require an XRechnung. Whether they accept ZUGFeRD depends on the recipient; the ZUGFeRD profile XRECHNUNG meets the XRechnung rules. #### Which syntaxes are permitted for EN 16931 e-invoices? Commission Implementing Decision (EU) 2017/1870 lists two syntaxes: UBL 2.1, used by Peppol BIS Billing 3.0, and UN/CEFACT Cross Industry Invoice (CII) D16B, used by ZUGFeRD and Factur-X. Under Article 7 of Directive 2014/55/EU, contracting authorities must be able to receive and process EN 16931 invoices in these syntaxes. #### Which syntax does ZUGFeRD use? ZUGFeRD (and the identical Factur-X) uses UN/CEFACT Cross Industry Invoice (CII), version D16B. The CII XML is embedded in a PDF/A-3; XRechnung exists as a CII or UBL variant, and Peppol BIS Billing 3.0 uses UBL 2.1. --- ## Démarrage rapide : créer une facture ZUGFeRD en VB.NET et l'intégrer dans un PDF/A-3 URL: https://www.zugferdpro.com/fr/creer-une-facture-zugferd-en-vb-net/ Date: 2026-10-06 Business terms: BT-1, BT-2, BT-5, BT-31, BT-81, BT-20, BG-25, BG-23, BG-22, BT-34, BT-49, BT-10 Ce démarrage rapide présente le chemin complet vers une facture électronique EN 16931 avec le SDK Aloaha ZUGFeRD : créer l'objet, renseigner l'en-tête de facture, le vendeur et l'acheteur, le paiement, une ligne de facture, la TVA et les totaux – puis enregistrer le XML et l'intégrer dans un PDF/A-3. L'exemple est une facture de 10 × 5,00 EUR HT au taux de TVA de 19 %. ### 1. Créer l'objet et choisir le profil ``` Dim LicenseKey As String = "VOTRE-CLE-DE-LICENCE" ' licence d'essai : info@aloaha.com ' fixer la culture du format numérique pour la conversion Dim culturebackup = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("de-DE") Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ' profil EN 16931 (COMFORT) ``` Pour une XRechnung destinée aux administrations publiques allemandes, définissez en plus alo.isKOSIT = True et alo.LeitwegID. Le profil adapté est expliqué dans la [comparaison des profils](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### 2. En-tête de facture ``` alo.CreateInvoice("RE-2026-0001", "Invoice as per order", alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , "", "EUR") alo.InvoiceCurrencyCode = "EUR" ' BT-5 alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice ``` Le deuxième paramètre de CreateInvoice est une note de facture (BT-22), et non le type de facture. Définissez le type (BT-3) ensuite avec Document_Type. ### 3. Vendeur et acheteur ``` ' vendeur avec numéro de TVA (BT-31) alo.WriteSeller("Muster GmbH", "20095", "Hamburg", "Hauptstr. 1", "", "DE", "DE123456789") alo.WriteSellerContactPerson("Erika Muster", "Sales", "sales@muster.example", "+49 40 123456") alo.set_URIUniversalCommunication("invoice@muster.example", "EM", True) ' BT-34 ' acheteur alo.BuyerName = "Kunde AG" alo.BuyerAddressLine1 = "Marktplatz 5" alo.BuyerPostCode = "80331" alo.BuyerCity = "München" alo.BuyerCountry = "DE" alo.set_URIUniversalCommunication("purchasing@kunde.example", "EM", False) ' BT-49 ``` ### 4. Paiement ``` alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer), "SEPA credit transfer", "DE02120300000000202051", "Muster GmbH", "", "BYLADEM1001", "", "", False) alo.AddTradePaymentTerms("Payable within 30 days net") ' BT-20 alo.PaymentReference = "RE-2026-0001" ``` ### 5. Ligne de facture ``` Dim VatCat As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) alo.AddProduct_Comfort("1", "", "ART-100", "10.00", "C62", "Paper A4", "500 sheets", "", "EUR", "", "C62", False, "", "", "", "5.00", "EUR", "1.00", "C62", "VAT", VatCat, "19.00", "", "50.00", "EUR", "", "") ``` Les unités de mesure sont des codes fixes (recommandation CEE-ONU n° 20, p. ex. C62 = pièce). Tous les paramètres de AddProduct_Comfort sont expliqués dans l'article [Ajouter des lignes de facture avec AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/) (en allemand). ### 6. TVA et totaux ``` ' ventilation de la TVA (BG-23) : 19 % sur 50,00 EUR alo.AddTradeTax("9.50", "EUR", "50.00", "EUR", "VAT", VatCat, "19.00") ' totaux (BG-22) : total des lignes, total TTC, montant dû, base imposable, TVA alo.WriteTotals("50.00", "59.50", "59.50", "50.00", "9.50") ``` Si la facture comporte des remises, la base imposable est le montant HT après remises – voir [BR-S-08, BR-S-09 et BR-CO-17](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/). ### 7. Enregistrer le XML et l'intégrer dans un PDF/A-3 ``` alo.SaveXML("C:\Invoices\RE-2026-0001.xml") If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error) ' facture ZUGFeRD hybride : intégrer le XML dans votre facture PDF existante alo.MergeXMLIntoPDF("C:\Invoices\RE-2026-0001.xml", "C:\Invoices\RE-2026-0001.pdf", "C:\Invoices\RE-2026-0001_zugferd.pdf", True, "", LicenseKey) System.Threading.Thread.CurrentThread.CurrentCulture = culturebackup ``` Si vous n'avez pas encore de PDF, créez-le avec CreateDocFromXML directement à partir du XML et d'un modèle DOCX – voir [fusionner un XML ZUGFeRD avec un modèle DOCX](https://www.zugferdpro.com/zugferd-xml-mit-docx-template-zusammenfuehren-und-in-zugferd-pdfa-umwandeln/) (en allemand). Un exemple plus complet, avec remises et deux taux de TVA, figure dans l'[exemple de code pour XRechnung](https://www.zugferdpro.com/beispiel-code/). Autres langages : [Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/), [VB6, VB5 et VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/), ou sans programmer avec le SDK : [CSV et zugcmd](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/). ### Questions fréquentes #### Cela fonctionne-t-il aussi avec C# ou VB6 ? Oui. Le SDK Aloaha ZUGFeRD est une bibliothèque .NET dotée d'une interface COM ; les mêmes méthodes sont disponibles en C#, VB.NET, VB6/VBA et dans les autres langages compatibles COM. #### Quel profil dois-je utiliser ? Pour la plupart des factures B2B, le profil EN 16931 (COMFORT) ; pour les administrations publiques allemandes, la XRechnung (isKOSIT = True plus Leitweg-ID). #### Comment trouver les erreurs dans la facture générée ? Après SaveXML, Last_Error contient un message d'erreur si le fichier n'a pas pu être créé. Pour vérifier le contenu, validez le XML par rapport aux règles EN 16931 et XRechnung. --- ## ZUGFeRD, XRechnung et Factur-X : les différences expliquées URL: https://www.zugferdpro.com/fr/differences-zugferd-xrechnung-factur-x/ Date: 2026-10-06 ZUGFeRD, XRechnung et Factur-X ne sont pas des concurrents, mais des variantes d’une même idée : transmettre les données de facture de manière structurée et lisible par machine selon la norme européenne EN 16931. Les différences tiennent au format (PDF hybride ou XML pur), aux règles nationales complémentaires et à qui exige quel format. ### Les formats comparés ZUGFeRDFactur-XXRechnungPeppol BIS Billing 3.0 OrigineAllemagne (FeRD)France (FNFE-MPE)Allemagne (KoSIT)OpenPeppol (réseau européen) Formathybride : PDF/A-3 avec XML intégréhybride : PDF/A-3 avec XML intégréXML pur (pas de document visuel)XML pur Syntaxe XMLUN/CEFACT CII (D16B)UN/CEFACT CII (D16B)CII ou UBLUBL 2.1 BaseEN 16931 (profils MINIMUM à EXTENDED)EN 16931 (identique à ZUGFeRD 2.x)EN 16931 + règles nationales (CIUS)EN 16931 + règles Peppol (CIUS) Usage typiqueB2B en AllemagneB2B en France, internationalB2G (acheteurs publics)échange via le réseau Peppol, B2G et B2B ### ZUGFeRD : le format hybride Une facture ZUGFeRD est un fichier PDF/A-3 contenant un fichier XML intégré. Les personnes lisent le PDF, les systèmes comptables lisent le XML. Depuis la version 2.1, ZUGFeRD est techniquement identique à Factur-X ; la spécification actuelle porte les deux noms (ZUGFeRD 2.5.2 / Factur-X 1.09.2). Les champs contenus dépendent du [profil ZUGFeRD](https://www.zugferdpro.com/zugferd-profile-im-vergleich/). ### XRechnung : le format XML pur La XRechnung est la déclinaison allemande (CIUS) de la norme EN 16931, avec des règles de gestion supplémentaires, par exemple la Leitweg-ID pour l’adressage des administrations. Elle se compose uniquement de XML ; c’est le système destinataire qui en produit une représentation lisible. Les acheteurs publics exigent en général la XRechnung. Avec le profil XRECHNUNG, ZUGFeRD propose une variante dont le XML respecte les règles de la XRechnung. ### EN 16931 : la base commune Les trois formats mettent en œuvre le modèle de données sémantique de la norme EN 16931 : environ 160 business terms (BT) répartis en 32 groupes (BG), par exemple le [numéro de facture (BT-1)](https://www.zugferdpro.com/bt/bt-1/) ou le [numéro de TVA intracommunautaire du vendeur (BT-31)](https://www.zugferdpro.com/bt/bt-31/). Tous les champs, avec leur nom allemand, leur XPath et leur affectation aux profils, figurent dans l’[explorateur BT/BG](https://www.zugferdpro.com/bt/). ### Base juridique : la norme EN 16931 et deux syntaxes autorisées La base européenne est la directive 2014/55/UE relative à la facturation électronique dans le cadre des marchés publics. Selon son article 7, les pouvoirs adjudicateurs doivent recevoir et traiter les factures électroniques conformes à la norme européenne EN 16931 – et à l’une des syntaxes figurant sur la liste publiée. Cette liste figure dans la décision d’exécution (UE) 2017/1870 de la Commission du 16 octobre 2017. Elle cite exactement deux syntaxes : SyntaxeVersionUtilisée par OASIS Universal Business Language (UBL)UBL 2.1 (ISO/IEC 19845:2015)Peppol BIS Billing 3.0, XRechnung (variante UBL) UN/CEFACT Cross Industry Invoice (CII)D16BZUGFeRD, Factur-X, XRechnung (variante CII) Une facture ZUGFeRD associe un PDF/A-3 lisible à une facture EN 16931 intégrée au format XML CII – elle utilise donc l’une des deux syntaxes listées par l’UE. En Allemagne, ZUGFeRD figure ainsi aux côtés de la XRechnung et de Peppol ; en France, le même format est connu sous le nom de Factur-X. Le SDK Aloaha ZUGFeRD crée le XML CII pour ZUGFeRD, Factur-X et XRechnung et lit également les factures UBL reçues. ### Qu’est-ce qu’une facture électronique en Allemagne ? Depuis 2025, les factures conformes à la norme EN 16931 sont considérées comme des factures électroniques – c’est-à-dire la XRechnung et ZUGFeRD à partir de la version 2.0.1, à l’exception des profils MINIMUM et BASIC WL. Une simple facture PDF n’est pas une facture électronique. Pour les échéances et les règles de transition, voir l’[obligation de facturation électronique en Allemagne](https://www.zugferdpro.com/e-rechnungspflicht-deutschland/). ### Un seul SDK pour tous les formats Avec l’Aloaha ZUGFeRD SDK, vous créez à partir des mêmes données de facture du XML ZUGFeRD, Factur-X et XRechnung, vous intégrez le XML dans un PDF/A-3 existant ou nouvellement créé et vous relisez les factures reçues – sur site (on-premise), pour .NET, COM/VB6 et la ligne de commande. Pour commencer : [démarrage rapide avec VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). ### Questions fréquentes #### ZUGFeRD et Factur-X sont-ils identiques ? Techniquement oui : depuis ZUGFeRD 2.1, les deux formats sont identiques et spécifiés conjointement (actuellement ZUGFeRD 2.5.2 / Factur-X 1.09.2). Seuls le nom et l’origine diffèrent. #### Une XRechnung est-elle un PDF ? Non. La XRechnung est un format XML pur. Une facture ZUGFeRD, en revanche, est un PDF/A-3 avec un XML intégré. #### Puis-je facturer des administrations allemandes avec ZUGFeRD ? De nombreux acheteurs publics exigent une XRechnung. L’acceptation de ZUGFeRD dépend du destinataire ; le profil ZUGFeRD XRECHNUNG respecte les règles de la XRechnung. #### Quelles syntaxes sont autorisées pour les factures électroniques EN 16931 ? La décision d’exécution (UE) 2017/1870 de la Commission liste deux syntaxes : UBL 2.1, utilisée par Peppol BIS Billing 3.0, et UN/CEFACT Cross Industry Invoice (CII) D16B, utilisée par ZUGFeRD et Factur-X. Selon l’article 7 de la directive 2014/55/UE, les pouvoirs adjudicateurs doivent pouvoir recevoir et traiter des factures EN 16931 dans ces syntaxes. #### Quelle syntaxe ZUGFeRD utilise-t-il ? ZUGFeRD (et Factur-X, qui lui est identique) utilise UN/CEFACT Cross Industry Invoice (CII) en version D16B. Le XML CII est intégré dans un PDF/A-3 ; la XRechnung existe en variante CII ou UBL, et Peppol BIS Billing 3.0 utilise UBL 2.1. --- ## Obligation de facture électronique en Allemagne : exigences pour les factures électroniques vers et en Allemagne URL: https://www.zugferdpro.com/fr/obligation-facture-electronique-allemagne/ Date: 2026-10-06 Business terms: BT-10 Avec la loi sur les opportunités de croissance (Wachstumschancengesetz), la facture électronique est progressivement devenue obligatoire pour les opérations B2B nationales en Allemagne. Cette page présente aux lecteurs francophones les exigences applicables aux factures électroniques vers et en Allemagne : base légale, délais, règles transitoires et formats admis – état octobre 2026. ### Base légale L'obligation repose sur les modifications de la TVA introduites par la loi sur les opportunités de croissance (Wachstumschancengesetz) du 27 mars 2024 (BGBl. 2024 I n° 108). Elle s'applique aux opérations réalisées après le 31 décembre 2024 et concerne uniquement les opérations entre entreprises établies en Allemagne (B2B national) – pas les ventes aux consommateurs. Depuis le 1er janvier 2025, l'article 14, paragraphe 1, phrase 3 de la loi allemande sur la TVA (UStG) définit la facture électronique comme une facture émise, transmise et reçue dans un format électronique structuré permettant un traitement électronique. Selon l'article 14, paragraphe 1, phrase 6 UStG, ce format doit être conforme à la norme européenne sur la facturation électronique – la EN 16931, à laquelle renvoie la directive 2014/55/UE – ou être convenu entre les parties et pouvoir être converti dans un tel format sans perte d'information. Toutes les autres factures, sur papier ou dans un autre format électronique, sont des « autres factures » (article 14, paragraphe 1, phrase 4 UStG). ### Les délais À partir duCe qui s'applique 1er janvier 2025Toutes les entreprises nationales doivent pouvoir recevoir des factures électroniques – quel que soit leur chiffre d'affaires ou leur taille. jusqu'au 31 décembre 2026Transition : les factures peuvent encore être émises sur papier ou – avec l'accord du destinataire – dans d'autres formats électroniques (p. ex. PDF). 1er janvier 2027Les entreprises dont le chiffre d'affaires de l'année précédente dépasse 800 000 euros doivent émettre des factures électroniques. jusqu'au 31 décembre 2027Transition pour les entreprises dont le chiffre d'affaires de l'année précédente ne dépasse pas 800 000 euros et pour les procédures EDI non conformes à la EN 16931. 1er janvier 2028Toutes les entreprises doivent émettre des factures électroniques dans les opérations B2B nationales. ### Obligation de réception malgré les règles transitoires Les règles transitoires de 2025 à 2027 ne concernent que l'envoi. Depuis le 1er janvier 2025, toutes les entreprises nationales doivent recevoir et traiter les factures électroniques – car tout émetteur peut d'ores et déjà renoncer aux règles transitoires et envoyer des factures électroniques. L'accord du destinataire n'est plus nécessaire pour cela. Cela vaut aussi pour les petites entreprises (Kleinunternehmer) et pour les entreprises qui ne réalisent elles-mêmes que des opérations exonérées de TVA. ### Qu'est-ce qu'une facture électronique – et qu'est-ce qui n'en est pas une ? Les formats conformes sont notamment la [XRechnung](https://www.zugferdpro.com/zugferd-xrechnung-factur-x-unterschiede/), utilisée depuis longtemps dans les marchés publics, et le format hybride ZUGFeRD à partir de la version 2.0.1 : un document PDF/A-3 contenant un fichier XML intégré. Le ministère fédéral allemand des Finances (BMF) a cité ces formats pour la première fois dans des notes préliminaires du 2 octobre 2023 et les a confirmés dans les circulaires du BMF du 15 octobre 2024 et du 15 octobre 2025 – mais pas les profils ZUGFeRD MINIMUM et BASIC WL, qui ne contiennent pas toutes les mentions obligatoires (voir la [comparaison des profils](https://www.zugferdpro.com/zugferd-profile-im-vergleich/)). D'autres formats sont possibles s'ils satisfont aux exigences de la EN 16931. En revanche, une facture PDF envoyée par e-mail sans jeu de données structuré, un scan ou une facture dans le corps d'un e-mail ne sont pas des factures électroniques. Ces factures ne sont admises que dans le cadre des règles transitoires et avec l'accord du destinataire. ### Ce que précise la deuxième circulaire du BMF (15 octobre 2025) - La partie structurée prévaut : avec ZUGFeRD, le XML est la facture qui fait foi ; le PDF n'en est que la représentation visuelle. Toutes les mentions obligatoires des articles 14 et 14a UStG doivent figurer dans le XML ; un renvoi à une pièce jointe ou un lien ne suffit pas. - Trois types d'erreurs : les erreurs de format (p. ex. le XML n'est pas conforme à la EN 16931) font de la facture électronique une « autre facture ». Les erreurs de règles métier ne comptent que si elles concernent des mentions obligatoires – une valeur manquante comme la référence acheteur ( BT-10 ) est sans conséquence au regard de la TVA tant qu'il ne s'agit pas d'une mention obligatoire. Les erreurs de contenu (p. ex. un mauvais taux de TVA) affectent la déduction de la TVA comme auparavant. - Validation : les outils de validation aident, mais ne remplacent pas le contrôle du contenu. Qui valide avec soin peut se fier au résultat concernant le format et les règles métier ; il convient de conserver le rapport de validation. - Conservation : le jeu de données structuré doit être conservé sans modification pendant huit ans – conserver uniquement l'image PDF ne suffit pas. ### Exceptions - Les factures de faible montant jusqu'à 250 euros (TTC) et les titres de transport peuvent toujours être émis comme autres factures. - Les petites entreprises (Kleinunternehmer) ne sont pas tenues d'émettre des factures électroniques, mais doivent pouvoir les recevoir. - Les factures aux particuliers (B2C) et aux destinataires établis à l'étranger ne relèvent pas de l'obligation B2B nationale. ### Ce que les entreprises doivent faire maintenant - Assurer la réception : les factures électroniques doivent être lues, contrôlées et archivées conformément aux GoBD – le XML est l'original qui fait foi. - Préparer l'envoi : complétez votre logiciel de facturation ou votre ERP afin qu'il produise des factures XRechnung ou ZUGFeRD (profil EN 16931). Si vous n'émettez que quelques factures, vous pouvez aussi créer des factures électroniques en ligne dans le navigateur , sans logiciel propre. - Vérifier les données de base : les mentions obligatoires comme le numéro de TVA intracommunautaire (BT-31) , les coordonnées et les informations de paiement doivent être disponibles sous forme structurée. ### Mise en œuvre avec le SDK Aloaha ZUGFeRD Le SDK Aloaha ZUGFeRD ajoute à un logiciel existant la création, la lecture et le contrôle de factures électroniques – sur site (on-premise), sans cloud, pour .NET, COM/VB6, la ligne de commande et en tant que service web. Pour commencer : [démarrage rapide avec VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/) · [licence d'essai gratuite](https://www.zugferdpro.com/tooldownloads/). État : octobre 2026. Ceci ne constitue pas un conseil juridique ou fiscal – seuls la loi et les circulaires du BMF dans leur version en vigueur font foi. ### Questions fréquentes #### Quand l'obligation de facture électronique s'applique-t-elle en Allemagne ? Depuis le 1er janvier 2025, toutes les entreprises nationales doivent pouvoir recevoir des factures électroniques. L'obligation d'émission s'applique à partir du 1er janvier 2027 pour les entreprises dont le chiffre d'affaires de l'année précédente dépasse 800 000 euros et à partir du 1er janvier 2028 pour toutes les entreprises. #### Une facture PDF est-elle une facture électronique ? Non. Une simple facture PDF – même envoyée par e-mail – est une « autre facture ». Une facture ZUGFeRD, en revanche, est un PDF/A-3 contenant un XML structuré intégré et constitue une facture électronique à partir du profil BASIC ; c'est le XML qui fait foi. #### Le destinataire doit-il accepter une facture électronique ? Non. Depuis le 1er janvier 2025, l'accord du destinataire n'est plus nécessaire pour les factures électroniques au sens de l'article 14 UStG. Un accord n'est requis que si le destinataire doit recevoir un PDF ou une autre facture électronique « autre » pendant la période transitoire. #### L'obligation de facture électronique s'applique-t-elle aussi aux clients particuliers ? Non. L'obligation ne concerne que les opérations entre entreprises nationales (B2B). Les factures aux consommateurs peuvent toujours être émises sur papier ou en PDF. #### Existe-t-il des exceptions à l'obligation de facture électronique ? Oui, notamment pour les factures de faible montant jusqu'à 250 euros et les titres de transport. Les petites entreprises ne sont pas tenues d'émettre des factures électroniques, mais doivent pouvoir les recevoir. --- ## Profils ZUGFeRD comparés : MINIMUM, BASIC, EN 16931, EXTENDED, XRECHNUNG URL: https://www.zugferdpro.com/fr/profils-zugferd-compares/ Date: 2026-10-06 Business terms: BT-29, BG-25 ZUGFeRD connaît plusieurs profils. Un profil définit quels champs (business terms de la norme EN 16931) une facture peut ou doit contenir. Plus le profil est élevé, plus la facture structurée peut transporter d’informations. Pour l’obligation allemande de facturation électronique, le choix du profil est déterminant : MINIMUM et BASIC WL ne sont pas considérés comme des factures électroniques. ### Les profils en un coup d’œil ProfilBusiness termsLignes de factureFacture électronique au sens du § 14 UStG ?Usage typique MINIMUM18nonnonaide à la comptabilisation, données d’en-tête et totaux BASIC WL103nonnondonnées d’en-tête et de paiement sans lignes (« without lines ») BASIC125ouiouifactures simples avec lignes EN 16931 (COMFORT)164ouiouicouverture complète de la norme européenne – le cas standard EXTENDED164 + extensionsouiouicas sectoriels complexes, champs supplémentaires au-delà de la norme XRECHNUNGEN 16931 + règles nationalesouiouiacheteurs publics (B2G), CIUS allemande Le nombre de business terms (BT) par profil provient du tableau des champs de la spécification ZUGFeRD 2.5.2 / Factur-X 1.09.2 (en vigueur depuis le 1er septembre 2026). Les champs présents dans chaque profil sont indiqués dans l’[explorateur BT/BG](https://www.zugferdpro.com/bt/) – par exemple, l’[identifiant du vendeur (BT-29)](https://www.zugferdpro.com/bt/bt-29/) est autorisé à partir de BASIC WL, la [ligne de facture (BG-25)](https://www.zugferdpro.com/bt/bg-25/) seulement à partir de BASIC. ### Quels profils sont reconnus comme factures électroniques depuis 2025 ? Selon la circulaire du ministère fédéral allemand des Finances (BMF) du 15 octobre 2024, ZUGFeRD à partir de la version 2.0.1 répond aux exigences d’une facture électronique – à l’exception des profils MINIMUM et BASIC WL. Ces deux profils ne contiennent pas toutes les mentions obligatoires de la norme EN 16931 ; dans les échanges B2B nationaux en Allemagne, ils ne sont donc plus possibles qu’en tant que « autre facture », tant que les périodes de transition courent. Pour en savoir plus, consultez notre aperçu de l’[obligation de facturation électronique en Allemagne](https://www.zugferdpro.com/e-rechnungspflicht-deutschland/). ### Quel profil choisir ? - EN 16931 (COMFORT) est le bon choix pour la plupart des entreprises : il couvre entièrement la norme et est traité par tous les destinataires courants. - XRECHNUNG si vous facturez des administrations et acheteurs publics allemands (Leitweg-ID obligatoire). - EXTENDED uniquement si vous devez transmettre des informations que la norme ne prévoit pas – le destinataire doit alors aussi pouvoir traiter EXTENDED. - BASIC suffit pour des factures simples, mais offre moins de champs (par exemple pour les remises et majorations ou les informations de livraison). ### Régler le profil dans l’Aloaha ZUGFeRD SDK Vous transmettez le profil lors de la création de l’objet. Pour EN 16931 (COMFORT) : ``` Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, LicenseKey) ``` Pour une XRechnung, définissez en plus alo.isKOSIT = True et la [Leitweg-ID](https://www.zugferdpro.com/leitwegid-und-kundennummer/) (en allemand). Un exemple complet figure dans le [démarrage rapide : créer une facture ZUGFeRD avec VB.NET](https://www.zugferdpro.com/zugferd-rechnung-erstellen-vb-net/). ### Questions fréquentes #### ZUGFeRD MINIMUM est-il une facture électronique ? Non. Selon la circulaire du BMF du 15 octobre 2024, les profils MINIMUM et BASIC WL ne sont pas des factures électroniques au sens du § 14 UStG, car ils ne contiennent pas toutes les mentions obligatoires de la norme EN 16931. #### Quelle est la différence entre ZUGFeRD COMFORT et EN 16931 ? Aucune : COMFORT est l’ancien nom du profil qui couvre entièrement la norme européenne EN 16931. Les spécifications actuelles l’appellent « EN 16931 (COMFORT) ». #### Ai-je besoin du profil XRECHNUNG pour les administrations allemandes ? Les acheteurs publics en Allemagne exigent en général une XRechnung. Avec le profil ZUGFeRD XRECHNUNG, vous créez une facture qui respecte les règles de la XRechnung. --- ## ZUGFeRD Beispiel Code URL: https://www.zugferdpro.com/zugferd-beispiel-code/ Date: 2025-05-13 Um die Integration des Aloaha [ZUGFeRD SDKs](https://www.zugferdpro.com/tooldownloads/) zu vereinfachen bieten wir Beispiel Code in [VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/) und [VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/) an. Für Delphi (ab Version 5) und für VB6, VB5 und VBA gibt es eigene Anleitungen: [ZUGFeRD und XRechnung mit Delphi erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/) und [ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/); für Visual FoxPro 9: [ZUGFeRD und XRechnung mit Visual FoxPro erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/). Sollten Sie Vorschläge für weitere Beispiele haben zögern Sie bitte nicht uns diese zu schicken. Bitte vergessen Sie nicht folgenden Artikel zu lesen: [Erstellung einer ZUGFeRD/XRechnung XML Datei](https://www.zugferdpro.com/erstellung-einer-zugferd-xrechnung-xml-datei/) #### Categories - Aloaha - Aloaha ZUGFeRD Tools Aloaha PDF Editor GUI Tools Kommandozeilen-Tools - Beispiel Code AddProduct_Comfort CategoryCode ConvertDOCX2PDF DateTimeString ExportZUGFeRDXML2Disk FillZUGFeRD_Structure GetZUGFeRD_XMLfromPDF IncludedNote Kontonummer KoSIT Kundennummer Leitweg-ID Skonto TaxTypeCode TradeAllowanceCharge unitCode VB.NET ActualDeliveryDate AddAttachments2PDF AddBuyerAssignedID AddProduct_Basic AddSellerAssignedID AddTradeTax BasisQuantityUnitCode BusinessProcessSpecifiedDocumentContextParameter ConvertDOCX2PDF CreateDocFromXML CreateInvoice FileAttachments Files2Attach GetActualDeliveryDate GetBillingPeriod GetZUGFeRD_XMLfromPDF ImportCSV Licensed MergeXMLIntoPDF OccurrenceDateTime Payment terms PDF Formulare PDFForms SetActualDeliveryDate TestIndicator WriteBillingPeriod WriteBuyer WriteInvoiceeTradeParty WriteSeller WriteShipToTradeParty ZUGFeRD_Structure ZUGFeRDProfile VB6 AddProduct_Basic BusinessProcessSpecifiedDocumentContextParameter Create_Invoice Early Binding LastError Late Binding Licensed register SaveAttachment SaveXML WriteSeller Web Services CreateDOCXFromXML exportzugferdxml2disk MergeXMLIntoPDF pdfuploader.aspx xmluploader.aspx zugferd.aspx WriteTotals ZUGfeRDStandard - Fragen und Antworten - Information DE - Information EN - Optionale Tools - Videos - ZUGFeRD #### Neueste Beiträge - Stellungnahme zum ZUGFeRD-Validator des Mustang Projects – oder: Wenn „nicht valide“ nichts mit der Realität zu tun hat - Beispielcode für XRechnung mit Aloaha ZUGFeRD SDK - Kostenfreies Online-Formular für elektronische Rechnungen: Digitalisierung für alle Unternehmen zugänglich machen - Rechnungsposten mit Artikelnummer des Kunden versehen BT-156, BT-155 - Differenzbesteuerung nach § 25a UStG - Posten aus der ZUGFeRD bzw. X-Rechnung auslesen - Angabe rechnungsrelevanter Freitexte – IncludedNote, VD-Valitool-71 - XRechnungs-XML direkt in eine Winword-Datei oder ZUGeRD PDF umwandeln - AddTradeAllowanceCharge (BG-20, BG-21) - WriteTotals - Skonto und Verzugszinsen (BT-20) - Der Rechnung Posten mit AddProduct_Comfort hinzufügen - Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) oder .NET (Early Binding) - Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) with Late Binding - Mandatory e-invoicing for companies starts from 2025 - E-Rechnungspflicht für Firmen kommt ab 2025​ - Konvertierung von ZUGFeRD X-Rechnung XML nach Winword DOCX - Konvertierung von ZUGFeRD-konformen X-Rechnungen nach CSV - Importieren von CSV-Dateien in eine ZUGFeRD-konforme X-Rechnung #### Stellungnahme zum ZUGFeRD-Validator des Mustang Projects – oder: Wenn „nicht valide“ nichts mit der Realität zu tun hat “Das ZUGFeRD-PDF ist nicht valide.” “Signatur: unknown” Mustang Validator [weiterlesen →](https://www.zugferdpro.com/stellungnahme-zum-zugferd-validator-des-mustang-projects-oder-wenn-nicht-valide-nichts-mit-der-realitat-zu-tun-hat/) Kategorie: [Aloaha](https://www.zugferdpro.com/category/aloaha/), [Information DE](https://www.zugferdpro.com/category/informationde/) #### Beispielcode für XRechnung mit Aloaha ZUGFeRD SDK Ein Kunde hat uns folgenden Code als Beispiel zur Verfügung gestellt: [weiterlesen →](https://www.zugferdpro.com/beispiel-code/) Kategorie: [Beispiel Code](https://www.zugferdpro.com/category/code-2/) #### Kostenfreies Online-Formular für elektronische Rechnungen: Digitalisierung für alle Unternehmen zugänglich machen Kostenfreies Online-Formular für elektronische Rechnungen: Digitalisierung für alle Unternehmen zugänglich machen [weiterlesen →](https://www.zugferdpro.com/kostenfreies-online-formular-fur-elektronische-rechnungen-digitalisierung-fur-alle-unternehmen-zuganglich-machen/) Kategorie: [Aloaha](https://www.zugferdpro.com/category/aloaha/), [Information DE](https://www.zugferdpro.com/category/informationde/) #### Rechnungsposten mit Artikelnummer des Kunden versehen BT-156, BT-155 Rechnungsposten mit Artikelnummer des Kunden versehen BT-156 [weiterlesen →](https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/) Kategorie: [Beispiel Code](https://www.zugferdpro.com/category/code-2/) #### Differenzbesteuerung nach § 25a UStG Differenzbesteuerung nach § 25a UStG [weiterlesen →](https://www.zugferdpro.com/differenzbesteuerung-nach-paragraph-25a-ustg/) Kategorie: [Fragen und Antworten](https://www.zugferdpro.com/category/fragen-und-antworten/), [Information DE](https://www.zugferdpro.com/category/informationde/) #### Posten aus der ZUGFeRD bzw. X-Rechnung auslesen Mit dem Aloaha ZUGFeRD SDK ist es ganz einfach, ein ZUGFeRD-PDF bzw. eine X-Rechnungs-XML einzulesen. Zuerst müssen Sie natürlich das Aloaha-Objekt erstellen: In VB.NET In VB6 (Early Binding) In VBA/VB6 (Late Binding) Als nächstes müssen Sie die Rechnung einlesen. Sie… [weiterlesen →](https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/) Kategorie: [Beispiel Code](https://www.zugferdpro.com/category/code-2/), [FillZUGFeRD_Structure](https://www.zugferdpro.com/category/code-2/fillzugferd_structure/), [VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/), [VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/), [ZUGFeRD_Structure](https://www.zugferdpro.com/category/code-2/vb-net-code-2/zugferd_structure/) #### Angabe rechnungsrelevanter Freitexte – IncludedNote, VD-Valitool-71 Mit dem Feld “IncludedNote” bindet man eine Aggregation von Geschäftstermini zur Offenlegung von Freitexten, die rechnungsrelevant sind, sowie deren Qualifikation in die ZUGFeRD X-Rechnung ein. Dazu gehören: allgemeine Informationen (AAI), Anmerkungen des Verkäufers (SUR), regulatorische Informationen (REG), rechtliche Informationen (ABL),… [weiterlesen →](https://www.zugferdpro.com/includednote-bg-1-bt-21-bt-22/) Kategorie: [Beispiel Code](https://www.zugferdpro.com/category/code-2/), [IncludedNote](https://www.zugferdpro.com/category/code-2/includednote/), [Information DE](https://www.zugferdpro.com/category/informationde/) #### XRechnungs-XML direkt in eine Winword-Datei oder ZUGeRD PDF umwandeln Ein kaum beachteter Webdienst ermöglicht die direkte Umwandlung einer ZUGFeRD XML-Datei in eine Winword-Datei. Dies ist besonders interessant, wenn man aus der XML-Datei eine druckbare Version erstellen möchte. Zum Testen haben wir diese API öffentlich zugänglich gemacht unter: https://eforms.aloaha.com/xmluploader.aspx?o=docx Wenn… [weiterlesen →](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) Kategorie: [CreateDOCXFromXML](https://www.zugferdpro.com/category/code-2/web-services/createdocxfromxml/), [xmluploader.aspx](https://www.zugferdpro.com/category/code-2/web-services/xmluploader-aspx/) #### AddTradeAllowanceCharge (BG-20, BG-21) AddTradeAllowanceCharge fügt eine Gruppe von Geschäftstermini hinzu, die Informationen über die anwendbaren Zuschläge oder Rabatte auf den Gesamtbetrag der Rechnung bereitstellen. [weiterlesen →](https://www.zugferdpro.com/addtradeallowancecharge/) Kategorie: [Information DE](https://www.zugferdpro.com/category/informationde/), [TradeAllowanceCharge](https://www.zugferdpro.com/category/code-2/tradeallowancecharge/) #### WriteTotals Der Befehl WriteTotals ist selbstverständlich einer der wichtigsten Befehle des SDKs, da jede ZUGFeRD- bzw. X-Rechnung Summen, Zuschläge, Abschläge, Anzahlungen, Mehrwertsteuer usw. enthalten muss. [weiterlesen →](https://www.zugferdpro.com/writetotals/) Kategorie: [WriteTotals](https://www.zugferdpro.com/category/code-2/writetotals/) --- ## Stellungnahme zum ZUGFeRD-Validator des Mustang Projects – oder: Wenn „nicht valide“ nichts mit der Realität zu tun hat URL: https://www.zugferdpro.com/stellungnahme-zum-zugferd-validator-des-mustang-projects-oder-wenn-nicht-valide-nichts-mit-der-realitat-zu-tun-hat/ Date: 2025-05-13 Regelmäßig erreichen uns beunruhigte Rückfragen von Kunden, die berichten, dass unsere ZUGFeRD-konformen PDF-Rechnungen angeblich „nicht valide“ seien. Die Quelle dieser Diagnose? Der sogenannte ZUGFeRD Validator des Mustang Projects – ein Open-Source-Werkzeug, das sich selbstbewusst zum Richter über PDF-Gültigkeit aufschwingt. Die zentrale „Fehlermeldung“ lautet: Das ZUGFeRD-PDF ist nicht valide. Signatur: unknown Klingt dramatisch. Ist es aber nicht. Ganz im Gegenteil: Diese Meldung ist fachlich falsch – und, man darf es wohl sagen, irreführend. Ob bewusst oder nur aus Übermut, bleibt offen. Zunächst zur Beruhigung: Nein, diese Meldung bedeutet nicht, dass das PDF fehlerhaft ist. Und nein, sie hat rein gar nichts mit einer elektronischen Signatur im Sinne von eIDAS oder dem Signaturgesetz zu tun. Der Hinweis „Signatur: unknown“ bezieht sich nicht auf eine fehlgeschlagene Validierung, sondern lediglich auf das Nichtvorhandensein eines bestimmten (mehr oder weniger willkürlich festgelegten) Text-Schnipsels im PDF. Denn was macht der „Validator“ eigentlich? Nun, keine tiefgreifende Validierung, keine Signaturprüfung, keine semantische Kontrolle. Stattdessen sucht er nach sogenannten Magic Strings – also nach Stichwörtern wie „Ghostscript“ oder „Lexware“, die in der PDF-Datei enthalten sein könnten. Fehlen diese, wird kurzerhand behauptet, das PDF sei „nicht valide“. Das ist in etwa so, als würde man behaupten, ein Auto sei kein Auto, nur weil kein „VW“-Logo drauf ist. Wer es nicht glauben mag, möge selbst einen Blick in den [Sourcecode](https://github.com/ZUGFeRD/mustangproject/blob/master/validator/src/main/java/org/mustangproject/validator/PDFValidator.java) werfen. Dort offenbart sich die ganze „Tiefe“ dieser Logik. Fakt ist: Unsere PDFs entsprechen dem ZUGFeRD-Standard (z.B. ZUGFeRD 2.x, Profil EN_16931). Das eingebettete XML ist valide, strukturell korrekt und regelkonform. Und das PDF selbst? Technisch einwandfrei. Dass ein Open-Source-Tool mit begrenzter Prüfungstiefe daraus etwas anderes konstruiert, ist ärgerlich – und leider geeignet, bei Kunden unnötige Verunsicherung zu erzeugen. Wir fordern daher: Wenn ein Tool sich „Validator“ nennt, sollte es auch valide Ergebnisse liefern – oder zumindest klarstellen, was es nicht prüft. --- ## Sample code for the Aloaha ZUGFeRD SDK (VB.NET, C#, VB6/VBA) URL: https://www.zugferdpro.com/en/zugferd-sample-code/ Date: 2025-05-13 To make integrating the Aloaha [ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/) easier, we provide sample code in [VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/) and [VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/). Most of the samples are documented in German; the code itself is the same in every language. For Delphi (from version 5) and for VB6, VB5 and VBA there are dedicated guides: [Creating ZUGFeRD and XRechnung with Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/) and [Creating ZUGFeRD and XRechnung with VB6, VB5 and VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/); for Visual FoxPro 9: [Creating ZUGFeRD and XRechnung with Visual FoxPro](https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/). If you have suggestions for further samples, please do not hesitate to send them to us at [info@aloaha.com](mailto:info@aloaha.com). Please make sure to read this article: [Creating a ZUGFeRD/XRechnung XML file](https://www.zugferdpro.com/erstellung-einer-zugferd-xrechnung-xml-datei/) (German). ### Where to start - Quick start: create a ZUGFeRD invoice in VB.NET and embed it in PDF/A-3 - Sample code for XRechnung with the Aloaha ZUGFeRD SDK – a larger example with allowances and two VAT rates (German) - Creating a ZUGFeRD/XRechnung XML file via the COM interface (VB6/VBA) or .NET – early binding (German) - The same with late binding (German) - Reading line items from a ZUGFeRD invoice or XRechnung (German) - Creating e-invoices via CSV and zugcmd from your own application – without programming against the SDK ### Samples by topic TopicArticles Invoice lines[Adding invoice lines with AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/), [buyer's article number per line (BT-156, BT-155)](https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/) Totals, allowances and charges[WriteTotals](https://www.zugferdpro.com/writetotals/), [AddTradeAllowanceCharge (BG-20, BG-21)](https://www.zugferdpro.com/addtradeallowancecharge/) Payment terms[Cash discount and default interest (BT-20)](https://www.zugferdpro.com/skonto-und-verzugszinsen-bt-20/) Free texts[Invoice-relevant free texts – IncludedNote (BG-1, BT-21, BT-22)](https://www.zugferdpro.com/includednote-bg-1-bt-21-bt-22/) VAT special cases[Margin scheme under § 25a UStG](https://www.zugferdpro.com/differenzbesteuerung-nach-paragraph-25a-ustg/) CSV import and export[Importing CSV files into an XRechnung](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/), [converting ZUGFeRD invoices to CSV](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/) Word and PDF output[Converting ZUGFeRD XML to Word (DOCX)](https://www.zugferdpro.com/konvertierung-von-zugferd-x-rechnung-xml-nach-winword-docx/), [converting XRechnung XML directly into a Word file or ZUGFeRD PDF](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) All articles listed above are in German. ### Code categories - All sample code - VB.NET – e.g. CreateInvoice , WriteSeller , WriteBuyer , AddTradeTax , MergeXMLIntoPDF , CreateDocFromXML , ImportCSV , ZUGFeRD_Structure - VB6 – e.g. early binding , late binding , registration , SaveXML , LastError - Web services – e.g. MergeXMLIntoPDF , CreateDOCXFromXML - Further topics: KoSIT , Leitweg-ID , cash discount , unitCode , TradeAllowanceCharge , WriteTotals The complete method reference is in the [API reference](https://www.zugferdpro.com/api/), and every EN 16931 business term is explained in the [BT/BG explorer](https://www.zugferdpro.com/bt/). ### Frequently asked questions #### In which languages is sample code available? Mainly in VB.NET and VB6/VBA; the same methods work in C# and other COM-capable languages. There are dedicated guides for Delphi and for VB6, VB5 and VBA. #### Where do I start if I want to create my first ZUGFeRD invoice? With the quick start for VB.NET: it shows the complete path from creating the object to the finished PDF/A-3 with embedded XML. A larger example with allowances and two VAT rates is the sample code for XRechnung. #### Can I create e-invoices without programming against the SDK? Yes. With the command-line tool zugcmd you create ZUGFeRD and XRechnung invoices from CSV files and start it from any application, batch file or script. --- ## Exemples de code pour le SDK Aloaha ZUGFeRD (VB.NET, C#, VB6/VBA) URL: https://www.zugferdpro.com/fr/exemples-de-code-zugferd/ Date: 2025-05-13 Pour faciliter l'intégration du [SDK Aloaha ZUGFeRD](https://www.zugferdpro.com/tooldownloads/), nous mettons à disposition des exemples de code en [VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/) et [VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/). La plupart des exemples sont documentés en allemand ; le code lui-même est identique dans toutes les langues. Pour Delphi (à partir de la version 5) ainsi que pour VB6, VB5 et VBA, il existe des guides dédiés : [Créer des factures ZUGFeRD et XRechnung avec Delphi](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/) et [Créer des factures ZUGFeRD et XRechnung avec VB6, VB5 et VBA](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/) ; pour Visual FoxPro 9 : [ZUGFeRD et XRechnung avec Visual FoxPro](https://www.zugferdpro.com/en/create-zugferd-xrechnung-with-visual-foxpro/) (en anglais). Si vous avez des suggestions d'autres exemples, n'hésitez pas à nous les envoyer à [info@aloaha.com](mailto:info@aloaha.com). Veuillez lire impérativement cet article : [Création d'un fichier XML ZUGFeRD/XRechnung](https://www.zugferdpro.com/erstellung-einer-zugferd-xrechnung-xml-datei/) (en allemand). ### Par où commencer - Démarrage rapide : créer une facture ZUGFeRD en VB.NET et l'intégrer en PDF/A-3 - Exemple de code pour XRechnung avec le SDK Aloaha ZUGFeRD – un exemple plus complet avec remises et deux taux de TVA (en allemand) - Création d'un fichier XML ZUGFeRD/XRechnung via l'interface COM (VB6/VBA) ou .NET – liaison anticipée (en allemand) - La même chose avec liaison tardive (en allemand) - Lire les lignes d'une facture ZUGFeRD ou d'une XRechnung (en allemand) - Créer des factures électroniques par CSV et zugcmd depuis votre application – sans programmer avec le SDK ### Exemples par thème ThèmeArticles Lignes de facture[Ajouter des lignes de facture avec AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/), [numéro d'article de l'acheteur par ligne (BT-156, BT-155)](https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/) Totaux, remises et charges[WriteTotals](https://www.zugferdpro.com/writetotals/), [AddTradeAllowanceCharge (BG-20, BG-21)](https://www.zugferdpro.com/addtradeallowancecharge/) Conditions de paiement[Escompte et intérêts de retard (BT-20)](https://www.zugferdpro.com/skonto-und-verzugszinsen-bt-20/) Textes libres[Textes libres pertinents pour la facture – IncludedNote (BG-1, BT-21, BT-22)](https://www.zugferdpro.com/includednote-bg-1-bt-21-bt-22/) Cas particuliers de TVA[Régime de la marge selon le § 25a UStG](https://www.zugferdpro.com/differenzbesteuerung-nach-paragraph-25a-ustg/) Import et export CSV[Importer des fichiers CSV dans une XRechnung](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/), [convertir des factures ZUGFeRD en CSV](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/) Sortie Word et PDF[Convertir un XML ZUGFeRD en Word (DOCX)](https://www.zugferdpro.com/konvertierung-von-zugferd-x-rechnung-xml-nach-winword-docx/), [convertir un XML XRechnung directement en fichier Word ou en PDF ZUGFeRD](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) Tous les articles listés ci-dessus sont en allemand. ### Catégories de code - Tous les exemples de code - VB.NET – par ex. CreateInvoice , WriteSeller , WriteBuyer , AddTradeTax , MergeXMLIntoPDF , CreateDocFromXML , ImportCSV , ZUGFeRD_Structure - VB6 – par ex. liaison anticipée , liaison tardive , enregistrement , SaveXML , LastError - Services web – par ex. MergeXMLIntoPDF , CreateDOCXFromXML - Autres thèmes : KoSIT , Leitweg-ID , escompte , unitCode , TradeAllowanceCharge , WriteTotals La référence complète des méthodes se trouve dans la [référence API](https://www.zugferdpro.com/api/), et chaque terme métier EN 16931 est expliqué dans l'[explorateur BT/BG](https://www.zugferdpro.com/bt/). ### Questions fréquentes #### Dans quels langages des exemples de code sont-ils disponibles ? Principalement en VB.NET et VB6/VBA ; les mêmes méthodes fonctionnent en C# et dans d'autres langages compatibles COM. Il existe des guides dédiés pour Delphi ainsi que pour VB6, VB5 et VBA. #### Par où commencer pour créer ma première facture ZUGFeRD ? Par le démarrage rapide pour VB.NET : il montre le chemin complet, de la création de l'objet jusqu'au PDF/A-3 finalisé avec XML intégré. Un exemple plus complet avec remises et deux taux de TVA est l'exemple de code pour XRechnung. #### Puis-je créer des factures électroniques sans programmer avec le SDK ? Oui. Avec l'outil en ligne de commande zugcmd, vous créez des factures ZUGFeRD et XRechnung à partir de fichiers CSV et le lancez depuis n'importe quelle application, fichier batch ou script. --- ## Beispielcode für XRechnung mit Aloaha ZUGFeRD SDK URL: https://www.zugferdpro.com/beispiel-code/ Date: 2025-02-18 Business terms: BT-23, BT-49, BT-34, BT-14 SDK methods: AddBuyerAssignedID, AddReceivableSpecifiedTradeAccountingAccount, AddSpecifiedProcuringProject, BusinessProcessSpecifiedDocumentContextParameter, BuyerName, BuyerReference, CreateInvoice, Document_ID, Document_Type, EightAfterKommaDigitsfor4, InvoiceCurrencyCode, IsKosit, LeitwegID, PrintPDFDocument, TodayDate, ZUGfeRDStandard Ein Kunde hat uns folgenden Code als Beispiel zur Verfügung gestellt: [beispielcode_aloaha_XRechnung](https://www.zugferdpro.com/wp-content/uploads/2025/02/beispielcode_aloaha_XRechnung.txt)[Download](https://www.zugferdpro.com/wp-content/uploads/2025/02/beispielcode_aloaha_XRechnung.txt) ``` Private Function create_XML_Public_Authority(sLeitweg_ID As String) As Boolean Dim sSQL As String Dim sWrt As String Dim sArr() As String Dim iValue As Double ' Dim RechnungsPostenID As Long Dim Produktnotiz As String Dim Produktname As String Dim Produktbeschreibung As String Dim ProduktID As String Dim Einheit As String Dim Anzahl As String Dim Bruttopreis As String Dim BruttopreisAnzahl As String Dim Bruttogesamtpreis As String Dim NettoEinzelPreis As Double Dim Rabatt As String Dim Nettopreis As String Dim NettopreisAnzahl As String Dim Nettogesamtpreis As String Dim MwSt_Satz As String Dim MwSt_KE As String ' Dim CalculatedAmount As String Dim BasisAmount As String Dim TaxTypeCode As String Dim CategoryCode As String Dim ApplicablePercent As String Dim TaxPointDate As String Dim DueDateTypeCode As String Dim ExemptionReason As String ' Dim LicenseKey As String = "1234567890" Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing Dim ProfileType As Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile = Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort Dim TestIndicator As Boolean = False 'Es ist immer eine gute Idee ein Backup vom "CultureInfo" zu machen Dim culture As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("de-DE") Dim culturebackup As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = culture Dim alo As Aloaha_ZUGFeRD.XML = New Aloaha_ZUGFeRD.XML(ProfileType, TestIndicator, LicenseKey) alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice 'alo.PrintPDFDocument("c:\temp\pdfrechnung.pdf", LicenseKey, "Microsoft XPS Document Writer") alo.EightAfterKommaDigitsfor4 = False alo.isKOSIT = True ' sActual_XML_Public_Authority = sSysTempVerz & "\XRECHNUNG_" & sInvoice_No & ".xml" Dim Rechnungsnummer As String = sInvoice_No Dim Rechnungsdatum As String = alo.TodayDate.Document_Date Dim Rechnungsnotiz As String = "Rechnung gemaess Bestellung" Dim Rechnungssprache As String = "" 'Sollte leer sein alo.CreateInvoice(Rechnungsnummer, Rechnungsnotiz, Rechnungsdatum, alo.TodayDate.Document_DateFormat, , Rechnungssprache, "EUR") alo.InvoiceCurrencyCode = "EUR" alo.Document_ID = Rechnungsnummer alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice 'BT-23 Statischer String alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" ' 'Definieren Sie einige allgemeine Eigenschaften der Rechnung alo.AddSpecifiedProcuringProject("ProjectID", "ProjectName") alo.AddBuyerAssignedID("Bestellnummer") alo.AddReceivableSpecifiedTradeAccountingAccount("Buchungsreferenz", "") ' ' ' 'falls es eine LeitwegID gibt bitte auch angeben 'Sie ueberschreibt: alo.BuyerReference If sLeitweg_ID.Trim = "" Then sActual_XML_Public_Authority = "" Return false End If alo.LeitwegID = sLeitweg_ID ' '=== Erstellen Sie den Kaeufer (Ohne Ort, der folgt im Ansprechpartnerblock) === alo.BuyerName = 'Test GmbH" alo.BuyerPostCode = "20000" alo.BuyerID = "12345" 'Kundennr. alo.BuyerAddressLine1 = "Hauptstr. 1" alo.BuyerCountry = "DE" 'Iso-2-Code 'BT-49 'Auch die URIUniversalCommunication ist ein Muss alo.set_URIUniversalCommunication("info@zugferdpro.com", "EM", False) 'Eine Kontaktperson ist ein Muss. Die meisten Validatoren erwarten es alo.BuyerPersonalName = "Franz Holzmann" alo.BuyerDepartment = "" alo.BuyerEmail = "fholzmann@gmail.com" alo.BuyerTelephone = "0170123456789" alo.BuyerCity = "Hamburg" 'ACHTUNG: City nur einmal nennen, gilt fuer Buyer und Ansprechpartner ' '=== Erstellen Sie den Verkaeufer === alo.WriteSeller("Test GmbH", "20000", "Hamburg", "Hauptstr. 1", "", "DE", "DE12345678",) alo.SellerLegalID = "HRB 12345" 'EM=Email 'BT-34 alo.set_URIUniversalCommunication("info@test.de", "EM", True) 'Und wieder ist die Kontaktperson ein Musss alo.WriteSellerContactPerson("Birgit Mueller", "Vertrieb", "bmueller@online.de", "+49 1234567890") ' ' ' 'Jede Rechnung moechte auch bezahlt werden. Deshalb benoetigen Sie mindestens eine Zahlungsmethode 'Bankname, BLZ werden von den meisten Validatoren nicht mehr erwuenscht Dim KontoName As String = "" Dim BankName As String = "" 'Sollte leer bleiben 'Zahlungsbedingungen sollten auch immer angegeben werden. 'Hier kann auch Skonto untergebracht werden. 'Details: h_ttps://www.zugferdpro.com/skonto-und-verzugszinsen-bt-20/ Dim PaymentTermsDescription As String = "" Dim DueDate As String = "" Dim DirectDebitMandateID As String = "" Dim PeriodUnit As String = "" Dim Period As String = "" Dim DiscountPercent As String = "" Dim DiscountAmount As String = "" Dim Steuerbasis As Double 'Nettosumme 19%, wird pro Pos. aufaddiert Dim Umsatzsteuersatz As Double = "19" Dim Steuerbasis_reduced As Double 'Nettosumme 7%, wird pro Pos. aufaddiert Dim Umsatzsteuersatz_reduced As Double = "7" ' KontoName = "Test GmbH" 'Kontoinhalber-Name alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer), "Sepa Credit Transfer", "DE1234567890", KontoName, "", "GENODEDXXXX", "", BankName, False) 'Zahlungsbedingung aufgedroeselt: -wir lassen das erstmal und schreiben es nur in den Text- 'PeriodUnit = "DAY" 'Period = "30" 'DiscountPercent = "3" 'DiscountAmount = "10" PaymentTermsDescription = "30 Tage netto" DueDate = alo.TodayDate.Document_Date alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID, PeriodUnit, Period, DiscountPercent, DiscountAmount) 'Kein Datum, sonst Fehler 'alo.AddSellerAssignedID("Auftragsbestaetigung", "20130608", "102") 'BT-14 alo.PaymentReference = "Invoice No. " & sInvoice_No 'Gibt es keine "Lieferavisreferenz", dann muss man etwas uebergeben alo.SetDespatchAdviceReferencedDocument("n/a") '================ P O S I T I O N E N ====================== 'Natuerlich enthaelt jede Rechnung auch die Rechnungsposten. 'AddProduct_Comfort wird pro Posten einmal aufgerufen 'Details auf: h_ttps://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/ 'Einheiten sind streng definiert. Sie koennen nicht einfach "Stueck" schreiben 'h_ttps://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/ Steuerbasis = 0 Steuerbasis_reduced = 0 '-------------POS 0 'Ohne Rabatt RechnungsPostenID = 0 Produktnotiz = "nicht rabattierfaehig" ProduktID = "TB100A4" Produktname = "500 Blatt Papier" Produktbeschreibung = "Papier A4" Einheit = "C62" Anzahl = "10.00" 'Anzahl MwSt_Satz = "19.00" MwSt_KE = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) Bruttopreis = "" BruttopreisAnzahl = "" Bruttogesamtpreis = "" Rabatt = "" NettopreisAnzahl = "1.00" NettoEinzelPreis = 0 Nettopreis = "5.00" 'EP Nettogesamtpreis = "50.00" 'GESPREIS = Anzahl * EP Steuerbasis += CDbl(Nettogesamtpreis) ' RechnungsPostenID = alo.AddProduct_Comfort(CStr(RechnungsPostenID), Produktnotiz, ProduktID, Anzahl, Einheit, Produktname, Produktbeschreibung, Bruttopreis, "EUR", "", Einheit, False, Rabatt, "", "", Nettopreis, "EUR", NettopreisAnzahl, Einheit, "VAT", MwSt_KE, MwSt_Satz, "", Nettogesamtpreis, "EUR", "", "") ' ' ' '-------------POS 1 'RABATT Produktnotiz = "Rabatt gegeben" RechnungsPostenID = 1 ProduktID = "AS0815" Produktname = "Scheibe" Produktbeschreibung = "Anlaufscheibe" Einheit = "C62" Anzahl = "10.00" MwSt_Satz = "19.00" MwSt_KE = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) Bruttopreis = "25.25" 'EP * Anzahl BruttopreisAnzahl = "10.00" Bruttogesamtpreis = "" Rabatt = "3.79" 'in Euro NettopreisAnzahl = "10.00" NettoEinzelPreis = (CDbl(Bruttopreis) - CDbl(Rabatt)) / CDbl(BruttopreisAnzahl) 'EP - Rabatt Nettopreis = CStr(Math.Round(NettoEinzelPreis * CDbl(NettopreisAnzahl), 2)) '(EP - Rabatt) * Anzahl Nettogesamtpreis = CStr(Math.Round(NettoEinzelPreis * CDbl(Anzahl), 2)) Steuerbasis += CDbl(Nettogesamtpreis) RechnungsPostenID = alo.AddProduct_Comfort(CStr(RechnungsPostenID), Produktnotiz, ProduktID, Anzahl, Einheit, Produktname, Produktbeschreibung, Bruttopreis, "EUR", "", Einheit, False, Rabatt, "EUR", "", Nettopreis, "EUR", NettopreisAnzahl, Einheit, "VAT", MwSt_KE, MwSt_Satz, "", Nettogesamtpreis, "EUR", "", "") ' '-------------POS 2 'Ohne Rabatt RechnungsPostenID = 2 Produktnotiz = "nicht rabattierfaehig" ProduktID = "TBXXXA4" Produktname = "1 Blatt Papier" Produktbeschreibung = "Papier A5" Einheit = "C62" Anzahl = "10.00" 'Anzahl MwSt_Satz = "7.00" MwSt_KE = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) Bruttopreis = "" BruttopreisAnzahl = "" Bruttogesamtpreis = "" Rabatt = "" NettopreisAnzahl = "1.00" NettoEinzelPreis = 0 Nettopreis = "5.00" 'EP Nettogesamtpreis = "50.00" 'GESPREIS = Anzahl * EP Steuerbasis_reduced = Steuerbasis_reduced + CDbl(Nettogesamtpreis) ' RechnungsPostenID = alo.AddProduct_Comfort(CStr(RechnungsPostenID), Produktnotiz, ProduktID, Anzahl, Einheit, Produktname, Produktbeschreibung, Bruttopreis, "EUR", "", Einheit, False, Rabatt, "", "", Nettopreis, "EUR", NettopreisAnzahl, Einheit, "VAT", MwSt_KE, MwSt_Satz, "", Nettogesamtpreis, "EUR", "", "") '========= 19% =========== ' 'Nun muessen wir noch die Steuern addieren und angeben CalculatedAmount = Math.Round((Steuerbasis * (Umsatzsteuersatz)) / 100, 2) BasisAmount = CStr(Math.Round(Steuerbasis, 2)) TaxTypeCode = "VAT" CategoryCode = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) ApplicablePercent = CStr(Umsatzsteuersatz) TaxPointDate = DueDate DueDateTypeCode = "" ExemptionReason = "" alo.AddTradeTax(CalculatedAmount, "EUR", BasisAmount, "EUR", TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "102", DueDateTypeCode) '========= 7% =========== ' 'Nun muessen wir noch die Steuern addieren und angeben CalculatedAmount = Math.Round((Steuerbasis_reduced * (Umsatzsteuersatz_reduced)) / 100, 2) BasisAmount = CStr(Math.Round(Steuerbasis_reduced, 2)) TaxTypeCode = "VAT" CategoryCode = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) ApplicablePercent = CStr(Umsatzsteuersatz_reduced) TaxPointDate = "" 'Das Datum nur einmal ausweisen DueDateTypeCode = "" ExemptionReason = "" alo.AddTradeTax(CalculatedAmount, "EUR", BasisAmount, "EUR", TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "102", DueDateTypeCode) ' ' ' ' 'Nun fehlen nur noch die Summen h_ttps://www.zugferdpro.com/writetotals/ 'Summe aller Posten NETTO GESAMT Dim LineTotalAmount As String = CStr(Math.Round(Steuerbasis + Steuerbasis_reduced, 2)) 'Summe incl. MwSt BRUTTO GESAMT iValue = Math.Round(Steuerbasis + ((Steuerbasis * (Umsatzsteuersatz)) / 100), 2) iValue += Math.Round(Steuerbasis_reduced + ((Steuerbasis_reduced * (Umsatzsteuersatz_reduced)) / 100), 2) Dim GrandTotalAmount As String = CStr(iValue) 'Zahlbar BRUTTO GESAMT iValue = Math.Round(Steuerbasis + ((Steuerbasis * (Umsatzsteuersatz)) / 100), 2) iValue += Math.Round(Steuerbasis_reduced + ((Steuerbasis_reduced * (Umsatzsteuersatz_reduced)) / 100), 2) Dim DuePayableAmount As String = CStr(iValue) 'Versteuerbare Summe NETTO GESAMT Dim TaxBasisTotalAmount As String = CStr(Math.Round(Steuerbasis + Steuerbasis_reduced, 2)) 'MwSt Gesamt MWST GESAMT iValue = Math.Round(Steuerbasis * (Umsatzsteuersatz) / 100, 2) iValue += Math.Round(Steuerbasis_reduced * (Umsatzsteuersatz_reduced) / 100, 2) Dim TaxTotalAmount As String = CStr(iValue) 'Anzahlungen beruecksichtigen Dim Anzahlung As String = "0.00" 'Abschlaege Dim AllowanceTotalAmount As String = "0.00" 'Zuschlaege Dim ChargeTotalAmount As String = "0.00" Dim Rundungsfehler As String = "0.00" ' alo.WriteTotals(LineTotalAmount, GrandTotalAmount, DuePayableAmount, TaxBasisTotalAmount, TaxTotalAmount, AllowanceTotalAmount, Anzahlung, Rundungsfehler, ChargeTotalAmount) 'Sie koennen sich auch die Struktur im Debugger anschauen 'Auch koennen Sie Werte direkt aendern zug = alo.ZUGFeRD_Structure 'Wenn Felder editiert wurden muss man natuerlich zurueckschreiben 'alo.ZUGFeRD_Structure = zug 'Wir erstellen nun das XML alo.UseASIIOnSave = False alo.SaveWithoutUTF8Header = True 'Mit oder ohne BOM speichern If System.IO.File.Exists(sActual_XML_Public_Authority) = True Then System.IO.File.Delete(sActual_XML_Public_Authority) alo.SaveXML(sActual_XML_Public_Authority) 'Es wurde nichts erstellt? Dann schauen Sie mal in Lasterror nach If alo.Last_Error <> "" Then MsgBox(alo.Last_Error) 'Sie koennen auch direkt den PDF Teil erstellen. Winword muss dazu allerdings installiert sind 'Natuerlich koennen Sie auch Ihre eigene PDF Datei benutzen. Dim docpdf As String = "c:\temp\Rechnung.pdf" Dim docx As String = "c:\temp\template.docx" If System.IO.File.Exists(docpdf) = True Then System.IO.File.Delete(docpdf) alo.CreateDocFromXML(sActual_XML_Public_Authority, docpdf, docx, LicenseKey, True, "", True) 'Wenn Sie eine Hybride Rechnung erstellen moechten 'Dann muessen Sie den XML Teil in Ihre PDF Rechnung einbetten. 'in docpdf koennen Sie natuerlich auch Ihre exitierende PDF Rechnung eintragen Dim zugferdrechnung As String = "c:\temp\zugferdrechnung.pdf" If System.IO.File.Exists(zugferdrechnung) = True Then System.IO.File.Delete(zugferdrechnung) 'Eigentlich ueberfluessig da docpdf schon das XML enthaelt. Call alo.MergeXMLIntoPDF(sActual_XML_Public_Authority, docpdf, zugferdrechnung, True, "", LicenseKey) alo = Nothing 'CultureInfo zurueckschreiben System.Threading.Thread.CurrentThread.CurrentCulture = culturebackup end Function ``` [beispielcode_aloaha_XRechnung](https://www.zugferdpro.com/wp-content/uploads/2025/02/beispielcode_aloaha_XRechnung.txt)[Download](https://www.zugferdpro.com/wp-content/uploads/2025/02/beispielcode_aloaha_XRechnung.txt) --- ## Kostenfreies Online-Formular für elektronische Rechnungen: Digitalisierung für alle Unternehmen zugänglich machen URL: https://www.zugferdpro.com/kostenfreies-online-formular-fur-elektronische-rechnungen-digitalisierung-fur-alle-unternehmen-zuganglich-machen/ Date: 2024-11-06 Um die Verbreitung elektronischer Rechnungen zu fördern und Unternehmen sowie öffentliche Verwaltungen zu unterstützen, stellt Aloaha ab sofort ein kostenfreies Online-Formular für Rechnungen im ZUGFeRD- bzw. Factur-X-Format auf seinem Formserver bereit. Die Nutzung ist ohne Registrierung möglich und völlig kostenlos. Damit bietet Aloaha Unternehmen jeder Größe – vom Einzelunternehmer bis zum Großkonzern – die Möglichkeit, die Vorteile elektronischer Rechnungen und insbesondere die ZUGFeRD- und Factur-X-Formate zu nutzen. Gerade jetzt halten wir es für essenziell, Hürden für die Digitalisierung abzubauen. Uns ist es ein Anliegen, die Wirtschaft und Verwaltung mit einer praktischen, kostenfreien Lösung zu unterstützen, denn nur durch schnelle und unkomplizierte Umsetzung kann Digitalisierung gelebt und die Arbeit in diesen besonderen Zeiten erleichtert werden. Sie finden das Formular auf: [https://forms.codeb.io/pdfforms.aspx?fid=zugferd](https://forms.codeb.io/pdfforms.aspx?fid=zugferd)  Sie können es auch als PDF hinuterladen und direkt im Adobe Reader benutzen: [https://forms.codeb.io/pdfforms.aspx?fid=zugferd&pdf=1](https://forms.codeb.io/pdfforms.aspx?fid=zugferd&pdf=1) Sollten Sie Ihr eigenes Design benötigen zögern Sie bitte nicht uns zu kontaktieren. Aktuell: Alle Varianten des Formulars, Hinweise und häufige Fragen finden Sie auf der Seite [ZUGFeRD-Rechnung online erstellen](https://www.zugferdpro.com/aloaha-zugferd-formular/). --- ## Rechnungsposten mit Artikelnummer des Kunden versehen BT-156, BT-155 URL: https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/ Date: 2024-06-25 Business terms: BT-155, BT-156 SDK methods: TradeProductBuyerAssignedID, TradeProductSellerAssignedID Nachdem einer Rechnung über [AddProduct_Comfort](https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/) ein Posten hinzugefügt wurde, erhält man als Rückgabewert eine ItemID. Diese kann dazu verwendet werden, Attribute des Rechnungspostens mit der ID „ItemID“ zu ändern, beispielsweise die Artikelnummer des Kunden (im Gegensatz zu Ihrer eigenen Artikelnummer). Ändern der Artikelnummer des Kunden (BuyerAssignedID): ``` alo.TradeProductBuyerAssignedID(ItemID) = "Artikelnummer des Kunden" ``` Ändern der Artikelnummer des Verkäufers (SellerAssignedID): ``` alo.TradeProductSellerAssignedID(ItemID) = "Artikelnummer des Verkäufers" ``` --- ## Differenzbesteuerung nach § 25a UStG URL: https://www.zugferdpro.com/differenzbesteuerung-nach-paragraph-25a-ustg/ Date: 2024-06-24 Ein Kunde hatte die folgende Frage betreffend der Differenzbesteuerung nach § 25a UStG. Da diese vermutlich auch andere Kunden betrifft, haben wir uns entschlossen, Frage und Antwort hier zu posten: Frage: In unserem Kundenkreis wird häufig Second-Hand-Ware verkauft, die der Differenzbesteuerung unterliegt. Bei den Anpassungen für ZUGFeRD 2 stellt sich nun die Frage, wie diese Artikel abgebildet werden. Antwort: Die Differenzbesteuerung nach § 25a Umsatzsteuergesetz ist eine besondere Form der Umsatzbesteuerung, bei der der leistende Unternehmer nur den Betrag besteuert, der sich aus dem Unterschied zwischen dem Ankaufs- und Verkaufspreis ergibt. Diese Besonderheit ergibt sich aus dem Umstand, dass die Ware beim Einkauf nicht zum Vorsteuerabzug berechtigt sein darf, da der Veräußerer – zumeist Endverbraucher – nicht dazu berechtigt ist. Hieraus ergibt sich, dass zwar eine Umsatzsteuer auf den Umsatz abzuführen ist, obwohl ein offener Steuerausweis in der Rechnung nicht erfolgen darf. In der ZUGFeRD-Rechnung sind die in der [Liste](https://www.zugferdpro.com/wp-content/uploads/2024/06/EN16931-code-lists-values-v8-used-from-2021-09-06.xlsx) beigefügten Codes zur technischen Abbildung dieser besonderen Besteuerungsform dargestellt. Unter dem Reiter [VATEX, Zeile 53](https://www.zugferdpro.com/wp-content/uploads/2024/06/EN16931-code-lists-values-v8-used-from-2021-09-06.xlsx), sollte der zutreffende Code für die Anwendung der Differenzbesteuerung in diesem Kontext angegeben sein. Abschließend muss ich allerdings darauf hinweisen, dass das Umsatzsteuerreferat für die Umsetzung in rechtlicher Hinsicht zuständig ist. Die hier dargestellte technische Aussage ist nach bestem Wissen, aber stets unter Vorbehalt ergangen. [EN16931-code-lists-values-v8-used-from-2021-09-06](https://www.zugferdpro.com/wp-content/uploads/2024/06/EN16931-code-lists-values-v8-used-from-2021-09-06.xlsx)[Download](https://www.zugferdpro.com/wp-content/uploads/2024/06/EN16931-code-lists-values-v8-used-from-2021-09-06.xlsx) --- ## Posten aus der ZUGFeRD bzw. X-Rechnung auslesen URL: https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/ Date: 2024-06-20 SDK methods: ActualDeliveryDate_102, FillZUGFeRD_Structure, GetMonetarySummation, GetTradeAllowanceCharge, GetTradeAllowanceChargeTax, InvoicePaymentMeansBIC, InvoicePaymentMeansBankName, InvoicePaymentMeansCount, InvoicePaymentMeansIBAN, Licensed, OrderNumber, SupplyChain_Structure, TradeAllowanceCharges, TradeItemsCount, TradePaymentTerm, TradePaymentTermsCount, TradeTaxItem, TradeTaxes, Trade_Item, Trade_Items, VATNumber, getTotals Mit dem Aloaha ZUGFeRD SDK ist es ganz einfach, ein ZUGFeRD-PDF bzw. eine X-Rechnungs-XML einzulesen. Zuerst müssen Sie natürlich das Aloaha-Objekt erstellen: In VB.NET ``` Dim alo As New Aloaha_ZUGFeRD.XML ``` In VB6 (Early Binding) ``` Dim alo As Aloaha_ZUGFeRD.XML Set alo = CreateObject("Aloaha_ZUGFeRD.XML") ``` In VBA/VB6 (Late Binding) ``` Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") ``` Als nächstes müssen Sie die Rechnung einlesen. Sie können direkt Ihr PDF oder die XML-Datei einlesen. In VB.NET ``` Dim inputfile as string="c:\rechnungen\rechnung1.xml" 'pdf geht auch Dim LicenseKey as string="xxxxxxxxxxx" 'contact info@aloaha.com for an eval key If alo.Licensed(LicenseKey) = True Then alo = Nothing alo = New Aloaha_ZUGFeRD.XML alo.FillZUGFeRD_Structure(inputfile ) Dim Posten() As iXML.TradeItem = alo.Trade_Items If Posten.Length > 0 Then 'usw End If End If ``` Sie können auch die gesamte interne ZUGFeRD-Struktur auslesen. Das geht jedoch nur in .NET und nicht in VB6 (COM): [Laden einer existierenden ZUGFeRD Rechnung in das Toolkit](https://www.zugferdpro.com/laden-einer-existierenden-zugferd-rechnung-in-das-toolkit/) In VB6 (Early Binding) Der Code sieht in VB6 etwas anders aus, da Trade_Items in COM nicht verfügbar ist. ``` Dim inputfile As String Dim LicenseKey As String Dim IBAN As String Dim BIC As String Dim BankName As String Dim AnzahlKonten As Integer Dim KaeuferVAT As String Dim VerkaeuferVAT As String Dim KaeuferBestellnummer As String Dim VerkaeuferBestellnummer As String inputfile = "c:\temp\test1.xml" 'pdf possible as well LicenseKey = "xxxxx" 'contact info@aloaha.com for eval key Dim alo As Aloaha_ZUGFeRD.XML Set alo = CreateObject("Aloaha_ZUGFeRD.XML") If alo.Licensed(LicenseKey) = True Then alo.FillZUGFeRD_Structure (inputfile) KaeuferVAT = alo.VATNumber(True) VerkaeuferVAT = alo.VATNumber(False) KaeuferBestellnummer = alo.OrderNumber(True) VerkaeuferBestellnummer = alo.OrderNumber(False) Dim Lieferdatum As String 'aus Struktur Lieferdatum = alo.SupplyChain_Structure.ActualDeliveryDate.Document_Date 'oder als Funktion Lieferdatum = alo.ActualDeliveryDate_102 'Summen auslesen Dim DuePayableAmount As String Dim AllowanceTotalAmount As String Dim ChargeTotalAmount As String Dim GrandTotalAmount As String Dim LineTotalAmount As String Dim TaxBasisTotalAmount As String Dim TaxTotalAmount As String Dim TotalPrepaidAmount As String Dim RoundingAmount As String DuePayableAmount = alo.GetMonetarySummation(SummationType_DuePayableAmount) AllowanceTotalAmount = alo.GetMonetarySummation(SummationType_AllowanceTotalAmount) 'usw 'get aber besser mit einem Call Call alo.getTotals(LineTotalAmount, GrandTotalAmount, DuePayableAmount, TaxBasisTotalAmount, TaxTotalAmount, AllowanceTotalAmount, TotalPrepaidAmount, RoundingAmount, ChargeTotalAmount) Dim TradeAllowanceCharges As Integer TradeAllowanceCharges = alo.TradeAllowanceCharges If TradeAllowanceCharges > 0 Then For i = 0 To TradeAllowanceCharges - 1 Dim ChargeIndicator As Boolean Dim CalculationPercent As String Dim ChargeBasisAmount As String Dim BasisQuantity As String Dim BasisQuantityUnitCode As String Dim ActualAmount As String Dim Reason As String Dim ReasonCode As String Dim CurrencyID As String Dim SequenceNumeric As String Dim Taxes As Variant Dim TaxCount As Long Call alo.GetTradeAllowanceCharge(i, ChargeIndicator, CalculationPercent, ChargeBasisAmount, BasisQuantity, BasisQuantityUnitCode, ActualAmount, Reason, ReasonCode, SequenceNumeric, CurrencyID, TaxCount) If TaxCount > 0 Then For x = 0 To TaxCount - 1 Dim TaxRate As String Dim CategoryCode As String Dim TypeCode As String Dim TaxReason As String Dim TAXCalculatedAmount As String Call alo.GetTradeAllowanceChargeTax(i, x, TaxRate, CategoryCode, TypeCode, TaxReason, TAXCalculatedAmount) Next x End If Next i End If 'Zahlungsbedingungen auslesen If alo.TradePaymentTermsCount > 0 Then For i = 0 To alo.TradePaymentTermsCount - 1 Dim index As Long Dim Description As String Dim ActualDiscountAmount As String Dim tCalculationPercent As String Dim DirectDebitMandateID As String Dim DueDate As String Dim BasisPeriod As String Dim BasisDateTime As String Call alo.TradePaymentTerm(index, Description, ActualDiscountAmount, tCalculationPercent, DirectDebitMandateID, BasisDateTime, BasisPeriod, DueDate) Next i End If 'Zahlungsbedingungen auslesen If alo.TradePaymentTermsCount > 0 Then For i = 0 To alo.TradePaymentTermsCount - 1 Dim index As Long Dim Description As String Dim ActualDiscountAmount As String Dim tCalculationPercent As String Dim DirectDebitMandateID As String Dim DueDate As String Dim BasisPeriod As String Dim BasisDateTime As String Call alo.TradePaymentTerm(index, Description, ActualDiscountAmount, tCalculationPercent, DirectDebitMandateID, BasisDateTime, BasisPeriod, DueDate) Next i End If Dim AnzahlSteuerSaetze As Integer AnzahlSteuerSaetze = alo.TradeTaxes If AnzahlSteuerSaetze > 0 Then For i = 0 To AnzahlSteuerSaetze - 1 Dim Steuersatz As TradeTax Steuersatz = alo.TradeTaxItem(i) Dim Prozent As String Dim Steuerart As String Dim Steuerkategorie As String Dim BasisAmount As String Dim CalculatedAmount As String Dim ExemptionReason As String Prozent = Steuersatz.RateApplicablePercent Steuerkategorie = Steuersatz.CategoryCode Steuerart = Steuersatz.TypeCode BasisAmount = Steuersatz.BasisAmount.Amount CalculatedAmount = Steuersatz.CalculatedAmount.Amount ExemptionReason = Steuersatz.ExemptionReason Next i End If AnzahlKonten = alo.InvoicePaymentMeansCount If AnzahlKonten > 0 Then For i = 0 To AnzahlKonten - 1 'In der Demo schalte ich ich zwischen true/false um 'da ich credit und debit accounts abteste BankName = alo.InvoicePaymentMeansBankName(0, True) If BankName = "" Then BankName = alo.InvoicePaymentMeansBankName(0, False) End If IBAN = alo.InvoicePaymentMeansIBAN(0, True) If IBAN = "" Then IBAN = alo.InvoicePaymentMeansIBAN(0, False) End If BIC = alo.InvoicePaymentMeansBIC(0, True) If BIC = "" Then BIC = alo.InvoicePaymentMeansBIC(0, False) End If Next i End If Dim AnzahlPosten As Integer AnzahlPosten = alo.TradeItemsCount If AnzahlPosten > 0 Then For i = 0 To AnzahlPosten - 1 Dim Posten As TradeItem Dim PostenBeschreibung As String Posten = alo.Trade_Item(i) PostenBeschreibung = Posten.TradeProduct.Description.Value If PostenBeschreibung <> "" Then 'usw End If Next i End If End If ``` Für “Late Binding” in VB6 bzw. VBA ändert sich nur die Objekterstellung: ``` Dim inputfile As String Dim LicenseKey As String Dim IBAN As String Dim BIC As String Dim BankName As String Dim AnzahlKonten As Integer Dim KaeuferVAT As String Dim VerkaeuferVAT As String Dim KaeuferBestellnummer As String Dim VerkaeuferBestellnummer As String inputfile = "c:\temp\test1.xml" LicenseKey = "xxxxxx" Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") If alo.Licensed(LicenseKey) = True Then alo.FillZUGFeRD_Structure (inputfile) KaeuferVAT = alo.VATNumber(True) VerkaeuferVAT = alo.VATNumber(False) KaeuferBestellnummer = alo.OrderNumber(True) VerkaeuferBestellnummer = alo.OrderNumber(False) Dim Lieferdatum As String 'aus Struktur Lieferdatum = alo.SupplyChain_Structure.ActualDeliveryDate.Document_Date 'oder als Funktion Lieferdatum = alo.ActualDeliveryDate_102 'Summen auslesen Dim DuePayableAmount As String Dim AllowanceTotalAmount As String Dim ChargeTotalAmount As String Dim GrandTotalAmount As String Dim LineTotalAmount As String Dim TaxBasisTotalAmount As String Dim TaxTotalAmount As String Dim TotalPrepaidAmount As String Dim RoundingAmount As String Call alo.getTotals(LineTotalAmount, GrandTotalAmount, DuePayableAmount, TaxBasisTotalAmount, TaxTotalAmount, AllowanceTotalAmount, TotalPrepaidAmount, RoundingAmount, ChargeTotalAmount) Dim TradeAllowanceCharges As Integer TradeAllowanceCharges = alo.TradeAllowanceCharges If TradeAllowanceCharges > 0 Then For i = 0 To TradeAllowanceCharges - 1 Dim ChargeIndicator As Boolean Dim CalculationPercent As String Dim ChargeBasisAmount As String Dim BasisQuantity As String Dim BasisQuantityUnitCode As String Dim ActualAmount As String Dim Reason As String Dim ReasonCode As String Dim CurrencyID As String Dim SequenceNumeric As String Dim Taxes As Variant Dim TaxCount As Long Call alo.GetTradeAllowanceCharge(i, ChargeIndicator, CalculationPercent, ChargeBasisAmount, BasisQuantity, BasisQuantityUnitCode, ActualAmount, Reason, ReasonCode, SequenceNumeric, CurrencyID, TaxCount) If TaxCount > 0 Then For x = 0 To TaxCount - 1 Dim TaxRate As String Dim CategoryCode As String Dim TypeCode As String Dim TaxReason As String Dim TAXCalculatedAmount As String Call alo.GetTradeAllowanceChargeTax(i, x, TaxRate, CategoryCode, TypeCode, TaxReason, TAXCalculatedAmount) Next x End If Next i End If Dim AnzahlSteuerSaetze As Integer AnzahlSteuerSaetze = alo.TradeTaxes If AnzahlSteuerSaetze > 0 Then For i = 0 To AnzahlSteuerSaetze - 1 Dim Steuersatz As Variant Steuersatz = alo.TradeTaxItem(i) Dim Prozent As String Dim Steuerart As String Dim Steuerkategorie As String Dim BasisAmount As String Dim CalculatedAmount As String Dim ExemptionReason As String Prozent = Steuersatz.RateApplicablePercent Steuerkategorie = Steuersatz.CategoryCode Steuerart = Steuersatz.TypeCode BasisAmount = Steuersatz.BasisAmount.Amount CalculatedAmount = Steuersatz.CalculatedAmount.Amount ExemptionReason = Steuersatz.ExemptionReason Next i End If AnzahlKonten = alo.InvoicePaymentMeansCount If AnzahlKonten > 0 Then For i = 0 To AnzahlKonten - 1 'In der Demo schalte ich ich zwischen true/false um 'da ich credit und debit accounts abteste BankName = alo.InvoicePaymentMeansBankName(0, True) If BankName = "" Then BankName = alo.InvoicePaymentMeansBankName(0, False) End If IBAN = alo.InvoicePaymentMeansIBAN(0, True) If IBAN = "" Then IBAN = alo.InvoicePaymentMeansIBAN(0, False) End If BIC = alo.InvoicePaymentMeansBIC(0, True) If BIC = "" Then BIC = alo.InvoicePaymentMeansBIC(0, False) End If Next i End If Dim AnzahlPosten As Integer AnzahlPosten = alo.TradeItemsCount If AnzahlPosten > 0 Then For i = 0 To AnzahlPosten - 1 Dim Posten As Variant Dim PostenBeschreibung As String Posten = alo.Trade_Item(i) PostenBeschreibung = Posten.TradeProduct.Description.Value If PostenBeschreibung <> "" Then 'usw End If Next i End If End If ``` --- ## Angabe rechnungsrelevanter Freitexte – IncludedNote, VD-Valitool-71 URL: https://www.zugferdpro.com/includednote-bg-1-bt-21-bt-22/ Date: 2024-06-18 Business terms: BG-1, BT-22 SDK methods: Add_Invoice_Document_Note Mit dem Feld “IncludedNote” bindet man eine Aggregation von Geschäftstermini zur Offenlegung von Freitexten, die rechnungsrelevant sind, sowie deren Qualifikation in die ZUGFeRD X-Rechnung ein. Dazu gehören: allgemeine Informationen (AAI), Anmerkungen des Verkäufers (SUR), regulatorische Informationen (REG), rechtliche Informationen (ABL), Informationen zur Steuer (TXD) und Zollinformationen (CUS). Beispielcode: ``` alo.Add_Invoice_Document_Note("Austausch Schloss", "AAK") alo.Add_Invoice_Document_Note("Hans Mustermann", "REG") ``` Folgende Codes werden empfohlen: AAK: PreisbedingungenAAI: Allgemeine InformationenSUR: Anmerkungen des VerkäufersREG: Regulatorische InformationenABL: Rechtliche InformationenTXD: Informationen zur SteuerCUS: Zollinformationen Die vollständige Codeliste ist in UNTDID 4451 spezifiziert. Diese Informationen können auch per CSV eingebunden werden. Mehr auf [https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) Dabei werden die Freitexte in totals.csv eingetragen. Mögliche Spalten sind: GenericInfo, GenericComment, RegulatoryInformation, LegalInformation, TAXInformation,CustomsInformation, PriceConditions --- ## XRechnungs-XML direkt in eine Winword-Datei oder ZUGeRD PDF umwandeln URL: https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/ Date: 2024-06-18 Ein kaum beachteter Webdienst ermöglicht die direkte Umwandlung einer ZUGFeRD XML-Datei in eine Winword-Datei. Dies ist besonders interessant, wenn man aus der XML-Datei eine druckbare Version erstellen möchte. Zum Testen haben wir diese API öffentlich zugänglich gemacht unter: [https://eforms.aloaha.com/xmluploader.aspx?o=docx](https://eforms.aloaha.com/xmluploader.aspx?o=docx) Wenn man den o-Parameter (output) auf pdf setzt dann erhält man als Ausgabe direkt das ZUGFeRD PDF. [https://eforms.aloaha.com/xmluploader.aspx?o=pdf](https://eforms.aloaha.com/xmluploader.aspx?o=pdf) Note: Wenn man den o-Parameter auf XML setzt kann man zum Beispiel damit UBL nach ZUGFeRD umwandeln. Dieser Webdienst verwendet die SDK-Funktion [CreateDocFromXML](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-oder-ein-pdf-dokument-umwandeln/). Eine Erklärung dieser Funktion finden Sie auf folgender Seite: [XRechnungs-XML direkt in eine Winword-Datei oder ein PDF-Dokument umwandeln](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-oder-ein-pdf-dokument-umwandeln/) Laden Sie einfach Ihr XML-Dokument hoch und bestätigen Sie mit “Upload ZUGFeRD XML”. Ihr Webbrowser wird nach einigen Sekunden das fertige Winword-Dokument herunterladen. Sollten Sie ein individuelles Design wünschen, lassen Sie es uns bitte wissen. Selbstverständlich können Sie diese Web-API auch in Ihrem eigenen Rechenzentrum installieren. Das geht natürlich auch direkt per HTTP POST: ``` curl --verbose --max-time 300 --retry 0 -F "file=@xinvoice.xml" -k https://eforms.aloaha.com/xmluploader.aspx?o=docx -o outputfile.docx ``` bzw: ``` curl --verbose --max-time 300 --retry 0 -F "file=@xinvoice.xml" -k https://eforms.aloaha.com/xmluploader.aspx?o=pdf -o outputfile.pdf ``` oder ``` curl --verbose --max-time 300 --retry 0 --data-binary "@xinvoice.xml" -H "Content-Type: application/xml" -k https://eforms.aloaha.com/xmluploader.aspx?o=docx -o outputfile.docx ``` bzw: ``` curl --verbose --max-time 300 --retry 0 --data-binary "@xinvoice.xml" -H "Content-Type: application/xml" -k https://eforms.aloaha.com/xmluploader.aspx?o=pdf -o outputfile.pdf ``` Sollten Sie mehr Interesse an Webdiensten haben, schauen Sie sich folgende Webdienste an: [ZUGFeRD-XML und PDF-Rechnung per Webservice zu einer PDF-ZUGFeRD-Rechnung zusammenführen](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) [Webbasiert ZUGFeRD XML extrahieren und anzeigen](https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/) --- ## AddTradeAllowanceCharge (BG-20, BG-21) URL: https://www.zugferdpro.com/addtradeallowancecharge/ Date: 2024-05-31 Business terms: BG-20, BG-21, BT-100, BT-102, BT-103, BT-104, BT-92, BT-93, BT-95, BT-96, BT-97, BT-99 SDK methods: AddTradeAllowanceCharge AddTradeAllowanceCharge fügt eine Gruppe von Geschäftstermini hinzu, die Informationen über die anwendbaren Zuschläge oder Rabatte auf den Gesamtbetrag der Rechnung bereitstellen. ``` alo.AddTradeAllowanceCharge(ChargeIndicator, BasisAmount, BasisAmountCurrencyID, ActualAmount, ActualAmountCurrencyID, TypeCode, CategoryCode, ApplicablePercent, Reason) ``` ChargeIndicator: Boolean, schaltet zwischen Zu- und Abschlag um. BasisAmount: Der Basisbetrag, der in Verbindung mit dem prozentualen Rabatt oder Zuschlag auf Dokumentenebene verwendet werden kann, um den Betrag der Belastung auf Dokumentenebene zu berechnen. (BT-93, BT-100) TypeCode: EN 16931 unterstützt nur die Steuerart „Mehrwertsteuer“ mit dem Code „VAT“. Das EXTENDED-Profil muss verwendet werden, wenn andere Steuerarten genannt werden sollen, wie zum Beispiel Versicherungssteuer oder Mineralölsteuer. Der Code für die Steuerart sollte dann aus der Code-Liste UNTDID 5153 ausgewählt werden. (BT-95-0, BT-102-0) CategoryCode: Kodierte Informationen zur Anwendung der Umsatzsteuerkategorie für Zuschlag oder Rabatt auf Dokumentenebene. Zum Beispiel: S, Z, E, AE, K, G, O, L (BT-95, BT-102) ApplicablePercent: Der Mehrwertsteuersatz, dargestellt als Prozentsatz, der auf den Rabatt und Zuschlag auf Dokumentenebene angewendet wird. (BT-96, BT-103) ActualAmount: Der Betrag des Rabatts oder Zuschlags ohne Mehrwertsteuer (MwSt). (BT-92, BT-99) Reason: Grund für Zuschlag oder Rabatt auf Dokumentenebene in Textform (BT-97, BT-104) --- ## WriteTotals URL: https://www.zugferdpro.com/writetotals/ Date: 2024-05-22 Business terms: BT-106, BT-107, BT-108, BT-109, BT-110, BT-112, BT-113, BT-114, BT-115 SDK methods: WriteTotals, getTotals Der Befehl WriteTotals ist selbstverständlich einer der wichtigsten Befehle des SDKs, da jede ZUGFeRD- bzw. X-Rechnung Summen, Zuschläge, Abschläge, Anzahlungen, Mehrwertsteuer usw. enthalten muss. Das zu benutzende Kommando ist: ``` WriteTotals(LineTotalAmount, GrandTotalAmount, DuePayableAmount, TaxBasisTotalAmount, TaxTotalAmount, AllowanceTotalAmount, TotalPrepaidAmount, RoundingAmount, ChargeTotalAmount) Note: Mit Call alo.getTotals(LineTotalAmount, GrandTotalAmount, DuePayableAmount, TaxBasisTotalAmount, TaxTotalAmount, AllowanceTotalAmount, TotalPrepaidAmount, RoundingAmount, ChargeTotalAmount) koennen Sie alle Summen auslesen! ``` LineTotalAmount (NettoTotal, BT-106):Der Netto-Rechnungsbetrag ist die Summe der Netto-Rechnungsbeträge der Posten. GrandTotalAmount (Total, BT-112):Rechnungsendbetrag mit Mehrwertsteuer. Ergibt sich aus dem Rechnungsendbetrag ohne Mehrwertsteuer (BT-109) + Gesamtbetrag der Mehrwertsteuer (BT-110). DuePayableAmount (BT-115):Der Zahlungsbetrag setzt sich zusammen aus Rechnungsendbetrag mit Mehrwertsteuer (BT-112) minus Summe der Anzahlungen (BT-113) + Rundungsdifferenzen (BT-114). TaxBasisTotalAmount (BT-109):Rechnungsendbetrag ohne Mehrwertsteuer. Ergibt sich aus der Summe der Netto-Rechnungsbeträge der Posten (BT-106) minus Summe der Abschläge (BT-107). TaxTotalAmount (BT-110): Berechnete Mehrwertsteuer. AllowanceTotalAmount (DiscountTotal, BT-107): Summe der Abschläge der Posten. ChargeTotalAmount(ChargeTotal, BT-108): Summe der Zuschläge der Posten. TotalPrepaidAmount (Prepaid, BT-113): Summe der Anzahlungen. RoundingAmount (BT-114): Rundungsdifferenzen. --- ## Skonto und Verzugszinsen (BT-20) URL: https://www.zugferdpro.com/skonto-und-verzugszinsen-bt-20/ Date: 2024-05-04 Business terms: BG-19, BT-20, BT-89, BT-115, BT-9 SDK methods: AddTradePaymentTerms, TodayDate, TradePaymentTerm, TradePaymentTermsCount Skonto definiert einen Preisnachlass für eine vorzeitige Zahlung. In Deutschland ist es in vielen Sektoren üblich, Informationen über Skonti zu übermitteln. Das gegenwärtige Datenmodell der Europäischen Norm bietet jedoch keinen spezifischen Prozess für die Darstellung solcher Informationen mittels strukturierter Informationselemente. Das europäische Datenmodell beinhaltet zwar das Informationselement „Payment terms“ (BT-20), das unstrukturierte Zahlungsinformationen in Textform aufnehmen kann, jedoch erlaubt dies keine automatisierte Verarbeitung, wie sie von vielen Behörden auf allen Verwaltungsebenen gefordert wird. Expertenkommissionen haben die Notwendigkeit für eine strukturierte Darstellung von Skonto-Informationen in elektronischen Rechnungen erkannt. Mitglieder dieser Gremien entwickelten daraufhin eine Struktur, die Skonto- und Verzugsbedingungen mittels des Informationselements „Payment terms“ abbildet und somit automatisierte Verarbeitungen ermöglicht. Mittelfristig und langfristig ist die Integration strukturierter Skonto-Bedingungen in das semantische Datenmodell der Europäischen Norm geplant. Zusätzlich zu diesen Entwicklungen umfasst eine Textbeschreibung der Zahlungsbedingungen alle relevanten Details zu den fälligen Zahlungsbeträgen, einschließlich möglicher Skonto- und Verzugsbedingungen. Diese Beschreibungen können mehrere Zeilen und sowohl unstrukturierten als auch strukturierten Text beinhalten, wobei der unstrukturierte Text keine Nummernzeichen (#) enthalten darf. Bei Angaben zur Gewährung von Skonto oder zur Berechnung von Verzugszinsen muss die Darstellung wie folgt erfolgen: Im ersten Segment „SKONTO“ oder „VERZUG“, im zweiten „TAGE=n“, im dritten „PROZENT=n“, wobei die Prozentzahlen ohne Vorzeichen und mit einem Punkt von zwei Nachkommastellen zu trennen sind. Bezieht sich der zu berechnende Betrag nicht auf den vollständigen, fälligen Betrag (BT-115, „fälliger Betrag“), sondern nur auf einen Teil davon, ist der Basiswert für die Berechnung von Skonto oder Verzugszinsen als viertes Segment „BASISBETRAG=n“ gemäß dem semantischen Datentyp Amount anzugeben. Beispiel für BT-20: #SKONTO#TAGE=14#PROZENT=3.00# ``` Dim PaymentTermsDescription As String = "#SKONTO#TAGE=14#PROZENT=3.00#" 'BT-20 Dim DueDate As String = alo.TodayDate.Document_Date 'BT-9 Dim DirectDebitMandateID As String = "" 'BT-89 alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID) ``` Natürlich können Sie die PaymentTerms auch auslesen: ``` If alo.TradePaymentTermsCount > 0 Then For i = 0 To alo.TradePaymentTermsCount Dim index As Long Dim Description As String = "" Dim ActualDiscountAmount As String = "" Dim tCalculationPercent As String = "" Dim ttDirectDebitMandateID As String = "" Dim tDueDate As String = "" Dim BasisDateTime As String = "" Call alo.TradePaymentTerm(index, Description, ActualDiscountAmount, tCalculationPercent, ttDirectDebitMandateID, BasisDateTime, tDueDate) Next iEnd If ``` --- ## Der Rechnung Posten mit AddProduct_Comfort hinzufügen URL: https://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/ Date: 2024-05-03 Business terms: BG-25, BT-126, BT-127, BT-129, BT-130, BT-131, BT-146, BT-148, BT-149, BT-150, BT-151, BT-152, BT-153, BT-154, BT-155, BG-27 SDK methods: AddProduct_Comfort “AddProduct_Comfort” ist wahrscheinlich der am häufigsten verwendete API-Aufruf des Aloaha ZUGFeRD-Toolkits. Der vollständige Aufruf lautet: ``` Dim ItemID as integer=-1 ItemID = AddProduct_Comfort(PositionID,Note,SellerAssignedID,BilledQuantity,QuantityUnit,ProductName,ProductDescription,GrossPrice, _ GrossPriceCurrency,BasisQuantity,BasisQuantityUnitCode, _ AllowanceChargeIndicator,AllowanceAmount,AllowanceAmountCurrencyID,AllowanceReason, _ NetPrice,NetPriceCurrencyID,NetPriceBasisQuantity,NetPriceBasisQauntityUnit, _ TaxTypeCode,TAXCategoryCode,TAXPercent,TaxExemptionReason, _ TotalAmount,TotalAmountCurrencyID, OptionalGlobalID, OptionalGlobalIDScheme) ``` Bitte beachten Sie: Diesen Aufruf gibt es in verschiedenen überladenen Implementierungen, um unterschiedliche Variablentypen zu unterstützen. Wenn Sie Beträge als String übergeben, achten Sie bitte darauf, dass bei ZUGFeRD das Dezimalzeichen der Punkt ist. ### Parameter: PositionID: Bezeichner des Rechnungsposten, BT-126 Note: Freitext des Rechnungspostens, BT-127 [SellerAssignedID](https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/): Artikelnummer des Verkäufers, BT-155 [BuyerAssignedID](https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/): [https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/](https://www.zugferdpro.com/rechnungsposten-mit-artikelnummer-des-kunden-versehen-bt-156/) BilledQuantity: In Rechnung gestellte Menge, BT-129 QuantityUnit, BasisQuantityUnitCode, NetPriceBasisQauntityUnit: Code der [Maßeinheit](https://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/) der in Rechnung gestellten Menge, BT-130, BT-150, etc. ProductName: Name des Produktes, BT-153, falls es fehlt gibt es Fehler: [BR-25]-Each Invoice line (BG-25) shall contain the Item name (BT-153). ProductDescription: Beschreibung des Produktes, BT-154 GrossPrice: Bruttopreis des Artikels, BT-148 GrossPriceCurrency, NetPriceCurrencyID, TotalAmountCurrencyID: Währung, zum Beispiel EUR BasisQuantity: Basisquantität des Artikels, darf auch leerer String sein, BT-149 Allowance Parameter: Details zu Nachlässen und Zuschlägen auf Positionsebene NetPrice: Nettopreis des Artikels, BT-146 NetPriceBasisQuantity: Nettoquantität des Artikels, BT-149 TaxTypeCode: Steuerart (Code), üblicherweise “VAT”, BT-151 TAXCategoryCode: MwSt.-Typencode auf Positionsebene, mehr [HIER](https://www.zugferdpro.com/umsatzsteuer-vat/) TAXPercent: MwSt.-Satz des in Rechnung gestellten Artikels, BT-152 TaxExemptionReason: Grund für die Mehrwertsteuerbefreiung (Freitext) TotalAmount: Nettobetrag der Rechnungsposition, BT-131 Sollten sie Zu- bzw. Abschläge auf Postenebene (BG-27/28) benötigen schauen Sie sich bitte auch folgende APIs an: addItemSpecifiedTradeAllowanceCharge, getItemSpecifiedTradeAllowanceChargeCount und getItemSpecifiedTradeAllowanceCharge Komplette Codebeispiele gibt es auf: [Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) oder .NET (Early Binding)](https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/) und: [Erstellung einer ZUGFeRD/XRechnung XML Datei](https://www.zugferdpro.com/erstellung-einer-zugferd-xrechnung-xml-datei/) --- ## Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) oder .NET (Early Binding) URL: https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/ Date: 2024-04-30 Business terms: BT-1, BT-122, BT-123, BT-13, BT-17, BT-18, BT-19, BT-2, BT-22, BT-41, BT-43, BT-5, BT-7, BT-73, BT-74, BT-8, BT-89, BT-9, BT-124, BG-19, BG-1, BT-3, BT-23, BT-10, BT-34, BT-49, BT-90, BT-20, BT-16, BT-72 SDK methods: AddBuyerAssignedID, AddBuyerGlobalID, AddBuyerOrderReferencedDocument, AddDeliveryNote, AddPaymentMeans, AddProduct_Comfort, AddReceivableSpecifiedTradeAccountingAccount, AddSellerGlobalID, AddTradePaymentTerms, AddTradeTax, Add_AdditionalReferencedDocument, BusinessProcessSpecifiedDocumentContextParameter, BuyerAddressLine1, BuyerAddressLine2, BuyerCity, BuyerCountry, BuyerDepartment, BuyerEmail, BuyerID, BuyerPersonalName, BuyerPostCode, BuyerReference, BuyerTelephone, CreateNewInvoice, CreditorReferenceID, Document_ID, Document_Type, InvoiceCurrencyCode, IsKosit, ItemWriteBillingPeriod, LeitwegID, Licensed, Licensekey, MergeXMLIntoPDF, SaveWithoutUTF8Header, SaveXML, SellerAddressLine1, SellerAddressLine2, SellerCity, SellerCountry, SellerDepartment, SellerEmail, SellerFAX, SellerID, SellerName, SellerPersonalName, SellerPostCode, SellerTelephone, SetDespatchAdviceReferencedDocument, Set_Actual_DeliveryDate, TodayDate, UseASIIOnSave, WriteBillingPeriod, WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson, WriteTotals, ZUGFeRD_Profile, ZUGfeRDStandard, set_URIUniversalCommunication Um den Einstieg in die Nutzung unseres SDK zu erleichtern, haben wir ein neues Beispiel entwickelt, das demonstriert, wie eine vollständige ZUGFeRD XML-Datei erstellt wird. Für die Erstellung dieses Beispiels wurde die Version 9.0.0.15 der [ZUGFeRD-Bibliothek](https://www.zugferdpro.com/tooldownloads/) verwendet. Bitte stellen Sie sicher, dass Sie mindestens diese Version installiert haben. Das erstellte Beispiel wurde erfolgreich mit verschiedenen freien Kosit/ZUGFeRD/X-Rechnung Validatoren geprüft. Je nach Validator kann es trotzdem zu Warnungen kommen, beispielsweise wegen einer ungültigen IBAN-Nummer, da wir bewusst keine gültigen Daten verwendet haben. Angesichts der anhaltenden Beliebtheit von VB6 und MS Access in unternehmensinternen Buchhaltungsanwendungen, die auch für VBA gilt, nutzt dieses Beispiel die COM-APIs, die ebenfalls in .NET verwendet werden können. Dies gewährleistet eine breite Kompatibilität und Flexibilität in verschiedenen Entwicklungs­umgebungen. Falls Sie einen Automatisierungsfehler erhalten, deutet das darauf hin, dass Sie unsere DLL nicht mit regasm registriert haben. Das können Sie mit regasm.exe /CodeBase Aloaha_ZUGFeRD.dll nachholen. Stellen Sie dabei sicher, dass Ihr Benutzer erweiterte Systemrechte besitzt. Sollten Sie Interesse an unserem VB6 Beispielprojekt haben kontaktieren Sie uns bitte damit wir Ihnen die Sourcen schicken. Das Ergebnis des Beispielcodes finden sie hier: [Zipped ZUGFeRD XML](https://www.zugferdpro.com/wp-content/uploads/2024/04/test1.zip)[Download](https://www.zugferdpro.com/wp-content/uploads/2024/04/test1.zip) Für VB.NET können Sie auch ein komplettes Demo Projekt laden:[https://www.aloaha.com/download/ZUGFeRDSample.zip](https://www.aloaha.com/download/ZUGFeRDSample.zip) Minimum [ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/) Version required: 9.0.0.15 ``` Dim LicenseKey As String Dim InvoiceCurrency As String Dim InvoiceID As String Dim InvoiceDate As String Dim InvoiceDate_Format As String Dim InvoiceNote As String Dim Bestellnummer As String Dim BookingReference As String Dim BookingReferenceTypeocde As String Dim LeitWegID As String Dim IssuerAssignedID As String 'BT-17, BT-18, BT-122 Dim URIID As String 'BT-124 Dim TypeCode As String 'BT-17-0, BT-18-0, BT-122-0 Dim docdescription As String 'BT-123 Dim PaymentTermsDescription As String Dim DueDate As String 'BT-9 Dim DirectDebitMandateID As String 'BG-19/ BT-89 Dim position0 As Integer Dim position1 As Integer Dim StartDate As String 'BT-73 Dim EndDate As String 'BT-74 Dim ItemStartDate As String Dim ItemEndDate As String Dim CalculatedAmount As String Dim BasisAmount As String Dim TaxTypeCode As String Dim CategoryCode As String Dim ApplicablePercent As String Dim TaxPointDate As String 'BT-7 Dim DueDateTypeCode As String 'BT-8 Dim ExemptionReason As String 'Early Binding, please note that sometimes Late Binding is better! Dim alo As Aloaha_ZUGFeRD.XML Set alo = CreateObject("Aloaha_ZUGFeRD.XML") 'if error then call regasm Aloaha_ZUGFeRD.dll /codebase 'make sure you use the 32 Bit Regasm LicenseKey = "IHR-LIZENZSCHLUESSEL" InvoiceCurrency = "EUR" 'BT-5 InvoiceID = "47110815" 'BT-1 InvoiceDate = alo.TodayDate.Document_Date 'BT-2 InvoiceDate_Format = alo.TodayDate.Document_DateFormat Bestellnummer = "Bestellnummer" 'BT-13 InvoiceNote = "Rechnung gemäß Bestellung." 'BT-22, BG-1 BookingReference = "Buchungsreferenz" 'BT-19 BookingReferenceTypeocde = "" If alo.Licensed(LicenseKey) = False Then MsgBox ("Not Licensed") Else alo.LicenseKey = LicenseKey alo.ZUGFeRD_Profile = ZUGFeRDProfile_2_comfort 'hat den Wert 1 alo.ZUGfeRDStandard = ZUGFeRDVersion_xInvoice 'hat den Wert 2 alo.isKOSIT = True If alo.CreateNewInvoice(InvoiceID, InvoiceNote, InvoiceDate, InvoiceDate_Format, "", "", InvoiceCurrency) = True Then alo.Document_Type = 380 'BT-3 (Invoice) alo.InvoiceCurrencyCode = InvoiceCurrency 'BT-5 alo.Document_ID = InvoiceID 'BT-1 'BT-23 alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" alo.AddBuyerAssignedID (Bestellnummer) 'BT-13 Call alo.AddReceivableSpecifiedTradeAccountingAccount(BookingReference, BookingReferenceTypeocde) 'BT-19 IssuerAssignedID = "111111114" 'BT-17, BT-18, BT-122 URIID = "" 'BT-124 TypeCode = "916" 'BT-17-0, BT-18-0, BT-122-0 docdescription = "doc description" 'BT-123 Call alo.Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, docdescription) LeitWegID = "N999-11111-22" 'BT-10 Call alo.WriteBuyer("Muster GmbH", "49479", "Ibbenbüren", "Bahnhofstraße 1", "", "DE", "kundennummer", "DE000000", LeitWegID) alo.LeitWegID = LeitWegID alo.BuyerReference = LeitWegID alo.BuyerCountry = "DE" alo.BuyerPostCode = "49479" alo.BuyerID = "KundenNummer" 'Call alo.AddBuyerGlobalID(alo.BuyerID, "0021") Call alo.WriteBuyerContactPerson("John Doe", "Einkauf", "info@aloaha.com", "+4900000") alo.BuyerCity = "Ibbenbüren" alo.BuyerAddressLine1 = "Bahnhofstraße 1" alo.BuyerAddressLine2 = "Wohnung 2" alo.BuyerPersonalName = "Karl Mustermann" alo.BuyerDepartment = "Einkauf" alo.BuyerEmail = "info@aloaha.com" 'BT-34, BT-49 Call alo.set_URIUniversalCommunication("test@toplevel.tld", "EM", False) alo.BuyerTelephone = "+490000" 'Call alo.AddBuyerOrderReferencedDocument("47110815", "20130608", "102", "", "1") 'Call alo.AddBuyerOrderReferencedDocument("234234243", "20130608", "102", "", "2") 'alo.CreditorReferenceID = "CreditorReferenceID" 'BG19 / BT-90 Call alo.WriteSeller("Aloaha Limited", "PBK1131", "Pembroke", "Helgoland", "45, Triq Gio Felice Inglott", "MT", "MT000000000") alo.SellerDepartment = "Sales" alo.SellerName = "Aloaha Limited" alo.SellerCity = "Pembroke" alo.SellerAddressLine1 = "Helgoland" alo.SellerAddressLine2 = "Triq Gio Felice Inglott" alo.SellerCountry = "MT" alo.SellerPostCode = "PBK1131" alo.SellerID = "4711" 'Call alo.AddSellerGlobalID(alo.SellerID, "0021") Call alo.AddPaymentMeans("58", "Überweisung", "DE12 3456 7890 1234 5678 90", "", "", "XXXXX21YYY", "", "") Call alo.WriteSellerContactPerson("John Doe", "Verkauf", "info@aloaha.com", "+49 1111111") alo.SellerPersonalName = "John Doe" 'BT-41 alo.SellerDepartment = "Sales Department" alo.SellerEmail = "info@aloaha.com" 'BT-43 'alo.SellerFAX = "+49000000" alo.SellerTelephone = "+490000" 'BT-34, BT-49, PEPPOL-EN16931-R020 Call alo.set_URIUniversalCommunication("1234567890128", "0088", True) PaymentTermsDescription = "#SKONTO#TAGE=14#PROZENT=2.00#BASISBETRAG=396.00#" 'BT-20 DueDate = alo.TodayDate.Document_Date 'BT-9 DirectDebitMandateID = "" 'BG-19/ BT-89 Call alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID) 'Call alo.SetDespatchAdviceReferencedDocument("Lieferavisreferenz") 'BT-16 Dim useBillingPeriod As Boolean useBillingPeriod = False If useBillingPeriod = True Then StartDate = "20120108" 'BT-73 EndDate = "20120708" 'BT-74 Call alo.WriteBillingPeriod(StartDate, EndDate, "102") End If Dim DeliveryDate As String Dim DeliveryDateFormat As String DeliveryDate = "20120608" 'BT-72 DeliveryDateFormat = "102" 'BT-72-0 Call alo.Set_Actual_DeliveryDate(DeliveryDate, DeliveryDateFormat) End If 'Call alo.AddDeliveryNote("324544", "20150608", "102") 'Call alo.AddDeliveryNote("dfadfafaf", "20150608", "102", "1") 'ItemStartDate = "20120108" 'ItemEndDate = "20120708" position0 = alo.AddProduct_Comfort("1", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennblätter", "A4", "11.781", InvoiceCurrency, "", "", False, "", "", "", "9,9", InvoiceCurrency, "", "", "vat", "s", "19.00", "", "198.00", InvoiceCurrency, "globalid", "0160") 'Call alo.ItemWriteBillingPeriod(position0, ItemStartDate, ItemEndDate, "102") position1 = alo.AddProduct_Comfort("2", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennstreifen", "A4", "11.781", InvoiceCurrency, "", "", False, "", "", "", "9,9", InvoiceCurrency, "", "", "vat", "s", "19.00", "", "198.00", InvoiceCurrency, "globalid", "0160") CalculatedAmount = "75.24" BasisAmount = "396.00" TaxTypeCode = "VAT" CategoryCode = "S" ApplicablePercent = "19.00" TaxPointDate = "" 'BT-7 DueDateTypeCode = "" 'BT-8 ExemptionReason = "" Call alo.AddTradeTax(CalculatedAmount, InvoiceCurrency, BasisAmount, InvoiceCurrency, TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "", DueDateTypeCode) Call alo.WriteTotals("396.00", "471.24", "471.24", "396.00", "75.24", "00,00", "0.00", "0.00") alo.UseASIIOnSave = False alo.SaveWithoutUTF8Header = False alo.SaveXML ("c:\temp\test1.xml") Call alo.MergeXMLIntoPDF("c:\temp\test1.xml", "c:\pdf\plain.pdf", "c:\temp\test1.pdf", True, "", LicenseKey) End If ``` Sie möchten die Rechnungsposten aus einer bestehenden Datei auslesen? Dann schauen Sie bitte hier: [https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/](https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/) --- ## Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) with Late Binding URL: https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba-with-late-binding/ Date: 2024-04-29 Business terms: BT-1, BT-122, BT-123, BT-13, BT-17, BT-18, BT-19, BT-2, BT-22, BT-41, BT-43, BT-5, BT-7, BT-73, BT-74, BT-8, BT-89, BT-9, BT-124, BG-19, BG-1, BT-3, BT-23, BT-10, BT-34, BT-49, BT-90, BT-20, BT-16, BT-72 SDK methods: AddBuyerAssignedID, AddBuyerGlobalID, AddBuyerOrderReferencedDocument, AddDeliveryNote, AddPaymentMeans, AddProduct_Comfort, AddReceivableSpecifiedTradeAccountingAccount, AddSellerGlobalID, AddTradePaymentTerms, AddTradeTax, Add_AdditionalReferencedDocument, BusinessProcessSpecifiedDocumentContextParameter, BuyerAddressLine1, BuyerAddressLine2, BuyerCity, BuyerCountry, BuyerDepartment, BuyerEmail, BuyerID, BuyerPersonalName, BuyerPostCode, BuyerReference, BuyerTelephone, CreateNewInvoice, CreditorReferenceID, Document_ID, Document_Type, InvoiceCurrencyCode, IsKosit, ItemWriteBillingPeriod, LeitwegID, Licensed, Licensekey, MergeXMLIntoPDF, SaveWithoutUTF8Header, SaveXML, SellerAddressLine1, SellerAddressLine2, SellerCity, SellerCountry, SellerDepartment, SellerEmail, SellerFAX, SellerID, SellerName, SellerPersonalName, SellerPostCode, SellerTelephone, SetDespatchAdviceReferencedDocument, Set_Actual_DeliveryDate, TodayDate, UseASIIOnSave, WriteBillingPeriod, WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson, WriteTotals, ZUGFeRD_Profile, ZUGfeRDStandard, set_URIUniversalCommunication Um den Einstieg in die Nutzung unseres SDK zu erleichtern, haben wir ein neues Beispiel entwickelt, das demonstriert, wie eine vollständige ZUGFeRD XML-Datei erstellt wird. Für die Erstellung dieses Beispiels wurde die Version 9.0.0.15 der [ZUGFeRD-Bibliothek](https://www.zugferdpro.com/tooldownloads/) verwendet. Bitte stellen Sie sicher, dass Sie mindestens diese Version installiert haben. Das erstellte Beispiel wurde erfolgreich mit verschiedenen freien Kosit/ZUGFeRD/X-Rechnung Validatoren geprüft. Je nach Validator kann es trotzdem zu Warnungen kommen, beispielsweise wegen einer ungültigen IBAN-Nummer, da wir bewusst keine gültigen Daten verwendet haben. Angesichts der anhaltenden Beliebtheit von VB6 und MS Access in unternehmensinternen Buchhaltungsanwendungen, die auch für VBA gilt, nutzt dieses Beispiel die COM-APIs, die ebenfalls in .NET verwendet werden können. Dies gewährleistet eine breite Kompatibilität und Flexibilität in verschiedenen Entwicklungs­umgebungen. Sollten Sie Interesse an unserem VB6 Beispielprojekt haben kontaktieren Sie uns bitte damit wir Ihnen die Sourcen schicken. Das Ergebnis des Beispielcodes finden sie hier: [Zipped ZUGFeRD XML](https://www.zugferdpro.com/wp-content/uploads/2024/04/test1.zip)[Download](https://www.zugferdpro.com/wp-content/uploads/2024/04/test1.zip) Für VB.NET können Sie auch ein komplettes Demo Projekt laden:[https://www.aloaha.com/download/ZUGFeRDSample.zip](https://www.aloaha.com/download/ZUGFeRDSample.zip) ``` Dim LicenseKey As String Dim InvoiceCurrency As String Dim InvoiceID As String Dim InvoiceDate As String Dim InvoiceDate_Format As String Dim InvoiceNote As String Dim Bestellnummer As String Dim BookingReference As String Dim BookingReferenceTypeocde As String Dim LeitWegID As String Dim IssuerAssignedID As String 'BT-17, BT-18, BT-122 Dim URIID As String 'BT-124 Dim TypeCode As String 'BT-17-0, BT-18-0, BT-122-0 Dim docdescription As String 'BT-123 Dim PaymentTermsDescription As String Dim DueDate As String 'BT-9 Dim DirectDebitMandateID As String 'BG-19/ BT-89 Dim position0 As Integer Dim position1 As Integer Dim StartDate As String 'BT-73 Dim EndDate As String 'BT-74 Dim ItemStartDate As String Dim ItemEndDate As String Dim CalculatedAmount As String Dim BasisAmount As String Dim TaxTypeCode As String Dim CategoryCode As String Dim ApplicablePercent As String Dim TaxPointDate As String 'BT-7 Dim DueDateTypeCode As String 'BT-8 Dim ExemptionReason As String 'Late Binding, please note that sometimes Early Binding is better! Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") 'if error then call regasm Aloaha_ZUGFeRD.dll /codebase 'make sure you use the 32 Bit Regasm LicenseKey = "IHR-LIZENZSCHLUESSEL" InvoiceCurrency = "EUR" 'BT-5 InvoiceID = "47110815" 'BT-1 InvoiceDate = "20240531" 'BT-2 InvoiceDate_Format = "102" Bestellnummer = "Bestellnummer" 'BT-13 InvoiceNote = "Rechnung gemäß Bestellung." 'BT-22, BG-1 BookingReference = "Buchungsreferenz" 'BT-19 BookingReferenceTypeocde = "" If alo.Licensed(LicenseKey) = False Then MsgBox ("Not Licensed") Else MsgBox ("Licensed OK") alo.LicenseKey = LicenseKey alo.ZUGFeRD_Profile = 1 alo.ZUGfeRDStandard = 2 alo.isKOSIT = True If alo.CreateNewInvoice(InvoiceID, InvoiceNote, InvoiceDate, InvoiceDate_Format, "", "", InvoiceCurrency) = True Then alo.Document_Type = 380 'BT-3 (Invoice) alo.InvoiceCurrencyCode = InvoiceCurrency 'BT-5 alo.Document_ID = InvoiceID 'BT-1 'BT-23 alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" alo.AddBuyerAssignedID (Bestellnummer) 'BT-13 Call alo.AddReceivableSpecifiedTradeAccountingAccount(BookingReference, BookingReferenceTypeocde) 'BT-19 IssuerAssignedID = "111111114" 'BT-17, BT-18, BT-122 URIID = "" 'BT-124 TypeCode = "916" 'BT-17-0, BT-18-0, BT-122-0 docdescription = "doc description" 'BT-123 Call alo.Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, docdescription) LeitWegID = "N999-11111-22" 'BT-10 Call alo.WriteBuyer("Muster GmbH", "49479", "Ibbenbüren", "Bahnhofstraße 1", "", "DE", "kundennummer", "DE000000", LeitWegID) alo.LeitWegID = LeitWegID alo.BuyerReference = LeitWegID alo.BuyerCountry = "DE" alo.BuyerPostCode = "49479" alo.BuyerID = "KundenNummer" 'Call alo.AddBuyerGlobalID(alo.BuyerID, "0021") Call alo.WriteBuyerContactPerson("John Doe", "Einkauf", "info@aloaha.com", "+4900000") alo.BuyerCity = "Ibbenbüren" alo.BuyerAddressLine1 = "Bahnhofstraße 1" alo.BuyerAddressLine2 = "Wohnung 2" alo.BuyerPersonalName = "Karl Mustermann" alo.BuyerDepartment = "Einkauf" alo.BuyerEmail = "info@aloaha.com" 'BT-34, BT-49 Call alo.set_URIUniversalCommunication("test@toplevel.tld", "EM", False) alo.BuyerTelephone = "+490000" 'Call alo.AddBuyerOrderReferencedDocument("47110815", "20130608", "102", "", "1") 'Call alo.AddBuyerOrderReferencedDocument("234234243", "20130608", "102", "", "2") 'alo.CreditorReferenceID = "CreditorReferenceID" 'BG19 / BT-90 Call alo.WriteSeller("Aloaha Limited", "PBK1131", "Pembroke", "Helgoland", "45, Triq Gio Felice Inglott", "MT", "MT000000000") alo.SellerDepartment = "Sales" alo.SellerName = "Aloaha Limited" alo.SellerCity = "Pembroke" alo.SellerAddressLine1 = "Helgoland" alo.SellerAddressLine2 = "Triq Gio Felice Inglott" alo.SellerCountry = "MT" alo.SellerPostCode = "PBK1131" alo.SellerID = "4711" 'Call alo.AddSellerGlobalID(alo.SellerID, "0021") Call alo.AddPaymentMeans_2("58", "Überweisung", "DE12 3456 7890 1234 5678 90", "", "", "XXXXX21YYY", "", "Sparkasse", False, "", "") Call alo.WriteSellerContactPerson("John Doe", "Verkauf", "info@aloaha.com", "+49 1111111") alo.SellerPersonalName = "John Doe" 'BT-41 alo.SellerDepartment = "Sales Department" alo.SellerEmail = "info@aloaha.com" 'BT-43 'alo.SellerFAX = "+49000000" alo.SellerTelephone = "+490000" 'BT-34, BT-49, PEPPOL-EN16931-R020 Call alo.set_URIUniversalCommunication("1234567890128", "0088", True) PaymentTermsDescription = "#SKONTO#TAGE=14#PROZENT=2.00#BASISBETRAG=396.00#" 'BT-20 DueDate = alo.TodayDate.Document_Date 'BT-9 DirectDebitMandateID = "" 'BG-19/ BT-89 Call alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, "102", DirectDebitMandateID) 'Call alo.SetDespatchAdviceReferencedDocument("Lieferavisreferenz") 'BT-16 Dim useBillingPeriod As Boolean useBillingPeriod = False If useBillingPeriod = True Then StartDate = "20120108" 'BT-73 EndDate = "20120708" 'BT-74 Call alo.WriteBillingPeriod(StartDate, EndDate, "102") End If Dim DeliveryDate As String Dim DeliveryDateFormat As String DeliveryDate = "20120608" 'BT-72 DeliveryDateFormat = "102" 'BT-72-0 Call alo.Set_Actual_DeliveryDate(DeliveryDate, DeliveryDateFormat) End If 'Call alo.AddDeliveryNote("324544", "20150608", "102") 'Call alo.AddDeliveryNote("dfadfafaf", "20150608", "102", "1") 'ItemStartDate = "20120108" 'ItemEndDate = "20120708" position0 = alo.AddProduct_Comfort_2("1", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennblätter", "A4", "11.781", InvoiceCurrency, "", "", False, "", "", "", "9,9", InvoiceCurrency, "", "", "vat", "s", "19.00", "", "198.00", InvoiceCurrency, "globalid", "0160") 'Call alo.ItemWriteBillingPeriod(position0, ItemStartDate, ItemEndDate, "102") position1 = alo.AddProduct_Comfort_2("2", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennstreifen", "A4", "11.781", InvoiceCurrency, "", "", False, "", "", "", "9,9", InvoiceCurrency, "", "", "vat", "s", "19.00", "", "198.00", InvoiceCurrency, "globalid", "0160") CalculatedAmount = "75.24" BasisAmount = "396.00" TaxTypeCode = "VAT" CategoryCode = "S" ApplicablePercent = "19.00" TaxPointDate = "" 'BT-7 DueDateTypeCode = "" 'BT-8 ExemptionReason = "" Call alo.AddTradeTax(CalculatedAmount, InvoiceCurrency, BasisAmount, InvoiceCurrency, TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "", DueDateTypeCode) Call alo.WriteTotals("396.00", "471.24", "471.24", "396.00", "75.24", "00,00", "0.00", "0.00") alo.UseASIIOnSave = False alo.SaveWithoutUTF8Header = False alo.SaveXML ("c:\temp\test1.xml") Call alo.MergeXMLIntoPDF("c:\temp\test1.xml", "c:\pdf\plain.pdf", "c:\temp\test1.pdf", True, "", LicenseKey) End If ``` --- ## E-Rechnungspflicht für Firmen kommt ab 2025​ URL: https://www.zugferdpro.com/e-rechnungspflicht-fur-firmen-kommt-ab-2025/ Date: 2024-03-22 Der Bundesrat hat das umstrittene Wachstumschancengesetz der Bundesregierung gebilligt und damit den Weg für die Einführung der E-Rechnungspflicht geebnet. Gemäß den im Gesetzespaket enthaltenen Bestimmungen sind ab 2025 alle Unternehmen im innerdeutschen Geschäftsverkehr verpflichtet, E-Rechnungen im Factur-X/ZUGFeRD-Format zu [akzeptieren](https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/). Ab 2027 wird schrittweise die Verpflichtung für Unternehmen eingeführt, Rechnungen in diesem Format zu versenden. Spätestens ab 2028 dürfen auch kleine Unternehmen ihre Geschäftsrechnungen nur noch in elektronischer Form ausstellen. Das [Aloaha](https://www.aloaha.com/) ZUGFeRD SDK erweitert die Möglichkeiten der E-Rechnung erheblich, indem es nicht nur die Erstellung von Rechnungen im Factur-X/ZUGFeRD-Format ermöglicht, sondern auch die Konvertierung von CSVs und anderen Formaten in Factur-X/ZUGFeRD unterstützt. Darüber hinaus kann das SDK auch eingehende Rechnungen lesen, was die Verarbeitung und Integration in bestehende Systeme erheblich vereinfacht. Ein weiterer Bestandteil des Wachstumschancengesetzes ist eine Änderung des Umsatzsteuergesetzes: Ab 2026 sollen Papierrechnungen im innerdeutschen Geschäftsverkehr zwischen Unternehmen nicht mehr erlaubt sein, PDFs nur, sofern sie das Factur-X/ZUGFeRD-Format beinhalten. Ausnahmen gelten für Kleinbetragsrechnungen bis 250 Euro und Fahrscheine. Rechnungen zwischen Unternehmen und Verbrauchern sind nicht betroffen und können weiterhin auch auf Papier oder als PDF erfolgen. Ziel dieser Vorschrift ist die Bekämpfung von Umsatzsteuerbetrug. Nach Italien, Ungarn und der gerade laufenden Einführung in Frankreich plant auch die EU ein „Umsatzsteuermeldesystem“, bei dem Kopien jeder einzelnen Rechnung binnen weniger Tage nach Versand eingereicht werden müssen. Das geplante innerdeutsche System soll zum europäischen System kompatibel werden. Die durch den Wegfall von Umsatzsteuerbetrug erwarteten Mehreinnahmen sollen sich laut Angaben der Ampelkoalition auf jährlich zwischen 11 Milliarden und 14 Milliarden Euro belaufen. Betroffen sind bundesweit etwa 1,2 Milliarden Rechnungen jährlich. --- ## Mandatory e-invoicing for companies starts from 2025 URL: https://www.zugferdpro.com/mandatory-einvoicing/ Date: 2024-03-22 The German Federal Council has approved the controversial Growth Opportunities Act of the german federal government, paving the way for the introduction of mandatory electronic invoicing. According to the provisions contained in the legislative package, from 2025, all companies in domestic business transactions in Germany are required to accept e-invoices in the Factur-X/ZUGFeRD format. From 2027, the obligation for companies to issue invoices in this format will be introduced gradually. By 2028 at the latest, even small companies must issue their business invoices in electronic form only. The [Aloaha](https://www.aloaha.com/) ZUGFeRD SDK significantly expands the capabilities of e-invoicing by not only enabling the creation of invoices in the Factur-X/ZUGFeRD format but also supporting the conversion of CSVs and other formats into Factur-X/ZUGFeRD. Additionally, the SDK can read incoming invoices, significantly simplifying the processing and integration into existing systems. Another component of the Growth Opportunities Act is an amendment to the VAT Act: From 2026, paper invoices in domestic business transactions between companies will no longer be allowed, and PDFs only if they include the Factur-X/ZUGFeRD format. Exceptions apply to small amount invoices up to 250 euros and tickets. Invoices between companies and consumers are not affected and can continue to be issued on paper or as PDFs. The purpose of this regulation is to combat VAT fraud. Following Italy, Hungary, and the ongoing introduction in France, the EU also plans a “VAT reporting system” where copies of each invoice must be submitted within a few days after dispatch. The planned domestic German system is intended to be compatible with the European system. According to the traffic light coalition’s statements, the expected increase in revenue from the elimination of VAT fraud is estimated to be between 11 billion and 14 billion euros annually. Nationwide, about 1.2 billion invoices are affected annually. --- ## Importieren von CSV-Dateien in eine ZUGFeRD-konforme X-Rechnung URL: https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/ Date: 2024-02-23 SDK methods: ImportCSV In einigen Fällen ist es nicht möglich, das Aloaha ZUGFeRD SDK direkt über .NET oder COM-Schnittstellen in die Rechnungssoftware zu integrieren. Um diese Herausforderung zu bewältigen, bieten wir ab Version 9.0.0.5 eine neue Schnittstelle an. Diese ermöglicht das direkte Einlesen von kommagetrennten Listen (CSV) und deren Transformation in eine ZUGFeRD-konforme X-Rechnung. Die Schnittstelle ist: ``` alo.ImportCSV(SellerCSVPath, BuyerCSVPath, ItemsCSVPath, TotalsCSVPath, AllowancesCSV) ``` ImportCSV benötigt Pfade zu fünf verschiedenen CSV-Dateien. SellerCSVPath und BuyerCSVPath enthalten die Metadaten des Verkäufers bzw. des Käufers. ItemsCSVPath umfasst die Details der Rechnungsposten, während TotalsCSVPath die Gesamtsummen der Rechnung beinhaltet. Falls Sie Zuschläge oder Abschläge verrechnen möchten, benötigen Sie zusätzlich die AllowancesCSV. Um ImportCSV über die Kommandozeile zu nutzen, bieten wir das Kommandozeilen-Tool “zugcmd.exe” an. Dieses kann über die folgende URL heruntergeladen werden: [https://www.aloaha.com/download/zugcmd.zip](https://www.aloaha.com/download/zugcmd.zip). Das heruntergeladene Paket beinhaltet nicht nur das Tool selbst, sondern auch beispielhafte CSV-Dateien sowie eine Readme.txt-Datei, die weitere Anweisungen enthält. Details totals.csv: [https://www.zugferdpro.com/totals-csv/](https://www.zugferdpro.com/totals-csv/) Details items.csv: [https://www.zugferdpro.com/csv-datei-items-csv/](https://www.zugferdpro.com/csv-datei-items-csv/) Details buyer.csv: [https://www.zugferdpro.com/csv-datei-buyer-csv/](https://www.zugferdpro.com/csv-datei-buyer-csv/) Details seller.csv: [https://www.zugferdpro.com/csv-datei-seller-csv/](https://www.zugferdpro.com/csv-datei-seller-csv/) Details allowances.csv: [https://www.zugferdpro.com/csv-datei-allowances-csv/](https://www.zugferdpro.com/csv-datei-allowances-csv/) Konvertierung von ZUGFeRD nach CSV: [https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/) --- ## Konvertierung von ZUGFeRD-konformen X-Rechnungen nach CSV URL: https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/ Date: 2024-02-23 SDK methods: CreateCSV, FillZUGFeRD_Structure, Licensed, Licensekey, LoadXML In einigen Fällen ist es nicht möglich, das Aloaha ZUGFeRD SDK direkt über .NET oder COM-Schnittstellen in die Rechnungssoftware zu integrieren. Um diese Herausforderung zu bewältigen, bieten wir ab Version 9.0.0.60 eine neue Schnittstelle an. Diese ermöglicht das direkte Einlesen von ZUGFeRD-konformen X-Rechnungen und deren Transformation in kommagetrennte Listen (CSV). Die Schnittstelle ist: ``` Dim alo As New Aloaha_ZUGFeRD.XML(license) If alo.Licensed(license) = true Then alo.Licensekey = license alo.LoadXML(ImportInvoice, license) If alo.FillZUGFeRD_Structure(ImportInvoice, license) = true Then 'If variables are passed by reference and are empty 'they will be filled with the data 'If they contain valid paths data will be stored there. If alo.CreateCSV(seller, buyer, items, totals, allowances, True, seperatorchar) = True Then End If End If End If ``` CreateCSV benötigt Pfade zu fünf verschiedenen CSV-Dateien. In seller und buyer werden die Metadaten des Verkäufers bzw. des Käufers gespeicher. In items werden die Details der Rechnungsposten gespeichert, während totals die Gesamtsummen der Rechnung beinhaltet. Falls Sie Zuschläge oder Abschläge verrechnen möchten, benötigen Sie zusätzlich die allowances. Sollten Sie diese Variablen Byref als als leeren String übergeben werden diese Variablen die Daten selbst enthalten. Um CreateCSV über die Kommandozeile zu nutzen, bieten wir das Kommandozeilen-Tool “zugcmd.exe” an. Dieses kann über die folgende URL heruntergeladen werden: [https://www.aloaha.com/download/zugcmd.zip](https://www.aloaha.com/download/zugcmd.zip). Das heruntergeladene Paket beinhaltet nicht nur das Tool selbst, sondern auch beispielhafte CSV-Dateien sowie eine Readme.txt-Datei, die weitere Anweisungen enthält. Details totals.csv: [https://www.zugferdpro.com/totals-csv/](https://www.zugferdpro.com/totals-csv/) Details items.csv: [https://www.zugferdpro.com/csv-datei-items-csv/](https://www.zugferdpro.com/csv-datei-items-csv/) Details buyer.csv: [https://www.zugferdpro.com/csv-datei-buyer-csv/](https://www.zugferdpro.com/csv-datei-buyer-csv/) Details seller.csv: [https://www.zugferdpro.com/csv-datei-seller-csv/](https://www.zugferdpro.com/csv-datei-seller-csv/) Konvertierung von CSV nach ZUGFeRD: [https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) --- ## Konvertierung von ZUGFeRD X-Rechnung XML nach Winword DOCX URL: https://www.zugferdpro.com/konvertierung-von-zugferd-x-rechnung-xml-nach-winword-docx/ Date: 2024-02-23 Mit der Funktion [CreateDocFromXML](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-oder-ein-pdf-dokument-umwandeln/)aus unserem SDK können Sie direkt aus einem ZUGFeRD-XML eine Winword-DOCX-Datei erstellen. Dies ist besonders nützlich, wenn Sie eingehende Rechnungen visuell darstellen möchten oder wenn Sie aus einer selbst erstellten Rechnung eine Word-Datei erzeugen wollen. Es besteht auch die Möglichkeit, dies über unseren öffentlichen Webservice abzuwickeln, ohne eine Software installieren zu müssen. [XRechnungs-XML direkt in eine Winword-Datei umwandeln](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) Eine oft unterschätzte Möglichkeit bietet auch unser Kommandozeilen-Tool: Zum Beispiel: zugcmd.exe -r “c:\zugferd\xrechnung.xml” -v “c:\zugferd\xrechnung.docx” -l “licensekey” zugcmd.exe -d “C:\zugferd” -r “xrechnung.xml” -v “xrechnung.docx” -l “licensekey” [Konvertierung von ZUGFeRD-konformen X-Rechnungen nach CSV](https://www.zugferdpro.com/konvertierung-von-zugferd-konformen-x-rechnungen-nach-csv/) --- ## Multi-Factor Authentication für Windows-Anmeldung & RDP URL: https://www.zugferdpro.com/multi-factor-authentication-fur-windows-anmeldung-rdp/ Date: 2023-09-12 Windows Credential Provider spielen eine entscheidende Rolle bei der Benutzerauthentifizierung und dienen als Hauptgateway für die Identitätsüberprüfung während der Anmeldungen. Mit dem Aufkommen von Windows 10 haben Credential Provider noch mehr Bedeutung erlangt, da sie nun auch für die Authentifizierung von Apps und Websites und darüber hinaus verwendet werden. Microsoft bietet eine Vielzahl von Credential Provider für Windows an, darunter Passwort, PIN, Smartcard und Windows Hello-Funktionen wie Fingerabdruck, Gesichts- und Iriserkennung. Doch was, wenn Ihre Anforderungen eine größere Vielseitigkeit verlangen? CodeB hat einen benutzerfreundlichen und flexiblen Credential Provider entwickelt. Mit über einem Jahrzehnt Erfahrung und Erkenntnissen aus dem weit verbreiteten Aloaha Smartlogon hat CodeB den [CodeB Credential Provider](https://www.codeb.io/products.html) von Grund auf neu konzipiert und bietet eine anspruchsvolle Mischung aus Einfachheit und Funktionalität. Schützen Sie Ihren Windows-Arbeitsplatz Das Windows Credential Provider API ist für die Systemsicherheit unerlässlich und stellt sicher, dass nur autorisierte Benutzer auf Ressourcen zugreifen. Mit der Ausweitung der digitalen Welt nehmen auch die Sicherheitsbedrohungen zu. Viele Unternehmen, insbesondere solche, die auf Auftragnehmer angewiesen sind, sind anfällig für fortgeschrittene, anhaltende Bedrohungen (APTs) und Hardware-Keylogger. Branchen wie Zahlungskartenanbieter und solche, die GDPR-sensible Daten verarbeiten, benötigen gesetzlich eine Zwei-Faktor-Authentifizierung (2FA) für Windows. Viele Unternehmen betrachten Windows 2FA jedoch als umständlich und riskieren Datenverletzungen und rechtliche Konsequenzen. Bestehende Sicherheitslösungen, die sich oft auf Smartcards konzentrieren, haben aufgrund technischer und Vertrauensprobleme nur langsam an Bedeutung gewonnen. Darüber hinaus kann die Entscheidung, wie man sich in bestehende Public Key Infrastrukturen (PKI) integriert oder spezifische Smartcards verwendet, einschüchternd sein. [CodeB Credential Provider](https://www.codeb.io/products.html) tritt mit Expertenrat, Tools und Software auf, die speziell entwickelt wurden, um die Sicherheit zu stärken. Unsere Plattform unterstützt eine Vielzahl von Anmeldetokens, von einfachen USB-Speichersticks und [NFC](https://www.codeb.io/products.html) MIFARE bis hin zu PKI-Smartcards und Mobile OpenID Connect. Vielfältige unterstützte Anmeldetokens, einschließlich Mobile OpenID Connect Das weit verbreitete Missverständnis ist, dass die Verstärkung der Windows-Anmeldesicherheit eine komplexe Aufgabe ist, die zu einer Abhängigkeit von unzureichenden Passwortstrategien führt. CodeB Credential Provider stellt dieses Paradigma in Frage und vereinfacht die Einführung eines Windows-Anmeldetokens. Sei es ein einfacher USB-Speicherstick, eine hochmoderne X.509 PKI-Smartcard, ein Android-Telefon, eine vielseitige Authenticator-App oder eine [Standard-NFC/Mifare/Desfire-Kontaktloskarte](https://www.codeb.io/products.html) oder sogar als weltweit erster Anbieter die Unterstützung für das Anmelden über [Mobile OpenID Connect](https://www.codeb.io/products.html) Tokens – die innovative Lösung von CodeB wird Ihre Sicherheitslandschaft revolutionieren. Zugriff auf Windows mit NFC-Karte, NFC-fähigem Mobilgerät oder Ihrem Android-Telefon Für die NFC-Anmeldung bei Windows wird eine kompatible NFC-Karte wie MIFARE oder DESFIRE benötigt. Wir unterstützen auch verschiedene Firmenausweise, Studentenausweise, Busfahrkarten, Kreditkarten, physische Zugangskarten, Hotelkarten und mehr. Time-Based One-Time Password (TOTP) Unser fortschrittlicher Credential Provider V2 unterstützt auch zeitbasierte [Einmalpasswörter (TOTP)](https://www.codeb.io/products.html), die eine nahtlose Anmeldung an Ihrem Windows-Arbeitsplatz ermöglichen, sei es ein lokales oder ein Domänenkonto. Jede gängige TOTP-App kann verwendet werden. Übersicht: - Verpackt als eigenständige .NET Windows-Bibliothek (DLL). - Installation mit einem einzigen Klick. Kein Installationspaket erforderlich. - MSI-Installer auf Anfrage verfügbar. - Wir können die Software in jede gewünschte Sprache übersetzen. - Unterstützung für domänenverbundene und eigenständige Maschinen. - Sichere Remote Desktop (RDP), Netzwerkfreigaben und lokale Anmeldung. - Anpassbare Funktionalität über Einstellungen. - Funktionell erweiterbar über Plugin-Schnittstelle. - Einfach anzupassen, z. B. durch das Hinzufügen Ihres eigenen Logos. - Basierend auf Microsofts ICredentialProviderCredential2-Schnittstelle. - Mit einem integrierten Anmeldeinformationsanbieter-Filter. - Verwenden Sie einen beliebigen TOTP-Authentifikator, um sich bei Windows anzumelden. - Verwenden Sie Ihr Android-Telefon als NFC Anmeldetoken. - Akzeptiert mobile OpenID Connect Tokens. - X.509-Zertifikate können als Anmeldetoken verwendet werden, idealerweise auf einer PKI-Smartcard gehostet. - Akzeptiert einfache USB-Speichersticks als Anmeldetoken. - Unterstützt eine Vielzahl von NFC-Tokens als Anmeldetoken, einschließlich Firmenausweise, nationaler Identitätskarten, Bustickets, Kreditkarten, MIFARE, DESFIRE und vieles mehr. Fazit Ist der CodeB Credential Provider die richtige Lösung für Ihr Problem? Probieren Sie es aus und fordern Sie einen Evaluierungsschlüssel an! --- ## Kontaktlose NFC-Anmeldung für Windows: Verwenden Sie Ihre NFC-Karte oder Ihr NFC-fähiges Handy URL: https://www.zugferdpro.com/kontaktlose-nfc-anmeldung-fur-windows-verwenden-sie-ihre-nfc-karte-oder-ihr-nfc-fahiges-handy/ Date: 2023-09-09 Die NFC-Technologie hat in den letzten Jahren erhebliche Fortschritte gemacht und bietet nun eine Vielzahl von Anwendungen, von kontaktlosen Zahlungen bis hin zur Authentifizierung. Eine solche Anwendung ist die[NFC-Anmeldung für Windows](https://www.win-logon.com/nfc-logon/), die von [CodeB Identity Solutions](https://www.win-logon.com/) entwickelt wurde. Dieser Artikel bietet einen technischen Überblick über diese innovative Lösung und hebt insbesondere die “Touch to Login”-Funktion hervor. #### Die Stärke der NFC-basierten Mehrfaktor-Authentifizierung Die Anmeldung bei Windows mit einer NFC-Karte oder NFC-fähigen Mobilgeräten stellt einen Wendepunkt im Bereich der Sicherheit dar. Mit dem [CodeB Credential Provider](https://www.codeb.io/products.html) können Benutzer die Vorteile der Mehrfaktor-Authentifizierung für Windows-Anmeldung, RDP-Sitzungen und sogar für die Authentifizierung bei Remote-Freigaben nutzen. NFC-Karten oder Mobilgeräte sind physische, individuelle Authentifizierungsmittel, die im Vergleich zu leicht erratbaren oder hackbaren Passwörtern seltener kompromittiert werden. Darüber hinaus sind Branchen, die sensible Daten verarbeiten, insbesondere jene unter DSGVO-Vorschriften, nun gesetzlich dazu verpflichtet, die Zwei-Faktor-Authentifizierung (2FA) für Windows zu implementieren. Durch die Integration von NFC-basierten Anmeldungen können Unternehmen die Einhaltung sicherstellen, das Risiko von Datenverletzungen reduzieren und ihren Benutzern ein nahtloses Anmeldeerlebnis bieten. #### “Touch to Login” – Die Revolution der Anmeldung Eine der bemerkenswertesten Funktionen des CodeB Credential Providers ist die “Touch to Login”-Funktion. Benutzer können ihre NFC-Karte oder ihr NFC-fähiges Mobilgerät einfach an einen NFC-Leser halten, und sie werden automatisch in ihr Windows-Konto eingeloggt, ohne ein Passwort eingeben zu müssen. Dies bietet nicht nur eine zusätzliche Sicherheitsebene, sondern auch eine erhebliche Steigerung der Benutzerfreundlichkeit. Es eliminiert die Notwendigkeit, sich Passwörter zu merken, und beschleunigt den Anmeldevorgang erheblich. #### NFC / RFID Karten NFC (Near Field Communication) und RFID (Radiofrequenzidentifikation) Karten sind modernste Technologien, die eine drahtlose Kommunikation zwischen Geräten ermöglichen, wenn sie in unmittelbare Nähe gebracht werden. Diese Karten speichern Daten, die von spezialisierten Lesegeräten gelesen werden können, was sie ideal für sichere Authentifizierungszwecke macht. Für Windows 2FA fungieren NFC/RFID-Karten als physisches Token und fügen eine zusätzliche Sicherheitsebene über ein einfaches Passwort hinaus hinzu. #### Fazit Die NFC-Anmeldung für Windows von CodeB Identity Solutions bietet eine robuste und benutzerfreundliche Lösung für Unternehmen und Einzelpersonen, die ihre Sicherheit erhöhen möchten. Mit der Kombination aus NFC-Technologie, Mehrfaktor-Authentifizierung und der “Touch to Login”-Funktion können Benutzer sicher sein, dass ihre Daten und Systeme geschützt sind und gleichzeitig ein nahtloses Anmeldeerlebnis genießen. Drei Denkanstöße: - Wie könnte die NFC-Technologie die Zukunft der Authentifizierung weiterhin beeinflussen? - Welche anderen Anwendungen könnten von der Integration der NFC-Technologie und der “Touch to Login”-Funktion profitieren? - Wie könnten Unternehmen ihre Mitarbeiter effektiv schulen, um die Vorteile der NFC-Anmeldung und “Touch to Login” voll auszuschöpfen? --- ## Änderungen XRechnung 2.3.x URL: https://www.zugferdpro.com/aenderungen-xrechnung-2-3-x/ Date: 2023-09-05 Business terms: BT-89, BT-90, BT-91, BG-19 Wie Ihnen sicherlich bekannt ist, wird nun die XRechnungsversion 2.3.x als Standard eingeführt. Eine wichtige Änderung, die möglicherweise von vielen Kunden übersehen wurde, betrifft die “Direct Debit”: Die Syntaxkontrolle der Inhaltselemente von BG-19 wurde verfeinert. Zudem wurden die Regeln BRDE-29, BR-DE-30 und BR-DE-31 eingeführt, um die bereits bestehenden Kardinalitäten der Elemente BT-89, BT-90 und BT-91 zu überprüfen. Wir empfehlen Ihnen dringend, Ihren Code entsprechend zu aktualisieren. --- ## Kostenlose Windows Multi-Faktor Authentisierung URL: https://www.zugferdpro.com/kostenlose-windows-multi-faktor-authentisierung/ Date: 2023-08-30 Heutzutage ist die Multi-Faktor Authentisierung bei Windows in vielen Branchen erforderlich. Dies liegt daran, dass die Sicherheitsanforderungen stetig steigen und Unternehmen sich vor unerlaubten Zugriffen und Datenverlust schützen möchten. Die Multi-Faktor Authentisierung bietet eine zusätzliche Sicherheitsebene, indem sie sicherstellt, dass Benutzer durch die Kombination von zwei oder mehr unabhängigen Komponenten (z. B. Passwort und TOTP Token, NFC Karte, etc) authentifiziert werden. Aloaha versteht die Wichtigkeit dieser Sicherheitsmaßnahme und hat deshalb ein besonderes Angebot für seine Kunden. Für jeden Euro, den Sie für Aloaha ZUGFERD ausgeben, erhalten Sie einen Gutschrift für den [CodeB Credential Provider 2](https://www.codeb.io/products.html). Das bedeutet, wenn Sie das ZUGFeRD SDK für 950 Euro kaufen, können Sie 12 kostenlose CodeB Credential Provider erhalten (950/79 = 12). Dies ist eine hervorragende Möglichkeit, sowohl von den Vorteilen von ZUGFERD als auch von einer erhöhten Sicherheit durch den CodeB Credential Provider zu profitieren Dieses Angebot gilt nur bis 30.09.2023 --- ## QR Code Authentication & OpenID Connect: A Step Towards Passwordless Security URL: https://www.zugferdpro.com/qr-code-authentication-openid-connect-a-step-towards-passwordless-security/ Date: 2023-07-24 In the digital era, the need for secure and user-friendly authentication methods is paramount. They are the first line of defense in protecting sensitive data and ensuring smooth access to various systems and applications. A groundbreaking solution that merges QR Code authentication with OpenID Connect (OIDC) offers an enhanced level of security and user experience. This article explores the unique interplay between QR Codes and the OIDC authentication process, emphasizing how QR Codes serve as a secondary transport mechanism, thereby significantly bolstering security by making data interception exceedingly difficult. ### Explaining OpenID Connect (OIDC) OpenID Connect (OIDC) is a widely accepted authentication protocol that builds on the OAuth 2.0 framework. Its primary function is to facilitate secure authentication and authorization for users across diverse applications and services. OIDC streamlines the exchange of identity-related data, such as authentication tokens and user attributes, between the client application and the authentication server. ### The Transformative Role of QR Code Authentication in OIDC Within the OIDC framework, QR Code authentication revolutionizes the conventional username-password method. It doesn’t just add to the traditional approach but replaces it entirely, ushering in a passwordless world while enhancing the overall security. A mobile authenticator app plays a pivotal role in this process, turning the mobile device into a true Identity Provider (IdP). ### The Streamlined QR Code Verification Process When a user scans a QR Code using their mobile device, the QR Code graphically encodes a portion of the OIDC requests. The mobile app then securely interacts with the OIDC authentication server, triggering the authentication process. The QR Code functions as a secondary transport mechanism, filling in gaps in mobile OIDC requests and significantly enhancing security by making data interception exceedingly difficult. ### Boosting Security with a Secondary Transport Mechanism Employing QR Codes as a secondary transport mechanism makes the authentication process more secure. Given that QR Codes are unique to each login attempt and have a limited validity period, intercepting and reusing them for unauthorized access becomes a daunting task for potential attackers. This security advantage substantially mitigates the risk of man-in-the-middle attacks and other interception-based threats. ### Advantages of QR Code Authentication with OIDC 1. Improved Security: QR Code authentication revolutionizes the login process, bolstering the overall security and minimizing the risk of identity theft. 2. User-Friendly Experience: QR Code login does away with the need for complex passwords, providing a truly passwordless and user-friendly authentication process. Users can swiftly access systems with a simple scan, thereby improving overall user satisfaction. This approach is a significant step towards converting the world into a truly passwordless environment. 3. Cross-Platform Compatibility: OIDC’s versatility ensures seamless integration with various platforms and systems, making QR Code authentication adaptable to different applications. 4. Scalability and Flexibility: QR Code authentication with OIDC, brokered by the [CodeB Identity Broker](https://www.codeb.io/products.html) – an OpenID Connect Identity Proxy, can be tailored to meet various authentication requirements, accommodating the needs of end-users and service providers. Integration into existing environments and applications is very easy. For example Azure AD B2C, Auth0, WordPress, Nextcloud, WIX – just to name a few. 5. Smooth Mobile Integration: The QR Code authentication process capitalizes on the capabilities of mobile devices, offering a convenient and mobile-centric authentication experience. In the context of OpenID Connect, QR Code authentication marks a significant shift in the authentication landscape. By graphically encoding a portion of the OIDC requests and using a secondary transport mechanism, QR Codes significantly enhance security by making data interception exceedingly difficult. This approach provides a secure and seamless authentication process, ensuring the protection of sensitive data and revolutionizing the way users access applications and services. As we move towards a passwordless world, QR Code authentication with OIDC, facilitated by a mobile app and the CodeB Identity Broker, will undoubtedly play a pivotal role in securing our digital world. --- ## Erstellung einer ZUGFeRD/XRechnung XML Datei URL: https://www.zugferdpro.com/erstellung-einer-zugferd-xrechnung-xml-datei/ Date: 2023-07-23 Business terms: BT-23, BT-34, BT-41, BT-42, BT-43, BT-49 SDK methods: AddBuyerAssignedID, AddPaymentMeans, AddProduct_Comfort, AddReceivableSpecifiedTradeAccountingAccount, AddSpecifiedProcuringProject, AddTradePaymentTerms, AddTradeTax, BusinessProcessSpecifiedDocumentContextParameter, BuyerAddressLine1, BuyerAddressLine2, BuyerCity, BuyerCountry, BuyerDepartment, BuyerEmail, BuyerID, BuyerName, BuyerPersonalName, BuyerPostCode, BuyerTelephone, CreateInvoice, Document_ID, Document_Type, InvoiceCurrencyCode, IsKosit, Licensed, PaymentMeansCode, PaymentReference, SaveWithoutUTF8Header, SaveXML, SellerAddressLine1, SellerAddressLine2, SellerCity, SellerCountry, SellerDepartment, SellerEmail, SellerID, SellerName, SellerPersonalName, SellerPostCode, SellerTelephone, SetDespatchAdviceReferencedDocument, TodayDate, UseASIIOnSave, VatCategoryCode, WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson, WriteTotals, ZUGFeRD_Structure, ZUGfeRDStandard, set_URIUniversalCommunication Um Anfangsschwierigkeiten bei der Benutzung unseres SDK zu verringern haben wir ein neues Beispiel erstellt um eine  komplette ZUGFeRD XML Datei zu erstellen. NEU: Beispiel für VB6 / VBA / .NET: [Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) oder .NET](https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/) Wir haben zur Erstellung des Beispiels die Version 8.0.0.31 der ZUGFeRD Bibliothek benutzt. Stellen Sie sicher mindestens die gleiche Version installiert zu haben. Das Ergebnis haben wir mit dem freien Kosit Validator und auch dem Validator der Bahn überprüft. Referenzieren Sie müssen natürlich unsere ZUGFeRD-Assembly referenzieren und per „Imports Aloaha_ZUGFeRD“ in Ihr Projekt integrieren. Download Sie können das komplette Demo Projekt auch von folgender URL laden: [https://www.aloaha.com/download/ZUGFeRDSample.zip](https://www.aloaha.com/download/ZUGFeRDSample.zip) Es ist immer eine gute Idee ein Backup vom “CultureInfo” zu machen ``` Dim culture As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("de-DE") Dim culturebackup As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = culture ``` Erstellen Sie das ZUGFeRD Objekt ``` Dim alo As New Aloaha_ZUGFeRD.XML Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing 'Testen Sie ob die Lizenz gueltig ist. Eine Testlizenz erhalten Sie von info@aloaha.com If alo.Licensed("IHR-LIZENZSCHLUESSEL") = False Then MsgBox("Not Licensed") End If ``` Initialisieren Sie die Bibliothek ``` Dim ProfileType As Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile = Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort Dim TestIndicator As Boolean = False Dim LicenseKey As String = "IHR-LIZENZSCHLUESSEL" Dim alo As Aloaha_ZUGFeRD.XML = New Aloaha_ZUGFeRD.XML(ProfileType, TestIndicator, LicenseKey) alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice ``` Optional können Sie das Kosit Format aktivieren ``` 'alo.isKOSIT = True ``` Erstellen Sie die Rechnung mit diversen Startparametern ``` Dim Currenty As String = "EUR" Dim InvoiceID As String = "47110815" Dim InvoiceDate As String = alo.TodayDate.Document_Date Dim InvoiceNote As String = "Rechnung gemäß Bestellung" alo.CreateInvoice(InvoiceID, InvoiceNote, InvoiceDate, alo.TodayDate.Document_DateFormat, , , Currenty) alo.InvoiceCurrencyCode = Currenty alo.Document_ID = InvoiceID alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice 'BT-23 alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0" ``` Definieren Sie einige allgemeine Eigenschaften ``` alo.AddSpecifiedProcuringProject("ProjectID", "ProjectName") alo.AddBuyerAssignedID("Bestellnummer") Dim BookingReference As String = "Buchungsreferenz" Dim BookingReferenceTypeocde As String = "" alo.AddReceivableSpecifiedTradeAccountingAccount(BookingReference, BookingReferenceTypeocde) ``` Erstellen Sie den Käufer ``` alo.WriteBuyer("Buyer Limited","49479","Pembroke","Gruener Weg 1") alo.BuyerCountry = "DE" alo.BuyerName = "Buyer Limited" alo.BuyerPostCode = "49479" alo.BuyerID = "KundenNummer" alo.WriteBuyerContactPerson("John Doe", "Einkauf", "info@aloaha.com", "+4900000") alo.BuyerPersonalName = "John Doe" alo.BuyerDepartment = "Purchase Department" alo.BuyerEmail = "info@aloaha.com" alo.BuyerTelephone = "+490000" alo.BuyerCity = "Pembroke" alo.BuyerAddressLine1 = "Helogland" alo.BuyerAddressLine2 = "Triq Gio Felice Inglott" 'BT-34, BT-49 alo.set_URIUniversalCommunication("info@zugferdpro.com", "EM", False) ``` Erstellen Sie den Verkäufer ``` alo.WriteSeller("Aloaha Limited", "PBK1131", "Pembroke", "Helgoland", "45, Triq Gio Felice Inglott", "MT", "MT000000000") alo.SellerDepartment = "Sales" alo.SellerName = "Aloaha Limited" alo.SellerCity = "Pembroke" alo.SellerAddressLine1 = "Helgoland" alo.SellerAddressLine2 = "Triq Gio Felice Inglott" alo.SellerCountry = "MT" alo.SellerPostCode = "PBK1131" alo.SellerID = "4711" alo.WriteSellerContactPerson("John Doe", "Verkauf", "info@aloaha.com", "+49 1111111") alo.SellerPersonalName = "John Doe" 'BT-41 alo.SellerDepartment = "Sales Department" alo.SellerEmail = "info@aloaha.com" 'BT-43 alo.SellerTelephone = "+490000" 'BT-42 'BT-34, BT-49, PEPPOL-EN16931-R020 alo.set_URIUniversalCommunication("info@zugferdpro.com", "EM", true) ``` Definieren Sie die Zahlungsmethoden ``` alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer), "Sepa Credit Transfer", "MT000000000", "account name", "", "BIC", "", "", False) Dim PaymentTermsDescription As String = "Zahlbar sofort und ohne Abzug" Dim DueDate As String = alo.TodayDate.Document_Date Dim DirectDebitMandateID As String = "" alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID) alo.PaymentReference = "Invoice No. INV08154711" alo.SetDespatchAdviceReferencedDocument("Lieferavisreferenz") ``` Fügen Sie ein Produkt der Rechnung an ``` alo.AddProduct_Comfort("1", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennblätter ", "A4", "9.9", Currenty, "", "", False, "", "", "", "9,9", "eur", "", "", "vat", "s", "19.00", "", "198.00", "EUR", "globalid", "0160") ``` Note: Einheiten müssen genau spezifiziert sein: [UnitCodes für die Menge in ZUGFeRD / XRechnung / XInvoice](https://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/) Die Rechnungsbeträge müssen natürlich enthalten sein: ``` alo.WriteTotals("198.00", "235.62", "235.62", "198.00", "37.62", "0,0", "0.00") ``` ‘Steuerinformationen dürfen natürlich nicht fehlen ``` Dim CalculatedAmount As String = "37.62" Dim BasisAmount As String = "198.00" Dim TaxTypeCode As String = "VAT" Dim CategoryCode As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) Dim ApplicablePercent As String = "19.00" Dim TaxPointDate As String = "" Dim DueDateTypeCode As String = "" Dim ExemptionReason As String = "" alo.AddTradeTax(CalculatedAmount, Currenty, BasisAmount, Currenty, TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "", DueDateTypeCode) ``` Sie können sich auch direkt die Struktur ansehen und editieren ``` zug = alo.ZUGFeRD_Structure 'Felder editieren 'alo.ZUGFeRD_Structure = zug ``` Speichern Sie das XML ``` alo.UseASIIOnSave = False alo.SaveWithoutUTF8Header = False If System.IO.File.Exists("c:\temp\test1.xml") = True Then System.IO.File.Delete("c:\temp\test1.xml") alo.SaveXML("c:\temp\test1.xml") ``` CultureInfo zurückschreiben ``` System.Threading.Thread.CurrentThread.CurrentCulture = culturebackup ``` Als Ergebnis sollten Sie folgende Datei erhalten: [test1](https://www.zugferdpro.com/wp-content/uploads/2021/07/test1.zip)[Download](https://www.zugferdpro.com/wp-content/uploads/2021/07/test1.zip) Sollten Sie Fragen haben kontaktieren Sie bitte info@aloaha.com --- ## Unterlagen in ZUGFeRD / XRechnung XML einbetten URL: https://www.zugferdpro.com/unterlagen-in-zugferd-xrechnung-xml-einbetten/ Date: 2023-07-22 Business terms: BT-122, BT-123, BT-124, BT-125, BT-17, BT-18 SDK methods: Add_AdditionalReferencedFile, Add_ReferencedFile, GetAdditionalReferencedFile, GetLineItemReferencedDocument Es gibt diverse Methoden um unterstützende Dokumente in das XML einzubinden. Häufig wird das auf globaler Ebene gemacht. Sie benötigen dazu mindestens Version 9.0.0.52 unseres SDK’s. Sie benutzen hierzu die folgende Funktion: ``` alo.Add_AdditionalReferencedFile(FilePath, IssuerAssignedID, URIID, TypeCode, Name, ReferenceTypeCode, IssueDateTime, Document_DateFormat, MimeType) ``` Obige Variablen werden in BT-17, BT-18, BT-122, BT-123, BT-124 und BT-125 definiert. Der TypeCode wird in UNTDID 1001 definiert. Zum Beispiel: - 50: Validated priced tender Der Code 50 “Price/sales catalogue response” wird benutzt, um die Ausschreibung oder das Los zu referenzieren. Zum Beispiel in BT-17. - 130: Invoicing data sheet Der Code 130 “Rechnungsdatenblatt” wird benutzt, um eine vom Verkäufer angegebene Kennung für ein Objekt zu referenzieren. Zum Beispiel in BT-18. - 916: Related document More on: [https://stpe.semantic-treehouse.nl/codelist/Codelist_1506926523_00524266](https://stpe.semantic-treehouse.nl/codelist/Codelist_1506926523_00524266) Auslesen können Sie die Datei mit folgendem Code: ``` dim filearray() as byte = alo.GetAdditionalReferencedFile(Index, ID, FileName, MimeType, IssuerAssignedID, LineID, TypeCode, ReferenceTypeCode, Document_Date) ``` Es ist im “Extended Profile” weiterhin möglich für jeden Rechnungsposten ein Dokument einzubinden. Dazu wird die folgende Funktion benutzt: ``` Add_ReferencedFile(ReferencedFileType, PositionNO, FilePath, IssuerAssignedID,  URIID, LineID, TypeCode, Name, ReferenceTypeCode, IssueDateTime, Document_DateFormat, MimeType) ``` Auch hier können Sie natürlich das Dokument wieder auslesen: ``` dim filearray() as byte = alo.GetLineItemReferencedDocument(PositionNO, URIID, FileName, MimeType, IssuerAssignedID, LineID, TypeCode, ReferenceTypeCode, Document_Date) ``` Note: Der Rechnungsempfänger könnte zusätzliche Detailangaben verlangen. Diese fügen Sie mit [Add_ReferencedDocument](https://www.zugferdpro.com/detailangaben-zu-rechnungsposten-hinzufuegen/)ein. Mehr zu dem Thema: [Angabe von Vergabenummer (BT-17) und Objektkennung (BT-18)](https://www.zugferdpro.com/angabe-von-vergabenummer-und-objektkennung/) --- ## Multi-Factor Authentication for Windows Login & RDP URL: https://www.zugferdpro.com/multi-factor-authentication-for-windows-login-rdp/ Date: 2023-03-12 Windows Credential Providers play a crucial role in user authentication, serving as the primary gateway for identity verification during logins. With the advent of Windows 10, Credential Providers have gained even more significance as they are now also used for app and website authentication and beyond. Microsoft offers a variety of Credential Providers for Windows, including password, PIN, smartcard, and Windows Hello features like fingerprint, facial, and iris recognition. But what if your requirements demand greater versatility? CodeB has developed a user-friendly and flexible Credential Provider. With over a decade of experience and insights from the widely used Aloaha Smartlogon, CodeB has redesigned the [CodeB Credential Provider](https://www.win-logon.com/credential-provider-2/) from the ground up, offering a sophisticated blend of simplicity and functionality. Protect Your Windows Workspace The Windows Credential Provider API is essential for system security, ensuring only authorized users access resources. With the expansion of the digital world, security threats are also on the rise. Many companies, especially those reliant on contractors, are vulnerable to advanced persistent threats (APTs) and hardware keyloggers. Industries like payment card providers and those processing GDPR-sensitive data legally require Two-Factor Authentication (2FA) for Windows. However, many businesses view Windows 2FA as cumbersome, risking data breaches and legal consequences. Existing security solutions, often focusing on smartcards, have been slow to gain traction due to technical and trust issues. Moreover, deciding how to integrate into existing Public Key Infrastructures (PKI) or use specific smartcards can be daunting. [CodeB Credential Provider](https://www.win-logon.com/credential-provider-2/) steps in with expert advice, tools, and software specifically designed to bolster security. Our platform supports a variety of login tokens, from simple USB flash drives and [NFC](https://www.win-logon.com/nfc-logon/) MIFARE to PKI smartcards and Mobile OpenID Connect. Diverse Supported Login Tokens, Including Mobile OpenID Connect The widespread misconception is that bolstering Windows login security is a complex task, leading to a reliance on inadequate password strategies. CodeB Credential Provider challenges this paradigm, simplifying the adoption of a Windows login token. Be it a simple USB flash drive, a state-of-the-art X.509 PKI smartcard, an Android phone, a versatile Authenticator app, a standard NFC/Mifare/Desfire contactless card, or even as the world’s first provider supporting login via [Mobile OpenID Connect Tokens](https://www.codeb.io/products.html) – CodeB’s innovative solution will revolutionize your security landscape. Access Windows with NFC Card, NFC-capable Mobile Device, or Your Android Phone For [NFC login to Windows](https://www.win-logon.com/nfc-logon/), a compatible NFC card like MIFARE or DESFIRE is required. We also support various company badges, student IDs, bus tickets, credit cards, physical access cards, hotel cards, and more. Time-Based One-Time Password (TOTP) Our advanced Credential Provider V2 also supports [time-based one-time passwords (TOTP)](https://www.codeb.io/products.html), enabling seamless login to your Windows workspace, be it a local or a domain account. Any standard TOTP app can be used. Overview: - Packaged as a standalone .NET Windows library (DLL). - Installation with a single click. No installation package required. - MSI installer available upon request. - We can translate the software into any desired language. - Support for domain-connected and standalone machines. - Secure Remote Desktop (RDP), network shares, and local login. - Customizable functionality through settings. - Functionally expandable via plugin interface. - Easy to customize, e.g., by adding your own logo. - Based on Microsoft’s ICredentialProviderCredential2 interface. - With an integrated login provider filter. - Use any TOTP authenticator to log into Windows. - Use your Android phone as an NFC login token. - Accepts mobile OpenID Connect tokens. - X.509 certificates can be used as a login token, ideally hosted on a PKI smartcard. - Accepts simple USB flash drives as login tokens. - Supports a variety of NFC tokens as login tokens, including company badges, national identity cards, bus tickets, credit cards, MIFARE, DESFIRE, and much more. Conclusion Is the CodeB Credential Provider the right solution for your problem? Try it out and request an evaluation key! --- ## TOTP 2FA Anmeldung für Windows: Eine technische Perspektive URL: https://www.zugferdpro.com/totp-2fa-anmeldung-fur-windows-eine-technische-perspektive/ Date: 2023-03-11 In der heutigen digitalen Ära ist die Sicherheit von Daten und Systemen von größter Bedeutung. Mit der ständigen Bedrohung durch Cyberangriffe suchen Unternehmen nach robusten Sicherheitslösungen. Eine solche Lösung ist die [Zwei-Faktor-Authentifizierung (2FA) für Windows](https://www.codeb.io/products.html) mittels zeitbasierter Einmalpasswort (TOTP) Authentifizierung. ### Warum TOTP 2FA für Windows? Die Zwei-Faktor-Authentifizierung (2FA) bietet eine zusätzliche Sicherheitsebene, indem sie die Identitätsbestätigung auf zwei unterschiedlichen Authentifizierungsfaktoren basiert. Mit TOTP wird ein einzigartiges, kurzlebiges Passwort generiert, das nach einer bestimmten Zeit abläuft. Dies erhöht die Sicherheit, da selbst wenn die primären Anmeldeinformationen kompromittiert werden, der Zugriff durch den flüchtigen TOTP-Code verhindert wird. ### Installation und Registrierung Die Einrichtung des [CodeB Credential Providers](https://www.codeb.io/products.html) ist unkompliziert. Es gibt zwei Editionen: die System-Tray-Einzelanwendung und eine umfassendere Werkzeug- und Anwendungssammlung. Für eine schnelle Demonstration ist die System-Tray-Einzelanwendung ideal. Nach der Installation ist es wichtig, die Anwendung mit Administratorrechten auszuführen, um eine ordnungsgemäße Registrierung sicherzustellen. ### Konto mit TOTP-Token verknüpfen Die Verknüpfung Ihres Kontos mit dem TOTP-Token ist ein einfacher Prozess. Geben Sie Ihre Anmeldeinformationen ein und scannen Sie den angezeigten QR-Code mit Ihrer Authenticator App, um den TOTP-Schlüssel zu übernehmen. ### Wechsel zwischen Credential Providern Ein weiterer Vorteil des CodeB Credential Providers ist die Möglichkeit, während des Windows-Logins mühelos zwischen dem standardmäßigen Windows-Credential-Provider und dem CodeB Credential Provider zu wechseln. Dies bietet den Benutzern Flexibilität und Sicherheit. ### Fazit Die Integration von TOTP 2FA in Windows-Ökosysteme ist ein entscheidender Schritt zur Verbesserung der Cybersicherheit. Es bietet nicht nur eine zusätzliche Sicherheitsebene, sondern dient auch als Brücke zur rechtlichen Konformität. In einer Zeit, in der Cyber-Bedrohungen immer raffinierter werden, ist es unerlässlich, sich mit den besten verfügbaren Sicherheitstools auszustatten. --- ## Angabe von Vergabenummer (BT-17) und Objektkennung (BT-18) URL: https://www.zugferdpro.com/angabe-von-vergabenummer-und-objektkennung/ Date: 2023-03-05 Business terms: BT-18, BT-17, BT-122, BT-124, BT-123, BT-125 SDK methods: Add_AdditionalReferencedDocument Schlüsselnummern BT-17 und BT18 werden oft bei X-Rechnung nachgefragt. Die Schlüsselnummer BT-17 ist die Vergabenumme (Tender or lot reference) und die BT-18 ist die Objektkennung (Invoiced object identifier). Beide Werte werden mit der Funktion Add_AdditionalReferencedDocument hinzugefügt. Die volle Syntax ist: ``` Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, Optional Name, Optional MimeCode, Optional FileName, Optional IssueDateTime, Optional Document_DateFormat, Optional ReferenceTypeCode, Optional MimeType) ``` Variablen sind: IssuerAssignedID: BT-17, BT-18, BT-122: Supporting document referenceURIID: BT-124: External document locationTypeCode: BT-17-0, BT-18-0, BT-122-0: Referenced document typeName: BT-123: Supporting document descriptionMimeCode: BT-125: AttachmentBinaryObject in BASE64FileName: BT-125-2: Attached document file nameIssueDateTime: Document Date YYYYMMDDDocument_DateFormat: Date Format 102ReferenceTypeCode: BT18-1: Scheme IdentifierMimeType: BT-125-1: Attached document MIME code Der TypeCode wird in UNTDID 1001 definiert. Zum Beispiel: - 50: Validated priced tender Der Code 50 “Price/sales catalogue response” wird benutzt, um die Ausschreibung oder das Los zu referenzieren. Zum Beispiel in BT-17. - 130: Invoicing data sheet Der Code 130 “Rechnungsdatenblatt” wird benutzt, um eine vom Verkäufer angegebene Kennung für ein Objekt zu referenzieren. Zum Beispiel in BT-18. - 916: Related document More on: https://stpe.semantic-treehouse.nl/codelist/Codelist_1506926523_00524266 Beispiel Vergabenummer BT-17: ``` Dim IssuerAssignedID As String = "FV12-24-xxxx-xx-xx" Dim URIID As String = "" Dim TypeCode As String = "50" Dim docdescription As String = "doc description" alo.Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, docdescription, "", "", "20221212", "102") ``` Beispiel Objektkennung BT-18: ``` Dim IssuerAssignedID As String = "631xxx-xx" Dim URIID As String = "" Dim TypeCode As String = "130" Dim docdescription As String = "doc description" alo.Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, docdescription, "", "", "20221212", "102") ``` Mehr zu dem Thema: [Unterlagen in ZUGFeRD / XRechnung XML einbetten](https://www.zugferdpro.com/unterlagen-in-zugferd-xrechnung-xml-einbetten/) --- ## Wie kann ich feststelle ob alles korrekt installiert und registriert ist? URL: https://www.zugferdpro.com/wie-kann-ich-feststelle-ob-alle-korrekt-installiert-und-registriert-ist/ Date: 2022-12-27 SDK methods: Licensed, LoadPDF2Mem, PDFMetaData_STR Wenn anstelle des Installers sich jemand entscheidet nur die Bibliotheken zu benutzen dann stellt sich manchmal die Frage ob alles korrekt installiert und registriert ist. Das lässt sich jedoch mit einem kleinen Testprogramm leicht feststellen: ``` Dim result As Boolean = False Try Const License As String = "IHR-LIZENZSCHLUESSEL" 'Please contact info@aloaha.com for your evaluation key Dim alo As New Aloaha_ZUGFeRD.XML Dim InvoicePath As String = "c:\pdf\zugferd2.pdf" If alo.Licensed(License) = True Then If alo.LoadPDF2Mem(InvoicePath, "", License) = True Then Dim mdata As String = alo.PDFMetaData_STR(InvoicePath, License) If mdata Is Nothing Then mdata = "" If mdata <> "" Then result = True End If End If End If Catch ex As Exception End Try Return result ``` Wenn man das obige Programm mit erweiterten Rechten ausführt werden alle Bibliotheken korrekt registriert! --- ## Wie gebe ich eine abweichende Lieferanschrift an? BG-13, BT-70, BT-71, BG-15 URL: https://www.zugferdpro.com/wie-gebe-ich-eine-abweichende-lieferanschrift-an-bg-13-bt-70-bt-71-bg-15/ Date: 2022-11-12 Business terms: BG-13, BG-15, BT-70, BT-71, BT-72 Eine abweichende Lieferanschrift wird mit der Funktion WriteShipToTradeParty(CompanyName, PostCode, City, Streetline1, Streetline2, CountryCode_2Letter_ISO, CustomerNo, VAT_No, Leitweg_ID, Streetline3, GlobalID, GlobalIDSchemeID) gesetzt. Sollten Sie auch die Steuernummer bzw. VAT Nummer setzen müssen benutzen Sie bitte: AddShipToTradePartyTAX(TAXNumber, TAXType) Ausgelesen wird die abweichende Lieferanschrif mit GetShipToTradeParty Sollte die Lieferanschrift nicht gesetzt werden dann liegt das vermutlich am fehlenden Lieferdatum. Dieses setzen Sie so: ``` Dim Docdate As Aloaha_ZUGFeRD.iXML.DocumentDateDocdate.Document_Date = "20240613" 'BT-72Docdate.Document_DateFormat = "102" 'BT-72-0alo.ActualDeliveryDate = Docdate ``` --- ## Detailinformationen zum zugehörigen Lieferschein URL: https://www.zugferdpro.com/detailinformationen-zum-zugehorigen-lieferschein/ Date: 2022-11-04 Möchte man die Lieferscheinnummer angeben benutzt man: alo.AddDeliveryNote(“Lieferscheinnummer”, “”, “”)                                               ‘BT-X-202 Möchte man auch das Datum angeben dann benutzt man: alo.AddDeliveryNote(“Lieferscheinnummer”, “20221231”, “102”)                          ‘BT-X-203 Wenn man jedoch die Lieferscheinnummer auslesen möchte benutzt man: Dim Lieferscheinnummer as string=alo.getDeliveryNoteReferencedDocument() --- ## AdditionalReferencedDocument / Rechnungsbezugsobjekt / BT-128 URL: https://www.zugferdpro.com/additionalreferenceddocument-rechnungsbezugsobjekt-bt-128/ Date: 2022-10-03 Business terms: BT-128 SDK methods: Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument Das Rechnungsbezugsobjekt BT-128 ist eine vom Verkäufer angegebene Objektkennung für einen Rechnungsgegenstand, auf den sich die Rechnungsposition bezieht (z. B. eine Abo-Nummer, eine Rufnummer, eine Zählernummer). Sie fügen es mit dem folgenden Kommando an einen Rechnungsposten an: ``` alo.Add_SpecifiedLineTradeSettlement_AdditionalReferencedDocument(position, "TypeCode", "IssuerAssignedID", "ReferenceTypeCode") ``` Natürlich kann es auch ausgelesen werden: get_SpecifiedLineTradeSettlement_AdditionalReferencedDocument --- ## ReceivableSpecifiedTradeAccountingAccount / Buchungsreferenz / BT-133 URL: https://www.zugferdpro.com/receivablespecifiedtradeaccountingaccount-buchungsreferenz-bt-133/ Date: 2022-10-03 Business terms: BT-133 SDK methods: Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount Die Buchungsreferenz BT-133 ist ein Textwert, der angibt, an welcher Stelle die betreffenden Daten in den Finanzkonten des Erwerbers zu buchen sind. Anmerkung: Wenn die Angabe genutzt werden soll, muss der Erwerber dem Verkäufer diese Referenz vor der Rechnungserstellung mitteilen. Mit folgendem Code können Sie den Wert setzen: ``` alo.Add_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount(position, "ID", "TypeCode") ``` Lesen können Sie mit: Get_SpecifiedLineTradeSettlement_ReceivableSpecifiedTradeAccountingAccount --- ## Referenz bzw. Detailangaben zur zugehörigen Bestellung / BT-132 URL: https://www.zugferdpro.com/referenz-bzw-detailangaben-zur-zugehorigen-bestellung-bt-132/ Date: 2022-10-03 Business terms: BT-132 SDK methods: Add_ReferencedDocument BuyerOrderReferencedDocument bzw. BT-132 ist eine vom Erwerber ausgegebene Kennung für eine referenzierte Position einer Bestellung/eines Auftrags. Mit dem folgenden Code können Sie dieses einem Posten hinzufügen: ``` alo.Add_ReferencedDocument(iXML.WhichReferencedDocument.BuyerOrderReferencedDocument, PositionNOLong, "IssuerAssignedID", "ReferenzedLinedID", "20241003", "102") ``` Natürlich können Sie es auch mit folgendem Kommando auslesen: Read_ReferencedDocument --- ## Rechnungskorrektur / Gutschrift / BT-25 / BG-3 URL: https://www.zugferdpro.com/rechnungskorrektur-gutschrift-bt-25/ Date: 2022-09-17 Business terms: BG-3, BT-25, BT-26 Wenn eine Rechnungskorrektur oder eine Gutschrift erstellt wird dann sollte man mit der Funktion AddInvoiceReferencedDocument Bezug auf die entsprechende Rechnung nehmen. Anmerkung: Für den Fall, dass die Nummer der vorausgegangenen Rechnung (Preceding invoice identifier) nicht eindeutig ist, soll das Datum der vorausgegangenen Rechnung “Preceding Invoice issue date” (BT-26) angegeben werden. --- ## Detailangaben zu Rechnungsposten hinzufügen URL: https://www.zugferdpro.com/detailangaben-zu-rechnungsposten-hinzufuegen/ Date: 2022-07-22 Business terms: BT-132 SDK methods: Add_ReferencedDocument Im Extended Profile können Sie jedem Rechnungsposten Detailangaben hinzufügen. Zum Beispiel wie in BT-132 definiert. Das funktioniert mit folgender Funktion: ``` Add_ReferencedDocument(Doctype, PositionNo, IssuerAssignedID, ReferencedLineID, IssueDateTime, Document_DateFormat) ``` Doctype ist dabei einer der folgenden Werte: iXML.WhichReferencedDocument.BuyerOrderReferencedDocument iXML.WhichReferencedDocument.ContractReferencedDocument iXML.WhichReferencedDocument.QuotationReferencedDocument iXML.WhichReferencedDocument.UltimateCustomerOrderReferencedDocument Global: iXML.WhichReferencedDocument.GLOBAL_UltimateCustomerOrderReferencedDocument --- ## ZUGFeRD-XML und PDF-Rechnung per Webservice zu einer PDF-ZUGFeRD-Rechnung zusammenführen URL: https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/ Date: 2022-06-15 Mit der Funktion [MergeXMLIntoPDF](https://www.zugferdpro.com/?s=MergeXMLIntoPDF) unseres ZUGFeRD-SDK können Sie mühelos eine XML X-Rechnung mit einer PDF-Datei zu einer ZUGFeRD-PDF-Rechnung zusammenführen. Dabei werden gleichzeitig die erforderlichen Einträge in den XMP-Metadaten des finalen PDFs vorgenommen. Zusätzlich zu den Funktionen des SDKs bieten wir auch Webservices zur Integration an. Diese sind Bestandteil unseres Aloaha eForms Servers, der entweder in Ihrem Rechenzentrum oder in der Cloud installiert werden kann. Zudem stellen wir einen öffentlichen Server zum Testen bereit, erreichbar unter der URL [https://eforms.aloaha.com](https://eforms.aloaha.com) Der Webservice [MergeXMLIntoPDF](https://eforms.aloaha.com/zugferd.asmx?op=MergeXMLIntoPDF) ist unter der folgenden URL erreichbar: [https://eforms.aloaha.com/zugferd.asmx?op=MergeXMLIntoPDF](https://eforms.aloaha.com/zugferd.asmx?op=MergeXMLIntoPDF) Dieser Webservice erfordert zwei Parameter. Diese sind xmlid und pdfid. xmlid ist die ID der hochgeladenen XML X-Rechnung. Sie erhalten diese, wenn Sie auf [https://eforms.aloaha.com/xmluploader.aspx](https://eforms.aloaha.com/xmluploader.aspx) eine XML-Datei hochladen. Optional können Sie diesen Prozess auch automatisieren, zum Beispiel mit CURL: ``` curl --verbose --max-time 300 --retry 0 -F "file=@xinvoice.xml" -k https://eforms.aloaha.com/xmluploader.aspx ``` oder ``` curl --verbose --max-time 300 --retry 0 --data-binary "@xinvoice.xml" -H "Content-Type: application/xml" -k https://eforms.aloaha.com/xmluploader.aspx ``` Ähnliches gilt für die pdfid. Sie ist die ID des hochgeladenen PDF-Dokuments. Sie können das Dokument über die URL [https://eforms.aloaha.com/pdfuploader.aspx](https://eforms.aloaha.com/pdfuploader.aspx) hochladen. Auch hier können Sie das Dokument direkt an die URL posten: ``` curl --verbose --max-time 300 --retry 0 -F "file=@rechnung.pdf" -k https://eforms.aloaha.com/pdfuploader.aspx ``` oder ``` curl --verbose --max-time 300 --retry 0 --data-binary "@rechnung.pdf" -H "Content-Type: application/pdf" -k https://eforms.aloaha.com/pdfuploader.aspx ``` Falls Sie Probleme mit HTTPS haben, können Sie auch die unverschlüsselte Variante HTTP verwenden. #### Workflow bilden Mit den obigen URLs ist es möglich, direkt einen Workflow zu erstellen. Zum Beispiel können Sie die xmlid vom xmluploader.aspx direkt als GET-Parameter an pdfuploader.aspx anhängen oder die pdfid vom pdfuploader.aspx direkt als GET-Parameter an xmluploader.aspx anhängen. Nehmen wir an, wir haben 660e8d1cb7a446538e11dcda6492db1f als xmlid vom xmluploader.aspx erhalten. Sie können dann ein PDF posten und erhalten direkt die fertige ZUGFeRD-Rechnung zurück: ``` curl --verbose --max-time 300 --retry 0 -F "file=@rechnung.pdf" -k https://eforms.aloaha.com/pdfuploader.aspx?xmlid=660e8d1cb7a446538e11dcda6492db1f -o outputfile.pdf ``` oder ``` curl --verbose --max-time 300 --retry 0 --data-binary "@rechnung.pdf" -H "Content-Type: application/pdf" -k https://eforms.aloaha.com/pdfuploader.aspx?xmlid=660e8d1cb7a446538e11dcda6492db1f -o outputfile.pdf ``` Umgekehrt geht es natürlich auch. Nehmen wir an, wir haben 42014960242d4c289a3ea5c500152123 als pdfid vom pdfuploader.aspx erhalten. Sie können dann ein xml posten und erhalten direkt die fertige ZUGFeRD-Rechnung zurück: ``` curl --verbose --max-time 300 --retry 0 -F "file=@xinvoice.xml" -k https://eforms.aloaha.com/xmluploader.aspx?pdfid=42014960242d4c289a3ea5c500152123 -o outputfile.pdf ``` oder ``` curl --verbose --max-time 300 --retry 0 --data-binary "@xinvoice.xml" -H "Content-Type: application/xml" -k https://eforms.aloaha.com/xmluploader.aspx?pdfid=42014960242d4c289a3ea5c500152123 -o outputfile.pdf ``` Falls Sie Probleme mit HTTPS haben, können Sie auch hier die unverschlüsselte Variante HTTP verwenden. Webbasiert ZUGFeRD XML extrahieren und anzeigen: [https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/](https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/) --- ## Webbasiert ZUGFeRD XML extrahieren und anzeigen URL: https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/ Date: 2022-06-14 Das Aloaha ZUGFeRD SDK kann nicht nur X-Rechnungen bzw. ZUGFeRD-Rechnungen erstellen, sondern auch einlesen. Der erste Schritt besteht immer darin, die ZUGFeRD-XML aus dem PDF zu extrahieren. Dies kann mit VB.NET und der COM-Methode [exportzugferdxml2disk](https://www.zugferdpro.com/wie-kann-ich-die-xml-datei-aus-der-pdf-rechnung-extrahieren/) durchgeführt werden. Da der Aloaha eForms Server auch Schnittstellen für ZUGFeRD bzw. X-Rechnung bietet, kann dieser ebenfalls zur Extraktion von XML-Dateien genutzt werden. Gehen Sie einfach auf [https://eforms.aloaha.com/zugferd.aspx](https://eforms.aloaha.com/zugferd.aspx) und laden Sie Ihr PDF hoch. Wenn das XML extrahiert werden kann, wird es angezeigt. Natürlich können Sie unseren Aloaha eForms Server auch erwerben, um ihn in Ihrem Rechenzentrum zu betreiben. Das PDF wird dabei an zugferd.aspx gepostet. Dies kann entweder per multipart/form-data-Post oder als nativer Post geschehen. Siehe dazu auch die Beispiele: ``` curl --verbose --max-time 300 --retry 0 -F "file=@xinvoice.pdf" -k https://eforms.aloaha.com/zugferd.aspx curl --verbose --max-time 300 --retry 0 --data-binary "@xinvoice.pdf" -H "Content-Type: application/pdf" -k https://eforms.aloaha.com/zugferd.aspx ``` Sollte Ihr curl Probleme mit HTTPS haben, können Sie auch die unverschlüsselte Variante HTTP verwenden. Möchten Sie in die andere Richtung gehen? Zum Beispiel eine ZUGFeRD-XML-Datei direkt in Winword oder eine ZUGFeRD PDF umwandeln? Dann lesen Sie hier: [https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) ZUGFeRD-XML und PDF-Rechnung per Webservice zu einer PDF-ZUGFeRD-Rechnung zusammenführen: [https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) --- ## Innergemeinschaftlichen Rechnung und ShipToTradeParty, BT-80 URL: https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/ Date: 2022-03-04 Business terms: BT-80, BG-23, BT-118 SDK methods: AddProduct_Comfort, WriteShipToTradeParty, WriteShipToTradePartyItem Bei einer innergemeinschaftlichen Rechnung und dem CategoryCode K bei der Umsatzsteuer erhält man häufig von Validatoren die folgenden Fehler: [BR-IC-12]-In an Invoice with a VAT breakdown (BG-23) where the VAT category code (BT-118) is “Intra-community supply” the Deliver to country code (BT-80) shall not be blank. bzw.In einer Rechnung, die eine Umsatzsteueraufschlüsselung „VAT BREAKDOWN“ (BG-23) mit dem Code der Umsatzsteuerkategorie „VAT category code“ (BT-118) mit dem Wert „Intra-community supply“ enthält,darf „Deliver to country code“ (BT-80) nicht leer sein. Das liegt daran das die Lieferadresse erwartet wird. Diese setzen Sie mit WriteShipToTradeParty ``` alo.WriteShipToTradeParty("Firmenbezeichnung", "Postleitzahl", "Stadt", "Strasse Zeile 1", "Strasse Zeile 2", "Laenderkennung DE", "Kundennummer", "VAT Nummer", "LeitwegID", "Strasse Zeile 3") ``` Ab Version 9.0.0.44 gibt es die neue Funktion WriteShipToTradePartyItem. Damit können Sie die ShipToTradeParty pro Posten setzen. Dies wird von einigen prominenten Automobilherstellern gefordert. ``` position = alo.AddProduct_Comfort("1", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennblätter ", "A4", "9.9", Currenty, "", "", False, "0.00", "eur", "", "9,9", "eur", "", "", "vat", "s", "19.00", "", "198.00", "EUR", "globalid", "0160") alo.WriteShipToTradePartyItem(CStr(position), "Firmenbezeichnung0", "Postleitzahl0", "Stadt0", "Strasse Zeile 1", "Strasse Zeile 2", "DE", "Kundennummer0", "VAT Nummer0", "LeitwegID0", "Strasse Zeile 3", "GlobaliD0", "Scheme") ``` --- ## Versicherungssteuer und Mineralölsteuer URL: https://www.zugferdpro.com/versicherungssteuer-und-mineralolsteuer/ Date: 2022-02-19 SDK methods: AddTradeTax In ZUGFeRD wird die Steuerart „Umsatzsteuer“ mit dem Code „VAT“ unterstützt. Sollen andere Steuerarten angegeben wie beispielsweise eine Versicherungssteuer oder eine Mineralölsteuer werden muss der Code für die Steuerart dann der Codeliste UNTDID 5153 entnommen werden. ``` alo.AddTradeTax(“0.00”, “EUR”, “0.00”, “EUR”, “AAM”, “”, “0”) ``` ### Beispiele Versicherungssteuer: AAM Mineralölsteuer: AAK Tabaksteuer: AAD Kaffeesteuer: AAF Zoll: CUD [https://unece.org/fileadmin/DAM/trade/untdid/d15a/tred/tred5153.htm](https://unece.org/fileadmin/DAM/trade/untdid/d15a/tred/tred5153.htm) --- ## Wie setze ich BusinessProcessSpecifiedDocumentContextParameter (BT-23) URL: https://www.zugferdpro.com/wie-setze-ich-businessprocessspecifieddocumentcontextparameter-bt-23/ Date: 2022-02-06 Business terms: BT-23, BT-24 Nachdem Sie das ZUGFeRD Objekt mit [Create_Invoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) ([VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/) und COM) bzw. [CreateInvoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) ([VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/)) erstellt haben möchten Sie eventuell BusinessProcessSpecifiedDocumentContextParameter (BT-23) setzen. Oft wird dieses Feld vom Rechnungsempfänger erfordert. BusinessProcessSpecifiedDocumentContextParameter ist ein “Property”: alo.BusinessProcessSpecifiedDocumentContextParameter=”urn:fdc:peppol.eu:2017:poacc:billing:01:1.0″ --- ## Kennung eines Vertrags URL: https://www.zugferdpro.com/kennung-eines-vertrags/ Date: 2021-06-22 Business terms: BT-12 SDK methods: AddContractReferencedDocument Die Vertragsreferenz sollte im Kontext der spezifischen Handelsbeziehung und für einen definierten Zeitraum einmalig vergeben sein: ``` alo.AddContractReferencedDocument(“Vertragsreferenz”, “20130608”, “102”) ``` --- ## Name und Kennung des Projektes, auf das sich die Rechnung bezieht URL: https://www.zugferdpro.com/name-und-kennung-des-projektes-auf-das-sich-die-rechnung-bezieht/ Date: 2021-06-22 Business terms: BT-11 SDK methods: AddSpecifiedProcuringProject Um den Namen und die Kennung des Projektes, auf das sich die Rechnung bezieht, zu definieren benutzen Sie bitte: ``` alo.AddSpecifiedProcuringProject(“ProjectID”, “ProjectName”) ``` --- ## Dokumentennummer und rechnungsbegründende Unterlagen URL: https://www.zugferdpro.com/dokumentennummer/ Date: 2021-04-22 Business terms: BG-24, BT-122, BT-123, BT-124, BT-17, BT-18 SDK methods: Add_AdditionalReferencedDocument Die Dokumentennummer ist die Kennung der Ausschreibung oder des Loses, auf die/das sich die Rechnung bezieht, oder eine vom Verkäufer angegebene Kennung für ein Objekt, auf dem die Rechnung basiert, oder eine Kennung der rechnungsbegründenden Unterlage. In manchen Ländern muss eine Referenz zu der Ausschreibung angegeben werden, die zu dem Vertrag geführt hat. Das kann je nach Anwendung eine Abonnementnummer, eine Telefonnummer, ein Zählerstand, ein Fahrzeug, eine Person usw. sein. Die rechnungsbegründenden Unterlagen können sowohl für die Referenz einer Dokumentnummer, die dem Empfänger bekannt sein sollte, als auch eines externen (durch einen URL referenzierten) Dokuments oder eines eingebetteten Dokuments (wie z. B. eines Stundenzettels als PDF-Datei) verwendet werden. Die Option der Verknüpfung mit einem externen Dokument ist z. B. dann erforderlich, wenn es um große Anhänge und/oder um sensible Informationen, z. B. bei personenbezogenen Diensten, geht, die von der Rechnung getrennt werden müssen Der Code 916 “Referenzpapier” wird benutzt, um die Kennung der rechnungsbegründenden Unterlage zu referenzieren. (BT-122) Der Code 50 “Price/sales catalogue response” wird benutzt, um die Ausschreibung oder das Los zu referenzieren. (BT-17) Der Code 130 “Rechnungsdatenblatt” wird benutzt, um eine vom Verkäufer angegebene Kennung für ein Objekt zu referenzieren. (BT-18) ``` Dim IssuerAssignedID As String = "Dokumentennummer" Dim URIID As String = "" Dim TypeCode As String = "916" Dim docdescription As String = "doc description" ' alo.Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, docdescription, "", "", "20201212", "102") ``` Um alles wieder zu lesen benutzen Sie bitte: ReadAdditionalReferencedDocument --- ## Fälligkeitsdatum: Der Termin, zu dem die Zahlung fällig ist URL: https://www.zugferdpro.com/falligkeitsdatum-der-termin-zu-dem-die-zahlung-fallig-ist/ Date: 2021-04-22 Business terms: BG-19, BT-20, BT-89, BT-9 SDK methods: AddTradePaymentTerms, TodayDate, TradePaymentTerm, TradePaymentTermsCount Das Fälligkeitsdatum der Zahlung spiegelt das Fälligkeitsdatum der Nettozahlung wider. ``` Dim PaymentTermsDescription As String = "Zahlbar sofort und ohne Abzug"      'BT-20 Dim DueDate As String = alo.TodayDate.Document_Date              'BT-9 Dim DirectDebitMandateID As String = ""                           'BG-19 / BT-89 alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID) ``` Natürlich können Sie die PaymentTerms auch auslesen: ``` If alo.TradePaymentTermsCount > 0 Then For i = 0 To alo.TradePaymentTermsCount Dim index As Long Dim Description As String = "" Dim ActualDiscountAmount As String = "" Dim tCalculationPercent As String = "" Dim ttDirectDebitMandateID As String = "" Dim tDueDate As String = "" Dim BasisDateTime As String = "" Call alo.TradePaymentTerm(index, Description, ActualDiscountAmount, tCalculationPercent, ttDirectDebitMandateID, BasisDateTime, tDueDate) Next iEnd If ``` --- ## Freitext der Zahlungsbedingungen URL: https://www.zugferdpro.com/freitext-der-zahlungsbedingungen/ Date: 2021-04-22 Business terms: BG-19, BT-20, BT-89, BT-9 SDK methods: AddTradePaymentTerms, TodayDate, TradePaymentTerm, TradePaymentTermsCount Die Textbeschreibung der Zahlungsbedingungen, die für den fälligen Zahlungsbetrag gelten (einschließlich Beschreibung möglicher Strafen) übergeben Sie mit “PaymentTermsDescription” Sie koennen/sollten natürlich auch den Termin, zu dem die Zahlung fällig ist, angeben. Eine andere Verwendung ist die Angabe des Skontos. Das muss im folgenden Format geschehen: “#SKONTO#TAGE=14#PROZENT=3.00#” Auch können Sie die Mandatsreferenz für SEPA definieren. ``` Dim PaymentTermsDescription As String = "Zahlbar sofort und ohne Abzug" 'BT-20 Dim DueDate As String = alo.TodayDate.Document_Date 'BT-9 Dim DirectDebitMandateID As String = "" 'BG-19 / BT-89 alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID) ``` Natürlich können Sie die PaymentTerms auch auslesen: ``` If alo.TradePaymentTermsCount > 0 Then For i = 0 To alo.TradePaymentTermsCount Dim index As Long Dim Description As String = "" Dim ActualDiscountAmount As String = "" Dim tCalculationPercent As String = "" Dim ttDirectDebitMandateID As String = "" Dim tDueDate As String = "" Dim BasisDateTime As String = "" Call alo.TradePaymentTerm(index, Description, ActualDiscountAmount, tCalculationPercent, ttDirectDebitMandateID, BasisDateTime, tDueDate) Next i End If ``` --- ## Kostenstelle / Buchungsreferenz URL: https://www.zugferdpro.com/kostenstelle-buchungsreferenz/ Date: 2021-04-22 Business terms: BT-19 SDK methods: AddReceivableSpecifiedTradeAccountingAccount Die Kostenstelle ist der Textwert, der angibt, an welcher Stelle die betreffenden Daten in den Finanzkonten des Käufers zu verbuchen sind: ``` Dim BookingReference As String = "Buchungsreferenz" 'BT-19 Dim BookingReferenceTypeocde As String = "" alo.AddReceivableSpecifiedTradeAccountingAccount(BookingReference, BookingReferenceTypeocde) ``` --- ## Liefer- und Leistungstermin URL: https://www.zugferdpro.com/liefer-und-leistungstermin/ Date: 2021-04-22 Business terms: BT-72 In Deutschland muss grundsätzlich der Liefer- und Leistungstermin in Rechnungen angegeben werden. Eine Ausnahme bilden Vorauszahlungsrechnungen (ExchangedDocument\TypeCode = 386), bei denen zum Zeitpunkt der Rechnungsstellung das Liefer- oder Leistungsdatum noch nicht fest steht. Dim Docdate As Aloaha_ZUGFeRD.iXML.DocumentDateDocdate.Document_Date = “20120608” ‘BT-72Docdate.Document_DateFormat = “102” ‘BT-72-0alo.ActualDeliveryDate = Docdate Achtung- fehlt diese Angabe kann es zu folgendem Fehler kommen: [VD-Valitool-108]-Nach dem deutschen UStG §14 ist die Angabe des Zeitpunkts der Lieferung oder sonstigen Leistung eine Pflichtangabe. Die Angabe fehlt in der XML-Datei. Bitte prüfen Sie, ob Sie diese Angabe in Ihrer Geschäftsbeziehung machen müssen./rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString --- ## Bestellnummer URL: https://www.zugferdpro.com/bestellnummer/ Date: 2021-02-22 Business terms: BT-13 SDK methods: AddBuyerAssignedID Definieren Sie die vom Käufer ausgegebene Kennung für eine referenzierte Bestellung: ``` alo.AddBuyerAssignedID(“Bestellnummer”, “20130608”, “102”) ``` Datum und Datumsformat sind optional und werden von einigen Validatoren bemängelt. Sie können also auch ganz einfach folgendes benutzen: alo.AddBuyerAssignedID(“Bestellnummer”) --- ## Nummer der Auftragsbestätigung URL: https://www.zugferdpro.com/nummer-der-auftragsbestatigung/ Date: 2021-02-22 Business terms: BT-14 SDK methods: AddSellerAssignedID Die vom Verkäufer ausgegebene Kennung für einen referenzierten Verkaufsauftrag definieren: ``` alo.AddSellerAssignedID(“Auftragsbestaetigung”, “20130608”, “102”) ``` --- ## RoundingAmount BT-114 URL: https://www.zugferdpro.com/roundingamount/ Date: 2021-02-14 Business terms: BT-114 In some European countries the calculated invoice total amount is rounded to 5 cents. The resulting difference of the amount can be depicted in the element RoundingAmount by the different receipt totals. The rounding rules of the particular country have to be respected since those rules are not consistent in Europe. With the Aloaha Toolkit you find the RoundingAmount in the function [WriteTotals](https://www.zugferdpro.com/writetotals/)as optional parameter. --- ## Beginn und Ende der Rechnungsperiode URL: https://www.zugferdpro.com/beginn-und-ende-der-rechnungsperiode/ Date: 2021-01-22 Business terms: BG-14, BT-134, BT-135, BT-73, BT-74 Wird der Liefer- oder Rechnungszeitraum (BG-14) verwendet, muss das Anfangsdatum des Lieferzeitraums (BT-73) oder das Enddatum des Lieferzeitraums (BT-74) oder beides angegeben werden: Dim StartDate As String = “20120108” ‘BT-73Dim EndDate As String = “20120708” ‘BT-74alo.WriteBillingPeriod(StartDate, EndDate, “102”) Ab Version 8.0.0.35 ist es auch möglich die Rechnungsperiode pro Posten zu definieren: Dim Position as integer=0 Position = alo.AddProduct_Comfort(“1”, “nicht rabattierfähig”, “TB100A4”, “20.0000”, “H87”, “Trennblätter “, “A4”, “9.9”, Currenty, “”, “”, False, “”, “”, “”, “9,9”, “eur”, “”, “”, “vat”, “s”, “19.00”, “”, “198.00”, “EUR”, “globalid”, “0160”) Dim ItemStartDate As String = “20120108” BT-134Dim ItemEndDate As String = “20120708” BT-135alo.ItemWriteBillingPeriod(position, ItemStartDate, ItemEndDate, “102”) ``` ``` --- ## Lieferavis URL: https://www.zugferdpro.com/lieferavis/ Date: 2021-01-22 Business terms: BT-16 SDK methods: SetDespatchAdviceReferencedDocument Die Kennung für ein referenziertes Lieferavis definieren Sie so: ``` alo.SetDespatchAdviceReferencedDocument(“Lieferavisreferenz”, “20170608”, “102”) ``` --- ## Umsatzsteuer / VAT URL: https://www.zugferdpro.com/umsatzsteuer-vat/ Date: 2021-01-22 Business terms: BT-116, BT-118, BT-121, BT-7, BT-8, BT-117, BT-119, BT-120 SDK methods: AddTradeTax, VatCategoryCode Sie müssen natürlich in einer Rechnung die Umsatzsteuer / VAT ausweisen. Es ist wichtig das Sie den Befehl AddTradeTax pro benutztem CategoryCode einmal aufrufen. ``` Dim CalculatedAmount As String = "37.62" 'BT-117 Dim BasisAmount As String = "198.00" 'BT-116 Dim TaxTypeCode As String = "VAT" 'BT-118-0 Dim CategoryCode As String = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate) 'BT-118 Dim ApplicablePercent As String = "19" 'BT-119 Dim TaxPointDate As String = "20210608" 'BT-7 Dim DueDateTypeCode As String = "" 'BT-8 Dim ExemptionReason As String = "" 'BT-120 alo.AddTradeTax(CalculatedAmount, Currenty, BasisAmount, Currency, TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "", DueDateTypeCode) ``` Folgende CategoryCode’s werden am häufigsten benutzt: S = Standard E = Exempt from Tax O = Outside Scope of Tax AE = Reverse Charge Z = Zero Rated Goods K = Intra Community Supply (steuerfreie innergemeinschaftliche Lieferung) G = Free Export Item L = Canary Islands M = Ceuta Melilla ``` ``` --- ## LeitwegID und Kundennummer/Referenz des Käufers URL: https://www.zugferdpro.com/leitwegid-und-kundennummer/ Date: 2020-12-14 Business terms: BT-10 SDK methods: BuyerReference, LeitwegID, WriteBuyer Im Profil XRechnung gibt es immer wieder die Frage wohin die LeitwegID (BT-10) geschrieben werden muss. Diese gehört in: ZUGFeRDData.Buyer.BuyerReference Um es etwas einfacher für den Kunden zu machen haben wir nun (8.0.0.12) ein Property LeitwegID eingeführt. Die LeitwegID wurde immer wieder mit der Kundennummer (ZUGFeRDData.Buyer.ID) verwechselt. Deshalb haben wir nun (8.0.0.12) ein dediziertes Property Kundennummer eingeführt. Bitte beachten bei Profil XRechnung:  Damit eine XRechnung korrekt vom Rechnungssteller an den Rechnungsempfänger zugestellt werden kann, muss der Rechnungsempfänger eindeutig identifiziert werden. Die Leitweg-ID dient zur eindeutigen Identifikation des Rechnungsempfängers. In der XRechnung muss die Leitweg-ID in der Buyer Reference (BT-10 / alo.BuyerReference) angegeben werden. Für die Darstellung der elektronischen Rechnung sind laut dem XRechnung-Standard zwei Syntaxen zulässig: Universal Business Language (UBL) und UN/CEFACT Cross Industry Invoice (CII). ``` Dim LeitWegID As String = "N992-90009-96" 'BT-10 alo.WriteBuyer("Muster GmbH", "49479", "Ibbenbüren", "Musterweg 1", "", "DE", "kundennummer", "DE000000", LeitWegID) alo.LeitwegID = LeitWegID alo.BuyerReference = LeitWegID ``` --- ## Relationship between the different XInvoice/ZUGFeRD Standards URL: https://www.zugferdpro.com/relationship-between-the-different-standards/ Date: 2020-12-12 There are a lot terms and standards around electronic invoices: - ZUGFeRD was developed by a German initiative as a standard for electronic invoices ( https://www.ferd-net.de/ ). - ZUGFeRD 2.1 is identical to the German/ French cooperation Factur-X (ZUGFeRD 2.1 = Factur-X 1.0) ( https://www.ferd-net.de/standards/what-is-factur-x/index.html ). - The standard Factur-X 1.0 (respectively ZUGFeRD 2.1) is conform with the European norm EN 16931. - EN 16931 in turn is based on worldwide UN/CEFACT standard ‘Cross Industry Invoice’ (CII). - XRechnung as another German standard is a subset of EN 16931. It is defined by another party called KoSIT ( https://www.xoev.de/ ). It comes with its own validation rules ( https://www.ferd-net.de/standards/what-is-xrechnung/index.html ). This means that both Factur-X 1.0 (respectively ZUGFeRD 2.1) and XRechnung are conform with EN 16931. This does not automatically result that those invoices are per se identical - To achieve compatibility, ZUGFeRD 2.1.1 introduced a XRechnung reference profile to guarantee compatibility between the two sister formats. --- ## ZUGFeRD / XRechnung / EN 16931-1 / Factur-X / KoSIT URL: https://www.zugferdpro.com/zugferd-xrechnung-en-16931-1/ Date: 2020-12-09 ZUGFeRD 2.1.1 stellt den Standard der hybriden elektronischen Rechnungen dar, das den Vorgaben der europäischen Norm EN 16931-11 entspricht. Inhaltlich und strukturell ist ZUGFeRD 2.1.1 identisch mit dem französischen Hybrdformat Factur-X in Version 1.0.05. Factur-X ist jetzt der Hauptbezeichner. Das französische FACTUR-X wird von dem französischen „Forum National de la Facture Electronique et des Marchés Publics Electroniques“ (FNFE-MPE) entwickelt, ZUGFeRD von dem deutschen „Forum elektronische Rechnung Deutschland“ (FeRD). Beide Foren kooperieren seit vielen Jahren miteinander, um ein gemeinsames Rechnungsformat für den deutschen und französischen Markt zu entwickeln. Dieses kombiniert das XML-Schema aus dem bestehenden Standard Cross Industry Invoice (CII) von UN/CEFACT und dem ISO Standard PDF/A-3 zu einem hybriden Rechnungsformat. Die beiden Profile MINIMUM und BASIC WL werden aus Gründen der Übereinstimmung beider Standards auch im ZUGFeRD 2.1.1 Standard beibehalten, obgleich sie in Deutschland nicht den Anforderungen des UStG enstprechen. Sie können jedoch für Unternehmen eine wertvolle Buchungshilfe darstellen – ganz im ursprünglichen Sinne der Entwickler des ZUGFeRD-Formats, die ja insbesondere die Buchungspraxis von Einzelunternehmern und Kleinunternehmen im Blick hatten. Factur-X / ZUGFeRD 2.1.1 besteht aus sechs Profilen bestehen, statt aus den bislang originären fünf: EXTENDED, EN 16931 (COMFORT), BASIC, BASIC WL, MINIMUM, nun erweitert um das Referenzprofil XRECHNUNG. Im Gegensatz zu den fünf Kernprofilen obliegt bei XRECHNUNG die Pflege und Weiterentwicklun des Profils direkt der KoSIT (Koordinierungsstelle für IT-Standards). Um im SDK das Profil EN 16931 (COMFORT) zu aktivieren rufen Sie bitte folgendes auf: alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice Wenn Sie zusätzlich das Profil KoSIT benötigen setzen Sie bitte folgenden Parameter: alo.isKosit=true Obiges is gültig ab Version 8.0.0.11 --- ## ContractReferencedDocument / Vertragsreferenz URL: https://www.zugferdpro.com/contractreferenceddocument/ Date: 2020-12-05 Business terms: BT-12 SDK methods: AddContractReferencedDocument From Version 8.0.0.10 you can add a ContractReferencedDocument (BT-12) with the simple command: ``` alo.AddContractReferencedDocument(Vertragsreferenz, Vertragsdatum, DocumentDateFormat) ``` You can read it with: GetContractReferencedDocument ContractReferencedDocument ist die Vertragsreferenz/Vertragsnummer und sollte im Kontext der spezifischen Handelsbeziehung und für einen definierten Zeitraum einmalig vergeben sein. --- ## IssuerAssignedID / Verkaufsauftragsreferenz / Bestellreferenz URL: https://www.zugferdpro.com/issuerassignedid-verkaufsauftragsreferenz-bestellreferenz/ Date: 2020-12-05 Business terms: BT-13, BT-14 SDK methods: AddBuyerAssignedID, AddSellerAssignedID Ab der Version 8.0.0.10 gibt es direkte Funktionen um Verkaufsauftragsreferenz (BT-14) und Bestellreferenz (BT-13) zu schreiben. ``` alo.AddBuyerAssignedID(Bestellreferenz) ``` und ``` alo.AddSellerAssignedID(Verkaufsauftragsreferenz) ``` --- ## SpecifiedProcuringProject / Detailangaben zu einer Projektreferenz URL: https://www.zugferdpro.com/specifiedprocuringproject/ Date: 2020-12-05 Business terms: BT-11 SDK methods: AddSpecifiedProcuringProject From Version 8.0.0.10 you can add a SpecifiedProcuringProject (BT-11) with the simple command: ``` alo.AddSpecifiedProcuringProject(Projektreferenz, Projektname) ``` To read the values please refer to GetSpecifiedProcuringProject --- ## Syntaxen UBL und UN/CEFACT (ZUGFeRD) URL: https://www.zugferdpro.com/syntaxen-ubl-und-un-cefact/ Date: 2020-12-05 Mit der EU-Richtlinie 2014/55/EU ist die öffentliche Verwaltung gefordert, auf die darin beschriebenen Anforderungen zu reagieren. Sie muss sich in die Lage versetzen, elektronische Rechnungen als strukturierte Daten, die dem verabschiedeten semantischen Datenmodell der EN 16931 bzw. der darauf basierenden nationalen Ausgestaltung entsprechen, mindestens im oberschwelligen Bereich in den Syntaxen UBL und UN/CEFACT anzunehmen und zu verarbeiten. In EN 16931-2 Electronic invoicing – Part 2: List of syntaxes that comply with EN 16931-1 werden die Syntaxen beschrieben, die zur Abbildung einer elektronischen Rechnung verwendet werden können. Dies sind ISO/IEC 19845 Information technology — Universal business language version 2.1 (UBL) und UN/CEFACT Cross Industry Invoice in XML Schemas 16B (CII). Rechnungssteller können sich für eine der beiden zugelassenen Syntaxen entscheiden. Rechnungsempfänger müssen hingegen in der Lage sein, beide zugelassenen Syntaxen zu empfangen. Im Rahmen der Konzipierung einer geeigneten Infrastruktur zum Empfang von elektronischen Rechnungen entsteht die Frage des Umgangs mit den beiden gem. EN 16931-2 zu akzeptierenden Syntaxen. Hier kann eine Transformation in eine der beiden Syntaxen sinnvoll sein, dabei ist zu beachten, dass bei einem Syntaxmapping so genannte Mismatches auftreten können. --- ## UnitCodes für die Menge in ZUGFeRD / XRechnung / XInvoice URL: https://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/ Date: 2020-11-28 Für alle öffentlichen Auftragnehmer war der 27. November 2020 eine wichtigste Deadline, denn bis dahin konnten sie ihre Rechnungen freiwillig elektronisch einreichen, danach wurde es Pflicht. Nun gibt es die ersten Fälle in denen Rechnungen abgelehnt werden. Die häufigste Ursache ist ein falscher “unitCode” für die Menge. Zum Beispiel sehen wir oft den Code “Stck“. Das ist jedoch falsch. Der korrekte Code ist “C62“ Die für die in Rechnung gestellte Menge geltende Maßeinheit. Die Maßeinheit muss unter Anwendung der in UN/ECE Rec No 20 Intro 2.a) beschriebenen Methode aus den Listen UN/ECE Recommendation No. 20 „Codes for Units of Measure Used in International Trade“ und UN/ECE Recommendation No 21 „Codes for Passengers, Types of Cargo, Packages and Packaging Materials (with Complementary Codes for Package Names)“ ausgewählt werden. In den meisten Fällen ist es nicht erforderlich, dass Verkäufer und Erwerber diese Listen vollständig in ihren Anwendungen implementieren. Verkäufer müssen nur die erforderlichen Einheiten für ihre Güter und Dienstleistungen unterstützen. Erwerber überprüfen lediglich, ob die in der Rechnung verwendeten Einheiten mit denen in anderen Dokumenten zum Erwerb (wie z. B. Vertrag, Katalog, Bestellung oder Lieferschein) identisch sind. Die komplette Liste finden Sie hier: [rec20_Rev15e-2020](https://www.zugferdpro.com/wp-content/uploads/2020/11/rec20_Rev15e-2020.zip)[Download](https://www.zugferdpro.com/wp-content/uploads/2020/11/rec20_Rev15e-2020.zip) Eine übersichtliche Kurzform der Liste finden Sie hier: [Das-ZUGFeRD-Format_1p0_c1p0_Codelisten](https://www.zugferdpro.com/wp-content/uploads/2020/11/Das-ZUGFeRD-Format_1p0_c1p0_Codelisten.pdf)[Download](https://www.zugferdpro.com/wp-content/uploads/2020/11/Das-ZUGFeRD-Format_1p0_c1p0_Codelisten.pdf) --- ## 64 Bit Performance of SaveXML Function URL: https://www.zugferdpro.com/64bit-performance/ Date: 2020-11-20 It is a well-documented fact that the System.Xml.dll assembly experiences significant performance issues when running in 64-bit mode. This is primarily caused by Microsoft’s JIT (Just-In-Time) compiler, as explained by Microsoft in the following comments: “The root of the problem is related to two things: First, the x64 JIT compiler has a few algorithms that are quadratically scaling. One of them is the debug info generator, unfortunately. So for very large methods, it really gets out of control.” and “some algorithms in the 64 Bit JIT that have polynomial scaling. We’re actually working on porting the 32 bit JIT compiler to x64, but that won’t see the light of day until the next side-by-side release of the runtime (as in “2.0 & 4.0 run side-by-side, but 3.0/3.5/3.5SP1 were ‘in-place’ releases). I’ve switched this over to a ‘suggestion’ so I can keep it attached to the JIT-throughput work item to make sure this is fixed when the newly ported JIT is ready to ship.” If you are running your project as a 64-bit application and encounter this issue, there are several workarounds to address it: - Run your application as a 32-bit application The JIT compiler’s performance issues are specific to the 64-bit environment. By running your application in 32-bit mode, you can avoid these problems entirely. - Generate native images of your application’s assemblies This approach is simple and highly effective. Use the Ngen.exe (Native Image Generator) tool to pre-compile your assemblies into native machine code. This can boost the performance of your 64-bit application by up to 100 times. To do this, execute the following command: ngen install --- ## Leistungsprobleme der SaveXML-Funktion im 64-Bit-Modus URL: https://www.zugferdpro.com/leistungsprobleme-der-savexml-funktion-im-64-bit-modus/ Date: 2020-11-20 Es ist eine gut dokumentierte Tatsache, dass die System.Xml.dll-Assembly erhebliche Leistungsprobleme beim Ausführen im 64-Bit-Modus aufweist. Dies wird hauptsächlich durch den JIT-Compiler (Just-In-Time) von Microsoft verursacht, wie Microsoft in den folgenden Kommentaren erläutert: “Die Ursache des Problems hängt mit zwei Dingen zusammen: Erstens hat der x64-JIT-Compiler einige Algorithmen, die quadratisch skalieren. Einer davon ist leider der Debug-Info-Generator. Bei sehr großen Methoden gerät dieser wirklich außer Kontrolle.” und “Einige Algorithmen im 64-Bit-JIT haben eine polynomiale Skalierung. Wir arbeiten tatsächlich daran, den 32-Bit-JIT-Compiler auf x64 zu portieren, aber das wird erst bei der nächsten Side-by-Side-Veröffentlichung der Runtime verfügbar sein (wie ‘2.0 & 4.0 laufen Side-by-Side,’ aber 3.0/3.5/3.5SP1 waren ‘in-place’-Veröffentlichungen). Ich habe dies in einen ‘Vorschlag’ umgewandelt, damit ich es an das JIT-Throughput-Arbeitselement anhängen kann, um sicherzustellen, dass dies behoben wird, wenn der neu portierte JIT fertig zum Ausliefern ist.” Wenn Sie Ihr Projekt als 64-Bit-Anwendung ausführen und auf dieses Problem stoßen, gibt es mehrere Workarounds, um es zu beheben: - Führen Sie Ihre Anwendung als 32-Bit-Anwendung aus Die Leistungsprobleme des JIT-Compilers treten ausschließlich in der 64-Bit-Umgebung auf. Durch das Ausführen Ihrer Anwendung im 32-Bit-Modus können Sie diese Probleme vollständig vermeiden. - Erstellen Sie native Images für die Assemblies Ihrer Anwendung Dieser Ansatz ist einfach und äußerst effektiv. Verwenden Sie das Tool Ngen.exe (Native Image Generator), um Ihre Assemblies vorab in nativen Maschinencode zu kompilieren. Dies kann die Leistung Ihrer 64-Bit-Anwendung um bis zu das 100-Fache steigern. Führen Sie dazu den folgenden Befehl aus: ngen install --- ## Elektronische Rechnungsstellung ab November 2020 für öffentliche Aufträge verpflichtend URL: https://www.zugferdpro.com/elektronische-rechnungsstellung-ab-november-2020-fur-offentliche-auftrage-verpflichtend/ Date: 2020-09-02 Für alle öffentlichen Auftragnehmer ist der 27. November 2020 eine wichtigste Deadline, denn bis dahin können sie ihre Rechnungen freiwillig elektronisch einreichen, danach wird es Pflicht. Dies betrifft deutsche Unternehmen genauso wie österreichische, sofern sie mit deutschen Behörden in Geschäftsbeziehung stehen. Ausnahmen gibt es beispielsweise nur für Direktgeschäfte, wenn sie den Wert von 1000 Euro (exkl. USt) nicht übersteigen. Rechtlich zulässig sind nur zwei e-Rechnungs-Standards: das [XRechnungs](https://www.zugferdpro.com/zugferd-1-zugferd-2-and-factur-x/)-Format, das zur Gänze aus strukturierten Daten besteht, und das hybride ZuGFeRD 2.0., das in der Praxis vorgezogen wird. Eine reine PDF-Rechnung, die keine strukturierten Daten enthält, oder eine eingescannte Papierrechnung werden nach dem Stichtag 27. November 2020 nicht mehr akzeptiert. Das neue Aloaha [ZUGFeRD SDK 8.0](https://www.zugferdpro.com/tooldownloads/) unterstützt den ZUGFeRD Standard 2.1.1. ZUGFeRD 2.1.1 stellt den Standard der hybriden elektronischen Rechnungen dar, das den Vorgaben der europäischen Norm EN 16931-1 entspricht. Inhaltlich und strukturell ist ZUGFeRD 2.1.1 identisch mit dem französischen Hybrdformat Factur-X in Version 1.0.05. Factur-X ist jetzt der Hauptbezeichner. Kunden mit gültigem Wartunsvertrag können kostenlos auf das neue Aloaha ZUGFeRD upgraden. Bei Fragen zögern Sie bitte nicht uns zu kontaktieren. --- ## What is Factur-X? URL: https://www.zugferdpro.com/what-is-factur-x/ Date: 2020-08-31 Factur-X is the french name for the german-french e-invoice standard of hybrid electronic invoicing, which is currently freely available in version 1.0. The current and complete version of Factur-X in France is version EN 16931 (COMFORT). This is equivalent to the specifications of ZUGFeRD 2.1 and includes the requirements of CIUS X invoice 1.2 compatible with the German authorities and [Chorus Pro](https://chorus-pro.gouv.fr/cpp/utilisateur?execution=e2s1)in France. Together with France, Germany has developed the hybrid format ZUGFeRD 2.0 / Factur-X to make electronic data exchange accessible to all companies, regardless of their size or potential resources. This standard combines the two most widely used invoice formats: XML & PDF. Through the detailed view of information & the structured form of the invoice format, Factur-X creates added value for suppliers and invoice issuers. The French National Forum for e-invoicing and public procurement (FNFE-MPE) is constantly working to improve and maintain this invoicing standard. Fatura PA (IT) , Facture X (FR), XRechnung and ZUGFeRD 2.0 (DE) – are the four names of national invoice formats that differ in details but are based on the European standard EN16931. The latter in turn provides for the XML standards UBL and UN/CEFACT Cross Industry Invoice (CII) for the creation of structured invoices. --- ## Welchen ZUGFeRD / XInvoice Standard? URL: https://www.zugferdpro.com/welchen-zugferd-xinvoice-standard/ Date: 2020-08-29 Mit dem SDK lassen sich ZUGFeRD 1 und 2 (XRechnung EN 16931) XML Dateien erstellen. Dazu müssen Sie bei der Erstellung der Klasse und/oder beim Speichern des XMLs den Parameter iXML.ZUGFeRDVersion übergeben. Sie können jederzeit mit dem Paramter ZUGfeRDStandard zwischen den Standards wechseln: alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice Beim Auslesen von ZUGFeRD Rechnung brauchen Sie nichts zu machen da das Format automatisch erkkannt wird. Sollten Sie zusätzlich das KoSIT Profile benötigen setzen Sie bitte alo.isKosit=true ### Beachten Sie: Ab dem 27. November 2020 wird der Bund nur noch elektronische Rechnungen annehmen, 2021 folgen die Bundesländer und weitere öffentlicher Auftraggeber. --- ## Noteworthy differences between ZUGFeRD 2.0 and 2.1 URL: https://www.zugferdpro.com/noteworthy-differences-between-zugferd-2-0-and-2-1/ Date: 2020-07-15 ZUGFeRD 2.1 resolves differences between ZUGFeRD 2.0 and Factur-X on the one hand and between ZUGFeRD 2.0 and the German XRechnung profile used in the public administration on the other hand. ZUGFeRD 2.1 and Factur-X 1.0.05 are technically identical, in particular: - ZUGFeRD 2.1 switches from the »zf« XML namespace prefix to »fx«. - ZUGFeRD 2.1 changes the name of the embedded XML from »zugferd-invoice.xml« to »factur-x.xml« - ZUGFeRD 2.1 switches the internal version number in the XMP namespace URI from »2p0« to the Factur-X version number »1p0« where »p« is used in place of a decimal point. Kindly note that the above is purely informative as the SDK takes care of the points above already. --- ## CreditorReferenceID URL: https://www.zugferdpro.com/creditorreferenceid/ Date: 2020-07-12 Business terms: BG-19, BT-90, BT-91 SDK methods: CreditorReferenceID Wenn der Verkäufer weder eine Umsatzsteuer- noch eine Steuernummer besitzt oder diese nicht erforderlich sind, muss dennoch eine eindeutige Gläubiger-Identifikationsnummer angegeben werden. Dies kann ganz einfach durch Folgendes erfolgen: ``` alo.CreditorReferenceID = "DExyz" 'BG19 / BT-90 ``` Ansonsten kommt es zu folgenden Fehlermeldungen: val-sch.2.7          BR-DE-30             error      [BR-DE-30] Wenn “DIRECT DEBIT” BG-19 vorhanden ist, dann muss “Bank assigned creditor identifier” BT-90 übermittelt werden. val-sch.2.8          BR-DE-31             error      [BR-DE-31] Wenn “DIRECT DEBIT” BG-19 vorhanden ist, dann muss “Debited account identifier” BT-91 übermittelt werden. --- ## XRechnung: Standard format for German authorities from 2020 URL: https://www.zugferdpro.com/xrechnung-standard-format-for-german-authorities-from-2020/ Date: 2020-07-02 As of 18 April 2020, public authorities at state level, as well as states and local authorities, must be able to receive electronic invoices in [XRechnung](https://www.zugferdpro.com/x-rechnung-konnte-europaischer-standard-werden/) format (ZUGFeRD 2.1). From 27 November 2020, public authority contractors must also be able to send electronic invoices. XRechnung (ZUGFeRD 2.1) affects all public institutions and authorities. It does not matter whether the contractor is from Germany or another EU country. All invoices to the authorities must be issued in XRechnung format. Since EU Directive 2014/55/EU, public authorities in Europe are therefore obliged to be able to receive and process electronic invoices. In the course of this, a standard ([EN 16931](https://standards.cen.eu/dyn/www/f?p=204:110:0::::FSP_PROJECT,FSP_ORG_ID:60602,1883209&cs=104E4C4FA3744A8DEA8E98A7B500306FD)) has been developed which specifies which elements an e-invoice must always contain as standard. XRechnung is an XML file that fully complies with the XML schema specifications of the European standard EN 16931 and must therefore be used. The intended XML schemas to be used are UBL and CII, i.e. Universal Business Language and UN/CEFACT Cross Industry Invoice. Only these two syntaxes are permitted and the Xinvoice must be transmitted in one of these two syntaxes and is only valid in this case. ### XRechnung vs. ZUGFeRD The so-called ZUGFeRD format is already very often used for electronic invoicing. ZUGFeRD stands for Central User Guide of the Forum elektronische Rechnung Deutschland. ZUGFeRD 2.0 was released in March 2019 (version 1.0 has been available since 2014). ZUGFeRD 2.1.1 (XRechnung compliant) was released on the 1st July 2020 ZUGFeRD 1.0 and ZUGFeRD 2.1.1 are supported by the [Aloaha ZUGFeRD SDK and tools.](https://www.zugferdpro.com/) --- ## ZUGFeRD 1, ZUGFeRD 2 and Factur-X URL: https://www.zugferdpro.com/zugferd-1-zugferd-2-and-factur-x/ Date: 2020-06-30 The ZUGFeRD 1.0 specification has been published in June 2014. Aloaha was once of the first software vendors implementing this specification. ZUGFeRD 2.0 has been published in March 2019. It is based on European Norm EN 16931 from June 2017, conforms to the XRechnung standard and is mostly compatible with the corresponding French standard Factur-X. ZUGFeRD 2.1 has been published in March 2020. It makes the standard fully compatible with Factur-X 1.0.05. ZUGFeRD 1 und 2 apply the same principles regarding embedding in PDF/A. Minor differences between the versions are mentioned in the description below. ZUGFeRD 2.0 and Factur-X are based on UN/CEFACT Cross Industry Invoice Stand D16B version 100, uncoupled set of schemas (CII). Since ZUGFeRD 1.0 uses a custom XML flavor, the invoice XML slightly differs between both versions. For example, the root element in ZUGFeRD 1.0 is CrossIndustryDocument, but CrossIndustryInvoice in ZUGFeRD 2.0/Factur-X. ZUGFeRD 1.0 and 2.x/Factur-X support multiple application profiles: - ZUGFeRD 2.x only: the »Minimum« and »Basic WL« profiles have been included in ZUGFeRD 2.x for compatibility with the French standard Factur-X. They don’t contain all invoicing information required in Germany and should therefore not be used in Germany. - The »Basic« profile carries structured data for simple invoices. Additional information can be included as free text. It covers only a subset of EN 16931-1 and is suitable for simple invoices. - The »Comfort« profile adds structured data for fully automated invoice processing. It completely covers EN 16931-1. - The »Extended« profile adds still more structured data for exchanging invoice across different industry segments. - At a minimum, applications must support the »Basic« profile, but they may add more CII elements provided these don’t interfere with the »Extended« profile. Since additional elements are outside the scope of ZUGFeRD they require prior arrangements between the exchanging parties. Fatura PA (IT) , Facture X (FR), XRechnung and ZUGFeRD 2.0 (DE) – are the four names of national invoice formats that differ in details but are based on the European standard EN16931. The latter in turn provides for the XML standards UBL and UN/CEFACT Cross Industry Invoice (CII) for the creation of structured invoices. --- ## ZUGFeRD 2.1 (XRechnung) soll „Formatwildwuchs“ beenden URL: https://www.zugferdpro.com/zugferd-2-1-xrechnung-soll-formatwildwuchs-beenden/ Date: 2020-05-01 National und international werden bereits viele Formate für elektronische Rechnungen genutzt. Problem ist, dass es noch keine allgemeinverbindliche Norm gibt, die von allen genutzt werden kann. Deutschland und Frankreich haben aber seit März 2020 den gemeinsamen E-Rechnungsstandard XRechnung. ### Standard XRechnung: Impulsgeber ZUGFeRD ZUGFeRD (Zentraler User Guide des Forums elektronische Rechnung Deutschland) 2.0 bzw. die aktuelle Version 2.1 erfüllen alle Anforderungen der EU-Richtlinie 2014/55/EU an die XRechnung und können für die Rechnungsstellung mit Behörden, national und international, genutzt werden. Das ZUGFeRD-Format basiert auf dem durch das vom internationalen Normungsgremium (UN/CEFACT) entwickelten Standard „Cross Industry Invoice“ (CII) und dem „Message User Guides“ (MUG) des CEN. Damit ist die Voraussetzung für die Etablierung von ZUGFeRD als einheitliches europäisches Format schon heute gegeben. Das bisher vorherrschende deutsche E-Rechnungsformat ZUGFeRD 1.0 wurde zur Version ZUGFeRD 2.1 weiterentwickelt und entspricht der europäischen Norm EN16931 zur elektronischen Rechnungsstellung. Damit erfüllt ZUGFeRD 2.1 alle Anforderungen der EU-Richtlinie 2014/55/EU an die XRechnung und kann für die Rechnungsstellung mit Behörden, national und international, genutzt werden. Auch ZUGFeRD nutzt das PDF-Format, allerdings basiert es auf PDF/A-3 und bietet die Möglichkeit, eine XRechnung in PDF einzubetten. Damit werden sowohl strukturierte Datensätze (X- bzw. XML-Format) als auch das Rechnungsbild (PDF) gleichzeitig per Mail übermittelt. Optisch ist die Rechnung mit eingebundenen Datensätzen nicht von einer normalen PDF-Rechnung zu unterscheiden. ### XRechnung vs ZUGFeRD: verschiedene Begriffe, gleiche Bedeutung International sind die Begriffe ZUGFeRD 2.1 bzw. XRechnung wenig bekannt, hier wird meist der Begriff „Factur X“ verwendet. Es kann sein, dass sich diese Bezeichnung auch in Deutschland etablieren wird. --- ## Kennung des Gläubigers / CreditorReferenceID URL: https://www.zugferdpro.com/kennung-des-glaubigers-creditorreferenceid/ Date: 2020-04-20 Business terms: BG-19, BT-90 Einige Rechnungsempfänger erwarten eine eindeutige Bankverbindungskennung des Zahlungsempfängers oder des Verkäufers, die von der Bank des Zahlungsempfängers oder des Verkäufers zugewiesen wird. Diese wird im Feld CreditorReferenceID zugewiesen. (BG-19 / BT-90). Dazu verwenden Sie bitte die Eigenschaft “CreditorReferenceID” des Aloaha ZUGFeRD Objektes. --- ## Umsatzsteuer-ID / Steuerunmmer URL: https://www.zugferdpro.com/umsatzsteuer-id-steuerunmmer/ Date: 2020-04-20 Business terms: BT-31, BT-32 SDK methods: AddBuyerTAX, AddSellerTAX Ein häufiger Fehler weshalb eine Rechnung abgewiesen wird ist die fehlende Umsatzsteuer-ID (BT-31) bzw. die fehlende Steuernummer (BT-32) Diese können Sie ganz einfach für den Käufer bzw. den Verkauefer setzen: ``` AddBuyerTAX(TAXNumber,TAXType) AddSellerTAX(TAXNumber, TAXType) ``` Wobei TaxType bei Umsatzsteuer-ID der Wert “VA” ist. --- ## X-Rechnung könnte europäischer Standard werden URL: https://www.zugferdpro.com/x-rechnung-konnte-europaischer-standard-werden/ Date: 2020-03-31 ### Generisches PDF-Dokument gilt nicht als korrekte elektronische Rechnung Wer glaubt, dass das Thema nur öffentliche Verwaltungen und Behörden betrifft, irrt. Denn Unternehmen, die künftig Rechnungen an Behörden in Deutschland oder Europa stellen, müssen in der Lage sein, korrekte elektronische Rechnungen zu erstellen und weiterzuleiten. Aktuell hat sich das klassische PDF-Format als „Quasi-Standard“ für elektronische Rechnungen durchgesetzt. Ein klassisches PDF-Dokument, wie es heute regelmäßig von den meisten Unternehmen verwendet wird, ist im Sinne der Behörden keine korrekte elektronische Rechnung, da das Dokument nicht automatisch in elektronischer Form weiterverarbeitet werden kann. Heute ist es häufig noch so, dass eine PDF-Rechnung, die in einem Unternehmen ankommt, erfasst, ausgedruckt, gescannt und dann gegebenenfalls weiter manuell verarbeitet wird. Beispielsweise wird die Rechnung oft noch manuell zur Prüfung an den Verantwortlichen für etwa eine Bestellung gesendet. Dadurch steigt der Arbeitsaufwand und durch die Medienbrüche von elektronischer zu manueller Arbeit kann es zu Fehlern kommen. Als richtige elektronische Rechnung gilt künftig nur noch die sog. XRechnung (ZUGFeRD 2), die die Möglichkeit des Austauschs eines strukturierten Datensatzes bietet. Damit lassen sich alle relevanten Rechnungsdaten automatisch, d.h. durch EDV ohne weitere manuelle Eingriffe, weiter verarbeiten und es können bei Bedarf auch weitere Unterlagen eingeunden werden. ### XRechnung wird Pflicht: Fristen, zeitlicher Ablauf sowie betroffene Behörden und Unternehmen Die Regelungen zur XRechnung gelten zunächst ausdrücklich nur für den Rechnungsversand bzw. -austausch mit Bundesbehörden. Diese müssen seit dem 27.11.2018 in der Lage sein, elektronische Rechnungen zu empfangen und zu verarbeiten. Alle anderen Bundesbehörden müssen ab dem 27.11.2019 elektronische Rechnungen empfangen können. Die restlichen Behörden und Länder folgen dann bis April 2020. Unternehmer müssen derzeit Rechnungen ab 1.000 EUR elektronisch übermitteln. Für Unternehmer gilt: Eine grundsätzliche Verpflichtung für die Versendung elektronischer Rechnungen an Behörden besteht erst ab dem 27.11.2020. Papier- oder reine PDF-Rechnungen werden dann grds. nicht mehr akzeptiert. Bestimmungen und Einzelheiten hierzu finden sich in der EU-Richtlinie 2014/55/EU. ### Bestehen Alternativen zur XRechung? Grundsätzlich erfüllt ZUGFeRD 2.1 alle Normen der XRechnung und kann damit auch für die Erstellung echter elektronischer Rechnungen verwendet werden. Experten gehen aber derzeit davon aus, dass dieses Format neben der „reinen“ XRechnung eher eine untergeordnete Rolle spielen wird. Alle öffentlichen Einrichtungen wollen einheitlich den Standard der XRechnung verwenden. ### Regelungen im europäischen Ausland beachten Die XRechnung betrifft nicht nur Unternehmen und Selbstständige in Deutschland. Wer mit dem Ausland kooperiert, muss zum Teil schon jetzt in der Lage sein, elektronische Rechnungen zu versenden oder zu empfangen. Einige Beispiele: In Italien ist es bereits seit Anfang 2017 möglich, Rechnungen über eine zentrale Plattform an den jeweiligen Rechnungsempfänger zu schicken. Seit Januar 2019 sind Unternehmen sogar verpflichtet, Rechnungen elektronisch über das Austauschsystem „Sistema di Interscambio“ (SDI) zu verschicken. Auch in Spanien gibt es zumindest im steuerlichen Bereich schon die Pflicht für Unternehmen, bestimmte steuerlich relevante Daten elektronisch zu übermitteln. Auch in Frankreich verlangen Behörden von Firmen mit mehr als zehn Mitarbeitern seit diesem Jahr, dass sie Rechnungen elektronisch versenden. 2020 soll die Pflicht für alle Betriebe gelten. ### Deutschland und Frankreich haben seit März 2020 gemeinsamen E-Rechnungsstandard Und seit Ende März gibt es zwischen Frankreich und Deutschland einen gemeinsamen E-Rechnungsstandard, der den Austausch von elektronischen Rechnungen deutlich vereinfacht. Sie haben aus ZUGFeRD 2.1 und Factur-X1.0 einen gemeinsamen E-Rechnungsstandard definiert. Beide Formate, ZUGFeRD 2.1/Factur-X 1.0, ermöglichen den Austausch elektronischer Rechnungen in Form von strukturierten Daten zwischen Unternehmen und zwischen Unternehmen und Verwaltung. Das hybride elektronische Rechnungsformat besteht aus zwei Komponenten, einer PDF- und einer eingebetteten XML-Datei. Die PDF-Datei ist für Menschen lesbar, die XML-Datei enthält Rechnungsdaten in strukturierter Form und kann automatisch und maschinell ohne manuelle Eingriffe oder Medienbrüche verarbeitet werden. --- ## IBAN oder Kontonummer URL: https://www.zugferdpro.com/iban-oder-kontonummer/ Date: 2020-02-20 Business terms: BG-19, BT-91 SDK methods: AddPaymentMeans Wenn Sie Zahlungen per Überweisung erwarten oder aber Beträge einziehen müssen ist es natürlich wichtig die Kontonummer zu spezifizieren. Das geht mit der Funktion: ``` AddPaymentMeans(Payment_Type, Comment, FinancialAccount_IBANID, Optional  AccountName, Optional FinancialAccount_ProprietaryID, Optional BICID, Optional GermanBankleitzahlI , "", Optional isDirectDebit, Optional DirectDebitID , Optional DirectDebitAgencyID) ``` Bitte achten Sie darauf ob Sie Beträge einziehen oder auf eine Überweisung warten (isDirectDebit) Nehmen Sie bitte auch zur Kenntnis das der Bankname nicht mehr angegeben werden darf. --- ## Elektronische Adresse des Verkäufers oder Käufers, BT-34, BT-49 URL: https://www.zugferdpro.com/seller-sellter-electronic-address-bt-34-bt-49/ Date: 2020-02-14 Business terms: BT-34, BT-49 SDK methods: set_URIUniversalCommunication Der elektronische Adresse des Verkäufers oder Käufers identifiziert die elektronische Adresse des Verkäufers, an die die Antwort auf die Rechnung zugestellt werden kann. Sie muss einen Schema-Identifikator haben. Sie kann mit folgender Funktion festgelegt werden: ``` set_URIUniversalCommunication(URI, schemeID, UseSeller) ``` URI: Die URI der elekronischen Adresse des Käufers bzw. Verkäufers. Zum Beispiel email. schemeID: Schema-Identifikator definiert dem Typ der elektronischen Adresse. Zum Beispiel “EM” für email. Die komplette Code Liste kann von [https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Code+lists](https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Code+lists) geladen werden. Schön übersichtlich auch auf: [https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/](https://docs.peppol.eu/poacc/billing/3.0/codelist/eas/) UseSeller: Wenn true wird die Adresse des Verkäufers gesetzt. Bei false die des Käufers . Achtung: Fehlt dieser Eintrag kann es zur Warnung: PEPPOL-EN16931-R020 – Seller electronic address MUST be provided führen. --- ## DateTimeString URL: https://www.zugferdpro.com/datetimestring/ Date: 2020-01-28 Das korrekte Format für DateTimeString  ist: ``` 20180605 ``` Immer wieder sehen wir es falsch: ``` 11/18/2020 ``` --- ## Mandatsreferenz für SEPA / DirectDebitMandateID URL: https://www.zugferdpro.com/mandatsreferenz-fur-sepa/ Date: 2020-01-20 Business terms: BG-19, BT-89 SDK methods: AddTradePaymentTerms, TodayDate Um den Käufer vorweg über eine SEPA-Lastschrift in Kenntnis zu setzen benötigen Sie eine eindeutige Kennung, die vom Zahlungsempfänger zur Referenz der Einzugsermächtigung zugewiesen wird. Diese Kennung ist die DirectDebitMandateID. Wenn Sie mit der Funktion AddTradePaymentTerms Die Zahlungsbedingen hinzufügen ist der vierte Parameter der Funktion DirectDebitMandateID ``` Dim DirectDebitMandateID As String = ""  'BG-19/ BT-89 alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID) ``` --- ## Umgang mit Skonto URL: https://www.zugferdpro.com/skonto/ Date: 2019-12-05 Business terms: BT-20 Bei Skonto handelt es sich um einen Nachlass aufgrund einer verkürzten Zahlungsfrist. In Deutschland ist die Übermittlung von Skonto-Informationen in vielen Branchen üblich. Das Datenmodell der EN 16931 sieht derzeit keinen entsprechenden Prozess vor und stellt daher keine strukturierten Informationselemente zur Verfügung, um Skonto-Informationen in entsprechender Form abzubilden. Prinzipiell ist im europäischen Datenmodell das Informationselement „Payment terms“ vorhanden, das geeignet ist, unstrukturierte Zahlungsinformationen in Textform aufzunehmen. Dies ermöglicht jedoch keine automatisierte Verarbeitung Bitte lesen Sie unseren aktuellen Beitrag: [Skonto und Verzugszinsen (BT-20)](https://www.zugferdpro.com/skonto-und-verzugszinsen-bt-20/). --- ## GrossPrice vs. NetPrice URL: https://www.zugferdpro.com/grossprice-vs-netprice/ Date: 2019-11-30 Es kommt immer wieder die Frage auf wie sich GrossPrice von NetPrice unterscheiden. NetPrice: Der Preis eines Postens, ohne Umsatzsteuer, nach Abzug des für diese Rechnungsposition geltenden Rabatts.Anmerkung: Item net price muss gleich Item groß price abzüglich Item price discount sein. GrossPrice: Der Postenpreis ohne Umsatzsteuer vor Abzug des Postenpreisrabatts. PriceDicount: Der gesamte zur Berechnung des Netto-Postenpreises vom Brutto-Postenpreis subtrahierte Rabatt.Anmerkung: Nur anzugeben, wenn der Nachlass pro Verpackungseinheit gegeben wird und nicht in den Item groß price inkludiert ist. --- ## XRechnungs-XML direkt in eine Winword-Datei oder ein PDF-Dokument umwandeln URL: https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-oder-ein-pdf-dokument-umwandeln/ Date: 2019-06-11 SDK methods: ConvertDOCX2PDF, CreateDocFromXML, MergeXMLIntoPDF Ein wenig beachtetes Feature des Aloaha ZUGFeRD Toolkits ist die Möglichkeit, ein Winword-DOCX-Template mit Werten aus dem ZUGFeRD-XML zu „befüllen“ und anschließend in ein ZUGFeRD PDF/A umzuwandeln. Dies kann beispielsweise auch interessant sein, wenn man ZUGFeRD/XRechnungs-XML drucken möchte. Bitte beachten Sie, dass Microsoft Word auf derselben Maschine installiert sein muss! Hier in Code Beispiel in VB6, “Late Binding”: ``` Private Sub xml2doc_Click() Dim LicenseKey As String Dim DOCXTemplate As String Dim XMLFile As String Dim OutputDOCX As String Dim OutputPDF As String Dim FinalInvoice As String Dim OptionalAttachment As String LicenseKey = "IHR-LIZENZSCHLUESSEL" XMLFile = "c:\temp\test1.xml" 'Falls DOCXTemplate ein leerer String ist wird das SDK ein template erstellen DOCXTemplate = "c:\temp\Aloaha_ZUGFeRD_Template.docx" OutputDOCX = "c:\temp\docxinvoice.docx" OutputPDF = "c:\temp\pdfinvoice.pdf" FinalInvoice = "c:\temp\xinvoice.pdf" Dim alo As Object Set alo = CreateObject("Aloaha_ZUGFeRD.XML") If alo.CreateDocFromXML(XMLFile, OutputDOCX, DOCXTemplate, LicenseKey, True) = True Then If alo.ConvertDOCX2PDF(OutputDOCX, OutputPDF, True, LicenseKey) = True Then If alo.MergeXMLIntoPDF(XMLFile, OutputPDF, FinalInvoice, True, OptionalAttachment, LicenseKey) = True Then MsgBox ("ok") End If End If End If End Sub ``` Natürlich geht das auch direkt über eine GUI: [https://www.zugferdpro.com/automatische-xml-nach-pdfa-konvertierung/](https://www.zugferdpro.com/automatische-xml-nach-pdfa-konvertierung/) Mehr zu den Platzhaltern auf: [https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/](https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/) ### XRechnungs-XML direkt in eine Winword-Datei umwandeln Ein kaum beachteter Webdienst ermöglicht die direkte Umwandlung einer ZUGFeRD XML-Datei in eine Winword-Datei. Dies ist besonders interessant, wenn man aus der XML-Datei eine druckbare Version erstellen möchte. Zum Testen haben wir diese API öffentlich zugänglich gemacht unter: [https://eforms.aloaha.com/xmluploader.aspx?o=docx](https://eforms.aloaha.com/xmluploader.aspx?o=docx) Mehr auf: [https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) --- ## Das ZUGFeRD kommt nach Frankreich URL: https://www.zugferdpro.com/das-zugferd-kommt-nach-frankreich/ Date: 2016-12-14 Deutschland und Frankreich haben sich dazu bereit erklärt, einen Dialog zu den wichtigsten Herausforderungen zur Zukunft der Industrie zu beginnen und eine Zusammenarbeit zwischen den beiden Plattformen „Plattform Industrie 4.0“ und „Alliance Industrie du Futur“ aufzubauen. Ziel dieser Zusammenarbeit ist die Verbesserung der Position Deutschlands und Frankreichs im produzierenden Gewerbe auf internationaler Ebene. Im Rahmen ihrer bereits bestehenden gemeinsamen Bemühungen zur Entwicklung der elektronischen Rechnungslegung bündeln Deutschland und Frankreich nun ihre Anstrengungen zur Entwicklung einer technischen Norm, die auf dem europäischen Format beruht und insbesondere den Bedürfnissen von KMU Rechnung trägt. Die neue Norm, die beim letzten gemeinsamen Workshop beider Foren, der im November 2016 stattfand, den Namen „Factur-X“ erhielt, beruht auf dem deutschen Format „ZUGFeRD“ sowie den französischen Arbeiten zu hybriden Rechnungen. Durch sie werden alle Unternehmen und die öffentliche Verwaltung elektronische Rechnungen entgegennehmen können, wodurch die Wettbewerbsfähigkeit gestärkt, Zahlungen beschleunigt und die wirtschaftliche und finanzielle Lage von Unternehmen verbessert wird. Mehr dazu hier: [deutsch-franzoesische-digitalkonferenz-erklaerung-de.pdf](https://www.zugferdpro.com/wp-content/uploads/2016/12/deutsch-franzoesische-digitalkonferenz-erklaerung-de.pdf) Natürlich wird auch Aloaha, wie schon bei ZUGFeRD, von Anfang an dabei sein! --- ## Beispiel einer einfachen ZUGFeRD XML Rechnungserstellung URL: https://www.zugferdpro.com/beispiel-einer-einfachen-zugferd-xml-rechnungserstellung/ Date: 2016-09-21 Business terms: BT-80 SDK methods: AddTradePaymentTerms, AddTradeTax, WriteTotals Hier finden Sie ein einfaches Beispiel um eine ZUGFeRD XML Rechnung zu erstellen. Sie benötigen mindestens die Aloaha ZUGFeRD Version 7.1.0.2 Wir haben das Beispiel nochmals [hier](https://www.zugferdpro.com/wp-content/uploads/2016/09/zugferd_sample.txt)als ASCII Datei zum herunterladen: [ZUGFeRD Beispiel](https://www.zugferdpro.com/wp-content/uploads/2016/09/zugferd_sample.txt) Dim alo As Aloaha_ZUGFeRD.XML = Nothing Dim ZUG As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing Dim VerkaeuferName As String = “Aloaha Limited” Dim VerkaeuferPLZ As String = “PBK1131” Dim VerkaeuferOrt As String = “Pembroke” Dim VerkaeuferStrasse As String = “Triq Gio Felice Inglott” Dim VerkaeuferMwST As String = “MT08154711” Dim KaeuferName As String = “Kunden GmbH” Dim KaeuferPLZ As String = “33098” Dim KaeuferOrt As String = “Paderborn” Dim KaeuferStrasse As String = “Karlsstrasse” Dim KaeuferMwST As String = “D47110815” Dim LastAddedTradeItem As Aloaha_ZUGFeRD.iXML.TradeItem = Nothing Dim LastAddedTradeItemID As Integer = 0 Try      ‘Objekt erstellen – Bitte fordern Sie Ihren eigenen Evaluation Key von info@aloaha.com an!      alo = New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.basic, _                                                             True, “IHR-LIZENZSCHLUESSEL”)      ‘Rechnung erstellen      ZUG = alo.CreateInvoice(“HJW-4711”, “Rechnung gemäß Bestellung”, _      alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , , “EUR”)      alo.Document_Name = “Rechnung”      alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice      alo.InvoiceCurrencyCode = “EUR”      ‘ Verkäuferdaten      alo.WriteSeller(VerkaeuferName.TrimEnd, _                               VerkaeuferPLZ.TrimEnd, VerkaeuferOrt.TrimEnd, _                               VerkaeuferStrasse.TrimEnd, “Helgoland”, “MT”, VerkaeuferMwST)      ‘ Käuferdaten      alo.WriteBuyer(KaeuferName.TrimEnd, _                               KaeuferPLZ.TrimEnd, KaeuferOrt.TrimEnd, _                               KaeuferStrasse.TrimEnd, “”, “DE”, “0815”, KaeuferMwST)      ‘ Sollten die Käuferdaten von den Daten des Rechnungsempfängers abweichen können Sie den    Rechnungsempfänger hier definieren      alo.WriteInvoiceeTradeParty(KaeuferName.TrimEnd, KaeuferPLZ.TrimEnd, _                                                   KaeuferOrt.TrimEnd, KaeuferStrasse.TrimEnd, “”, “DE”, “0815”, KaeuferMwST)      ‘ Sollten die Käuferdaten von den Lieferdaten abweichen können Sie die Lieferdaten hier definieren      alo.WriteShipToTradeParty(KaeuferName.TrimEnd, KaeuferPLZ.TrimEnd, _                                                   KaeuferOrt.TrimEnd, KaeuferStrasse.TrimEnd, _                                                   “”, “DE”, “0815”, KaeuferMwST)      alo.AddProduct_Basic(“5”, “H87”, “12345”, “Dielen”)      LastAddedTradeItem = alo.LastAddedTrade_Item      ‘Besser die Preise mit angeben      alo.AddProduct_Basic(“157”, “H87”, “12345”, “Bohlen”, “157”, “1”, “1”) Note: Kindly read: [https://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/](https://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/)      ‘Sie können das Objekt nochmals lesen, editieren und zurückschreiben      LastAddedTradeItem = alo.LastAddedTrade_Item      LastAddedTradeItemID = alo.LastAddedTrade_ItemID      LastAddedTradeItem.TradeSettlement.Monetary_Summation.LineTotalAmount.Amount =               LastAddedTradeItem.TradeAgreement.GrossPriceProductTradePrice.ChargeAmount.Amount      LastAddedTradeItem.TradeSettlement.Monetary_Summation.LineTotalAmount.CurrencyID = LastAddedTradeItem.TradeAgreement.GrossPriceProductTradePrice.ChargeAmount.CurrencyID      alo.ChangeTradeItem(LastAddedTradeItemID) = LastAddedTradeItem ``` alo.AddTradePaymentTerms(“Zahlbar sofort und ohne Abzug”) ```      alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.DirectDebit), _                                                                        “Sepa Direct Debit”, “iban”, “account name”, “sparkasse”, “bic”, _                                                                       “BLZ”, “Bankname”, True, “REF A-123”, “DE98ZZZ09999999999”) ``` alo.AddTradeTax(“19”, “EUR”, “100”, “EUR”, “VAT”, _alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate), “19.00”) alo.WriteTotals(100, 119, 119) ```      If Not alo.SaveXML(“C:\temp\HJW.XML”) Then           MessageBox.Show(“Fehler ” & alo.Last_Error_Code & “-” & alo.Last_Error, _                                         Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)      End If Catch ex As Exception      MessageBox.Show(“Fehler: [” & ex.Message & “]”, Me.Text, _                                    MessageBoxButtons.OK, MessageBoxIcon.Error) End Try --- ## Aloaha ZUGFeRD GUI Videos URL: https://www.zugferdpro.com/aloaha-zugferd-gui-videos/ Date: 2016-06-02 ### Aloaha ZUGFeRD GUI   ### Importieren und exportieren von ZUGFeRD Rechnungen   Aloaha ZUGFeRD Anwendung [HIER](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip) laden --- ## Was ist das ZUGFeRD-Format? URL: https://www.zugferdpro.com/was-ist-das-zugferd-format/ Date: 2016-04-29 Das [ZUGFeRD](https://www.zugferdpro.com/)-Format (Zentraler User Guide Forum elektronische Rechnung Deutschland) kombiniert eine PDF/A-3-Datei der Rechnung mit einer integrierten Rechnungsdatei im XML-Format, die in das PDF/A-3-Dokument eingebettet ist. Dieses neue und innovative Rechnungsdatenformat erlaubt ein maschinelles Auslesen von Daten wie Rechnungsbetrag, Rechnungsnummer usw. und die damit verbundene Nutzung in nachgelagerten Prozessen. Die bisher übliche OCR-Erkennung (Optical Character Recognition) oder manuelle Eingaben sollen damit langfristig ersetzt werden. Das Format wird von dem FeRD in Kooperation mit Verbänden, Ministerien und Unternehmen entwickelt und ist im Jahr 2014 erstmals vorgestellt worden. --- ## Wie unterstützt Aloaha das ZUGFeRD-Format? URL: https://www.zugferdpro.com/wie-unterstutzt-aloaha-das-zugferd-format/ Date: 2016-04-29 Aloaha bietet in seinem Entwickler-Tool [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/) umfangreiche ZUGFeRD-Funktionen. Mit dem Aloaha ZUGFeRD Toolkit können Software-Entwickler das ZUGFeRD-Format in ihre eigenen Anwendungen integrieren, sodass die Nutzer keine zusätzliche Software mehr benötigen, um die genannten Formate  zu verwenden (erstellen, anzeigen, bearbeiten). Die ZUGFeRD-Implementierung im [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/) ermöglicht die elektronische Rechnungsverarbeitung wie folgt: - ZUGFeRD-Dateien lesen, verwalten und exportieren - Neue Rechnungen erstellen und über ZUGFeRD-konforme Dateien als eingebettete XML-Anlage speichern - ZUGFeRD XML Dateien mit existierenden PDF Rechnungen zusammenführen und als PDF/A speichern Detaillierte Informationen der APIs rufen Sie bitte von [https://www.zugferdpro.com](https://www.zugferdpro.com/category/code-2/) ab. --- ## ZUGFeRD Rechnungen sparen 25 Minuten Bearbeitungszeit URL: https://www.zugferdpro.com/zugferd-rechnungen-sparen-25-minuten-bearbeitungszeit/ Date: 2016-04-21 Noch immer benutzen viele Firmen Papierrechnungen oder einfache PDF Dokumente. Dabei lässt sich mit der Umstellung auf einen papierlosen Rechnungs-Workflow viel Zeit und Geld sparen. Allein in Deutschland werden rund 32 Milliarden Rechnungen pro Jahr verschickt. Doch das soll sich ändern. Die EU-Kommission sieht vor, E-Invoicing bis 2020 als vorherrschende Fakturierungsmethode zu etablieren. Sie schätzt die Einsparungen für Unternehmen in der EU durch eine elektronische Rechnungsbearbeitung auf 64,5 Milliarden Euro pro Jahr. 77 Prozent der Unternehmen uebermittlen ihre Rechnungen noch auf Papier. 69 Prozent der Unternehmen drucken elektronisch empfangene Rechnung erstmal aus  All diese Rechnungen werden beim Empfänger meist noch manuell in die Buchhaltung übertragen. Weiterhin benutzen einige wenige Firmen fehleranfällige OCR Lösungen um die Daten von Papierrechnungen auszulesen und in elektronischer Form direkt an das Buchhaltungssystem weitergeben zu können. Dabei werden die Papierrechnungen zunächst gescannt. Anschließend liest eine OCR-Erkennungskomponente die Rechnungsdaten aus. Diese werden dann per Workflow in den elektronischen Freigabeprozess weitergeleitet. Nur jede vierte Rechnung liegt in elektronischer Form vor. Leider bedeutet das jedoch nicht das solch eine elektronische Rechnung auch ohne Medienbruch in die Buchhaltung übertragen werden kann. Diese fehleranfälligen, kosten- und zeitintensive Umwege sind jedoch überflüssig, sofern sich Sender und Empfänger auf ein komplett elektronisches Rechnungsverfahren einigen. Zum Beispiel [ZUGFeRD](https://www.zugferdpro.com/). ### ZUGFeRD PDF/A-Format Bei den elektronischen Rechnungen haben sich mehrere Rechnungsformate etabliert. Neuerdings gibt es jedoch eine Tendenz zur einheitlichen Rechnungsstellung im [ZUGFeRD](https://www.zugferdpro.com/)Format. Trotz geringer Investitionskosten ist hierbei der Nutzen sowohl für Rechnungssteller als auch Empfänger hoch. Hinzu kommt, dass immer mehr Lieferanten auf einen Rechnungsaustausch im [ZUGFeRD](https://www.zugferdpro.com/) Format umstellen da oftmals viele ihrer Kunden aus der Wirtschaft und dem öffentlichen Sektor keine Papierrechnungen mehr akzeptieren. Das ZUGFeRD Format umfasst nicht nur eine PDF Datei, sondern darüber hinaus enthält es auch eine XML-Datei. Mithilfe einfacher [Zusatzprogramme](https://www.zugferdpro.com/aloaha-zugferd-gui/)können diese XML-Dateien extrahiert und für ERP-Systeme lesbar gemacht werden. Eine manuelle Erfassung der Rechnungsdaten beziehungsweise das Auslesen der Daten mit einer OCR-Komponente entfällt komplett. Die Datenqualität liegt beim Rechnungsaustausch im ZUGFeRD Format bei 100 Prozent. Da die XML-Daten komplett in die Buchhaltung übernommen werden, gibt es beim Rechnungsaustausch per ZUGFeRD weder Datenverluste noch Lesefehler. ### Pro Rechnung werden 25 Minuten eingespart Das Bundesministerium des Innern (BMI) errechnete, dass die Bearbeitung einer Papierrechnung durchschnittlich 27 Minuten dauert. Der elektronische Austausch von Rechnungen im ZUGFeRD Format reduziert den Aufwand auf etwa zwei Minuten. Prozessschritte im Vergleich: ZUGFeRD-Format spart 25 Minuten. Quelle: BMI, 2013 --- ## Beliebige Anhänge aus einem PDF extrahieren (COM) URL: https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-com/ Date: 2016-04-12 Natürlich ist es möglich beliebige Anhänge aus einem PDF zu extrahieren. Wenn Sie auf unser XML Objekt per .NET zugreifen reicht dazu die Funktion [FileAttachments](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-net/). Die Funktion liefert einen Array der Bytes und Dateinamen aller Anhänge zurück. Diese können Sie dann selbst in eine Datei schreiben. Da COM Sprachen Probleme mit solchen Multidimensionalen Arrays hat gibt es für COM Sprachen spezielle Schnittstellen. Diese können Sie aber selbstverständlich auch von .NET aus benutzen. Hier finden Sie ein selbsterklärendes Beispiel. Sollten Sie trotzdem Fragen haben kontaktieren Sie bitte info@aloaha.com: Dim pdf As Aloaha_ZUGFeRD.XML Dim LastError As String Dim InputPDF As String Dim OwnerPass As String Dim LicenseKey As String Dim attachmentCount As Integer Dim i As Integer Dim DoOverwrite As Boolean Dim OutputPath As String Set pdf = New Aloaha_ZUGFeRD.XML InputPDF = “c:\input.pdf” If pdf.LoadPDF2Mem(InputPDF, “”, LicenseKey) = True Then    attachmentCount = pdf.attachmentCount    DoOverwrite = True    OutputPath = “c:\pdf\”    For i = 0 To attachmentCount – 1       Call pdf.SaveAttachment(OutputPath, i, DoOverwrite)    Next i Else    LastError = pdf.LastError End If --- ## Beliebige Anhänge aus einem PDF extrahieren (.NET) URL: https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-net/ Date: 2016-04-12 Natürlich ist es möglich beliebige Anhänge aus einem PDF zu extrahieren. Wenn Sie auf unser XML Objekt per .NET zugreifen reicht dazu die Funktion FileAttachments. Die Funktion liefert einen Array der Bytes und Dateinamen aller Anhänge zurück. Diese können Sie dann selbst in eine Datei schreiben. Da COM Sprachen Probleme mit solchen Multidimensionalen Arrays hat gibt es für COM Sprachen spezielle Schnittstellen. Diese können Sie aber selbstverständlich auch von .NET aus benutzen. Details finden Sie hier:[SaveAttachment](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-com/) --- ## Zusammenführung von XML und PDF und optional Dokumente als Anhänge einfügen URL: https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/ Date: 2016-04-05 SDK methods: AddFile2Attach, Files2Attach, Licensed, MergeXMLIntoPDF Wenn Sie mit [MergeXMLIntoPDF](https://www.zugferdpro.com/category/code-2/vb-net-code-2/mergexmlintopdf/)ein ZUGFeRD PDF/A erstellen können Sie auch gleichzeitig eine Dateiliste mit Files2Attach spezifizieren. Diese Dateien werden zusätzlich in das PDF als Anhänge eingebaut. Diese Funktion ist ab Version 7.0.30 (05.04.2016) verfügbar. ``` Const License As String = "IHR-LIZENZSCHLUESSEL"  'Bitte kontakieren Sie info@aloaha.com fuer eine Testlizenz Dim alo As New Aloaha_ZUGFeRD.XML Dim InputPDF As String = "c:\input.pdf" Dim OutPutPDF As String = "c:\output.pdf" Dim AttachmentFileList() As String = {} Dim DoOverWrite As Boolean = True Dim XMLPath As String = "c:\ZUGFeRD-invoice.xml" If alo.Licensed(License) = True Then Array.Resize(AttachmentFileList, 3) AttachmentFileList(0) = "c:\hello.pdf" AttachmentFileList(1) = "c:\input.pdf" AttachmentFileList(2) = "c:\caravanticket.tif" alo.Files2Attach = AttachmentFileList If alo.MergeXMLIntoPDF(XMLPath, InputPDF, OutPutPDF, DoOverWrite, "", License) = True Then MsgBox("ok") Else MsgBox("not ok") End If End If ``` Falls Ihre Programmierumgebung Probleme mit String Arrays haben sollte gibt es natürlich auch noch einen zweiten Weg: ``` Const License As String = "IHR-LIZENZSCHLUESSEL"  'Bitte kontakieren Sie info@aloaha.com fuer eine Testlizenz Dim alo As New Aloaha_ZUGFeRD.XML Dim InputPDF As String = "c:\input.pdf" Dim OutPutPDF As String = "c:\output.pdf" Dim DoOverWrite As Boolean = True Dim XMLPath As String = "c:\ZUGFeRD-invoice.xml" If alo.Licensed(License) = True Then alo.AddFile2Attach("c:\hello.pdf") alo.AddFile2Attach("c:\input.pdf") alo.AddFile2Attach("c:\caravanticket.tif") If alo.MergeXMLIntoPDF(XMLPath, InputPDF, OutPutPDF, DoOverWrite, "", License) = True Then MsgBox("ok") Else MsgBox("not ok") End If End If ``` Natürlich können Sie auch VBS benutzen: ``` Set alo = CreateObject("Aloaha_ZUGFeRD.xml") ZUGFeRD_License = "IHR-LIZENZSCHLUESSEL" PDFInvoice = "c:\PDF\Rechnung\RE_xxx.pdf" XMLFile = "c:\XML\ddd4.xml" OutputPDF = "c:\XML\RExxxE.pdf" OptionalAttachment = "c:\PDF\AN_AGB.pdf" ' optional - kann leer bleiben WScript.echo "alo.MergeXMLIntoPDF()" & " - " & alo.MergeXMLIntoPDF(XMLFile, PDFInvoice, OutputPDF, True, OptionalAttachment, ZUGFeRD_License) ``` ZUGFeRD-XML und PDF-Rechnung per Webservice zu einer PDF-ZUGFeRD-Rechnung zusammenführen: [https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) --- ## Wie kann man den Testindikator und das ZUGFeRD Profil definieren? URL: https://www.zugferdpro.com/wie-kann-man-den-testindikator-und-das-zugferd-profil-definieren/ Date: 2016-03-29 SDK methods: SpecifiedExchangedDocumentContext, ZUGFeRD_Profile, ZUGFeRD_Structure, ZUGFeRD_TestIndikator Wie üblich gibt es viele Wege, die nach Rom führen. Sie können diese Eigenschaften direkt am Anfang bei der Erstellung des Objektes definieren: ``` Dim ProfileType As Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile = Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort Dim TestIndicator As Boolean = True Dim LicenseKey As String = "IHR-LIZENZSCHLUESSEL"   'bitte fordern Sie Ihren Testkey von info@aloaha.com an Dim ZUGFeRDXML As Aloaha_ZUGFeRD.XML = New Aloaha_ZUGFeRD.XML(ProfileType, TestIndicator, LicenseKey) ``` Es kann jedoch vorkommen das diese Variablen von anderen Funkionen geändert werden. Zum Beispiel von [CreateInvoice](https://www.zugferdpro.com/zuweisung-der-rechnungsdaten-zum-objekt/). Auch wenn Sie einen Wert setzen, der nur in Comfort existiert aber Ihr Profil auf Basic steht wird intern automatisch auf Comfort hochgestuft. Wenn Sie es nicht Aloaha überlassen möchten können Sie direkt vor den Speichern die Werte selbst setzen: Zum Beispiel: ``` ZUGFeRDXML.ZUGFeRD_Profile = 0  '0 = basic, 1 = comfort und 2 = extendet ZUGFeRDXML.ZUGFeRD_TestIndikator = false ``` Alternativ können Sie natürlich auch die Properties direkt im Objekt ändern: ``` Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = ZUGFeRDXML.ZUGFeRD_Structure ``` Nun können Sie im Objekt zug direkt jede beliebige Eigenschaft ändern: ``` zug.SpecifiedExchangedDocumentContext.TestIndicator = false zug.SpecifiedExchangedDocumentContext.GuidelineSpecifiedDocumentContextParameter=Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort ``` Nun müssen Sie noch die Änderungen zurückspeichern: ``` ZUGFeRDXML.ZUGFeRD_Structure = zug ``` Nun können Sie das XML erstellen: ZUGFeRDXML.SaveXML(“c:\test.xml”) Bitte nehmen Sie zur Kenntnis das wir Gültigkeitsüberprüfungen durchführen. Sollte kein XML geschrieben werden wird ein Wert fehlen. Sie finden das Problem dann in ZUGFeRDXML.LastError --- ## Wie kann ich die XML Datei aus der PDF Rechnung extrahieren? URL: https://www.zugferdpro.com/wie-kann-ich-die-xml-datei-aus-der-pdf-rechnung-extrahieren/ Date: 2016-03-21 SDK methods: GetZUGFeRD_XMLfromPDF, Licensed, WriteAllBytes Es ist selbstverständlich möglich den XML Anhang aus der Rechnung zu extrahieren. Wie immer ist der Code dazu sehr einfach: ``` Const License As String = "IHR-LIZENZSCHLUESSEL"  'Please contact info@aloaha.com for your evaluation key Dim alo As New Aloaha_ZUGFeRD.XML Dim ZUGFeRD_XML() As Byte = {} Dim InvoicePath As String = "c:\rechnung.pdf" Dim XMLPath As String = "c:\rechnung.xml" If alo.Licensed(License) = True Then ZUGFeRD_XML = alo.GetZUGFeRD_XMLfromPDF(InvoicePath) If ZUGFeRD_XML Is Nothing Then Else If ZUGFeRD_XML.Length > 0 Then Call System.IO.File.WriteAllBytes(XMLPath, ZUGFeRD_XML) End If End If End If ``` Natürlich kann man Daten wie Posten auch direkt aus der ZUGFeRD bzw. X-Rechnung auslesen: [https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/](https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/) Please note that with Version 6.0.34 we introduced a new function ExportZUGFeRDXML2Disk. It allows you with one function call to export the XML to disk. Web Service: [Webbasiert ZUGFeRD XML extrahieren und anzeigen](https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/) --- ## Erstellen des ZUGFeRD Objektes in VB6 bzw. COM URL: https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/ Date: 2016-03-17 Business terms: BG-1, BT-1, BT-2, BT-22, BT-5 SDK methods: Create_Invoice, LastError, Licensed, SaveXML Sie können ein neues ZUGFeRD Objekt mit nur einer Codezeile erstellen. Dazu benötigen Sie nur den Befehl: Create_Invoice (in VB.net kann man auch [CreateInvoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) benutzen) Hier ein kleines Codebeispiel: ``` Dim key As String Dim InvoiceID As String                    'BT-1 Dim InvoiceNote As String                  'BT-22, BG-1 Dim InvoiceDate As String                  'BT-2 Dim InvoiceDateFormat As String Dim InvoiceName_FreeText Dim InvoiceLanguageID_2Letter_ISO As String Dim CurrencyID As String                  'BT-5 Dim alo As Aloaha_ZUGFeRD.XML ``` ‘Sollte die Erstellung fehlschlagen bedeutet das das Objekt noch nicht im System registriert ist. Das machen Sie mit RegASM.exe:‘regasm Aloaha_ZUGFeRD.dll /codebase ``` 'bitte neuen Testkey von info@aloaha.com anfordern key = "IHR-LIZENZSCHLUESSEL"  InvoiceID = "08157411"               'BT-1 InvoiceLanguageID_2Letter_ISO = "DE" CurrencyID = "EUR"                    'BT-5 InvoiceDateFormat = "102" InvoiceDate = "20160131"            'BT-2 Set alo = New Aloaha_ZUGFeRd.XML If alo.Licensed(key) = True Then      Call alo.Create_Invoice(InvoiceID, InvoiceNote, InvoiceDate, InvoiceDateFormat, "", InvoiceLanguageID_2Letter_ISO, CurrencyID)      alo.SaveXML ("c:\temp\test.xml")     MsgBox alo.LastError end if ``` Wenn Sie nun das Dokument als XML speichern (alo.SaveXML) werden Sie sehen das noch nichts gespeichert wird. Sie können mit MsgBox alo.LastError abfragen weshalb das so ist. In diesem Fall ist der Grund einfach. Wir machen beim Speichern immer einen Check ob auch alle mindestens erforderlichen Variablen gefüllt wurden. Bei einem leeren Dokument ist das natürlich der Fall. Ein komplettes VB6/VBA Codebeispiel finden Sie auf: [https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/](https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/) --- ## Zuweisung der Rechnungsdaten zum ZUGFeRD Objekt URL: https://www.zugferdpro.com/zuweisung-der-rechnungsdaten-zum-objekt/ Date: 2016-03-17 Business terms: BT-10 SDK methods: SaveXML Nachdem Sie das ZUGFeRD Objekt mit [Create_Invoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) ([VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/) und COM) bzw. [CreateInvoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) ([VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/)) erstellt haben möchten Sie natürlich die Rechnungsdaten dem Objekt hinzufügen. Bitte beachten XRechnung:  Damit eine XRechnung korrekt vom Rechnungssteller an den Rechnungsempfänger zugestellt werden kann, muss der Rechnungsempfänger eindeutig identifiziert werden. Die Leitweg-ID dient zur eindeutigen Identifikation des Rechnungsempfängers. In der XRechnung muss die Leitweg-ID in der Buyer Reference (BT-10 / alo.BuyerReference) angegeben werden. Für die Darstellung der elektronischen Rechnung sind laut dem XRechnung-Standard zwei Syntaxen zulässig: Universal Business Language (UBL) und UN/CEFACT Cross Industry Invoice (CII). Zuerst können Sie dem Dokument allgemeine Informationen hinzufügen: alo.Document_Name = “RECHNUNG” alo.Document_Type = Aloaha_ZUGFeRD.DocumentType.DocumentType_Invoice Call alo.AddDocumentNote(“Rechnungsstellung wie mit Frau Musterfrau besprochen. Es bestehen Rabatte und Bonusvereinbarungen.”, “AAK”) Call alo.AddDocumentNote(“Zahlbar sofort ohne Abzug”) Call alo.AddDocumentNote(“Notiztext”, “ST3”) Call alo.AddDocumentNote(“note”, “subjectcode”, “contentcode”) ‘Dann die Verkäuferdaten hinzufügen: Call alo.WriteSeller(“Aloaha Limited”, “PBK1131”, “Pembroke”, “Helgoland”, “45, Triq Gio Felice Inglott”, “MT”, “MT1481 4406”) Call alo.WriteSellerContactPerson(“John Doe”, “Verkauf”, “sales@aloaha.com”, “+49 541 3859 4554”, “”) ‘Es geht auch mit einzelnen Calls: alo.SellerDepartment = “Sales” alo.SellerName = “Aloaha Limited” alo.SellerCity = “Pembroke” alo.SellerAddressLine1 = “Helogland” alo.SellerAddressLine2 = “Triq Gio Felice Inglott” alo.SellerCountry = “MT” alo.SellerPostCode = “PBK1131” Call alo.AddSellerTAX(“MT324234234”, “VA”) Call alo.AddSellerTAX(“999999999”, “FC”) alo.SellerID = “4711” Call alo.AddSellerGlobalID(alo.SellerID, “0021”) ‘Nun fügen Sie die Daten des Kunden ein: Call alo.WriteBuyer(“Aloaha Limited”, “49479”, “Osnabrück”, “Republic Street 1”, “”, “DE”, “alo0815”, “DE 08154711”) Call alo.WriteBuyerContactPerson(“Fred Buyer”, “Einkauf”, “info@aloaha.com”, “+49 541 3859 4554”, “+49 541 3859 4554”) ‘Wie beim Verkauefer können Sie auch beim Kunden die Daten in kleinen Schritten setzen. alo.BuyerReference = “alo0815” alo.BuyerName = “Aloaha Limited” alo.BuyerCity = “Osnabrück” alo.BuyerAddressLine1 = “Republic Street 1” alo.BuyerCountry = “DE” alo.BuyerPostCode = “49479” Call alo.AddBuyerTAX(“DE 08154711”, “VA”) Call alo.AddBuyerTAX(“345353535”, “FC”) alo.BuyerID = “0815” Call alo.AddBuyerGlobalID(alo.BuyerID, “0021”) ‘Natürlich müssen auch die verkauften Produkte in die Rechnung: Call alo.AddProduct_Basic(“5”, “Tasse(n)”, “Kaffee”, “Jaja”) ‘Aber auch Zahlungsbedingungen, Rechnungsummen, usw. sind Teil einer Rechnung. alo.AddTradePaymentTerms (“Zahlbar sofort und ohne Abzug”) Call alo.AddTradePaymentTerms(“Zahlbar innerhalb 30 Tagen netto bis 04.07.2013, 1% Skonto innerhalb 20 Tagen bis 25.06.2013”, “20130704”, “102”) alo.PaymentReference = “Invoice No. INV08154711” alo.InvoiceCurrencyCode = “EUR” Call alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.Payment_Means.Payment_Means_DirectDebit), “Sepa Direct Debit”, “iban”, “account name”, “sparkasse”, “bic”, “BLZ”, “Bankname”, True, “REF A-123”, “DE98ZZZ09999999999”) Call alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.Payment_Means.Payment_Means_DebitTransfer_SEPA), “Überweisung”, “MT67 MMEB 4475 0000 0000 7504 5294 001”, “account name”, “075-045294-001”, “MMEB MTMT”, “”, “HSBC San Gwann, Malta”, False) Call alo.AddTradeTax(“0”, “EUR”, “0”, “EUR”, “VAT”, alo.VatCategoryCode(Aloaha_ZUGFeRD.VAT_Category.VAT_Category_IntraCommunitySupply), “18”, “No Vat is to be paid on Malta because it is a supply of service made outside Malta in terms of item 2(1) of part 2 of the 3rd Schedule of the VAT Act, subject to reverse charge in the country of receipt.”) Call alo.AddTradeTax(“3.06”, “EUR”, “170”, “EUR”, “VAT”, “S”, “18”, “”) Call alo.AddTradeTax(“7”, “EUR”, “100”, “EUR”, “VAT”, “T”, “7”) Call alo.AddTradePaymentTerms(“Zahlbar sofort und ohne Abzug”) Call alo.AddTradePaymentTerms(“Zahlbar innerhalb 30 Tagen netto bis 04.07.2013, 1% Skonto innerhalb 20 Tagen bis 25.06.2013”, “20130704”, “102”) Call alo.WriteTotals(100, 94.4, 84.4, 80, 14.4, 20, 10) ‘Nun können Sie das XML eportieren: ``` alo.SaveXML (“c:\temp\test.xml”) ``` ‘Falls kein XML gespeichert wird liegt ein Fehler vor. Diesen können Sie natürlich abfragen: MsgBox alo.LastError Sie möchten natürlich auch das XML in ein PDF einbinden. Lesen Sie dazu bitte: [Zusammensetzen von ZUGFeRD XML und PDF zu ZUGFeRD-Rechnung](https://www.zugferdpro.com/zusammensetzen-von-zugferd-xml-und-pdf-zu-zugferd-rechnung/) --- ## Dokumente direkt nach PDF/A konvertieren URL: https://www.zugferdpro.com/dokumente-direkt-nach-pdfa-konvertieren/ Date: 2015-11-26 Auf Wunsch einiger Kunden haben wir in unserem [ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/) eine neue PDF Klasse eingeführt. Dort werden Funktionen sammeln, die primär erstmal nichts mit ZUGFeRD an sich zu tun haben. Ein gutes Beispiel ist die direkte Konvertierung von .docx, .tif, .bmp, .jpg und .pdf nach PDF/A mit einem einzigen Funktionsaufruf. Sie brauchen in .net nur Aloaha_ZUGFeRD referenzieren. dim InputDOC as string =”c:\doc\invoice.docx” dim OutputPDFa as string =”c:\tmp\invoice.pdf” ‘please contact info@aloaha.com for your own evaluation key Dim License as string=”IHR-LIZENZSCHLUESSEL”   If Aloaha_ZUGFeRD.PDF.DOC2PDFA(InputDOC, OutputPDFa, License) = True Then           If System.IO.File.Exists(OutputPDFa) = True Then                     System.Diagnostics.Process.Start(OutputPDFa )           End If End If Ein fertig kompiliertes Demo Tool finden Sie [HIER](https://www.zugferdpro.com/docx-und-pdf-nach-pdfa-konvertieren/). Natürlich erhalten Sie unser SDK auch von nuget: [https://www.nuget.org/packages/AloahaZUGFeRDToolkit/](https://www.nuget.org/packages/AloahaZUGFeRDToolkit/) --- ## DOCX und PDF nach PDF/A konvertieren URL: https://www.zugferdpro.com/docx-und-pdf-nach-pdfa-konvertieren/ Date: 2015-11-24 Teil des ZUGFeRD SDKs ist die Umwandlung von DOCX und PDF nach PDF/A. Wir machen diese Funktionalität als kleines, portables Tool verfügbar. Dazu laden Sie einfach folgendes Tool: [https://www.aloaha.com/download/Convert2PDFA.zip](https://www.aloaha.com/download/Convert2PDFA.zip) Sie benötigen für dieses Tool ab Version 11 das .NET Framework 4.7.2; Versionen 10 und älter benötigen .NET 3.5. Für die Umwandlung von DOCX nach PDF/A muss weiterhin Winword installiert sein. Wenn Sie PDFs direkt nach PDF/A umwandeln stellen Sie bitte sicher das die PDF die Schriftarten eingebettet haben und Sie keine Transparenz benutzen. Sollten Sie diese Funktionalität in Ihrem Produkt benötigen kontaktieren Sie bitte info@aloaha.com für das SDK. #### Erweiterte Administratorrechte In einigen wenigen Fällen gelingt es der Software nicht, alle erforderlichen APIs zu registrieren, wenn sie im Kontext eines eingeschränkten Benutzers ausgeführt wird. In diesem Fall müssen Sie die Software einmalig mit erweiterten Administratorrechten ausführen. #### Web Dienste Sie möchten X-Rechnungs XML direkt in DOCX umwandeln aber keine Software installieren? Lesen Sie hier: [https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) --- ## Zuweisung des Rechnungsdatums zum ZUGFeRD Objekt URL: https://www.zugferdpro.com/zuweisung-des-rechnungsdatums-zum-zugferd-objekt/ Date: 2015-11-19 Business terms: BT-72 SDK methods: GetActualDeliveryDate, SetActualDeliveryDate Nachdem Sie das ZUGFeRD Objekt mit Create_Invoice (VB6 und COM) bzw. CreateInvoice (VB.NET) erstellt haben möchten Sie eventuell eine Rechnungsdatum zuweisen. Auch das geht bei Aloaha natürlich sehr einfach: ``` alo.SetActualDeliveryDate(“20140101”, “102”) ``` Auslesen können Sie das Datum mit: ``` alo.GetActualDeliveryDate(OccurrenceDateTime, Format) ``` Achtung- fehlt diese Angabe kann es zu folgendem Fehler kommen: [VD-Valitool-108]-Nach dem deutschen UStG §14 ist die Angabe des Zeitpunkts der Lieferung oder sonstigen Leistung eine Pflichtangabe. Die Angabe fehlt in der XML-Datei. Bitte prüfen Sie, ob Sie diese Angabe in Ihrer Geschäftsbeziehung machen müssen./rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeDelivery/ram:ActualDeliverySupplyChainEvent/ram:OccurrenceDateTime/udt:DateTimeString --- ## Zuweisung des Rechnungszeitraums zum ZUGFeRD Objekt URL: https://www.zugferdpro.com/zuweisung-der-rechnungszeitraum-zum-zugferd-objekt/ Date: 2015-11-18 Business terms: BT-74 SDK methods: GetBillingPeriod, WriteBillingPeriod Nachdem Sie das ZUGFeRD Objekt mit [Create_Invoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) ([VB6](https://www.zugferdpro.com/category/code-2/vb6-code-2/) und COM) bzw. [CreateInvoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) ([VB.NET](https://www.zugferdpro.com/category/code-2/vb-net-code-2/)) erstellt haben möchten Sie eventuell einen Rechnungszeitraum zuweisen. Auch das geht bei Aloaha natürlich sehr einfach: ``` alo.WriteBillingPeriod(“20140101”, “20141231”) ``` Auslesen können Sie den Zeitraum mit: ``` alo.GetBillingPeriod(StartDateTime, EndDateTime, DateFormat) ``` Mehr auf: [https://www.zugferdpro.com/beginn-und-ende-der-rechnungsperiode/](https://www.zugferdpro.com/beginn-und-ende-der-rechnungsperiode/) --- ## ZUGFeRD XML mit DOCX Template zusammenführen und in ZUGFeRD PDF/A umwandeln URL: https://www.zugferdpro.com/zugferd-xml-mit-docx-template-zusammenfuehren-und-in-zugferd-pdfa-umwandeln/ Date: 2015-10-30 SDK methods: ConvertDOCX2PDF, CreateDocFromXML, MergeXMLIntoPDF Mit dem Aloaha ZUGFeRD Toolkit ist es möglich, ein Winword-DOCX-Template mit Werten aus dem ZUGFeRD-XML zu “befüllen” und danach in ein ZUGFeRD PDF/A umzuwandeln. Das kann zum Beispiel auch interessant sein, wenn man ZUGFeRD/XRechnungs-XML drucken möchte. #### Der Code dazu ist denkbar einfach: ``` Private Sub Test1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Test1.Click Test1.Enabled = False 'Please change Path to match your doucments! Dim DOCXTemplate As String = "c:\ZUGFeRD\TemplateEUR_VAT.docx" Dim XMLFile As String = "c:\ZUGFeRD\ZUGFeRD-invoice.xml" Dim OutputDOCX As String = "c:\ZUGFeRD\DOCXInvoice.docx" Dim OutputPDF As String = "c:\ZUGFeRD\PDFInvoice.pdf" Dim FinalInvoice As String = "c:\ZUGFeRD\ZUGFeRD-invoice.pdf" Dim OptionalAttachment = "c:\AGB\AGB.pdf"   ' optional - kann leer bleiben 'Please contact info@aloaha.com for your own evaluation key Dim ZUGFeRD_License As String = "IHR-LIZENZSCHLUESSEL" Dim alo As New Aloaha_ZUGFeRD.XML(ZUGFeRD_License) If alo.CreateDocFromXML(XMLFile, OutputDOCX, DOCXTemplate, ZUGFeRD_License, True) = True Then If alo.ConvertDOCX2PDF(OutputDOCX, OutputPDF, True, ZUGFeRD_License) = True Then If alo.MergeXMLIntoPDF(XMLFile, OutputPDF, FinalInvoice, True, OptionalAttachment, ZUGFeRD_License) = True Then End If End If End If Test1.Enabled = True End Sub ``` --- ## Reference ZUGFeRD DLL in VB6 URL: https://www.zugferdpro.com/reference-zugferd-dll-in-vb6/ Date: 2015-07-27 After you [registered](https://www.zugferdpro.com/register-zugferd-dll-for-access-in-vb6com/)the dll with Regasm as explained here you can reference the dll in VB6 as shown below: Code: Dim alo As Aloaha_ZUGFeRd.XML Set alo = New Aloaha_ZUGFeRd.XML --- ## Register ZUGFeRD dll for access in VB6/COM URL: https://www.zugferdpro.com/register-zugferd-dll-for-access-in-vb6com/ Date: 2015-07-27 To be able to use the [ZUGFeRD DLL](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) in VB6 and/or COM you need to register it first with Regasm. The commandline Parameter is: regasm /codebase [Aloaha_ZUGFeRD.dll](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) --- ## Direkte docx nach PDF/A Konvertierung URL: https://www.zugferdpro.com/direkte-docx-nach-pdfa-konvertierung/ Date: 2015-03-16 Mit dem Aloaha ZUGFeRD Objekt können Sie natürlich auch direkt Winword Dokument in das PDF/A Format umwandeln: Dim ZUG As Object Dim DOCX As String Dim PDFA As String Dim result As Boolean result = False Set ZUG = CreateObject(“Aloaha_ZUGFeRD.XML”) If ZUG.Licensed(“IHR-LIZENZSCHLUESSEL”) = True Then DOCX = “c:\template.docx” PDFA = “c:\output.pdf” result = ZUG.ConvertDOCX2PDF(DOCX, PDFA, True, “IHR-LIZENZSCHLUESSEL”) End If Falls ein Fehler auftritt überprüfen Sie bitte ob Sie das Objekt registriert haben: regasm Aloaha_ZUGFeRD.dll /codebase Natürlich können wir auch ZUGFeRD XML Dateien direkt nach ZUGFeRD PDF/A konvertieren. Schauen Sie bitte [HIER.](https://www.zugferdpro.com/xml-direkt-nach-pdf-konvertieren/) --- ## Konvertierung von XML direkt in ein ZUGFeRD PDF/A URL: https://www.zugferdpro.com/konvertierung-von-xml-direkt-in-ein-zugferd-pdfa/ Date: 2015-03-10 API: [https://www.zugferdpro.com/xml-direkt-nach-pdf-konvertieren/](https://www.zugferdpro.com/xml-direkt-nach-pdf-konvertieren/) --- ## ZUGFeRD Generation with Aloaha ZUGFeRD Toolkit URL: https://www.zugferdpro.com/zugferd-generation-with-aloaha-zugferd-toolkit/ Date: 2015-03-10 --- ## ZUGFeRD XML direkt nach PDF konvertieren URL: https://www.zugferdpro.com/xml-direkt-nach-pdf-konvertieren/ Date: 2015-03-07 SDK methods: CreateDocFromXML, Last_Error Wie [hier](https://www.zugferdpro.com/direkte-konvertierung-von-zugferd-xml-nach-zugferd-pdfa/)schon geschrieben ist es nun möglich ZUGFeRD konforme XML Dateien direkt nach ZUGFeRD konformen PDF/A Dateien zu konvertieren. Wie einfach das geht können Sie im [YouTube Video](https://www.youtube.com/watch?v=3p7XCglzBqM) für unsere [DEMO GUI](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip) sehen. Sie brauchen dazu lediglich das Aloaha SDK und eine Template Winword DOCX Datei. Ein Beispiel für eine Template Datei finden Sie hier: [ZUGFeRD DOCX Template](https://www.zugferdpro.com/wp-content/uploads/2015/10/template.docx) Nun, wie üblich, zum Beispielcode: ``` 'Lizenz definieren. Bitte fordern Sie Ihe eigene Testlizenz von info@aloaha.eu an! Const License As String = "IHR-LIZENZSCHLUESSEL" 'Benutzte Variable deklarieren: Dim DocxTemplate as string = "c:\Template.docx" Dim InputXML as string = "c:\ZUGFeRD.xml" Dim OutputPDF as string = "c:\Invoice.pdf" Dim LastError as string = "" 'Aloaha Objekt erstellen Dim alo As New Aloaha_ZUGFeRD.XML(License) If alo.CreateDocFromXML(InputXML, OutputPDF, DocxTemplate, License, True) = True Then       msgbox("OK") else       LastError=alo.Last_Error       msgbox(LastError) End If ``` Offensichtlich haben wir intern eine API, die direkt beliebige Winword Dateien in PDF/A konvertiert OHNE einen virtuellen Drucker zu benötigen. Sollte solch eine API für Ihr Projekt von Interesse sein schauen Sie bitte [HIER.](https://www.zugferdpro.com/direkte-docx-nach-pdfa-konvertierung/) XRechnungs-XML direkt in eine Winword-Datei umwandeln Ein kaum beachteter Webdienst ermöglicht die direkte Umwandlung einer ZUGFeRD XML-Datei in eine Winword-Datei. Dies ist besonders interessant, wenn man aus der XML-Datei eine druckbare Version erstellen möchte. Zum Testen haben wir diese API öffentlich zugänglich gemacht unter: [https://eforms.aloaha.com/xmluploader.aspx?o=docx](https://eforms.aloaha.com/xmluploader.aspx?o=docx) Mehr auf: [https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-umwandeln/) --- ## Direkte Konvertierung von ZUGFeRD XML nach ZUGFeRD PDF/A URL: https://www.zugferdpro.com/direkte-konvertierung-von-zugferd-xml-nach-zugferd-pdfa/ Date: 2015-03-06 Mit dem Aloaha ist es möglich DIREKT PDF/A ZUGFeRD Dateien zu erstellen. Dabei wird DIREKT aus dem XML das PDF/A erstellt und es wird nicht der unzuverlässige Weg gewählt bei dem aus einem PDF die Daten geparst werden um das XML zu erstellen. Es gibt hierzu natürlich auch ein YouTube Demo: Um alle Features nutzen zu können brauchen Sie eine Evaluation Lizenz. Diese erhalten Sie bei [info@aloaha.eu](mailto:info@aloaha.eu) Natürlich können Sie die obige email Adresse auch benutzen um uns Fragen oder Anregungen zu schicken. --- ## Command-Line printing of Office doc/docx documents URL: https://www.zugferdpro.com/command-line-printing-of-office-docdocx-documents/ Date: 2015-03-05 We offer for all licensed ZUGFeRD Customers a small command line tool to print Winword doc/docx documents directly to a printer. Download: [PrintWinWord.zip](https://www.aloaha.com/download/PrintWinWord.zip) The Syntax is pretty easy: PrintWinWord For example: c:\> PrintWinWord “C:\documents\test.docx” “HP Laserjet” In case you require an evaluation key please do not hesitate to contact [info@aloaha.eu](mailto:info@aloaha.eu) You enter the license with the following call: c:\> PrintWinWord lic:licensekey Please do not hesitate to contact us in case you need the API itself for your project! --- ## Direct conversion of doc/docx to PDF/A URL: https://www.zugferdpro.com/direct-conversion-of-docdocx-to-pdfa/ Date: 2015-03-05 We offer for all licensed ZUGFeRD Customers a small command line tool to convert direct Office doc/docx documents to PDF/A Download: [AloahaDoc2PDF.zip](https://www.aloaha.com/download/AloahaDoc2PDF.zip) The Syntax is pretty easy: AloahaDoc2PDF For example: c:\> AloahaDoc2PDF “C:\documents\test.docx” “c:\pdf\Rechnung.pdf” In case you require an evaluation key please do not hesitate to contact [info@aloaha.eu](mailto:info@aloaha.eu) You enter the license with the following call: c:\> AloahaDoc2PDF lic:licensekey Please do not hesitate to contact us in case you need the API itself for your project! --- ## Direkte Konvertierung von doc/docx nach PDF/A URL: https://www.zugferdpro.com/direkte-konvertierung-von-docdocx-nach-pdfa/ Date: 2015-03-05 Wir bieten für alle lizensierten ZUGFeRD Kunden ein kleines Kommandozeilen Tool an um Winword doc/docx Dateien direkt per Kommandozeile in ein PDF/A zu konvertieren. Download: [AloahaDoc2PDF.zip](https://www.aloaha.com/download/AloahaDoc2PDF.zip) Der Aufruf ist denkbar einfach: AloahaDoc2PDF Zum Beispiel: c:\> AloahaDoc2PDF “C:\documents\test.docx” “c:\pdf\Rechnung.pdf” Falls Sie eine Evaluierungslizenz benötigen kontaktieren Sie bitte [info@aloaha.eu](mailto:info@aloaha.eu) Diese spielen Sie bitte mit folgendem Aufruf ein: c:\> AloahaDoc2PDF lic:licensekey Sollten Sie Interesse an der API selbst haben zögern Sie bitte nicht uns zu kontaktieren! --- ## Kommandozeilendruck von Office doc/docx Dokumenten URL: https://www.zugferdpro.com/kommandozeilendruck-von-office-docdocx-dokumenten/ Date: 2015-03-05 Wir bieten für alle lizensierten ZUGFeRD Kunden ein kleines Kommandozeilen Tool an um Winword doc/docx Dateien direkt zu drucken. Download: [PrintWinWord.zip](https://www.aloaha.com/download/PrintWinWord.zip) Der Aufruf ist denkbar einfach:PrintWinWord Zum Beispiel: c:\> PrintWinWord “C:\documents\test.docx” “HP Laserjet” Falls Sie eine Evaluierungslizenz benötigen kontaktieren Sie bitte [info@aloaha.eu](mailto:info@aloaha.eu) Diese spielen Sie bitte mit folgendem Aufruf ein: c:\> PrintWinWord lic:licensekey Sollten Sie Interesse an der API selbst haben zögern Sie bitte nicht uns zu kontaktieren! --- ## Wie kann ich die ZUGFeRD Rechnungsnummer BT-1 auslesen? URL: https://www.zugferdpro.com/wie-kann-ich-die-zugferd-rechnungsnummer-bt-1-auslesen/ Date: 2015-02-23 Business terms: BT-1 SDK methods: Document_ID Wie kann ich die ZUGFeRD Rechnungsnummer BT-1 auslesen? ``` Dim RechnungsNummer As String = alo.Document_ID ``` --- ## Wie extrahiere ich die XMP Metadaten einer PDF ZUGFeRD Rechnung? URL: https://www.zugferdpro.com/wie-extrahiere-ich-die-xmp-metadaten-einer-pdf-zugferd-rechnung/ Date: 2015-01-27 Wir immer ist das bei uns ganz einfach. Bitte beachten Sie das die Lizenz im Codebeispiel nur eine zeitlich begrenzte Testlizenz ist. Fordern Sie Ihre Lizenz von info@zugferdpro.com an. Const License As String = “IHR-LIZENZSCHLUESSEL” Dim alo As New Aloaha_ZUGFeRD.XML Dim InputPDF As String = “c:\invoice.pdf” Dim xmlDoc As System.Xml.XmlDocument = Nothing If alo.Licensed(License) = True Then xmlDoc = alo.PDFMetaData_XML(InputPDF, License) End If --- ## Wie kann ich alle Anhänge aus einer PDF Datei extrahieren? URL: https://www.zugferdpro.com/wie-kann-ich-alle-anhaenge-aus-einer-pdf-datei-extrahieren/ Date: 2015-01-27 SDK methods: Licensed, PDFAttachments, WriteAllBytes Bitte beachten Sie das der Lizenzschlüssel im Beispiel ein zeitlich beschränkter Demo Key ist. ``` Const License As String = "IHR-LIZENZSCHLUESSEL" Dim alo As New Aloaha_ZUGFeRD.XML Dim Attachments() As Aloaha_ZUGFeRD.iXML.PDFAttachment = {} Dim i As Integer = 0 Dim InputPDF As String = "c:\input.pdf"  Dim DoOverWrite As Boolean = True If alo.Licensed(License) = True Then Attachments = alo.PDFAttachments(InputPDF, "", License) If Attachments.Length > 0 Then For i = LBound(Attachments) To UBound(Attachments) Call System.IO.File.WriteAllBytes("c:\pdf\" + Attachments(i).FileName,Attachments(i).FileBytes) Next i End If End If ``` --- ## Wie überprüfe ich ob die XMP Metadaten der PDF/A ZUGFeRD Rechnung vorhanden und korrekt sind? URL: https://www.zugferdpro.com/wie-ueberpruefe-ich-ob-die-xmp-metadaten-der-pdfa-zugferd-rechnung-vorhanden-und-korrekt-sind/ Date: 2015-01-27 PDF/A konforme ZUGFeRD Rechnungen erfordern die Aufnahme von einigen Metadaten. Wenn solch eine Rechnung archiviert wird sollte man testen ob diese Metadaten exisiteren. Das geht natürlich ganz einfach: Const License As String = “IHR-LIZENZSCHLUESSEL” Dim alo As New Aloaha_ZUGFeRD.XML Dim Attachments() As Aloaha_ZUGFeRD.iXML.PDFAttachment = {} Dim InputPDF As String = “c:\invoice.pdf” Dim xmlDoc As System.Xml.XmlDocument = Nothing Dim ZUGFeRD_Level As String = “” Dim ZUGFeRD_FileName As String = “” Dim ZUGFeRD_Version As String = “” If alo.Licensed(License) = True Then If alo.PDFAMetaProperties(InputPDF, ZUGFeRD_Version, ZUGFeRD_Level, ZUGFeRD_FileName, License) = True Then msgbox “OK” End If End If ZUGFeRD_Level, ZUGFeRD_FileName und ZUGFeRD_Version enthalten nach einem OK die entsprechenden Daten. Bitte nehmen Sie zur Kenntnis das der Beispielcode eine zeitlich limitierte Testlizenz enthält. Sie können Ihre Lizenz von info@zugferdpro.com anfordern. --- ## Mehrere Dateien als Anhang in ein existierendes PDF einfügen URL: https://www.zugferdpro.com/mehrere-dateien-als-anhang-in-ein-existierendes-pdf-einfuegen/ Date: 2015-01-22 Nie war es einfacher einem PDF Anhänge hinzuzufügen. Bitte nehmen Sie zur Kenntnis das der Lizenzschlüssel nur eine Testlizenz ist! Const License As String = “IHR-LIZENZSCHLUESSEL” Dim alo As New Aloaha_ZUGFeRD.XML Dim InputPDF As String = “c:\input.pdf” Dim OutPutPDF As String = “c:\output.pdf” Dim AttachmentFileList() As String = {} Dim DoOverWrite As Boolean = True If alo.Licensed(License) = True Then Array.Resize(AttachmentFileList, 3) AttachmentFileList(0) = “c:\Geschaeftsbedingungen.doc” AttachmentFileList(1) = “c:\test.doc” AttachmentFileList(2) = “c:\hallo.doc” If alo.AddAttachments2PDF(InputPDF, AttachmentFileList, OutPutPDF, DoOverWrite, License) = True Then Else End If End If Sollten Sie eine Testlizenz benötigen wenden Sie sich bitte an info@aloaha.com Bitte nehmen Sie zur Kenntnis das sich die Schnittstelle AddAttachments2PDF nicht eignet um ZUGFeRD XML Dateien in das PDF einzubetten. Um ZUGFeRD Dateien einzubetten benutzen Sie bitte [MergeXMLIntoPDF](https://www.zugferdpro.com/zusammensetzen-von-zugferd-xml-und-pdf-zu-zugferd-rechnung/) --- ## Zusammensetzen von ZUGFeRD XML und PDF zu ZUGFeRD-Rechnung URL: https://www.zugferdpro.com/zusammensetzen-von-zugferd-xml-und-pdf-zu-zugferd-rechnung/ Date: 2015-01-22 SDK methods: Licensed, MergeXMLIntoPDF Wenn Sie schon die XML und PDF Dateien haben ist es ganz einfach diese zu einer ZUGFeRD PDF Rechnung zusammenzusetzen. Optional kann sogar ein zusätzlicher Anhang in das PDF eingebettet werden. Zum Beispiel die Geschäftsbedingungen. Fehlende PDF/A Attribute werden selbstverständlich von Aloaha ergänzt! ``` Const License As String = "QxxxxZM" Dim alo As New Aloaha_ZUGFeRD.XML Dim PDFPath As String = "c:\rechnung.pdf" Dim XMLPath As String = "c:\rechnung.xml" Dim InvoicePath As String = "c:\invoice.pdf" Dim AdditionalAttachment As String = "c:\Geschaeftsbedingungen.doc" Dim DoOverWrite As Boolean = True If alo.Licensed(License) = True Then If PDFPath <> "" And XMLPath <> "" And InvoicePath <> "" Then If System.IO.File.Exists(PDFPath) = True And System.IO.File.Exists(XMLPath) = True Then If AdditionalAttachment <> "" Then If System.IO.File.Exists(AdditionalAttachment) = False Then AdditionalAttachment = "" End If If alo.MergeXMLIntoPDF(XMLPath, PDFPath, InvoicePath, DoOverWrite, AdditionalAttachment, License) = True Then Else End If End If End If End If ``` Bitte beachten Sie das der Lizenschluessel des Beispieles ein Testkey ist! Aber es geht auch in VBS ``` Set alo = CreateObject("Aloaha_ZUGFeRD.xml") ZUGFeRD_License = "IHR-LIZENZSCHLUESSEL" PDFInvoice = "c:\PDF\Rechnung\RE_xxx.pdf" XMLFile = "c:\XML\ddd4.xml" OutputPDF = "c:\XML\RExxxE.pdf" OptionalAttachment = "c:\PDF\AN_AGB.pdf" ' optional - kann leer bleiben WScript.echo "alo.MergeXMLIntoPDF()" & " - " & alo.MergeXMLIntoPDF(XMLFile, PDFInvoice, OutputPDF, True, OptionalAttachment, ZUGFeRD_License) ``` ZUGFeRD-XML und PDF-Rechnung per Webservice zu einer PDF-ZUGFeRD-Rechnung zusammenführen: [https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) --- ## Laden einer existierenden ZUGFeRD Rechnung in das Toolkit URL: https://www.zugferdpro.com/laden-einer-existierenden-zugferd-rechnung-in-das-toolkit/ Date: 2015-01-21 SDK methods: FillZUGFeRD_Structure, Licensed, ZUGFeRD_Structure Sie können direkt von einem ZUGFeRD PDF oder XML Dokument die interne ZUGFeRD Struktur füllen um diese weiter zu bearbeiten. So ist es möglich zum Beispiel Templates zu hinterlegen. Ab Version 6.0.33 nun auch in VB6/COM basierten Sprachen verfügbar! ``` Const License As String = "xxx" 'contact info@aloaha.com for eval key Dim alo As New Aloaha_ZUGFeRD.XML Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing Dim InvoicePath As String = "c:\rechnung.pdf" 'xml geht auch If alo.Licensed(License) = True Then 'please note that ZUGFeRD_Structure is not supported by COM alo.FillZUGFeRD_Structure(InvoicePath) zug = alo.ZUGFeRD_Structure End If ``` Sie wollen die Rechnungsposten aus der ZUGFeRD bzw. X-Rechnung auslesen? Dann lesen Sie bitte [“Posten aus der ZUGFeRD bzw. X-Rechnung auslesen”](https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/) Mehr Informationen finden Sie unter: [https://www.zugferdpro.com/tooldownloads/](https://www.zugferdpro.com/tooldownloads/) Ein Codebeispiel zur Extrahierung der XRechnungs-XML finden Sie unter: [Wie kann ich die XML Datei aus der PDF Rechnung extrahieren?](https://www.zugferdpro.com/wie-kann-ich-die-xml-datei-aus-der-pdf-rechnung-extrahieren/) Sie können dafür auch unsere Web-API verwenden: [Webbasiert ZUGFeRD XML extrahieren und anzeigen](https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/) --- ## Hinzufügen beliebiger Anhänge zu einer existierenden PDF Datei URL: https://www.zugferdpro.com/hinzufuegen-beliebiger-anhaenge-zu-einer-existierenden-pdf-datei/ Date: 2014-12-03 Das Hinzufügen beliebiger Anhänge zu einer PDF Datei ist natürlich auch möglich. Dim alo As New Aloaha_ZUGFeRD.XML Dim License As String = “IHR-LIZENZSCHLUESSEL” Dim Attachments(0 To 1) As String Dim LastError As String = “” Dim RetVal As Boolean = False Attachments(0) = “c:\test1.docx” Attachments(1) = “c:\test2.pdf” alo.Last_Error = “” RetVal = alo.AddAttachments2PDF(“C:\inputpdf.pdf”, Attachments, “c:\outputpdf.pdf”, True, “IHR-LIZENZSCHLUESSEL”)+ If RetVal = False Then LastError = alo.Last_Error Sollten Sie eine Testlizenz benötigen wenden Sie sich bitte an info@aloaha.com Bitte nehmen Sie zur Kenntnis das sich die Schnittstelle AddAttachments2PDF nicht eignet um ZUGFeRD XML Dateien in das PDF einzubetten. Um ZUGFeRD Dateien einzubetten benutzen Sie bitte [MergeXMLIntoPDF](https://www.zugferdpro.com/zusammensetzen-von-zugferd-xml-und-pdf-zu-zugferd-rechnung/) --- ## F: Was muss ich in TAXType und TypeCode eintragen? URL: https://www.zugferdpro.com/f-was-muss-ich-in-taxtype-und-typecode-eintragen/ Date: 2014-11-30 Frage: Es gibt bei uns zwei Felder, bei denen wir nicht genau wissen, was für Werte erwartet werden. Es handelt sich um die Felder: ``` TaxType(bsp. Buyer.TAX(0).TAXType)undTypeCode(bsp. TradeSettlement.TradeTAX(0).TypeCode) ``` Können Sie mir hier weiterhelfen, was genau erwartet wird? Weglassen kann ich die Felder leider nicht, da ich dann eine Fehlermeldung erhalte. Antwort: In beide Felder gehört die Steuerart. In den meisten Fällen ist das VAT für MwSt. --- ## Wie übergebe ich die Lizenz an das ZUGFeRD SDK in VB6? URL: https://www.zugferdpro.com/wie-uebergebe-ich-die-lizenz-an-das-zugferd-sdk-in-vb6/ Date: 2014-11-29 Falls Sie “Late Binding” benutzen können Sie die Lizenz so übergeben: Dim ZUG As Object Set ZUG = CreateObject(“Aloaha_ZUGFeRD.XML”) If ZUG.Licensed(“IHR-LIZENZSCHLUESSEL”) = True Then Else End If Falls Sie die Aloaha ZUGFeRD Library referenziert haben: Dim ZUG As New Aloaha_ZUGFeRD.XML If ZUG.Licensed(“IHR-LIZENZSCHLUESSEL”) = True Then Else End If Falls ein Fehler auftritt überprüfen Sie bitte ob Sie das Objekt registriert haben: regasm Aloaha_ZUGFeRD.dll /codebase --- ## Wie übergebe ich die Lizenz an das ZUGFeRD SDK? URL: https://www.zugferdpro.com/wie-uebergebe-ich-die-lizenz-an-das-zugferd-sdk/ Date: 2014-11-29 Es gibt viele Stellen an der Sie die Lizenz übergeben können. Idealerweise übergeben Sie die Lizenz direkt wenn Sie das Objekt erstellen. Also zum Beispiel: Private alo As New Aloaha_ZUGFeRD.XML(“IHR-LIZENZSCHLUESSEL”) Die wichtigsten Funktionen unterstützen die Übergabe der Lizenz als optionalen Parameter. Zum Beispiel: call alo.MergeXMLIntoPDF(XMLPath, PDFPath, TargetPDFPath, True, OptionalFilePath, “IHR-LIZENZSCHLUESSEL”) Sie können jederzeit die Lizensierung testen oder die Lizenz übergeben indem Sie die Eigenschaft Licensed benutzen: if alo.Licensed(“IHR-LIZENZSCHLUESSEL”)=true else end if Bei Fragen zögern Sie bitte nicht info@zugferdpro.com zu kontaktieren --- ## Wie kann ich die ZUGFeRD Rechnungswährung auslesen? URL: https://www.zugferdpro.com/wie-kann-ich-die-rechnungswaehrung-auslesen/ Date: 2014-11-13 Business terms: BT-5 SDK methods: InvoiceCurrencyCode Das geht ganz einfach mit folgender Codezeile: ``` Dim InvoiceCurrency as string = alo.InvoiceCurrencyCode ``` --- ## Ich brauche einen einfachen Weg um an eine PDF Datei einen Anhang anzuhängen. URL: https://www.zugferdpro.com/ich-brauche-einen-einfachen-weg-um-an-eine-pdf-datei-einen-anhang-anzuhaengen/ Date: 2014-11-08 F: Ich brauche einen einfachen Weg um an eine PDF Datei einen Anhang anzuhängen. Kann ich dazu Ihre Bibliothek benutzen? A: Natürlich können Sie das. Es gibt bei uns eine einfache API in existierende PDF Dokumente Anhänge einzufügen oder zu extrahieren. Details [HIER](https://www.zugferdpro.com/hinzufuegen-beliebiger-anhaenge-zu-einer-existierenden-pdf-datei/) --- ## Erstellen des ZUGFeRD Objektes in VB.NET URL: https://www.zugferdpro.com/erstellen-des-zugferd-objektes/ Date: 2014-10-24 SDK methods: CreateInvoice, Licensed, TodayDate Sie erstellen das ZUGFeRD Object mit einer Codezeile: Dim alo As New Aloaha_ZUGFeRD.XML Sollte die Erstellung fehlschlagen bedeutet das das Objekt noch nicht im System registriert ist. Das machen Sie mit RegASM.exe (32 Bit): regasm Aloaha_ZUGFeRD.dll /codebase Falls Sie das Objekt direkt mit Daten “befüllen” möchten laden Sie bitte das Objekt so: ``` Dim ZUG As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing Dim key As String 'bitte neuen Testkey von info@aloaha.com anfordern key = "IHR-LIZENZSCHLUESSEL"   If alo.Licensed(key) = True Then      ZUG = alo.CreateInvoice("INV0815", "Rechnung gemäß Bestellung", alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , , "EUR") end if ``` Bitte nehmen Sie zur Kenntnis das für VB6/COM die Funktion [Create_Invoice](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) besser geeignet ist! Es gibt auch ein komplettes Codebeispiel für VB6/VBA/COM auf: [https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/](https://www.zugferdpro.com/erstellung-einer-zugferd-x-rechnung-xml-datei-via-com-schnittstelle-vb6-vba/) --- ## Erstellen des ZUGFeRD Objektes in VB6 URL: https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6/ Date: 2014-10-23 Da das ZUGFeRD Plugin ein .NET Objekt ist müssen Sie es zuerst mit RegASM registrieren. Danach können Sie es ganz einfach per “Late Binding” laden: Dim ZUG As Object set ZUG = CreateObject(“Aloaha_ZUGFeRD.XML”) Sollte die Erstellung fehlschlagen bedeutet das das Objekt noch nicht im System registriert ist. Das machen Sie mit RegASM.exe. regasm Aloaha_ZUGFeRD.dll /codebase --- ## Käufer und Verkäufer definieren: URL: https://www.zugferdpro.com/kaeufer-und-verkaeufer-definieren/ Date: 2014-10-23 Sie setzen den Käufer mit folgender Codezeile: call alo.WriteBuyer(“Buyer Intermedia GmbH”, “49479”, “Ibbenbüren”, “Grüner Weg 21”, “”, “DE”, “Company001″, “DE 08154711″) Sie setzen den Verkäufer mit folgender Codezeile: call alo.WriteSeller(“Musterfirma GmbH”, “PBK4711″, “Pembroke”, “Helgoland”, “45, Triq Gio”, “MT”, “MT0815″) --- ## Kontaktpersonen definieren URL: https://www.zugferdpro.com/kontaktpersonen-definieren/ Date: 2014-10-23 Ansprechpartner auf der Käuferseite setzen: call alo.WriteBuyerContactPerson(“Hans Mustermann”, “Einkauf”, “abc@domain.tld”, “+49 815 9435 4711″, “+49 815 9435 0815″) Ansprechpartner beim Verkauefer setzen: call alo.WriteSellerContactPerson(“Hänschen Klein”, “Verkauf”, “kontakt@domain.tld”, “+356 4711″, “+356 0815″) --- ## F: Was brauche ich wenn ich schon PDF/A Dateien habe? URL: https://www.zugferdpro.com/f-was-brauche-ich-wenn-ich-schon-pdfa-dateien-habe/ Date: 2014-10-22 A: Dann brauchen Sie NUR unser Toolkit. Die DLL enthält die Erstellung und das Lesen der XML Datein. Weiterhin kann die DLL die XML Dateien in das PDF einbetten bzw. extrahieren. Natürlich wandelt es PDFs auch direkt nach PDF/A --- ## ZUGFeRD – einheitliches Format für elektronische Rechnungen URL: https://www.zugferdpro.com/hello-world/ Date: 2014-10-17 Das Forum elektronische Rechnung Deutschland (FeRD) hat ein gemeinsames übergreifendes Format für elektronische Rechnungen erarbeitet, das für den Rechnungsaustausch zwischen Unternehmen, Behörden und Verbrauchern genutzt werden kann und den Austausch strukturierter Daten zwischen Rechnungssteller und Rechnungsempfänger ermöglicht. Das ZUGFeRD-Rechnungsformat erlaubt es, Rechnungsdaten in strukturierter Weise in einer PDF Datei zu übermitteln und diese ohne weitere Schritte  auszulesen und zu verarbeiten. Das FeRD-Rechnungsformat wurde von Unternehmen aus der Automobilindustrie, dem Einzelhandel, dem Bankensektor, der Software-Industrie, aber auch vom öffentlichen Sektor erarbeitet. Es entspricht den Anforderungen der internationalen Standardisierung und kann auch im grenzüberschreitenden europäischen und internationalen Rechnungsverkehr aufgenommen und angewendet werden. Die finale Version 1.0 des Datenmodells wurde am 25.6.2014 veröffentlicht. --- ## F: Kann ich mit der ZUGFeRD Bibliothek PDF/A Dateien erstellen? URL: https://www.zugferdpro.com/f-kann-ich-mit-der-aloaha-zugferd-bibliothek-pdfa-dateien-erstellen/ Date: 2014-10-02 A: Natürlich geht das. Sie finden in der XML Klasse der ZUGFeRD Bibliothek die Funktion PDF2ASCII. Im Prinzip ist diese Funktion ein Wrapper für die identische Funktion der Aloaha PDF Suite: Das impliziert natürlich das Sie für die PDF/A Erstellung eine lizensierte Aloaha PDF Suite benötigen! Um die Funktion in .NET zu benutzen referenzieren Sie einfach die .NET Aloaha ZUGFeRD dll aus c:\program files (86)\Common files\Aloaha\dotNetLibs\Aloaha_ZUGFeRD.dll. Falls Sie das COM Objekt benötigen um die Bibliothek in VBS, Delphi, vb6, etc. zu benutzen müssen Sie die dll eventuell mit Regasm registrieren. Dazu öffnen Sie bitte ein DOS Fenster mit “Als Administrator ausführen”, gehen in den Ordner und rufen Regasm /Codebase Aloaha_ZUGFeRD.dll auf. VBS Beispielcode: ``` dim pdf Dim aText aText="test Invoice"+vbcrlf+"Company A"+vbcrlf+"@@newpage@@"+vbcrlf+vbcrlf+vbcrlf+"test3"+vbcrlf+"test4"+vbcrlf aText=AText+"test5"+vbcrlf+”test6"+vbcrlf+chr(12)+vbcrlf+"test7"+vbcrlf+"test8"+vbcrlf set pdf = createobject("Aloaha_ZugFeRD.XML") msgbox pdf.ascii2pdf(cstr(aText),"c:\output.pdf","Courier", 24,12) set pdf = nothing ``` --- ## F: Was benötige ich, um ZUGFeRD-Dateien zu lesen? URL: https://www.zugferdpro.com/f-was-benoetige-ich-um-zugferd-dateien-zu-lesen/ Date: 2014-09-18 SDK methods: FillZUGFeRD_Structure, Licensed, ZUGFeRD_Structure A: Um ZUGFeRD-PDFs oder -XML-Dateien zu lesen, benötigen Sie lediglich unser Toolkit: Mehr Informationen finden Sie unter: [https://www.zugferdpro.com/tooldownloads/](https://www.zugferdpro.com/tooldownloads/) Ein Codebeispiel zur Extrahierung der XRechnungs-XML finden Sie unter: [Wie kann ich die XML Datei aus der PDF Rechnung extrahieren?](https://www.zugferdpro.com/wie-kann-ich-die-xml-datei-aus-der-pdf-rechnung-extrahieren/) Sie können dafür auch unsere Web-API verwenden: [Webbasiert ZUGFeRD XML extrahieren und anzeigen](https://www.zugferdpro.com/webbasiert-zugferd-xml-extrahieren-und-anzeigen/) Um die ZUGFeRD-Struktur direkt einzulesen, verwenden Sie bitte folgenden Code: ``` Const License As String = "XXX" Dim alo As New Aloaha_ZUGFeRD.XML Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing Dim InvoicePath As String = "c:\rechnung.pdf" 'Typ XML geht auch If alo.Licensed(License) = True Then alo.FillZUGFeRD_Structure(InvoicePath) 'please note that ZUGFeRD_Structure is not supported by COM zug = alo.ZUGFeRD_Structure End If ``` Sie wollen die Rechnungsposten aus der ZUGFeRD bzw. X-Rechnung auslesen? Dann lesen Sie bitte [“Posten aus der ZUGFeRD bzw. X-Rechnung auslesen”](https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/) --- ## F: Was brauche ich wenn ich schon eine Software zur PDF/A Erstellung habe? URL: https://www.zugferdpro.com/f-was-brauche-ich-wenn-ich-schon-eine-software-zur-pdfa-erstellung-habe/ Date: 2014-09-18 A: Wenn Sie schon eine Software zur PDF/A Erstellung haben brauchen Sie nur das Toolkit. Die PDF Suite brauchen Sie dann nicht zu installieren. --- ## Der Unterschied zwischen “Early Binding” und “Late Binding” URL: https://www.zugferdpro.com/der-unterschied-zwischen-early-binding-und-late-binding/ Date: 2014-09-03 Frühes Binden (Early Binding) und spätes Binden (Late Binding) beziehen sich auf zwei unterschiedliche Methoden, wie ein Programm mit COM-Objekten (Component Object Model) umgeht. #### Frühes Binden (Early Binding): - Definition : Beim frühen Binden wird der Typ des COM-Objekts bereits zur Entwicklungszeit festgelegt. Der Code weiß also schon beim Schreiben, mit welcher Art von Objekt er arbeiten wird. - Vorteile : Schneller : Der Code läuft schneller, weil das Programm genau weiß, welche Methoden und Eigenschaften es ansprechen muss. Fehlerüberprüfung : Fehler im Code (wie z.B. Tippfehler in Methoden oder Eigenschaften) können bereits während des Schreibens erkannt werden. IntelliSense-Unterstützung : In vielen Entwicklungsumgebungen bekommt man Vorschläge und Autovervollständigungen, was das Programmieren einfacher macht. - Nachteil : Der Code ist weniger flexibel, weil er genau an diesen einen Typ gebunden ist. Wenn sich das Objekt ändert, muss auch der Code angepasst werden. #### Spätes Binden (Late Binding): - Definition : Beim späten Binden wird der Typ des COM-Objekts erst zur Laufzeit festgelegt. Das Programm entscheidet also erst während der Ausführung, welches Objekt verwendet wird. - Vorteile : Flexibler : Der Code kann mit verschiedenen Typen von Objekten arbeiten, ohne vorher angepasst zu werden. Abwärtskompatibilität : Es ist einfacher, den Code mit älteren oder unbekannten COM-Objekten kompatibel zu halten. - Nachteile : Langsamer : Weil das Programm erst zur Laufzeit herausfinden muss, welche Methoden und Eigenschaften das Objekt hat, ist die Ausführung etwas langsamer. Mehr Fehlerpotenzial : Fehler im Code werden oft erst zur Laufzeit entdeckt, was die Fehlersuche schwieriger machen kann. Keine IntelliSense: In vielen Entwicklungsumgebungen gibt es keine automatische Unterstützung beim Schreiben des Codes. Zusammengefasst: Frühes Binden ist schneller und sicherer, aber weniger flexibel, während spätes Binden flexibler, aber langsamer und anfälliger für Fehler ist. --- ## Wie kann ich die ZUGFeRD PaymentReference auslesen? URL: https://www.zugferdpro.com/wie-kann-ich-die-zugferd-paymentreference-auslesen/ Date: 2014-08-13 Business terms: BT-83 SDK methods: PaymentReference Wie kann ich die ZUGFeRD PaymentReference auslesen? ``` Dim PaymentReference as string = alo.PaymentReference ``` --- ## F: Warum ZUGFeRD? URL: https://www.zugferdpro.com/f-warum-zugferd/ Date: 2014-07-22 ZUGFeRD ist das einfachste Format für den Versand von elektronischen Rechnungen. Das neue Format erleichtert die Einhaltung organisatorischer Richtlinien und rechtlicher Anforderungen (z.B. die Prüfung nach §14 UStG). Rechnungen werden in einem PDF-Format versandt. Die Daten werden zusätzlich standardisiert im XML-Format automatisch mit übertragen. Das einheitliche Format ermöglicht die automatisierte Buchung und gesetzeskonforme Archivierung der Rechnungen. Besonders kleine und mittelständische Unternehmen können mit ZUGFeRD ihre Prozesse erheblich vereinfachen. Ziel ist es, dass künftig jede Finanz- und Buchhaltungssoftware automatisch Rechnungen nach dem neuen Verfahren erzeugen kann. --- ## Setting-up the second European Multi-Stakeholder Forum on Electronic Invoicing (einvoicing) URL: https://www.zugferdpro.com/setting-up-the-second-european-multi-stakeholder-forum-on-electronic-invoicing-einvoicing/ Date: 2014-06-25 [C(2014) 4142 final](https://www.zugferdpro.com/wp-content/uploads/2015/10/C_2014_4142_F1_COMMISSION_DECISION_EN_V9_P1_771390.pdf) Dropbox URL: [https://dl.dropboxusercontent.com/u/20338532/neverdelete/ZUGFeRD/C_2014_4142_F1_COMMISSION_DECISION_EN_V9_P1_771390.pdf](https://www.zugferdpro.com/wp-content/uploads/2015/10/C_2014_4142_F1_COMMISSION_DECISION_EN_V9_P1_771390.pdf) --- ## DIRECTIVE 2014/55/EU OF THE EUROPEAN PARLIAMENT AND OF THE COUNCIL URL: https://www.zugferdpro.com/directive-201455eu-of-the-european-parliament-and-of-the-council/ Date: 2014-04-16 on electronic invoicing in public procurement: [http://eur-lex.europa.eu/legal-content/EN/TXT/?qid=1401623379226&uri=CELEX:32014L0055](https://eur-lex.europa.eu/legal-content/EN/TXT/?qid=1401623379226&uri=CELEX:32014L0055) On 16 April 2014, the European Parliament and the Council reached agreement on the Directive on e-invoicing in public procurement. The Directive aims to facilitate the use of e-invoicing in Europe – and therefore contribute to its greater uptake – by removing market barriers resulting from insufficient interoperability between e-invoicing systems and setting out rules for the reception of e-invoices by the public sector. Specifically, the Directive calls for the development of a European standard for e-invoicing, and obliges all contracting authorities and contracting entities across the EU to receive and process e-invoices complying with the future standard. Public entities which have implemented e-procurement report savings of between 5% and 20% of their procurement expenditure. Extrapolating 5% reductions to the total EU public expenditure for goods, works, and services would result in about €100 billion euro of savings per year. With regard to e-invoicing, according to studies carried out by the Member States, the potential savings are several orders of magnitude larger than the implementation costs, and the initial investment can be amortised within a very short period of time (1 to 2 years maximum, in many cases even shorter). Overall, the Commission estimates that implementation of e-invoicing in public procurement across the EU could generate savings of up to €2.3 billion a year. Aloaha provides a complete toolkit for automating procurement processes through its Aloaha ZUGFeRD SDK. --- ## RICHTLINIE 2014/55/EU DES EUROPÄISCHEN PARLAMENTS UND DES RATES URL: https://www.zugferdpro.com/richtlinie-201455eu-des-europaischen-parlaments-und-des-rates/ Date: 2014-04-16 über die elektronische Rechnungsstellung bei öffentlichen Aufträgen: [http://eur-lex.europa.eu/legal-content/DE/TXT/?qid=1401623379226&uri=CELEX:32014L0055](https://eur-lex.europa.eu/legal-content/DE/TXT/?qid=1401623379226&uri=CELEX:32014L0055) Im April 2014 wurde obige EU Richtlinie zur Einführung der verpflichtenden elektronischen Rechnung im Rahmen von öffentlichen Beschaffungen innerhalb der EU eingeführt. Aktuell ist die Akzeptanzrate von elektronischen Rechnungen innerhalb der EU leider noch sehr gering – lediglich 4 – 15% aller Rechnungen innerhalb der EU werden heute elektronisch ausgetauscht. Die neue EU Richtlinie soll dies nun entscheidend ändern. Unter anderem durch die Einführung eines einheitlichen EU-weiten Rechnungsstandards wie zum Beispiel ZUGFeRD. Die einzelnen Mitgliedsstaaten müssen die EU-Richtlinie bis spätestens 27. November 2018 in nationales Recht umgesetzt haben. Nachdem ein einheitlicher Standard fehlt, wählten die einzelnen EU Mitgliedsstaaten für die Realisierung ihrer e-Rechnungslösungen bisher jeweils unterschiedliche Standards. Dies lässt sich bereits heute bei der Lösung in Österreich und in Deutschland sehr gut erkennen – in Österreich wählte man den ebInterface Standard – in Deutschland wird man aller Voraussicht nach auf den ZUGFeRD Standard setzen. Die damit verbundenen Probleme liegen auf der Hand. Will man als italienisches Unternehmen in öffentlichen Ausschreibungen in Frankreich, Deutschland und Österreich teilnehmen, so hat man in allen drei Ländern in unterschiedlichen Rechnungsformaten elektronische Rechnungen zu legen. Vor allem für kleine und mittlere Unternehmen ein erheblicher Aufwand und ein wesentlicher Wettbewerbsnachteil gegenüber großen Unternehmen. Eines der erklärten Ziele der Europäischen Union ist es jedoch genau diese Art von Barrieren zu reduzieren bzw. ganz zu entfernen. ### Die Lösung heißt: “European Standard on Electronic Invoicing” Um die oben beschriebenen Hürden für den grenzüberschreitenden Handel zu reduzieren, plant die EU die Einführung eines einheitlichen EU-weiten e-Rechnungsstandards. Dabei soll jedoch nicht der x-te neue Rechnungsstandard entworfen werden, sondern ein semantisches Datenmodell. Dieses semantische Datenmodell definiert Kernelemente, die eine Rechnung immer enthalten muss. Aus der EU Richtlinie geht auch klar hervor, dass eine elektronischen Rechnung nur dann Nutzen stiftet, wenn sie automatisch erzeugt, versendet, erhalten und verarbeitet werden kann. Diese Anforderungen erfüllen ausschließlich maschinenverarbeitbare Rechnungsformate wie zB XML oder CSV. Bildhafte Darstellungen einer Rechnung, wie beispielsweise ein PDF, zählen dezidiert nicht dazu. Das erklärte Ziel der EU ist es nicht einen neuen e-Rechnungsstandard zu erfinden. Im Gegenteil – der neue European Standard on Electronic Invoicing soll sich an bestehenden Lösungen und Standards orientieren. Also auch an der deutschen Lösung ZUGFeRD. --- ## Elektronischer Rechnungsaustausch mit ZUGFeRD URL: https://www.zugferdpro.com/elektronischer-rechnungsaustausch-mit-zugferd/ Date: 2014-03-22 Das leidige Problem der nur schleppenden Akzeptanz beim elektronischen Rechnungsaustausch will das Forum elektronische Rechnung Deutschland, kurz FeRD, gezielt angehen und hier das schaffen, was in der Vergangenheit nur bruchstückhaft in Wirtschaft und Verwaltung gelungen ist: die Schaffung eines zugleich einfach zu verwendenden und dennoch leistungsfähigen Rechnungsaustauschformats. KMUs und Selbständige kämpfen noch immer mit der Flut an Papierrechnungen. Das Steuervereinfachungsgesetz von 2011 brachte hier leider kein Erleichterung sondern eher eine größere “Verwirrung”. Weiterhin wirkt sich das Steuervereinfachungsgesetz hauptsächlich auf der Senderseite aus. Beim Empfänger einer elektronischen Rechnung führt diese elektronische Rechnung jedoch zu den gleichen manuellen Erfassungstätigkeiten wie im Papierfall. Einen echten Vorteil hat der Empfänger nur, wenn die Datenerfassung und damit der Medienbruch bei der Übertragung der Rechnungsdaten in seine Buchhaltung, Faktura o.ä. aufgehoben werden kann. Die hierfür bereits bei den Großanwendern eingesetzten EDIFACT-Lösungen taugen allerdings nicht für die heterogene und wenig strukturierte Faktura-Welt der KMUs. Die Idee von FeRD, diesem Zusammenschluss von Verbänden, Firmen und Behörden unter dem Dach des BMWi zielt darauf ab, ein hybrides Dokumentenformat zu spezifizieren, dass sich einerseits so verarbeten lässt wie Papier („elektronisches Papier“) und andererseits die notwendigen Rechnungsdaten so mit sich führt, dass diese vollautomatisch importiert, geprüft und verarbeitet werden können. Das Arbeitspaket AP3 von FeRD unter der Leitung von Dr. Bernd Wild, der hier als Vertreter der PDF Association und des GFaR-Verbands tätig ist, erarbeitet derzeit die erste Version des sogenannten ZUGFeRD Rechnungsdatenstandards, der auf der CeBIT 2013 beim BITKOM zusammen mit Bundesinnenminister Friedrich und Bundeswirtschaftsminister Rösler erstmalig präsentiert wird. Kernpunkt des Standards ist die Verwendung von PDF/A-3 als Rahmendokument zur visuellen Darstellung der Rechnung zusammen mit einer eingebetteten XML-Datei, die die strukturierten Rechnungsdaten zur maschinellen Auswertung enthält. Damit können die Vorteile, die der neue ISO-Standard 19005-3 bietet, künftig in eine zunächst in Deutschland flächendeckende Anwendung fließen. Die Entwicklung diese Standards wird auch auf EU-Ebene vorangetrieben und von etlichen europäischen Mitgliedsstaaten aufmerksam verfolgt. --- ## Certificate encrypted secure ZIP (SecZIP) URL: https://www.zugferdpro.com/certificate-encrypted-secure-zip-seczip/ Date: 2014-03-05 With our certificate encrypted ZIP you can use one or multiple certificates to encrypt your valuable ZIP archives. Features: - Strong encryption AES128 and AES256 - Password and Certificate based encryption supported - Hybrid mode supported. You can use password or certificate to open ZIP - Certificate generator included in case you do not have a certificate - Portable – no setup required - Opening and extracting freeware - Password encryption is freeware Support SecZIP and get a [license](mailto:info@aloaha.com?subject=SecZIP%20Lizenz)! A small demonstration video can be found on: [https://www.youtube.com/watch?v=zwzKYdjLb8I](https://www.youtube.com/watch?v=zwzKYdjLb8I) You can download the portable tool from: [https://www.zugferdpro.com/downloads/seczip.zip](https://www.aloaha.com/download/seczip.zip) --- ## Q: How do I use the ZUGFeRD SDK? URL: https://www.zugferdpro.com/q-how-do-i-use-the-zugferd-sdk/ Date: 2014-02-22 Business terms: BT-13, BT-14 SDK methods: AddBuyerOrderReferencedDocument, AddDeliveryNote, AddDocumentNote, AddLogisticsServiceCharge, AddPaymentMeans, AddProduct_Comfort_Quick, AddTradeTax, FillZUGFeRD_Structure, PaymentMeansCode, SaveXML, WriteBuyer, WriteBuyerContactPerson, WriteSeller, WriteSellerContactPerson, WriteTotals To use the SDK to create or read ZUGFeRD compliant XML Invoices is pretty easy. First you need to Reference the Object “Aloaha ZUGFeRD Library” or “Aloaha_ZUGFeRD.xml” in .NET. In case your language requires to reference the library file direct please use Aloaha_ZUGFeRD.dll (or Aloaha_ZUGFeRD.pdb) You create the .NET Object with a code line like: Dim alo As New Aloaha_ZUGFeRD.XML You might want to fill the .NET Object directly with data. In that case please create the object with: Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing To create and prefill the object please call: zug = alo.CreateInvoice(“INV0815″, “Rechnung gemäß Bestellung”, alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , , “EUR”) In case you are NOT planning to fill some data objects manually you can just call the function as VOID call alo.CreateInvoice(“INV0815″, “Rechnung gemäß Bestellung”, alo.TodayDate.Document_Date, alo.TodayDate.Document_DateFormat, , , “EUR”) It is possible to optionally add a note to the invoice: ``` alo.AddDocumentNote(“Notiztext”, “AAA”) ``` Obviously you need to add the details for the buyer: ``` alo.WriteBuyer(“Buyer Intermedia GmbH”, “49479”, “Ibbenbüren”, “Rudolf-Diesel-Straße”, “”, “DE”, “Wrock001″, “DE 08154711″) ``` and also the sellers details: ``` alo.WriteSeller(“Aloaha”, “PBK4711″, “Pembroke”, “Helgoland”, “45, Triq Gio”, “MT”, “MT0815″) ``` Optionally you can also add the contact person of the buying party: ``` alo.WriteBuyerContactPerson(“Hans Mustermann”, “Einkauf”, “mw@domain.tld”, “+49 5451 9435 4711″, “+49 5451 9435 0815″) ``` Even documents, related to the purchase, can be added optionally: ``` alo.AddBuyerOrderReferencedDocument(“08154711″, “20130608”, “102”) ``` You can write your Invoice Number with: (from version 8.0.0.10) alo.AddSellerAssignedID(“Rechungsnummer”) The order reference you can write with: (from version 8.0.0.10) alo.AddBuyerAssignedID(“Bestellnummer”) Since even the sellers side can have a contact person you can add that person with another single line: ``` alo.WriteSellerContactPerson(“Haenschen Klein”, “Verkauf”, “kontakt@domain.tld”, “+356 4711″, “+356 0815″) ``` Delivery notes  and payment references can be added: ``` alo.AddDeliveryNote(“3245″, “20130608”, “102”) ``` alo.PaymentReference = “Invoice No. INV08154711″ Many different payment means are possible. Here as an example a direct debit and a transfer ``` alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.DirectDebit), “Lastschrift”, “iban”, “sparkasse”, “bic”, “BLZ”, “Bankname”, True) ``` alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.DebitTransfer_SEPA), “Überweisung”, “MT67 MMEB 4475 0851″, “”, “MMXX MTXX”, “”, “HSBC”, False) The trade tax should be inserted: ``` alo.AddTradeTax(“3.06″, “EUR”, “170”, “EUR”, “VAT”, “S”, “18”, “”) ``` and maybe even some logistics charges: ``` alo.AddLogisticsServiceCharge(“Post”, “1”, “EUR”, “VAT”, “S”, “18”) ``` A MUST are obviously the invoice totals: ``` alo.WriteTotals(100, 94.4, 84.4, 80, 14.4, 20, 10) ``` There are many different functions to add products to the invoice. One of the most simple functions is: ``` alo.AddProduct_Comfort_Quick(“Kaffee”, “Getraenk”, “AloKaff01″, “nicht rabattierfähig”, 10, “Tasse(n)”, 1.7, “EUR”, 0, “”, “18”, “VAT”) ``` In case you need to review or edit some object values directly assign it to zug: zug = alo.ZUGFeRD_Structure Edit the object and add a note to an invoice item: ReDim zug.TradeItems(0).Note(0 To 0) zug.TradeItems(0).Note(0).SubjectCode = “SCode” zug.TradeItems(0).Note(0).Content = “Wir erlauben uns Ihnen folgende Positionen aus der Lieferung Nr. 2013-51112 in Rechnung zu stellen” In case you edited directly the object you need to write it back: alo.ZUGFeRD_Structure = zug And last but not least you have to write the ZUGFeRD Data to a file: ``` alo.SaveXML(“c:\test.xml”) ``` To read an existing ZUGFeRD XML into the .NET Object please call: ``` alo.FillZUGFeRD_Structure(“c:\test.xml”) ``` assign the data with: alo.ZUGFeRD_Structure = zug and save it back with ``` alo.SaveXML(“c:\test.xml”) ``` Most of the functions are self explaining.  But should you have any questions or suggestions do not hesitate to ask here in the Blog or contact [info@zugferdpro.com](mailto:info@zugferdpro.com) --- ## CSV Datei “allowances.csv” URL: https://www.zugferdpro.com/csv-datei-allowances-csv/ Date: 2004-09-07 Business terms: BG-20, BT-92, BT-95, BT-96, BT-97 Diese Datei wird für unseren [CSV Importer](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) benutzt. Wertenamen sind NICHT Case-Sensitive! chargeindicatorIndikator für Abschlag, BG-20-0 actualamountBetrag des Abschlags auf Dokumentenebene, BT-92 reasonGrund für den Abschlag auf Dokumentenebene, BT-97 taxtypecodeArt der Steuer (Code), BT-95-0 taxcategorycodeCode für die Umsatzsteuerkategorie des Abschlages auf Dokumentenebene, BT-95 taxpercentUmsatzsteuersatz für den Abschlag auf Dokumentenebene, BT-96 Sollten Sie weitere Werte benötigen zögern Sie bitte nicht uns zu kontaktieren! --- ## CSV Datei “buyer.csv” URL: https://www.zugferdpro.com/csv-datei-buyer-csv/ Date: 2004-09-07 Business terms: BT-44, BT-50, BT-53, BT-52, BT-54, BT-55, BT-46, BT-56, BT-57, BT-58, BT-91 Diese Datei wird für unseren [CSV Importer](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) benutzt. Wertenamen sind NICHT Case-Sensitive! WertKommentar NameFirmenname, BT-44 Street1,  Street2,  Street3Straße / Haus-Nr., BT-50 postcodePLZ, BT-53 cityOrt, BT-52 stateBundesland, BT-54 countryLand, BT-55 IDKennung des Käufers, BT-46 globalidGlobale Kennung des Käufers, BT-46-0 globalidschemeSchema der globalen Kennung, BT-46-1 departmentAbteilung personnameAnsprechpartner, BT-56 (wichtig, erforderlich) phoneTelefon, BT-57 emailE-Mail-Adresse, BT-58 (wichtig, erforderlich) ibanIBAN bei Lastschrift, BT-91 Ab Version 9.0.0.102 gibt es neue optionale Parameter -h deliverto.csv und -g deliverfrom.csv mit identischem Aufbau wie die buyer.csv. Sollten Sie weitere Werte benötigen zögern Sie bitte nicht uns zu kontaktieren! --- ## CSV Datei “items.csv” URL: https://www.zugferdpro.com/csv-datei-items-csv/ Date: 2004-09-07 Business terms: BT-155, BT-157, BT-153, BT-154, BT-127, BT-129, BT-130, BT-146, BT-149, BT-150, BT-131, BT-147, BT-148, BT-151, BT-152 Diese Datei wird für unseren [CSV Importer](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) benutzt. Wertenamen sind NICHT Case-Sensitive! WertKommentar AssignedIDArtikelnummer, BT-155 GlobalIDArtikelkennung (EAN), BT-157 GlobalIDSchemeSchema der Artikelkennung, BT-157-ID productnameProduktbezeichnung, BT-153 descriptionProduktbeschreibung, BT-154 itemnoteFreitext, BT-127 quantityMenge, BT-129 basisunitCode der Maßeinheit, BT-130 netpricePreis pro Einheit (netto), BT-146 netbasisquantityBasismenge zum Nettopreis, BT-149 netbasisunitCode der Maßeinheit der Basismenge, BT-150 totalamountGesamtpreis (netto), BT-131 allowanceamountRabatt (netto), BT-147 allowancepercentRabatt in Prozent, BT-X-34 allowancebasisamountBasisbetrag des Rabatts, BT-X-35 grosspriceListenpreis (netto), BT-148 basisquantityAnzahl der Einheit, BT-149 unitCode der Maßeinheit, BT-150 taxcategorycodeUmsatzsteuer, BT-151 taxtypecodeSteuerart (Code), BT-151-0 taxpercentUmsatzsteuersatz in %, BT-152 deliverynoteLieferscheinnummer, BT-X-92 itemorderdocBestellnummer, BT-X-21 itemorderdocdateBestelldatum, BT-X-22 itemcontractdocVertragsnummer, BT-X-24 itemcontractdocdateVertragsdatum, BT-X-26 itemquotationdocAngebotsnummer, BT-X-310 itemquotationdocdateAngebotsdatum, BT-X-312 Sollten Sie weitere Werte benötigen zögern Sie bitte nicht uns zu kontaktieren! --- ## CSV Datei “seller.csv” URL: https://www.zugferdpro.com/csv-datei-seller-csv/ Date: 2004-09-07 Business terms: BT-27, BT-35, BT-38, BT-37, BT-39, BT-40, BT-29, BT-41, BT-42, BT-43, BT-81, BT-82, BT-84, BT-86, BT-85 Diese Datei wird für unseren [CSV Importer](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) benutzt. Wertenamen sind NICHT Case-Sensitive! WertKommentar NameFirmenname, BT-27 Street1,  Street2,  Street3Straße / Haus-Nr., BT-35 postcodePLZ, BT-38 cityOrt, BT-37 stateBundesland, BT-39 countryLand, BT-40 IDKennung des Verkäufers, BT-29 globalidGlobaler Identifier des Verkäufers, BT-29-0 globalidschemeSchema der globalen Kennung, BT-29-1 departmentAbteilung personnameAnsprechpartner, BT-41 (wichtig, erforderlich) phoneTelefon, BT-42 emailE-Mail-Adresse, BT-43 (wichtig, erforderlich) paymentmeansCode für das Zahlungsmittel, BT-81 paymentdescriptionZahlungsmittel, BT-82 ibanIBAN, BT-84 bicBIC, BT-86: accountnameKontoinhaber, BT-85 Sollten Sie weitere Werte benötigen zögern Sie bitte nicht uns zu kontaktieren! --- ## CSV Datei “totals.csv” URL: https://www.zugferdpro.com/totals-csv/ Date: 2004-09-07 Business terms: BT-23, BT-1, BT-3, BT-5, BT-72, BT-73, BT-74, BT-10, BT-11, BT-12, BT-13, BT-14, BT-16, BT-18, BT-9, BT-106, BT-107, BT-108, BT-109, BT-111, BT-112, BT-113, BT-114, BT-115, BT-19, BT-20, BT-89, BT-90, BT-117, BT-118, BT-116, BT-119, BT-120, BT-21, BT-22, BT-25, BT-26, BT-83, BT-125, BT-122, BT-123, BT-124 Diese Datei wird für unseren [CSV Importer](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) benutzt. Wertenamen sind NICHT Case-Sensitive! WertKommentar BusinessProcessSpecifiedDocumentContextParameterGeschäftsprozesstyp, BT-23, zum Beispiel: urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 invoiceidRechnungsnummer, BT-1 typeRechnungsart, BT-3 currencyWährung, BT-5, z.B.: EUR invoicedateRechnungsdatum, BT-1 DeliveryDateTatsächliches Lieferdatum, BT-72 BillingPeriodStartStart Abrechnungszeitraum, BT-73 BillingPeriodEndEnde Abrechnungszeitraum, BT-74 leitwegidLeitwegID, BT-10 SpecifiedProcuringProjectIDProjektreferenz, BT-11 SpecifiedProcuringProjectNameProjektname, BT-11-0 ContractReferencedDocumentIDVertragsreferenz, BT-12 BuyerOrderReferencedDocumentIDBestellreferenz, BT-13 SellerOrderReferencedDocumentIDAuftragsnummer, BT-14 DespatchAdviceReferencedDocumentLieferavisreferenz, BT-16 DespatchAdviceReferencedDocumentDateLieferavisdatum, BT-X-200 AdditionalReferencedDocumentIDDetails zum berechneten Objekt, BT-18 AdditionalReferencedDocumentTypeCodeDetails zum berechneten Objekt, BT-18-0 AdditionalReferencedDocumentReferenceTypeCodeDetails zum berechneten Objekt, BT-18-1 duedateFälligkeitsdatum, BT-9 LineTotalAmountSumme aller Positionen, BT-106 AllowanceTotalAmountSumme Nachlässe, BT-107 ChargeTotalAmountSumme Zuschläge, BT-108 TaxBasisTotalAmountGesamtsumme, BT-109 TaxTotalAmountSumme Umsatzsteuer in Abrechnungswährung, BT-111 GrandTotalAmountGesamtsumme, BT-112 TotalPrepaidAmountGezahlter Betrag, BT-113 RoundingAmountRundungsbetrag, BT-114 DuePayableAmountFälliger Betrag, BT-115 AccountingAccountKontierungsinformation / Kostenstelle, BT-19 PaymentTermsSkonto, weitere Zahlungsbed., BT-20 DirectDebitMandateIDLastschrift Mandatsreferenznr., BT-89 CreditorReferenceIDGläubiger ID, BT-90 TAXCalculatedAmountUmsatzsteuerbetrag, BT-117 TAXTypeCodeVAT type code, VAT, BT-118-0 TAXCategoryCodeVAT category code, S, BT-118 TAXBasisAmountTAX Gesamtsumme, BT-116 TAXRateApplicablePercentUmsatzsteuersatz, BT-119 TAXExemptionReasonBefreiungsgrund, BT-120 DeliveryNoteLieferscheinreferenz DeliveryNoteDateLieferscheindatum InvoiceNoteCodeBemerkung zur Rechnung, Betreff, BT-21 InvoiceNoteBemerkung zur Rechnung, Bemerkung, BT-22 PrecedingInvoiceNumberVorausgegangene Rechnung, BT-25 PrecedingInvoiceDateVorausgegangenes Rechnungsdatum, BT-26 GenericInfoAAI (General information), BT-21 GenericCommentAAI (General information), BT-22 RegulatoryInformationREG, Bemerkung, BT-22 LegalInformationABL, Bemerkung, BT-22 TAXInformationTXD, Bemerkung, BT-22 CustomsInformationCUS, Bemerkung, BT-22 PriceConditionsAAK, Bemerkung, BT-22 PaymentReferenceVerwendungszweck, BT-83 AdditionalReferencedDocumentFilePathPfad für AttachmentBinaryObject, BT-125 AdditionalReferencedDocumentFileIDKennung der rechnungsbegründenden Unterlage, BT-122 AdditionalReferencedDocumentFileTypeCodeTyp des referenzierten Dokuments, BT-122-0 AdditionalReferencedDocumentFileNameBeschreibung der rechnungsbegründenden Unterlage, BT-123 AdditionalReferencedDocumentFileURIIDBezugsort der rechnungsbgegründenden Unterlage, BT-124 Sollten Sie weitere Werte benötigen zögern Sie bitte nicht uns zu kontaktieren! --- ## Aloaha ZUGFeRD GUI (EN) URL: https://www.zugferdpro.com/aloaha-zugferd-gui-en/ With our portable [Aloaha ZUGFeRD GUI](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip) you can easily create, modify or read ZUGFeRD XML or PDF/A. The GUI is completely based on our [ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/). On request we can supply you with the sources of our GUI if you hold a valid SDK License. Please also note that the Aloaha ZUGFeRD GUI License is also valid for our Aloaha PDF Editor. [Buy now](https://secure.2checkout.com/order/checkout.php?PRODS=52388127&QTY=1&CART=1) Features: - Create, modify and read ZUGFeRD XML Data - Directly create or import ZUGFeRD PDF/A Data - ZUGFeRD XML Data can be embedded into existing PDF files - ZUGFeRD XML Data can be exported from existing ZUGFeRD PDF/A invoices - Create PDF/A Invoice directly with a DOCX template - Portable so that no installation is required You can download run the ZUGFeRD GUI from the following URL: [https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip) Please note that the stand alone GUI needs to be started once with elevated rights. As an alternative you can use the installer version below: The installer version is available at: [https://www.aloaha.com/download/aloaha_zugferdgui.zip](https://www.aloaha.com/download/aloaha_zugferdgui.zip) Please note that the GUI is also included in our Aloaha PDF Reader and Editor direkt enthalten. You find it in: Document -> Show ZUGFeRD Data Should you have any further questions please do not hesitate to contact us via info@aloaha.com or the contact form below: --- ## Automatische XML nach PDF/A Konvertierung URL: https://www.zugferdpro.com/automatische-xml-nach-pdfa-konvertierung/ ### Automatische XML nach PDF/A Konvertierung Mit der [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) und dem [Aloaha ZUGFeRD SDK](https://www.zugferdpro.com/tooldownloads/) ist es möglich direkt ein ZUGFeRD XML in ein PDF/A zu konvertieren. Dazu müssen Sie ein Winword DOCX Template mit [Platzhaltern](https://www.zugferdpro.com/platzhalter-fuer-die-direkte-zugferd-xml-nach-pdfa-konvertierung/) erstellen. Hier ein Beispiel für solch ein Template: [AloahaZUGFeRDDOCXTemplateEUR_VAT](https://www.zugferdpro.com/wp-content/uploads/2016/06/TemplateEUR_VAT.docx) Natürlich geht das auch via API: [https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-oder-ein-pdf-dokument-umwandeln/](https://www.zugferdpro.com/xrechnungs-xml-direkt-in-eine-winword-datei-oder-ein-pdf-dokument-umwandeln/) In der Aloaha ZUGFeRD GUI können Sie das DOCX Template ganz einfach mit dem ZUGFeRD XML in ein PDF/A zusammenführen: Konvertiere ZUGFeRD XML direkt nach PDF/A --- ## Register libraries for Delphi URL: https://www.zugferdpro.com/zugferd/register-libraries-for-delphi/ SDK methods: SealAndFlatten Komplette Anleitung mit Codebeispielen: [ZUGFeRD und XRechnung mit Delphi erstellen – Late und Early Binding (ab Delphi 5)](https://www.zugferdpro.com/zugferd-xrechnung-mit-delphi-erstellen/); für Visual Basic: [ZUGFeRD und XRechnung mit VB6, VB5 und VBA erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-vb6-vba-erstellen/); für Visual FoxPro: [ZUGFeRD und XRechnung mit Visual FoxPro 9 erstellen](https://www.zugferdpro.com/zugferd-xrechnung-mit-visual-foxpro-erstellen/). Mit dem SDK-Setup ist die Registrierung bereits erledigt; die Schritte unten braucht es nur bei manueller Verteilung. A customer sent us his steps how he registers just the libraries required for the usage in his Delphi Project. It might be useful for others so we post it here. ### Download [https://www.zugferdpro.com/tooldownloads/](https://www.zugferdpro.com/tooldownloads/) Die Libraries können direkt von [https://www.aloaha.com/download/zugferdbinaries.zip](https://www.aloaha.com/download/zugferdbinaries.zip) geladen werden. Registrierung der TLB-Dateien über die register.bat ### Beispiel der register.bat. Nur Aloaha_ZUGFeRD.dll ist wichtig. Egal wenn andere regasm Fehler werfen. regasm.exe /CodeBase AloahaBouncyCastle.dll regasm.exe /CodeBase AloahaCreateCOMObject.dll regasm.exe /CodeBase AloahaDOCX.dll regasm.exe /CodeBase AloahaPDF.NET.dll regasm.exe /CodeBase AloahaPDFClass.dll regasm.exe /CodeBase AloahaXMLLib.dll regasm.exe /CodeBase Aloaha_ZUGFeRD.dll regasm.exe /CodeBase AloPDFLib.dll regasm.exe /CodeBase DocX.dll regasm.exe /CodeBase Security.Cryptography.dll ### TLB-erstellen regasm /CodeBase Aloaha_ZUGFeRD.dll /tlb:zugferd.tlb In der Delphi IDE die Komponente in eine Pascal-Datei umwandelnDelphi Starten > Projekt öffnen > Menüspalte „Komponente“ > Menüpunkt „Komponente importieren“ > Typenbibliothek importieren > „Aloaha ZUGFeRD Toolkit“ markieren > Button „Weiter“ > Unit-Verz.-Name definieren > Haken bei „Komponenten-Wrapper generieren“ setzen > Button „Weiter“  > Option „Unit anlegen“ auswählen > Button „Fertig stellen anwählen. ### Funktion programmieren pform:=TPDFForms.Create(self); try ``` pform.SealAndFlatten(‘aux-formular_flatten.pdf’,True,’aux-formular.pdf’,’IHR-LIZENZSCHLUESSEL’); ``` finally ``` Showmessage(pform.LastErrorString); FreeAndNil(pform); ``` end; Exe-Datei erstellen und als Administrator starten und die Funktion ausführen Dabei wird die DLL gestartet und einiges in der Registry eingetragen. Wenn das nicht gemacht wird, dann kommt es zu Fehlermeldungen. ### Zusatzinfo – Un-Register (unregister.bat) regasm.exe /Unregister AloahaBouncyCastle.dll regasm.exe /Unregister AloahaCreateCOMObject.dll regasm.exe /Unregister AloahaDOCX.dll regasm.exe /Unregister AloahaPDF.NET.dll regasm.exe /Unregister AloahaPDFClass.dll regasm.exe /Unregister AloahaXMLLib.dll regasm.exe /Unregister Aloaha_ZUGFeRD.dll regasm.exe /Unregister AloPDFLib.dll regasm.exe /Unregister DocX.dll regasm.exe /Unregister Security.Cryptography.dll ### Potentielle Probleme Falls es solche Fehler gibt: “_SetIUnknownProp” – einfach löschen! --- ## Downloads URL: https://www.zugferdpro.com/tooldownloads/ Das Aloaha ZUGFeRD SDK gibt es in verschiedenen Variationen. Prinzipiell reicht es vollkommen aus die Aloaha [ZUGFeRD DLL](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) zu laden und auf Ihrem System zu [registrieren](https://www.zugferdpro.com/category/code-2/vb6-code-2/register/). Alles weitere macht unser SDK voll automatisch beim ersten Aufruf. Auf Ihren Entwicklungsrechnern installieren Sie aber idealerweise mit einem der Installer weiter unten auf dieser Seite. Natürlich können Sie auch erst unsere [Demo GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) laden. Dazu klicken Sie bitte [hier](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip). Sehr populär ist auch unser CSV ZUGFeRD Konverter. Importieren Sie Ihre CSV Dateien ganz einfach nach ZUGFeRD: [Importieren von CSV-Dateien in eine ZUGFeRD-konforme X-Rechnung](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) Die Demo GUI inklusive des SDKs kann von folgender URL geladen werden: [https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) Falls Sie von einer älteren Version < 11.0 upgraden stellen Sie bitte sicher das Sie eine gültige 11er Lizenz haben. Upgrades mit gültigem Wartungsvertrag sind kostenlos. Für den Wartungsvertrag berechnen wir 20% der kompletten Rechnungssumme immer ab Kaufdatum. #### Windows Installer – aktuelle Version 11: Ein Installer für 32 und 64 Bit: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) (enthält Aloaha_ZUGFeRD_SDK_Setup.msi). - Installiert das SDK nach \Aloaha\ZUGFeRD SDK , inklusive der Aloaha ZUGFeRD GUI. - Trägt Aloaha_ZUGFeRD.dll in den Global Assembly Cache ein und registriert sie für COM – für 32- und 64-Bit-Anwendungen. - Voraussetzung: .NET Framework 4.7.2. - Im 64-Bit-Modus rund viermal schneller als Version 10. #### Windows Installer Pakete – letzte Version 10: Hinweis: Die folgenden Installer enthalten die letzte Version 10 des Aloaha ZUGFeRD SDK (.NET 3.5). Wir stellen jetzt auf die Version 11 um (.NET Framework 4.7.2). Für alle Kunden mit gültigem Wartungsvertrag ist das Upgrade auf Version 11 kostenlos. 32 Bit64 Bit (includes 32 Bit) MSI Installer[aloaha_zugferd_32msi.zip](https://www.aloaha.com/download/aloaha_zugferd_32msi.zip)[aloaha_zugferd_64msi.zip](https://www.aloaha.com/download/aloaha_zugferd_64msi.zip) EXE Installer[aloaha_zugferd_32exe.zip](https://www.aloaha.com/download/aloaha_zugferd_32exe.zip)[aloaha_zugferd_64exe.zip](https://www.aloaha.com/download/aloaha_zugferd_64exe.zip) Die Bibliotheken werden in \Aloaha installiert! #### Weitere Downloads: - Alle Bibliotheken ohne Installer: zugferdbinaries.zip – sämtliche DLLs des Aloaha ZUGFeRD SDK inklusive Typbibliothek ( Aloaha_ZUGFeRD.tlb ), RegAsm für 32 und 64 Bit und den Registrierhilfen InstallLib32.exe / InstallLib64.exe . Ideal für die Verteilung auf Zielrechner oder für Delphi-, VB6- und Access-Projekte – siehe Bibliotheken registrieren . - Kommandozeilen-Tool zugcmd: zugcmd.zip – erzeugt ZUGFeRD-/XRechnung-XML aus CSV-Dateien (Beispiel-CSVs und readme enthalten) und liest E-Rechnungen zurück nach CSV, ganz ohne eigene Programmierung. Mehr dazu: CSV nach ZUGFeRD importieren , ZUGFeRD nach CSV konvertieren , alle Kommandozeilen-Tools . - Word-Vorlagen für PDF/A aus XML: template.docx (vollständige Beispielrechnung) und TemplateEUR_VAT.docx (schlanke Euro-Variante) – mit CreateDocFromXML wird daraus die ZUGFeRD-PDF/A-3-Rechnung. Alle Platzhalter mit BT-Nummern: Word-Vorlage und Platzhalter . #### Evaluierungs Lizenz: Bitte schicken Sie eine email an info@aloaha.com für eine kostenlose Testlizenz. #### Anforderungen: Ab Version 11 benötigt das SDK das .NET Framework 4.7.2 (in Windows 10 ab Version 1803 und in Windows 11 bereits enthalten). Die Versionen 10 und älter wurden in .NET 3.5 programmiert und benötigen die .NET Framework 3.5 Runtime. Es gibt Programmierschnittstellen für das [.NET Framework](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) und für [VB6 (COM)](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/). #### Versionen: 11.0.0.6 – ZUGFeRD-PDFs mit Anhängen: Beim Einbetten ([MergeXMLIntoPDF](https://www.zugferdpro.com/api/mergexmlintopdf/)) wird die Rechnungs-XML nur noch einmal und unter ihrem richtigen Dateinamen gespeichert; zusätzliche Anhänge wie ein Begleit-PDF erhalten immer einen Dateityp (MIME-Typ) – keine PDF/A-Warnung 6.8/1 mehr. Die PDF/A-Metadaten übernehmen bei XRechnung die Version aus dem XML (BT-24). Neue Eigenschaft [LastWarning](https://www.zugferdpro.com/api/lastwarning/): meldet, wenn eine XRechnung durch eine EXTENDED-Angabe zu Factur-X EXTENDED wird. [WriteBuyerContactPerson](https://www.zugferdpro.com/api/writebuyercontactperson/) schreibt auch eine Abteilung ohne Personenname als Kontaktstelle des Käufers. COM-Schnittstelle wieder vollständig kompatibel zu Version 10 (frühe Bindung, z. B. VB6). [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/): Exitcode 62, wenn Signieren verlangt wurde, aber keine PDF entstanden ist; eine nicht signierte Ausgabe wird nicht unter dem Zielnamen abgelegt. Der SDK-Installer enthält zusätzlich die Typbibliothek Aloaha_ZUGFeRD.tlb und ein COM-Testskript. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.3 – Signieren per Kommandozeile: [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) signiert vorhandene PDFs oder die gerade erzeugte ZUGFeRD-Rechnung – lokal mit Zertifikat (-cert) oder über die [CodeB-Fernsignatur](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (neue Parameter -remoteurl, -remoteuser, -remotepw und -level, PAdES B-B bis B-LTA). Der CodeB Remote Signature Service ist Teil der CodeB EUID Wallet Software, die damit auch für ZUGFeRD genutzt wird. Neue COM-Klasse [RemoteSigner](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) für Server und Stapelbetrieb: Mindeststufe, Begründung einer Herabstufung, automatische Wiederholung bei Ratenlimit, Einstellungen aus der Registry; ZUGFeRD GUI, PDF Viewer (Einstellung Mindeststufe) und zugcmd (-minlevel) nutzen sie. [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) und [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/): Fortschrittsanzeige während der Fernsignatur und neuer Info-Dialog mit Kontaktdaten. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.2 – Neue Funktion [SignPDFRemote](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/): PDF- und ZUGFeRD-Rechnungen remote mit PAdES signieren (B-B bis B-LTA) über den CodeB Remote Signature Service (Teil der CodeB EUID Wallet Software) – ohne lokales Zertifikat, auch per COM. [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) und [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/): neue Signatur-Einstellungen (lokales Zertifikat oder CodeB-Fernsignatur) und fertige ZUGFeRD-PDFs signieren. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.1 – Neue Funktion [AddDeliveryNoteItem](https://www.zugferdpro.com/api/adddeliverynoteitem/): Lieferschein-Referenz (Lieferscheinnummer, Datum und Positionsnummer) je Rechnungsposition (Profil EXTENDED). Stabilere PDF-Verarbeitung: Ressourcen werden sofort freigegeben, auch bei sehr vielen Dateien in Folge bleibt die Verarbeitung gleich schnell. XRechnung: Verweise auf vorausgegangene Rechnungen jetzt standardkonform (in XRechnung CII nur ein Verweis, in ZUGFeRD / Factur-X alle). Diverse Fehlerkorrekturen. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.0 – Neue Hauptversion 11 auf Basis des .NET Framework 4.7.2. Im 64-Bit-Modus rund viermal schneller als Version 10. Deutlich verbesserter Import von UBL-Rechnungen. Voraussetzung: .NET Framework 4.7.2. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 10.0.0.36 – Letzter Build der Hauptversion 10 und zugleich der letzte Build auf Basis von .NET 3.5. Die nächsten Versionen tragen die Hauptversion 11 und basieren auf dem .NET Framework 4.7.2. Für alle Kunden mit gültigem Wartungsvertrag ist das Upgrade auf Version 11 kostenlos. Download Version 10.0.0.36 (.NET 3.5): 32 Bit64 Bit (includes 32 Bit) MSI Installer[aloaha_zugferd_32msi.zip](https://www.aloaha.com/download/aloaha_zugferd_32msi.zip)[aloaha_zugferd_64msi.zip](https://www.aloaha.com/download/aloaha_zugferd_64msi.zip) EXE Installer[aloaha_zugferd_32exe.zip](https://www.aloaha.com/download/aloaha_zugferd_32exe.zip)[aloaha_zugferd_64exe.zip](https://www.aloaha.com/download/aloaha_zugferd_64exe.zip) 10.0.0.24 – Maintenance Build 10.0.0.16 – BG-X-4 – Enthaltene Steuer per Posten für B2C eingeführt 10.0.0.15 – CalculatedAmount bei der Umsatzsteuer erlaubt nun 4 Nachkommastellen 10.0.0.0 – XML Dateien in UBL Syntax können nun gelesen werden Hinweis: Das Upgrade von Hauptversion 9 auf 10 ist für Kunden mit gültigem Wartungsvertrag kostenlos. 9.0.0.106 – Wartungs Release für CSV Schnittstellen. 9.0.0.102 – Neue Funktionen BG-27/28: addItemSpecifiedTradeAllowanceCharge, getItemSpecifiedTradeAllowanceChargeCount und getItemSpecifiedTradeAllowanceCharge um Zu- und Abschläge auf einer Rechnungsposition zu setzen oder zu lesen. 9.0.0.101 – Neue Funktionen: SetPayeeTradeParty und GetPayeeTradeParty um abweichende Zahlungsempfänger zu definieren. CSV Schnittstelle mit neuen CSV Dateien deliverfrom.csv und deliverto.csv. 9.0.0.100 – Wartungs Release 9.0.0.92 – Neue Funktion MergeXMLIntoPDFWait4PDF – wartet bis das InputPDF verfügbar ist. 9.0.0.91 – Kleine Änderungen für die CSV API und der GUI 9.0.0.90 – Maintenance Build, viele neue Funktionen wie z. B.: PrintPDFDocument 9.0.0.70 – Maintenance Build für [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (05.11.2024) ZUGFeRD XRechnung [Form](https://forms.codeb.io/pdfforms.aspx?fid=zugferd) neu gestaltet 9.0.0.44 – [WriteShipToTradeParty](https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/)überarbeitet und [WriteShipToTradePartyItem](https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/) hinzugefügt 9.0.0.43 – Wartungsversion. Hauptsächlich für [ZUGCMD](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/). 9.0.0.30 – Neue Funktion AddSpecifiedAdvancePayment 9.0.0.28 – Maintenance Build 9.0.0.17 – ZUGCMD – Importieren von CSV Dateien direkt nach ZUGFeRD [Importieren von CSV-Dateien in eine ZUGFeRD-konforme X-Rechnung](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) 9.0.0.0 – XRechnung 3.0.1 – [https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/](https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/) Note: Upgrade from major version 8 to 9 is free for customer with a valid maintenance contract. 8.0.0.80 – XRechnung 2.3.1 – [https://www.e-rechnung-bund.de/neue-version-xrechnung-2-3-1/](https://www.e-rechnung-bund.de/neue-version-xrechnung-2-3-1/) 8.0.0.77 – Maintenance Build 8.0.0.12 – Added properties LeitwegID and Kundennummer 8.0.0.11 – Maintenance build and XRechnung Profile update (isKosit=true) 8.0.0.3 – Maintenance build for minor bugfixes and improvements for XInvoice/EN16931/Factur-X/ZUGFeRD 2 8.0.0.0 – XInvoice/EN16931/Factur-X/ZUGFeRD 2 supported from 1st September 2020. Note: Upgrade from major version 7 to 8 is free for customer with a valid maintenance contract. 7.1.0.20 – PDF Form Filling capabilities added 7.1.0.00 – Service release, new extended profile properties added Note: Upgrade from major version 6 to 7 is free for customer with a valid maintenance contract. 6.0.33 – [ZUGFeRD_Structure](https://www.zugferdpro.com/laden-einer-existierenden-zugferd-rechnung-in-das-toolkit/)nun auch in VB6/COM verfügbar 6.0.32 – [SaveAttachment](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-com/)und [FileAttachments](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-net/)eingeführt 6.0.30 – [Files2Attach](https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/)und [AddFile2Attach](https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/)eingeführt 6.0.26 – Verbesserung der COM Schnittstelle für [VB6 Benutzer](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) #### ZUGFeRD als Webservice Wir bieten unsere Schnittstellen auch als [Webservice](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) (REST, SOAP) an. Bitte kontaktieren Sie uns bei Interesse! Bitte fordern Sie Ihre Testlizenz von [info@aloaha.com](mailto:info@aloaha.com) an! --- ## ZUGFeRD FAQ – häufige Fragen und Antworten URL: https://www.zugferdpro.com/zugferd/zugferd-faqs/ Antworten auf häufige Fragen zu ZUGFeRD, XRechnung, PDF/A und zum Aloaha ZUGFeRD SDK. Jede Antwort verlinkt auf den ausführlichen Artikel mit Codebeispielen. ### Wie übergebe ich die Positionsnummer aus der Bestellung des Kunden (BT-132) in der Rechnungsposition? Kurz: Viele Kunden, vor allem mit SAP, verlangen auf der E-Rechnung zu jeder Position die Positionsnummer aus ihrer Bestellung. Das ist der Business Term BT-132 („Referenced purchase order line reference“, auch Bestellposition, PO-Position oder in SAP das Feld EBELP der… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-wie-uebergebe-ich-die-positionsnummer-der-bestellung-bt-132-in-der-rechnungsposition/) ### Warum meldet der Validator BR-S-01, BR-S-06 oder BR-AE-08, wenn die Rechnung einen Nachlass hat? Kurz: Ein Nachlass oder Zuschlag auf Rechnungsebene ( BG-20 bzw. BG-21) hat eine eigene Steuerkategorie ( BT-95 ) und einen eigenen Steuersatz ( BT-96 ). Beide müssen zu den Positionen passen, von denen der Nachlass abgezogen wird. Steht beim Nachlass z. B. „S“ (Normalsatz) mit… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-01-br-s-06-oder-br-ae-08-beim-nachlass/) ### Warum erstellt das SDK meine XRechnung oder EN-16931-Rechnung als Factur-X EXTENDED? Kurz: Das Aloaha ZUGFeRD SDK stellt eine Rechnung automatisch auf das Profil Factur-X/ZUGFeRD EXTENDED um, sobald Sie ein Feld setzen, das es nur in EXTENDED gibt – damit keine Angabe verloren geht. Eine solche Rechnung ist dann keine XRechnung mehr (im XML steht als… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-als-factur-x-extended-erstellt/) ### E-Rechnung aus einer alten VB6-Anwendung: COM oder CSV und zugcmd? Kurz: Eine ältere Anwendung in Visual Basic 6 muss für die E-Rechnungspflicht nicht neu geschrieben oder nach .NET migriert werden. Mit dem Aloaha ZUGFeRD SDK gibt es zwei Wege zu ZUGFeRD und XRechnung (EN 16931): Weg 1 ruft das SDK direkt über die COM-Schnittstelle auf. Weg 2… [Ganze Antwort lesen →](https://www.zugferdpro.com/e-rechnung-aus-vb6-altanwendung-com-oder-csv/) ### Wie erstelle ich ZUGFeRD-Rechnungen und XRechnungen per CSV und zugcmd aus meiner eigenen Anwendung? Kurz: Ihre Anwendung – egal ob Delphi, VB6, Access, COBOL oder eine andere Sprache – schreibt die Rechnungsdaten in vier CSV-Dateien und ruft das Kommandozeilenwerkzeug zugcmd auf. zugcmd liest die Dateien, erzeugt das E-Rechnungs-XML nach EN 16931 (XRechnung 3.0, Syntax CII)… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-wie-erstelle-ich-e-rechnungen-per-csv-und-zugcmd-aus-meiner-anwendung/) ### Warum meldet der Validator BR-S-08, BR-S-09 und BR-CO-17, wenn die Rechnung einen Rabatt hat? Kurz: Die drei Regeln BR-S-08 , BR-S-09 und BR-CO-17 melden zusammen fast immer denselben Fehler: In der Umsatzsteuer-Aufschlüsselung (BG-23) steht als Basisbetrag ( BT-116 ) die Summe der Positionen statt des Nettobetrags nach Rabatt. Richtig ist: Summe der Positionen dieses… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-s-08-br-s-09-und-br-co-17/) ### Was bedeuten „zero rated goods“ und „commercial invoice“ bei einer §13b-Abschlagsrechnung? Kurz: Wenn ein Rechnungsempfänger meldet, Ihre E-Rechnung enthalte „zero rated goods“ statt „VAT reverse charge“ und sei eine „commercial invoice“ statt einer „partial construction invoice“, dann zitiert er die englischen Namen der Codes im XML. „Zero rated goods“ ist die… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-bedeuten-zero-rated-goods-und-commercial-invoice-bei-13b-abschlagsrechnungen/) ### Warum warnt der Validator vor einem leeren ApplicableHeaderTradeDelivery (PEPPOL-EN16931-R008)? Kurz: Die Warnung PEPPOL-EN16931-R008 („Document MUST not contain empty elements“) beim Element bedeutet: Der Lieferblock ist vorhanden, aber leer. Der Block ist im Schema Pflicht und muss im XML stehen – leer ist er gültig, erzeugt aber diese Warnung. Sie verschwindet, sobald… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-warnt-der-validator-vor-einem-leeren-applicableheadertradedelivery/) ### Was bedeutet „One of ApplicableHeaderTradeDelivery is expected“ im Prüfbericht? Kurz: Der Prüfbericht meldet „Invalid content was found starting with element ApplicableHeaderTradeSettlement. One of ApplicableHeaderTradeDelivery is expected“ (Fehlercode cvc-complex-type.2.4.a ), wenn im XML der Lieferblock fehlt. In ZUGFeRD 2.x, Factur-X und XRechnung muss… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-bedeutet-applicableheadertradedelivery-is-expected/) ### Was bedeutet BR-CL-06 in der XRechnung? Kurz: Die Regel BR-CL-06 („Value added tax point date code MUST be coded using a restriction of UNTDID 2475“) meldet, dass im Feld BT-8 (ram:DueDateTypeCode) etwas anderes als ein erlaubter Code steht. Erlaubt sind nur 5 (Rechnungsdatum), 29 (Liefer-/Leistungsdatum) und 72… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-bedeutet-br-cl-06-in-der-xrechnung/) ### Wie erstelle ich eine XRechnung, die verrechnet statt bezahlt wird? Kurz: Wird der Rechnungsbetrag nicht überwiesen, sondern mit einer Abrechnung oder Gutschrift verrechnet (einbehalten), verwenden Sie als Zahlungsart ( BT-81 ) den Code 97 „Verrechnung zwischen Partnern“. Den Hinweis zur Verrechnung schreiben Sie in den Zahlungsart-Text ( BT-82… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-wie-erstelle-ich-eine-xrechnung-die-verrechnet-statt-bezahlt-wird/) ### Warum meldet der Validator BR-CO-15 und BR-CO-16, wenn ich den Rechnungsbetrag runde? Kurz: Der Rundungsbetrag ( BT-114 ) darf nur den Zahlbetrag (BT-115) verändern, nie den Bruttobetrag (BT-112) . Wer den Bruttobetrag auf einen „glatten“ Wert setzt und die Differenz als Rundung angibt, verletzt zwei Rechenregeln der EN 16931 – die Rechnung wird abgelehnt. Die… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-meldet-der-validator-br-co-15-und-br-co-16-beim-rundungsbetrag/) ### Warum wird meine XRechnung wegen CII-SR-465 oder CII-SR-466 abgelehnt? Kurz: Im Ansprechpartner des Verkäufers ( BT-41 ) bzw. des Käufers ( BT-56 ) steht in der CII-Syntax entweder ein Personenname ( ) oder eine Abteilung ( ). Sind beide gesetzt, meldet der Validator CII-SR-465 (Verkäufer) bzw. CII-SR-466 (Käufer). Warnung oder Fehler? In den… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-wird-meine-xrechnung-wegen-cii-sr-465-abgelehnt/) ### Wie gebe ich eine SEPA-Lastschrift in der E-Rechnung richtig an? Kurz: Bei einer SEPA-Lastschrift ist die Zahlungsart ( BT-81 ) der Code 59 , nicht 58 (Überweisung). Dazu gehören die Mandatsreferenz ( BT-89 ), Ihre Gläubiger-Identifikationsnummer ( BT-90 ) und die IBAN des Kontos, das belastet wird ( BT-91 ). Häufiger Fehler Oft steht in den… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-wie-gebe-ich-eine-sepa-lastschrift-in-der-e-rechnung-richtig-an/) ### Wie prüfe ich meine XRechnung vor dem Versand? Kurz: Verbindlich ist der Prüfbericht des offiziellen KoSIT-Validators mit der aktuellen XRechnung-Prüfkonfiguration . Diese Kombination nutzen auch viele Rechnungseingangsplattformen. Prüfen Sie Ihre Dateien damit, bevor Sie sie versenden. Was Sie brauchen Den Validator als… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-wie-pruefe-ich-meine-xrechnung-vor-dem-versand/) ### ZUGFeRD, XRechnung und Factur-X: Was ist der Unterschied? ZUGFeRD, XRechnung und Factur-X sind keine Konkurrenten, sondern Varianten derselben Idee: Rechnungsdaten strukturiert und maschinenlesbar nach der europäischen Norm EN 16931 zu übermitteln. Die Unterschiede liegen im Format (hybrides PDF oder reines XML), in nationalen… [Ganze Antwort lesen →](https://www.zugferdpro.com/zugferd-xrechnung-factur-x-unterschiede/) ### Wie kann ich feststelle ob alles korrekt installiert und registriert ist? Wenn anstelle des Installers sich jemand entscheidet nur die Bibliotheken zu benutzen dann stellt sich manchmal die Frage ob alles korrekt installiert und registriert ist. Das lässt sich jedoch mit einem kleinen Testprogramm leicht feststellen: Wenn man das obige Programm mit… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-ich-feststelle-ob-alle-korrekt-installiert-und-registriert-ist/) ### Welchen ZUGFeRD / XInvoice Standard? Mit dem SDK lassen sich ZUGFeRD 1 und 2 (XRechnung EN 16931) XML Dateien erstellen. Dazu müssen Sie bei der Erstellung der Klasse und/oder beim Speichern des XMLs den Parameter iXML.ZUGFeRDVersion übergeben. Sie können jederzeit mit dem Paramter ZUGfeRDStandard zwischen den… [Ganze Antwort lesen →](https://www.zugferdpro.com/welchen-zugferd-xinvoice-standard/) ### Was ist das ZUGFeRD-Format? Das ZUGFeRD -Format (Zentraler User Guide Forum elektronische Rechnung Deutschland) kombiniert eine PDF/A-3-Datei der Rechnung mit einer integrierten Rechnungsdatei im XML-Format, die in das PDF/A-3-Dokument eingebettet ist. Dieses neue und innovative Rechnungsdatenformat… [Ganze Antwort lesen →](https://www.zugferdpro.com/was-ist-das-zugferd-format/) ### Wie unterstützt Aloaha das ZUGFeRD-Format? Aloaha bietet in seinem Entwickler-Tool Aloaha ZUGFeRD SDK umfangreiche ZUGFeRD-Funktionen. Mit dem Aloaha ZUGFeRD Toolkit können Software-Entwickler das ZUGFeRD-Format in ihre eigenen Anwendungen integrieren, sodass die Nutzer keine zusätzliche Software mehr benötigen, um die… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-unterstutzt-aloaha-das-zugferd-format/) ### Wie kann man den Testindikator und das ZUGFeRD Profil definieren? Wie üblich gibt es viele Wege, die nach Rom führen. Sie können diese Eigenschaften direkt am Anfang bei der Erstellung des Objektes definieren: Es kann jedoch vorkommen das diese Variablen von anderen Funkionen geändert werden. Zum Beispiel von CreateInvoice . Auch wenn Sie… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-man-den-testindikator-und-das-zugferd-profil-definieren/) ### Wie kann ich die XML Datei aus der PDF Rechnung extrahieren? Es ist selbstverständlich möglich den XML Anhang aus der Rechnung zu extrahieren. Wie immer ist der Code dazu sehr einfach: Natürlich kann man Daten wie Posten auch direkt aus der ZUGFeRD bzw. X-Rechnung auslesen… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-ich-die-xml-datei-aus-der-pdf-rechnung-extrahieren/) ### Wie kann ich die ZUGFeRD Rechnungsnummer BT-1 auslesen? Wie kann ich die ZUGFeRD Rechnungsnummer BT-1 auslesen? [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-ich-die-zugferd-rechnungsnummer-bt-1-auslesen/) ### Wie extrahiere ich die XMP Metadaten einer PDF ZUGFeRD Rechnung? Wir immer ist das bei uns ganz einfach. Bitte beachten Sie das die Lizenz im Codebeispiel nur eine zeitlich begrenzte Testlizenz ist. Fordern Sie Ihre Lizenz von info@zugferdpro.com an. Const License As String = “IHR-LIZENZSCHLUESSEL” Dim alo As New Aloaha_ZUGFeRD.XML Dim… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-extrahiere-ich-die-xmp-metadaten-einer-pdf-zugferd-rechnung/) ### Wie kann ich alle Anhänge aus einer PDF Datei extrahieren? Bitte beachten Sie das der Lizenzschlüssel im Beispiel ein zeitlich beschränkter Demo Key ist. [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-ich-alle-anhaenge-aus-einer-pdf-datei-extrahieren/) ### Wie überprüfe ich ob die XMP Metadaten der PDF/A ZUGFeRD Rechnung vorhanden und korrekt sind? PDF/A konforme ZUGFeRD Rechnungen erfordern die Aufnahme von einigen Metadaten. Wenn solch eine Rechnung archiviert wird sollte man testen ob diese Metadaten exisiteren. Das geht natürlich ganz einfach: Const License As String = “IHR-LIZENZSCHLUESSEL” Dim alo As New… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-ueberpruefe-ich-ob-die-xmp-metadaten-der-pdfa-zugferd-rechnung-vorhanden-und-korrekt-sind/) ### Was muss ich in TAXType und TypeCode eintragen? Frage: Es gibt bei uns zwei Felder, bei denen wir nicht genau wissen, was für Werte erwartet werden. Es handelt sich um die Felder: Können Sie mir hier weiterhelfen, was genau erwartet wird? Weglassen kann ich die Felder leider nicht, da ich dann eine Fehlermeldung erhalte.… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-muss-ich-in-taxtype-und-typecode-eintragen/) ### Wie übergebe ich die Lizenz an das ZUGFeRD SDK in VB6? Falls Sie “Late Binding” benutzen können Sie die Lizenz so übergeben: Dim ZUG As Object Set ZUG = CreateObject(“Aloaha_ZUGFeRD.XML”) If ZUG.Licensed(“IHR-LIZENZSCHLUESSEL”) = True Then Else End If Falls Sie die Aloaha ZUGFeRD Library referenziert haben: Dim ZUG As New… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-uebergebe-ich-die-lizenz-an-das-zugferd-sdk-in-vb6/) ### Wie übergebe ich die Lizenz an das ZUGFeRD SDK? Es gibt viele Stellen an der Sie die Lizenz übergeben können. Idealerweise übergeben Sie die Lizenz direkt wenn Sie das Objekt erstellen. Also zum Beispiel: Private alo As New Aloaha_ZUGFeRD.XML(“IHR-LIZENZSCHLUESSEL”) Die wichtigsten Funktionen unterstützen die Übergabe der… [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-uebergebe-ich-die-lizenz-an-das-zugferd-sdk/) ### Wie kann ich die ZUGFeRD Rechnungswährung auslesen? Das geht ganz einfach mit folgender Codezeile: [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-ich-die-rechnungswaehrung-auslesen/) ### Ich habe PDF Dateien. Wie erhalte ich nun PDF/A? A: Das Toolkit wandelt PDF direkt nach PDF/A. Ganz OHNE einen virtuellen Drucker benutzen zu müssen! [Ganze Antwort lesen →](https://www.zugferdpro.com/f-ich-habe-pdf-dateien-wie-erhalte-ich-nun-pdfa/) ### Was brauche ich wenn ich schon PDF/A Dateien habe? A: Dann brauchen Sie NUR unser Toolkit. Die DLL enthält die Erstellung und das Lesen der XML Datein. Weiterhin kann die DLL die XML Dateien in das PDF einbetten bzw. extrahieren. Natürlich wandelt es PDFs auch direkt nach PDF/A [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-brauche-ich-wenn-ich-schon-pdfa-dateien-habe/) ### Kann ich mit der ZUGFeRD Bibliothek PDF/A Dateien erstellen? A: Natürlich geht das. Sie finden in der XML Klasse der ZUGFeRD Bibliothek die Funktion PDF2ASCII. Im Prinzip ist diese Funktion ein Wrapper für die identische Funktion der Aloaha PDF Suite: Das impliziert natürlich das Sie für die PDF/A Erstellung eine lizensierte Aloaha PDF… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-kann-ich-mit-der-aloaha-zugferd-bibliothek-pdfa-dateien-erstellen/) ### Was benötige ich, um ZUGFeRD-Dateien zu lesen? A: Um ZUGFeRD-PDFs oder -XML-Dateien zu lesen, benötigen Sie lediglich unser Toolkit: Mehr Informationen finden Sie unter: https://www.zugferdpro.com/tooldownloads/ Ein Codebeispiel zur Extrahierung der XRechnungs-XML finden Sie unter: Wie kann ich die XML Datei aus der PDF… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-benoetige-ich-um-zugferd-dateien-zu-lesen/) ### Was brauche ich wenn ich schon eine Software zur PDF/A Erstellung habe? A: Wenn Sie schon eine Software zur PDF/A Erstellung haben brauchen Sie nur das Toolkit. Die PDF Suite brauchen Sie dann nicht zu installieren. [Ganze Antwort lesen →](https://www.zugferdpro.com/f-was-brauche-ich-wenn-ich-schon-eine-software-zur-pdfa-erstellung-habe/) ### Wie kann ich die ZUGFeRD PaymentReference auslesen? Wie kann ich die ZUGFeRD PaymentReference auslesen? [Ganze Antwort lesen →](https://www.zugferdpro.com/wie-kann-ich-die-zugferd-paymentreference-auslesen/) ### Warum ZUGFeRD? ZUGFeRD ist das einfachste Format für den Versand von elektronischen Rechnungen. Das neue Format erleichtert die Einhaltung organisatorischer Richtlinien und rechtlicher Anforderungen (z.B. die Prüfung nach §14 UStG). Rechnungen werden in einem PDF-Format versandt. Die Daten… [Ganze Antwort lesen →](https://www.zugferdpro.com/f-warum-zugferd/) ### Q: How do I use the ZUGFeRD SDK? To use the SDK to create or read ZUGFeRD compliant XML Invoices is pretty easy. First you need to Reference the Object “Aloaha ZUGFeRD Library” or “Aloaha_ZUGFeRD.xml” in .NET. In case your language requires to reference the library file direct please use Aloaha_ZUGFeRD.dll (or… [Ganze Antwort lesen →](https://www.zugferdpro.com/q-how-do-i-use-the-zugferd-sdk/) --- ## ZUGFeRD Pro SDK Preise URL: https://www.zugferdpro.com/zugferd-pro-sdk-preise/ ### Wir helfen Ihnen bei der Implementierung von ZUGFeRD in Ihr System. ### Zum Beispiel: - Erstellung von ZUGFeRD / XRechnung XML und PDF/A Dateien. - Lesen und Auswerten von ZUGFeRD / XRechnung XML Dateien. - Lesen und Auswerten von ZUGFeRD / XRechnung PDF/A Dateien. - Einbettung von ZUGFeRD / XRechnung XML Daten in existierende PDF Dateien. - Konvertierung von XML ZUGFeRD / XRechnung Dateien DIREKT nach PDF/A - Automatische Konvertierung von PDF nach PDF/A während des Einbettens. - Extrahierung und Auswertung von ZUGFeRD / XRechnung Daten direkt aus einer ZUGFeRD / XRechnung. - . NET und COM / VB6 Schnittstellen ### Vergütung : Alle Preise verstehen sich zzgl. der gesetzlichen Mehrwertsteuer. Wir verkaufen ausschließlich an Unternehmen (B2B) – nicht an Privatpersonen. #### Evaluierungs Lizenz: Bitte schicken Sie eine email an info@aloaha.com für eine kostenlose Testlizenz. #### SDK Lizenz: Unsere Preise starten bei einmalig 1350 Euro zzgl. MwSt. für unsere Hilfe bei der Einbindung von ZUGFeRD in Ihr System! Diese Vergütung gilt pro Arbeitsplatz auf denen unser SDK an einem Unternehmensstandort für die Entwicklung eingesetzt wird. Jedes SDK Lizenz enthält weiterhin eine Endbenutzer (Runtime) Lizenz für 10 Arbeitsplätze im eigenen Haus. Optional können Sie einen Wartungsvertrag für 20% pro Jahr abschließen. Ein Wartungsvertrag kann nicht rückwirkend abgeschlossen werden und muss immer für alle eingesetzten Lizenzen gemeinsam abgeschlossen werden – ein Wartungsvertrag nur für einzelne Runtime-Lizenzen oder nur für das SDK ist nicht möglich. #### Endbenutzer (Runtime) Lizenz: Weiterhin berechnen wir einmalig 350 Euro zzgl. MwSt. Support Pauschale pro Endbenutzer. Unter Endbenutzer verstehen wir einen Mandanten (zum Beispiel für eine Online Lösung), eine Organisation oder eine Niederlassung. Mehrere Mandanten: Jeder Mandant zählt als eigener Endbenutzer und benötigt eine eigene Runtime-Lizenz – auch wenn mehrere Mandanten zum selben Kunden gehören oder in derselben ERP-Installation laufen. Technisch arbeiten alle Mandanten mit demselben Lizenzschlüssel; einen neuen Schlüssel brauchen Sie nicht, die zusätzlichen Runtime-Lizenzen werden aber berechnet. Besteht ein Wartungsvertrag, wird er um die neuen Runtime-Lizenzen erweitert (20 % pro Jahr). In jeder Runtime Lizenz sind 10 Arbeitzplatzlizenzen enthalten. Optional können Sie einen Wartungsvertrag für 20% pro Jahr abschließen. Ein Wartungsvertrag kann nicht rückwirkend abgeschlossen werden und muss immer für alle eingesetzten Lizenzen gemeinsam abgeschlossen werden – ein Wartungsvertrag nur für einzelne Runtime-Lizenzen oder nur für das SDK ist nicht möglich. #### Aloaha ZUGFeRD GUI: Die [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) kostet 199 Euro zzgl. MwSt. Die Lizenz gilt auch für den [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/). #### Royalty Free Lizenz: Sollten Sie viele Endbenutzer haben oder es ist nicht praktikabel Lizenzen zu zählen benötigen Sie die Royalty Free Lizenz. Bitte kontaktieren Sie [info@aloaha.com](mailto:info@aloaha.com) für die Preise. #### Projekt Lizenz Unser Lizenzmodell ist mit dem Lizenzmodell Ihrer Anwendung inkompatibel? Bitte [kontaktieren](mailto:info@aloaha.com)Sie uns für eine Projekt Lizenz. #### ZUGFeRD / XRechnung Formular Falls es sich für Sie nicht lohnt eine Software zu kaufen oder aber Sie können keine Software installieren dann sollten Sie sich einmal unsere [Formularlösung](https://www.zugferdpro.com/aloaha-zugferd-formular/)anschauen. Mit einen ZUGFeRD / XRechnung [Formular](https://www.zugferdpro.com/aloaha-zugferd-formular/) können Sie eine Rechnung erstellen OHNE eine Software installieren zu müssen. #### Updates Der ZUGFeRD Standard wird permanent weiter entwickelt. Deshalb veröffentlichen wir regelmäßig Updates für unsere Software. Diese Updates können sie kostenlos herunterladen und benutzen wenn Sie einen Wartungsvertrag abgeschlossen haben. #### ZUGFeRD als Webservice Wir bieten unsere Schnittstellen auch als Webservice (REST, SOAP) an. Bitte kontaktieren Sie uns bei Interesse! Sollten Sie weitere Fragen oder Anregungen haben kontaktieren Sie uns bitte via[info@aloaha.com](mailto:info@aloaha.com?Subject=Preisanfrage%20ZUGFeRD Pro) ### Häufige Fragen zur Lizenzierung #### Brauche ich für jeden Mandanten eine eigene Runtime-Lizenz? Ja. Jeder Mandant zählt als eigener Endbenutzer und benötigt eine Runtime-Lizenz (350 Euro zzgl. MwSt., einmalig, 10 Arbeitsplätze) – auch wenn mehrere Mandanten zum selben Kunden gehören oder in derselben ERP-Installation laufen. #### Brauchen zusätzliche Mandanten einen neuen Lizenzschlüssel? Nein. Alle Mandanten können mit demselben Lizenzschlüssel arbeiten. Die zusätzlichen Runtime-Lizenzen werden aber berechnet. #### Was gilt für den Wartungsvertrag, wenn Mandanten dazukommen? Ein Wartungsvertrag gilt immer für alle eingesetzten Lizenzen gemeinsam. Kommen Runtime-Lizenzen hinzu, wird der Wartungsvertrag um diese Lizenzen erweitert (20 % pro Jahr). #### Was zählt als Endbenutzer? Ein Mandant, eine Organisation oder eine Niederlassung. Jede Runtime-Lizenz enthält 10 Arbeitsplätze. Bei vielen Endbenutzern gibt es die Royalty Free Lizenz. #### Ist die SDK-Lizenz pro Entwickler? Ja. Die SDK-Lizenz (1350 Euro zzgl. MwSt.) gilt pro Entwicklerarbeitsplatz und enthält eine Runtime-Lizenz für 10 Arbeitsplätze im eigenen Haus. --- ## ZUGFeRD YouTube Videos URL: https://www.zugferdpro.com/zugferd-youtube-videos/ --- ## ZUGFeRD URL: https://www.zugferdpro.com/zugferd/ ### Das neue Format “ZUGFeRD” für den elektronischen Rechnungsaustausch Der neue Normteil PDF/A-3 bietet ein wichtiges Feature für das neue Format “ZUGFeRD”: Anwender können beliebige Dateiformate in eine PDF/A-Datei einbetten. Durch diese Erweiterung des Charakters von PDF/A als Format für die Langzeitarchivierung um den Containergedanken wird sich für Unternehmen, Behörden und Softwarehersteller beim Empfang und Versand von Rechnungen vieles ändern. Das Forum elektronische Rechnung Deutschland (FeRD) als die nationale Plattform von Verbänden, Ministerien und Unternehmen zur Förderung der elektronischen Rechnung in Deutschland hat im PDF/A-3-Format ein großes Potenzial für den elektronischen Rechnungstausch erkannt. Dem entsprechend treibt es das darauf basierendes Austauschformat “ZUGFeRD” voran. Es soll als nationale Norm formuliert werden und anschließend als New Work Item für die Erstellung einer europäischen Norm beim europäischen Komitee für Normung (CEN) eingereicht werden. In den Zentralen User Guidelines des Forums elektronische Rechnung Deutschland (ZUGFeRD), die das neue Dokumenten- und Datenformat für den Austausch elektronischer Rechnungen beschreiben, ist PDF/A-3 als bevorzugtes Übertragungsformat definiert. - Die visuelle Darstellung der Rechnungsdaten erfolgt über ein PDF/A-3-konformes Dokument. Es bildet die Rechnung in einer für das menschliche Auge lesbaren Form ab und ist langzeitarchivierbar. - Die Rechnungsdaten sind im XML-Format mit Bezug auf das gesamte Dokument über ein so genanntes File Specification Dictionary in die PDF/A-Datei eingebettet. In der Version 1.0 des ZUGFeRD-Standards ist pro PDF/A-3 Dokument nur die Einbindung eines Rechnungsdatendokuments zulässig. Grundsätzlich ist es jedoch möglich, PDF/A-3 als Container für mehrere Dateien zu nutzen. Somit können beispielsweise auch Informationen zur Rechnungsprüfung in PDF/A-3 gebündelt werden. Der große Vorteil: XML ist maschinenlesbar und lässt sich somit ohne Medienbrüche automatisch weiterverarbeiten. - Die Beschreibung des Dokuments als ZUGFeRD-konforme Rechnung erfolgt mittels eines spezifischen XMP-Erweiterungsschemas sowie entsprechender XMP-Metadaten. Dafür sind sämtliche, auch individuelle Metadaten in XMP-Form einzubetten. Das XMP-Erweiterungsschema muss die PDF/A-Eigenschaft und die Konformitätsstufe explizit enthalten. Dadurch kann man das PDF/A-3-Dokument als ZUGFeRD-Rechnung identifizieren. Die Version des ZUGFeRD-Standards wird deutlich, ebenso wie die dokumentenweiten Metadaten. Dazu gehören der Name der eingebundenen Rechnungsdatei, die Rechnungsnummer, über die die Rechnung identifiziert wird, und das Rechnungsdatum. Das neue elektronische Rechnungsformat soll den Austausch von Rechnungsdaten branchenunabhängig zwischen großen und kleinen Unternehmen ebenso erlauben wie zwischen Privatunternehmen und der öffentlichen Verwaltung. Dank der ZUGFeRD-XML-Daten können die Rechnungsdaten automatisch ausgelesen und weiterverarbeitet werden – bis hin zur Buchung. Medienbrüche werden sowohl auf der Versender- als auch auf der Empfängerseite vermieden. Man geht davon aus, die Verarbeitungskosten einer Papierrechnung von über 20 Euro mit ZUGFeRD auf etwa zwei Euro senken zu können. Zudem kann der Zahlungsverkehr schneller abgewickelt werden. Dieser Nutzen könnte darüber hinaus eine breite Akzeptanz des ZUGFeRD-Formats fördern. Je mehr Unternehmen es einsetzen, desto stärker wird es zur Voraussetzung für die Zusammenarbeit mit Kunden und Lieferanten. Dies wiederum könnte die Basis für die Zusammenarbeit im Geschäftsleben verändern: Wer in der Lage ist, das neue Format zu versenden und empfangen, ist gegenüber Wettbewerbern, die Rechnungen noch in Papierform versenden, im Vorteil – auch auf internationaler Ebene. - Wofür steht FeRD? FeRD steht für “Forum elektronische Rechnung Deutschland” und ist die nationale Plattform von Verbänden, Ministerien und Unternehmen. - Was ist das neue Rechnungsformat ZUGFeRD? ZUGFeRD ist die Abkürzung für “Zentraler User Guide des Forums elektronische Rechnung Deutschland”. Dieses neue Rechnungsformat erlaubt es deutschlandweit einheitlich strukturierte Rechnungsdaten in einer Datei zu übermitteln und diese ohne weitere Schritte auszulesen und zu verarbeiten. - Wie funktioniert denn überhaupt ZUGFeRD? ZUGFeRD integriert standardisierte Rechnungsdaten im XML-Format als Anhang in Ihrer PDF Rechnung. Die Rechnungen werden also weiterhin im PDF-Format verschickt. Die Daten werden aber zusätzlich in einer standardisierten XML-Struktur übertragen, die ins PDF eingebettet ist. Das ZUGFeRD-Format schließt also die Lücke zwischen der manuellen Rechnungs-Verarbeitung in Papierform oder digitaler Form einerseits und voll automatisierter Verarbeitung von Rechnungsdaten via EDI (Electronic Data Interchange) andererseits. Das deutschlandweit einheitliche Format macht den Einsatz für kleine und mittelgroße Unternehmen wirtschaftlich sinnvoll. Was sind die Vorteile der strukturierter Rechnungsdaten für Unternehmer und Steuerberater? - Der Rechnungsstandard eignet sich branchenübergreifend für alle Wirtschaftsbereiche und die öffentliche Verwaltung. - Rechnungsdaten lassen sich automatisch verarbeiten. - Zahlungs- und Buchungsvorgänge lassen sich automatisieren. - Keine manuelle Datenübernahme, keine fehlerhafte Erfassung. ### Was kann das Aloaha ZUGFeRD Toolkit? - ZUGFeRD XML Daten erstellen - ZUGFeRD XML Daten in existierende PDF/A einbinden - ZUGFeRD XML Daten DIREKT in ein ZUGFeRD PDF/A konvertieren - ZUGFeRD XML Datei aus PDF/A extrahieren - ZUGFeRD Daten direkt aus einem ZUGFeRD PDF/A oder XML auslesen Fehlt etwas in der Aufzählung? Senden Sie uns Ihre Anregungen an [info@zugferdpro.com](mailto:info@zugferdpro.com) Es gibt für unser Toolkit natürlich auch Beispiele und Videos: Videos: [https://www.youtube.com/watch?v=3p7XCglzBqM](https://www.youtube.com/watch?v=3p7XCglzBqM)und [https://www.youtube.com/watch?v=lPR6Z4djXwE](https://www.youtube.com/watch?v=lPR6Z4djXwE) Wikipedia: [https://de.wikipedia.org/wiki/ZUGFeRD](https://de.wikipedia.org/wiki/ZUGFeRD) Falls Sie weitere Fragen haben können Sie uns auch direkt via info@aloaha.com kontaktieren --- ## Downloads: Aloaha ZUGFeRD SDK, installers, tools and version history URL: https://www.zugferdpro.com/en/downloads/ The Aloaha ZUGFeRD SDK comes in several variants. In principle it is completely sufficient to download the Aloaha [ZUGFeRD DLL](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) and [register](https://www.zugferdpro.com/category/code-2/vb6-code-2/register/) it on your system. Our SDK does everything else fully automatically on the first call. On your development machines, however, you should ideally install with one of the installers further down this page. Of course you can also download our [demo GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) first. To do so, please click [here](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip). Our CSV ZUGFeRD converter is also very popular. Simply import your CSV files into ZUGFeRD: [Importing CSV files into a ZUGFeRD-compliant XRechnung (German)](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) The demo GUI including the SDK can be downloaded from the following URL: [https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) If you are upgrading from an older version < 11.0, please make sure that you have a valid version 11 licence. Upgrades with a valid maintenance contract are free of charge. For the maintenance contract we charge 20% of the complete invoice amount, always from the date of purchase. #### Windows Installer – current version 11: One installer for 32 and 64 bit: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) (contains Aloaha_ZUGFeRD_SDK_Setup.msi). - Installs the SDK to \Aloaha\ZUGFeRD SDK , including the Aloaha ZUGFeRD GUI. - Adds Aloaha_ZUGFeRD.dll to the Global Assembly Cache and registers it for COM – for 32-bit and 64-bit applications. - Requirement: .NET Framework 4.7.2. - About four times faster than version 10 in 64-bit mode. #### Windows Installer packages – last version 10: Note: The following installers contain the last version 10 of the Aloaha ZUGFeRD SDK (.NET 3.5). We are now switching to version 11 (.NET Framework 4.7.2). The upgrade to version 11 is free of charge for all customers with a valid maintenance contract. 32 Bit64 Bit (includes 32 Bit) MSI Installer[aloaha_zugferd_32msi.zip](https://www.aloaha.com/download/aloaha_zugferd_32msi.zip)[aloaha_zugferd_64msi.zip](https://www.aloaha.com/download/aloaha_zugferd_64msi.zip) EXE Installer[aloaha_zugferd_32exe.zip](https://www.aloaha.com/download/aloaha_zugferd_32exe.zip)[aloaha_zugferd_64exe.zip](https://www.aloaha.com/download/aloaha_zugferd_64exe.zip) The libraries are installed to \Aloaha! #### Further downloads: - All libraries without installer: zugferdbinaries.zip – all DLLs of the Aloaha ZUGFeRD SDK including the type library ( Aloaha_ZUGFeRD.tlb ), RegAsm for 32 and 64 bit and the registration helpers InstallLib32.exe / InstallLib64.exe . Ideal for distribution to target machines or for Delphi, VB6 and Access projects – see registering the libraries . - Command-line tool zugcmd: zugcmd.zip – creates ZUGFeRD / XRechnung XML from CSV files (sample CSVs and readme included) and reads e-invoices back into CSV, entirely without your own programming. More: importing CSV into ZUGFeRD , converting ZUGFeRD to CSV , all command-line tools (German). - Word templates for PDF/A from XML: template.docx (complete sample invoice) and TemplateEUR_VAT.docx (slim euro variant) – CreateDocFromXML turns them into the ZUGFeRD PDF/A-3 invoice. All placeholders with BT numbers: Word template and placeholders (German). #### Evaluation licence: Please send an e-mail to info@aloaha.com for a free trial licence. #### Requirements: From version 11 the SDK requires the .NET Framework 4.7.2 (already included in Windows 10 from version 1803 and in Windows 11). Versions 10 and older were programmed in .NET 3.5 and require the .NET Framework 3.5 runtime. There are programming interfaces for the [.NET Framework](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) and for [VB6 (COM)](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/). #### Versions: 11.0.0.6 – ZUGFeRD PDFs with attachments: when embedding ([MergeXMLIntoPDF](https://www.zugferdpro.com/api/mergexmlintopdf/)), the invoice XML is now stored only once and under its correct file name; additional attachments such as an accompanying PDF always get a file type (MIME type) – no more PDF/A warning 6.8/1. For XRechnung, the PDF/A metadata take the version from the XML (BT-24). New property [LastWarning](https://www.zugferdpro.com/api/lastwarning/): reports when an XRechnung becomes Factur-X EXTENDED because of an EXTENDED field. [WriteBuyerContactPerson](https://www.zugferdpro.com/api/writebuyercontactperson/) also writes a department without a person's name as the buyer's contact point. COM interface fully compatible with version 10 again (early binding, e.g. VB6). [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/): exit code 62 if signing was requested but no PDF was created; an unsigned output is not stored under the target name. The SDK installer also contains the type library Aloaha_ZUGFeRD.tlb and a COM test script. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.3 – Signing from the command line: [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) signs existing PDFs or the ZUGFeRD invoice just created – locally with a certificate (-cert) or via [CodeB remote signing](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (new parameters -remoteurl, -remoteuser, -remotepw and -level, PAdES B-B to B-LTA). The CodeB Remote Signature Service is part of the CodeB EUID Wallet software, which is thereby also used for ZUGFeRD. New COM class [RemoteSigner](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) for servers and batch operation: minimum level, reason for a downgrade, automatic retry on rate limit, settings from the registry; the ZUGFeRD GUI, PDF Viewer (minimum level setting) and zugcmd (-minlevel) use it. [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) and [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/): progress display during remote signing and a new info dialog with contact details. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.2 – New function [SignPDFRemote](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/): sign PDF and ZUGFeRD invoices remotely with PAdES (B-B to B-LTA) via the CodeB Remote Signature Service (part of the CodeB EUID Wallet software) – without a local certificate, also via COM. [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) and [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/): new signature settings (local certificate or CodeB remote signing) and signing of finished ZUGFeRD PDFs. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.1 – New function [AddDeliveryNoteItem](https://www.zugferdpro.com/api/adddeliverynoteitem/): delivery note reference (delivery note number, date and line number) per invoice line (EXTENDED profile). More stable PDF processing: resources are released immediately, so processing stays equally fast even with very many files in a row. XRechnung: references to preceding invoices are now standard-compliant (only one reference in XRechnung CII, all of them in ZUGFeRD / Factur-X). Various bug fixes. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.0 – New major version 11 based on the .NET Framework 4.7.2. About four times faster than version 10 in 64-bit mode. Much improved import of UBL invoices. Requirement: .NET Framework 4.7.2. Download: [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 10.0.0.36 – Last build of major version 10 and at the same time the last build based on .NET 3.5. The next versions carry the major version 11 and are based on the .NET Framework 4.7.2. The upgrade to version 11 is free of charge for all customers with a valid maintenance contract. Download version 10.0.0.36 (.NET 3.5): 32 Bit64 Bit (includes 32 Bit) MSI Installer[aloaha_zugferd_32msi.zip](https://www.aloaha.com/download/aloaha_zugferd_32msi.zip)[aloaha_zugferd_64msi.zip](https://www.aloaha.com/download/aloaha_zugferd_64msi.zip) EXE Installer[aloaha_zugferd_32exe.zip](https://www.aloaha.com/download/aloaha_zugferd_32exe.zip)[aloaha_zugferd_64exe.zip](https://www.aloaha.com/download/aloaha_zugferd_64exe.zip) 10.0.0.24 – Maintenance build 10.0.0.16 – BG-X-4 – included tax per line introduced for B2C 10.0.0.15 – CalculatedAmount for VAT now allows 4 decimal places 10.0.0.0 – XML files in UBL syntax can now be read Note: the upgrade from major version 9 to 10 is free of charge for customers with a valid maintenance contract. 9.0.0.106 – Maintenance release for the CSV interfaces. 9.0.0.102 – New functions BG-27/28: addItemSpecifiedTradeAllowanceCharge, getItemSpecifiedTradeAllowanceChargeCount and getItemSpecifiedTradeAllowanceCharge to set or read allowances and charges on an invoice line. 9.0.0.101 – New functions: SetPayeeTradeParty and GetPayeeTradeParty to define a different payee. CSV interface with the new CSV files deliverfrom.csv and deliverto.csv. 9.0.0.100 – Maintenance release 9.0.0.92 – New function MergeXMLIntoPDFWait4PDF – waits until the input PDF is available. 9.0.0.91 – Small changes for the CSV API and the GUI 9.0.0.90 – Maintenance build, many new functions such as PrintPDFDocument 9.0.0.70 – Maintenance build for the [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (05.11.2024) ZUGFeRD XRechnung [form](https://forms.codeb.io/pdfforms.aspx?fid=zugferd) redesigned 9.0.0.44 – [WriteShipToTradeParty](https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/)revised and [WriteShipToTradePartyItem](https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/) added 9.0.0.43 – Maintenance version, mainly for [ZUGCMD](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/). 9.0.0.30 – New function AddSpecifiedAdvancePayment 9.0.0.28 – Maintenance build 9.0.0.17 – ZUGCMD – importing CSV files directly into ZUGFeRD [Importing CSV files into a ZUGFeRD-compliant XRechnung (German)](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) 9.0.0.0 – XRechnung 3.0.1 – [https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/](https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/) Note: Upgrade from major version 8 to 9 is free for customers with a valid maintenance contract. 8.0.0.80 – XRechnung 2.3.1 – [https://www.e-rechnung-bund.de/neue-version-xrechnung-2-3-1/](https://www.e-rechnung-bund.de/neue-version-xrechnung-2-3-1/) 8.0.0.77 – Maintenance build 8.0.0.12 – Added properties LeitwegID and Kundennummer 8.0.0.11 – Maintenance build and XRechnung profile update (isKosit=true) 8.0.0.3 – Maintenance build for minor bug fixes and improvements for XInvoice/EN16931/Factur-X/ZUGFeRD 2 8.0.0.0 – XInvoice/EN16931/Factur-X/ZUGFeRD 2 supported from 1st September 2020. Note: Upgrade from major version 7 to 8 is free for customers with a valid maintenance contract. 7.1.0.20 – PDF form filling capabilities added 7.1.0.00 – Service release, new extended profile properties added Note: Upgrade from major version 6 to 7 is free for customers with a valid maintenance contract. 6.0.33 – [ZUGFeRD_Structure](https://www.zugferdpro.com/laden-einer-existierenden-zugferd-rechnung-in-das-toolkit/)now also available in VB6/COM 6.0.32 – [SaveAttachment](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-com/)and [FileAttachments](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-net/)introduced 6.0.30 – [Files2Attach](https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/)and [AddFile2Attach](https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/)introduced 6.0.26 – Improved COM interface for [VB6 users](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) #### ZUGFeRD as a web service We also offer our interfaces as a [web service](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) (REST, SOAP). Please contact us if you are interested. Please request your trial licence from [info@aloaha.com](mailto:info@aloaha.com)! ### Frequently asked questions #### Which download do I need for the Aloaha ZUGFeRD SDK? For development machines, the Windows installer Aloaha_ZUGFeRD_SDK.zip (one installer for 32 and 64 bit). It installs the SDK including the Aloaha ZUGFeRD GUI and registers Aloaha_ZUGFeRD.dll in the Global Assembly Cache and for COM. For distribution to target machines without an installer, use zugferdbinaries.zip. #### What are the system requirements? From version 11 the SDK requires the .NET Framework 4.7.2, which is already included in Windows 10 from version 1803 and in Windows 11. Versions 10 and older require the .NET Framework 3.5 runtime. #### Is the upgrade to version 11 free of charge? Yes, for all customers with a valid maintenance contract. If you upgrade from a version older than 11.0, make sure you have a valid version 11 licence. --- ## Licences & pricing: Aloaha ZUGFeRD SDK and ZUGFeRD GUI URL: https://www.zugferdpro.com/en/zugferd-sdk-pricing-licences/ In short: The Aloaha ZUGFeRD SDK is licensed with one-time fees: a free trial licence, the SDK licence for EUR 1,350 per development workstation (including a runtime licence for 10 workstations in-house) and a runtime licence for EUR 350 per end user, organisation or branch (10 workstations each). The Aloaha ZUGFeRD GUI costs EUR 199. Maintenance is optional at 20 % per year. All prices are excl. VAT; we sell to businesses only (B2B). LicencePrice (one-time, excl. VAT)Includes Trial licencefreefull functionality for evaluation – request it at info@aloaha.com SDK licenceEUR 1,350 per development workstationruntime licence for 10 workstations in-house Runtime (end-user) licenceEUR 350 per end user10 workstation licences; an end user is a tenant (e.g. of an online solution), an organisation or a branch Aloaha ZUGFeRD GUIEUR 199also valid for the Aloaha ZUGFeRD PDF Viewer Maintenance contract20 % per year (optional)free updates Royalty-free and project licenceson requestfor many end users or special licence models ### What we help you with We help you implement ZUGFeRD in your system, for example: - creating ZUGFeRD / XRechnung XML and PDF/A files, - reading and evaluating ZUGFeRD / XRechnung XML files, - reading and evaluating ZUGFeRD / XRechnung PDF/A files, - embedding ZUGFeRD / XRechnung XML data into existing PDF files, - converting ZUGFeRD / XRechnung XML files directly to PDF/A, - automatic conversion from PDF to PDF/A while embedding, - extracting and evaluating ZUGFeRD / XRechnung data directly from an e-invoice, - .NET and COM / VB6 interfaces. ### Licences in detail All prices are excl. statutory VAT. We sell exclusively to businesses (B2B), not to consumers. #### Trial licence Please send an e-mail to [info@aloaha.com](mailto:info@aloaha.com?subject=Trial%20licence%20Aloaha%20ZUGFeRD%20SDK) for a free trial licence. #### SDK licence Our prices start at a one-time EUR 1,350 excl. VAT for our help with integrating ZUGFeRD into your system. This fee applies per workstation on which our SDK is used for development at one company site. Each SDK licence also includes an end-user (runtime) licence for 10 workstations in-house. Optionally, you can take out a maintenance contract for 20 % per year. A maintenance contract cannot be concluded retroactively and always has to cover all licences in use together – a maintenance contract for individual runtime licences only, or for the SDK only, is not possible. #### End-user (runtime) licence We also charge a one-time support fee of EUR 350 excl. VAT per end user. An end user is a tenant (for example of an online solution), an organisation or a branch. Several tenants (Mandanten): each tenant counts as a separate end user and needs its own runtime licence – even if several tenants belong to the same customer or run in the same ERP installation. Technically, all tenants work with the same licence key; you do not need a new key, but the additional runtime licences are charged. If there is a maintenance contract, it is extended to the new runtime licences (20 % per year). Each runtime licence includes 10 workstation licences. Optionally, you can take out a maintenance contract for 20 % per year. A maintenance contract cannot be concluded retroactively and always has to cover all licences in use together – a maintenance contract for individual runtime licences only, or for the SDK only, is not possible. #### Aloaha ZUGFeRD GUI The [Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) costs EUR 199 excl. VAT. The licence also covers the [Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/). #### Royalty-free licence If you have many end users or counting licences is not practical, you need the royalty-free licence. Please contact [info@aloaha.com](mailto:info@aloaha.com) for prices. #### Project licence Our licence model does not fit the licence model of your application? Please [contact us](mailto:info@aloaha.com) for a project licence. #### ZUGFeRD / XRechnung form If buying software does not pay off for you, or you cannot install software, have a look at our [form solution](https://www.zugferdpro.com/aloaha-zugferd-formular/). With a ZUGFeRD / XRechnung form you can create an invoice without installing any software. #### Updates The ZUGFeRD standard is developed further all the time, so we release updates for our software regularly. With a maintenance contract you can download and use these updates free of charge. #### ZUGFeRD as a web service We also offer our interfaces as a web service (REST, SOAP). Please contact us if you are interested. If you have further questions or suggestions, please contact us at [info@aloaha.com](mailto:info@aloaha.com?subject=Price%20enquiry%20ZUGFeRD%20Pro). ### Frequently asked questions #### How much does the Aloaha ZUGFeRD SDK cost? The SDK licence costs a one-time EUR 1,350 excl. VAT per development workstation and includes a runtime licence for 10 workstations in-house. Each additional end user, organisation or branch needs a runtime licence for EUR 350 excl. VAT. #### Is there a free trial? Yes. A free, fully functional trial licence is available by e-mail to info@aloaha.com. #### Is the maintenance contract mandatory? No. Maintenance is optional at 20 % per year and gives you free updates. It cannot be concluded retroactively and always covers all licences in use together. #### Can private individuals buy a licence? No. We sell exclusively to businesses (B2B). All prices are excl. VAT. #### Do I need a separate runtime licence for each tenant? Yes. Each tenant (Mandant) counts as a separate end user and needs a runtime licence (EUR 350 excl. VAT, one-time, 10 workstations) – even if several tenants belong to the same customer or run in the same ERP installation. #### Do additional tenants need a new licence key? No. All tenants can work with the same licence key. The additional runtime licences are charged, though. #### What happens to the maintenance contract when tenants are added? A maintenance contract always covers all licences in use together. When runtime licences are added, the maintenance contract is extended to them (20 % per year). --- ## Licences et tarifs : SDK Aloaha ZUGFeRD et ZUGFeRD GUI URL: https://www.zugferdpro.com/fr/tarifs-et-licences-sdk-zugferd/ En bref : le SDK Aloaha ZUGFeRD est concédé sous licence moyennant des frais uniques : une licence d'essai gratuite, la licence SDK à 1 350 EUR par poste de développement (licence runtime pour 10 postes en interne incluse) et une licence runtime à 350 EUR par utilisateur final, organisation ou filiale (10 postes chacune). L'Aloaha ZUGFeRD GUI coûte 199 EUR. La maintenance est optionnelle, à 20 % par an. Tous les prix s'entendent hors TVA ; nous vendons uniquement aux entreprises (B2B). LicencePrix (unique, HT)Inclus Licence d'essaigratuitefonctionnalités complètes pour l'évaluation – à demander à info@aloaha.com Licence SDK1 350 EUR par poste de développementlicence runtime pour 10 postes en interne Licence runtime (utilisateur final)350 EUR par utilisateur final10 licences de poste ; un utilisateur final est un client (p. ex. d'une solution en ligne), une organisation ou une filiale Aloaha ZUGFeRD GUI199 EURégalement valable pour l'Aloaha ZUGFeRD PDF Viewer Contrat de maintenance20 % par an (optionnel)mises à jour gratuites Licences libres de droits et licences projetsur demandepour de nombreux utilisateurs finaux ou des modèles de licence particuliers ### Ce pour quoi nous vous aidons Nous vous aidons à intégrer ZUGFeRD dans votre système, par exemple : - création de fichiers XML et PDF/A ZUGFeRD / XRechnung, - lecture et exploitation de fichiers XML ZUGFeRD / XRechnung, - lecture et exploitation de fichiers PDF/A ZUGFeRD / XRechnung, - intégration de données XML ZUGFeRD / XRechnung dans des fichiers PDF existants, - conversion de fichiers XML ZUGFeRD / XRechnung directement en PDF/A, - conversion automatique de PDF en PDF/A lors de l'intégration, - extraction et exploitation des données ZUGFeRD / XRechnung directement depuis une facture électronique, - interfaces .NET et COM / VB6 . ### Les licences en détail Tous les prix s'entendent hors TVA légale. Nous vendons exclusivement aux entreprises (B2B), pas aux particuliers. #### Licence d'essai Pour obtenir une licence d'essai gratuite, envoyez un e-mail à [info@aloaha.com](mailto:info@aloaha.com?subject=Licence%20d%27essai%20Aloaha%20ZUGFeRD%20SDK). #### Licence SDK Nos prix commencent à 1 350 EUR HT, à payer une seule fois, pour notre aide à l'intégration de ZUGFeRD dans votre système. Ce montant s'applique par poste sur lequel notre SDK est utilisé pour le développement sur un site de l'entreprise. Chaque licence SDK comprend en outre une licence utilisateur final (runtime) pour 10 postes en interne. Vous pouvez souscrire en option un contrat de maintenance à 20 % par an. Un contrat de maintenance ne peut pas être conclu rétroactivement et doit toujours couvrir l'ensemble des licences utilisées – un contrat de maintenance pour certaines licences runtime seulement, ou pour le SDK seul, n'est pas possible. #### Licence utilisateur final (runtime) Nous facturons en outre un forfait d'assistance unique de 350 EUR HT par utilisateur final. Par utilisateur final, nous entendons un client (par exemple d'une solution en ligne), une organisation ou une filiale. Plusieurs mandants (clients d'un ERP) : chaque mandant compte comme un utilisateur final distinct et nécessite sa propre licence runtime – même si plusieurs mandants appartiennent au même client ou fonctionnent dans la même installation ERP. Techniquement, tous les mandants utilisent la même clé de licence ; vous n'avez pas besoin d'une nouvelle clé, mais les licences runtime supplémentaires sont facturées. S'il existe un contrat de maintenance, il est étendu aux nouvelles licences runtime (20 % par an). Chaque licence runtime comprend 10 licences de poste. Vous pouvez souscrire en option un contrat de maintenance à 20 % par an. Un contrat de maintenance ne peut pas être conclu rétroactivement et doit toujours couvrir l'ensemble des licences utilisées – un contrat de maintenance pour certaines licences runtime seulement, ou pour le SDK seul, n'est pas possible. #### Aloaha ZUGFeRD GUI L'[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) coûte 199 EUR HT. La licence couvre également l'[Aloaha ZUGFeRD PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/). #### Licence libre de droits (royalty free) Si vous avez de nombreux utilisateurs finaux ou s'il n'est pas pratique de compter les licences, vous avez besoin de la licence libre de droits. Pour les tarifs, contactez [info@aloaha.com](mailto:info@aloaha.com). #### Licence projet Notre modèle de licence ne correspond pas à celui de votre application ? [Contactez-nous](mailto:info@aloaha.com) pour une licence projet. #### Formulaire ZUGFeRD / XRechnung Si l'achat d'un logiciel n'est pas rentable pour vous, ou si vous ne pouvez pas installer de logiciel, découvrez notre [solution de formulaire](https://www.zugferdpro.com/aloaha-zugferd-formular/). Avec un formulaire ZUGFeRD / XRechnung, vous créez une facture sans installer aucun logiciel. #### Mises à jour La norme ZUGFeRD évolue en permanence ; c'est pourquoi nous publions régulièrement des mises à jour de nos logiciels. Avec un contrat de maintenance, vous pouvez télécharger et utiliser ces mises à jour gratuitement. #### ZUGFeRD en tant que service web Nous proposons également nos interfaces sous forme de service web (REST, SOAP). Contactez-nous si cela vous intéresse. Pour toute autre question ou suggestion, écrivez-nous à [info@aloaha.com](mailto:info@aloaha.com?subject=Demande%20de%20prix%20ZUGFeRD%20Pro). ### Questions fréquentes #### Combien coûte le SDK Aloaha ZUGFeRD ? La licence SDK coûte 1 350 EUR HT, à payer une seule fois, par poste de développement et comprend une licence runtime pour 10 postes en interne. Chaque utilisateur final, organisation ou filiale supplémentaire nécessite une licence runtime à 350 EUR HT. #### Existe-t-il un essai gratuit ? Oui. Une licence d'essai gratuite et complète est disponible par e-mail à info@aloaha.com. #### Le contrat de maintenance est-il obligatoire ? Non. La maintenance est optionnelle, à 20 % par an, et donne droit aux mises à jour gratuites. Elle ne peut pas être conclue rétroactivement et couvre toujours l'ensemble des licences utilisées. #### Un particulier peut-il acheter une licence ? Non. Nous vendons exclusivement aux entreprises (B2B). Tous les prix s'entendent hors TVA. #### Faut-il une licence runtime par mandant ? Oui. Chaque mandant compte comme un utilisateur final distinct et nécessite une licence runtime (350 EUR HT, paiement unique, 10 postes) – même si plusieurs mandants appartiennent au même client ou fonctionnent dans la même installation ERP. #### Les mandants supplémentaires ont-ils besoin d'une nouvelle clé de licence ? Non. Tous les mandants peuvent utiliser la même clé de licence. Les licences runtime supplémentaires sont toutefois facturées. #### Qu'en est-il du contrat de maintenance lorsque des mandants s'ajoutent ? Un contrat de maintenance couvre toujours l'ensemble des licences utilisées. Lorsque des licences runtime s'ajoutent, le contrat de maintenance est étendu à ces licences (20 % par an). --- ## Téléchargements : SDK Aloaha ZUGFeRD, programmes d'installation, outils et historique des versions URL: https://www.zugferdpro.com/fr/telechargements/ Le SDK Aloaha ZUGFeRD est disponible en plusieurs variantes. En principe, il suffit tout à fait de télécharger la [DLL Aloaha ZUGFeRD](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) et de l'[enregistrer](https://www.zugferdpro.com/category/code-2/vb6-code-2/register/) sur votre système. Notre SDK effectue tout le reste automatiquement lors du premier appel. Sur vos postes de développement, nous vous recommandons toutefois d'installer à l'aide de l'un des programmes d'installation proposés plus bas sur cette page. Vous pouvez bien sûr commencer par télécharger notre [interface de démonstration (GUI)](https://www.zugferdpro.com/aloaha-zugferd-gui/). Pour cela, cliquez [ici](https://www.aloaha.com/download/Aloaha_ZUGFeRD_GUI_bin.zip). Notre convertisseur CSV vers ZUGFeRD est également très apprécié. Importez simplement vos fichiers CSV dans ZUGFeRD : [Importer des fichiers CSV dans une XRechnung conforme à ZUGFeRD (en allemand)](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) L'interface de démonstration, SDK inclus, peut être téléchargée à l'adresse suivante : [https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD.zip) Si vous effectuez une mise à niveau depuis une version antérieure à 11.0, assurez-vous de disposer d'une licence valide pour la version 11. Les mises à niveau sont gratuites avec un contrat de maintenance valide. Le contrat de maintenance est facturé 20 % du montant total de la facture, toujours à compter de la date d'achat. #### Programme d'installation Windows – version actuelle 11 : Un seul programme d'installation pour 32 et 64 bits : [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) (contient Aloaha_ZUGFeRD_SDK_Setup.msi). - Installe le SDK dans \Aloaha\ZUGFeRD SDK , y compris l'Aloaha ZUGFeRD GUI. - Ajoute Aloaha_ZUGFeRD.dll au Global Assembly Cache et l'enregistre pour COM – pour les applications 32 bits et 64 bits. - Prérequis : .NET Framework 4.7.2. - Environ quatre fois plus rapide que la version 10 en mode 64 bits. #### Programmes d'installation Windows – dernière version 10 : Remarque : les programmes d'installation suivants contiennent la dernière version 10 du SDK Aloaha ZUGFeRD (.NET 3.5). Nous passons désormais à la version 11 (.NET Framework 4.7.2). La mise à niveau vers la version 11 est gratuite pour tous les clients disposant d'un contrat de maintenance valide. 32 bits64 bits (inclut 32 bits) Installeur MSI[aloaha_zugferd_32msi.zip](https://www.aloaha.com/download/aloaha_zugferd_32msi.zip)[aloaha_zugferd_64msi.zip](https://www.aloaha.com/download/aloaha_zugferd_64msi.zip) Installeur EXE[aloaha_zugferd_32exe.zip](https://www.aloaha.com/download/aloaha_zugferd_32exe.zip)[aloaha_zugferd_64exe.zip](https://www.aloaha.com/download/aloaha_zugferd_64exe.zip) Les bibliothèques sont installées dans \Aloaha ! #### Autres téléchargements : - Toutes les bibliothèques sans installeur : zugferdbinaries.zip – toutes les DLL du SDK Aloaha ZUGFeRD, y compris la bibliothèque de types ( Aloaha_ZUGFeRD.tlb ), RegAsm pour 32 et 64 bits et les utilitaires d'enregistrement InstallLib32.exe / InstallLib64.exe . Idéal pour la distribution sur les postes cibles ou pour les projets Delphi, VB6 et Access – voir enregistrer les bibliothèques . - Outil en ligne de commande zugcmd : zugcmd.zip – crée des XML ZUGFeRD / XRechnung à partir de fichiers CSV (exemples CSV et fichier readme inclus) et relit des factures électroniques en CSV, entièrement sans programmation de votre part. En savoir plus : importer du CSV dans ZUGFeRD , convertir ZUGFeRD en CSV , tous les outils en ligne de commande (en allemand). - Modèles Word pour PDF/A à partir du XML : template.docx (exemple de facture complet) et TemplateEUR_VAT.docx (variante allégée en euros) – CreateDocFromXML en fait la facture ZUGFeRD PDF/A-3. Tous les champs de substitution avec les numéros BT : modèle Word et champs de substitution (en allemand). #### Licence d'évaluation : Pour obtenir une licence d'essai gratuite, envoyez un e-mail à info@aloaha.com. #### Prérequis : À partir de la version 11, le SDK nécessite le .NET Framework 4.7.2 (déjà inclus dans Windows 10 à partir de la version 1803 et dans Windows 11). Les versions 10 et antérieures ont été programmées en .NET 3.5 et nécessitent le runtime .NET Framework 3.5. Des interfaces de programmation existent pour le [.NET Framework](https://www.zugferdpro.com/erstellen-des-zugferd-objektes/) et pour [VB6 (COM)](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/). #### Versions : 11.0.0.6 – PDF ZUGFeRD avec pièces jointes : lors de l'intégration ([MergeXMLIntoPDF](https://www.zugferdpro.com/api/mergexmlintopdf/)), le XML de la facture n'est plus enregistré qu'une seule fois et sous son nom de fichier correct ; les pièces jointes supplémentaires, comme un PDF d'accompagnement, reçoivent toujours un type de fichier (type MIME) – plus d'avertissement PDF/A 6.8/1. Pour la XRechnung, les métadonnées PDF/A reprennent la version indiquée dans le XML (BT-24). Nouvelle propriété [LastWarning](https://www.zugferdpro.com/api/lastwarning/) : signale lorsqu'une XRechnung devient Factur-X EXTENDED en raison d'un champ EXTENDED. [WriteBuyerContactPerson](https://www.zugferdpro.com/api/writebuyercontactperson/) écrit aussi un service sans nom de personne comme point de contact de l'acheteur. Interface COM de nouveau entièrement compatible avec la version 10 (liaison anticipée, p. ex. VB6). [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) : code de sortie 62 si une signature a été demandée mais qu'aucun PDF n'a été créé ; une sortie non signée n'est pas enregistrée sous le nom cible. Le programme d'installation du SDK contient aussi la bibliothèque de types Aloaha_ZUGFeRD.tlb et un script de test COM. Téléchargement : [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.3 – Signature depuis la ligne de commande : [zugcmd](https://www.zugferdpro.com/zugcmd-kommandozeilen-tool/) signe des PDF existants ou la facture ZUGFeRD qui vient d'être créée – localement avec un certificat (-cert) ou via la [signature à distance CodeB](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) (nouveaux paramètres -remoteurl, -remoteuser, -remotepw et -level, PAdES B-B à B-LTA). Le CodeB Remote Signature Service fait partie du logiciel CodeB EUID Wallet, désormais utilisé aussi pour ZUGFeRD. Nouvelle classe COM [RemoteSigner](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) pour les serveurs et le traitement par lots : niveau minimal, motif d'une rétrogradation, nouvelle tentative automatique en cas de limitation de débit, paramètres depuis le registre ; l'interface ZUGFeRD GUI, le PDF Viewer (réglage du niveau minimal) et zugcmd (-minlevel) l'utilisent. [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) et [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) : affichage de la progression pendant la signature à distance et nouvelle boîte de dialogue d'informations avec les coordonnées. Téléchargement : [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.2 – Nouvelle fonction [SignPDFRemote](https://www.zugferdpro.com/pdf-remote-signieren-signpdfremote/) : signer à distance des factures PDF et ZUGFeRD en PAdES (B-B à B-LTA) via le CodeB Remote Signature Service (qui fait partie du logiciel CodeB EUID Wallet) – sans certificat local, également via COM. [ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) et [PDF Viewer](https://www.zugferdpro.com/aloaha-pdf-viewer/) : nouveaux paramètres de signature (certificat local ou signature à distance CodeB) et signature des PDF ZUGFeRD finalisés. Téléchargement : [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.1 – Nouvelle fonction [AddDeliveryNoteItem](https://www.zugferdpro.com/api/adddeliverynoteitem/) : référence du bon de livraison (numéro, date et numéro de ligne) par ligne de facture (profil EXTENDED). Traitement PDF plus stable : les ressources sont libérées immédiatement, de sorte que le traitement reste aussi rapide même avec un très grand nombre de fichiers à la suite. XRechnung : les références aux factures antérieures sont désormais conformes à la norme (une seule référence en XRechnung CII, toutes en ZUGFeRD / Factur-X). Diverses corrections. Téléchargement : [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 11.0.0.0 – Nouvelle version majeure 11 basée sur le .NET Framework 4.7.2. Environ quatre fois plus rapide que la version 10 en mode 64 bits. Importation des factures UBL nettement améliorée. Prérequis : .NET Framework 4.7.2. Téléchargement : [Aloaha_ZUGFeRD_SDK.zip](https://www.aloaha.com/download/Aloaha_ZUGFeRD_SDK.zip) 10.0.0.36 – Dernier build de la version majeure 10 et en même temps dernier build basé sur .NET 3.5. Les versions suivantes portent le numéro de version majeure 11 et reposent sur le .NET Framework 4.7.2. La mise à niveau vers la version 11 est gratuite pour tous les clients disposant d'un contrat de maintenance valide. Télécharger la version 10.0.0.36 (.NET 3.5) : 32 bits64 bits (inclut 32 bits) Installeur MSI[aloaha_zugferd_32msi.zip](https://www.aloaha.com/download/aloaha_zugferd_32msi.zip)[aloaha_zugferd_64msi.zip](https://www.aloaha.com/download/aloaha_zugferd_64msi.zip) Installeur EXE[aloaha_zugferd_32exe.zip](https://www.aloaha.com/download/aloaha_zugferd_32exe.zip)[aloaha_zugferd_64exe.zip](https://www.aloaha.com/download/aloaha_zugferd_64exe.zip) 10.0.0.24 – Build de maintenance 10.0.0.16 – BG-X-4 – taxe incluse par ligne introduite pour le B2C 10.0.0.15 – CalculatedAmount pour la TVA accepte désormais 4 décimales 10.0.0.0 – Les fichiers XML en syntaxe UBL peuvent désormais être lus Remarque : la mise à niveau de la version majeure 9 vers la version 10 est gratuite pour les clients disposant d'un contrat de maintenance valide. 9.0.0.106 – Version de maintenance pour les interfaces CSV. 9.0.0.102 – Nouvelles fonctions BG-27/28 : addItemSpecifiedTradeAllowanceCharge, getItemSpecifiedTradeAllowanceChargeCount et getItemSpecifiedTradeAllowanceCharge pour définir ou lire les remises et frais sur une ligne de facture. 9.0.0.101 – Nouvelles fonctions : SetPayeeTradeParty et GetPayeeTradeParty pour définir un bénéficiaire du paiement différent. Interface CSV avec les nouveaux fichiers CSV deliverfrom.csv et deliverto.csv. 9.0.0.100 – Version de maintenance 9.0.0.92 – Nouvelle fonction MergeXMLIntoPDFWait4PDF – attend que le PDF d'entrée soit disponible. 9.0.0.91 – Petites modifications de l'API CSV et de la GUI 9.0.0.90 – Build de maintenance, nombreuses nouvelles fonctions comme PrintPDFDocument 9.0.0.70 – Build de maintenance pour l'[Aloaha ZUGFeRD GUI](https://www.zugferdpro.com/aloaha-zugferd-gui/) (05.11.2024) [Formulaire](https://forms.codeb.io/pdfforms.aspx?fid=zugferd) ZUGFeRD XRechnung remanié 9.0.0.44 – [WriteShipToTradeParty](https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/)révisée et [WriteShipToTradePartyItem](https://www.zugferdpro.com/innergemeinschaftlichen-rechnung-und-shiptotradeparty-bt-80/) ajoutée 9.0.0.43 – Version de maintenance, principalement pour [ZUGCMD](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/). 9.0.0.30 – Nouvelle fonction AddSpecifiedAdvancePayment 9.0.0.28 – Build de maintenance 9.0.0.17 – ZUGCMD – importation directe de fichiers CSV dans ZUGFeRD [Importer des fichiers CSV dans une XRechnung conforme à ZUGFeRD (en allemand)](https://www.zugferdpro.com/importieren-von-csv-dateien-in-eine-zugferd-konforme-x-rechnung/) 9.0.0.0 – XRechnung 3.0.1 – [https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/](https://www.e-rechnung-bund.de/standard-xrechnung-3-0-1/) Remarque : la mise à niveau de la version majeure 8 vers la version 9 est gratuite pour les clients disposant d'un contrat de maintenance valide. 8.0.0.80 – XRechnung 2.3.1 – [https://www.e-rechnung-bund.de/neue-version-xrechnung-2-3-1/](https://www.e-rechnung-bund.de/neue-version-xrechnung-2-3-1/) 8.0.0.77 – Build de maintenance 8.0.0.12 – Ajout des propriétés LeitwegID et Kundennummer 8.0.0.11 – Build de maintenance et mise à jour du profil XRechnung (isKosit=true) 8.0.0.3 – Build de maintenance pour des corrections mineures et des améliorations pour XInvoice/EN16931/Factur-X/ZUGFeRD 2 8.0.0.0 – XInvoice/EN16931/Factur-X/ZUGFeRD 2 pris en charge à partir du 1er septembre 2020. Remarque : la mise à niveau de la version majeure 7 vers la version 8 est gratuite pour les clients disposant d'un contrat de maintenance valide. 7.1.0.20 – Ajout du remplissage de formulaires PDF 7.1.0.00 – Version de service, ajout de nouvelles propriétés du profil EXTENDED Remarque : la mise à niveau de la version majeure 6 vers la version 7 est gratuite pour les clients disposant d'un contrat de maintenance valide. 6.0.33 – [ZUGFeRD_Structure](https://www.zugferdpro.com/laden-einer-existierenden-zugferd-rechnung-in-das-toolkit/)désormais disponible aussi en VB6/COM 6.0.32 – Introduction de [SaveAttachment](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-com/)et [FileAttachments](https://www.zugferdpro.com/beliebige-anhaenge-aus-einem-pdf-extrahieren-net/) 6.0.30 – Introduction de [Files2Attach](https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/)et [AddFile2Attach](https://www.zugferdpro.com/zusammenfuehrung-von-xml-und-pdf-und-optional-dokumente-als-anhaenge-einfuegen/) 6.0.26 – Interface COM améliorée pour les [utilisateurs de VB6](https://www.zugferdpro.com/erstellen-des-zugferd-objektes-in-vb6-bzw-com/) #### ZUGFeRD en tant que service web Nous proposons également nos interfaces sous forme de [service web](https://www.zugferdpro.com/zugferd-xml-und-pdf-rechnung-per-webservice-zu-einer-pdf-zugferd-rechnung-zusammenfuhren/) (REST, SOAP). N'hésitez pas à nous contacter si cela vous intéresse. Demandez votre licence d'essai à [info@aloaha.com](mailto:info@aloaha.com) ! ### Questions fréquentes #### Quel téléchargement me faut-il pour le SDK Aloaha ZUGFeRD ? Pour les postes de développement, le programme d'installation Windows Aloaha_ZUGFeRD_SDK.zip (un seul installeur pour 32 et 64 bits). Il installe le SDK avec l'Aloaha ZUGFeRD GUI et enregistre Aloaha_ZUGFeRD.dll dans le Global Assembly Cache et pour COM. Pour la distribution sur des postes cibles sans installeur, utilisez zugferdbinaries.zip. #### Quelle est la configuration requise ? À partir de la version 11, le SDK nécessite le .NET Framework 4.7.2, déjà inclus dans Windows 10 à partir de la version 1803 et dans Windows 11. Les versions 10 et antérieures nécessitent le runtime .NET Framework 3.5. #### La mise à niveau vers la version 11 est-elle gratuite ? Oui, pour tous les clients disposant d'un contrat de maintenance valide. Si vous effectuez une mise à niveau depuis une version antérieure à 11.0, assurez-vous de disposer d'une licence valide pour la version 11.