2023-03-08 11:31:24 +01:00
< ? php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral ( c ) Xentral ERP Sorftware GmbH , Fuggerstrasse 11 , D - 86150 Augsburg , * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License * Version 3.1 .
*
* You should have received a copy of this license from your vendor and / or * along with this file ; If not , please visit www . wawision . de / Lizenzhinweis
* to obtain the text of the corresponding license version .
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
/*
* Copyright ( c ) 2023 OpenXE project
*/
?>
< ? php
2023-03-10 10:23:32 +01:00
class ConsistencyException extends Exception {
/*
contains the result data as array ( string 'belegnr' , float 'betrag_gesamt' , float 'betrag_summe' ))
*/
private $_data = array ();
public function __construct ( $message , $data )
{
$this -> _data = $data ;
parent :: __construct ( $message );
}
public function getData ()
{
return $this -> _data ;
}
}
2023-03-08 11:31:24 +01:00
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 " );
2023-05-24 10:35:56 +02:00
$vbchecked = $this -> app -> Secure -> GetPOST ( " verbindlichkeit " );
2024-02-10 17:44:21 +01:00
$lgchecked = $this -> app -> Secure -> GetPOST ( " lieferantengutschrift " );
2023-05-24 10:35:56 +02:00
$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' ];
2023-05-16 14:01:33 +02:00
}
2023-03-08 11:31:24 +01:00
$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 ;
2024-02-10 17:44:21 +01:00
$lgchecked = true ;
2023-03-08 11:31:24 +01:00
}
$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 = " <div class=warning>Angaben in den Grundeinstellungen fehlen: " . implode ( " , " , $missing_obligatory ) . " .</div> " ;
}
//---------- DOWNLOAD HERE
if ( $submit == 'Download' ) {
$dataok = true ;
if (
! $rgchecked &&
! $gschecked &&
2024-02-10 17:44:21 +01:00
! $vbchecked &&
! $lgchecked
2023-03-08 11:31:24 +01:00
) {
$msg = " <div class=error>Bitte mindestens eine Belegart auswählen.</div> " ;
$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 = " <div class=error>Ungültiger Datumsbereich.</div> " ;
$dataok = false ;
}
if ( $dataok ) {
$filename = " EXTF_ " . date ( 'Ymd' ) . " _Buchungsstapel_DATEV_export.csv " ;
2023-03-10 10:23:32 +01:00
try {
2024-02-10 17:44:21 +01:00
$csv = $this -> DATEV_Buchuchungsstapel ( $rgchecked , $gschecked , $vbchecked , $lgchecked , $buchhaltung_berater , $buchhaltung_mandant , $buchhaltung_wj_beginn , $buchhaltung_sachkontenlaenge , $von , $bis , $projekt , $filename , $diffignore , $sachkonto_kennung );
2023-03-10 10:23:32 +01:00
header ( " Content-Disposition: attachment; filename= " . $filename );
header ( " Pragma: no-cache " );
header ( " Expires: 0 " );
echo ( $csv );
$this -> app -> ExitXentral ();
}
catch ( ConsistencyException $e ) {
$msg = " <div class=error>Inkonsistente Daten ( " . $e -> getMessage () . " ): <br> " ;
$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 ) . " )<br> " ;
$count ++ ;
if ( $count == 10 ) {
$msg .= " ... " ;
break ;
}
}
$msg .= " </div> " ;
}
2023-03-08 11:31:24 +01:00
}
}
//---------- 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 " );
2023-05-24 10:35:56 +02:00
$this -> app -> YUI -> DatePicker ( " bis " );
2023-05-16 14:01:33 +02:00
$this -> app -> YUI -> AutoComplete ( 'sachkonto' , 'sachkonto' );
2023-03-08 11:31:24 +01:00
$this -> app -> Tpl -> SET ( 'MESSAGE' , $msg );
$this -> app -> Tpl -> SET ( 'RGCHECKED' , $rgchecked ? 'checked' : '' );
$this -> app -> Tpl -> SET ( 'GSCHECKED' , $gschecked ? 'checked' : '' );
2023-05-24 10:35:56 +02:00
$this -> app -> Tpl -> SET ( 'VBCHECKED' , $vbchecked ? 'checked' : '' );
2024-02-10 17:44:21 +01:00
$this -> app -> Tpl -> SET ( 'LGCHECKED' , $lgchecked ? 'checked' : '' );
2023-05-16 14:01:33 +02:00
$this -> app -> Tpl -> SET ( 'DIFFIGNORE' , $diffignore ? 'checked' : '' );
2023-03-08 11:31:24 +01:00
$this -> app -> Tpl -> SET ( 'VON' , $von_form );
$this -> app -> Tpl -> SET ( 'BIS' , $bis_form );
2023-05-24 10:35:56 +02:00
$this -> app -> Tpl -> SET ( 'PROJEKT' , $projektkuerzel );
2023-05-16 14:01:33 +02:00
$this -> app -> Tpl -> SET ( 'SACHKONTO' , $sachkonto );
2023-03-08 11:31:24 +01:00
$this -> app -> Tpl -> Parse ( 'PAGE' , " exportbuchhaltung_export.tpl " );
}
/*
* Create DATEV Buchhungsstapel
2023-05-16 14:01:33 +02:00
* @ throws ConsistencyException with string ( list of items ) if consistency check fails and no sachkonto for differences is given
2023-03-08 11:31:24 +01:00
*/
2024-02-10 17:44:21 +01:00
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 {
2023-03-08 11:31:24 +01:00
$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' ,
2024-01-25 19:09:53 +01:00
'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))' ,
2023-03-08 11:31:24 +01:00
'field_kontonummer' => 'a.kundennummer_buchhaltung' ,
'field_kundennummer' => 'b.kundennummer' ,
2023-03-10 10:23:32 +01:00
'field_betrag_gesamt' => 'b.soll' ,
2023-03-08 11:31:24 +01:00
'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' => '\'\'' ,
2024-01-25 19:09:53 +01:00
'field_zahlweise' => '\'\'' ,
2023-03-08 11:31:24 +01:00
'field_kontonummer' => 'a.kundennummer_buchhaltung' ,
'field_kundennummer' => 'b.kundennummer' ,
2023-03-10 10:23:32 +01:00
'field_betrag_gesamt' => 'b.soll' ,
2023-03-08 11:31:24 +01:00
'field_betrag' => 'p.umsatz_brutto_gesamt' ,
'condition_where' => ' AND b.status IN (\'freigegeben\',\'versendet\')' ,
'Buchungstyp' => '' ,
'do' => $gutschrift
),
array (
'typ' => 'verbindlichkeit' ,
2024-02-10 17:44:21 +01:00
'subtable' => 'verbindlichkeit_position' ,
2023-03-08 11:31:24 +01:00
'kennzeichen' => 'H' ,
'kennzeichen_negativ' => 'S' ,
'field_belegnr' => 'b.rechnung' ,
'field_name' => 'a.name' ,
2023-03-10 11:37:42 +01:00
'field_date' => 'rechnungsdatum' ,
2023-03-08 11:31:24 +01:00
'field_auftrag' => 'b.auftrag' ,
2024-01-25 19:09:53 +01:00
'field_zahlweise' => '\'\'' ,
2023-03-08 11:31:24 +01:00
'field_kontonummer' => 'a.lieferantennummer_buchhaltung' ,
'field_kundennummer' => 'a.lieferantennummer' ,
2023-03-10 10:23:32 +01:00
'field_betrag_gesamt' => 'b.betrag' ,
2024-02-10 17:44:21 +01:00
'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\')' ,
2023-03-08 11:31:24 +01:00
'Buchungstyp' => '' ,
'do' => $verbindlichkeit
2024-02-10 17:44:21 +01:00
),
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
2023-03-08 11:31:24 +01:00
)
);
2024-01-25 19:09:53 +01:00
2023-03-08 11:31:24 +01:00
foreach ( $typen as $typ ) {
if ( ! $typ [ 'do' ]) {
continue ;
}
2024-02-14 10:33:51 +01:00
if ( ! empty ( $typ [ 'field_gegenkonto' ])) {
$sql_gegenkonto = $typ [ 'field_gegenkonto' ];
} else
{
$sql_gegenkonto = " NULL " ;
}
2023-03-08 11:31:24 +01:00
$sql = " SELECT
2024-02-10 17:44:21 +01:00
" . $typ['typ'] . " id ,
2023-03-08 11:31:24 +01:00
" . $typ['field_belegnr'] . " as belegnr ,
" . $typ['field_auftrag'] . " as auftrag ,
2024-01-25 19:09:53 +01:00
" . $typ['field_zahlweise'] . " as zahlweise ,
2023-03-08 11:31:24 +01:00
if ( " . $typ['field_kontonummer'] . " <> '' , " . $typ['field_kontonummer'] . " , " . $typ['field_kundennummer'] . " ) as kundennummer ,
" . $typ['field_name'] . " as name ,
2024-02-10 17:44:21 +01:00
a . ustid ,
2023-03-08 11:31:24 +01:00
b . " . $typ['field_date'] . " as datum ,
p . id as pos_id ,
2023-05-24 10:35:56 +02:00
" . $typ['field_betrag_gesamt'] . " as betrag_gesamt ,
2023-05-16 14:01:33 +02:00
b . waehrung ,
ROUND ( " . $typ['field_betrag'] . " , 2 ) as betrag ,
2024-02-14 10:33:51 +01:00
" . $sql_gegenkonto . " as gegenkonto ,
2024-02-10 17:44:21 +01:00
b . waehrung as pos_waehrung
2023-03-08 11:31:24 +01:00
FROM
2023-03-10 11:37:42 +01:00
" . $typ['typ'] . " b
LEFT JOIN
2023-03-08 11:31:24 +01:00
" . $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'] ;
2023-05-16 14:01:33 +02:00
// Check consistency of positions
if ( ! $diffignore ) {
$sql_check = " SELECT *
2023-03-10 10:23:32 +01:00
FROM
2023-05-16 14:01:33 +02:00
(
SELECT
2024-02-10 17:44:21 +01:00
id ,
2023-05-16 14:01:33 +02:00
belegnr ,
2023-05-24 10:35:56 +02:00
datum ,
2023-05-16 14:01:33 +02:00
betrag_gesamt ,
2023-05-24 10:35:56 +02:00
ROUND ( SUM ( betrag ), 2 ) AS betrag_summe ,
waehrung ,
kundennummer ,
ustid ,
2023-05-16 14:01:33 +02:00
auftrag
FROM
( " . $sql . " ) posten
GROUP BY
2024-02-10 17:44:21 +01:00
id
2023-05-16 14:01:33 +02:00
) summen
WHERE betrag_gesamt <> betrag_summe OR betrag_summe IS NULL " ;
2024-02-10 17:44:21 +01:00
2023-05-16 14:01:33 +02:00
$result = $this -> app -> DB -> SelectArr ( $sql_check );
2023-05-24 10:35:56 +02:00
if ( ! empty ( $result )) {
2023-05-16 14:01:33 +02:00
if ( ! $sachkonto_differences ) {
$e = new ConsistencyException ( ucfirst ( $typ [ 'typ' ]), $result );
2023-05-24 10:35:56 +02:00
throw $e ;
} else {
// Create differences entries
foreach ( $result as $row ) {
2023-05-16 14:01:33 +02:00
$posid = $row [ 'pos_id' ];
$tmpsteuersatz = 0 ;
$tmpsteuertext = '' ;
$erloes = '' ;
$result = array ();
2023-05-24 10:35:56 +02:00
$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
2023-05-16 14:01:33 +02:00
$data [ 'EU-Steuersatz (Bestimmung)' ] = 0 ;
$data [ 'WKZ Umsatz' ] = $row [ 'waehrung' ];
2024-05-07 11:02:44 +02:00
$data [ 'Belegfeld 1' ] = mb_strimwidth ( $row [ 'belegnr' ], 0 , 36 );
2023-05-16 14:01:33 +02:00
$data [ 'Konto' ] = $row [ 'kundennummer' ];
2023-05-24 10:35:56 +02:00
$data [ 'Soll-/Haben-Kennzeichen' ] = ( $difference < 0 ) ? 'S' : 'H' ; // obligatory
2023-05-16 14:01:33 +02:00
$data [ 'Gegenkonto (ohne BU-Schlüssel)' ] = $sachkonto_differences ; // obligatory
2023-05-24 10:35:56 +02:00
$data [ 'Belegdatum' ] = date_format ( date_create ( $row [ 'datum' ]), " dm " ); // obligatory
2023-05-16 14:01:33 +02:00
$data [ 'Buchungstext' ] = " Differenz " ;
$data [ 'EU-Mitgliedstaat u. UStID (Bestimmung)' ] = $row [ 'ustid' ];
2024-01-25 19:09:53 +01:00
$data [ 'Auftragsnummer' ] = $row [ 'auftrag' ];
$data [ 'Zahlweise' ] = $row [ 'zahlweise' ];
2023-05-24 10:35:56 +02:00
$csv .= $this -> create_line ( $datev_buchungsstapel_definition , $data );
}
2023-05-16 14:01:33 +02:00
}
2023-05-24 10:35:56 +02:00
}
2023-05-16 14:01:33 +02:00
} // diffignore
2024-02-10 17:44:21 +01:00
2023-03-10 10:23:32 +01:00
// Query position data
2023-03-08 11:31:24 +01:00
$arr = $this -> app -> DB -> Query ( $sql );
while ( $row = $this -> app -> DB -> Fetch_Assoc ( $arr )) {
2023-05-16 14:01:33 +02:00
//print_r($row);
2023-03-08 11:31:24 +01:00
$posid = $row [ 'pos_id' ];
$tmpsteuersatz = 0 ;
$tmpsteuertext = '' ;
$erloes = '' ;
$result = array ();
$this -> app -> erp -> GetSteuerPosition ( $typ [ 'typ' ], $posid , $tmpsteuersatz , $tmpsteuertext , $erloes );
$data = array ();
2024-05-12 10:21:43 +02:00
if ( $row [ 'betrag' ] > 0 ) {
2023-03-08 11:31:24 +01:00
$data [ 'Umsatz' ] = number_format ( $row [ 'betrag' ], 2 , ',' , '' ); // obligatory
$data [ 'Soll-/Haben-Kennzeichen' ] = $typ [ 'kennzeichen' ]; // obligatory
2024-05-12 10:21:43 +02:00
} else if ( $row [ 'betrag' ] < 0 ) {
2023-03-08 11:31:24 +01:00
$data [ 'Umsatz' ] = number_format ( - $row [ 'betrag' ], 2 , ',' , '' ); // obligatory
$data [ 'Soll-/Haben-Kennzeichen' ] = $typ [ 'kennzeichen_negativ' ]; // obligatory
2024-05-12 10:21:43 +02:00
} else {
continue ;
2023-03-08 11:31:24 +01:00
}
2023-11-11 16:37:25 +01:00
$data [ 'EU-Steuersatz (Bestimmung)' ] = number_format ( $tmpsteuersatz , 2 , ',' , '' );
2023-03-08 11:31:24 +01:00
$data [ 'WKZ Umsatz' ] = $row [ 'pos_waehrung' ];
2024-05-07 11:02:44 +02:00
$data [ 'Belegfeld 1' ] = mb_strimwidth ( $row [ 'belegnr' ], 0 , 36 );
2023-03-08 11:31:24 +01:00
$data [ 'Konto' ] = $row [ 'kundennummer' ]; // obligatory
2024-02-10 17:44:21 +01:00
if ( ! empty ( $typ [ 'field_gegenkonto' ])) {
2023-03-08 11:31:24 +01:00
$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' ];
2023-05-24 10:35:56 +02:00
2023-05-16 14:01:33 +02:00
$data [ 'Auftragsnummer' ] = ( $row [ 'auftrag' ] != 0 ) ? $row [ 'auftrag' ] : '' ;
2024-01-25 19:09:53 +01:00
$data [ 'Zahlweise' ] = $row [ 'zahlweise' ];
2023-05-16 14:01:33 +02:00
$csv .= $this -> create_line ( $datev_buchungsstapel_definition , $data );
2023-03-08 11:31:24 +01:00
}
}
$csv .= '"0";"S";"EUR";"0";"";"";"1234";"1370";"";"101";"";"";"";"Testbuchung";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"0";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";"";""' ; // Testbuchung
$csv = mb_convert_encoding ( $csv , " ISO-8859-1 " , " UTF-8 " );
return ( $csv );
2023-05-24 10:35:56 +02:00
}
function create_line ( $definition , $data ) : string {
$csv = " " ;
$comma = " " ;
2023-05-16 14:01:33 +02:00
foreach ( $definition as $key => $value ) {
if ( ! isset ( $data [ $value ])) {
$data [ $value ] = '' ;
}
$csv .= $comma . '"' . $data [ $value ] . '"' ;
$comma = " ; " ;
}
2023-05-24 10:35:56 +02:00
$csv .= " \r \n " ;
return ( $csv );
}
2023-05-16 14:01:33 +02:00
2023-03-08 11:31:24 +01:00
}
/*
Documentation DATEV formats
HEADER
| # | Überschrift | Ausdruck | Beschreibung |
|----|-------------------------|-------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | Kennzeichen | ^ [ " ](EXTF|DTVF)[ " ] $ | EXTF = Export aus 3 rd - 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)[ ][ " ] [ " ][<GUID>][ " ][ " ][ " ] $ | 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 . § 13 b 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 . § 13 b 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 § 6 b 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 |
*/