In der heutigen digitalen Welt sind elektronische Rechnungen ein essenzieller Bestandteil der Geschäftsprozesse. Besonders im B2B-Bereich ist das Format ZUGFeRD weit verbreitet. Doch wie können Sie das ZUGFeRD-XML anpassen, um individuelle Anforderungen zu erfüllen und es anschließend in das Rechnungspdf zu integrieren? In diesem Blog-Beitrag zeigen wir Ihnen, wie Sie mithilfe eines Powershell-Skripts Ihre E-Rechnung anpassen können, um etwa die Artikelkennung des Käufers (BT-156) zu integrieren, und wie Sie das angepasste XML wieder in das Rechnungspdf einbetten.
1. Was ist ZUGFeRD und warum ist es wichtig?
ZUGFeRD (Zentraler User Guide des Forums elektronische Rechnung Deutschland) ist ein Standard für elektronische Rechnungen in Deutschland, der es ermöglicht, Rechnungen in einem PDF-Dokument mit eingebettetem XML-Datenformat zu versenden. Das XML enthält strukturierte Rechnungsdaten, während das PDF-Dokument gleichzeitig für den Menschen lesbar ist. Für die Unternehmen bedeutet das eine Vereinfachung im Rechnungsprozess und eine schnellere Bearbeitung in der Buchhaltung.
2. Anpassung des ZUGFeRD-XML
In unseren Standard-ZUGFeRD-XML sind viele Felder wie Rechnungsbetrag, Steuersätze und Positionen bereits definiert. Doch was, wenn Sie zusätzliche Informationen benötigen, die nicht standardmäßig im XML enthalten sind, wie etwa eine Artikelkennung des Käufers?
Die JTL-Wawi, ein populäres Warenwirtschaftssystem, stellt hierfür keine vorgefertigten Felder zur Verfügung. Doch das ist kein Problem! Sie können eine CSV-Datei oder eine SQL-Tabelle verwenden, um diese Daten zu speichern und später in das ZUGFeRD-XML zu integrieren.
3. Beispiel: Artikelkennung des Käufers (BT-156) hinzufügen
Nehmen wir als Beispiel, dass Ihr Kunde verlangt, die Artikelkennung des Käufers (BT-156) in den Positionsdaten der Rechnung einzufügen. Diese Information ist in der JTL-Wawi nicht direkt verfügbar, lässt sich aber problemlos in einer CSV-Datei oder SQL-Tabelle ablegen. Ein entsprechendes Skript kann dann diese Daten aus der CSV oder der Datenbank auslesen und in das ZUGFeRD-XML integrieren.
Mit einem Powershell-Skript können Sie beliebige Business-Terms ergänzen oder entfernen, sodass Sie bei der Erstellung der E-Rechnung 100 % flexibel sind und Ihre Anforderungen passgenau umsetzen können.
4. Integration der XML in das Rechnungspdf
Nachdem Sie das ZUGFeRD-XML angepasst haben, können Sie dieses in Ihr Rechnungspdf einbetten. Dabei wird das XML nicht nur als separates Datenformat erstellt, sondern direkt im PDF-Dokument integriert. Das Ergebnis ist eine vollständig digitale Rechnung, die alle gesetzlichen Anforderungen erfüllt und gleichzeitig alle gewünschten Zusatzinformationen enthält.
Mit unserem Addon können Sie das angepasste factur-x.xml wieder in das PDF einbetten und für den Versand der E-Rechnung nutzen. Dies ist ein einfaches Verfahren, das es Ihnen ermöglicht, Ihre Rechnungen genau nach den Anforderungen Ihres Unternehmens und Ihrer Kunden zu gestalten.
5. Automatisierung mit JTL-Workflow
Ein weiterer Vorteil des Powershell-Skripts ist, dass Sie es anpassen können, um es im JTL-Workflow zu integrieren. Dies bedeutet, dass der gesamte Prozess – von der Erstellung der E-Rechnung bis hin zum Versand – vollständig automatisiert werden kann. Sie können das Skript mit Parametern versehen, um eine dynamische Anpassung der E-Rechnung zu ermöglichen.
Der JTL-Workflow bietet eine leistungsstarke Möglichkeit, die Erstellung und den Versand von E-Rechnungen zu optimieren und zu automatisieren. Sie müssen sich keine Sorgen mehr um manuelle Anpassungen oder zusätzliche Schritte machen – alles wird automatisch erledigt.
6. Powershell-Script factur-x individuell anpassen
function Modify-factur-x {
param (
[string]$inputFilePath,
[string]$outputFilePath
)
# XML-Datei einlesen
Write-Host "Lade E-Rechnungs XML-Datei: $inputFilePath"
[xml]$xml = Get-Content "$inputFilePath" -Encoding UTF8
Write-Host "E-Rechnung erfolgreich geladen."
# XML-Namespace definieren
$nsMgr = New-Object System.Xml.XmlNamespaceManager($xml.NameTable)
$nsMgr.AddNamespace("rsm", "urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100")
$nsMgr.AddNamespace("ram", "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100")
# Über alle Positionen iterieren und neues Tag hinzufügen
$xml.SelectNodes("//rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem", $nsMgr) | ForEach-Object {
$sellerAssignedID = $_.SelectSingleNode("ram:SpecifiedTradeProduct/ram:SellerAssignedID", $nsMgr)
# Falls SellerAssignedID existiert, füge BuyerAssignedID hinzu
if ($sellerAssignedID) {
Write-Host "Gefunden: SellerAssignedID = $($sellerAssignedID.InnerText)"
#BusinessLogik zum bestimmen der Kundenartikelnummer, Datenbankabfragen, CSV-Datei etc...
#In unseren Beispiel wird die Verkäuferartikelnummer um den Postfix Ext ergänzt
$buyerartnr = $($sellerAssignedID.InnerText) +'Ext'
#Hinzufügen der Kundenartikelnummer BT-156
$buyerAssignedID = $xml.CreateElement("ram", "BuyerAssignedID", "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100")
$buyerAssignedID.InnerText = $buyerartnr
#Element nach SellerID einfügen damit die Reihenfolge stimmt
$sellerAssignedID.ParentNode.InsertAfter($buyerAssignedID, $SellerAssignedID) | Out-Null
}
}
# Die geänderte XML speichern
Write-Host "Speichere angepasste E-Rechnung XML-Datei: $outputFilePath"
$utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($outputFilePath, $xml.OuterXml, $utf8NoBom)
Write-Host "Speicherung abgeschlossen."
}
Set-Location C:\hph.EInvoice
#factur-x aus der JTL-Wawi generieren
#C:\hph.JTL.ZUGFeRD\hph.JTL.ZUGFeRD.Console.exe /action "create" /jtlinvoiceno "125292" /format "FACTUREX" /outputfile "C:/ExportWawi/factur-x-125292.xml"
# Funktionsaufruf mit übergebenen Dateipfaden
Modify-factur-x -inputFilePath "C:/ExportWawi/factur-x-125292.xml" -outputFilePath "C:\ExportWawi\factur-x-125292-new.xml"
#Einbettung in PDF
hph.EInvoice.Console.exe /action "combine" /inputpdf "C:\ExportWawi\Invoice 121165.pdf" /inputxml "C:\ExportWawi\factur-x-125292-new.xml"
#oder JTL-E-Rechnungs Lösung
#C:\hph.JTL.ZUGFeRD\hph.JTL.ZUGFeRD.Console.exe /action "combine" /inputpdf "C:\ExportWawi\Invoice 121165.pdf" /inputxml "C:\ExportWawi\factur-x-125292-new.xml"
7. Fazit
Die Anpassung und Integration von ZUGFeRD-XML-Daten in das Rechnungspdf ist eine flexible und effiziente Lösung für Unternehmen, die individuelle Anforderungen an ihre E-Rechnungen stellen. Mit Hilfe von Skripten und Addons können Sie jederzeit Business-Terms hinzufügen, entfernen oder ändern, ohne auf eine festgelegte Struktur angewiesen zu sein. In Kombination mit JTL-Workflow und der Integration von CSV- oder SQL-Datenquellen erreichen Sie eine hohe Automatisierung und können Ihren Rechnungsprozess optimal anpassen.
Wenn Sie mehr über die Anpassung und Automatisierung Ihrer E-Rechnungen erfahren möchten, stehen wir Ihnen gerne mit Rat und Tat zur Seite. So stellen Sie sicher, dass Ihre Rechnungsstellung immer auf dem neuesten Stand und den Anforderungen Ihrer Kunden gerecht wird!
Haben Sie Fragen oder möchten Sie mehr erfahren? Kontaktieren Sie uns gerne – wir helfen Ihnen, Ihre E-Rechnungen perfekt an Ihre Bedürfnisse anzupassen!