_data = $data;
parent::__construct($message);
}
public function getData()
{
return $this->_data;
}
}
class Exportbuchhaltung
{
/** @var Application $app */
var $app;
var $belegnummer;
var $headerwritten = false;
/**
* Exportbelegepositionen constructor.
*
* @param Application $app
* @param bool $intern
*/
public function __construct($app, $intern = false)
{
$this->app = $app;
if ($intern == true) {
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("export", "ExportBuchhaltungList");
$this->app->ActionHandlerListen($app);
$this->app->erp->Headlines('Buchhaltung Export DATEV');
}
function ExportBuchhaltungList() {
$submit = $this->app->Secure->GetPOST('submit');
$von_form = $this->app->Secure->GetPOST("von");
$bis_form = $this->app->Secure->GetPOST("bis");
$von = date_create($this->app->erp->ReplaceDatum(true, $von_form, true));
$bis = date_create($this->app->erp->ReplaceDatum(true, $bis_form, true));
$projektkuerzel = $this->app->Secure->GetPOST("projekt");
$projekt = $this->app->erp->ReplaceProjekt(true, $projektkuerzel, true);
$rgchecked = $this->app->Secure->GetPOST("rechnung");
$gschecked = $this->app->Secure->GetPOST("gutschrift");
$vbchecked = $this->app->Secure->GetPOST("verbindlichkeit");
$lgchecked = $this->app->Secure->GetPOST("lieferantengutschrift");
$diffignore = $this->app->Secure->GetPOST("diffignore");
$sachkonto = $this->app->Secure->GetPOST('sachkonto');
$account_id = null;
if (!empty($sachkonto)) {
$sachkonto_kennung = explode(' ',$sachkonto)[0];
$account_id = $this->app->DB->SelectArr("SELECT id from kontorahmen WHERE sachkonto = '".$sachkonto_kennung."'")[0]['id'];
}
$msg = "";
// Preload values
if (empty($submit)) {
$von = date_create('now')->modify('first day of last month');
$von_form = $this->app->erp->ReplaceDatum(false,$von->format('Y-m-d'),false);
$bis = date_create('now')->modify('last day of last month');
$bis_form = $this->app->erp->ReplaceDatum(false,$bis->format('Y-m-d'),false);
$rgchecked = true;
$gschecked = true;
$vbchecked = true;
$lgchecked = true;
}
$missing_obligatory = array();
$buchhaltung_berater = $this->app->erp->Firmendaten('buchhaltung_berater');
$buchhaltung_mandant = $this->app->erp->Firmendaten('buchhaltung_mandant');
$buchhaltung_wj_beginn = $this->app->erp->Firmendaten('buchhaltung_wj_beginn');
$buchhaltung_sachkontenlaenge = $this->app->erp->Firmendaten('buchhaltung_sachkontenlaenge');
$buchhaltung_berater = $this->app->erp->Firmendaten('buchhaltung_berater');
if (empty($buchhaltung_berater)) {
$missing_obligatory[] = "Berater";
}
$buchhaltung_mandant = $this->app->erp->Firmendaten('buchhaltung_mandant');
if (empty($buchhaltung_mandant)) {
$missing_obligatory[] = "Mandant";
}
$buchhaltung_wj_beginn = $this->app->erp->Firmendaten('buchhaltung_wj_beginn');
if (empty($buchhaltung_wj_beginn)) {
$missing_obligatory[] = "Wirtschaftsjahr";
}
$buchhaltung_sachkontenlaenge = $this->app->erp->Firmendaten('buchhaltung_sachkontenlaenge');
if (empty($buchhaltung_sachkontenlaenge)) {
$missing_obligatory[] = "Sachkontenlänge";
}
if (!empty($missing_obligatory)) {
$msg = "
Angaben in den Grundeinstellungen fehlen: ".implode(", ",$missing_obligatory).".
";
}
//---------- DOWNLOAD HERE
if ($submit == 'Download') {
$dataok = true;
if (
!$rgchecked &&
!$gschecked &&
!$vbchecked &&
!$lgchecked
) {
$msg = "Bitte mindestens eine Belegart auswählen.
";
$dataok = false;
}
$von_next_year = clone $von;
$von_next_year = $von_next_year->modify("+1 year");;
$buchhaltung_wj_beginn = date_create(date_format($von,'Y').$buchhaltung_wj_beginn);
if ($buchhaltung_wj_beginn > $von) {
$buchhaltung_wj_beginn = $buchhaltung_wj_beginn->modify("-1 year");
}
$buchhaltung_wj_beginn_next_year = clone $buchhaltung_wj_beginn;
$buchhaltung_wj_beginn_next_year->modify("+1 year");
if ($bis < $von || $bis > $von_next_year || $bis >= $buchhaltung_wj_beginn_next_year) {
$msg = "Ungültiger Datumsbereich.
";
$dataok = false;
}
if ($dataok) {
$filename = "EXTF_".date('Ymd') . "_Buchungsstapel_DATEV_export.csv";
try {
$csv = $this->DATEV_Buchuchungsstapel($rgchecked, $gschecked, $vbchecked, $lgchecked, $buchhaltung_berater, $buchhaltung_mandant, $buchhaltung_wj_beginn, $buchhaltung_sachkontenlaenge, $von, $bis, $projekt, $filename, $diffignore, $sachkonto_kennung);
header("Content-Disposition: attachment; filename=" . $filename);
header("Pragma: no-cache");
header("Expires: 0");
echo($csv);
$this->app->ExitXentral();
}
catch (ConsistencyException $e) {
$msg = "Inkonsistente Daten (".$e->getMessage()."):
";
$data = $e->getData();
$count = 0;
foreach($data as $item) {
$msg .= $item['typ']." ".$item['belegnr']." (Kopf ".$this->app->erp->ReplaceMengeBetrag(false,$item['betrag_gesamt'],false)." Positionen ".$this->app->erp->ReplaceMengeBetrag(false,$item['betrag_summe'],false).")
";
$count++;
if ($count == 10) {
$msg .= "...";
break;
}
}
$msg .= "
";
}
}
}
//---------- DOWNLOAD HERE
$this->app->erp->MenuEintrag("index.php?module=exportbuchhaltung&action=export", "Übersicht");
$this->app->erp->MenuEintrag("index.php?module=importvorlage&action=uebersicht", "Zurück");
$this->app->YUI->AutoComplete("projekt", "projektname", 1);
$this->app->YUI->DatePicker("von");
$this->app->YUI->DatePicker("bis");
$this->app->YUI->AutoComplete('sachkonto', 'sachkonto');
$this->app->Tpl->SET('MESSAGE', $msg);
$this->app->Tpl->SET('RGCHECKED',$rgchecked?'checked':'');
$this->app->Tpl->SET('GSCHECKED',$gschecked?'checked':'');
$this->app->Tpl->SET('VBCHECKED',$vbchecked?'checked':'');
$this->app->Tpl->SET('LGCHECKED',$lgchecked?'checked':'');
$this->app->Tpl->SET('DIFFIGNORE',$diffignore?'checked':'');
$this->app->Tpl->SET('VON', $von_form);
$this->app->Tpl->SET('BIS', $bis_form);
$this->app->Tpl->SET('PROJEKT', $projektkuerzel);
$this->app->Tpl->SET('SACHKONTO', $sachkonto);
$this->app->Tpl->Parse('PAGE', "exportbuchhaltung_export.tpl");
}
/*
* Create DATEV Buchhungsstapel
* @throws ConsistencyException with string (list of items) if consistency check fails and no sachkonto for differences is given
*/
function DATEV_Buchuchungsstapel(bool $rechnung, bool $gutschrift, bool $verbindlichkeit, bool $lieferantengutschrift, string $berater, string $mandant, datetime $wj_beginn, int $sachkontenlaenge, datetime $von, datetime $bis, int $projekt = 0, string $filename = 'EXTF_Buchungsstapel_DATEV_export.csv', $diffignore = false, $sachkonto_differences) : string {
$datev_header_definition = array (
'1' => 'Kennzeichen',
'2' => 'Versionsnummer',
'3' => 'Formatkategorie',
'4' => 'Formatname',
'5' => 'Formatversion',
'6' => 'Erzeugt am',
'7' => 'Reserviert',
'8' => 'Reserviert',
'9' => 'Reserviert',
'10' => 'Reserviert',
'11' => 'Beraternummer',
'12' => 'Mandantennummer',
'13' => 'WJ-Beginn',
'14' => 'Sachkontenlänge',
'15' => 'Datum von',
'16' => 'Datum bis',
'17' => 'Bezeichnung',
'18' => 'Diktatkürzel',
'19' => 'Buchungstyp',
'20' => 'Rechnungs- legungszweck',
'21' => 'Festschreibung',
'22' => 'WKZ',
'23' => 'Reserviert',
'24' => 'Derivatskennzeichen',
'25' => 'Reserviert',
'26' => 'Reserviert',
'27' => 'Sachkonten- rahmen',
'28' => 'ID der Branchen- lösung',
'29' => 'Reserviert',
'30' => 'Reserviert',
'31' => 'Anwendungs- information'
);
$datev_buchungsstapel_definition = array (
'1' => 'Umsatz',
'2' => 'Soll-/Haben-Kennzeichen',
'3' => 'WKZ Umsatz',
'4' => 'Kurs',
'5' => 'Basisumsatz',
'6' => 'WKZ Basisumsatz',
'7' => 'Konto',
'8' => 'Gegenkonto (ohne BU-Schlüssel)',
'9' => 'BU-Schlüssel',
'10' => 'Belegdatum',
'11' => 'Belegfeld 1',
'12' => 'Belegfeld 2',
'13' => 'Skonto',
'14' => 'Buchungstext',
'15' => 'Postensperre',
'16' => 'Diverse Adressnummer',
'17' => 'Geschäftspartnerbank',
'18' => 'Sachverhalt',
'19' => 'Zinssperre',
'20' => 'Beleglink',
'21' => 'Beleginfo -Art 1',
'22' => 'Beleginfo -Inhalt 1',
'23' => 'Beleginfo -Art 2',
'24' => 'Beleginfo -Inhalt 2',
'25' => 'Beleginfo -Art 3',
'26' => 'Beleginfo -Inhalt 3',
'27' => 'Beleginfo -Art 4',
'28' => 'Beleginfo -Inhalt 4',
'29' => 'Beleginfo -Art 5',
'30' => 'Beleginfo -Inhalt 5',
'31' => 'Beleginfo -Art 6',
'32' => 'Beleginfo -Inhalt 6',
'33' => 'Beleginfo -Art 7',
'34' => 'Beleginfo -Inhalt 7',
'35' => 'Beleginfo -Art 8',
'36' => 'Beleginfo -Inhalt 8',
'37' => 'KOST1 -Kostenstelle',
'38' => 'KOST2 -Kostenstelle',
'39' => 'KOST-Menge',
'40' => 'EU-Mitgliedstaat u. UStID (Bestimmung)',
'41' => 'EU-Steuersatz (Bestimmung)',
'42' => 'Abw. Versteuerungsart',
'43' => 'Sachverhalt L+L',
'44' => 'Funktionsergänzung L+L',
'45' => 'BU 49 Hauptfunktiontyp',
'46' => 'BU 49 Hauptfunktionsnummer',
'47' => 'BU 49 Funktionsergänzung',
'48' => 'Zusatzinformation – Art 1',
'49' => 'Zusatzinformation – Inhalt 1',
'50' => 'Zusatzinformation – Art 2',
'51' => 'Zusatzinformation – Inhalt 2',
'52' => 'Zusatzinformation – Art 3',
'53' => 'Zusatzinformation – Inhalt 3',
'54' => 'Zusatzinformation – Art 4',
'55' => 'Zusatzinformation – Inhalt 4',
'56' => 'Zusatzinformation – Art 5',
'57' => 'Zusatzinformation – Inhalt 5',
'58' => 'Zusatzinformation – Art 6',
'59' => 'Zusatzinformation – Inhalt 6',
'60' => 'Zusatzinformation – Art 7',
'61' => 'Zusatzinformation – Inhalt 7',
'62' => 'Zusatzinformation – Art 8',
'63' => 'Zusatzinformation – Inhalt 8',
'64' => 'Zusatzinformation – Art 9',
'65' => 'Zusatzinformation – Inhalt 9',
'66' => 'Zusatzinformation – Art 10',
'67' => 'Zusatzinformation – Inhalt 10',
'68' => 'Zusatzinformation – Art 11',
'69' => 'Zusatzinformation – Inhalt 11',
'70' => 'Zusatzinformation – Art 12',
'71' => 'Zusatzinformation – Inhalt 12',
'72' => 'Zusatzinformation – Art 13',
'73' => 'Zusatzinformation – Inhalt 13',
'74' => 'Zusatzinformation – Art 14',
'75' => 'Zusatzinformation – Inhalt 14',
'76' => 'Zusatzinformation – Art 15',
'77' => 'Zusatzinformation – Inhalt 15',
'78' => 'Zusatzinformation – Art 16',
'79' => 'Zusatzinformation – Inhalt 16',
'80' => 'Zusatzinformation – Art 17',
'81' => 'Zusatzinformation – Inhalt 17',
'82' => 'Zusatzinformation – Art 18',
'83' => 'Zusatzinformation – Inhalt 18',
'84' => 'Zusatzinformation – Art 19',
'85' => 'Zusatzinformation – Inhalt 19',
'86' => 'Zusatzinformation – Art 20',
'87' => 'Zusatzinformation – Inhalt 20',
'88' => 'Stück',
'89' => 'Gewicht',
'90' => 'Zahlweise',
'91' => 'Forderungsart',
'92' => 'Veranlagungsjahr',
'93' => 'Zugeordnete Fälligkeit',
'94' => 'Skontotyp',
'95' => 'Auftragsnummer',
'96' => 'Buchungstyp',
'97' => 'USt-Schlüssel (Anzahlungen)',
'98' => 'EU-Mitgliedstaat (Anzahlungen)',
'99' => 'Sachverhalt L+L (Anzahlungen)',
'100' => 'EU-Steuersatz (Anzahlungen)',
'101' => 'Erlöskonto (Anzahlungen)',
'102' => 'Herkunft-Kz',
'103' => 'Leerfeld',
'104' => 'KOST-Datum',
'105' => 'SEPA-Mandatsreferenz',
'106' => 'Skontosperre',
'107' => 'Gesellschaftername',
'108' => 'Beteiligtennummer',
'109' => 'Identifikationsnummer',
'110' => 'Zeichnernummer',
'111' => 'Postensperre bis',
'112' => 'Bezeichnung SoBil-Sachverhalt',
'113' => 'Kennzeichen SoBil-Buchung',
'114' => 'Festschreibung',
'115' => 'Leistungsdatum',
'116' => 'Datum Zuord. Steuerperiode',
'117' => 'Fälligkeit',
'118' => 'Generalumkehr',
'119' => 'Steuersatz',
'120' => 'Land',
'121' => 'Abrechnungsreferenz',
'122' => 'BVV-Position (Betriebsvermögensvergleich)',
'123' => 'EU-Mitgliedstaat u. UStID (Ursprung)',
'124' => 'EU-Steuersatz (Ursprung)');
$usernamearr = explode(' ',strtoupper($this->app->User->GetName()." X X"));
if (count($usernamearr) < 2) {
$kuerzel = $usernamearr[0][0].$usernamearr[0][1];
}
else {
$kuerzel = $usernamearr[0][0].$usernamearr[1][0];
}
$data['Kennzeichen'] = 'EXTF';
$data['Versionsnummer'] = '700';
$data['Formatkategorie'] = '21';
$data['Formatname'] = 'Buchungsstapel';
$data['Formatversion'] = '12';
$data['Erzeugt am'] = date('YmdHis').'000';
$data['Reserviert'] = '';
$data['Reserviert'] = '';
$data['Reserviert'] = '';
$data['Reserviert'] = '';
$data['Beraternummer'] = $berater;
$data['Mandantennummer'] = $mandant;
$data['WJ-Beginn'] = date_format($wj_beginn,"Ymd");
$data['Sachkontenlänge'] = $sachkontenlaenge;
$data['Datum von'] = date_format($von,"Ymd");
$data['Datum bis'] = date_format($bis,"Ymd");
$data['Bezeichnung'] = mb_strimwidth($filename,0,30);
$data['Diktatkürzel'] = $kuerzel;
$data['Buchungstyp'] = 1;
$data['Rechnungs- legungszweck'] = 0;
$data['Festschreibung'] = 1;
$data['WKZ'] = 'EUR';
$data['Reserviert'] = '';
$data['Derivatskennzeichen'] = '';
$data['Reserviert'] = '';
$data['Reserviert'] = '';
$data['Sachkonten- rahmen'] = '';
$data['ID der Branchen- lösung'] = '';
$data['Reserviert'] = '';
$data['Reserviert'] = '';
$data['Anwendungs- information'] = '';
// Start
$csv = "";
// Output data header row
$comma = "";
foreach ($datev_header_definition as $key => $value) {
if (!isset($data[$value])) {
$data[$value] = '';
}
$csv .= $comma.'"'.$data[$value].'"';
$comma = ";";
}
$csv .= "\r\n";
// Output column captions
$comma = "";
foreach ($datev_buchungsstapel_definition as $key => $value) {
$csv .= $comma.'"'.$value.'"';
$comma = ";";
}
$csv .= "\r\n";
// Collate data and transform in RAM
$typen = array(
array(
'typ' => 'rechnung',
'subtable' => 'rechnung_position',
'kennzeichen' => 'S',
'kennzeichen_negativ' => 'H',
'field_belegnr' => 'b.belegnr',
'field_name' => 'b.name',
'field_date' => 'datum',
'field_auftrag' => 'MAKE_SET(3,b.auftrag,(SELECT auftrag.internet FROM auftrag WHERE auftrag.id = auftragid))',
'field_zahlweise' => 'CONCAT(UCASE(LEFT(b.zahlungsweise, 1)),SUBSTRING(b.zahlungsweise, 2))',
'field_kontonummer' => 'a.kundennummer_buchhaltung',
'field_kundennummer' => 'b.kundennummer',
'field_betrag_gesamt' => 'b.soll',
'field_betrag' => 'p.umsatz_brutto_gesamt',
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\',\'storniert\')',
'Buchungstyp' => 'SR',
'do' => $rechnung
),
array(
'typ' => 'gutschrift',
'subtable' => 'gutschrift_position',
'kennzeichen' => 'H',
'kennzeichen_negativ' => 'S',
'field_belegnr' => 'b.belegnr',
'field_name' => 'b.name',
'field_date' => 'datum',
'field_auftrag' => '\'\'',
'field_zahlweise' => '\'\'',
'field_kontonummer' => 'a.kundennummer_buchhaltung',
'field_kundennummer' => 'b.kundennummer',
'field_betrag_gesamt' => 'b.soll',
'field_betrag' => 'p.umsatz_brutto_gesamt',
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\')',
'Buchungstyp' => '',
'do' => $gutschrift
),
array(
'typ' => 'verbindlichkeit',
'subtable' => 'verbindlichkeit_position',
'kennzeichen' => 'H',
'kennzeichen_negativ' => 'S',
'field_belegnr' => 'b.rechnung',
'field_name' => 'a.name',
'field_date' => 'rechnungsdatum',
'field_auftrag' => 'b.auftrag',
'field_zahlweise' => '\'\'',
'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
'field_kundennummer' => 'a.lieferantennummer',
'field_betrag_gesamt' => 'b.betrag',
'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
'condition_where' => ' AND b.status IN (\'freigegeben\')',
'Buchungstyp' => '',
'do' => $verbindlichkeit
),
array(
'typ' => 'lieferantengutschrift',
'subtable' => 'lieferantengutschrift_position',
'kennzeichen' => 'S',
'kennzeichen_negativ' => 'H',
'field_belegnr' => 'b.rechnung',
'field_name' => 'a.name',
'field_date' => 'rechnungsdatum',
'field_auftrag' => '\'\'',
'field_zahlweise' => '\'\'',
'field_kontonummer' => 'a.lieferantennummer_buchhaltung',
'field_kundennummer' => 'a.lieferantennummer',
'field_betrag_gesamt' => 'b.betrag',
'field_betrag' => 'p.preis*p.menge*((100+p.steuersatz)/100)',
'field_gegenkonto' => '(SELECT sachkonto FROM kontorahmen k WHERE k.id = p.kontorahmen)',
'condition_where' => ' AND b.status IN (\'freigegeben\')',
'Buchungstyp' => '',
'do' => $lieferantengutschrift
)
);
foreach ($typen as $typ) {
if (!$typ['do']) {
continue;
}
if (!empty($typ['field_gegenkonto'])) {
$sql_gegenkonto = $typ['field_gegenkonto'];
} else
{
$sql_gegenkonto = "NULL";
}
$sql = "SELECT
".$typ['typ']." id,
".$typ['field_belegnr']." as belegnr,
".$typ['field_auftrag']." as auftrag,
".$typ['field_zahlweise']." as zahlweise,
if(".$typ['field_kontonummer']." <> '',".$typ['field_kontonummer'].",".$typ['field_kundennummer'].") as kundennummer,
".$typ['field_name']." as name,
a.ustid,
b.".$typ['field_date']." as datum,
p.id as pos_id,
".$typ['field_betrag_gesamt']." as betrag_gesamt,
b.waehrung,
ROUND(".$typ['field_betrag'].",2) as betrag,
".$sql_gegenkonto." as gegenkonto,
b.waehrung as pos_waehrung
FROM
".$typ['typ']." b
LEFT JOIN
".$typ['subtable']." p
ON
b.id = p.".$typ['typ']."
INNER JOIN
adresse a ON a.id = b.adresse
WHERE
b.".$typ['field_date']." BETWEEN '".date_format($von,"Y-m-d")."' AND '".date_format($bis,"Y-m-d")."' AND (b.projekt=$projekt OR $projekt=0)".$typ['condition_where'];
// Check consistency of positions
if (!$diffignore) {
$sql_check = "SELECT *
FROM
(
SELECT
id,
belegnr,
datum,
betrag_gesamt,
ROUND(SUM(betrag),2) AS betrag_summe,
waehrung,
kundennummer,
ustid,
auftrag
FROM
(".$sql.") posten
GROUP BY
id
) summen
WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL";
$result = $this->app->DB->SelectArr($sql_check);
if (!empty($result)) {
if (!$sachkonto_differences) {
$e = new ConsistencyException(ucfirst($typ['typ']),$result);
throw $e;
} else {
// Create differences entries
foreach ($result as $row) {
$posid = $row['pos_id'];
$tmpsteuersatz = 0;
$tmpsteuertext = '';
$erloes = '';
$result = array();
$this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
$data = array();
$difference = $row['betrag_gesamt']-$row['betrag_summe'];
$data['Umsatz'] = number_format(abs($difference), 2, ',', ''); // obligatory
$data['EU-Steuersatz (Bestimmung)'] = 0;
$data['WKZ Umsatz'] = $row['waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,36);
$data['Konto'] = $row['kundennummer'];
$data['Soll-/Haben-Kennzeichen'] = ($difference < 0)?'S':'H'; // obligatory
$data['Gegenkonto (ohne BU-Schlüssel)'] = $sachkonto_differences; // obligatory
$data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
$data['Buchungstext'] = "Differenz";
$data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid'];
$data['Auftragsnummer'] = $row['auftrag'];
$data['Zahlweise'] = $row['zahlweise'];
$csv .= $this->create_line($datev_buchungsstapel_definition,$data);
}
}
}
} // diffignore
// Query position data
$arr = $this->app->DB->Query($sql);
while ($row = $this->app->DB->Fetch_Assoc($arr)) {
//print_r($row);
$posid = $row['pos_id'];
$tmpsteuersatz = 0;
$tmpsteuertext = '';
$erloes = '';
$result = array();
$this->app->erp->GetSteuerPosition($typ['typ'], $posid, $tmpsteuersatz, $tmpsteuertext, $erloes);
$data = array();
if ($row['betrag'] >= 0) {
$data['Umsatz'] = number_format($row['betrag'], 2, ',', ''); // obligatory
$data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen']; // obligatory
} else {
$data['Umsatz'] = number_format(-$row['betrag'], 2, ',', ''); // obligatory
$data['Soll-/Haben-Kennzeichen'] = $typ['kennzeichen_negativ']; // obligatory
}
$data['EU-Steuersatz (Bestimmung)'] = number_format($tmpsteuersatz, 2, ',', '');
$data['WKZ Umsatz'] = $row['pos_waehrung'];
$data['Belegfeld 1'] = mb_strimwidth($row['belegnr'],0,36);
$data['Konto'] = $row['kundennummer']; // obligatory
if (!empty($typ['field_gegenkonto'])) {
$data['Gegenkonto (ohne BU-Schlüssel)'] = $row['gegenkonto']; // obligatory
} else {
$data['Gegenkonto (ohne BU-Schlüssel)'] = $erloes; // obligatory
}
$data['Belegdatum'] = date_format(date_create($row['datum']),"dm"); // obligatory
$data['Buchungstext'] = mb_strimwidth($row['name'],0,60);
$data['EU-Mitgliedstaat u. UStID (Bestimmung)'] = $row['ustid'];
$data['Auftragsnummer'] = ($row['auftrag']!=0)?$row['auftrag']:'';
$data['Zahlweise'] = $row['zahlweise'];
$csv .= $this->create_line($datev_buchungsstapel_definition,$data);
}
}
$csv .= '"0";"S";"EUR";"0";"";"";"1234";"1370";"";"101";"";"";"";"Testbuchung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"0";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""'; // Testbuchung
$csv = mb_convert_encoding($csv, "ISO-8859-1", "UTF-8");
return($csv);
}
function create_line($definition, $data) : string {
$csv = "";
$comma = "";
foreach ($definition as $key => $value) {
if (!isset($data[$value])) {
$data[$value] = '';
}
$csv .= $comma.'"'.$data[$value].'"';
$comma = ";";
}
$csv .= "\r\n";
return($csv);
}
}
/*
Documentation DATEV formats
HEADER
| # | Überschrift | Ausdruck | Beschreibung |
|----|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | Kennzeichen | ^["](EXTF|DTVF)["]$ | EXTF = Export aus 3rd-Party App DTVF = Export aus DATEV App |
| 2 | Versionsnummer | ^(700)$ | Versionsnummer des Headers. Anhand der Versionsnummer können ältere Versionen abwärtskompatibel verarbeitet werden. |
| 3 | Formatkategorie | ^(16|20|21|46|48|65)$ | 16 = Debitoren-/Kreditoren 20 = Kontenbeschriftungen 21 = Buchungsstapel 46 = Zahlungsbedingungen 48 = Diverse Adressen 65 = Wiederkehrende Buchungen |
| 4 | Formatname | ^["](Buchungsstapel|Wiederkehrende Buchungen|Debitoren/Kreditoren| Kontenbeschriftungen| Zahlungsbedingungen| Diverse Adressen)["]$ | Formatname |
| 5 | Formatversion | ^(2|4|5|12)$ | Debitoren-/Kreditoren = 5 Kontenbeschriftungen = 3 Buchungsstapel = 12 Zahlungsbedingungen = 2 Wiederkehrende Buchungen = 4 Diverse Adressen = 2 |
| 6 | Erzeugt am | ^([2])([0])([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])(2[0-3]|[01][0-9])([0-5][0-9])([0-5][0-9][0-9][0-9][0-9])$ | Zeitstempel: YYYYMMDDHHMMSSFFF |
| 7 | Reserviert | ^[]$ | Leerfeld |
| 8 | Reserviert | ^["]\w{0,2}["]$ | Leerfeld |
| 9 | Reserviert | ^["]\w{0,25}["]$ | Leerfeld |
| 10 | Reserviert | ^["]\w{0,25}["]$ | Leerfeld |
| 11 | Beraternummer | ^(\d{4,6}|\d{7})$ | Bereich 1001-9999999 |
| 12 | Mandantennummer | ^\d{1,5}$ | Bereich 1-99999 |
| 13 | WJ-Beginn | ^([2])([0])([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ | Wirtschaftsjahresbeginn Format: YYYYMMDD |
| 14 | Sachkontenlänge | ^[4-8]$ | Nummernlänge der Sachkonten. Wert muss beim Import mit Konfiguration des Mandats in der DATEV App übereinstimmen. |
| 15 | Datum von | ^([2])([0])([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ | Beginn der Periode des Stapels Format: YYYYMMDD Siehe Anhang 2. |
| 16 | Datum bis | ^([2])([0])([0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$ | Ende der Periode des Stapels Format: YYYYMMDD Siehe Anhang 2. |
| 17 | Bezeichnung | ^["][\w.-/ ]{0,30}["]$ | Bezeichnung des Stapels z.B. „Rechnungsausgang 09/2019“ |
| 18 | Diktatkürzel | ^["]([A-Z]{2}){0,2}["]$ | Kürzel in Großbuchstaben des Bearbeiters z.B. "MM" für Max Mustermann |
| 19 | Buchungstyp | ^[1-2]$ | 1 = Finanzbuchführung (default) 2 = Jahresabschluss |
| 20 | Rechnungs- legungszweck | ^(0|30|40|50|64)$ | 0 = unabhängig (default) 30 = Steuerrecht 40 = Kalkulatorik 50 = Handelsrecht 64 = IFRS |
| 21 | Festschreibung | ^(0|1)$ | 0 = keine Festschreibung 1 = Festschreibung (default) |
| 22 | WKZ | ^["]([A-Z]{3})["]$ | ISO-Code der Währung "EUR" = default Liste der ISO-Codes |
| 23 | Reserviert | ^[]$ | Leerfeld |
| 24 | Derivatskennzeichen | ^["]["]$ | Leerfeld |
| 25 | Reserviert | ^[]$ | Leerfeld |
| 26 | Reserviert | ^[]$ | Leerfeld |
| 27 | Sachkonten- rahmen | ^["](\d{2}){0,2}["]$ | Sachkontenrahmen der für die Bewegungsdaten verwendet wurde |
| 28 | ID der Branchen- lösung | ^\d{0,4}$ | Falls eine spezielle DATEV Branchenlösung genutzt wird. |
| 29 | Reserviert | ^[]$ | Leerfeld |
| 30 | Reserviert | ^["]["]$ | Leerfeld |
| 31 | Anwendungs- information | ^["].{0,16}["]$ | Verarbeitungskennzeichen der abgebenden Anwendung z.B. „09/2019“ |
| # | Überschrift | Ausdruck | Beschreibung |
|-----|-------------------------------------------|------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | Umsatz | ^\d{1,10}[,]\d{2}$ | Umsatz/Betrag für den Datensatz z.B.: 1234567890,12 Betrag muss positiv sein. |
| 2 | Soll-/Haben-Kennzeichen | ^["](S|H)["]$ | Soll-/Haben-Kennzeichnung bezieht sich auf das Feld #7 Konto S = SOLL (default) H = HABEN |
| 3 | WKZ Umsatz | ^["]([A-Z]{3})["]$ | ISO-Code der Währung #22 aus Header = default Liste der ISO-Codes |
| 4 | Kurs | ^([1-9]\d{0,3}[,]\d{2,6})$ | Wenn Umsatz in Fremdwährung bei #1 angegeben wird #004, 005 und 006 sind zu übergeben z.B.: 1234,123456 |
| 5 | Basisumsatz | ^(\d{1,10}[,]\d{2})$ | Siehe #004. z.B.: 1234567890,12 |
| 6 | WKZ Basisumsatz | | Siehe #004. Liste der ISO-Codes |
| 7 | Konto | ^(\d{1,9})$ | Sach- oder Personenkonto z.B. 8400 |
| 8 | Gegenkonto (ohne BU-Schlüssel) | ^(\d{1,9})$ | Sach- oder Personenkonto z.B. 70000 |
| 9 | BU-Schlüssel | ^(["]\d{4}["])$ | Steuerungskennzeichen zur Abbildung verschiedener Funktionen/Sachverhalte Weitere Details |
| 10 | Belegdatum | ^(\d{4})$ | Format: TTMM, z.B. 0105 Das Jahr wird immer aus dem Feld 13 des Headers ermittelt |
| 11 | Belegfeld 1 | ^(["][\w$%\-\/]{0,36}["])$ | Rechnungs-/Belegnummer Wird als "Schlüssel" für den Ausgleich offener Rechnungen genutzt z.B. "Rg32029/2019" Sonderzeichen: $ & % * + - / Andere Zeichen sind unzulässig (insbesondere Leerzeichen, Umlaute, Punkt, Komma, Semikolon und Doppelpunkt). |
| 12 | Belegfeld 2 | ^(["][\w$%\-\/]{0,12}["])$ | Mehrere Funktionen Details siehe hier |
| 13 | Skonto | ^([1-9]\d{0,7}[,]\d{2})$ | Skontobetrag z.B. 3,71 nur bei Zahlungsbuchungen zulässig |
| 14 | Buchungstext | ^(["].{0,60}["])$ | 0-60 Zeichen |
| 15 | Postensperre | ^(0|1)$ | Mahn- oder Zahlsperre 0 = keine Sperre (default) 1 = Sperre Die Rechnung kann aus dem Mahnwesen / Zahlungsvorschlag ausgeschlossen werden. |
| 16 | Diverse Adressnummer | ^(["]\w{0,9}["])$ | Adressnummer einer diversen Adresse. #OPOS |
| 17 | Geschäftspartnerbank | ^(\d{3})$ | Referenz um für Lastschrift oder Zahlung eine bestimmte Geschäftspartnerbank genutzt werden soll. #OPOS Beim Import der Geschäftspartnerbank muss auch das Feld SEPA-Mandatsreferenz (Feld-Nr. 105) gefüllt sein. |
| 18 | Sachverhalt | ^(\d{2})$ | Kennzeichen für einen Mahnzins/Mahngebühr-Datensatz 31 = Mahnzins 40 = Mahngebühr #OPOS |
| 19 | Zinssperre | ^(0|1)$ | Sperre für Mahnzinsen 0 = keine Sperre (default) 1 = Sperre #OPOS |
| 20 | Beleglink | Generell:^(["].{0,210}["])$ Konkret für Link in eine DATEV App:^ ["](BEDI|DDMS|DORG)[ ]["] ["][]["]["]["]$ | Link zu einem digitalen Beleg in einer DATEV App. BEDI = Unternehmen online Der Beleglink besteht aus einem Programmkürzel und der GUID. Da das Feld Beleglink ein Textfeld ist, müssen in der Schnittstellendatei die Anführungszeichen verdoppelt werden. z.B. "BEDI ""f9a0475d-d0df…""" |
| 21 | Beleginfo -Art 1 | ^(["].{0,20}["])$ | Bei einem DATEV-Format, das aus einem DATEV-Rechnungswesen-Programm erstellt wurde, können diese Felder Informationen aus einem Beleg (z. B. einem elektronischen Kontoumsatz) enthalten. Wird die Feldlänge eines Beleginfo-Inhalts-Feldes überschrit- ten, wird die Information im nächsten Beleginfo-Feld weitergeführt. Wichtiger Hinweis Eine Beleginfo besteht immer aus den Bestandteilen Beleginfo-Art und Beleginfo-Inhalt. Wenn Sie die Beleginfo nutzen möchten, füllen Sie bitte immer beide Felder. Beispiel: Beleginfo-Art: Kontoumsätze der jeweiligen Bank Beleginfo-Inhalt: Buchungsspezifische Inhalte zu den oben genannten Informationsarten |
| 22 | Beleginfo -Inhalt 1 | ^(["].{0,210}["])$ | siehe #21 |
| 23 | Beleginfo -Art 2 | ^(["].{0,20}["])$ | siehe #21 |
| 24 | Beleginfo -Inhalt 2 | ^(["].{0,210}["])$ | siehe #21 |
| 25 | Beleginfo -Art 3 | ^(["].{0,20}["])$ | siehe #21 |
| 26 | Beleginfo -Inhalt 3 | ^(["].{0,210}["])$ | siehe #21 |
| 27 | Beleginfo -Art 4 | ^(["].{0,20}["])$ | siehe #21 |
| 28 | Beleginfo -Inhalt 4 | ^(["].{0,210}["])$ | siehe #21 |
| 29 | Beleginfo -Art 5 | ^(["].{0,20}["])$ | siehe #21 |
| 30 | Beleginfo -Inhalt 5 | ^(["].{0,210}["])$ | siehe #21 |
| 31 | Beleginfo -Art 6 | ^(["].{0,20}["])$ | siehe #21 |
| 32 | Beleginfo -Inhalt 6 | ^(["].{0,210}["])$ | siehe #21 |
| 33 | Beleginfo -Art 7 | ^(["].{0,20}["])$ | siehe #21 |
| 34 | Beleginfo -Inhalt 7 | ^(["].{0,210}["])$ | siehe #21 |
| 35 | Beleginfo -Art 8 | ^(["].{0,20}["])$ | siehe #21 |
| 36 | Beleginfo -Inhalt 8 | ^(["].{0,210}["])$ | siehe #21 |
| 37 | KOST1 -Kostenstelle | ^(["][\w ]{0,36}["])$ | Über KOST1 erfolgt die Zuordnung des Geschäftsvorfalls für die anschließende Kostenrechnung. Die benutzte Länge muss vorher in den Stammdaten vom KOST-Programm eingestellt werden. |
| 38 | KOST2 -Kostenstelle | ^(["][\w ]{0,36}["])$ | Über KOST2 erfolgt die Zuordnung des Geschäftsvorfalls für die anschließende Kostenrechnung. Die benutzte Länge muss vorher in den Stammdaten vom KOST-Programm eingestellt werden. |
| 39 | KOST-Menge | ^\d{12}[,]\d{4}$ | Im KOST-Mengenfeld wird die Wertgabe zu einer bestimmten Bezugsgröße für eine Kostenstelle erfasst. Diese Bezugsgröße kann z. B. kg, g, cm, m, % sein. Die Bezugsgröße ist definiert in den Kostenrechnungs-Stammdaten. Beispiel:123123123,1234 |
| 40 | EU-Mitgliedstaat u. UStID (Bestimmung) | ^(["].{0,15}["])$ | Die USt-IdNr. besteht aus - 2-stelligen Länderkürzel (siehe Dok.-Nr. 1080169; Ausnahme Griechenland und Nordirland: Das Länderkürzel lautet EL für Griechenland und XI für Nordirland) - 13-stelliger USt-IdNr. - Beispiel: DE133546770. Die USt-IdNr kann auch Buchstaben haben, z.B.: bei Österreich Detaillierte Informationen zur Erfassung von EU-Informationen im Buchungssatz: Dok.-Nr: 9211462. |
| 41 | EU-Steuersatz (Bestimmung) | ^\d{2}[,]\d{2}$ | Nur für entsprechende EU-Buchungen: Der im EU-Bestimmungsland gültige Steuersatz. Beispiel: 12,12 |
| 42 | Abw. Versteuerungsart | ^(["](I|K|P|S)["])$ | Für Buchungen, die in einer von der Mandantenstammdaten- Schlüsselung abweichenden Umsatzsteuerart verarbeitet werden sollen, kann die abweichende Versteuerungsart im Buchungssatz übergeben werden: I = Ist-Versteuerung K = keine Umsatzsteuerrechnung P = Pauschalierung (z. B. für Land- und Forstwirtschaft) S = Soll-Versteuerung |
| 43 | Sachverhalt L+L | ^(\d{1,3})$ | Sachverhalte gem. § 13b Abs. 1 Satz 1 Nrn. 1.-5. UStG Achtung: Der Wert 0 ist unzulässig. Sachverhalts-Nummer siehe Info-Doku 1034915 |
| 44 | Funktionsergänzung L+L | ^\d{0,3}$ | Steuersatz / Funktion zum L+L-Sachverhalt Achtung: Der Wert 0 ist unzulässig. Beispiel: Wert 190 für 19% |
| 45 | BU 49 Hauptfunktiontyp | ^\d$ | Bei Verwendung des BU-Schlüssels 49 für „andere Steuer- sätze“ muss der steuerliche Sachverhalt mitgegeben werden |
| 46 | BU 49 Hauptfunktionsnummer | ^\d{0,2}$ | siehe #45 |
| 47 | BU 49 Funktionsergänzung | ^\d{0,3}$ | siehe #45 |
| 48 | Zusatzinformation – Art 1 | ^(["].{0,20}["])$ | Zusatzinformationen, die zu Buchungssätzen erfasst werden können. Diese Zusatzinformationen besitzen den Charakter eines Notizzettels und können frei erfasst werden. Wichtiger Hinweis Eine Zusatzinformation besteht immer aus den Bestandtei- len Informationsart und Informationsinhalt. Wenn Sie die Zusatzinformation nutzen möchten, füllen Sie bitte immer beide Felder. Beispiel: Informationsart, z. B. Filiale oder Mengengrößen (qm) Informationsinhalt: buchungsspezifische Inhalte zu den oben genannten Informationsarten. |
| 49 | Zusatzinformation – Inhalt 1 | ^(["].{0,210}["])$ | siehe #48 |
| 50 | Zusatzinformation – Art 2 | ^(["].{0,20}["])$ | siehe #48 |
| 51 | Zusatzinformation – Inhalt 2 | ^(["].{0,210}["])$ | siehe #48 |
| 52 | Zusatzinformation – Art 3 | ^(["].{0,20}["])$ | siehe #48 |
| 53 | Zusatzinformation – Inhalt 3 | ^(["].{0,210}["])$ | siehe #48 |
| 54 | Zusatzinformation – Art 4 | ^(["].{0,20}["])$ | siehe #48 |
| 55 | Zusatzinformation – Inhalt 4 | ^(["].{0,210}["])$ | siehe #48 |
| 56 | Zusatzinformation – Art 5 | ^(["].{0,20}["])$ | siehe #48 |
| 57 | Zusatzinformation – Inhalt 5 | ^(["].{0,210}["])$ | siehe #48 |
| 58 | Zusatzinformation – Art 6 | ^(["].{0,20}["])$ | siehe #48 |
| 59 | Zusatzinformation – Inhalt 6 | ^(["].{0,210}["])$ | siehe #48 |
| 60 | Zusatzinformation – Art 7 | ^(["].{0,20}["])$ | siehe #48 |
| 61 | Zusatzinformation – Inhalt 7 | ^(["].{0,210}["])$ | siehe #48 |
| 62 | Zusatzinformation – Art 8 | ^(["].{0,20}["])$ | siehe #48 |
| 63 | Zusatzinformation – Inhalt 8 | ^(["].{0,210}["])$ | siehe #48 |
| 64 | Zusatzinformation – Art 9 | ^(["].{0,20}["])$ | siehe #48 |
| 65 | Zusatzinformation – Inhalt 9 | ^(["].{0,210}["])$ | siehe #48 |
| 66 | Zusatzinformation – Art 10 | ^(["].{0,20}["])$ | siehe #48 |
| 67 | Zusatzinformation – Inhalt 10 | ^(["].{0,210}["])$ | siehe #48 |
| 68 | Zusatzinformation – Art 11 | ^(["].{0,20}["])$ | siehe #48 |
| 69 | Zusatzinformation – Inhalt 11 | ^(["].{0,210}["])$ | siehe #48 |
| 70 | Zusatzinformation – Art 12 | ^(["].{0,20}["])$ | siehe #48 |
| 71 | Zusatzinformation – Inhalt 12 | ^(["].{0,210}["])$ | siehe #48 |
| 72 | Zusatzinformation – Art 13 | ^(["].{0,20}["])$ | siehe #48 |
| 73 | Zusatzinformation – Inhalt 13 | ^(["].{0,210}["])$ | siehe #48 |
| 74 | Zusatzinformation – Art 14 | ^(["].{0,20}["])$ | siehe #48 |
| 75 | Zusatzinformation – Inhalt 14 | ^(["].{0,210}["])$ | siehe #48 |
| 76 | Zusatzinformation – Art 15 | ^(["].{0,20}["])$ | siehe #48 |
| 77 | Zusatzinformation – Inhalt 15 | ^(["].{0,210}["])$ | siehe #48 |
| 78 | Zusatzinformation – Art 16 | ^(["].{0,20}["])$ | siehe #48 |
| 79 | Zusatzinformation – Inhalt 16 | ^(["].{0,210}["])$ | siehe #48 |
| 80 | Zusatzinformation – Art 17 | ^(["].{0,20}["])$ | siehe #48 |
| 81 | Zusatzinformation – Inhalt 17 | ^(["].{0,210}["])$ | siehe #48 |
| 82 | Zusatzinformation – Art 18 | ^(["].{0,20}["])$ | siehe #48 |
| 83 | Zusatzinformation – Inhalt 18 | ^(["].{0,210}["])$ | siehe #48 |
| 84 | Zusatzinformation – Art 19 | ^(["].{0,20}["])$ | siehe #48 |
| 85 | Zusatzinformation – Inhalt 19 | ^(["].{0,210}["])$ | siehe #48 |
| 86 | Zusatzinformation – Art 20 | ^(["].{0,20}["])$ | siehe #48 |
| 87 | Zusatzinformation – Inhalt 20 | ^(["].{0,210}["])$ | siehe #48 |
| 88 | Stück | ^\d{0,8}$ | Wirkt sich nur bei Sachverhalt mit SKR 14 Land- und Forst- wirtschaft aus, für andere SKR werden die Felder beim Import / Export überlesen bzw. leer exportiert. |
| 89 | Gewicht | ^(\d{1,8}[,]\d{2})$ | siehe #88 |
| 90 | Zahlweise | ^\d{0,2}$ | OPOS-Informationen 1 = Lastschrift 2 = Mahnung 3 = Zahlung |
| 91 | Forderungsart | ^(["]\w{0,10}["])$ | OPOS-Informationen |
| 92 | Veranlagungsjahr | ^(([2])([0])([0-9]{2}))$ | OPOS-Informationen Format: JJJJ |
| 93 | Zugeordnete Fälligkeit | ^((0[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])([2])([0])([0-9]{2}))$ | OPOS-Informationen Format: TTMMJJJJ |
| 94 | Skontotyp | ^\d$ | 1 = Einkauf von Waren 2 = Erwerb von Roh-Hilfs- und Betriebsstoffen |
| 95 | Auftragsnummer | ^(["].{0,30}["])$ | Allgemeine Bezeichnung, des Auftrags / Projekts. Mit der Auftragsnummer muss auch der Buchungstyp (Feld 96) angegeben werden. |
| 96 | Buchungstyp | ^(["][A-Z]{2}["])$ | AA = Angeforderte Anzahlung / Abschlagsrechnung AG = Erhaltene Anzahlung (Geldeingang) AV = Erhaltene Anzahlung (Verbindlichkeit) SR = Schlussrechnung SU = Schlussrechnung (Umbuchung) SG = Schlussrechnung (Geldeingang) SO = Sonstige |
| 97 | USt-Schlüssel (Anzahlungen) | ^\d{0,2}$ | USt-Schlüssel der späteren Schlussrechnung |
| 98 | EU-Mitgliedstaat (Anzahlungen) | ^(["][A-Z]{2}["])$ | EU-Mitgliedstaat der späteren Schlussrechnung siehe Info-Doku 1080169 |
| 99 | Sachverhalt L+L (Anzahlungen) | ^\d{0,3}$ | L+L-Sachverhalt der späteren Schlussrechnung Sachverhalte gem. § 13b UStG Achtung: Der Wert 0 ist unzulässig. Sachverhalts-Nummer siehe Info-Doku 1034915 |
| 100 | EU-Steuersatz (Anzahlungen) | ^(\d{1,2}[,]\d{2})$ | EU-Steuersatz der späteren Schlussrechnung Nur für entsprechende EU-Buchungen: Der im EU-Bestimmungsland gültige Steuersatz. Beispiel: 12,12 |
| 101 | Erlöskonto (Anzahlungen) | ^(\d{4,8})$ | Erlöskonto der späteren Schlussrechnung |
| 102 | Herkunft-Kz | ^(["][A-Z]{2}["])$ | Wird beim Import durch SV (Stapelverarbeitung) ersetzt. |
| 103 | Leerfeld | ^(["].{0,36}["])$ | Wird von DATEV verwendet |
| 104 | KOST-Datum | ^((0[1-9]|[1-2]\d|3[0-1])(0[1-9]|1[0-2])([2])([0])(\d{2}))$ | Format TTMMJJJJ |
| 105 | SEPA-Mandatsreferenz | ^(["].{0,35}["])$ | Vom Zahlungsempfänger individuell vergebenes Kennzeichen eines Mandats (z.B. Rechnungs- oder Kundennummer). Beim Import der SEPA-Mandatsreferenz muss auch das Feld Geschäftspartnerbank (Feld-Nr. 17) gefüllt sein. |
| 106 | Skontosperre | ^[0|1]$ | Gültige Werte: 0, 1. 1 = Skontosperre 0 = Keine Skontosperre |
| 107 | Gesellschaftername | ^(["].{0,76}["])$ | |
| 108 | Beteiligtennummer | ^(\d{4})$ | Die Beteiligtennummer muss der amtlichen Nummer aus der Feststellungserklärung entsprechen, diese darf nicht beliebig vergeben werden. Die Pflege der Gesellschafterdaten und das Anlegen von Sonderbilanzsachverhalte ist nur in Absprache mit der Steuerkanzlei möglich. Betrifft Feld 107-110. |
| 109 | Identifikationsnummer | ^(["].{0,11}["])$ | |
| 110 | Zeichnernummer | ^(["].{0,20}["])$ | |
| 111 | Postensperre bis | ^((0[1-9]|[1-2]\d|3[0-1])(0[1-9]|1[0-2])([2])([0])(\d{2}))$ | Format TTMMJJJJ |
| 112 | Bezeichnung SoBil-Sachverhalt | ^(["].{0,30}["])$ | |
| 113 | Kennzeichen SoBil-Buchung | ^(\d{1,2})$ | Sobil-Buchung erzeugt = 1 Sobil-Buchung nicht erzeugt = (Default) bzw. 0 |
| 114 | Festschreibung | ^(0|1)$ | leer = nicht definiert; wird automatisch festgeschrieben 0 = keine Festschreibung 1 = Festschreibung Hat ein Buchungssatz in diesem Feld den Inhalt 1, so wird der gesamte Stapel nach dem Import festgeschrieben. |
| 115 | Leistungsdatum | ^((0[1-9]|[1-2]\d|3[0-1])(0[1-9]|1[0-2])([2])([0])(\d{2}))$ | Format TTMMJJJJ siehe Info-Doku 9211426 Beim Import des Leistungsdatums muss das Feld „116 Datum Zuord. Steuer-periode“ gefüllt sein. Der Einsatz des Leistungsdatums muss in Absprache mit dem Steuerberater erfolgen. |
| 116 | Datum Zuord. Steuerperiode | ^((0[1-9]|[1-2]\d|3[0-1])(0[1-9]|1[0-2])([2])([0])(\d{2}))$ | Format TTMMJJJJ |
| 117 | Fälligkeit | ^((0[1-9]|[1-2]\d|3[0-1])(0[1-9]|1[0-2])([2])([0])(\d{2}))$ | OPOS Informationen, Format: TTMMJJJJ OPOS-Verarbeitungsinformationen über Belegfeld 2 (Feldnummer 12) sind in diesem Fall nicht nutzbar |
| 118 | Generalumkehr | ^(["](0|1)["])$ | G oder 1 = Generalumkehr 0 = keine Generalumkehr |
| 119 | Steuersatz | ^(\d{1,2}[,]\d{2})$ | Wird bei Verwendung von BU-Schlüssel ohne festen Steuersatz benötigt (z. B. BU-Schlüssel 100). Weitere Informationen unter Dok.Nr. 9231347 Kapitel „Erfassung eines Steuersatzes bei Steuerschlüsseln“ |
| 120 | Land | ^(["][A-Z]{2}["])$ | Beispiel: DE für Deutschland |
| 121 | Abrechnungsreferenz | ^(["].{0,50}["])$ | Die Abrechnungsreferenz stellt eine Klammer über alle Transaktionen des Zahlungsdienstleisters und die dazu gehörige Auszahlung dar. Sie wird über den Zahlungsdatenservice bereitgestellt und bei der Erzeugung von Buchungsvorschläge berücksichtigt. |
| 122 | BVV-Position (Betriebsvermögensvergleich) | ^([1|2|3|4|5])$ | Details zum Feld siehe hier 1 Kapitalanpassung 2 Entnahme / Ausschüttung lfd. WJ 3 Einlage / Kapitalzuführung lfd. WJ 4 Übertragung § 6b Rücklage 5 Umbuchung (keine Zuordnung) |
| 123 | EU-Mitgliedstaat u. UStID (Ursprung) | ^(["].{0,15}["])$ | Die USt-IdNr. besteht aus - 2-stelligen Länderkürzel (siehe Dok.-Nr. 1080169) Ausnahme Griechenland: Das Länderkürzel lautet EL) - 13-stelliger USt-IdNr. - Beispiel: DE133546770. Die USt-IdNr kann auch Buchstaben haben, z.B.: bei Österreich Detaillierte Informationen zur Erfassung von EU-Informationen im Buchungssatz: Dok.-Nr: 9211462. |
| 124 | EU-Steuersatz (Ursprung) | ^\d{2}[,]\d{2}$ | Nur für entsprechende EU-Buchungen: Der im EU-Ursprungsland gültige Steuersatz. Beispiel: 12,12 |
*/