- Thema
- Fragen und Antworten
- SDK-Mitglieder
- ActualDeliveryDate_102 AddPaymentMeans() AddProduct_Comfort() AddTradePaymentTerms() AddTradeTax() BusinessProcessSpecifiedDocumentContextParameter BuyerReference CreateInvoice() IsKosit Last_Error
- Business Terms
- BT-81 Code für die Zahlungsart BT-82 Text zur Zahlungsart BT-20 Zahlungsbedingungen BT-72 Tatsächliches Lieferdatum BG-16 Zahlungsanweisungen BG-14 Rechnungszeitraum BT-9 Fälligkeitsdatum der Zahlung BT-83 Verwendungszweck
- Codebeispiele
- VB.NET
- Veröffentlicht
Kurz: Wird der Rechnungsbetrag nicht überwiesen, sondern mit einer Abrechnung oder Gutschrift verrechnet (einbehalten), verwenden Sie als Zahlungsart (BT-81) den Code 97 „Verrechnung zwischen Partnern“. Den Hinweis zur Verrechnung schreiben Sie in den Zahlungsart-Text (BT-82) und in die Zahlungsbedingungen (BT-20). Bankdaten sind dann nicht nötig.
Was die XRechnung verlangt
- Die Gruppe Zahlungsanweisungen (BG-16) mit der Zahlungsart ist in der XRechnung Pflicht – auch wenn nichts überwiesen wird. Code 97 ist dafür vorgesehen.
- IBAN und BIC werden nur für Überweisung (30, 58) und Lastschrift (59) verlangt – bei 97 bleiben sie leer.
- Ist ein Betrag fällig, braucht die Rechnung ein Fälligkeitsdatum (BT-9) oder Zahlungsbedingungen (BT-20). Ein Satz wie „Der Betrag wird mit Abrechnung … verrechnet.“ erfüllt das.
- Das Liefer- bzw. Leistungsdatum (BT-72) oder einen Leistungszeitraum (BG-14) sollten Sie immer angeben – das verlangt § 14 UStG ohnehin.
Beispiel mit dem Aloaha ZUGFeRD SDK (VB.NET)
Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL")
alo.ZUGfeRDStandard = Aloaha_ZUGFeRD.iXML.ZUGFeRDVersion.xInvoice
alo.isKOSIT = True ' XRechnung
alo.BusinessProcessSpecifiedDocumentContextParameter = "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
alo.CreateInvoice("2026-0815", "Gebührenrechnung zur Abrechnung 2026-0815", "20261013", "102", , "", "EUR")
' Leistungsdatum (BT-72) und Abrechnungszeitraum (BG-14)
alo.ActualDeliveryDate_102 = "20261013"
alo.WriteBillingPeriod("20260901", "20260930", "102")
' Käufer, Verkäufer, Kontaktpersonen (Name ODER Abteilung, nicht beides)
alo.WriteBuyer("Muster GmbH", "12345", "Musterstadt", "Musterstraße 1", "", "DE", "K-4711") ' Land (BT-55) und Kundennummer (BT-46)
alo.BuyerReference = "4711"
alo.WriteBuyerContactPerson("Max Muster", "", "rechnung@muster.example", "+49 30 123456")
alo.set_URIUniversalCommunication("rechnung@muster.example", "EM", False) ' BT-49
alo.WriteSeller("Beispiel AG", "54321", "Beispielstadt", "Hauptstraße 2", "", "DE", "DE123456789")
alo.WriteSellerContactPerson("Erika Beispiel", "", "buchhaltung@beispiel.example", "+49 40 654321")
alo.set_URIUniversalCommunication("buchhaltung@beispiel.example", "EM", True) ' BT-34
' Zahlungsart 97 = Verrechnung, ohne Bankdaten (BT-81, BT-82)
alo.AddPaymentMeans(Aloaha_ZUGFeRD.iXML.Payment_Means.ClearanceBetweenPartners, _
"Verrechnung mit Abrechnung 2026-0815", "")
' Zahlungsbedingungen (BT-20)
alo.AddTradePaymentTerms("Der Betrag wird mit der Abrechnung 2026-0815 verrechnet. Keine Zahlung erforderlich.")
alo.PaymentReference = "2026-0815" ' BT-83
' Position, Steuer, Summen wie bei jeder anderen Rechnung
alo.AddProduct_Comfort("1", "", "", "1.00", "C62", "Abrechnungsgebühr", "", "", "EUR", "", "C62", False, "", "", "", _
"100.00", "EUR", "1.00", "C62", "VAT", "S", "19.00", "", "100.00", "EUR", "", "")
alo.AddTradeTax("19.00", "EUR", "100.00", "EUR", "VAT", "S", "19.00") ' DueDateTypeCode leer lassen
alo.WriteTotals("100.00", "119.00", "119.00", "100.00", "19.00", "0.00", "0.00", "0.00", "0.00")
alo.SaveXML("C:\Rechnungen\xrechnung.xml")
If alo.Last_Error <> "" Then Console.WriteLine(alo.Last_Error)
Das mit diesem Code erzeugte XML wird vom KoSIT-Validator (XRechnung 3.0.2) ohne Fehler und ohne Warnungen angenommen. Alle Namen, Nummern und Adressen im Beispiel sind Muster-Werte. Fälliger Betrag (BT-115) bleibt der Rechnungsbetrag – verrechnet wird er außerhalb der Rechnung.
Typische Stolpersteine
- Kein Liefer- oder Leistungsdatum: Ältere SDK-Versionen lassen dann den Lieferblock weg, die XRechnung wird mit einem Schemafehler abgelehnt – siehe „ApplicableHeaderTradeDelivery is expected“.
- Datum statt Code bei der Steuer: Der letzte Parameter von AddTradeTax ist ein Code, kein Datum – siehe BR-CL-06.
- Name und Abteilung beim Ansprechpartner: nur eines von beiden – siehe CII-SR-465.
- Land des Käufers vergessen: Das Land (BT-55) ist Pflicht. Übergeben Sie es bei
WriteBuyeroder setzen Siealo.BuyerCountry = "DE". - Variablenname in Anführungszeichen:
set_URIUniversalCommunication("MeineEmailVariable", …)schreibt den Text statt der Adresse in die Rechnung. Der Validator merkt das nicht. - Beträge mit Komma: Beträge immer mit Punkt übergeben, z. B.
Betrag.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture).
Prüfen Sie das Ergebnis vor dem Versand mit dem KoSIT-Validator: Wie prüfe ich meine XRechnung vor dem Versand? Mehr zu den Zahlungsarten: AddPaymentMeans und AddTradePaymentTerms.
Business Terms in diesem Artikel: BT-81 BT-82 BT-20 BT-72 BG-16 BG-14 BT-9 BT-83