docxGenerator meets XRECHNUNG meets ZUGFeRD (ein Überblick)


  • Share on Google+

Einleitung

In diesem Beitrag möchte ich zeigen wie mit wenigen Schritten eine Umgebung aufgebaut werden kann, die im ersten Schritt XRECHNUNG oder ZUGFeRD PDFs erzeugen kann.

Dieser Beitrag hat nicht den Anspruch einen vollständigen automatisierten Workflow von der Erstellung bis zum Versand der Rechnung abzubilden.

Mein Ziel ist es, die Umgebung soweit zu automatisieren, dass ich Rechnungen mit wenigen Handgriffen erzeugen kann.

Von daher bin ich froh, dass ich mich durch den Zwang nach elektronischer Rechnung mit diesem Thema auseinandersetzen muss.

Ich verwendete dazu:

  1. docxGenerator
  2. Shareflex® Contract der Portal Systems AG, Hamburg

Die Basis aller Komponenten und Anwendungen ist SharePoint Online.

Ich kann nur einen groben Überblick darüber geben was und wie es funktioniert. Den gesamten Implementierungsprozess zu beschreiben würde jeden Rahmen sprengen.

Aber eine Frage möchte ich jetzt direkt beantworten. Warum habe ich mich für eine Vertragsmanagement Lösung als Grundlage für einen Rechnungsprozess gewählt. Die Frage ist einfach zu beantworten, Shareflex® Contract ist eine ausgereifte, komfortable Lösung und erlaubt ein gutes Customizing. Der dabei wichtigste Aspekt, ich habe schon einige Kundenprojekte begleitet bei denen diese Lösung eingeführt wurde.

Schuster bleib bei den Leisten 🙂

Anpassungen in Shareflex® Contract

In Shareflex® Contract müssen wir ein paar kleine Anpassungen vornehmen um die notwendigen  Daten erfassen zu können.

Die Anpassungen betreffen den Geschäftspartner, den Mandanten, die Dienstleistungsverträgen (Beratervertrag) und die Lizenzverträge.

Der Beratervertrag dient als Container für unsere kundenbezogenen Dienstleistungen die wir im Auftrag unserer Geschäftspartner erbringen.

Hierfür wird für jedes Geschäftspartner / Kundenprojekt ein eigener Vertrag angelegt.

In diesem Vertrag werden alle relevanten Daten sowie die monatlichen Abrechnungspositionen hinterlegt.

Mit den Lizenzverträgen verwalte ich alle Toolverkäufe und Lizenzzeiträume.

Die ergänzenden Anpassungen an Shareflex® Contract werden über den Codegenerator for Contract vorgenommen. D.h. die zusätzliche Felder, die Anpassungen an den Formularen und Views werden in einer EXCEL Tabelle beschrieben und über einen Codegenerator erzeugt.

Ergänzungen im Formular Mandant

Ergänzungen im Formular Geschäftspartner

Im Formular für den Geschäftspartner entscheide ich in welcher Form die Rechnungsdaten bereitgestellt werden.

Offene Punkte

Beide Formulare berücksichtigen noch keine Leitweg-ID oder ähnliche zusätzliche Informationen da diese aktuell noch nicht notwendig sind.

Hier wird sich zum Jahreswechsel 2026 ergeben wie die Bundesregierung / die Finanzämter zukünftig die Daten von kleinen und mittelständischen Unternehmen erhalten wollen und welche zusätzlichen Informationen hierfür benötigt werden.

Wo die Reise hingehen kann, kann man am Umfang der Beschreibung unter Peppol BIS Billing 3.0 recht gut erkennen.

Wir kleinen und mittelständischen Unternehmen die keine Projekte von der öffentlichen Hand betreuen, werden uns wahrscheinlich das Meiste sparen können.

Vertragspositionen

In den Vertragspositionen lege ich die abzurechnenden Informationen ab. Je nachdem wie es mit meinem Geschäftspartner vereinbart ist, können dies pro Kunde ein bis n Positionen sein.

Nach dem Druck wird jede Vertragsposition auf abgerechnet gesetzt damit diese beim nächsten Lauf nicht mehr berücksichtigt werden.

Geplant ist - um diese Positionen schneller zu erfassen - ein clientseitiger Webpart auf Basis einer Tabelle. Der die einzelnen Vertragspositionen von einer zentralen Stelle aus befüllt.

Anpassungen am docxGenerator

Auch wenn die Überschrift es suggeriert, es erfolgt keine Anpassung am docxGenerator selber. Der docxGenerator verfügt über Customizing-Schnittstellen die genau für diesen Zweck integriert wurden.

Die Schnittstellen stellen allgemein gesagt, die Umgebung dar, in der Anpassungen für eine konkrete Anwendungsumgebung oder ein Kundenwunsch implementiert werden können.

Ich werde nicht in die ganze Tiefe der Anpassungen abtauchen. Es geht mir nur darum im groben die einzelnen Schritte zu beschreiben.

Wie der docxGenerator in einer Shareflex Anwendung bereitgestellt wird kann hier nachgelesen werden

.

Anpassungen am JSON-Loader

Der JSON-Loader ist eine einzelne in JavaScript formulierte Datei in der die Daten für die Verwendung in einem docxGenerator Template bereitgestellt werden. Hier wird auch das XRECHNUNG-JSON befüllt.

Die Datei enthält zwei Einsprünge die von der Generierung angesprochen werden.

Der Bereich docxGeneratorLoader ist eine Deklaration die verschiede Bereiche des zu erzeugenden JSON beschreibt und die dort hinterlegten Funktionen aufruft.

Die Funktion SaveDocumentToLibrary schreibt das erzeugte Dokument in die Dokumentbibliothek und verbindet das Dokument mit dem Vertrag.

Aufbau des XRECHUNG-JSON

Das XRECHUNG-JSON stellt eine Struktur dar, die im späteren Verlauf in die eigentlich XML Struktur umgewandelt wird.

Wer allerdings glaubt, es ist einfach eine JSON Struktur zu bauen die allen Regel standhält, den Zahn kann ich gleich ziehen. Insgesamt war der Aufbau der Struktur der mit Abstand größte Zeitfaktor.

Ausschnitt eines XML

Ausschnitt aus der JSON Abbildung

Erzeugen der XML Struktur

Die JSON-Struktur muss in die XML-Struktur überführt werden. Dieser Vorgang wird im Modul ZUGFeRD des docxGenerator durchgeführt.

Das ZUGFeRD-Modul übernimmt mehrere Aufgaben. Je nachdem welche Datenübergabe mit dem Kunden abgesprochen wurde (Factur-X-Extended oder XRechnung-UBL) wird entweder nur das XML oder das PDF/A für ein ZUGFeRD - Dokument mit eingebetteten XML erzeugt.

Der Prozess durchläuft immer vier Schritte.

Schritt 1 - Erzeugen des Worddokumentes

Dieser Schritt ist die eigentliche Aufgabe des docxGenerators. Hier wird aus einem Template eine Rechnung als Word-Dokument erzeugt.

Nachdem Erzeugen des Word-Dokumentes wird die Funktion SaveToDocumentLibrary aufgerufen. Hier erfolgen jetzt die nächsten Schritte.

Schritt 2: Speichern des Word-Dokumentes

Der Schritt das Word-Dokument vorher zu speichern, ist leider notwendig, da der nächste Schritt das Umwandeln in ein PDF, eine Datei erwartet.

Schritt 3: Erzeugen des PDF

In diesem Fall erhalten wir direkt ein Blob zurück mit dem wir im nächsten Schritt weiterarbeiten können ohne das Dokument vorher zu speichern.

Schritt 4: Erzeugen von XRECHNUNG oder ZUGFeRD

Der 4te Schritt ist ein wenig aufwendiger da hier verschiedene Entscheidungen ausgewertet werden müssen.

Zum einen wird entschieden ob überhaupt eine elektronische Rechnung oder "nur" ein einfaches PDF erzeugt wird.

Zum anderen wenn eine elektronische Rechnung erzeugt werden soll dann in welcher Form.

Letztlich wird ein PDF oder ein XML erzeugt.

Nächsten Schritte

Wie bereits am Anfang beschrieben, ich kann nur einige Punkte herausstellen. Bei andere Punkten kann ich gerne helfen.

Die nächsten Punkte die auf meiner Agenda stehen

  • Erzeugen der E-Mails für den Versand der Rechnungen im Entwurfsordner von Outlook.
  • Zentrale Erfassung der Leistungspositionen um nicht mehr jeden Vertrag einzeln öffnen zu müssen.
  • Funktion um das Erzeugen der PDF Dokumente über mehrere Verträge von einem zentralen Punkt zu ermöglichen.
  • Funktion um das Erzeugen der E-Mails über mehrere Verträge von einem zentralen Punkt zu ermöglichen.

Der nächste Artikel wird sich mit dem eigentlichen Aufbau einer XRECHUNG beschäftigen. In diesem Beitrag werde ich versuchen einige Fallstricke in die ich getappt bin zu erläutern. Diese Beitragsserie wird also weitergeführt...