Private Function create_XML_Public_Authority(sLeitweg_ID As String) As Boolean
Dim sSQL As String
Dim sWrt As String
Dim sArr() As String
Dim iValue As Double
'
Dim RechnungsPostenID As Long
Dim Produktnotiz As String
Dim Produktname As String
Dim Produktbeschreibung As String
Dim ProduktID As String
Dim Einheit As String
Dim Anzahl As String
Dim Bruttopreis As String
Dim BruttopreisAnzahl As String
Dim Bruttogesamtpreis As String
Dim NettoEinzelPreis As Double
Dim Rabatt As String
Dim Nettopreis As String
Dim NettopreisAnzahl As String
Dim Nettogesamtpreis As String
Dim MwSt_Satz As String
Dim MwSt_KE 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
Dim DueDateTypeCode As String
Dim ExemptionReason As String
'
Dim LicenseKey As String = "1234567890"
Dim zug As Aloaha_ZUGFeRD.iXML.ZUGFeRD = Nothing
Dim ProfileType As Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile = Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort
Dim TestIndicator As Boolean = False
'Es ist immer eine gute Idee ein Backup vom "CultureInfo" zu machen
Dim culture As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("de-DE")
Dim culturebackup As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = culture
Dim alo As Aloaha_ZUGFeRD.XML = New Aloaha_ZUGFeRD.XML(ProfileType, TestIndicator, LicenseKey)
alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice
'alo.PrintPDFDocument("c:\temp\pdfrechnung.pdf", LicenseKey, "Microsoft XPS Document Writer")
alo.EightAfterKommaDigitsfor4 = False
alo.isKOSIT = True
'
sActual_XML_Public_Authority = sSysTempVerz & "\XRECHNUNG_" & sInvoice_No & ".xml"
Dim Rechnungsnummer As String = sInvoice_No
Dim Rechnungsdatum As String = alo.TodayDate.Document_Date
Dim Rechnungsnotiz As String = "Rechnung gemaess Bestellung"
Dim Rechnungssprache As String = "" 'Sollte leer sein
alo.CreateInvoice(Rechnungsnummer, Rechnungsnotiz, Rechnungsdatum, alo.TodayDate.Document_DateFormat, , Rechnungssprache, "EUR")
alo.InvoiceCurrencyCode = "EUR"
alo.Document_ID = Rechnungsnummer
alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.Invoice
'BT-23 Statischer String
alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
'
'Definieren Sie einige allgemeine Eigenschaften der Rechnung
alo.AddSpecifiedProcuringProject("ProjectID", "ProjectName")
alo.AddBuyerAssignedID("Bestellnummer")
alo.AddReceivableSpecifiedTradeAccountingAccount("Buchungsreferenz", "")
'
'
'
'falls es eine LeitwegID gibt bitte auch angeben
'Sie ueberschreibt: alo.BuyerReference
If sLeitweg_ID.Trim = "" Then
sActual_XML_Public_Authority = ""
Return false
End If
alo.LeitwegID = sLeitweg_ID
'
'=== Erstellen Sie den Kaeufer (Ohne Ort, der folgt im Ansprechpartnerblock) ===
alo.BuyerName = 'Test GmbH"
alo.BuyerPostCode = "20000"
alo.BuyerID = "12345" 'Kundennr.
alo.BuyerAddressLine1 = "Hauptstr. 1"
alo.BuyerCountry = "DE" 'Iso-2-Code
'BT-49
'Auch die URIUniversalCommunication ist ein Muss
alo.set_URIUniversalCommunication("info@zugferdpro.com", "EM", False)
'Eine Kontaktperson ist ein Muss. Die meisten Validatoren erwarten es
alo.BuyerPersonalName = "Franz Holzmann"
alo.BuyerDepartment = ""
alo.BuyerEmail = "fholzmann@gmail.com"
alo.BuyerTelephone = "0170123456789"
alo.BuyerCity = "Hamburg" 'ACHTUNG: City nur einmal nennen, gilt fuer Buyer und Ansprechpartner
'
'=== Erstellen Sie den Verkaeufer ===
alo.WriteSeller("Test GmbH", "20000", "Hamburg", "Hauptstr. 1", "", "DE", "DE12345678",)
alo.SellerLegalID = "HRB 12345"
'EM=Email
'BT-34
alo.set_URIUniversalCommunication("info@test.de", "EM", True)
'Und wieder ist die Kontaktperson ein Musss
alo.WriteSellerContactPerson("Birgit Mueller", "Vertrieb", "bmueller@online.de", "+49 1234567890")
'
'
'
'Jede Rechnung moechte auch bezahlt werden. Deshalb benoetigen Sie mindestens eine Zahlungsmethode
'Bankname, BLZ werden von den meisten Validatoren nicht mehr erwuenscht
Dim KontoName As String = ""
Dim BankName As String = "" 'Sollte leer bleiben
'Zahlungsbedingungen sollten auch immer angegeben werden.
'Hier kann auch Skonto untergebracht werden.
'Details: h_ttps://www.zugferdpro.com/skonto-und-verzugszinsen-bt-20/
Dim PaymentTermsDescription As String = ""
Dim DueDate As String = ""
Dim DirectDebitMandateID As String = ""
Dim PeriodUnit As String = ""
Dim Period As String = ""
Dim DiscountPercent As String = ""
Dim DiscountAmount As String = ""
Dim Steuerbasis As Double 'Nettosumme 19%, wird pro Pos. aufaddiert
Dim Umsatzsteuersatz As Double = "19"
Dim Steuerbasis_reduced As Double 'Nettosumme 7%, wird pro Pos. aufaddiert
Dim Umsatzsteuersatz_reduced As Double = "7"
'
KontoName = "Test GmbH" 'Kontoinhalber-Name
alo.AddPaymentMeans(alo.PaymentMeansCode(Aloaha_ZUGFeRD.iXML.Payment_Means.SEPA_credit_transfer), "Sepa Credit Transfer", "DE1234567890", KontoName, "", "GENODEDXXXX", "", BankName, False)
'Zahlungsbedingung aufgedroeselt: -wir lassen das erstmal und schreiben es nur in den Text-
'PeriodUnit = "DAY"
'Period = "30"
'DiscountPercent = "3"
'DiscountAmount = "10"
PaymentTermsDescription = "30 Tage netto"
DueDate = alo.TodayDate.Document_Date
alo.AddTradePaymentTerms(PaymentTermsDescription, DueDate, alo.TodayDate.Document_DateFormat, DirectDebitMandateID, PeriodUnit, Period, DiscountPercent, DiscountAmount)
'Kein Datum, sonst Fehler
'alo.AddSellerAssignedID("Auftragsbestaetigung", "20130608", "102") 'BT-14
alo.PaymentReference = "Invoice No. " & sInvoice_No
'Gibt es keine "Lieferavisreferenz", dann muss man etwas uebergeben
alo.SetDespatchAdviceReferencedDocument("n/a")
'================ P O S I T I O N E N ======================
'Natuerlich enthaelt jede Rechnung auch die Rechnungsposten.
'AddProduct_Comfort wird pro Posten einmal aufgerufen
'Details auf: h_ttps://www.zugferdpro.com/der-rechnung-posten-mit-addproduct_comfort-hinzufugen/
'Einheiten sind streng definiert. Sie koennen nicht einfach "Stueck" schreiben
'h_ttps://www.zugferdpro.com/unitcodes-fuer-die-menge-in-zugferd-xrechnung-xinvoice/
Steuerbasis = 0
Steuerbasis_reduced = 0
'-------------POS 0
'Ohne Rabatt
RechnungsPostenID = 0
Produktnotiz = "nicht rabattierfaehig"
ProduktID = "TB100A4"
Produktname = "500 Blatt Papier"
Produktbeschreibung = "Papier A4"
Einheit = "C62"
Anzahl = "10.00" 'Anzahl
MwSt_Satz = "19.00"
MwSt_KE = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate)
Bruttopreis = ""
BruttopreisAnzahl = ""
Bruttogesamtpreis = ""
Rabatt = ""
NettopreisAnzahl = "1.00"
NettoEinzelPreis = 0
Nettopreis = "5.00" 'EP
Nettogesamtpreis = "50.00" 'GESPREIS = Anzahl * EP
Steuerbasis += CDbl(Nettogesamtpreis)
'
RechnungsPostenID = alo.AddProduct_Comfort(CStr(RechnungsPostenID), Produktnotiz, ProduktID, Anzahl, Einheit, Produktname, Produktbeschreibung,
Bruttopreis, "EUR", "", Einheit, False, Rabatt, "", "", Nettopreis, "EUR", NettopreisAnzahl,
Einheit, "VAT", MwSt_KE, MwSt_Satz, "", Nettogesamtpreis, "EUR", "", "")
'
'
'
'-------------POS 1
'RABATT
Produktnotiz = "Rabatt gegeben"
RechnungsPostenID = 1
ProduktID = "AS0815"
Produktname = "Scheibe"
Produktbeschreibung = "Anlaufscheibe"
Einheit = "C62"
Anzahl = "10.00"
MwSt_Satz = "19.00"
MwSt_KE = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate)
Bruttopreis = "25.25" 'EP * Anzahl
BruttopreisAnzahl = "10.00"
Bruttogesamtpreis = ""
Rabatt = "3.79" 'in Euro
NettopreisAnzahl = "10.00"
NettoEinzelPreis = (CDbl(Bruttopreis) - CDbl(Rabatt)) / CDbl(BruttopreisAnzahl) 'EP - Rabatt
Nettopreis = CStr(Math.Round(NettoEinzelPreis * CDbl(NettopreisAnzahl), 2)) '(EP - Rabatt) * Anzahl
Nettogesamtpreis = CStr(Math.Round(NettoEinzelPreis * CDbl(Anzahl), 2))
Steuerbasis += CDbl(Nettogesamtpreis)
RechnungsPostenID = alo.AddProduct_Comfort(CStr(RechnungsPostenID), Produktnotiz, ProduktID, Anzahl, Einheit, Produktname, Produktbeschreibung,
Bruttopreis, "EUR", "", Einheit, False, Rabatt, "EUR", "", Nettopreis, "EUR", NettopreisAnzahl,
Einheit, "VAT", MwSt_KE, MwSt_Satz, "", Nettogesamtpreis, "EUR", "", "")
'
'-------------POS 2
'Ohne Rabatt
RechnungsPostenID = 2
Produktnotiz = "nicht rabattierfaehig"
ProduktID = "TBXXXA4"
Produktname = "1 Blatt Papier"
Produktbeschreibung = "Papier A5"
Einheit = "C62"
Anzahl = "10.00" 'Anzahl
MwSt_Satz = "7.00"
MwSt_KE = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate)
Bruttopreis = ""
BruttopreisAnzahl = ""
Bruttogesamtpreis = ""
Rabatt = ""
NettopreisAnzahl = "1.00"
NettoEinzelPreis = 0
Nettopreis = "5.00" 'EP
Nettogesamtpreis = "50.00" 'GESPREIS = Anzahl * EP
Steuerbasis_reduced = Steuerbasis_reduced + CDbl(Nettogesamtpreis)
'
RechnungsPostenID = alo.AddProduct_Comfort(CStr(RechnungsPostenID), Produktnotiz, ProduktID, Anzahl, Einheit, Produktname, Produktbeschreibung,
Bruttopreis, "EUR", "", Einheit, False, Rabatt, "", "", Nettopreis, "EUR", NettopreisAnzahl,
Einheit, "VAT", MwSt_KE, MwSt_Satz, "", Nettogesamtpreis, "EUR", "", "")
'========= 19% ===========
'
'Nun muessen wir noch die Steuern addieren und angeben
CalculatedAmount = Math.Round((Steuerbasis * (Umsatzsteuersatz)) / 100, 2)
BasisAmount = CStr(Math.Round(Steuerbasis, 2))
TaxTypeCode = "VAT"
CategoryCode = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate)
ApplicablePercent = CStr(Umsatzsteuersatz)
TaxPointDate = DueDate
DueDateTypeCode = ""
ExemptionReason = ""
alo.AddTradeTax(CalculatedAmount, "EUR", BasisAmount, "EUR", TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate,
"102", DueDateTypeCode)
'========= 7% ===========
'
'Nun muessen wir noch die Steuern addieren und angeben
CalculatedAmount = Math.Round((Steuerbasis_reduced * (Umsatzsteuersatz_reduced)) / 100, 2)
BasisAmount = CStr(Math.Round(Steuerbasis_reduced, 2))
TaxTypeCode = "VAT"
CategoryCode = alo.VatCategoryCode(Aloaha_ZUGFeRD.iXML.VAT_Category.StandardRate)
ApplicablePercent = CStr(Umsatzsteuersatz_reduced)
TaxPointDate = "" 'Das Datum nur einmal ausweisen
DueDateTypeCode = ""
ExemptionReason = ""
alo.AddTradeTax(CalculatedAmount, "EUR", BasisAmount, "EUR", TaxTypeCode, CategoryCode, ApplicablePercent, ExemptionReason, TaxPointDate,
"102", DueDateTypeCode)
'
'
'
'
'Nun fehlen nur noch die Summen h_ttps://www.zugferdpro.com/writetotals/
'Summe aller Posten NETTO GESAMT
Dim LineTotalAmount As String = CStr(Math.Round(Steuerbasis + Steuerbasis_reduced, 2))
'Summe incl. MwSt BRUTTO GESAMT
iValue = Math.Round(Steuerbasis + ((Steuerbasis * (Umsatzsteuersatz)) / 100), 2)
iValue += Math.Round(Steuerbasis_reduced + ((Steuerbasis_reduced * (Umsatzsteuersatz_reduced)) / 100), 2)
Dim GrandTotalAmount As String = CStr(iValue)
'Zahlbar BRUTTO GESAMT
iValue = Math.Round(Steuerbasis + ((Steuerbasis * (Umsatzsteuersatz)) / 100), 2)
iValue += Math.Round(Steuerbasis_reduced + ((Steuerbasis_reduced * (Umsatzsteuersatz_reduced)) / 100), 2)
Dim DuePayableAmount As String = CStr(iValue)
'Versteuerbare Summe NETTO GESAMT
Dim TaxBasisTotalAmount As String = CStr(Math.Round(Steuerbasis + Steuerbasis_reduced, 2))
'MwSt Gesamt MWST GESAMT
iValue = Math.Round(Steuerbasis * (Umsatzsteuersatz) / 100, 2)
iValue += Math.Round(Steuerbasis_reduced * (Umsatzsteuersatz_reduced) / 100, 2)
Dim TaxTotalAmount As String = CStr(iValue)
'Anzahlungen beruecksichtigen
Dim Anzahlung As String = "0.00"
'Abschlaege
Dim AllowanceTotalAmount As String = "0.00"
'Zuschlaege
Dim ChargeTotalAmount As String = "0.00"
Dim Rundungsfehler As String = "0.00"
'
alo.WriteTotals(LineTotalAmount, GrandTotalAmount, DuePayableAmount, TaxBasisTotalAmount, TaxTotalAmount, AllowanceTotalAmount,
Anzahlung, Rundungsfehler, ChargeTotalAmount)
'Sie koennen sich auch die Struktur im Debugger anschauen
'Auch koennen Sie Werte direkt aendern
zug = alo.ZUGFeRD_Structure
'Wenn Felder editiert wurden muss man natuerlich zurueckschreiben
'alo.ZUGFeRD_Structure = zug
'Wir erstellen nun das XML
alo.UseASIIOnSave = False
alo.SaveWithoutUTF8Header = True 'Mit oder ohne BOM speichern
If System.IO.File.Exists(sActual_XML_Public_Authority) = True Then System.IO.File.Delete(sActual_XML_Public_Authority)
alo.SaveXML(sActual_XML_Public_Authority)
'Es wurde nichts erstellt? Dann schauen Sie mal in Lasterror nach
If alo.Last_Error <> "" Then MsgBox(alo.Last_Error)
'Sie koennen auch direkt den PDF Teil erstellen. Winword muss dazu allerdings installiert sind
'Natuerlich koennen Sie auch Ihre eigene PDF Datei benutzen.
Dim docpdf As String = "c:\temp\Rechnung.pdf"
Dim docx As String = "c:\temp\template.docx"
If System.IO.File.Exists(docpdf) = True Then System.IO.File.Delete(docpdf)
alo.CreateDocFromXML(sActual_XML_Public_Authority, docpdf, docx, LicenseKey, True, "", True)
'Wenn Sie eine Hybride Rechnung erstellen moechten
'Dann muessen Sie den XML Teil in Ihre PDF Rechnung einbetten.
'in docpdf koennen Sie natuerlich auch Ihre exitierende PDF Rechnung eintragen
Dim zugferdrechnung As String = "c:\temp\zugferdrechnung.pdf"
If System.IO.File.Exists(zugferdrechnung) = True Then System.IO.File.Delete(zugferdrechnung)
'Eigentlich ueberfluessig da docpdf schon das XML enthaelt.
Call alo.MergeXMLIntoPDF(sActual_XML_Public_Authority, docpdf, zugferdrechnung, True, "", LicenseKey)
alo = Nothing
'CultureInfo zurueckschreiben
System.Threading.Thread.CurrentThread.CurrentCulture = culturebackup
end Function