Imports System.IO Imports System.Net Imports DocumentFormat.OpenXml.Wordprocessing Public Class cDatev_Interface Shared datevVersion As Integer = 700 Shared Datenkategorie As Integer = 16 Shared StapelbuchungsNr As Integer = 21 Shared BeraterNr As Integer = 261677 '3050 Steuerberaterwechsel Shared MandantenNr As Integer = 12138 '12533 Steuerberaterwechsel Shared KontenlängePersonKto As Integer = 5 Shared KontenlängeSachKto As Integer = 4 Shared Formatversion As Integer = 4 Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL 'STAMMDATEN Shared Function getStammdaten(filialNr As Integer) As DataTable Dim sqlStr = "Select right([KundenNrZentrale],5) As [Kontonummer], isnull([Ordnungsbegriff],'') as Ordnungsbegriff, isnull([Name 1],'') as Name, isnull([Name 2],'') as Name2, LTRIM([Ort]) as Ort,KundenNr As [Kundennummer],isnull(UstIdKz,'') As [EU-Land] ,isnull(UstIdNr,'') As [EU-UstID], isnull(Anrede,'') as Anrede,isnull(KTO,'') as Bankkonto, isnull(BLZ,'') as [BLZ], '' as [Bankname], '' as [Länderkennzeichen Bank], '' as [IBAN], '' as [BIC], '' as [Anrede], '' as [Adresszusatz], ISNULL([Strasse],'') as Strasse, ISNULL(PLZ,'') as PLZ, isnull(UstIdNr,'') as [Steuernummer], isnull(Ansprechpartner,'') as [Ansprechpartner], isnull(Telefon,'') as [Telefonnummer], isnull([E-Mail],'') as [E-Mail], isnull([Telefax],'') as [Faxnummer], '' as [Internetadresse], isnull(Adressen.landkz,'') as [Länderkennzeichen]" sqlStr &= " FROM Adressen INNER JOIN Kunden ON Kundennr=AdressenNr " sqlStr &= " LEFT JOIN tblKundenErweitert ON KundenNr=kde_KundenNr " sqlStr &= " LEFT JOIN [Länderverzeichnis für die Außenhandelsstatistik] as St ON St.LandKz=Adressen.LandKz " sqlStr &= " LEFT JOIN Währungstabelle ON St.LandNr = Währungstabelle.Währungsschlüssel " sqlStr &= "WHERE Auswahl='A' AND FilialenNr='" & filialNr & "' And FiBuSchnittstelle = 1" sqlStr &= " Order by [Kontonummer] " Return SQL.loadDgvBySql(sqlStr, "FMZOLL") End Function Shared Function updateFibu(filialNr As Integer) As DataTable Dim sqlStr = " UPDATE Kunden " sqlStr &= " SET FiBuSchnittstelle = '0' " sqlStr &= " FROM Adressen INNER JOIN Kunden ON Kundennr=AdressenNr " sqlStr &= " LEFT JOIN tblKundenErweitert ON KundenNr=kde_KundenNr " sqlStr &= " WHERE FiBuSchnittstelle=1 AND Auswahl='A' AND FilialenNr='" & filialNr & "' " Return SQL.loadDgvBySql(sqlStr, "FMZOLL") End Function Public Shared Function genStammdatenBeginn() As String Return "Konto;Name (Adressattyp Unternehmen);Unternehmensgegenstand;Name (Adressattyp natürl. Person);Vorname (Adressattyp natürl. Person);Name (Adressattyp keine Angabe);Adressattyp;Kurzbezeichnung;EU-Land;EU-UStID;Anrede;Titel/Akad. Grad;Adelstitel;Namensvorsatz;Adressart;Straße;Postfach;Postleitzahl;Ort;Land;Versandzusatz;Adresszusatz;Abweichende Anrede;Abw. Zustellbezeichnung 1;Abw. Zustellbezeichnung 2;Kennz. Korrespondenzadresse;Adresse Gültig von;Adresse Gültig bis;Telefon;Bemerkung (Telefon);Telefon GL;Bemerkung (Telefon GL);E-Mail;Bemerkung (E-Mail);Internet;Bemerkung (Internet);Fax;Bemerkung (Fax);Sonstige;Bemerkung (Sonstige);Bankleitzahl 1;Bankbezeichnung 1;Bank-Kontonummer 1;Länderkennzeichen 1;IBAN-Nr. 1;Leerfeld;SWIFT-Code 1;Abw. Kontoinhaber 1;Kennz. Hauptbankverb. 1;Bankverb 1 Gültig von;Bankverb 1 Gültig bis;Bankleitzahl 2;Bankbezeichnung 2;Bank-Kontonummer 2;Länderkennzeichen 2;IBAN-Nr. 2;Leerfeld;SWIFT-Code 2;Abw. Kontoinhaber 2;Kennz. Hauptbankverb. 2;Bankverb 2 Gültig von;Bankverb 2 Gültig bis;Bankleitzahl 3;Bankbezeichnung 3;Bank-Kontonummer 3;Länderkennzeichen 3;IBAN-Nr. 3;Leerfeld;SWIFT-Code 3;Abw. Kontoinhaber 3;Kennz. Hauptbankverb. 3;Bankverb 3 Gültig von;Bankverb 3 Gültig bis;Bankleitzahl 4;Bankbezeichnung 4;Bank-Kontonummer 4;Länderkennzeichen 4;IBAN-Nr. 4;Leerfeld;SWIFT-Code 4;Abw. Kontoinhaber 4;Kennz. Hauptbankverb. 4;Bankverb 4 Gültig von;Bankverb 4 Gültig bis;Bankleitzahl 5;Bankbezeichnung 5;Bank-Kontonummer 5;Länderkennzeichen 5;IBAN-Nr. 5;Leerfeld;SWIFT-Code 5;Abw. Kontoinhaber 5;Kennz. Hauptbankverb. 5;Bankverb 5 Gültig von;Bankverb 5 Gültig bis;Leerfeld;Briefanrede;Grußformel;Kunden-/Lief.-Nr.;Steuernummer;Sprache;Ansprechpartner;Vertreter;Sachbearbeiter;Diverse-Konto;Ausgabeziel;Währungssteuerung;Kreditlimit (Debitor);Zahlungsbedingung;Fälligkeit in Tagen (Debitor);Skonto in Prozent (Debitor);Kreditoren-Ziel 1 Tg.;Kreditoren-Skonto 1 %;Kreditoren-Ziel 2 Tg.;Kreditoren-Skonto 2 %;Kreditoren-Ziel 3 Brutto Tg.;Kreditoren-Ziel 4 Tg.;Kreditoren-Skonto 4 %;Kreditoren-Ziel 5 Tg.;Kreditoren-Skonto 5 %;Mahnung;Kontoauszug;Mahntext 1;Mahntext 2;Mahntext 3;Kontoauszugstext;Mahnlimit Betrag;Mahnlimit %;Zinsberechnung;Mahnzinssatz 1;Mahnzinssatz 2;Mahnzinssatz 3;Lastschrift;Leerfeld;Mandantenbank;Zahlungsträger;Indiv. Feld 1;Indiv. Feld 2;Indiv. Feld 3;Indiv. Feld 4;Indiv. Feld 5;Indiv. Feld 6;Indiv. Feld 7;Indiv. Feld 8;Indiv. Feld 9;Indiv. Feld 10;Indiv. Feld 11;Indiv. Feld 12;Indiv. Feld 13;Indiv. Feld 14;Indiv. Feld 15;Abweichende Anrede (Rechnungsadresse);Adressart (Rechnungsadresse);Straße (Rechnungsadresse);Postfach (Rechnungsadresse);Postleitzahl (Rechnungsadresse);Ort (Rechnungsadresse);Land (Rechnungsadresse);Versandzusatz (Rechnungsadresse);Adresszusatz (Rechnungsadresse);Abw. Zustellbezeichnung 1 (Rechnungsadresse);Abw. Zustellbezeichnung 2 (Rechnungsadresse);Adresse Gültig von (Rechnungsadresse);Adresse Gültig bis (Rechnungsadresse);Bankleitzahl 6;Bankbezeichnung 6;Bank-Kontonummer 6;Länderkennzeichen 6;IBAN-Nr. 6;Leerfeld;SWIFT-Code 6;Abw. Kontoinhaber 6;Kennz. Hauptbankverb. 6;Bankverb 6 Gültig von;Bankverb 6 Gültig bis;Bankleitzahl 7;Bankbezeichnung 7;Bank-Kontonummer 7;Länderkennzeichen 7;IBAN-Nr. 7;Leerfeld;SWIFT-Code 7;Abw. Kontoinhaber 7;Kennz. Hauptbankverb. 7;Bankverb 7 Gültig von;Bankverb 7 Gültig bis;Bankleitzahl 8;Bankbezeichnung 8;Bank-Kontonummer 8;Länderkennzeichen 8;IBAN-Nr. 8;Leerfeld;SWIFT-Code 8;Abw. Kontoinhaber 8;Kennz. Hauptbankverb. 8;Bankverb 8 Gültig von;Bankverb 8 Gültig bis;Bankleitzahl 9;Bankbezeichnung 9;Bank-Kontonummer 9;Länderkennzeichen 9;IBAN-Nr. 9;Leerfeld;SWIFT-Code 9;Abw. Kontoinhaber 9;Kennz. Hauptbankverb. 9;Bankverb 9 Gültig von;Bankverb 9 Gültig bis;Bankleitzahl 10;Bankbezeichnung 10;Bank-Kontonummer 10;Länderkennzeichen 10;IBAN-Nr. 10;Leerfeld;SWIFT-Code 10;Abw. Kontoinhaber 10;Kennz. Hauptbankverb. 10;Bankverb 10 Gültig von;Bankverb 10 Gültig bis;Nummer Fremdsystem;Insolvent;SEPA-Mandatsreferenz 1;SEPA-Mandatsreferenz 2;SEPA-Mandatsreferenz 3;SEPA-Mandatsreferenz 4;SEPA-Mandatsreferenz 5;SEPA-Mandatsreferenz 6;SEPA-Mandatsreferenz 7;SEPA-Mandatsreferenz 8;SEPA-Mandatsreferenz 9;SEPA-Mandatsreferenz 10;Verknüpftes OPOS-Konto;Mahnsperre bis;Lastschriftsperre bis;Zahlungssperre bis;Gebührenberechnung;Mahngebühr 1;Mahngebühr 2;Mahngebühr 3;Pauschalenberechnung;Verzugspauschale 1;Verzugspauschale 2;Verzugspauschale 3;Alternativer Suchname;Status;Anschrift manuell geändert (Korrespondenzadresse);Anschrift individuell (Korrespondenzadresse);Anschrift manuell geändert (Rechnungsadresse);Anschrift individuell (Rechnungsadresse);Fristberechnung bei Debitor;Mahnfrist 1;Mahnfrist 2;Mahnfrist 3;Letzte Frist" End Function Public Shared Function getPersonenKto(row As DataRow) As String Dim personenRow As String = "" personenRow &= row("Kontonummer") & ";" 'Mapping für KOntonummern einbauen weil bei AMBAR Kundennummer <> DebitorenNr Datev personenRow &= FormatStringDVO(row("Name"), 50) & ";" personenRow &= FormatStringDVO(row("Name2"), 50) & ";" personenRow &= emptyFormatedValue(4) 'personenRow &= FormatStringDVO(2) & ";" 'Typ Unternehmen personenRow &= FormatStringDVO(row("Ordnungsbegriff"), 15) & ";" personenRow &= FormatStringDVO(row("EU-Land")) & ";" personenRow &= FormatStringDVO(row("EU-UstID")) & ";" personenRow &= FormatStringDVO(row("Anrede")) & ";" personenRow &= emptyFormatedValue(4) personenRow &= FormatStringDVO(row("Strasse"), 36) & ";" personenRow &= emptyFormatedValue() personenRow &= FormatStringDVO(row("PLZ")) & ";" personenRow &= FormatStringDVO(row("Ort"), 30) & ";" personenRow &= IIf(row("Länderkennzeichen") <> "", Chr(34) & cProgramFunctions.getISO2Land(row("Länderkennzeichen")) & Chr(34) & ";", emptyFormatedValue()) personenRow &= emptyFormatedValue() personenRow &= FormatStringDVO(row("Adresszusatz")) & ";" personenRow &= emptyFormatedValue(6) personenRow &= FormatStringDVO(row("Telefonnummer")) & ";" personenRow &= emptyFormatedValue(3) personenRow &= FormatStringDVO(row("E-Mail")) & ";" personenRow &= emptyFormatedValue() personenRow &= FormatStringDVO(row("Internetadresse")) & ";" personenRow &= emptyFormatedValue() personenRow &= FormatStringDVO(row("Faxnummer")) & ";" personenRow &= emptyFormatedValue(3) personenRow &= FormatStringDVO(row("BLZ")) & ";" personenRow &= emptyFormatedValue() personenRow &= FormatStringDVO(row("Bankkonto")) & ";" personenRow &= emptyFormatedValue() personenRow &= FormatStringDVO(row("IBAN")) & ";" personenRow &= emptyFormatedValue(197) Return personenRow End Function Public Shared Function genDatensatzCSV_Stammdaten(ByRef Firma_ID As Integer, Optional OpenFile As Boolean = False, Optional Geschaeftsjahr As Integer = -1, Optional filepath As String = "", Optional automatischerExport As Boolean = True) As Boolean ' Optional OpenFile = False, Optional boolKunden = True, Optional boolBuchungen = True ) As Boolean Try Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(Firma_ID) Dim filialNr As Integer Select Case FIRMA.Firma_ID Case 24 : filialNr = 5701 Case Else : filialNr = -1 End Select Dim bool_DatenVorhanden As Boolean = False If Geschaeftsjahr <= 0 Then Geschaeftsjahr = Now.Year 'If(Now.Month = 1, Now.Year - 1, Now.Year) --> Bei IMEX ist das GJ=Wirtschaftsjahr 'DATEIPFAD für Stammdaten '------------------------------------------------------------------------------------------- Dim pathArchivKD = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATEV\ARCHIV\STAMMDATEN\" & FIRMA.Firma_Bez & "\" Dim pathKD = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATEV\STAMMDATEN\ " & FIRMA.Firma_Bez & "\" & Geschaeftsjahr & "\" 'pathKD = pathArchivKD 'TEST If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then pathArchivKD = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATENARCHIV_TESTSYSTEM\DATEV\ARCHIV\STAMMDATEN\" & FIRMA.Firma_Bez & "\" pathKD = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATENARCHIV_TESTSYSTEM\DATEV\STAMMDATEN\ " & FIRMA.Firma_Bez & "\" & Geschaeftsjahr & "\" 'pathArchivKD = "" End If If Not IO.Directory.Exists(pathKD) Then IO.Directory.CreateDirectory(pathKD) If Not IO.Directory.Exists(pathArchivKD) Then IO.Directory.CreateDirectory(pathArchivKD) '------------------------------------------------------------------------------------------- '----------------- STAMMDATEN ----------------- Dim dt_Stamm As DataTable = getStammdaten(filialNr) If True Then 'dt_Stamm IsNot Nothing AndAlso dt_Stamm.Rows.Count > 0 Then Dim fileKD As System.IO.StreamWriter Dim DateinameKD = "EXTF_DTVF_KD_" & Now.ToString("ddMMyyyy_HHmm") & ".csv" fileKD = My.Computer.FileSystem.OpenTextFileWriter(pathKD & DateinameKD, True, System.Text.Encoding.GetEncoding("iso-8859-15")) Dim month As String = IIf(automatischerExport, Now.AddDays(-1).Month.ToString("d2"), Now.Month.ToString("d2")) fileKD.WriteLine(genStammdatenHeader(Geschaeftsjahr, month)) fileKD.WriteLine(genStammdatenBeginn()) initKDNr(dt_Stamm, FIRMA.Firma_ID) For Each r In dt_Stamm.Rows fileKD.WriteLine(getPersonenKto(r)) Next bool_DatenVorhanden = True fileKD.Close() 'In Archiv sichern If pathArchivKD <> "" Then If Not IO.Directory.Exists(pathArchivKD) Then IO.Directory.CreateDirectory(pathArchivKD) If pathKD <> pathArchivKD Then IO.File.Copy(pathKD & DateinameKD, pathArchivKD & DateinameKD) End If If bool_DatenVorhanden Then If OpenFile Then Process.Start(pathKD & DateinameKD) Else IO.File.Delete(pathKD & DateinameKD) End If updateFibu(filialNr) ' UPDATE FiBuSchnittstelle --> 0 filepath = pathKD & DateinameKD Return True End If Catch ex As Exception MsgBox(ex.Message & ex.StackTrace) End Try Return False End Function Public Shared Function genDatensatzCSV_ALL(firma As String, Optional OpenFile As Boolean = False, Optional boolKunden As Boolean = True, Optional boolBuchungen As Boolean = True, Optional Geschaeftsjahr As Integer = -1, Optional PathList As List(Of String) = Nothing, Optional automatischerExport As Boolean = True, Optional kindOfExport As String = "mail") As Boolean If PathList IsNot Nothing Then PathList.Clear() End If Dim Path = "" Dim ExportfileCreated = False If firma <> "AMBAR" Then MsgBox("Export für Firma" & firma & " nicht aktiviert") Return ExportfileCreated End If Select Case kindOfExport Case "mail" If boolKunden Then If genDatensatzCSV_Stammdaten(24, OpenFile, Geschaeftsjahr, Path, automatischerExport) Then ExportfileCreated = True If Path <> "" Then PathList.Add(Path) End If End If If boolBuchungen Then If genDatensatzCSV_Buchungen(24, OpenFile, Geschaeftsjahr, Path, automatischerExport) Then ExportfileCreated = True If Path <> "" Then PathList.Add(Path) End If End If Return ExportfileCreated Case "ftp" Try Dim API As New DataTable Dim Program = "DATEV-PDF" API = SQL.loadDgvBySql("SELECT top(1) * FROM tblAPIEinstellungen WHERE api_program='" & Program & "' and api_productive ='" & IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "0", "1") & "'", "ADMIN") If API.Rows.Count = 0 Then MsgBox("keine gültigen FTP-Einstellungen für " & Program & " gefunden!" & vbNewLine & "Vorgang wird abgebrochen!") Return ExportfileCreated Else Dim client As WebClient = New WebClient client.Credentials = New NetworkCredential(API.Rows(0).Item("api_user").ToString, API.Rows(0).Item("api_password").ToString) If boolKunden Then If genDatensatzCSV_Stammdaten(24, OpenFile, Geschaeftsjahr, Path, automatischerExport) Then ExportfileCreated = True If Path <> "" Then Dim fi As FileInfo = New FileInfo(Path) client.UploadFile(API.Rows(0).Item("api_url") & "/DATEV/ " & fi.Name, Path) End If End If End If If boolBuchungen Then If genDatensatzCSV_Buchungen(24, OpenFile, Geschaeftsjahr, Path, automatischerExport) Then ExportfileCreated = True If Path <> "" Then Dim fi As FileInfo = New FileInfo(Path) client.UploadFile(API.Rows(0).Item("api_url") & "/DATEV/ " & fi.Name, Path) End If End If End If Return ExportfileCreated End If Catch ex As Exception MsgBox("FTP Fehler!" & ex.Message & ex.StackTrace) Return False End Try End Select End Function Public Shared Function genDatensatzCSV_Buchungen(ByRef Firma_ID As Integer, Optional OpenFile As Boolean = False, Optional Geschaeftsjahr As Integer = -1, Optional ByRef filepath As String = "", Optional automatischerExport As Boolean = True) As Boolean ' Optional OpenFile = False, Optional boolKunden = True, Optional boolBuchungen = True ) As Boolean Try Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(Firma_ID) Dim bool_DatenVorhanden As Boolean = False If Geschaeftsjahr <= 0 Then Geschaeftsjahr = Now.Year 'If(Now.Month = 1, Now.Year - 1, Now.Year) --> Bei IMEX ist das GJ=Wirtschaftsjahr 'nur UNISPED!! 'DATEIPFAD für Buchungsdaten '------------------------------------------------------------------------------------------- Dim pathArchiv = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATEV\ARCHIV\AR-DATEN\" & FIRMA.Firma_Bez & "\" Dim path = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATEV\AR-DATEN\" & FIRMA.Firma_Bez & "\" & Geschaeftsjahr & "\" ' path = pathArchiv 'TEST If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then pathArchiv = " \\datenarchiv.verag.ost.dmn\DATENARCHIV\DATENARCHIV_TESTSYSTEM\DATEV\ARCHIV\AR-DATEN\" & FIRMA.Firma_Bez & "\" path = "\\datenarchiv.verag.ost.dmn\DATENARCHIV\DATENARCHIV_TESTSYSTEM\DATEV\AR-DATEN\" & FIRMA.Firma_Bez & "\" & Geschaeftsjahr & "\" End If If Not IO.Directory.Exists(path) Then IO.Directory.CreateDirectory(path) If Not IO.Directory.Exists(pathArchiv) Then IO.Directory.CreateDirectory(pathArchiv) '------------------------------------------------------------------------------------------- Dim NameZusatz = "" Dim Buchungsjahr = -1 Select Case FIRMA.Firma_ID Case 21 : NameZusatz = "UNISPED_AT_" : Buchungsjahr = Geschaeftsjahr Case 22 : NameZusatz = "UNISPED_DE_" : Buchungsjahr = Geschaeftsjahr Case 23 : NameZusatz = "UNISPED_ZS_" : Buchungsjahr = Geschaeftsjahr Case 24 : NameZusatz = "AMBAR_DE_" : Buchungsjahr = Geschaeftsjahr End Select '----------------- Buchungssätze ----------------- TrdInvoice_FUNCTIONS.TrdinSchreiben(FIRMA.Firma_ID) 'Lädt die Daten aus der Tabelle Rechnungsausgang in die Tabelle trdInvoice (nur für 20 = IMEX ) Dim dt_Buchungen As DataTable = getBuchungen(FIRMA.Firma_ID) If dt_Buchungen IsNot Nothing AndAlso dt_Buchungen.Rows.Count > 0 Then Try Dim file As System.IO.StreamWriter Dim Dateiname = "DTVF_STB_" & NameZusatz & Now.ToString("ddMMyyyy_HHmm") & ".csv" file = My.Computer.FileSystem.OpenTextFileWriter(path & Dateiname, True, System.Text.Encoding.GetEncoding("iso-8859-15")) ' initKDNr(dt_Buchungen) Dim SummeBuchungen As Double = 0 Dim month = IIf(automatischerExport, Now.AddDays(-1).Month, Now.Month) file.WriteLine(genStapelbuchungsHeader(Geschaeftsjahr, month)) file.WriteLine(genBuchungenBeginn()) For Each r In dt_Buchungen.Rows file.WriteLine(genBuchungsZeile(r, SummeBuchungen, Geschaeftsjahr, FIRMA)) Next ' file.WriteLine(genBuchungenEnd(SummeBuchungen)) bool_DatenVorhanden = True 'Update Filename TrdIn SQL.doSQL("update [tblTrdinInvoice] Set TrdinDateiname='" & Now.ToString("ddMMyyyyHHmm") & "' WHERE [Firma_ID] = " & FIRMA.Firma_ID & " AND TrdinDateiname is null ", "FMZOLL") file.Close() 'In Archiv sichern If pathArchiv <> "" Then If Not IO.Directory.Exists(pathArchiv) Then IO.Directory.CreateDirectory(pathArchiv) If path <> pathArchiv Then IO.File.Copy(path & Dateiname, pathArchiv & Dateiname) End If If bool_DatenVorhanden Then If OpenFile Then Process.Start(path & Dateiname) Else IO.File.Delete(path & Dateiname) End If filepath = path & Dateiname Catch ex As Exception MsgBox(ex.Message & ex.StackTrace) End Try Return True End If Catch ex As Exception MsgBox(ex.Message & ex.StackTrace) End Try Return False End Function Shared Function FormatStringDVO(s As Object, Optional length As Integer = -1, Optional defaultValue As String = "") As String If s Is Nothing Then Return defaultValue If s Is DBNull.Value Then Return defaultValue FormatStringDVO = s.ToString.Replace(";", ",") FormatStringDVO = s.ToString.Replace(Chr(34), " ") 'FormatStringDVO = s.ToString.Replace(",", "") 'FormatStringDVO = s.ToString.Replace("""", "\22") If length > 0 Then If FormatStringDVO.Length > length Then FormatStringDVO = FormatStringDVO.Substring(0, length) End If FormatStringDVO = Chr(34) & FormatStringDVO & Chr(34) End Function Shared Function getBuchungen(Firma_ID As Integer) As DataTable Dim sqlStr = " SELECT IVO.Rechnungsdatum,IVO.Rechnungsnummer,min(Speditionsbuch) as Speditionsbuch ,min(FilialenNr) as FilialenNr,min(AbfertigungsNr) as AbfertigungsNr,min(UnterNr) as UnterNr,min(Abfertigungsdatum) as Abfertigungsdatum,min(BelegartenNr) as BelegartenNr ,min(KundenNrZentrale) as [KundenNrZentrale],min(RechnungsKundenNr) as RechnungsKundenNr,min(RechnungsLandKz) as RechnungsLandKz,min(RechnungsUstIdKz) as RechnungsUstIdKz,min(RechnungsUstIdNr) as RechnungsUstIdNr ,min(Lastschrift+0) as Lastschrift,min(Steuerschlüssel) as Steuerschlüssel,min([Steuersatz %]) as Steuersatz,min(WährungLokal) as WährungLokal,min(SteuerbetragLokal) as SteuerbetragLokal,min(RechnungsbetragLokal) as RechnungsbetragLokal ,min(WährungFremd) as WährungFremd,min(SteuerbetragFremd) as SteuerbetragFremd,min(RechnungsbetragFremd) as RechnungsbetragFremd,min(TrdinDateiname) as TrdinDateiname,min(Abgleich_op_debitor+0) as Abgleich_op_debitor ,min(Nettozahlungsziel) as Nettozahlungsziel,min(Firma_ID) as Firma_ID,min(UStVAn_ID) as UStVAn_ID ,Leistungsnummer,Leistungsbezeichnung,Steuerpflichtig,sum(PROD.SteuerpflichtigerBetragLokal) as SteuerpflichtigerBetragLokal ,sum(PROD.SteuerfreierBetragLokal) as SteuerfreierBetragLokal,sum(PROD.SteuerpflichtigerBetragFremd) as SteuerpflichtigerBetragFremd,sum(PROD.SteuerfreierBetragFremd) as SteuerfreierBetragFremd,min(Belegdaten) as Belegdaten ,min(Sachkonto) as Sachkonto,min(Buchungstext) as Buchungstext FROM VERAG.dbo.tblTrdinInvoice as IVO left JOIN tblTrdinProduct as PROD on IVO.Rechnungsnummer=PROD.Rechnungsnummer And IVO.Rechnungsdatum = PROD.Rechnungsdatum WHERE Firma_ID ='" & Firma_ID & "' AND TrdinDateiname Is Null group by IVO.Rechnungsnummer,IVO.rechnungsdatum,Leistungsnummer,Leistungsbezeichnung,Steuerpflichtig ORDER BY Rechnungsdatum, Rechnungsnummer " ' and IVO.Rechnungsnummer='21400139' Return SQL.loadDgvBySql(sqlStr, "FMZOLL", 9800) 'WHERE Firma_ID ='" & Firma_ID & "' AND TrdinDateiname Is Null End Function Public Shared Function genBuchungenBeginn() As String Return "Umsatz (ohne Soll/Haben-Kz);Soll/Haben-Kennzeichen;WKZ Umsatz;Kurs;Basis-Umsatz;WKZ Basis-Umsatz;Konto;Gegenkonto (ohne BU-Schlüssel);BU-Schlüssel;Belegdatum;Belegfeld 1;Belegfeld 2;Skonto;Buchungstext;Postensperre;Diverse Adressnummer;Geschäftspartnerbank;Sachverhalt;Zinssperre;Beleglink;Beleginfo - Art 1;Beleginfo - Inhalt 1;Beleginfo - Art 2;Beleginfo - Inhalt 2;Beleginfo - Art 3;Beleginfo - Inhalt 3;Beleginfo - Art 4;Beleginfo - Inhalt 4;Beleginfo - Art 5;Beleginfo - Inhalt 5;Beleginfo - Art 6;Beleginfo - Inhalt 6;Beleginfo - Art 7;Beleginfo - Inhalt 7;Beleginfo - Art 8;Beleginfo - Inhalt 8;KOST1 - Kostenstelle;KOST2 - Kostenstelle;Kost-Menge;EU-Land u. UStID;EU-Steuersatz;Abw. Versteuerungsart;Sachverhalt L+L;Funktionsergänzung L+L;BU 49 Hauptfunktionstyp;BU 49 Hauptfunktionsnummer;BU 49 Funktionsergänzung;Zusatzinformation - Art 1;Zusatzinformation- Inhalt 1;Zusatzinformation - Art 2;Zusatzinformation- Inhalt 2;Zusatzinformation - Art 3;Zusatzinformation- Inhalt 3;Zusatzinformation - Art 4;Zusatzinformation- Inhalt 4;Zusatzinformation - Art 5;Zusatzinformation- Inhalt 5;Zusatzinformation - Art 6;Zusatzinformation- Inhalt 6;Zusatzinformation - Art 7;Zusatzinformation- Inhalt 7;Zusatzinformation - Art 8;Zusatzinformation- Inhalt 8;Zusatzinformation - Art 9;Zusatzinformation- Inhalt 9;Zusatzinformation - Art 10;Zusatzinformation- Inhalt 10;Zusatzinformation - Art 11;Zusatzinformation- Inhalt 11;Zusatzinformation - Art 12;Zusatzinformation- Inhalt 12;Zusatzinformation - Art 13;Zusatzinformation- Inhalt 13;Zusatzinformation - Art 14;Zusatzinformation- Inhalt 14;Zusatzinformation - Art 15;Zusatzinformation- Inhalt 15;Zusatzinformation - Art 16;Zusatzinformation- Inhalt 16;Zusatzinformation - Art 17;Zusatzinformation- Inhalt 17;Zusatzinformation - Art 18;Zusatzinformation- Inhalt 18;Zusatzinformation - Art 19;Zusatzinformation- Inhalt 19;Zusatzinformation - Art 20;Zusatzinformation- Inhalt 20;Stück;Gewicht;Zahlweise;Forderungsart;Veranlagungsjahr;Zugeordnete Fälligkeit;Skontotyp;Auftragsnummer;Buchungstyp (Anzahlungen);USt-Schlüssel (Anzahlungen);EU-Land (Anzahlungen);Sachverhalt L+L (Anzahlungen);EU-Steuersatz (Anzahlungen);Erlöskonto (Anzahlungen);Herkunft-Kz;Buchungs GUID;KOST-Datum;SEPA-Mandatsreferenz;Skontosperre;Gesellschaftername;Beteiligtennummer;Identifikationsnummer;Zeichnernummer;Postensperre bis;Bezeichnung SoBil-Sachverhalt;Kennzeichen SoBil-Buchung;Festschreibung;Leistungsdatum;Datum Zuord. Steuerperiode;Fälligkeit;Generalumkehr (GU);Steuersatz;Land;Abrechnungsreferenz;BVV-Position" End Function Public Shared Function genBuchungenEnd() As String Return "" End Function Public Shared Function genStammdatenHeader(Geschäftsjahr As Integer, aktuellesMonat As String) As String Dim day = New cFeiertage(Geschäftsjahr) Dim headerString = Chr(34) & "EXTF" & Chr(34) & ";" 'Export aus 3rd Party App headerString &= datevVersion.ToString & ";" headerString &= Datenkategorie.ToString & ";" headerString &= Chr(34) & "Debitoren/Kreditoren" & Chr(34) & ";" 'Debitoren\Kreditoren headerString &= Formatversion.ToString & ";" headerString &= emptyFormatedValueWithoutCommas(5) headerString &= BeraterNr.ToString & ";" 'Beraternummer headerString &= MandantenNr.ToString & ";" 'Mandantennummer headerString &= Geschäftsjahr.ToString & "0101" & ";" 'WJ-Beginn headerString &= KontenlängePersonKto.ToString & ";" headerString &= Geschäftsjahr.ToString & aktuellesMonat & "01" & ";" 'DatumVon headerString &= Geschäftsjahr.ToString & aktuellesMonat & day.GetLastyDayYInxMonth(Now.DayOfWeek, CInt(aktuellesMonat), Geschäftsjahr, True).Day & ";" 'DatumBis headerString &= "IMPORT AUS AVISO;" 'Bezeichnung headerString &= Chr(34) & Chr(34) & ";" headerString &= emptyFormatedValueWithoutCommas(12) Return headerString End Function Public Shared Function genStapelbuchungsHeader(Geschäftsjahr As Integer, aktuellesMonat As String) As String Dim headerString = Chr(34) & "EXTF" & Chr(34) & ";" 'Export aus 3rd Party App Dim day = New cFeiertage(Geschäftsjahr) headerString &= datevVersion.ToString & ";" 'Versionnummer Datev headerString &= StapelbuchungsNr.ToString & ";" 'Stapelbuchungen headerString &= Chr(34) & "Buchungsstapel" & Chr(34) & ";" 'Buchungsstapel headerString &= "11;" 'Buchungsstapel -> 12 nicht möglich, steht aber in Schnittsetllenbeschreibung, 11 laut Testdaten??? headerString &= emptyFormatedValueWithoutCommas(5) headerString &= BeraterNr.ToString & ";" headerString &= MandantenNr.ToString & ";" headerString &= Geschäftsjahr.ToString & "0101" & ";" 'WJ-Beginn headerString &= KontenlängeSachKto.ToString & ";" headerString &= Geschäftsjahr.ToString & aktuellesMonat & "01" & ";" 'DatumVon headerString &= Geschäftsjahr.ToString & aktuellesMonat & day.GetLastyDayYInxMonth(Now.DayOfWeek, CInt(aktuellesMonat), Geschäftsjahr, True).Day & ";" 'DatumBis headerString &= "IMPORT AUS AVISO;" 'Bezeichnung headerString &= Chr(34) & Chr(34) & ";" headerString &= emptyFormatedValueWithoutCommas(12) Return headerString End Function Public Shared Function genStammdatenEnd() As String Return "" End Function Public Shared Function genBuchungsZeile(row As DataRow, ByRef SummeBuchungen As Double, ByRef Geschäftsjahr As Integer, ByRef FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen) As String genBuchungsZeile = "" Dim steuerbetragLokal As Double = 0 Dim steuerbetragFremd As Double = 0 Dim GJ_short = Geschäftsjahr.ToString.Substring(2, 2) Dim RgNrOld = FormatStringDVO(row("Rechnungsnummer")).Substring(2) Dim fremdW = FormatStringDVO(row("WährungFremd")) Dim RgBetrWährungLokal As Double = 0 Dim RgBetrWährungFremd As Double = 0 Dim BelegBez As String Dim BelegKz As String Dim SollHabenKz As Char Select Case row("BelegartenNr") Case 70 BelegBez = "Rechnung" BelegKz = "AR" SollHabenKz = Chr(72) Case 71 BelegBez = "Gutschrift" BelegKz = "AG" SollHabenKz = Chr(83) Case Else BelegBez = "" BelegKz = "" End Select 'Umsatz If CBool(row("Steuerpflichtig")) Then steuerbetragLokal += CDbl((getDbl2(row("SteuerpflichtigerBetragLokal")) * getDbl2(row("Steuersatz")))) steuerbetragFremd += CDbl((getDbl2(row("SteuerpflichtigerBetragFremd")) * getDbl2(row("Steuersatz")))) End If ' If steuerbetragLokal < 0 Then steuerbetragLokal = steuerbetragLokal * -1 --> SONST PROBLKEM BEI UNISPED; DA STEUER vom NETTO abgezogen wird! 'genBuchungsZeile &= getDbltr(getDbl(row("SteuerpflichtigerBetragLokal")) + getDbl(row("SteuerfreierBetragLokal")) + getDbl(row("SteuerpflichtigerBetragFremd")) + getDbl(row("SteuerfreierBetragFremd")) + If(steuerbetragLokal <> 0, getDbltr(steuerbetragLokal), "0")) + +If(steuerbetragFremd <> 0, getDbltr(steuerbetragFremd), "0")) & ";" 'betrag + steuer (brutto) If fremdW <> "" Then RgBetrWährungFremd = getDbltr(getDbl(row("SteuerpflichtigerBetragFremd")) + getDbl(row("SteuerfreierBetragFremd")) + If(steuerbetragFremd <> 0, getDbltr(steuerbetragFremd), "0")) genBuchungsZeile &= IIf(RgBetrWährungFremd < 0, RgBetrWährungFremd * -1, RgBetrWährungFremd) & ";" Else RgBetrWährungLokal = getDbltr(getDbl(row("SteuerpflichtigerBetragLokal")) + getDbl(row("SteuerfreierBetragLokal")) + If(steuerbetragLokal <> 0, getDbltr(steuerbetragLokal), "0")) genBuchungsZeile &= IIf(RgBetrWährungLokal < 0, RgBetrWährungLokal * -1, RgBetrWährungLokal) & ";" End If 'Soll oder Haben genBuchungsZeile &= FormatStringDVO(SollHabenKz) & ";" 'Fremdwährungen If fremdW <> "" Then genBuchungsZeile &= fremdW & ";" genBuchungsZeile &= RgBetrWährungLokal / RgBetrWährungFremd + RgBetrWährungLokal Mod RgBetrWährungFremd genBuchungsZeile &= emptyFormatedValue() genBuchungsZeile &= FormatStringDVO(row("WährungLokal")) & ";" Else genBuchungsZeile &= emptyFormatedValue() genBuchungsZeile &= emptyFormatedValueWithoutCommas(2) genBuchungsZeile &= emptyFormatedValue() End If 'Erlöskonto genBuchungsZeile &= fill0Stellen(row("Sachkonto"), 4) & ";" 'Debitorenkonto genBuchungsZeile &= (initKDNr2(row("KundenNrZentrale"), FIRMA.Firma_ID)) & ";" 'BU-Schlüssel -> nicht benötigt genBuchungsZeile &= emptyFormatedValue() 'genBuchungsZeile &= getSteuercode(row, FIRMA) & ";" 'If CBool(row("Steuerpflichtig")) Then ' genBuchungsZeile &= (getDbl2(row("Steuersatz")) * 100) & ";" 'buchcode === 1 oder 2?? 'Else ' genBuchungsZeile &= "0;" 'buchcode === 1 oder 2?? 'End If 'Belegdatum genBuchungsZeile &= "" & CDate(row("Rechnungsdatum")).ToString("ddMM") & ";" 'Belegfeld1 -> Rechnungsnummer genBuchungsZeile &= FormatStringDVO(row("Rechnungsnummer")) & ";" 'Belegfeld 2 -> nicht benötigt (abweichendes Fälligkeitsdatum!) genBuchungsZeile &= emptyFormatedValue() ' Skontoangabe -> nicht in Verwendung genBuchungsZeile &= emptyFormatedValue() 'Buchungstext 'genBuchungsZeile &= FormatStringDVO(row("Buchungstext"),, Chr(34) & Chr(34)) & ";" genBuchungsZeile &= FormatStringDVO(SQL.DLookup("[Ordnungsbegriff]", "Adressen", " AdressenNr= " & row("KundenNrZentrale"), "FMZOLL", "")) & ";" 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(25) 'UID-Nr 'genBuchungsZeile &= IIf(FormatStringDVO(row("RechnungsUstIdKz")) <> "", FormatStringDVO(row("RechnungsUstIdKz").Substring(0, 3)), "") 'genBuchungsZeile &= IIf(FormatStringDVO(row("RechnungsUstIdNr")) <> "", FormatStringDVO(row("RechnungsUstIdNr").Substring(1)), "") & ";" genBuchungsZeile &= emptyFormatedValue(1) 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(7) 'Zusatzinformation Art1 genBuchungsZeile &= FormatStringDVO(BelegBez) & ";" 'Zusatzinformation Inhalt1 genBuchungsZeile &= FormatStringDVO("Datum " & CDate(row("Rechnungsdatum")).ToString("ddMMyyyy") & " Art " & BelegKz & row("Rechnungsnummer")) & ";" 'Zusatzinformation Art2 genBuchungsZeile &= FormatStringDVO(BelegBez & "positionen") & ";" 'Zusatzinformation Inhalt2 genBuchungsZeile &= FormatStringDVO(row("Leistungsbezeichnung"), 20) & ";" 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(45) 'USt-Schlüssel (Anzahlungen) genBuchungsZeile &= FormatStringDVO("0") & ";" 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(8) 'keine Skontosperre - 0 genBuchungsZeile &= FormatStringDVO("0") & ";" 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(7) 'keine Festschreibung - 0 genBuchungsZeile &= FormatStringDVO("0") & ";" 'Leistungsdatum genBuchungsZeile &= CDate(row("Abfertigungsdatum")).ToString("ddMMyyyy") & ";" 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(2) 'keine Generallumkehr - 0 genBuchungsZeile &= FormatStringDVO("0") & ";" 'Leerzeilen genBuchungsZeile &= emptyFormatedValue(3) 'genBuchungsZeile &= FormatStringDVO(SQL.DLookup("[Ordnungsbegriff]", "Adressen", " AdressenNr= " & row("KundenNrZentrale"), "FMZOLL", "")) & ";" 'Dim KdAtrNr = SQL.DLookup("KdAuftragsNr", "Rechnungsausgang", "rechnungsnr='" & RgNrOld & "' And Buchungsjahr='" & Geschäftsjahr & "' and Firma_ID='" & FIRMA.Firma_ID & "'", "FMZOLL", "") 'KdAtrNr = KdAtrNr.ToString.Replace(vbNewLine, "").Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "").Replace(System.Environment.NewLine, " ") ' genBuchungsZeile &= KdAtrNr & ";".Replace(Environment.NewLine, "") 'extbelegnr ' genBuchungsZeile &= If(row("BelegartenNr") = "70", "AR", "AG") & ";" ' Rg/GS 70=Rechnung 'AG ???????? ' genBuchungsZeile &= If(row("BelegartenNr") = "70", "1", "2") & ";" ' Rg/GS 70=Rechnung 'AG ???????? 'genBuchungsZeile &= getSteuercode(row, FIRMA) & ";" ' If CBool(row("Steuerpflichtig")) Then ' genBuchungsZeile &= (getDbl2(row("Steuersatz")) * 100) & ";" 'buchcode === 1 oder 2?? ' Else ' genBuchungsZeile &= "0;" 'buchcode === 1 oder 2?? ' End If 'genBuchungsZeile &= "" & If(steuerbetragLokal <> 0, getDbltr(steuerbetragLokal), "0") & ";" 'steuer 'genBuchungsZeile &= FormatStringDVO(row("Nettozahlungsziel")) & ";" ' Text ''... aus ... 'SummeBuchungen += getDbl(getDbl(row("SteuerpflichtigerBetragLokal")) + getDbl(row("SteuerfreierBetragLokal"))) End Function Shared Sub initKDNr(ByRef dt As DataTable, ByVal firmaID As Integer) Select Case firmaID Case 24 For Each r In dt.Rows If IsNumeric(r("Kontonummer")) AndAlso CInt(r("Kontonummer")) > 3000000 AndAlso r("Kontonummer").ToString.Length = 7 Then r("Kontonummer") = (CInt(r("Kontonummer")) - 3000000) Next Case Else For Each r In dt.Rows If IsNumeric(r("Kontonummer")) AndAlso CInt(r("Kontonummer")) > 2000000 Then r("Kontonummer") = (CInt(r("Kontonummer")) - 2000000) ' MsgBox((CInt(r("Konto-Nr")) - 1000000) + 200000) Next End Select End Sub Shared Function initKDNr2(ktoNr As String, ByVal firmaID As Integer) As String Select Case firmaID Case 24 If IsNumeric(ktoNr) AndAlso CInt(ktoNr) > 3000000 AndAlso ktoNr.Length = 7 Then ktoNr = (CInt(ktoNr) - 3000000) '- 300000 Case Else If IsNumeric(ktoNr) AndAlso CInt(ktoNr) > 2000000 Then ktoNr = (CInt(ktoNr) - 2000000) '+ 200000 End Select Return ktoNr End Function ' Trdin=false Shared Function getSteuercode(r As DataRow, FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen) As String Select Case r("Sachkonto") 'Case "3550", "3553", "3558" ' Return "999" Case Else If Not CBool(r("Steuerpflichtig")) Then 'Vorher immer return "" - galube es soll bei eu aber 77 sein... If SQL.DLookup("[MitgliedslandEU]", "[Währungstabelle]", "[LandKz]='" & r("RechnungsLandKz") & "'", "FMZOLL", False) Then Return "77" ' EU-LAND Else Return "" ' Drittland End If Else If (r("RechnungsLandKz")).ToString.Replace("AT", "A").Replace("DE", "D") = FIRMA.Firma_LandKz Then 'Abhängig von FIRMA --> INLAND!!!!!! Return "1" 'Steuerpflichtig und AT Else If SQL.DLookup("[MitgliedslandEU]", "[Währungstabelle]", "[LandKz]='" & r("RechnungsLandKz") & "'", "FMZOLL", False) Then Return "77" ' EU-LAND Else Return "" ' Drittland End If End If End If End Select Return "" End Function Shared Function getDbl(o As Object) As Double Try If o Is Nothing Then Return 0 If o Is DBNull.Value Then Return 0 Return CDbl(o) Catch ex As Exception Return 0 End Try End Function Shared Function getDbl2(o As Object) As Double Try If o Is Nothing Then Return 0 If o Is DBNull.Value Then Return 0 Return CDbl(o.ToString.Replace(".", ",")) Catch ex As Exception Return 0 End Try End Function Shared Function getDbltr(o As Object) As String Try If o Is Nothing Then Return 0 If o Is DBNull.Value Then Return 0 Return CDbl(o).ToString("F2").Replace(".", "").Replace(" ", "") '.Replace(",", ".") Catch ex As Exception Return 0 End Try End Function Shared Function fill0Stellen(i As Object, l As Integer) As String If i Is DBNull.Value Then i = "" If i Is Nothing Then i = "" While i.ToString.Length < l i &= "0" End While Return i End Function Shared Function emptyFormatedValue(Optional count As Integer = 1) As String Dim retturnText As String = "" For i = 1 To count retturnText &= Chr(34) & Chr(34) & ";" Next Return retturnText End Function Shared Function emptyFormatedValueWithoutCommas(Optional count As Integer = 1) As String Dim retturnText As String = "" For i = 1 To count retturnText &= ";" Next Return retturnText End Function End Class