Word-Vorlage für ZUGFeRD-PDF/A: Platzhalter und BT-Nummern

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

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 seine 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-1Rechnungsnummer
[Document_Date]BT-2Rechnungsdatum
[Document_Name]–Dokumentname (ZUGFeRD EXTENDED)
[Document_Note]BT-22erster Freitext zur Rechnung
[Comment]–Hinweistexte aus reinen Text-/Kommentarzeilen der Positionsliste (Zeilen ohne Positionsnummer)
[InvoiceCurrencyCode]BT-5Rechnungswährung, z. B. EUR
[ActualDeliveryDate]BT-72Tatsächliches Lieferdatum
[BillingPeriodStart]BT-73Beginn des Rechnungszeitraums
[BillingPeriodEnd]BT-74Ende des Rechnungszeitraums
[BuyerReference], [LeitwegID]BT-10Käuferreferenz bzw. Leitweg-ID (XRechnung)
[SellerOrderReference]BT-14Auftragsnummer des Verkäufers (SellerOrderReferencedDocument) – ab Version 11.0.0.9
[BuyerOrderReference]BT-13Bestellnummer des Käufers – ab Version 11.0.0.9
[ContractReference]BT-12Vertragsnummer – ab Version 11.0.0.9
[ProjectReference]BT-11Projektnummer – ab Version 11.0.0.9
[DespatchAdviceReference]BT-16Lieferschein- bzw. Lieferavisnummer – ab Version 11.0.0.9
[InvoiceReference]BT-25Nummer der vorausgegangenen Rechnung (die erste) – ab Version 11.0.0.9
[AccountingReference]BT-19Buchungsreferenz 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

PlatzhalterBTInhalt
[PaymentTerms]BT-20Zahlungsbedingungen (mehrere untereinander)
[DueDate]BT-9Fälligkeitsdatum
[PaymentReference]BT-83Verwendungszweck
[Creditor.IBAN]BT-84IBAN des Zahlungsempfängers (Überweisung)
[Creditor.BIC]BT-86BIC des Zahlungsempfängers
[Creditor.Bankname]–Name der Bank des Zahlungsempfängers
[Creditor.BLZ]–Bankleitzahl (nur ältere ZUGFeRD-Versionen)
[Debtor.IBAN]BT-91IBAN des zu belastenden Kontos (Lastschrift)
[Debtor.BIC], [Debtor.Bankname], [Debtor.BLZ]–Bankdaten des Zahlungspflichtigen

Summen

PlatzhalterBTInhalt
[LineTotalAmount]BT-106Summe der Nettobeträge aller Positionen
[AllowanceTotalAmount]BT-107Summe der Abschläge auf Dokumentebene
[ChargeTotalAmount]BT-108Summe der Zuschläge auf Dokumentebene
[TaxBasisTotalAmount]BT-109Gesamtbetrag ohne Umsatzsteuer
[TaxTotalAmount]BT-110Umsatzsteuer gesamt
[GrandTotalAmount]BT-112Gesamtbetrag einschließlich Umsatzsteuer
[TotalPrepaidAmount]BT-113Vorauszahlungsbetrag
[DuePayableAmount]BT-115Fä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-119Umsatzsteuersatz in Prozent
[BasisAmount], [BasisAmount1]…BT-116Steuerbasisbetrag je Steuersatz
[CalculatedAmount], [CalculatedAmount1]…BT-117Steuerbetrag je Steuersatz
[LineTotalBasisAmount], [LineTotalBasisAmount1]…–Summe der Positionsbeträge je Steuersatz (ZUGFeRD EXTENDED)

Verkäufer

PlatzhalterBTInhalt
[Seller.Name]BT-27Name des Verkäufers
[Seller.ID]BT-29Kennung des Verkäufers, z. B. Ihre Kreditorennummer beim Kunden
[Seller.GlobalID]BT-29globale Kennung mit Schema, z. B. GLN
[Seller.TAXNumber]BT-31erste Steuerregistrierung, üblicherweise die USt-IdNr.
[Seller.TAXNumber1]BT-32zweite Steuerregistrierung, üblicherweise die Steuernummer
[Seller.URIUniversalCommunication]BT-34elektronische Adresse
[Seller.AddressLine1]BT-35Anschrift Zeile 1
[Seller.AddressLine2]BT-36Anschrift Zeile 2
[Seller.AddressLine3]BT-162Anschrift Zeile 3
[Seller.PostCode]BT-38Postleitzahl
[Seller.City]BT-37Ort
[Seller.Country]BT-40Ländercode, z. B. DE
[Seller.PersonName]BT-41Ansprechpartner
[Seller.Department]BT-41Abteilung der Kontaktstelle
[Seller.Telephone]BT-42Telefon
[Seller.Email]BT-43E-Mail
[Seller.fax]–Fax (ZUGFeRD EXTENDED)

Käufer

PlatzhalterBTInhalt
[Buyer.Name]BT-44Name des Käufers
[Buyer.ID]BT-46Kennung des Käufers, z. B. Kundennummer
[Buyer.GlobalID]BT-46globale Kennung mit Schema, z. B. GLN
[Buyer.TAXNumber]BT-48erste Steuerregistrierung, üblicherweise die USt-IdNr.
[Buyer.TAXNumber1]–zweite Steuerregistrierung
[Buyer.URIUniversalCommunication]BT-49elektronische Adresse
[Buyer.BuyerReference], [Buyer.LeitwegID]BT-10Käuferreferenz bzw. Leitweg-ID
[Buyer.AddressLine1]BT-50Anschrift Zeile 1
[Buyer.AddressLine2]BT-51Anschrift Zeile 2
[Buyer.AddressLine3]BT-163Anschrift Zeile 3
[Buyer.PostCode]BT-53Postleitzahl
[Buyer.City]BT-52Ort
[Buyer.Country]BT-55Ländercode
[Buyer.PersonName]BT-56Ansprechpartner
[Buyer.Department]BT-56Abteilung der Kontaktstelle
[Buyer.Telephone]BT-57Telefon
[Buyer.Email]BT-58E-Mail
[Buyer.fax]–Fax (ZUGFeRD EXTENDED)

Rechnungspositionen (BG-25) – in einer Tabellenzeile

PlatzhalterBTInhalt
[Product.LineID]BT-126Positionsnummer
[Product.Name]BT-153Artikelname
[Product.Description]BT-154Artikelbeschreibung
[Product.Note]BT-127Freitext zur Position
[SellerAssignedID]BT-155Artikelnummer des Verkäufers
[BuyerAssignedID]BT-156Artikelnummer des Käufers
[BilledQuantity]BT-129Menge
[UnitCode]BT-130Mengeneinheit, z. B. C62 = Stück (ersatzweise aus der Basismenge, BT-150)
[NetPriceProductTradePrice]BT-146Nettopreis
[GrossPriceProductTradePrice]BT-148Bruttopreis (Listenpreis vor Rabatt)
[BasisQuantity]BT-149Basismenge zum Preis
[Product.TotalAmount]BT-131Nettobetrag der Position
[Product.Currency]BT-5Währung der Position (sonst Rechnungswährung)
[Product.Tax]BT-152Umsatzsteuersatz der Position
[ProductAllowanceAmount]BT-136Abschlagsbetrag der Position
[ProductAllowanceBasis]BT-137Grundbetrag des Abschlags
[ProductAllowancePercent]BT-138Abschlag in Prozent
[ProductAllowanceReason]BT-139Grund 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