ZUGFeRD-Composer

ZUGFeRD/XRechnung/Factur-X ganz einfach

Ab dem 1. Januar 2025 wird die elektronische Rechnung („E-Rechnung“) mit verschiedenen Ausnahmen und Übergangsfristen zum verbindlichen Standard für Abrechnungen zwischen Unternehmen. Das Computermagazin c’t hat das Thema in seiner Ausgabe 26/2024 aufgegriffen und mehrere Artikel verfasst. Hier ein Link zu Quellen und Downloads

In den Buchhaltungsprogrammen großer Unternehmen ist die Unterstützung für elektronische Rechnungen sicherlich weitgehend enthalten. Kleinere Unternehmen, die ihre Rechnungen bisher in Word, Excel oder ähnlichen Programmen erstellt haben, schauen jedoch in die Röhre und müssen sich nach anderen, oft kostenpflichtigen Lösungen umsehen.

Mit dem kostenlosen ZUGFeRD-Composer sind diese Zeiten vorbei. Das Archiv enthält zahlreiche Beispiele für die Erstellung von rechtsgültiger ZUGFeRD– (das sind PDF-Dateien mit eingebetteten XML-Daten – das identische Format heißt in Frankreich Factur-X) oder XRechnung-Dateien (reines XML-Format). Hier finden Sie mehr Details darüber.

Der Composer nutzt die frei ZUGFeRD Bibliothek von Stephan Stapel, der viel Arbeit in die Bibliothek gesteckt hat und zu Recht um Unterstützung bittet. Für andere Programmiersprachen als C# gibt es entsprechende Bibliotheken, z.B. für php.

Die Idee dahinter

Das Beispiel zum automatischen Versenden von E-Mails mittels verstecktem Text inspirierte uns zu einer ähnliches Lösung.

An den entsprechenden Stellen in den Rechnungsdokumenten werden einfach vordefinierte Muster in kleiner weißer Schrift eingefügt und vom Composer aus dem Seitentext herausgefiltert.

Sichtbare Muster

Der Composer enthält eine Konfigurationsdatei mit definierten Schlüsseln (z.B. invoice_nr)  und Anweisungen zur Extraktion der Daten.
Das sieht z.B. so aus:

/// Force a number format from a country e.g. DE-DE
number_format:                          1:c:[NF]:⁞

//# ----------- Invoice -----------------
// BT-1
invoice_nr:	   	                0:c:[01]:⁞
// BT-2
invoice_date:                           0:c:[02]:⁞
// BT-3: Invoice = 380, Unknown = 0: Use string or number
invoice_type:                           0:c:[03]:⁞
// BT-5: EUR, USD, ...
invoice_currency:                       0:c:[05]:⁞
// BT-9: 
invoice_payment_due_date:               0:c:[09]:⁞
// BT-9: 
invoice_payment_description:            1:c:[20]:⁞

Als Trennzeichen dient der Doppelpunkt; '0/1' für Pflicht/Optional; 'c' für Character; '[01]' ist z.B.: der Starttext, '⁞' ein seltenes Zeichen aus dem Unicode Zeichensatz zur Kennzeichnung des Textendes. Der Text dazwischen wird in diesem Fall als Rechnungsnummer verwendet. Sie können all dies, einschließlich des Trennzeichens, bei Bedarf konfigurieren.

Wenn Sie einen Blick auf den obigen Rechnungsausschnitt werfen, erkennen Sie die Rechnungsnummer, die von den Mustern umschlossen wird.

Textdarstellung aus der Rechnung erzeugen

Damit der Composer funktioniert, muss der Inhalt des Rechnungsdokuments, unabhängig vom Format, dem Composer als Text zur Verfügung gestellt werden. Dazu gibt es verschiedene Möglichkeiten.

  • Die naheliegendste Möglichkeit ist, die Textdatei programmatisch zu erzeugen und den Composer nur als Kommandozeile für die ZUGFeRD Bibliothek zu verwenden. Sie können die Bibliothek natürlich auch direkt verwenden.
  • Sie kopieren den gesamten Rechnungsinhalt in die Zwischenablage und rufen den Composer mit der Option '/iC' auf. In vielen Programmen funktioniert dies jedoch nicht. Zum Beispiel in Word nicht, wenn Sie Textboxen oder eingebettete Objekte verwenden.
  • Der Composer kann mit Hilfe der IFilter-Technik den Text aus Rechnungsdokumenten extrahieren. Windows verwendet diese Methode für die Volltextsuche. Im Downloadarchiv ist auch das Tool "IFilterCmd" enthalten. Rufen Sie es doch einfach mal mit einer Word-, PDF- oder anderen Datei auf. Es kann auch mit Wildcards umgehen („IFilterCmd /S  *.pdf“ erzeugt für alle PDF Dateien im aktuellen und allen Unterverzeichnissen eine *.pdf.txt Datei).
    Intern wird die Option '/w " "' verwendet um ungewollte Bindestriche zu vermeiden.
  • PrintMulti kann während des Druckens Texte aus dem Druckdatenstrom extrahieren. Dazu sollte die neueste Version 2.0.0.8 verwendet werden, die Verbesserungen in diesem Bereich enthält. Dies funktioniert dann z.B. auch mit eingebetteten Objekten in Word. Viele Softwareprodukte setzen auf Reportgeneratoren oder html-Rechnungen. Wenn Sie dort versteckte Texte einfügen können, funktioniert es wahrscheinlich auch mit PrintMulti.
    Sie können PrintMulti auch auf einem Server installieren (dann aber lizenzpflichtig) und den Drucker freigeben, so dass bei mehreren Arbeitsplätzen eine zentrale Ablage der elektronischen Rechnungen erfolgen kann.

Details finden Sie unter folgenden Links: README, Handbuch und Beschreibung der Beispiele

Zum Ausprobieren, laden Sie am besten das Archiv herunter, entpacken es in den Pfad „C:\ZUGFeRDComposer“ und rufen im Unterverzeichnis  „Examples/Word“ Verzeichnis die Datei „RunExamples.cmd“ auf.
Sie können auch einfach eines der Word- oder das LibreOffice-Dokument öffnen, den gesamten Inhalt in die Zwischenablage kopieren und die Batch-Datei „C:\ZUGFeRDComposer\Examples\RunFromClipboard.cmd“ aufrufen.

Danach sollte sich der Explorer mit dem Verzeichnis „C:\ZUGFeRDComposer\2025-0002“ öffnen (2025-002 ist die Rechnungsnummer) in dem sich mehrere ZUGFeRD und XRechnungen befinden.

In den Word-Dateien mit Makros gibt es welche zum Anzeigen und Verstecken der besonderen Formatvorlagen „Hidden“ und „Hidden optional“. Hier sind Links zu der kompletten Rechnung mit sichtbaren Texten und unsichtbaren Texten.
In der linken oberen Ecke sind die vier Makros zu erkennen (grün: Verstecken, rot: Anzeigen, 😁: IFilter, : Zwischenablage)

Der Composer unterstützt noch nicht alle Möglichkeiten der elektronischen Rechnungen (siehe README). Erweiterungen sind vermutlich leicht möglich, sofern die Bibliothek es unterstützt.