F: Wie ergänze ich GLN und GTIN in einer bestehenden ZUGFeRD-Rechnung aus dem ERP?

Thema
VB.NET
SDK-Mitglieder
AddBuyerGlobalID() AddSellerGlobalID() AddShipToTradePartyGlobalID() BuyerID FillZUGFeRD_Structure() MergeXMLIntoPDF() SaveXML() Trade_ItemTradeProduct TradeItemsCount ValidateInvoiceXML()
Business Terms
BT-29 Kennung des Verkäufers BT-46 Kennung des Käufers BT-71 Kennung des Lieferorts BT-157 Kennung eines Artikels nach registriertem Schema BT-155 Artikelkennung des Verkäufers BT-13 Bestellreferenz BT-10 Referenz des Käufers BT-156 Artikelkennung des Käufers
Codebeispiele
VB.NET
Veröffentlicht

Kurz: Wenn Ihr ERP gültige ZUGFeRD-Rechnungen schreibt, ein Kunde aber zusätzlich GLN und GTIN verlangt, müssen Sie das ERP nicht ändern. Das Aloaha ZUGFeRD SDK liest die fertige Rechnung ein, ergänzt die GLN von Verkäufer (BT-29), Käufer (BT-46) und Lieferort (BT-71) sowie die GTIN je Position (BT-157), prüft das Ergebnis und führt das neue XML wieder mit Ihrem Original-PDF zusammen. Beträge, Steuern und Positionen bleiben unverändert.

Gesucht wird das auch so: E-Rechnung nachträglich ergänzen, GLN in ZUGFeRD nachtragen, GTIN in Rechnungsposition, Global Location Number in der XRechnung, Pflichtfelder des Handels, ZUGFeRD-XML anreichern.

Welche Angaben und welche Aufrufe?

AngabeFeldSchemaSDK
GLN des VerkäufersBT-290088AddSellerGlobalID
GLN des Käufers / RechnungsempfängersBT-460088AddBuyerGlobalID
GLN des Waren- bzw. Leistungsempfängers (Lieferort)BT-710088AddShipToTradePartyGlobalID
GTIN je PositionBT-1570160Trade_ItemTradeProduct (GlobalID)

Ablauf mit dem SDK

  1. ZUGFeRD-PDF aus dem ERP einlesen: FillZUGFeRD_Structure liest das eingebettete XML direkt aus dem PDF.
  2. GLN und GTIN ergänzen, zum Beispiel aus einer Zuordnungstabelle Kunde → GLN und Artikelnummer → GTIN.
  3. Neues XML speichern und gegen EN 16931 prüfen (ValidateInvoiceXML, lokal, ohne Upload).
  4. XML in das Original-PDF einbetten und als PDF/A-3 speichern (MergeXMLIntoPDF).
  5. Optional signieren, nach dem Einbetten.
' VB.NET
Dim key As String = "IHR-LIZENZSCHLUESSEL"
Dim alo As New Aloaha_ZUGFeRD.XML(key)

If alo.FillZUGFeRD_Structure("C:\Eingang\RE-1001.pdf", key) Then
    alo.AddSellerGlobalID("4000001000005", "0088")            ' eigene GLN
    alo.BuyerID = ""                                          ' Kundennummer durch die GLN ersetzen
    alo.AddBuyerGlobalID("4012345000009", "0088")             ' GLN Rechnungsempfänger
    alo.AddShipToTradePartyGlobalID("4012345000016", "0088")  ' GLN Warenempfänger

    For i As Integer = 0 To alo.TradeItemsCount - 1
        Dim tp = alo.Trade_ItemTradeProduct(i)
        tp.GlobalID.GlobalID = GTINZuArtikel(tp.SellerAssignedID)   ' Ihre Zuordnung
        tp.GlobalID.GlobalID_schemeID = "0160"
        alo.Trade_ItemTradeProduct(i) = tp
    Next

    alo.SaveXML("C:\Arbeit\RE-1001.xml", key)
    If alo.ValidateInvoiceXML("C:\Arbeit\RE-1001.xml", key) Then
        alo.MergeXMLIntoPDF("C:\Arbeit\RE-1001.xml", "C:\Layout\RE-1001.pdf", "C:\Ausgang\RE-1001.pdf", True, "", key)
    End If
End If

Wir haben diesen Ablauf mit einer Testrechnung geprüft: Die ergänzte Rechnung ist nach EN 16931 gültig, ohne Fehler und ohne Warnungen (eingebauter Validator des SDK und Mustang).

Worauf Sie achten sollten

  • Kundennummer und GLN zugleich: Schreibt das ERP bereits eine Kundennummer als Käuferkennung, ersetzen Sie sie durch die GLN (alo.BuyerID = ""). Sonst meldet der Validator die Warnung CII-SR-450.
  • GTIN nur mit Schema: Eine GTIN ohne Schema-Kennung verletzt BR-64. Setzen Sie GlobalID_schemeID = "0160".
  • Bereits eingebettetes XML: Ab Version 11.0.0.18 ersetzt MergeXMLIntoPDF ein Rechnungs-XML, das schon im PDF steckt, durch das neue.
  • Weitere Kundenwünsche: Bestellnummer (BT-13), Käuferreferenz (BT-10) oder Artikelnummer des Käufers (BT-156) setzen Sie auf dieselbe Weise. Welche Felder der Handel häufig verlangt, steht unter E-Rechnung bereit für den Handel.

Für einzelne Rechnungen: von Hand in der ZUGFeRD GUI

Bei wenigen Rechnungen im Monat geht es auch ohne Programmierung. Die Aloaha ZUGFeRD GUI hat ab Version 11.0.0.18 eigene Felder dafür:

  1. Erstelle XML > Lade XML oder PDF: die Rechnung aus dem ERP öffnen.
  2. Register Adressen: GLN bei Verkäufer und Käufer sowie GLN Lieferort eintragen.
  3. Register Rechnungsposten: die GTIN in die Spalte GTIN eintragen.
  4. Speicher XML, dann im Register Führe XML mit PDF zusammen das neue XML mit dem Original-PDF zusammenführen.

Für wiederkehrende Rechnungen an mehrere Kunden ist das SDK der bessere Weg: Die Ergänzung läuft automatisch und ohne Tippfehler.

Häufige Fragen

Kann ich eine fertige ZUGFeRD-Rechnung nachträglich um GLN und GTIN ergänzen?

Ja. FillZUGFeRD_Structure liest die Rechnung ein, AddSellerGlobalID, AddBuyerGlobalID und AddShipToTradePartyGlobalID setzen die GLN, Trade_ItemTradeProduct die GTIN je Position. Danach speichern Sie das XML und betten es mit MergeXMLIntoPDF wieder in das PDF ein.

Welches Schema gilt für GLN und GTIN?

0088 für die GLN (Global Location Number) und 0160 für die GTIN (Global Trade Item Number).

Ändert das SDK dabei Beträge oder Positionen?

Nein. Die Rechnung wird komplett eingelesen, es kommen nur die zusätzlichen Angaben hinzu.

Warum meldet der Validator CII-SR-450?

Weil beim Käufer sowohl eine Kennung (z. B. die Kundennummer) als auch eine GLN steht. Leeren Sie die Käuferkennung, wenn Sie die GLN setzen.

Geht das auch ohne Programmierung?

Ja, mit der Aloaha ZUGFeRD GUI ab Version 11.0.0.18: Rechnung laden, GLN im Register Adressen und GTIN im Register Rechnungsposten eintragen, XML speichern und mit dem PDF zusammenführen.

Business Terms in diesem Artikel: BT-29 BT-46 BT-71 BT-157 BT-155 BT-13 BT-10 BT-156