Was diese Tabelle ist
Eine Buchungszeile im DATEV-Buchungsstapel hat eine feste Anzahl Spalten in fester Reihenfolge. Formatversion 13 definiert 125 Spalten, Version 12 die ersten 124 und lässt Abw. Skontokonto weg. Die Reihenfolge trägt Bedeutung: eine Zeile ist positionsbasiert, Feld 7 ist Konto — unabhängig davon, ob Feld 6 gefüllt wurde.
Die Tabelle wird aus DatevFieldSpecs erzeugt, der einzigen kanonischen Schemakopie, aus der sich jedes Modul dieser Bibliothek ableitet. Sie ist keine handgepflegte Abschrift und kann daher nicht von dem abweichen, was die Exporter tatsächlich schreiben.
Zu wissen, dass Feld 9 BU-Schlüssel heißt, sagt nichts darüber, welcher Buchungsschlüssel im konkreten Fall richtig ist. Kontenzuordnung, steuerliche Behandlung und Buchungslogik bleiben bei der aufrufenden Anwendung und der steuerlichen Beratung.
Aufbau des Schemas
| Typ | Name im Prüfprogramm | Spalten | Bedeutung |
|---|---|---|---|
TEXT | Text | 84 | Gequoteter Textwert; die maximale Länge zählt Zeichen. |
NUMBER | Zahl | 27 | Ungequoteter numerischer Wert mit optionalem Komma als Dezimaltrenner. |
DATE | Datum | 7 | Datum im DATEV-Format. |
ACCOUNT | Konto | 4 | Numerische Kontonummer, zusätzlich durch die Sachkontenlänge eingegrenzt. |
AMOUNT | Betrag | 3 | Positiver Betrag; das Vorzeichen steht im Soll/Haben-Kennzeichen. |
Die fünf Pflichtfelder
Die strikte Validierung meldet einen leeren Wert in diesen Spalten als REQUIRED_FIELD. Jede andere Spalte darf leer bleiben.
| # | Amtliche Überschrift | DatevField-Konstante | Typ |
|---|---|---|---|
| 1 | Umsatz (ohne Soll/Haben-Kz) | AMOUNT | Betrag |
| 2 | Soll/Haben-Kennzeichen | DEBIT_CREDIT_FLAG | Text |
| 7 | Konto | ACCOUNT | Konto |
| 8 | Gegenkonto (ohne BU-Schlüssel) | CONTRA_ACCOUNT | Konto |
| 10 | Belegdatum | DOCUMENT_DATE | Datum |
Wiederholende Gruppen und eine Schreibweisen-Falle
Zwei Spaltenfamilien wiederholen sich als Art-/Inhalt-Paare. Wird nur eine Hälfte gefüllt, meldet der strikte Modus DEPENDENT_FIELD_MISSING.
Beleginfo - Art 1…Beleginfo - Inhalt 8— acht Paare, Felder 21–36.Zusatzinformation - Art 1…Zusatzinformation- Inhalt 20— zwanzig Paare, Felder 48–87.
DATEV schreibt das Paar uneinheitlich: Zusatzinformation - Art 1 mit Leerzeichen um den Bindestrich, Zusatzinformation- Inhalt 1 ohne. Beide Schreibweisen werden exakt reproduziert. Mit den DatevField-Konstanten wird ein Tippfehler zum Compile-Fehler statt zu einer abgelehnten Datei.
Vollständige Feldtabelle
| # | Amtliche Überschrift | DatevField-Konstante | Typ | Max. Länge | Nachkommastellen | Pflicht | In v12 |
|---|---|---|---|---|---|---|---|
| 1 | Umsatz (ohne Soll/Haben-Kz) | AMOUNT | Betrag | 10 | 2 | ja | ja |
| 2 | Soll/Haben-Kennzeichen | DEBIT_CREDIT_FLAG | Text | 1 | — | ja | ja |
| 3 | WKZ Umsatz | CURRENCY | Text | 3 | — | nein | ja |
| 4 | Kurs | EXCHANGE_RATE | Zahl | 5 | 6 | nein | ja |
| 5 | Basis-Umsatz | BASE_AMOUNT | Betrag | 10 | 2 | nein | ja |
| 6 | WKZ Basis-Umsatz | BASE_CURRENCY | Text | 3 | — | nein | ja |
| 7 | Konto | ACCOUNT | Konto | 9 | — | ja | ja |
| 8 | Gegenkonto (ohne BU-Schlüssel) | CONTRA_ACCOUNT | Konto | 9 | — | ja | ja |
| 9 | BU-Schlüssel | POSTING_KEY | Text | 4 | — | nein | ja |
| 10 | Belegdatum | DOCUMENT_DATE | Datum | 8 | — | ja | ja |
| 11 | Belegfeld 1 | DOCUMENT_FIELD_1 | Text | 36 | — | nein | ja |
| 12 | Belegfeld 2 | DOCUMENT_FIELD_2 | Text | 12 | — | nein | ja |
| 13 | Skonto | CASH_DISCOUNT | Betrag | 8 | 2 | nein | ja |
| 14 | Buchungstext | POSTING_TEXT | Text | 60 | — | nein | ja |
| 15 | Postensperre | ITEM_BLOCK | Zahl | 1 | — | nein | ja |
| 16 | Diverse Adressnummer | MISC_ADDRESS_NUMBER | Text | 9 | — | nein | ja |
| 17 | Geschäftspartnerbank | PARTNER_BANK | Zahl | 3 | — | nein | ja |
| 18 | Sachverhalt | MATTER_CODE | Zahl | 2 | — | nein | ja |
| 19 | Zinssperre | INTEREST_BLOCK | Zahl | 1 | — | nein | ja |
| 20 | Beleglink | DOCUMENT_LINK | Text | 210 | — | nein | ja |
| 21 | Beleginfo - Art 1 | DOCUMENT_INFO_TYPE_1 | Text | 20 | — | nein | ja |
| 22 | Beleginfo - Inhalt 1 | DOCUMENT_INFO_CONTENT_1 | Text | 210 | — | nein | ja |
| 23 | Beleginfo - Art 2 | DOCUMENT_INFO_TYPE_2 | Text | 20 | — | nein | ja |
| 24 | Beleginfo - Inhalt 2 | DOCUMENT_INFO_CONTENT_2 | Text | 210 | — | nein | ja |
| 25 | Beleginfo - Art 3 | DOCUMENT_INFO_TYPE_3 | Text | 20 | — | nein | ja |
| 26 | Beleginfo - Inhalt 3 | DOCUMENT_INFO_CONTENT_3 | Text | 210 | — | nein | ja |
| 27 | Beleginfo - Art 4 | DOCUMENT_INFO_TYPE_4 | Text | 20 | — | nein | ja |
| 28 | Beleginfo - Inhalt 4 | DOCUMENT_INFO_CONTENT_4 | Text | 210 | — | nein | ja |
| 29 | Beleginfo - Art 5 | DOCUMENT_INFO_TYPE_5 | Text | 20 | — | nein | ja |
| 30 | Beleginfo - Inhalt 5 | DOCUMENT_INFO_CONTENT_5 | Text | 210 | — | nein | ja |
| 31 | Beleginfo - Art 6 | DOCUMENT_INFO_TYPE_6 | Text | 20 | — | nein | ja |
| 32 | Beleginfo - Inhalt 6 | DOCUMENT_INFO_CONTENT_6 | Text | 210 | — | nein | ja |
| 33 | Beleginfo - Art 7 | DOCUMENT_INFO_TYPE_7 | Text | 20 | — | nein | ja |
| 34 | Beleginfo - Inhalt 7 | DOCUMENT_INFO_CONTENT_7 | Text | 210 | — | nein | ja |
| 35 | Beleginfo - Art 8 | DOCUMENT_INFO_TYPE_8 | Text | 20 | — | nein | ja |
| 36 | Beleginfo - Inhalt 8 | DOCUMENT_INFO_CONTENT_8 | Text | 210 | — | nein | ja |
| 37 | KOST1 - Kostenstelle | COST_CENTER_1 | Text | 36 | — | nein | ja |
| 38 | KOST2 - Kostenstelle | COST_CENTER_2 | Text | 36 | — | nein | ja |
| 39 | Kost-Menge | COST_QUANTITY | Zahl | 12 | 4 | nein | ja |
| 40 | EU-Land u. UStID (Bestimmung) | EU_COUNTRY_VAT_ID_DESTINATION | Text | 15 | — | nein | ja |
| 41 | EU-Steuersatz (Bestimmung) | EU_TAX_RATE_DESTINATION | Zahl | 2 | 2 | nein | ja |
| 42 | Abw. Versteuerungsart | DIFFERING_TAXATION_TYPE | Text | 1 | — | nein | ja |
| 43 | Sachverhalt L+L | MATTER_CODE_LL | Zahl | 3 | — | nein | ja |
| 44 | Funktionsergänzung L+L | FUNCTION_SUPPLEMENT_LL | Zahl | 3 | — | nein | ja |
| 45 | BU 49 Hauptfunktionstyp | BU49_MAIN_FUNCTION_TYPE | Zahl | 1 | — | nein | ja |
| 46 | BU 49 Hauptfunktionsnummer | BU49_MAIN_FUNCTION_NUMBER | Zahl | 2 | — | nein | ja |
| 47 | BU 49 Funktionsergänzung | BU49_FUNCTION_SUPPLEMENT | Zahl | 3 | — | nein | ja |
| 48 | Zusatzinformation - Art 1 | ADDITIONAL_INFO_TYPE_1 | Text | 20 | — | nein | ja |
| 49 | Zusatzinformation- Inhalt 1 | ADDITIONAL_INFO_CONTENT_1 | Text | 210 | — | nein | ja |
| 50 | Zusatzinformation - Art 2 | ADDITIONAL_INFO_TYPE_2 | Text | 20 | — | nein | ja |
| 51 | Zusatzinformation- Inhalt 2 | ADDITIONAL_INFO_CONTENT_2 | Text | 210 | — | nein | ja |
| 52 | Zusatzinformation - Art 3 | ADDITIONAL_INFO_TYPE_3 | Text | 20 | — | nein | ja |
| 53 | Zusatzinformation- Inhalt 3 | ADDITIONAL_INFO_CONTENT_3 | Text | 210 | — | nein | ja |
| 54 | Zusatzinformation - Art 4 | ADDITIONAL_INFO_TYPE_4 | Text | 20 | — | nein | ja |
| 55 | Zusatzinformation- Inhalt 4 | ADDITIONAL_INFO_CONTENT_4 | Text | 210 | — | nein | ja |
| 56 | Zusatzinformation - Art 5 | ADDITIONAL_INFO_TYPE_5 | Text | 20 | — | nein | ja |
| 57 | Zusatzinformation- Inhalt 5 | ADDITIONAL_INFO_CONTENT_5 | Text | 210 | — | nein | ja |
| 58 | Zusatzinformation - Art 6 | ADDITIONAL_INFO_TYPE_6 | Text | 20 | — | nein | ja |
| 59 | Zusatzinformation- Inhalt 6 | ADDITIONAL_INFO_CONTENT_6 | Text | 210 | — | nein | ja |
| 60 | Zusatzinformation - Art 7 | ADDITIONAL_INFO_TYPE_7 | Text | 20 | — | nein | ja |
| 61 | Zusatzinformation- Inhalt 7 | ADDITIONAL_INFO_CONTENT_7 | Text | 210 | — | nein | ja |
| 62 | Zusatzinformation - Art 8 | ADDITIONAL_INFO_TYPE_8 | Text | 20 | — | nein | ja |
| 63 | Zusatzinformation- Inhalt 8 | ADDITIONAL_INFO_CONTENT_8 | Text | 210 | — | nein | ja |
| 64 | Zusatzinformation - Art 9 | ADDITIONAL_INFO_TYPE_9 | Text | 20 | — | nein | ja |
| 65 | Zusatzinformation- Inhalt 9 | ADDITIONAL_INFO_CONTENT_9 | Text | 210 | — | nein | ja |
| 66 | Zusatzinformation - Art 10 | ADDITIONAL_INFO_TYPE_10 | Text | 20 | — | nein | ja |
| 67 | Zusatzinformation- Inhalt 10 | ADDITIONAL_INFO_CONTENT_10 | Text | 210 | — | nein | ja |
| 68 | Zusatzinformation - Art 11 | ADDITIONAL_INFO_TYPE_11 | Text | 20 | — | nein | ja |
| 69 | Zusatzinformation- Inhalt 11 | ADDITIONAL_INFO_CONTENT_11 | Text | 210 | — | nein | ja |
| 70 | Zusatzinformation - Art 12 | ADDITIONAL_INFO_TYPE_12 | Text | 20 | — | nein | ja |
| 71 | Zusatzinformation- Inhalt 12 | ADDITIONAL_INFO_CONTENT_12 | Text | 210 | — | nein | ja |
| 72 | Zusatzinformation - Art 13 | ADDITIONAL_INFO_TYPE_13 | Text | 20 | — | nein | ja |
| 73 | Zusatzinformation- Inhalt 13 | ADDITIONAL_INFO_CONTENT_13 | Text | 210 | — | nein | ja |
| 74 | Zusatzinformation - Art 14 | ADDITIONAL_INFO_TYPE_14 | Text | 20 | — | nein | ja |
| 75 | Zusatzinformation- Inhalt 14 | ADDITIONAL_INFO_CONTENT_14 | Text | 210 | — | nein | ja |
| 76 | Zusatzinformation - Art 15 | ADDITIONAL_INFO_TYPE_15 | Text | 20 | — | nein | ja |
| 77 | Zusatzinformation- Inhalt 15 | ADDITIONAL_INFO_CONTENT_15 | Text | 210 | — | nein | ja |
| 78 | Zusatzinformation - Art 16 | ADDITIONAL_INFO_TYPE_16 | Text | 20 | — | nein | ja |
| 79 | Zusatzinformation- Inhalt 16 | ADDITIONAL_INFO_CONTENT_16 | Text | 210 | — | nein | ja |
| 80 | Zusatzinformation - Art 17 | ADDITIONAL_INFO_TYPE_17 | Text | 20 | — | nein | ja |
| 81 | Zusatzinformation- Inhalt 17 | ADDITIONAL_INFO_CONTENT_17 | Text | 210 | — | nein | ja |
| 82 | Zusatzinformation - Art 18 | ADDITIONAL_INFO_TYPE_18 | Text | 20 | — | nein | ja |
| 83 | Zusatzinformation- Inhalt 18 | ADDITIONAL_INFO_CONTENT_18 | Text | 210 | — | nein | ja |
| 84 | Zusatzinformation - Art 19 | ADDITIONAL_INFO_TYPE_19 | Text | 20 | — | nein | ja |
| 85 | Zusatzinformation- Inhalt 19 | ADDITIONAL_INFO_CONTENT_19 | Text | 210 | — | nein | ja |
| 86 | Zusatzinformation - Art 20 | ADDITIONAL_INFO_TYPE_20 | Text | 20 | — | nein | ja |
| 87 | Zusatzinformation- Inhalt 20 | ADDITIONAL_INFO_CONTENT_20 | Text | 210 | — | nein | ja |
| 88 | Stück | PIECES | Zahl | 8 | — | nein | ja |
| 89 | Gewicht | WEIGHT | Zahl | 8 | 2 | nein | ja |
| 90 | Zahlweise | PAYMENT_METHOD | Zahl | 2 | — | nein | ja |
| 91 | Forderungsart | RECEIVABLE_TYPE | Text | 10 | — | nein | ja |
| 92 | Veranlagungsjahr | ASSESSMENT_YEAR | Zahl | 4 | — | nein | ja |
| 93 | Zugeordnete Fälligkeit | ASSIGNED_DUE_DATE | Datum | 8 | — | nein | ja |
| 94 | Skontotyp | CASH_DISCOUNT_TYPE | Zahl | 1 | — | nein | ja |
| 95 | Auftragsnummer | ORDER_NUMBER | Text | 30 | — | nein | ja |
| 96 | Buchungstyp | POSTING_TYPE | Text | 2 | — | nein | ja |
| 97 | USt-Schlüssel (Anzahlungen) | VAT_KEY_PREPAYMENT | Zahl | 2 | — | nein | ja |
| 98 | EU-Land (Anzahlungen) | EU_COUNTRY_PREPAYMENT | Text | 2 | — | nein | ja |
| 99 | Sachverhalt L+L (Anzahlungen) | MATTER_CODE_LL_PREPAYMENT | Zahl | 3 | — | nein | ja |
| 100 | EU-Steuersatz (Anzahlungen) | EU_TAX_RATE_PREPAYMENT | Zahl | 2 | 2 | nein | ja |
| 101 | Erlöskonto (Anzahlungen) | REVENUE_ACCOUNT_PREPAYMENT | Konto | 9 | — | nein | ja |
| 102 | Herkunft-Kz | ORIGIN_CODE | Text | 2 | — | nein | ja |
| 103 | Buchungs GUID | POSTING_GUID | Text | 36 | — | nein | ja |
| 104 | KOST-Datum | COST_DATE | Datum | 8 | — | nein | ja |
| 105 | SEPA-Mandatsreferenz | SEPA_MANDATE_REFERENCE | Text | 35 | — | nein | ja |
| 106 | Skontosperre | CASH_DISCOUNT_BLOCK | Zahl | 1 | — | nein | ja |
| 107 | Gesellschaftername | SHAREHOLDER_NAME | Text | 76 | — | nein | ja |
| 108 | Beteiligtennummer | PARTICIPANT_NUMBER | Zahl | 4 | — | nein | ja |
| 109 | Identifikationsnummer | IDENTIFICATION_NUMBER | Text | 11 | — | nein | ja |
| 110 | Zeichnernummer | SUBSCRIBER_NUMBER | Text | 20 | — | nein | ja |
| 111 | Postensperre bis | ITEM_BLOCK_UNTIL | Datum | 8 | — | nein | ja |
| 112 | Bezeichnung SoBil-Sachverhalt | SOBIL_MATTER_LABEL | Text | 30 | — | nein | ja |
| 113 | Kennzeichen SoBil-Buchung | SOBIL_POSTING_FLAG | Zahl | 2 | — | nein | ja |
| 114 | Festschreibung | FINAL_POSTING_FLAG | Zahl | 1 | — | nein | ja |
| 115 | Leistungsdatum | SERVICE_DATE | Datum | 8 | — | nein | ja |
| 116 | Datum Zuord. Steuerperiode | TAX_PERIOD_DATE | Datum | 8 | — | nein | ja |
| 117 | Fälligkeit | DUE_DATE | Datum | 8 | — | nein | ja |
| 118 | Generalumkehr (GU) | GENERAL_REVERSAL | Text | 1 | — | nein | ja |
| 119 | Steuersatz | TAX_RATE | Zahl | 2 | 2 | nein | ja |
| 120 | Land | COUNTRY | Text | 2 | — | nein | ja |
| 121 | Abrechnungsreferenz | SETTLEMENT_REFERENCE | Text | 50 | — | nein | ja |
| 122 | BVV-Position | BVV_POSITION | Zahl | 1 | — | nein | ja |
| 123 | EU-Land u. UStID (Ursprung) | EU_COUNTRY_VAT_ID_ORIGIN | Text | 15 | — | nein | ja |
| 124 | EU-Steuersatz (Ursprung) | EU_TAX_RATE_ORIGIN | Zahl | 2 | 2 | nein | ja |
| 125 | Abw. Skontokonto | DIFFERING_CASH_DISCOUNT_ACCOUNT | Konto | 8 | — | nein | nein |
Ein Feld aus Java ansprechen
Jede DatevColumn-Factory akzeptiert entweder die Enum-Konstante oder die Überschrift als Zeichenkette; beide erzeugen identische Ausgabe. Die Konstante wird zur Übersetzungszeit geprüft.
import io.github.mrtyldr.datev.core.DatevColumn;
import io.github.mrtyldr.datev.core.DatevField;
import io.github.mrtyldr.datev.core.DatevSchema;
// Field 7, "Konto" — compile-checked.
DatevColumn account = DatevColumn.account(DatevField.ACCOUNT, 1000);
// Identical output, but a typo would only surface at runtime.
DatevColumn same = DatevColumn.account("Konto", 1000);
int number = DatevField.ACCOUNT.fieldNumber(); // 7
String heading = DatevField.ACCOUNT.heading(); // "Konto"
boolean inLegacy = DatevField.DIFFERING_CASH_DISCOUNT_ACCOUNT
.isPresentIn(DatevSchema.LEGACY_V12); // false
Die DatevField-Konstanten sind in Ausgabereihenfolge deklariert, daher ist ordinal() + 1 die DATEV-Feldnummer. isPresentIn(DatevSchema.LEGACY_V12) beantwortet die Version-12-Frage für jedes Feld.