Rechnung anlegen, Rechnungstyp (BT-3) und einfache Position

Thema
VB.NET
SDK-Mitglieder
AddProduct_Basic() CreateInvoiceObject() Document_Type Document_TypeINT Licensekey Trade_ItemTradeSettlement WriteItemTradeTax()
Business Terms
BT-1 Rechnungsnummer BT-2 Rechnungsdatum BT-3 Code für den Rechnungstyp BT-5 Code für die Rechnungswährung BT-22 Freitext zur Rechnung BT-83 Verwendungszweck BG-25 Rechnungsposition BG-1 Freitext zur Rechnung
Codebeispiele
VB.NET, VB6 / VBScript (COM)
Veröffentlicht

Jede E-Rechnung beginnt mit dem Rechnungskopf: Rechnungsnummer (BT-1), Rechnungsdatum (BT-2), Rechnungstyp (BT-3) und Währung (BT-5). Dieser Artikel zeigt drei Bausteine des Aloaha ZUGFeRD SDK: CreateInvoiceObject legt die Rechnung an, Document_TypeINT setzt den Rechnungstyp als Zahl und AddProduct_Basic fügt eine einfache Rechnungsposition (BG-25) hinzu.

Rechnung anlegen

FeldBedeutungParameter von CreateInvoiceObject
BT-1Rechnungsnummer – wird auch als Verwendungszweck (BT-83) übernommenInvoiceID
BT-22Freitext zur Rechnung (BG-1), optionalInvoiceNote
BT-2Rechnungsdatum, z. B. 20261007; leer = heutiges DatumInvoiceDate, InvoiceDateFormat (102 = JJJJMMTT)
–Dokumentname (Freitext), sollte normalerweise leer bleibenInvoiceName_FreeText
–Sprache des Dokuments, z. B. DEInvoiceLanguageID_2Letter_ISO
BT-5Rechnungswährung, z. B. EURCurrencyID
Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL")
alo.CreateInvoiceObject("RE-2026-0042", "Vielen Dank für Ihren Auftrag.", "20261007", "102", "", "DE", "EUR")

VBA / VB6 (COM):

Set alo = CreateObject("Aloaha_ZUGFeRD.XML")
alo.Licensekey = "IHR-LIZENZSCHLUESSEL"
Call alo.CreateInvoiceObject("RE-2026-0042", "Vielen Dank für Ihren Auftrag.", "20261007", "102", "", "DE", "EUR")

CreateInvoiceObject arbeitet wie CreateInvoice: Alle Daten, die das Objekt bisher enthielt, werden durch eine neue, leere Rechnung ersetzt. Der Rechnungstyp steht danach auf 380 (Rechnung). Der Rückgabewert ist eine Kopie der Rechnungsstruktur als Object (bei einem Fehler Nothing); Sie brauchen ihn in der Regel nicht, denn alle weiteren Angaben setzen Sie über die Methoden des Objekts. Änderungen an der zurückgegebenen Kopie wirken sich nicht auf das Objekt aus. Der Dokumentname aus InvoiceName_FreeText wird nur im Profil EXTENDED (und bei ZUGFeRD 1.0) in die XML geschrieben.

Rechnungstyp (BT-3) als Zahl

BT-3 ist ein Code aus der Liste UNTDID 1001. In VB.NET setzen Sie ihn bequem über die Aufzählung Document_Type. Document_TypeINT ist dieselbe Angabe als ganze Zahl – das ist der Weg für VBA/COM, wo die Aufzählung nicht zur Verfügung steht:

alo.Document_TypeINT = 381      ' Gutschrift
' gleichwertig in VB.NET:
alo.Document_Type = Aloaha_ZUGFeRD.iXML.DocumentType.CreditNote
' VBA / VB6
alo.Document_TypeINT = 384      ' Rechnungskorrektur
CodeBedeutungDocumentType
380RechnungInvoice
381Gutschrift (Rechnungsminderung)CreditNote
384RechnungskorrekturCorrectedInvoice
389Selbst ausgestellte Rechnung (Gutschriftsverfahren)SelfBilledInvoice
326TeilrechnungPartialInvoice
875Abschlagsrechnung (Bauleistung)PartialConstructionInvoice
876Teilschlussrechnung (Bauleistung)PartialFinalConstructionInvoice
877Schlussrechnung (Bauleistung)FinalConstructionInvoice

Die Aufzählung kennt außerdem u. a. 261, 383, 386 (Vorauszahlungsrechnung) und 751. Document_TypeINT prüft den Wert nicht: Jede Zahl wird unverändert als ram:TypeCode geschrieben, auch ein Code, der nicht in der Aufzählung steht. Nur Werte kleiner als 1 ersetzt SaveXML durch 380. Welche Codes zulässig sind, hängt von Profil und Empfänger ab; die XRechnung erlaubt z. B. nur 326, 380, 381, 384, 389, 875, 876 und 877. Zu Korrekturen und Gutschriften gehört meist ein Verweis auf die ursprüngliche Rechnung – siehe Rechnungskorrektur / Gutschrift.

Beim Lesen liefert Document_TypeINT nach FillZUGFeRD_Structure den Code der eingelesenen Rechnung, z. B. If alo.Document_TypeINT = 381 Then ....

Einfache Position mit AddProduct_Basic

AddProduct_Basic legt eine neue Rechnungsposition mit wenigen Angaben an und gibt deren Index zurück (0-basiert: die erste Position hat den Index 0).

FeldBedeutungParameter
BT-129In Rechnung gestellte MengeBilledQuantity
BT-130Mengeneinheit, z. B. C62 (Stück); gilt auch für die BasismengeQuantityUnit
BT-153ArtikelnameProductName
BT-154ArtikelbeschreibungProductDescription
BT-148BruttopreisGrossPrice
BT-146NettopreisNetPrice
BT-149Basismenge zum PreisNetPriceBasisQuantity

AddProduct_Basic setzt keine Umsatzsteuer der Position (BT-151, BT-152) und keinen Nettobetrag der Position (BT-131). Beides ist ab BASIC Pflicht. Ergänzen Sie die Werte über den zurückgegebenen Index:

Dim pos As Integer = alo.AddProduct_Basic("10", "C62", "Papier A4", "500 Blatt, 80 g/m²", "5.00", "5.00", "1", "EUR")

' BT-151 / BT-152: Umsatzsteuer der Position
alo.WriteItemTradeTax(pos, "19", "S")

' BT-131: Nettobetrag der Position (10 × 5,00 €)
Dim st As Aloaha_ZUGFeRD.iXML.TradeItemSettlement = alo.Trade_ItemTradeSettlement(pos)
st.Monetary_Summation.LineTotalAmount.Amount = "50.00"
st.Monetary_Summation.LineTotalAmount.CurrencyID = "EUR"
alo.Trade_ItemTradeSettlement(pos) = st

Die Reihenfolge ist wichtig: Lesen Sie Trade_ItemTradeSettlement erst nach WriteItemTradeTax, sonst überschreiben Sie die Steuerangaben beim Zurückschreiben. Unter VBA lassen sich solche Strukturen nicht bearbeiten; dort verwenden Sie besser gleich AddProduct_Comfort, das alle Positionswerte in einem Aufruf setzt – siehe Posten mit AddProduct_Comfort hinzufügen.

Hinweise

  • Nettopreis nur mit Basismenge: BT-146 wird nur geschrieben, wenn NetPrice und NetPriceBasisQuantity angegeben sind. Da der Nettopreis ab BASIC Pflicht ist, übergeben Sie immer beide (Basismenge meist "1").
  • Zahlenformat: Übergeben Sie Mengen und Preise mit Dezimalpunkt. Preise werden auf vier Nachkommastellen normiert.
  • Positionsnummer: AddProduct_Basic vergibt keine Positionsnummer (BT-126). SaveXML nummeriert Positionen ohne Nummer beim Speichern fortlaufend (1, 2, 3 …).
  • Währung: Ist CurrencyID leer, gilt die Rechnungswährung; ist noch keine gesetzt, übernimmt das SDK die hier angegebene.
  • Profile: Rechnungspositionen (BG-25) gibt es ab BASIC; die Artikelbeschreibung BT-154 erst ab EN 16931 (COMFORT).

Den vollständigen Ablauf vom Anlegen bis zum PDF/A-3 zeigt der Schnellstart für VB.NET.

Business Terms in diesem Artikel: BT-1 BT-2 BT-3 BT-5 BT-22 BT-83 BG-25 BG-1 BT-126 BT-129 BT-130 BT-131 BT-146 BT-148 BT-149 BT-151 BT-152 BT-153 BT-154