- 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
| Feld | Bedeutung | Parameter von CreateInvoiceObject |
|---|---|---|
| BT-1 | Rechnungsnummer – wird auch als Verwendungszweck (BT-83) übernommen | InvoiceID |
| BT-22 | Freitext zur Rechnung (BG-1), optional | InvoiceNote |
| BT-2 | Rechnungsdatum, z. B. 20261007; leer = heutiges Datum | InvoiceDate, InvoiceDateFormat (102 = JJJJMMTT) |
| – | Dokumentname (Freitext), sollte normalerweise leer bleiben | InvoiceName_FreeText |
| – | Sprache des Dokuments, z. B. DE | InvoiceLanguageID_2Letter_ISO |
| BT-5 | Rechnungswährung, z. B. EUR | CurrencyID |
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
| Code | Bedeutung | DocumentType |
|---|---|---|
380 | Rechnung | Invoice |
381 | Gutschrift (Rechnungsminderung) | CreditNote |
384 | Rechnungskorrektur | CorrectedInvoice |
389 | Selbst ausgestellte Rechnung (Gutschriftsverfahren) | SelfBilledInvoice |
326 | Teilrechnung | PartialInvoice |
875 | Abschlagsrechnung (Bauleistung) | PartialConstructionInvoice |
876 | Teilschlussrechnung (Bauleistung) | PartialFinalConstructionInvoice |
877 | Schlussrechnung (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).
| Feld | Bedeutung | Parameter |
|---|---|---|
| BT-129 | In Rechnung gestellte Menge | BilledQuantity |
| BT-130 | Mengeneinheit, z. B. C62 (Stück); gilt auch für die Basismenge | QuantityUnit |
| BT-153 | Artikelname | ProductName |
| BT-154 | Artikelbeschreibung | ProductDescription |
| BT-148 | Bruttopreis | GrossPrice |
| BT-146 | Nettopreis | NetPrice |
| BT-149 | Basismenge zum Preis | NetPriceBasisQuantity |
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
NetPriceundNetPriceBasisQuantityangegeben 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_Basicvergibt keine Positionsnummer (BT-126).SaveXMLnummeriert Positionen ohne Nummer beim Speichern fortlaufend (1, 2, 3 …). - Währung: Ist
CurrencyIDleer, 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