Erstellung einer ZUGFeRD/X-Rechnung XML Datei via COM Schnittstelle (VB6 / VBA) oder .NET (Early Binding)

Um den Einstieg in die Nutzung unseres SDK zu erleichtern, haben wir ein neues Beispiel entwickelt, das demonstriert, wie eine vollständige ZUGFeRD XML-Datei erstellt wird. Für die Erstellung dieses Beispiels wurde die Version 9.0.0.15 der ZUGFeRD-Bibliothek verwendet. Bitte stellen Sie sicher, dass Sie mindestens diese Version installiert haben.

Das erstellte Beispiel wurde erfolgreich mit verschiedenen freien Kosit/ZUGFeRD/X-Rechnung Validatoren geprüft. Je nach Validator kann es trotzdem zu Warnungen kommen, beispielsweise wegen einer ungültigen IBAN-Nummer, da wir bewusst keine gültigen Daten verwendet haben.

Angesichts der anhaltenden Beliebtheit von VB6 und MS Access in unternehmensinternen Buchhaltungsanwendungen, die auch für VBA gilt, nutzt dieses Beispiel die COM-APIs, die ebenfalls in .NET verwendet werden können. Dies gewährleistet eine breite Kompatibilität und Flexibilität in verschiedenen Entwicklungs­umgebungen.

Falls Sie einen Automatisierungsfehler erhalten, deutet das darauf hin, dass Sie unsere DLL nicht mit regasm registriert haben. Das können Sie mit regasm.exe /CodeBase Aloaha_ZUGFeRD.dll nachholen. Stellen Sie dabei sicher, dass Ihr Benutzer erweiterte Systemrechte besitzt.

Sollten Sie Interesse an unserem VB6 Beispielprojekt haben kontaktieren Sie uns bitte damit wir Ihnen die Sourcen schicken.

Das Ergebnis des Beispielcodes finden sie hier:

Fuer VB.NET koennen Sie auch ein komplettes Demo Projekt laden:
https://www.aloaha.com/download/ZUGFeRDSample.zip

Minimum ZUGFeRD SDK Version required: 9.0.0.15

Dim LicenseKey As String
Dim InvoiceCurrency As String
Dim InvoiceID As String
Dim InvoiceDate As String
Dim InvoiceDate_Format As String
Dim InvoiceNote As String
Dim Bestellnummer As String
Dim BookingReference As String
Dim BookingReferenceTypeocde As String
Dim LeitWegID As String
Dim IssuerAssignedID As String                  'BT-17, BT-18, BT-122
Dim URIID As String                             'BT-124
Dim TypeCode As String                          'BT-17-0, BT-18-0, BT-122-0
Dim docdescription As String                    'BT-123
Dim PaymentTermsDescription As String
Dim DueDate As String                           'BT-9
Dim DirectDebitMandateID As String              'BG-19/ BT-89
Dim position0 As Integer
Dim position1 As Integer
Dim StartDate As String                         'BT-73
Dim EndDate As String                           'BT-74
Dim ItemStartDate As String
Dim ItemEndDate As String

Dim CalculatedAmount As String
Dim BasisAmount As String
Dim TaxTypeCode As String
Dim CategoryCode As String
Dim ApplicablePercent As String
Dim TaxPointDate As String                      'BT-7
Dim DueDateTypeCode As String                   'BT-8
Dim ExemptionReason As String

'Early Binding, please note that sometimes Late Binding is better!
Dim alo As Aloaha_ZUGFeRD.XML
Set alo = CreateObject("Aloaha_ZUGFeRD.XML")

'if error then call regasm Aloaha_ZUGFeRD.dll /codebase
'make sure you use the 32 Bit Regasm

LicenseKey = "7xxxxxxxxxxxxxxxxxM"
InvoiceCurrency = "EUR"                         'BT-5
InvoiceID = "47110815"                          'BT-1
InvoiceDate = alo.TodayDate.Document_Date       'BT-2
InvoiceDate_Format = alo.TodayDate.Document_DateFormat


Bestellnummer = "Bestellnummer"                 'BT-13
InvoiceNote = "Rechnung gemäß Bestellung."      'BT-22, BG-1
BookingReference = "Buchungsreferenz"           'BT-19
BookingReferenceTypeocde = ""



If alo.Licensed(LicenseKey) = False Then
    MsgBox ("Not Licensed")
Else
    alo.LicenseKey = LicenseKey
    alo.ZUGFeRD_Profile = ZUGFeRDProfile_2_comfort  'hat den Wert 1
    alo.ZUGfeRDStandard = ZUGFeRDVersion_xInvoice   'hat den Wert 2
    alo.isKOSIT = True
    If alo.CreateNewInvoice(InvoiceID, InvoiceNote, InvoiceDate, InvoiceDate_Format, "", "", InvoiceCurrency) = True Then
        alo.Document_Type = 380                     'BT-3 (Invoice)

        alo.InvoiceCurrencyCode = InvoiceCurrency   'BT-5
        alo.Document_ID = InvoiceID                 'BT-1

        'BT-23
        alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"

        alo.AddBuyerAssignedID (Bestellnummer)      'BT-13

        Call alo.AddReceivableSpecifiedTradeAccountingAccount(BookingReference, BookingReferenceTypeocde) 'BT-19


        IssuerAssignedID = "111111114"         'BT-17, BT-18, BT-122
        URIID = ""                             'BT-124
        TypeCode = "916"                       'BT-17-0, BT-18-0, BT-122-0
        docdescription = "doc description"     'BT-123
        Call alo.Add_AdditionalReferencedDocument(IssuerAssignedID, URIID, TypeCode, docdescription)


        LeitWegID = "N999-11111-22"            'BT-10
        Call alo.WriteBuyer("Muster GmbH", "49479", "Ibbenbüren", "Bahnhofstraße 1", "", "DE", "kundennummer", "DE000000", LeitWegID)
        alo.LeitWegID = LeitWegID
        alo.BuyerReference = LeitWegID


        alo.BuyerCountry = "DE"
        alo.BuyerPostCode = "49479"
        alo.BuyerID = "KundenNummer"
        'Call alo.AddBuyerGlobalID(alo.BuyerID, "0021")

        Call alo.WriteBuyerContactPerson("John Doe", "Einkauf", "stefan@aloaha.com", "+4900000")
        alo.BuyerCity = "Ibbenbüren"
        alo.BuyerAddressLine1 = "Bahnhofstraße 1"
        alo.BuyerAddressLine2 = "Wohnung 2"
        alo.BuyerPersonalName = "Karl Mustermann"
        alo.BuyerDepartment = "Einkauf"
        alo.BuyerEmail = "stefan@aloaha.com"

        'BT-34, BT-49
        Call alo.set_URIUniversalCommunication("test@toplevel.tld", "EM", False)

        alo.BuyerTelephone = "+490000"
        'Call alo.AddBuyerOrderReferencedDocument("47110815", "20130608", "102", "", "1")
        'Call alo.AddBuyerOrderReferencedDocument("234234243", "20130608", "102", "", "2")

        'alo.CreditorReferenceID = "CreditorReferenceID"   'BG19 / BT-90


        Call alo.WriteSeller("Aloaha Limited", "PBK1131", "Pembroke", "Helgoland", "45, Triq Gio Felice Inglott", "MT", "MT000000000")
        alo.SellerDepartment = "Sales"
        alo.SellerName = "Aloaha Limited"
        alo.SellerCity = "Pembroke"
        alo.SellerAddressLine1 = "Helgoland"
        alo.SellerAddressLine2 = "Triq Gio Felice Inglott"
        alo.SellerCountry = "MT"
        alo.SellerPostCode = "PBK1131"
        alo.SellerID = "4711"
        'Call alo.AddSellerGlobalID(alo.SellerID, "0021")
        Call alo.AddPaymentMeans("58", "Überweisung", "DE12 3456 7890 1234 5678 90", "", "", "XXXXX21YYY", "", "")
        Call alo.WriteSellerContactPerson("John Doe", "Verkauf", "stefan@aloaha.com", "+49 1111111")
        alo.SellerPersonalName = "John Doe"                 'BT-41
        alo.SellerDepartment = "Sales Department"
        alo.SellerEmail = "stefan@aloaha.com"               'BT-43
        'alo.SellerFAX = "+49000000"
        alo.SellerTelephone = "+490000"

        'BT-34, BT-49, PEPPOL-EN16931-R020
        Call alo.set_URIUniversalCommunication("1234567890128", "0088", True)

        PaymentTermsDescription = "#SKONTO#TAGE=14#PROZENT=2.00#BASISBETRAG=396.00#"    'BT-20
        DueDate = alo.TodayDate.Document_Date                        'BT-9
        DirectDebitMandateID = ""                                    'BG-19/ BT-89
        Call alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID)

        'Call alo.SetDespatchAdviceReferencedDocument("Lieferavisreferenz")              'BT-16


        Dim useBillingPeriod As Boolean
        useBillingPeriod = False
        If useBillingPeriod = True Then
            StartDate = "20120108"                                    'BT-73
            EndDate = "20120708"                                      'BT-74
            Call alo.WriteBillingPeriod(StartDate, EndDate, "102")
        End If

        Dim DeliveryDate As String
        Dim DeliveryDateFormat As String
        DeliveryDate = "20120608"                                     'BT-72
        DeliveryDateFormat = "102"                                    'BT-72-0
        Call alo.Set_Actual_DeliveryDate(DeliveryDate, DeliveryDateFormat)
        
    End If

    'Call alo.AddDeliveryNote("324544", "20150608", "102")
    'Call alo.AddDeliveryNote("dfadfafaf", "20150608", "102", "1")

    'ItemStartDate = "20120108"
    'ItemEndDate = "20120708"
    position0 = alo.AddProduct_Comfort("1", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennblätter", "A4", "11.781", InvoiceCurrency, "", "", False, "", "", "", "9,9", InvoiceCurrency, "", "", "vat", "s", "19.00", "", "198.00", InvoiceCurrency, "globalid", "0160")
    'Call alo.ItemWriteBillingPeriod(position0, ItemStartDate, ItemEndDate, "102")

    position1 = alo.AddProduct_Comfort("2", "nicht rabattierfähig", "TB100A4", "20.0000", "H87", "Trennstreifen", "A4", "11.781", InvoiceCurrency, "", "", False, "", "", "", "9,9", InvoiceCurrency, "", "", "vat", "s", "19.00", "", "198.00", InvoiceCurrency, "globalid", "0160")


    CalculatedAmount = "75.24"
    BasisAmount = "396.00"
    TaxTypeCode = "VAT"
    CategoryCode = "S"
    ApplicablePercent = "19.00"
    TaxPointDate = ""              'BT-7
    DueDateTypeCode = ""           'BT-8
    ExemptionReason = ""
    Call alo.AddTradeTax(CalculatedAmount, InvoiceCurrency, BasisAmount, InvoiceCurrency, TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate, "", DueDateTypeCode)

    Call alo.WriteTotals("396.00", "471.24", "471.24", "396.00", "75.24", "00,00", "0.00", "0.00")


    alo.UseASIIOnSave = False
    alo.SaveWithoutUTF8Header = False

    alo.SaveXML ("o:\temp\test1.xml")

    Call alo.MergeXMLIntoPDF("o:\temp\test1.xml", "o:\pdf\plain.pdf", "o:\temp\test1.pdf", True, "", LicenseKey)


End If


Sie möchten die Rechnungsposten aus einer bestehenden Datei auslesen? Dann schauen Sie bitte hier: https://www.zugferdpro.com/posten-aus-der-zugferd-bzw-x-rechnung-auslesen/