Elektronische Rechnungen in FileMaker
Mit dem MBS FileMaker Plugin bieten wir Ihnen einen Werkzeugkasten mit DynaPDF, XML, CURL und Saxon Funktionen an. Damit können Sie elektronische Rechnungen in FileMaker implementieren. Das ganze läuft lokal ohne Webservice, ohne Java, ohne GPL und ohne monatlichen Kosten.
Kürzlich auf dem Stammtisch hatten wir elektronische Rechnungen als Thema. Neben den technischen Aspekten gibt es noch einiges an organisatorischem in der Firma zu beachten. Die Frage wie man elektronische Rechnungen verarbeiten will und wie man Sie erstellt bietet viel Raum für verschiedene Implementierungen. gehen wir mal die einzelnen Schritte durch:
Empfangen
Seit 1. Januar 2025 sollte ihre Firma elektronische Rechnungen empfangen können. Dafür sind einige Aspekte zu beachten:
Postfach
Für den Empfang sollten Sie ein separates Emailpostfach anlegen.
z.B. Rechnungseingang@IhreDomain.tld
Dann können Sie am Server für diese Adresse automatisch am Server Aktionen laufen lassen, zum Beispiel die Email in ein IMAP Postfach legen als reines Archiv und in ein zweites Postfach für die automatische Verarbeitung und wenn Sie möchten noch eine dritte Kopie in ein Postfach legen, auf das die Mitarbeiter Zugriff haben.
Wir haben ein IMAP Email Beispiel um automatisch Emails abzuholen. Sie können ein IMAP Postfach so konfigurieren, dass einkommende Rechnungen automatisch dort abgelegt werden. Dann kann ein Serverskript alle 10 Minuten per MBS FileMaker Plugin mit den CURL Funktionen die nächste Email laden, in einen Datensatz legen und am Server löschen. Das ganze als Schleife bis keine Email mehr im Postfach liegt und alle Emails importiert sind. Die EmailParser Funktionen helfen die Emails zu parsen und die Anhänge zu separieren.
Falls Sie DATEV Unternehmen Online verwenden (oder eine ähnliche Software), dann könnten Sie eine Kopie der Email direkt dorthin weiterleiten für den automatischen Import. Alternativ kömnen Sie eine Rechnung per Webservice zur DATEV übertragen.
ZUGFeRD PDF Verarbeiten
Mit den DynaPDF Funktionen können Sie den XML Teil aus einer ZUGFeRD PDF Datei extrahieren.
PDF öffnen
Sie öffnen das PDF mit DynaPDF.OpenPDFFromContainer oder DynaPDF.OpenPDFFromFile und schauen, ob DynaPDF einen Fehler meldet. Dies würde erkennen, falls jemand eine Malware schickt, die sich nur als PDF tarnt.
Die Funktion DynaPDF.GetJavaScriptCount sollte immer Null liefern, da JavaScript in einer Rechnung nichts zu suchen hat.
Version prüfen
Als nächstes schauen Sie mit DynaPDF.GetInPDFVersionEx nach den Versionsinformationen. Die sollten ungefähr so aussehne:
{ "Major": 1, "Minor": 6, "MainVer": "PDF/A-3b", "SubVer": "Factur-X", "PDFAConformance": "B", "PDFAVersion": 3, "PDFEVersion": "", "PDFVTModDate": "", "PDFVTVersion": "", "PDFXConformance": "", "PDFXVersion": "", "FXConfLevel": "EN 16931", "FXDocName": "factur-x.xml", "FXDocType": "INVOICE", "FXVersion": "1.0", "VersionConst": 4194325 }
Hier sehen Sie die PDF/A Version, das verwendete Level und den Namen vom Anhang. Wenn das fehlt, handelt es sich wohl nicht um eine ZUGFeRD PDF Datei.
XMP Metadaten auslesen
Sie können mit der DynaPDF.GetInMetadata Funktion die XMP Metadaten auslesen. Diese kommen als XML und sie können das gegen ein Schema valdieren und die Werte auslesen.
Anhänge auslesen
Mit der DynaPDF.GetEmbeddedFileCount Funktion erfahren Sie wie viele Anhänge vorhanden sind mit DynaPDF.GetEmbeddedFile können Sie Metadaten abfragen bzw. den Inhalt. Hier bekommen Sie das XML aus dem PDF extrahiert.
Optional enthält der Anhang auch eine MD5 Checksum, die Sie mit der DynaPDF.CheckEmbeddedFileCheckSum Funktion prüfen können. Das stellt sicher, dass das XML nicht verändert wurde seit der MD5 berechnet wurde.
Validieren
Eingehende Rechnungen sollten Sie validieren und ungültige Rechnungen ablehnen. Es wäre unangenehm, wenn in 5 Jahren ein Steuerprüfer ihr Archiv an elektronischen Rechnungen automatisiert durchgeht und inkorrekte Rechnungen findet und Sie für den Vorsteuerabzug streicht.
XML gültig?
Sie können das XML mit einer unserer XML Funktionen bearbeiten. Sollte dabei ein Parse Fehler kommen, würde das Plugin dies melden. Dafür reicht XML.Parse oder einfach XML.Format, aber ohne das Flag 1 für die automatische Reparatur.
-
XML Struktur passt zum Schema?
Sie können mit XML.Validate oder besser mit Saxon.Validate prüfen, ob das XML zur Schema Definition für die elektronische Rechnung passt. Die Schema Dateien gibt es sowohl für Cross Industry Invoice (X-Rechnung bzw. ZUGFeRD) als auch für UBL Formate. Diese Prüfung würde merken, wenn ein Eintrag im XML doppelt wäre oder fehlt.
siehe Validating schema for electronic invoices with ZUGFeRD
-
XML passt zum Schematron?
Zum ZUGFeRD Standard gibt es eine Schematron Datei mit ca. 400 Business Regeln. Diese Regeln prüfen, ob die Inhalte der Rechnung plausibel sind.
Die Schematron Datei kann in ein XSLT konvertiert werden, was auf das Rechnungs XML angewendet wird. Bei ZUGFeRD 2.3 liegt die passende XSL Datei direkt bei.
Wir haben ein Beispiel um die XSLT Transformation mit der Saxon.XSLT Funktion zu prüfen und das Ergebnis anzuzeigen.
Siehe Validate electronic invoices with Saxon
Anzeigen

Falls Kunden ein XML anzeigen möchten, können Sie die auf den Quba Viewer oder eine ähnliche Software verweisen. Damit kann jeder kostenlos ein elektronische Rechnung anzeigen.
Wir können die verwendeten XML Transformationen ebenfalls in FileMaker verwenden. Dafür laden Sie die XRechnung Visualization Transformators von GitHub und verwenden die Saxon Funktionen im MBS FileMaker Plugin. Das XLST erzeugt aus einer Cross Industry Invoice (ZUGFeRD, Factur-X, X-Rechnung) oder einer UBL XML Rechnung ein Zwischen XML und transformiert das dann weiter in ein HTML, was Sie in einem WebViewer anzeigen können.
Siehe Visualize electronic invoices with Saxon
Ebenfalls können Sie eine Rechnung anzeigen, indem Sie alle Werte auslesen, in Felder schreiben und per FileMaker anzeigen.
Extrahieren
Unsere Beispieldatenbank "ZUGFeRD Rechnung auslesen" zeigt wie man ZUGeRD Rechnungen auslesen kann.
Wir verwenden die XML.GetPathValue Funktion um über Pfade die Daten auszulesen. Das wiederholt sich mit hunderten von Feldern und wir brauchen einige Schleifen für die Posten.
Zum Beispiel können Sie mit XML.GetPathValue das Datum auslesen:
MBS("XML.GetPathValue"; Saxon XSLT::XML; "CrossIndustryInvoice.ExchangedDocument.IssueDateTime.DateTimeString"; 1)
Hier müssen Sie eventuell einiges an Feldern in Ihrer Datenbank ergänzen. Außerdem müssen Sie einiges an Codetabellen importieren, damit Sie zu diversen IDs auch anzeigen können was gemeint ist, z.B. 380 für eine Rechnung, S für die Standard MWSt. Rate und 48 für die Bezahlung per Karte. Die Tabellen liegen als XML und Excel Dateien beim ZUGFeRD Standard Download bei.
Prüfen
Ihre Workflows sollten prüfen, ob Sachen zusammen passen. Passt das Angebot zur Anfrage, passt die Bestellung zum Angebot, passt der Lieferschein zur Bestellung und passt die Rechnung zum Lieferschein.
Idealerweise passt die Rechnung 1:1 zur Bestellung und beim Wareneingang muss dann nur jemand bestätigen, dass alle Posten geliefert wurden und dann kann die Rechnung automatisch bezahlt und verbucht werden.
Wichtig wird es da eine Lieferantendatenbank zu haben mit den erlaubten Lieferanten, Ihren Bankverbindungen und Anschriften.
Sie sollten also beim Rechnungsempfang prüfen:
Ist die Rechnung von einem unserer erlaubten Lieferanten?
Leider kommen seit Jahren unaufgeforderte Rechnungen bzw. Angebote, die wie eine Rechnung aussehen. Zum Beispiel für Eintragungen in irgendwelche Verzeichnisse.
Natürlich kann auch einfach Verwechslungen oder Pannen geben und jemand verschickt eine Rechnung an die falsche Email.
Passt die Rechnung zu einer Bestellung?
Hier ist insbesondere interessant, ob die Mengen passen, die Artikel passen und die Preise gleich geblieben sind.
Stimmen die Summen?
Es empfiehlt sich die Summen nach zu rechnen.
Stimmt die Bankverbindung?
Hier gibt es das Problem, dass ein Betrüger das XML manipuliert und die Kontoverbindung im XML ändert. Sie müssten also prüfen, dass eine der bekannten Bankverbindungen in der Rechnung steht und eventuell nachfragen, ob die Änderung legitim ist. Dabei aber bitte nicht die Telefonnummer auf der Rechnung anrufen, sondern die Nummer raussuchen auf alten Rechnungen oder per Telefonbuch. Die Telefonnummer auf der Rechnung ist eventuell ja auch geändert worden.
Archivieren
Die Rechnung muss für 10 Jahre archiviert werden. Das könenn Sie natürlich selber machen. Dabei müssen Sie durch technische und organisatorische Maßnahmen sicherstellen, dass die Mitarbeiter die Rechnungen nicht ändern oder löschen können.
Technisch können Sie da Zugriffsrechte einschränken und per Signaturen bzw. Hash Ketten protokollieren, dass keine Rechnung geändert wurde. Sie schreiben zu jeder Datei einen Datensatz. Dort steht der Pfad zur Datei und ein Hash (z.B. SHA512) drin. Der Datensatz bekommt einen Hash zu seinen Daten. Dieser Hash wird mit dem Hash vom letzten Datensatz gehasht und bildet eine Kette von Datensätzen (Blockchain). Die Hashes können jederzeit berechnet werden um die Kette zu überprüfen.
Alternativ und falls ihr Steuerberater DATEV verwenden, können Sie dort Unternehmen Online buchen. Dann können Sie per Web Service, per Email, per iPhone App oder per Browser ihre Rechnungen importieren. Die DATEV kann dann die Rechnung für die 10 Jahre archivieren.
Senden
Ab dem 1. Januar 2027 bzw. für kleine Firmen ab 1. Januar 2028 müssen Sie Ihre Rechnungen elektronisch verschicken in einem der erlaubten Formate. Kleinunternehmer sind davon aktuell ausgenommen.
Vorüberlegungen
Beim Senden von elektronischen Rechnungen müssen Sie sich erstmal überlegen, was Sie genau wollen, wie Sie es implementieren und was dafür notwendig ist.
Falls ihre Kunden Rechnungen im UBL Format über das Peppol Netzwerk empfangen möchten, müssten Sie dieses Format erzeugen.
Wenn Sie sowohl Firmen als auch Privatkunden haben und insbesondere den Status nicht wissen, empfiehlt sich ZUGFeRD als Format. Damit haben ihre Privatkunden ein PDF zum Lesen, Abheften und Ausdrucken. Die Firmenkunden können die eingebettete Rechnung als XML auslesen und verarbeiten.
Technisch können Sie auch das XML verschicken und ein PDF als Mehrstück als zweite Datei beliegen. Achtung, die kombination aus PDF und XML müssen die Vorgaben des § 14 Abs. 4 Umsatzsteuergesetz (UStG) erfüllen, um inhaltlich identische Mehrstücke derselben Rechnung darzustellen. Ansonsten haben Sie zwei Rechnungen erzeugt!
Codelisten
Für die diversen Rechnungsformate müssen Sie zahlreiche Listen mit Werte importieren. Die liegen dem ZUGFeRD Standard bei als Excel und XML Dateien. Dort erfahren Sie dann welche Kürzel Sie für Einheiten verwenden müssen, z.B. 58 für ein net kilogram.
Sie brauchen folglich mindestens 20 Tabellen um die Kürzel zu Text zu verbinden. Dann ergänzen Sie die entsprechenden Felder in Ihren Tabellen für Rechnungen und Posten, so dass Sie die Daten erfassen können. Die Mitarbeiter können die Kürzel eingeben bzw. sie können die Liste der Werte z.B. per ListDialog Funktionen als Dialog anzeigen und den Benutzer auswählen lassen.
XML bauen
Ob ZUGFeRD, Factur-X, X-Rechnung oder UBL Rechnung, wir können mit den XML Funktionen helfen. Sie können sich unser Beispiel "ZUGFeRD Rechnung erstellen" anschauen. Aber vielleicht starten Sie einfach mit einer ZUGFeRD Beispielrechnung. In das XML können Sie die feststehenden Werte vorab eintragen. Dann können Sie mit XML.SetPathValue die Werte ür die Rechnung eintragen.
Alternativ können Sie ihre Datensätze für die Rechnung als XML exportieren und mit einem XSLT in das Format der Rechnung transformieren.
PDF bauen
Sie können das PDF mit FileMaker erzeugen über den Skriptschritt "Datensätze als PDF exportieren". Anschließend können Sie unser Beispiel für ZUGFeRD adaptieren um das XML einzufügen und das PDF nach PDF/A zu konvertieren. Dafür brauchen Sie dann DynaPDF Pro Lizenz mit der PDF/A Erweiterung. Sie können auch alternaiv die PDF Konvertierung mit anderer Software machen und dann reicht DynaPDF Lite um das XML einzubetten.
Rechnung versenden
Mit den SendMail Funktionen können Sie die Emails mit den Rechnungen direkt aus FileMaker verschicken und die XML und/oder PDF Version anhängen.
Fertige Module und Produkte
Wir liefern Ihnen gerne unsere Beispiele und mit dem MBS FileMaker Plugin einen mächtigen Werkzeugkarten.
Falls Sie noch keine ERP Software haben um ihre Rechnungen zu schreiben, können Sie auf verschiedene fertige Pakete zugreifen. Verschiedene Kunden von uns nutzen das MBS Plugin und bieten damit e-Rechnungen in Ihrer Software an. Beispielsweise bieten gFM-Business, advanter, onexio, VEO Enterprise und viele andere e-Rechnungen als Teil ihrer Pakete an.
Die Entwickler Robert Herman und Armin Egginger arbeiten an FileMaker Modulen. Robert hat seine Lösung auf der FMK gezeigt. Armin hat bei einigen Stammtischen seinen aktuellen Stand vorgestellt. Während unsere Beispiele beim MBS Plugin nur die Funktionalität umsetzen, so hat Armin deutlich mehr Arbeit in eine allgemeine Schnittstelle investiert und die Business Regeln zum Validieren eingebaut.
Siehe auch
- Electronic invoices in FileMaker (English)
- Validate electronic invoices with Saxon
- Visualize electronic invoices with Saxon (English)
- PDF Rechnung mit oder ohne ZUGFeRD empfangen?
- ZUGFeRD Update (Deutsch)
- ZUGFeRD Update (Englisch)
- ZUGFeRD mit DynaPDF und MBS
- Validating schema for electronic invoices with ZUGFeRD
- DynaPDF Licenses and ZUGFeRD invoices
- The new ZUGFeRD example
- FileMaker with ZUGFeRD 2.0 and Factur-X