- Thema
- CreateDocFromXML
- SDK-Mitglieder
- ConvertDOCX2PDF() CreateDocFromXML() Last_Error MergeXMLIntoPDF()
- Business Terms
- BT-1 Rechnungsnummer BT-2 Rechnungsdatum BT-5 Code für die Rechnungswährung BT-9 Fälligkeitsdatum der Zahlung BT-10 Referenz des Käufers BT-11 Projektreferenz BT-12 Vertragsreferenz BT-13 Bestellreferenz
- Codebeispiele
- VB.NET, VB6 / VBScript (COM)
- Veröffentlicht
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
| Parameter | Bedeutung |
|---|---|
XMLPath | Pfad zum ZUGFeRD-, Factur-X- oder XRechnung-XML (CII). |
OutputDocPath | Zieldatei. Endung .docx = befüllte Word-Datei, .pdf = fertige ZUGFeRD-PDF/A-3 mit eingebettetem XML. |
DocxTemplatePath | Pfad zur Vorlage. Leer oder nicht vorhanden: Das SDK verwendet seine eingebaute Standardvorlage und gibt deren Pfad zurück (auch über DocXTemplate_Path lesbar). |
Licensekey | Ihr Lizenzschlüssel. |
DoOverWrite | Vorhandene Zieldatei überschreiben (Standard True). |
AdditionalAttachment | Optionale weitere Datei, die bei .pdf-Ausgabe mit eingebettet wird. |
ConverDecimalDot2Comma | True 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.JJJJausgegeben. - 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
Strings2Deleteein – 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
| Platzhalter | BT | Inhalt |
|---|---|---|
[Document_ID] | BT-1 | Rechnungsnummer |
[Document_Date] | BT-2 | Rechnungsdatum |
[Document_Name] | – | Dokumentname (ZUGFeRD EXTENDED) |
[Document_Note] | BT-22 | erster Freitext zur Rechnung |
[Comment] | – | Hinweistexte aus reinen Text-/Kommentarzeilen der Positionsliste (Zeilen ohne Positionsnummer) |
[InvoiceCurrencyCode] | BT-5 | Rechnungswährung, z. B. EUR |
[ActualDeliveryDate] | BT-72 | Tatsächliches Lieferdatum |
[BillingPeriodStart] | BT-73 | Beginn des Rechnungszeitraums |
[BillingPeriodEnd] | BT-74 | Ende des Rechnungszeitraums |
[BuyerReference], [LeitwegID] | BT-10 | Käuferreferenz bzw. Leitweg-ID (XRechnung) |
[SellerOrderReference] | BT-14 | Auftragsnummer des Verkäufers (SellerOrderReferencedDocument) – ab Version 11.0.0.9 |
[BuyerOrderReference] | BT-13 | Bestellnummer des Käufers – ab Version 11.0.0.9 |
[ContractReference] | BT-12 | Vertragsnummer – ab Version 11.0.0.9 |
[ProjectReference] | BT-11 | Projektnummer – ab Version 11.0.0.9 |
[DespatchAdviceReference] | BT-16 | Lieferschein- bzw. Lieferavisnummer – ab Version 11.0.0.9 |
[InvoiceReference] | BT-25 | Nummer der vorausgegangenen Rechnung (die erste) – ab Version 11.0.0.9 |
[AccountingReference] | BT-19 | Buchungsreferenz des Käufers (die erste) – ab Version 11.0.0.9 |
[FormattedDateString] | – | Datum der Erstellung, TT.MM.JJJJ |
[ShortDateString] | – | Datum der Erstellung, kurzes Format des Rechners |
[LongDateString] | – | Datum der Erstellung, langes Format des Rechners |
Zahlung
| Platzhalter | BT | Inhalt |
|---|---|---|
[PaymentTerms] | BT-20 | Zahlungsbedingungen (mehrere untereinander) |
[DueDate] | BT-9 | Fälligkeitsdatum |
[PaymentReference] | BT-83 | Verwendungszweck |
[Creditor.IBAN] | BT-84 | IBAN des Zahlungsempfängers (Überweisung) |
[Creditor.BIC] | 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 | IBAN des zu belastenden Kontos (Lastschrift) |
[Debtor.BIC], [Debtor.Bankname], [Debtor.BLZ] | – | Bankdaten des Zahlungspflichtigen |
Summen
| Platzhalter | BT | Inhalt |
|---|---|---|
[LineTotalAmount] | BT-106 | Summe der Nettobeträge aller Positionen |
[AllowanceTotalAmount] | BT-107 | Summe der Abschläge auf Dokumentebene |
[ChargeTotalAmount] | BT-108 | Summe der Zuschläge auf Dokumentebene |
[TaxBasisTotalAmount] | BT-109 | Gesamtbetrag ohne Umsatzsteuer |
[TaxTotalAmount] | BT-110 | Umsatzsteuer gesamt |
[GrandTotalAmount] | BT-112 | Gesamtbetrag einschließlich Umsatzsteuer |
[TotalPrepaidAmount] | BT-113 | Vorauszahlungsbetrag |
[DuePayableAmount] | 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.
| Platzhalter | BT | Inhalt |
|---|---|---|
[VatRate], [VatRate1]… | BT-119 | Umsatzsteuersatz in Prozent |
[BasisAmount], [BasisAmount1]… | BT-116 | Steuerbasisbetrag je Steuersatz |
[CalculatedAmount], [CalculatedAmount1]… | BT-117 | Steuerbetrag je Steuersatz |
[LineTotalBasisAmount], [LineTotalBasisAmount1]… | – | Summe der Positionsbeträge je Steuersatz (ZUGFeRD EXTENDED) |
Verkäufer
| Platzhalter | BT | Inhalt |
|---|---|---|
[Seller.Name] | BT-27 | Name des Verkäufers |
[Seller.ID] | BT-29 | Kennung des Verkäufers, z. B. Ihre Kreditorennummer beim Kunden |
[Seller.GlobalID] | BT-29 | globale Kennung mit Schema, z. B. GLN |
[Seller.TAXNumber] | BT-31 | erste Steuerregistrierung, üblicherweise die USt-IdNr. |
[Seller.TAXNumber1] | BT-32 | zweite Steuerregistrierung, üblicherweise die Steuernummer |
[Seller.URIUniversalCommunication] | BT-34 | elektronische Adresse |
[Seller.AddressLine1] | BT-35 | Anschrift Zeile 1 |
[Seller.AddressLine2] | BT-36 | Anschrift Zeile 2 |
[Seller.AddressLine3] | BT-162 | Anschrift Zeile 3 |
[Seller.PostCode] | BT-38 | Postleitzahl |
[Seller.City] | BT-37 | Ort |
[Seller.Country] | BT-40 | Ländercode, z. B. DE |
[Seller.PersonName] | BT-41 | Ansprechpartner |
[Seller.Department] | BT-41 | Abteilung der Kontaktstelle |
[Seller.Telephone] | BT-42 | Telefon |
[Seller.Email] | BT-43 | |
[Seller.fax] | – | Fax (ZUGFeRD EXTENDED) |
Käufer
| Platzhalter | BT | Inhalt |
|---|---|---|
[Buyer.Name] | BT-44 | Name des Käufers |
[Buyer.ID] | BT-46 | Kennung des Käufers, z. B. Kundennummer |
[Buyer.GlobalID] | BT-46 | globale Kennung mit Schema, z. B. GLN |
[Buyer.TAXNumber] | BT-48 | erste Steuerregistrierung, üblicherweise die USt-IdNr. |
[Buyer.TAXNumber1] | – | zweite Steuerregistrierung |
[Buyer.URIUniversalCommunication] | BT-49 | elektronische Adresse |
[Buyer.BuyerReference], [Buyer.LeitwegID] | BT-10 | Käuferreferenz bzw. Leitweg-ID |
[Buyer.AddressLine1] | BT-50 | Anschrift Zeile 1 |
[Buyer.AddressLine2] | BT-51 | Anschrift Zeile 2 |
[Buyer.AddressLine3] | BT-163 | Anschrift Zeile 3 |
[Buyer.PostCode] | BT-53 | Postleitzahl |
[Buyer.City] | BT-52 | Ort |
[Buyer.Country] | BT-55 | Ländercode |
[Buyer.PersonName] | BT-56 | Ansprechpartner |
[Buyer.Department] | BT-56 | Abteilung der Kontaktstelle |
[Buyer.Telephone] | BT-57 | Telefon |
[Buyer.Email] | BT-58 | |
[Buyer.fax] | – | Fax (ZUGFeRD EXTENDED) |
Rechnungspositionen (BG-25) – in einer Tabellenzeile
| Platzhalter | BT | Inhalt |
|---|---|---|
[Product.LineID] | BT-126 | Positionsnummer |
[Product.Name] | BT-153 | Artikelname |
[Product.Description] | BT-154 | Artikelbeschreibung |
[Product.Note] | BT-127 | Freitext zur Position |
[SellerAssignedID] | BT-155 | Artikelnummer des Verkäufers |
[BuyerAssignedID] | BT-156 | Artikelnummer des Käufers |
[BilledQuantity] | BT-129 | Menge |
[UnitCode] | BT-130 | Mengeneinheit, z. B. C62 = Stück (ersatzweise aus der Basismenge, BT-150) |
[NetPriceProductTradePrice] | BT-146 | Nettopreis |
[GrossPriceProductTradePrice] | BT-148 | Bruttopreis (Listenpreis vor Rabatt) |
[BasisQuantity] | BT-149 | Basismenge zum Preis |
[Product.TotalAmount] | BT-131 | Nettobetrag der Position |
[Product.Currency] | BT-5 | Währung der Position (sonst Rechnungswährung) |
[Product.Tax] | BT-152 | Umsatzsteuersatz der Position |
[ProductAllowanceAmount] | BT-136 | Abschlagsbetrag der Position |
[ProductAllowanceBasis] | BT-137 | Grundbetrag des Abschlags |
[ProductAllowancePercent] | BT-138 | Abschlag in Prozent |
[ProductAllowanceReason] | 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 oder als ZUGFeRD-PDF. In der Aloaha ZUGFeRD GUI geht es ebenfalls per Mausklick (siehe Automatische XML nach PDF/A Konvertierung), auf der Kommandozeile mit zugcmd.
Häufige Fragen
Wie gebe ich die Auftrags- oder Bestellnummer in der Word-Vorlage aus?
Mit dem Platzhalter [SellerOrderReference] für die eigene Auftragsnummer (BT-14) und [BuyerOrderReference] für die Bestellnummer des Kunden (BT-13). Für Projekt, Vertrag, Lieferschein, vorausgegangene Rechnung und Buchungsreferenz gibt es [ProjectReference], [ContractReference], [DespatchAdviceReference], [InvoiceReference] und [AccountingReference].
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.
Business Terms in diesem Artikel: BT-1 BT-2 BT-5 BT-9 BT-10 BT-11 BT-12 BT-13 BT-14 BT-16 BT-19 BT-20 BT-22 BT-25 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