Autor Thema: E-Rechnung unter Notes  (Gelesen 536 mal)

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
E-Rechnung unter Notes
« am: 28.10.24 - 19:36:21 »
Hallo Notes-Entwickler!

Hat sich schon jemand mit dem Thema E-Rechnung unter Notes/Domino beschäftigt und hat Lust auf Erfahrungsaustausch?
Oder hat jemand Bedarf an Unterstützung bzw. Zuarbeit zu diesem Thema?

Dann würde ich mich über eine kurze Rückmeldung (hier als Antwort oder via PM) freuen.

Viele Grüße
-Werner

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #1 am: 31.10.24 - 19:34:07 »
Das Thema wird für mich tatsächlich langsam aktuell. Bisher erstelle ich Rechnungen aus Dokumenten per Skript über PDFCreator. Den XML-Datensatz kriege ich damit wohl nicht in die Datei. Bislang habe ich keinen Ansatz, wie man aus Dokumenten E-Rechnungen ohne manuelle Zwischenschritte macht.
Hast du einen, @Werner Götz?

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #2 am: 02.11.24 - 14:44:15 »
Wir haben eine eigene PDF-Engine (Simplex PDF Generator), über die wir eigentlich auch das XML mit reinbekommen sollten.
Werden das mal in den nächsten Wochen zumindest als Prototyp in Angriff nehmen.
Ich kann dann gerne "berichten".

-Werner

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #3 am: 03.11.24 - 10:38:06 »
Prima, das hört sich sehr gut an, ich bin gespannt.
Ihr generiert dann PDFs ohne externes Tool?

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #4 am: 03.11.24 - 18:21:25 »
Ja genau, wir haben schon vor ca. 10 Jahren auf Java Basis ein Tool geschaffen, mit dem aus Notes direkt PDFs generiert werden können.
-Werner

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #5 am: 30.11.24 - 12:46:16 »
Ich habe mir jetzt mal ein bis zwei Tage Zeit genommen, um die E-Rechnungs-Generierung unter Notes zu realisieren. Es ist mir nun möglich aus meinem System in einem Arbeitsschritt in hybrides PDF mit XML-Anhang E-Rechnungs-konform zu erstellen. Es funktioniert leider nicht rein auf LS-Basis, man muss mit einem externen Skript (Python) arbeiten, das aber in Notes generiert und aus LS gestartet wird.
Wenn es jemanden im Detail interessiert, würde ich eine kurze Dokumentation posten.

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #6 am: 30.11.24 - 13:06:00 »
Ja, interessiert mich
-Werner

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 279
  • Geschlecht: Männlich
Antw:E-Rechnung unter Notes
« Antwort #7 am: 30.11.24 - 13:34:47 »
Also, wie aus Notes eine Rechnung als PDF erstellt wird, sollte klar und bereits realisierbar sein. Es muss aber ein PDF/X-3 sein. Das Aufwendigste an der ganzen Sache ist die richtlinienkonforme Erstellung der XML-Datei. Eine gute Beispieldatei findet sich hier: https://github.com/itplr-kosit/xrechnung-testsuite/blob/master/src/test/business-cases/standard/01.10a-INVOICE_ubl.xml

Um die xml aus Notes zu generieren, sollten im Rechnungsdokument vier Felder angelegt werden, aus denen dann das Gesamt-xml generiert wird. Es sind bei mir vier, weil die Zeichenzahl für ein Feld zu groß ist. Die xml-Datei sollte dann per Feldformel in die Felder geschrieben werden, wobei natürlich die ins xml einzutragende Werte dann variabel aus dem Dokument geholt werden. Wie genau, hängt stark von eurer individuellen Rechnungsstruktur ab. Ihr müsst einfach Wert für Wert aus den Feldern eures Dokuments holen.

Ihr habt sicherlich einen Button, der eure Rechnung und das dazugehörige PDF erstellt. Ich würde diesen erweitern und die xml-Datei in ein beliebiges Verzeichnis speichern:

Code
sdatei_inhalt = uidoc2.fieldgettext("erechnung1") + Chr(10) + uidoc2.fieldgettext("erechnung2")+ Chr(10) + uidoc2.fieldgettext("erechnung_positionen_addiert")+uidoc2.fieldgettext("erechnung_position")+ Chr(10)
strTemp = uidoc.FieldGetText("auftragsnummer")	
Dim sFile As String
sFile = sStbrVerzeichnis + "invoice_"+strTemp + ".xml"
Print sFile
fileNum = Freefile()
Open sFile For Output As fileNum Charset = "UTF-8"
Print #fileNum, sdatei_inhalt
Close fileNum

Die xml muss ausführlich getestet und validiert werden. Dieses Tool eignet sich ganz gut: https://erechnungsvalidator.service-bw.de/

Nun habt ihr also eine PDF- und eine xml-Datei. Letztere muss nun an die PDF angehängt werden.
Daze generiere ich ein Python-Skript ebenfalls als Feldformel. Das Skript wird dann wie die xml als Datei gespeichert und per ebenfalls generierter Batch-Datei ausgeführt. Das Skript sieht als Feldformel bei mir so aus:

Code
"import fitz
import os

def embed_xml_in_pdf(pdf_path, xml_path):
    # Laden der PDF-Datei
    try:
        pdf_document = fitz.open(pdf_path)
    except Exception as e:
        print(f\"Fehler beim Öffnen der PDF: {e}\")
        return

    # Sicherstellen, dass die XML-Datei existiert
    if not os.path.exists(xml_path):
        print(\"Die XML-Datei wurde nicht gefunden!\")
        return

    # XML-Inhalt als Anhang hinzufügen
    try:
        with open(xml_path, \"rb\") as xml_file:
            xml_data = xml_file.read()
            pdf_document.embfile_add(buffer_=xml_data, name=os.path.basename(xml_path))
    except Exception as e:
        print(f\"Fehler beim Einbetten der XML: {e}\")
        return

    # Temporäre Datei für das Speichern
    temp_output = pdf_path + \".tmp\"

    # Speichern der PDF in temporäre Datei
    try:
        pdf_document.save(temp_output)
        pdf_document.close()
    except Exception as e:
        print(f\"Fehler beim Speichern der temporären PDF: {e}\")
        return

    # Originaldatei mit der temporären Datei ersetzen
    try:
        os.replace(temp_output, pdf_path)
        print(f\"Die XML wurde erfolgreich in die PDF eingebettet und überschrieben: {pdf_path}\")
    except Exception as e:
        print(f\"Fehler beim Ersetzen der Originaldatei: {e}\")

# Beispielausführung
pdf_path = r"+"\""+pfad_rechnung+"invoice_"+@Text(rechnungsnummer_2)+".pdf\" 
# xml_path = r"+"\""+pfad_rechnung+"xrechnung.xml\"  
xml_path = r"+"\""+pfad_rechnung+"invoice_"+@Text(rechnungsnummer_2)+".xml\" 

embed_xml_in_pdf(pdf_path, xml_path)"

Dabei entsteht dann ein hybrides PDF, das einfache PDF wird überschrieben. Das hybride PDF kann hier getestet werden: https://erechnungs-validator.winball.de/

Das wäre das Grundgerüst des Vorgangs. Der Weg zur fertigen E-Rechnung kann allerdings sehr kompliziert sein. Vor allem die fehlerfreie Erstellung der xml-Datei ist sehr aufwendig. Ich empfehle, ChatGPT als Unterstützung während des Programmiervorgangs und vor allem zur Erklärung der xml-Tags zu verwenden. ChatGPT kann einem sagen, welche Tags optional sind und welche Werte wohin kommen.

Vielleicht gibt es akuratere Lösungen, aber diese hat für mich funktioniert. Die Erstellung von xml und hybridem PDF dauert weniger als eine Sekunde.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz