- Startseite
- Neuigkeiten
- Über mich
- Referenzen
- Beispiele
- Artikel
- Vorträge
- Tools
- Access-Tipps
- Excel-Tipps
- Spielereien
- Kontakt
- Impressum
- Datenschutz
Meine Projekte:
ZUGFeRD-Rechnungen mit Microsoft Office erstellen
Hier der aktuelle Stand meines Versuchs, mit Microsoft Office, VBA und freien Hilfsprogrammen eine valide ZUGFeRD-Rechnung zu erstellen.
TL;DR
Ich kann valide ZUGFeRD-Rechnungen und XRechnungen erstellen. Meine Lösung erfordert aber eine definierte Umgebung und Fachwissen. Deshalb verwende ich sie derzeit nur für eigene Projekte. Wenn Sie Ihre eigene Anwendung von mir erstellen lassen oder künftig betreuen lassen wollen und bereit sind, meine Arbeit angemessen zu bezahlen, nehmen Sie gerne unverbindlich Kontakt mit mir auf.
Was ist eine ZUGFeRD-Rechnung?
Schon vor einigen Jahren wurde angekündigt, dass es bald auch für kleine Firmen und Selbstständige zur Pflicht wird, B2B-Rechnungen in elektronischer, maschinenlesbarer Form zu versenden und zu akzeptieren. Ein guter Kompromiss zwischen Maschinenlesbarkeit (XML-Daten) und Menschenlesbarkeit (PDF) scheint das ZUGFeRD-Format zu sein. Es vereint beides in einer Datei, indem ein PDF mit einem Anhang im XML-Format versehen wird. Das sollte sich doch auf den ersten Blick relativ einfach umzusetzen lassen.
Wie alles begann
Wie viele Selbständige erstelle ich meine Rechnungen mit den Daten aus einer Access-Datenbank in Word, speichere sie im PDF-Format ab und schütze sie mit einem Passwort gegen allzu einfache Veränderungen.
Das komplexe ZUGFeRD-XML erstelle ich ebenfalls mit VBA aus der Rechnungsdatenbank. Mit einem selbst geschriebenen Tool, habe ich mir das Grundgerüst anhand einer Musterdatei erstellt und an die entsprechenden Datenfelder angebunden.
Zuletzt füge ich diese Datei als Anhang zum Rechnungs-PDF hinzu. Das funktioniert technisch einwandfrei, die beiden Darstellungen der Rechnung passen inhaltlich zusammen, das XML ist korrekt und valide.

Wo war das Problem?
Obwohl alles in Ordnung zu sein schien, ließ sich die Datei nicht als ZUGFeRD-Rechnung validieren. Nach einigem Suchen habe ich herausgefunden, dass das PDF noch mit einem Schema im XMP-Format versehen werden muss, damit es als Rechnung erkannt wird. Dafür braucht es ein Hilfsprogramm. Inzwischen gibt es mehrere freie Tools, die genau das können. Ich verwende ein Open-Source-Projekt, das sich auch per Kommandozeile steuern lässt. Damit habe ich jetzt alle Bausteine beisammen, um mit Office, VBA und freien Tools eine valide ZUGFeRD-Rechnung zu erstellen.
Wie geht es weiter?
Jetzt ist noch etwas Arbeit nötig, um daraus eine fertige, leicht benutzbare Klasse zu erstellen. Die Programmierung ist dabei das kleinere Problem. Schwieriger ist es, die dem XML zugrunde liegende Businesslogik umzusetzen. Kaum entfernt oder ergänzt man ein optionales Feld, müssen dafür andere Felder weggelassen, hinzugefügt oder mit bestimmten Texten gefüllt werden. Tags, die noch in einer älteren Version Pflicht waren, sind in einer neueren Version nicht mehr zulässig.
Deshalb bin ich jetzt dazu übergegangen, die erstellten Dateien automatisch lokal zu validieren, ohne die Rechnungen zu einem (mehr oder weniger vertrauenswürdigen) Dienstleister hochladen zu müssen. Das hilft mir, Datenfehler zu erkennen, da sich die im vorherigen Absatz angedeuteten Regeln im Vorfeld nur sehr schwer prüfen lassen. Außerdem kann ich das XML (inner- und außerhalb einer ZUGFeRD-Rechnung) als HTML- oder PDF visualisieren, um dieses manuell zu prüfen. Und dass es zwei Formate für das XML gibt (CII und UBL) und welches für welche Verwendung das richtige ist, musste ich erst lernen und kann nun beide erstellen.
Um eine gültige ZUGFeRD-Rechnung zu erstellen, wird ein PDF im Format PDF/A-3 benötigt, das nur mit den aktuellen Office-Versionen (Windows 365 oder Office 2019 und höher) erstellt werden kann. Und auch nur, wenn bestimmte Parameter beim Export gesetzt sind. Das Umwandeln einer PDF/A-1 (aus den älteren Office-Version 2013-16) in eine PDF/A-3 kann ich mittlerweile auch. Wie man ein normales PDF automatisch in ein das PDF/A-Format umwandelt, weiß ich noch nicht. Und wie man das Format automatisch prüft, muss ich auch noch herausfinden.
Fazit
Ich verstehe jetzt, warum andere Anbieter von kommerziellen Tools diese teuer und nur im Abonnement anbieten können. Ich habe in eineinhalb Jahren mehr als 150 Stunden in das Thema investiert und werde meine Entwicklung jetzt erst einmal darauf beschränken, alle notwendigen Funktionen für meine eigenen Rechnungen und für meine Kunden fertigzustellen. Dann sehe ich weiter, ob und wie ich meine Lösung auch anderen Entwicklern zur Verfügung zu stellen kann.
