Gesamtsummen (BG-22) einzeln setzen und als CSV exportieren

Thema
VB.NET
SDK-Mitglieder
AddMonetarySummation() FillZUGFeRD_Structure() GetMonetarySummation() ReadTotalsCSV() ReadTradeAllowanceChargesCSV() WriteTotals()
Business Terms
BG-22 Gesamtsummen auf Dokumentenebene BT-106 Summe der Nettobeträge aller Rechnungspositionen BT-107 Summe der Abschläge auf Dokumentenebene BT-108 Summe der Zuschläge auf Dokumentenebene BT-109 Rechnungsgesamtbetrag ohne Umsatzsteuer BT-110 1..1 1..1 1..1 1..1 BT-112 Rechnungsgesamtbetrag einschließlich Umsatzsteuer BT-113 Vorauszahlungsbetrag
Codebeispiele
VB.NET
Veröffentlicht

Die Gruppe Gesamtsummen auf Dokumentenebene (BG-22) enthält die Beträge, die jede E-Rechnung am Ende ausweist: Summe der Positionen, Zu- und Abschläge, Steuerbasis, Umsatzsteuer, Bruttobetrag, Vorauszahlung, Rundung und Zahlbetrag. Üblicherweise schreiben Sie alle Summen auf einmal mit WriteTotals. Mit AddMonetarySummation setzen Sie einen einzelnen Betrag, und mit ReadTotalsCSV und ReadTradeAllowanceChargesCSV exportieren Sie Summen sowie Zu- und Abschläge (BG-20, BG-21) einer Rechnung als CSV-Text.

Felder

FeldBedeutungSummationTypeParameter von WriteTotals
BT-106Summe der Nettobeträge aller PositionenLineTotalAmountNettoTotal
BT-107Summe der Abschläge auf DokumentenebeneAllowanceTotalAmountDiscountTotal
BT-108Summe der Zuschläge auf DokumentenebeneChargeTotalAmountChargeTotal
BT-109Rechnungsgesamtbetrag ohne UmsatzsteuerTaxBasisTotalAmountTaxableTotal
BT-110Gesamtbetrag der UmsatzsteuerTaxTotalAmountTaxTotal
BT-112Rechnungsgesamtbetrag einschließlich UmsatzsteuerGrandTotalAmountTotal
BT-113VorauszahlungsbetragTotalPrepaidAmountPrepaid
BT-114RundungsbetragRoundingAmountRoundingAmount
BT-115Fälliger ZahlungsbetragDuePayableAmountDuePayable

Einzelne Summe schreiben

AddMonetarySummation(Amount, SummationType, CurrencyID) setzt genau einen Betrag. Ein Komma im Betrag wird als Dezimaltrennzeichen gelesen, der Wert auf zwei Nachkommastellen gebracht. Bleibt CurrencyID leer, gilt die Rechnungswährung (BT-5); ist noch keine Rechnungswährung gesetzt, übernimmt die SDK die hier angegebene.

Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL")
' ... Rechnungskopf, Parteien, Positionen, Umsatzsteuer (AddTradeTax)

' alle Summen auf einmal: Netto 100,00 – Abschlag 10,00 + 19 % USt = 107,10
alo.WriteTotals("100.00", "107.10", "107.10", "90.00", "17.10", "10.00")

' danach eine einzelne Summe ergänzen: 50,00 € wurden bereits angezahlt
alo.AddMonetarySummation("50.00", Aloaha_ZUGFeRD.iXML.SummationType.TotalPrepaidAmount, "EUR")
alo.AddMonetarySummation("57.10", Aloaha_ZUGFeRD.iXML.SummationType.DuePayableAmount, "EUR")

VBA / VB6 (COM) – statt der Aufzählung übergeben Sie deren Zahlenwert (7 = TotalPrepaidAmount, 8 = DuePayableAmount):

alo.AddMonetarySummation "50.00", 7, "EUR"
alo.AddMonetarySummation "57.10", 8, "EUR"

Zusammenspiel mit WriteTotals

WriteTotals ruft intern für alle neun Beträge AddMonetarySummation auf. Daraus folgt:

  • Ein späterer Aufruf von WriteTotals überschreibt alle Summen – auch solche, die Sie vorher einzeln gesetzt haben; nicht übergebene Werte werden zu 0.00. Setzen Sie Einzelbeträge daher immer nach WriteTotals.
  • Nur WriteTotals rechnet: Übergeben Sie dort Total oder DuePayable als 0, ermittelt die SDK BT-112 = BT-106 − BT-107 + BT-108 + BT-110 bzw. BT-115 = BT-112 − BT-113 + BT-114. AddMonetarySummation übernimmt den Betrag dagegen unverändert; passen Sie abhängige Summen (wie im Beispiel BT-115) selbst an.

Einen einzelnen Betrag lesen Sie mit GetMonetarySummation, alle auf einmal mit getTotals:

Dim zahlbetrag As String = alo.GetMonetarySummation(Aloaha_ZUGFeRD.iXML.SummationType.DuePayableAmount)   ' "0.00", wenn nicht gesetzt

Summen als CSV exportieren

ReadTotalsCSV liefert den Rechnungskopf mit allen Summen als CSV-Text: eine Kopfzeile und eine Datenzeile, getrennt durch einen Zeilenumbruch (CRLF). Der Parameter bestimmt das Trennzeichen (Standard: Komma).

If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then
    Dim csv As String = alo.ReadTotalsCSV(vbTab)
    Dim zeilen() As String = csv.Split(New String() {vbCrLf}, StringSplitOptions.None)
    Dim kopf() As String = zeilen(0).Split(CChar(vbTab))
    Dim werte() As String = zeilen(1).Split(CChar(vbTab))
    For i As Integer = 0 To kopf.Length - 1
        Console.WriteLine(kopf(i) & " = " & werte(i))
    Next
End If

Die ersten Spalten sind currency, type (BT-3), leitwegid, invoiceid, invoicedate und dann die Summen in der Reihenfolge LineTotalAmount, ChargeTotalAmount, AllowanceTotalAmount, TaxBasisTotalAmount, TaxTotalAmount, RoundingAmount, GrandTotalAmount, TotalPrepaidAmount, DuePayableAmount. Es folgen u. a. Zahlungsbedingungen, Verwendungszweck, Rechnungsnotizen, Liefer- und Abrechnungszeitraum, je Steuersatz ein Spaltenblock der Umsatzsteueraufschlüsselung (BG-23) sowie Projekt-, Vertrags- und Bestellreferenzen. Wiederholte Gruppen erhalten ab dem zweiten Eintrag eine Nummer (InvoiceNote1, TAXTypeCode1 …). Leere Summen erscheinen als 0.00. Die Spalten entsprechen der Datei totals.csv des CSV-Imports.

Zu- und Abschläge als CSV (BG-20, BG-21)

ReadTradeAllowanceChargesCSV exportiert die Abschläge (BG-20) und Zuschläge (BG-21) auf Dokumentenebene: eine Kopfzeile und eine Zeile je Eintrag. Gibt es keine, ist das Ergebnis eine leere Zeichenkette.

Dim zuab As String = alo.ReadTradeAllowanceChargesCSV(";")
If zuab <> "" Then Console.WriteLine(zuab)
' chargeindicator;basisamount;calculationpercent;actualamount;reason;taxpercent;taxtypecode;taxcategorycode;reasoncode;currency
' 0;100.00;10.00;10.00;Treuerabatt;19.00;VAT;S;95;EUR

chargeindicator ist 1 für einen Zuschlag und 0 für einen Abschlag. Je Eintrag wird nur die erste Steuerangabe exportiert. Am Ende jeder Zeile stehen der Begründungscode (BT-98 bzw. BT-105, Spalte reasoncode) und die Währung (currency); da sie angehängt sind, bleiben die Positionen der übrigen Spalten unverändert. In älteren Versionen der SDK fehlten diese beiden Spalten. Das Format entspricht der Datei allowances.csv. Alle fünf Datensätze einer Rechnung auf einmal erzeugt CreateCSV – siehe Konvertierung nach CSV.

Hinweise

  • Keine Anführungszeichen: Beide Funktionen setzen Werte nicht in Anführungszeichen. Wählen Sie ein Trennzeichen, das in Texten wie Notizen oder Begründungen nicht vorkommt, z. B. den Tabulator. In ReadTotalsCSV werden Zeilenumbrüche in Freitexten ersetzt.
  • Keine Nebenwirkungen: ReadTotalsCSV verändert die Rechnung nicht; Summen und Rechnungswährung (BT-5) bleiben so, wie Sie sie gesetzt oder eingelesen haben. In älteren Versionen der SDK setzte die Funktion bei fehlendem Zahlbetrag BT-115 auf BT-112 und übernahm eine leere Rechnungswährung aus den Summen.
  • COM: ReadTotalsCSV ist Teil der Schnittstelle iXML (als letztes Mitglied angehängt) und damit auch aus VBA/VB6 frühgebunden aufrufbar. Registrieren Sie nach einem Update die Typbibliothek neu.
  • Profile: BG-22 ist in allen Profilen Pflicht. BT-106 sowie die Zu- und Abschläge gibt es ab BASIC WL, den Rundungsbetrag BT-114 erst ab EN 16931 (COMFORT).

Business Terms in diesem Artikel: BG-22 BT-106 BT-107 BT-108 BT-109 BT-110 BT-112 BT-113 BT-114 BT-115 BG-20 BG-21 BT-1 BT-3 BT-5 BG-23