Nutzung des ZUGFeRD-Standards mit NAV 2009 bis NAV 2018 und BC 14
Für den ZUGFeRD-Export und -Import in C/AL-Systemen (NAV 2009 bis NAV 2018 sowie BC 14 im Windows Client) ist eine externe DLL erforderlich. Diese DLL übernimmt die technische Verarbeitung des ZUGFeRD-Formats, also das Einbetten einer XML-Datei in eine PDF sowie das Auslesen einer eingebetteten XML aus einer bestehenden PDF. Die DLL muss einmalig auf dem Server oder Client installiert werden, bevor SIEVERS E-Rechnung ZUGFeRD-Belege verarbeiten kann.
Je nach eingesetzter NAV-Version kommen zwei verschiedene DLL-Varianten zum Einsatz:
| NAV-Version | Verwendete DLL |
|---|---|
| NAV 2009 | Automation DLL - Installation auf dem Client |
| NAV 2013 bis NAV 2018, BC 14 C/AL | .NET DotNet-Interop DLL - Installation auf dem Server |
Achtung
Es existiert keine SIEVERS E-Rechnung-Version, in der sowohl Windows- als auch WebClient für den ZUGFeRD Export und Import genutzt werden können. Der Kunde muss sich für eine Möglichkeit entscheiden.
Logging und Fehlerdiagnose
Fehler der ZUGFeRD-DLLs werden im Windows-Ereignisprotokoll unter Windows-Protokolle > Anwendung mit der Quelle SNCZUGFeRDDLL protokolliert. Dazu gehören auch Fehler bei der Initialisierung, beim Laden von Abhängigkeiten und bei Methodenaufrufen.
Für eine ausführliche Diagnose können Sie zusätzlich Informationsmeldungen aktivieren. Führen Sie dazu Enable-ZUGFeRDLogging.ps1 auf dem Rechner aus, auf dem die DLL läuft. Das Skript muss als Administrator ausgeführt werden, registriert die Ereignisquelle und legt folgende Marker-Datei an:
C:\ProgramData\SIEVERS-GROUP\ZUGFeRD\logging.enabled
Mit Disable-ZUGFeRDLogging.ps1 entfernen Sie die Marker-Datei und deaktivieren die ausführlichen Meldungen. Fehler werden weiterhin protokolliert. Mit Disable-ZUGFeRDLogging.ps1 -RemoveEventSource wird zusätzlich die Ereignisquelle entfernt.
Ist die Marker-Datei vorhanden, das Windows-Ereignisprotokoll aber nicht verfügbar oder nicht beschreibbar, bricht die DLL mit einer Fehlermeldung ab. Entfernen Sie in diesem Fall die Marker-Datei oder registrieren Sie die Ereignisquelle erneut mit Enable-ZUGFeRDLogging.ps1.
ZUGFeRD .NET DLL für NAV 2013 bis NAV 2018 und BC 14 C/AL
Die ZUGFeRDDLLDotNet wird als .NET DotNet-Interop DLL über DotNet-Variablen in C/AL eingebunden. Eine COM-Registrierung (RegAsm/gacutil) ist nicht notwendig. Die DLL wird ausschließlich als x64 bereitgestellt. Eine Unterscheidung zwischen x86 und x64 entfällt, da das NAV Service Tier ab Version 2013 immer als 64-Bit-Prozess läuft.
Installation
Die DLL wird zusammen mit allen Abhängigkeiten als ZIP-Datei Dateien für ZUGFeRD in NAV ab 2013.zip ausgeliefert. Das Installationsskript kopiert den Inhalt in den Add-ins-Ordner des NAV Service Tiers in den Unterordner ZUGFeRDDLL_Libs:
Standardpfad (Beispiel NAV 2013):
C:\Program Files\Microsoft Dynamics NAV\70\Service\Add-ins\ZUGFeRDDLL_Libs\
Achtung
Die Dateinamen der DLLs dürfen nicht verändert werden. Alle DLLs müssen im selben Ordner wie ZUGFeRDDLLDotNet.dll liegen.
Führen Sie das Installationsskript als Administrator aus:
.\Install-ZUGFeRD.ps1 -SourceFolder . -TargetFolder 'C:\Program Files\Microsoft Dynamics NAV\70\Service' -InstallationType RTC
SourceFolder bezeichnet den entpackten Quellordner. TargetFolder bezeichnet den Hauptordner des NAV Service Tiers oder des RoleTailored Clients. Mit -Force kann die abschließende Sicherheitsabfrage übersprungen werden.
Der Ordner muss nach dem Entpacken folgende Dateien enthalten:
ZUGFeRDDLL_Libs\
├── BUILD_INFO.txt
├── ClearScript.Core.dll
├── ClearScript.V8.dll
├── ClearScript.V8.ICUData.dll
├── ClearScriptV8.win-x64.dll
├── ClearScriptV8.win-x86.dll
├── Microsoft.Bcl.AsyncInterfaces.dll
├── Microsoft.Extensions.DependencyInjection.Abstractions.dll
├── Microsoft.Extensions.Logging.Abstractions.dll
├── Newtonsoft.Json.dll
├── System.Buffers.dll
├── System.Diagnostics.DiagnosticSource.dll
├── System.Memory.dll
├── System.Numerics.Vectors.dll
├── System.Runtime.CompilerServices.Unsafe.dll
├── System.Threading.Tasks.Extensions.dll
├── ZUGFeRDDLLDotNet.dll
├── ZUGFeRDDLLDotNet.dll.config
└── ZUGFeRDDLLDotNet.pdb
Nach dem Entpacken muss der NAV Service Tier neu gestartet werden, damit die Assemblies geladen werden.
Hinweis
Es kann sein, dass Windows den Zugriff auf die heruntergeladenen Dateien automatisch blockiert. Falls es hierbei Fehler gibt, stellen Sie bitte sicher, dass bei den Dateieigenschaften im Tab Allgemein der Haken bei Zulassen im Abschnitt Sicherheit gesetzt ist.

Hinweis für Entwickler
Für die reine Benutzung im RoleTailored Client (RTC) ist die Installation der DLLs nur auf dem Service Tier erforderlich. Möchten Sie C/AL-Code entwickeln oder kompilieren, der die ZUGFeRDDLLDotNet referenziert, müssen die DLLs zusätzlich im Add-ins-Ordner des Clients abgelegt werden – andernfalls schlägt die Kompilierung fehl.
Standardpfad Client (Beispiel NAV 2013):
C:\Program Files (x86)\Microsoft Dynamics NAV\70\RoleTailored Client\Add-ins\ZUGFeRDDLL_Libs\
Der Inhalt des Ordners ist identisch mit dem Service-Tier-Ordner.
Fehlerdiagnose
Die DLL schreibt Diagnosemeldungen in das Windows-Eventlog (Quelle: SNCZUGFeRDDLL). Bei Problemen mit fehlenden Abhängigkeiten können dort Details eingesehen werden.
Fehlende Abhängigkeiten
Typische Fehlermeldung bei fehlenden DLLs:
Diese Meldung richtet sich an C/AL-Programmierer: Fehler beim Aufrufen von
'ZUGFeRDDLLDotNet.ZUGFeRDDLLDotNet.MergePDFAndXMLFile': Die Datei oder Assembly "..." wurde nicht gefunden.
Lösung: Sicherstellen, dass alle DLLs aus der ZIP-Datei im Ordner vorhanden sind und der Service Tier nach der Installation neu gestartet wurde.
ZUGFeRD Automation DLL für NAV 2009
Hinweis
Wenn bereits eine frühere Version der ZUGFeRD-DLL installiert ist, darf die vorhandene DLL nicht vorab manuell überschrieben oder gelöscht werden. Das Installationsskript hebt zuerst die bestehende COM- und Type-Library-Registrierung auf und ersetzt anschließend die Dateien.
Sollte noch eine ältere Version der DLL im Global Assembly Cache (mit gacutil) registriert worden sein, so muss die Registrierung zunächst manuell aufgehoben werden, da dies nicht vom Installationsskript übernommen wird. Hierfür muss die DLL zunächst aus dem GAC entfernt (gacutil /u ZUGFeRDDL) und anschließend die Registrierung mit RegAsm aufgehoben (regasm .\ZUGFeRDDLL.dll /unregister) werden. Sprechen Sie bei Fragen hierzu gerne Ihren Ansprechpartner bei der SIEVERS-GROUP an.
Für NAV 2009 wird die Automation DLL verwendet. Sie müssen ein Installationsskript ausführen, das folgende Schritte ausführt:
- Auswahl des entpackten Quellordners und des NAV-2009-Classic-Hauptordners
- Deregistrierung einer vorhandenen
ZUGFeRDDLL.dllundZUGFeRDDLL.tlbvor dem Überschreiben - Kopieren aller Dateien nach
Add-ins\ZUGFeRDDLL_Libsund Entsperren der kopierten Dateien - Registrierung der neuen
ZUGFeRDDLL.dllund Type Library mit dem 32-Bit-RegAsm und dem Parameter/codebase
Eine Registrierung im GAC ist nicht notwendig und darf nicht durchgeführt werden. Die Einstellungen NetFx40_LegacySecurityPolicy und probingPath werden für die NAV-2009-Automation-DLL nicht geändert.
Dieses Skript muss für jeden Nutzer, der ZUGFeRD-Rechnungen ausstellen oder importieren will, ausgeführt werden. Basis ist das zip-Archiv Dateien für ZUGFeRD in NAV.zip, das Sie im Partner Portal finden.

Führen Sie folgenden Befehl in einer als Administrator gestarteten PowerShell aus:
.\Install-ZUGFeRD.ps1 -SourceFolder . -TargetFolder 'C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic' -InstallationType Classic
SourceFolder: aus der ZIP-Datei entpackter QuellordnerTargetFolder: Hauptordner des NAV-2009-Classic-ClientsInstallationType:Classicfür die NAV-2009-Automation-DLLForce: Ausführung ohne abschließende Sicherheitsabfrage
SourceFolder und TargetFolder müssen an die jeweilige Installation angepasst werden. Das Skript legt die Dateien im Unterordner Add-ins\ZUGFeRDDLL_Libs ab und registriert die DLL von dort mit /codebase. Alle Dateien verbleiben nach der Installation in diesem Verzeichnis.
Bei Erfolg bekommen Sie das Feedback Installation erfolgreich abgeschlossen und können SIEVERS E-Rechnung auf dem C/AL System mit ZUGFeRD nutzen.

Hinweis
Es kann sein, dass Windows den Zugriff auf die heruntergeladenen Dateien automatisch blockiert. Falls es hierbei Fehler gibt, kontrollieren Sie bitte, ob bei den Dateieigenschaften im Tab Allgemein der Haken bei Zulassen im Abschnitt Sicherheit gesetzt ist.

Registrierung der DLL aufheben
Um die DLL wieder zu entfernen, heben Sie zunächst die Registrierung der DLL und der Type Library mit dem 32-Bit-RegAsm auf. Verwenden Sie absolute Pfade:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic\Add-ins\ZUGFeRDDLL_Libs\ZUGFeRDDLL.dll" /tlb:"C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic\Add-ins\ZUGFeRDDLL_Libs\ZUGFeRDDLL.tlb" /unregister
Anschließend können die TLB-, DLL- und Abhängigkeitsdateien aus Add-ins\ZUGFeRDDLL_Libs gelöscht werden. Ein Aufruf von gacutil ist nicht erforderlich, da diese Version nicht im GAC registriert wird.