Imports System.Globalization Imports System.Text Imports System.Web.UI.WebControls.Expressions Imports Microsoft.Office.Interop.Excel Imports QRCoder.PayloadGenerator.SwissQrCode Imports VERAG_PROG_ALLGEMEIN Public Class usrCntlBH Dim GrenzeVersicherung = 50000 Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim culture As CultureInfo = New CultureInfo("de-DE") Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click If frmMDM_BH_SollHaben.Visible Then frmMDM_BH_SollHaben.Close() frmMDM_BH_SollHaben.MdmSollHaben = cbxMdmSollHaben.Checked frmMDM_BH_SollHaben.MdmSollSoll = cbxMdmSollSoll.Checked frmMDM_BH_SollHaben.MdmHabenHaben = cbxMdmHabenHaben.Checked frmMDM_BH_SollHaben.MdmSollHabenOhneKdNr = cbxMdmSollHabenOhneKdNr.Checked frmMDM_BH_SollHaben.Show() End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If frmBH_SollHaben.Visible Then frmBH_SollHaben.Close() frmBH_SollHaben.Show() End Sub Private Sub usrCntlBH_Load(sender As Object, e As EventArgs) Handles Me.Load 'MyComboBox1.fillWithSQL(" SELECT tblUStVAntrag.UStVAn_LandKz,tblUStVAntrag.UStVAn_LandKz FROM tblUStVAntrag GROUP BY tblUStVAntrag.UStVAn_LandKz HAVING (((tblUStVAntrag.UStVAn_LandKz) Is Not Null)) ", False, "FMZOLL", True) cboAbfVerbFirma.fillWithSQL("SELECT distinct([Firma]) FROM [VERAG].[dbo].[Filialen] order by [Firma]", False, "FMZOLL", True) cboAbfVerbFirma.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA) cboFirma_FIBUFilialen.fillWithSQL("SELECT distinct([Firma]) FROM [VERAG].[dbo].[Filialen] order by [Firma]", False, "FMZOLL", True) cboFirma_FIBUFilialen.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA) cbxFirma_RE.fillWithSQL("SELECT Firma_ID, Firma_Bez FROM [VERAG].[dbo].[tblFirma] where Firma_ID in (1,4,7,11,19,20,21,22,23,24,26)", False, "FMZOLL", True) txtRE_Jahr.Text = Now().Year txtRE_Monat.Text = Now().Month cbxFirmaUID.Items.Add(New MyListItem("AMBAR", "AMBAR")) cbxFirmaUID.Items.Add(New MyListItem("IMEX", "IMEX")) cbxFirmaUID.Items.Add(New MyListItem("ATILLA", "ATILLA")) cbxFirmaUID.Items.Add(New MyListItem("UNISPED", "UNISPED")) cbxFirmaUID.Items.Add(New MyListItem("VERAG", "VERAG")) cbxFirmaUID.Items.Add(New MyListItem("", "")) cbxFirmaUID.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA) txtUID_Jahr.Text = Now().Year txtUID_Monat.Text = Now().Month txtJahr_FIBU.Text = Now().Year MyComboBox1.fillWithSQL(" SELECT Währungstabelle.LandKz, [Länderverzeichnis für die Außenhandelsstatistik].LandKz + ' - ' + [Länderverzeichnis für die Außenhandelsstatistik].LandBez AS LandKzISO2 " & " FROM [Länderverzeichnis für die Außenhandelsstatistik] LEFT JOIN Währungstabelle ON [Länderverzeichnis für die Außenhandelsstatistik].LandNr = Währungstabelle.Währungsschlüssel " & " where [Länderverzeichnis für die Außenhandelsstatistik].LandKz IN ('DE','AT','BA','BE','BG','FR','HR','MK','MD','ME','NL','RO','CH','SK','SI','RS','TR','HU') " & " ORDER BY [Länderverzeichnis für die Außenhandelsstatistik].LandKz;", False, "FMZOLL", True) cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Firmenname", "Ordnungsbegriff")) cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Umsatz", "UmsatzRg DESC")) cboSort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Laufender Saldo", "LfdSaldo DESC")) cboSort.SelectedIndex = 0 Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA Case "IMEX" : MyListBox1.fillWithSQL("SELECT [Firma_ID],[Firma_Bez] FROM [VERAG].[dbo].[tblFirma] where Firma_ID IN (20) order by [Firma_ID] ", False, "FMZOLL") Case Else Dim isMDM As Boolean = False If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_abteilung = "MDM" OrElse VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_nname = "Breimaier" Then isMDM = True If isMDM Then If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMIN", "SDL") Then cbxPOSBNZerstellen.Visible = True End If txtnichtabrechneteKunden.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where verrechnet is null", "FMZOLL",,, "0") If IsNumeric(txtnichtabrechneteKunden.Text) AndAlso CInt(txtnichtabrechneteKunden.Text) > 0 Then btnDel_.Visible = True Else btnDel_.Visible = False End If cbxBankspesentyp.Items.Add(New MyListItem("QUARTAL", "Q")) cbxBankspesentyp.Items.Add(New MyListItem("MONATLICH", "M")) setnichtAbgerechnteBankspesen() Else End If MyListBox1.fillWithSQL("SELECT [Firma_ID],[Firma_Bez] FROM [VERAG].[dbo].[tblFirma] where Firma_ID NOT IN (20) order by [Firma_ID] ", False, "FMZOLL") For i = 0 To MyListBox1.Items.Count - 1 If isMDM Then If DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value = 1 Or DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value = 15 Then MyListBox1.SetSelected(i, True) Else If DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value <> 7 Then MyListBox1.SetSelected(i, True) End If Next End Select btnfortlRENr.Enabled = VERAG_PROG_ALLGEMEIN.cAllgemein.SQLGUIDE01_USED txtOPUmsatzVon.Text = "01.01." & (Now.Year - 1) txtOPUmsatzBis.Text = "31.12." & (Now.Year - 1) txtBagatellgrenzeBei._value = 800 End Sub Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged 'MyComboBox1.Enabled = sender.checked End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Try Me.Cursor = Cursors.WaitCursor If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub Dim dt = SQL.loadDgvBySql(getOPSql(), "FMZOLL") dt.Columns.Add("VersicherungsBetrag", Type.GetType("System.Double")) For Each r In dt.Rows r("VersicherungsBetrag") = getVersBetrag(r("Risiko"), r("Versicherungssumme"), r("GemeldeterBetrag"), r("nichtVersicherbar")) Next dt.Columns("VersicherungsBetrag").ColumnName = "V-Betrag" dt.Columns("Versicherungssumme").ColumnName = "V-Summe" dt.Columns("Vorauszahlung").ColumnName = "VZ" 'dt.Columns("GemeldeterBetrag") dt.Columns.Remove("GemeldeterBetrag") If cbxFormatNumbers.Checked Then cProgramFunctions.genExcelFromDT_NEW(dt, {"E1:E" & (dt.Rows.Count + 1), "H1:M" & (dt.Rows.Count + 1), "O1:P" & (dt.Rows.Count + 1)}) Else cProgramFunctions.genExcelCSVFromDT(dt) End If 'cProgramFunctions.genExcelFromDT_NEW(dt) 'cProgramFunctions.genExcelFromDT_NEW(dt, , False) Me.Cursor = Cursors.Default Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Me.Cursor = Cursors.Default End Try End Sub 'MyListBox1 Function getOPSql() As String Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA Case "IMEX" : Return getOPSqlIMEX() Case Else : Return getOPSqlVERAG() End Select End Function Function getOPSqlVERAG() As String Dim Firmen_ID = If(MyListBox1.SelectedItems.Count > 0, "and Firma_ID IN (" & getValuesFirma() & ") ", "") Dim sqlStr = "" sqlStr &= "SELECT * FROM (" sqlStr &= " SELECT Ordnungsbegriff, AdressenNr as KdNr, Adressen.LandKz, " If cbxDeckungsstoppAnzeigen.Checked Then sqlStr &= " (SELECT TOP 1 ISNULL([kde_Versicherung_DeckungsstoppDatum],'') FROM [tblKundenErweitert] where kde_Versicherung_Deckungsstopp=1 and kde_KundenNr=AdressenNr) AS DS, " sqlStr &= " (SELECT TOP 1 ISNULL(kde_txtVersicherungNichtVersicherbar,'') FROM [tblKundenErweitert] where kde_KundenNr=AdressenNr) AS nichtVersicherbar, " If True Then sqlStr &= " isnull((SELECT TOP 1 [kde_Versicherung_GemeldeterBetrag] FROM [tblKundenErweitert] where kde_KundenNr=AdressenNr),0) AS GemeldeterBetrag, " sqlStr &= " (SELECT SUM(Gesamtausstand) FROM dbo.[Offene Posten] WHERE (Kontonummer = AdressenNr " & Firmen_ID & ")) AS LfdSaldo, " sqlStr &= " (SELECT MIN(Belegdatum) AS Expr1" sqlStr &= " FROM dbo.[Offene Posten]" sqlStr &= " WHERE (Kontonummer = AdressenNr " & Firmen_ID & ")) AS Datum, " sqlStr &= " /* (SELECT MAX(Belegdatum) AS Expr1" sqlStr &= " FROM dbo.[Offene Posten]" sqlStr &= " WHERE (Kontonummer = AdressenNr " & Firmen_ID & ")) AS OPDatumMax, */" sqlStr &= " CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR ELSE 0 END AS UStDiff," sqlStr &= " UStV_Summe3470BetragEUR AS Kto3470, UStV_SummeVZBetragEUR AS Vorauszahlung, UStV_SummeVorschaubetragEUR AS Vorschau, " sqlStr &= " isnull((SELECT SUM(Gesamtausstand) FROM dbo.[Offene Posten] WHERE (Kontonummer = AdressenNr " & Firmen_ID & ")),0) - isnull(CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR " sqlStr &= " ELSE 0 END ,0) - isnull(UStV_Summe3470BetragEUR,0) + isnull(UStV_SummeVZBetragEUR,0) - isnull(UStV_SummeVorschaubetragEUR,0) - isnull(CASE WHEN ISNULL(BankgarantieGültigBis, " sqlStr &= " GETDATE()) < GETDATE() THEN 0 ELSE ISNULL(BankgarantieBetrag, 0) END,0) AS Risiko , " sqlStr &= IIf(cbxBankgarantieInfo.Checked, "BankgarantieBetrag, BankgarantieGültigBis,", "") sqlStr &= " Versicherungssumme " ' sqlStr &= " CASE WHEN LfdSaldo>" & GrenzeVersicherung & " THEN CASE WHEN ISNUMERIC(Versicherungssumme )=1 THEN cast(Versicherungssumme as decimal(16,2)) ELSE null END ELSE null END as Versicherungssumme " ' If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT SUM(SteuerfreierGesamtbetrag + SteuerpflichtigerGesamtbetrag) as UmsatzRg FROM [Rechnungsausgang] WHERE Kunden.KundenNrZentrale=[Rechnungsausgang].KundenNrZentrale AND RechnungsDatum between '01.06.2016' and '01.06.2017') as UmsatzRg " If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT sum([SteuerpflichtigerBetragLokal]+[SteuerfreierBetragLokal]) as UmsatzRg/*,sum([RechnungsbetragLokal])as BruttoUmsatzRg*/ FROM [tblTrdinInvoice] WHERE Kunden.KundenNrZentrale=[tblTrdinInvoice].KundenNrZentrale AND Rechnungsdatum between '" & CDate(txtOPUmsatzVon._value).ToShortDateString & "' and '" & CDate(txtOPUmsatzBis._value).ToShortDateString & "') as UmsatzRg " sqlStr &= " FROM Adressen INNER JOIN Kunden ON AdressenNr = KundenNr " 'ANerkennung Versicherungsfall muss false sein: ' sqlStr &= " AND isnull((SELECT kde_Versicherung_AnerkennungVersicherungsfall FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 " 'sqlStr &= " and LfdSaldo > " & GrenzeVersicherung & " " If txtOPKdName.Text <> "" Then sqlStr &= " and Ordnungsbegriff LIKE '" & txtOPKdName.Text.Replace("*", "%") & "'" If txtOPKdNrVon.Text <> "" Then sqlStr &= " and AdressenNr >= '" & txtOPKdNrVon.Text & "'" If txtOPKdNrBis.Text <> "" Then sqlStr &= " and AdressenNr <= '" & txtOPKdNrBis.Text & "'" ' If CheckBox1.Checked And MyComboBox1._value <> "" Then sqlStr &= " and Adressen.LandKz = '" & MyComboBox1._value & "'" If MyComboBox1._value <> "" Then sqlStr &= " and Adressen.LandKz = '" & MyComboBox1._value & "'" If cbxNurVersicherteLänder.Checked Then sqlStr &= " AND (select TOP 1 [Länderverzeichnis für die Außenhandelsstatistik].LandKz from [Länderverzeichnis für die Außenhandelsstatistik] " sqlStr &= " LEFT JOIN Währungstabelle ON Währungstabelle.Währungsschlüssel=[Länderverzeichnis für die Außenhandelsstatistik].LandNr" sqlStr &= " where Währungstabelle.LandKz = Adressen.LandKz) IN ('DE','AT','BE','BA','BG','FR','HR','MK','MD','ME','NL','RO','CH','SK','SI','RS','XS','TR','HU')" End If If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 " 'If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 " If cbx2JahreUmsatz.Checked Then sqlStr &= " and (SELECT COUNT(*) FROM [tblKundenumsatz] where KundenNr=AdressenNr AND Firma_ID IN (" & getValuesFirma() & ") AND Jahr in(DATEPART(YEAR, getdate()),DATEPART(YEAR, getdate())-1 ))>0 " 'Kunden mit gesperrten Liestungen ausblenden: ' - Abfertigungsverbot=1 ' - SDL Leistungen, außer Maut (sdltyp 2) -> alle gesperrt If cbxSDLLeistungenSperre.Checked Then sqlStr &= " AND NOT ( " sqlStr &= " Abfertigungsverbot=1 AND " sqlStr &= " (SELECT COUNT(*) FROM [SDL].[dbo].[KundenSDL] AS SDL INNER JOIN [SDL].[dbo].[Speditionsdienstleistungen] ON [Speditionsdienstleistungen].SDLNr=SDL.SDLNr WHERE SDL.Sperre=0 AND SDL.KundenNr=Adressen.AdressenNr AND [Speditionsdienstleistungen].SDLTypNr IN (1,2) )=0 " sqlStr &= " ) " End If 'sqlStr &= " and AdressenNr LIKE '7%'" 'sqlStr &= " and (select COUNT(*) from Offerten where Offerten.KundenNr=AdressenNr and OffertenNr IN(1,26,27))>0 " sqlStr &= ") as T " sqlStr &= " WHERE 1=1 " If cbxNichtVersicherbarAusblenden.Checked Then sqlStr &= " AND isnull(nichtVersicherbar,0) = 0 " If txtOPRisikoBetragVon._value <> "" Or txtOPRisikoBetragBis._value <> "" Then If txtOPRisikoBetragVon._value <> "" Then sqlStr &= " AND Risiko >= '" & txtOPRisikoBetragVon._value & "'" If txtOPRisikoBetragBis._value <> "" Then sqlStr &= " AND Risiko <= '" & txtOPRisikoBetragBis._value & "'" End If If CheckBox1.Checked Then sqlStr &= " AND EXISTS" sqlStr &= " (SELECT AdressenNr" sqlStr &= " FROM tblSteuernummern " sqlStr &= " WHERE (AdressenNr =T.AdressenNr))" End If If cbxHideZeroValues.Checked Then 'sqlStr &= " AND NOT((Risiko=0 OR Risiko='') AND LfdSaldo =0 AND Vorauszahlung =0 AND Vorschau =0 AND Kto3470 =0 AND UStDiff =0) " sqlStr &= " AND NOT((Risiko=0 OR Risiko='') AND (LfdSaldo=0 OR LfdSaldo='') AND (Vorauszahlung=0 OR Vorauszahlung='') AND (Vorschau=0 OR Vorschau='') AND (Kto3470=0 OR Kto3470='') AND (UStDiff=0 OR UStDiff='')) " End If If cbxOPUmsatz.Checked Then If txtOPUmsatzBetragVon._value <> "" Then sqlStr &= " AND UmsatzRg >= '" & CDbl(txtOPUmsatzBetragVon._value) & "' " End If If txtOPUmsatzBetragBis._value <> "" Then sqlStr &= " AND UmsatzRg <= '" & CDbl(txtOPUmsatzBetragBis._value) & "' " End If End If If Not cbxOPUmsatz.Checked And cboSort._value = "UmsatzRg DESC" Then sqlStr &= " ORDER BY Ordnungsbegriff" Else sqlStr &= " ORDER BY " & cboSort._value End If Return sqlStr End Function Function getOPSqlIMEX() As String ' Dim Firmen_ID = If(MyListBox1.SelectedItems.Count > 0, "and Firma_ID IN (" & getValuesFirma() & ") ", "") Dim sqlStr = "" sqlStr &= "SELECT * FROM (" sqlStr &= " SELECT Ordnungsbegriff, AdressenNr as KdNr, Adressen.LandKz, " If cbxDeckungsstoppAnzeigen.Checked Then sqlStr &= " (SELECT TOP 1 ISNULL([kde_Versicherung_DeckungsstoppDatum],'') FROM [tblKundenErweitert] where kde_Versicherung_Deckungsstopp=1 and kde_KundenNr=AdressenNr) AS DS, " sqlStr &= " (SELECT TOP 1 ISNULL(kde_txtVersicherungNichtVersicherbar,'') FROM [tblKundenErweitert] where kde_KundenNr=AdressenNr) AS nichtVersicherbar, " If True Then sqlStr &= " isnull((SELECT TOP 1 [kde_Versicherung_GemeldeterBetrag] FROM [tblKundenErweitert] where kde_KundenNr=AdressenNr),0) AS GemeldeterBetrag, " sqlStr &= " (SELECT SUM(Saldo) FROM dbo.[Offene_Posten_DVO] WHERE (KundenNr = AdressenNr )) AS LfdSaldo, " sqlStr &= " (SELECT MIN(Datum) AS Expr1" sqlStr &= " FROM dbo.Offene_Posten_DVO" sqlStr &= " WHERE (KundenNr = AdressenNr )) AS Datum, " sqlStr &= " /* (SELECT MAX(Datum) AS Expr1" sqlStr &= " FROM dbo.Offene_Posten_DVO" sqlStr &= " WHERE (KundenNr = AdressenNr )) AS OPDatumMax, */" sqlStr &= " CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR ELSE 0 END AS UStDiff," sqlStr &= " UStV_Summe3470BetragEUR AS Kto3470, UStV_SummeVZBetragEUR AS Vorauszahlung, UStV_SummeVorschaubetragEUR AS Vorschau, " sqlStr &= " isnull((SELECT SUM(Saldo) FROM dbo.Offene_Posten_DVO WHERE (KundenNr = AdressenNr )),0) - isnull(CASE WHEN UStV_SummeUmsatzsteuerbetragEUR > UStV_SummeErstattungsbetragEUR THEN UStV_SummeUmsatzsteuerbetragEUR - UStV_SummeErstattungsbetragEUR " sqlStr &= " ELSE 0 END ,0) - isnull(UStV_Summe3470BetragEUR,0) + isnull(UStV_SummeVZBetragEUR,0) - isnull(UStV_SummeVorschaubetragEUR,0) - isnull(CASE WHEN ISNULL(BankgarantieGültigBis, " sqlStr &= " GETDATE()) < GETDATE() THEN 0 ELSE ISNULL(BankgarantieBetrag, 0) END,0) AS Risiko , /*BankgarantieBetrag, BankgarantieGültigBis, */" sqlStr &= " Versicherungssumme " ' sqlStr &= " CASE WHEN LfdSaldo>" & GrenzeVersicherung & " THEN CASE WHEN ISNUMERIC(Versicherungssumme )=1 THEN cast(Versicherungssumme as decimal(16,2)) ELSE null END ELSE null END as Versicherungssumme " ' If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT SUM(SteuerfreierGesamtbetrag + SteuerpflichtigerGesamtbetrag) as UmsatzRg FROM [Rechnungsausgang] WHERE Kunden.KundenNrZentrale=[Rechnungsausgang].KundenNrZentrale AND RechnungsDatum between '01.06.2016' and '01.06.2017') as UmsatzRg " If cbxOPUmsatz.Checked Then sqlStr &= " ,(SELECT sum([SteuerpflichtigerBetragLokal]+[SteuerfreierBetragLokal]) as UmsatzRg/*,sum([RechnungsbetragLokal])as BruttoUmsatzRg*/ FROM [tblTrdinInvoice] WHERE Kunden.KundenNrZentrale=[tblTrdinInvoice].KundenNrZentrale AND Rechnungsdatum between '" & CDate(txtOPUmsatzVon._value).ToShortDateString & "' and '" & CDate(txtOPUmsatzBis._value).ToShortDateString & "') as UmsatzRg " sqlStr &= " FROM Adressen INNER JOIN Kunden ON AdressenNr = KundenNr " 'IMEX: sqlStr &= " AND isnull(FilialenNr,'')='5501' " 'ANerkennung Versicherungsfall muss false sein: sqlStr &= " AND isnull((SELECT kde_Versicherung_AnerkennungVersicherungsfall FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 " 'sqlStr &= " and LfdSaldo > " & GrenzeVersicherung & " " If txtOPKdName.Text <> "" Then sqlStr &= " and Ordnungsbegriff LIKE '" & txtOPKdName.Text.Replace("*", "%") & "'" If txtOPKdNrVon.Text <> "" Then sqlStr &= " and AdressenNr >= '" & txtOPKdNrVon.Text & "'" If txtOPKdNrBis.Text <> "" Then sqlStr &= " and AdressenNr <= '" & txtOPKdNrBis.Text & "'" ' If CheckBox1.Checked And MyComboBox1._value <> "" Then sqlStr &= " and Adressen.LandKz = '" & MyComboBox1._value & "'" If MyComboBox1._value <> "" Then sqlStr &= " and Adressen.LandKz = '" & MyComboBox1._value & "'" If cbxNurVersicherteLänder.Checked Then sqlStr &= " AND (select TOP 1 [Länderverzeichnis für die Außenhandelsstatistik].LandKz from [Länderverzeichnis für die Außenhandelsstatistik] " sqlStr &= " LEFT JOIN Währungstabelle ON Währungstabelle.Währungsschlüssel=[Länderverzeichnis für die Außenhandelsstatistik].LandNr" sqlStr &= " where Währungstabelle.LandKz = Adressen.LandKz) IN ('DE','AT','BA','BE','BG','FR','HR','MK','MD','ME','NL','RO','CH','SK','SI','RS','XS','TR','HU')" End If If cbxNichtVersicherbarAusblenden.Checked Then sqlStr &= " AND isnull((SELECT kde_txtVersicherungNichtVersicherbar FROM tblKundenErweitert WHERE kde_KundenNr=Adressen.AdressenNr),0)=0 " If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 " 'If cbxKundeBeiRechtsanwaltausblenden.Checked Then sqlStr &= " and Rechtsanwalt= 0 " If cbx2JahreUmsatz.Checked Then sqlStr &= " and (SELECT COUNT(*) FROM [tblKundenumsatz] where KundenNr=AdressenNr AND Jahr in(DATEPART(YEAR, getdate()),DATEPART(YEAR, getdate())-1 ))>0 " 'Kunden mit gesperrten Liestungen ausblenden: ' - Abfertigungsverbot=1 ' - SDL Leistungen, außer Maut (sdltyp 2) -> alle gesperrt If cbxSDLLeistungenSperre.Checked Then sqlStr &= " AND NOT ( " sqlStr &= " Abfertigungsverbot=1 AND " sqlStr &= " (SELECT COUNT(*) FROM [SDL].[dbo].[KundenSDL] AS SDL INNER JOIN [SDL].[dbo].[Speditionsdienstleistungen] ON [Speditionsdienstleistungen].SDLNr=SDL.SDLNr WHERE SDL.Sperre=0 AND SDL.KundenNr=Adressen.AdressenNr AND [Speditionsdienstleistungen].SDLTypNr IN (1,2) )=0 " sqlStr &= " ) " End If 'sqlStr &= " and AdressenNr LIKE '7%'" 'sqlStr &= " and (select COUNT(*) from Offerten where Offerten.KundenNr=AdressenNr and OffertenNr IN(1,26,27))>0 " sqlStr &= ") as T " sqlStr &= " WHERE 1=1 " If txtOPRisikoBetragVon._value <> "" Or txtOPRisikoBetragBis._value <> "" Then If txtOPRisikoBetragVon._value <> "" Then sqlStr &= " AND Risiko >= '" & txtOPRisikoBetragVon._value & "'" If txtOPRisikoBetragBis._value <> "" Then sqlStr &= " AND Risiko <= '" & txtOPRisikoBetragBis._value & "'" End If If CheckBox1.Checked Then sqlStr &= " AND EXISTS" sqlStr &= " (SELECT AdressenNr" sqlStr &= " FROM tblSteuernummern " sqlStr &= " WHERE (AdressenNr =T.AdressenNr))" End If If cbxHideZeroValues.Checked Then sqlStr &= " AND NOT((Risiko=0) AND (LfdSaldo=0) AND (Vorauszahlung=0) AND (Vorschau=0) AND (Kto3470=0) AND (UStDiff=0)) " End If If cbxOPUmsatz.Checked Then If txtOPUmsatzBetragVon._value <> "" Then sqlStr &= " AND UmsatzRg >= '" & CDbl(txtOPUmsatzBetragVon._value) & "' " End If If txtOPUmsatzBetragBis._value <> "" Then sqlStr &= " AND UmsatzRg <= '" & CDbl(txtOPUmsatzBetragBis._value) & "' " End If End If If Not cbxOPUmsatz.Checked And cboSort._value = "UmsatzRg DESC" Then sqlStr &= " ORDER BY Ordnungsbegriff" Else sqlStr &= " ORDER BY " & cboSort._value End If Return sqlStr End Function Function getValuesFirma() As String Dim s As String = "" For Each i In MyListBox1.SelectedItems s += DirectCast(i, VERAG_PROG_ALLGEMEIN.MyListItem).Value & ", " Next If s.EndsWith(", ") Then s = s.Substring(0, s.Length - 2) End If Return s End Function Function checkOPValid() As Boolean If txtOPRisikoBetragVon._value <> "" AndAlso Not IsNumeric(txtOPRisikoBetragVon._value) Then MsgBox("Risikobetrag-Von nicht korrekt!") : Return False If txtOPRisikoBetragBis._value <> "" AndAlso Not IsNumeric(txtOPRisikoBetragBis._value) Then MsgBox("Risikobetrag-Bis nicht korrekt!") : Return False If txtOPKdNrVon.Text <> "" AndAlso Not IsNumeric(txtOPKdNrVon.Text) Then MsgBox("KdNr-Von nicht korrekt!") : Return False If txtOPKdNrBis.Text <> "" AndAlso Not IsNumeric(txtOPKdNrBis.Text) Then MsgBox("KdNr-Bis nicht korrekt!") : Return False If cbxOPUmsatz.Checked Then Try : DateTime.ParseExact(txtOPUmsatzVon._value, "dd.MM.yyyy", culture) Catch ex As Exception : MsgBox("Umsatz-Von nicht korrekt!") : Return False : End Try Try : DateTime.ParseExact(txtOPUmsatzBis._value, "dd.MM.yyyy", culture) Catch ex As Exception : MsgBox("Umsatz-Bis nicht korrekt!") : Return False : End Try End If If cbxBagatellgrenze.Checked Then If txtBagatellgrenzeBei._value <> "" AndAlso Not IsNumeric(txtBagatellgrenzeBei._value) Then MsgBox("txtBagatellgrenze nicht korrekt!") : Return False End If ' If txtOPRisikoBetrag.Text <> "" AndAlso Not IsNumeric(txtOPRisikoBetrag.Text) Then MsgBox("Risikobetrag nicht korrekt!") : Return False Return True End Function Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Me.Cursor = Cursors.WaitCursor If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub Try Dim dt As DataTable = SQL.loadDgvBySql_Param(getOPSql, "FMZOLL") 'DataGridView.DataSource = dt Dim print As New frmPrintLayout print.Text = "Speditionsbericht" Dim rpt As New rptOP_Risikobericht rpt.DataSource = dt If rpt.DataSource.rows.count = 0 Then rpt.Dispose() : print.Dispose() MsgBox("Keine Daten vorhanden!") Exit Sub End If If cbxOPUmsatz.Checked Then rpt.lblUmsatzText.Visible = True rpt.lblUmsatzText.Text = "Umsatz (" & txtOPUmsatzVon.Text & " - " & txtOPUmsatzBis.Text & ")" Else rpt.lblUmsatzText.Visible = False End If Dim sum = 0 rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME rpt.lblDat.Text = Now.ToLongDateString ' Dim sumAnz As Double = 0 ' Dim sumBar As Double = 0 Dim dummycount As Integer = 0 AddHandler rpt.Detail.Format, Sub() rpt.lblKdNr.Text = If(rpt.Fields.Item("KdNr").Value IsNot DBNull.Value, rpt.Fields.Item("KdNr").Value, "") rpt.lblKunde.Text = If(rpt.Fields.Item("Ordnungsbegriff").Value IsNot DBNull.Value, rpt.Fields.Item("Ordnungsbegriff").Value, "") rpt.lblAV.Text = If(rpt.Fields.Contains("Abfertigungsverbot") AndAlso rpt.Fields.Item("Abfertigungsverbot").Value IsNot Nothing, "Ja", "") rpt.lblLand.Text = If(rpt.Fields.Item("LandKz").Value IsNot DBNull.Value, rpt.Fields.Item("LandKz").Value, "") rpt.lblBankgarantie.Text = If(rpt.Fields.Contains("BankgarantieBetrag") AndAlso rpt.Fields.Item("BankgarantieBetrag").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("BankgarantieBetrag").Value).ToString("C"), "") rpt.lblOPSaldo.Text = If(rpt.Fields.Item("LfdSaldo").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("LfdSaldo").Value).ToString("C"), "") rpt.lblUStDiff.Text = If(rpt.Fields.Item("UStDiff").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("UStDiff").Value).ToString("C"), "") rpt.lblKto3470.Text = If(rpt.Fields.Item("Kto3470").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Kto3470").Value).ToString("C"), "") rpt.lblVorauszahlung.Text = If(rpt.Fields.Item("Vorauszahlung").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Vorauszahlung").Value).ToString("C"), "") rpt.lblVorschau.Text = If(rpt.Fields.Item("Vorschau").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Vorschau").Value).ToString("C"), "") If cbxOPUmsatz.Checked Then rpt.lblUmsatz.Text = If(rpt.Fields.Item("UmsatzRg").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("UmsatzRg").Value).ToString("C"), "") rpt.lblUmsatz.Visible = True End If Dim risiko As Double = 0 If (rpt.Fields.Item("Risiko").Value IsNot DBNull.Value) Then risiko = CDbl(rpt.Fields.Item("Risiko").Value) rpt.lblRisiko.Text = risiko.ToString("C") If risiko > 0 Then rpt.lblRisiko.ForeColor = Color.Red Else rpt.lblRisiko.ForeColor = Color.Black End If Else rpt.lblRisiko.Text = "" End If rpt.lblVersicherungssumme.Text = If(rpt.Fields.Item("Versicherungssumme").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Versicherungssumme").Value).ToString("C"), "") rpt.lblVersBetrag.Text = getVersBetrag(risiko, rpt.Fields.Item("Versicherungssumme").Value, rpt.Fields.Item("GemeldeterBetrag").Value, IIf(rpt.Fields.Item("nichtVersicherbar").Value IsNot DBNull.Value, rpt.Fields.Item("nichtVersicherbar").Value, False)).ToString("C") ' rpt.lblVersicherungssumme.Text = If(rpt.Fields.Item("Versicherungssumme").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Versicherungssumme").Value).ToString("C"), "") ' rpt.lblVorschau.Text = If(rpt.Fields.Item("Vorschau").Value IsNot DBNull.Value, CDbl(rpt.Fields.Item("Vorschau").Value).ToString("C"), "") rpt.lblBankgarantieGueltigBis.Text = If(rpt.Fields.Contains("BankgarantieBetrag") AndAlso rpt.Fields.Item("BankgarantieGültigBis").Value IsNot DBNull.Value, CDate(rpt.Fields.Item("BankgarantieGültigBis").Value).ToShortDateString, "") rpt.lblOPDat.Text = If(rpt.Fields.Contains("OPDatumMin") AndAlso rpt.Fields.Item("OPDatumMin").Value IsNot DBNull.Value, CDate(rpt.Fields.Item("OPDatumMin").Value).ToShortDateString, "") 'Abwechselnd grauen und weißen Hintergrund dummycount += 1 If (dummycount Mod 2) = 0 Then rpt.Detail.BackColor = Color.FromArgb(240, 240, 240) Else rpt.Detail.BackColor = System.Drawing.Color.White End If End Sub print.Viewer.LoadDocument(rpt) print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous print.Show() Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Me.Cursor = Cursors.Default End Sub Function getVersBetrag(risiko, Versicherungssumme, GemeldeterBetrag, versicherungGekündigt) As Double If risiko Is DBNull.Value Then Return 0 If Not versicherungGekündigt Is DBNull.Value AndAlso versicherungGekündigt Then Return 0 Dim versBetrag As Double = 0 If risiko <= 0 Then versBetrag = 0 ElseIf cbxBagatellgrenze.Checked And risiko <= txtBagatellgrenzeBei._value Then versBetrag = 0 ' kleiner Bagatellgrenze ElseIf risiko <= GrenzeVersicherung Then If Versicherungssumme IsNot DBNull.Value Then If risiko > CDbl(Versicherungssumme) Then versBetrag = Versicherungssumme Else versBetrag = risiko End If Else versBetrag = risiko End If Else If Versicherungssumme IsNot DBNull.Value Then If risiko > CDbl(Versicherungssumme) Then versBetrag = Versicherungssumme Else versBetrag = risiko End If Else versBetrag = GrenzeVersicherung End If End If Return If(GemeldeterBetrag > 0, GemeldeterBetrag, versBetrag) End Function Private Sub cbxOPUmsatz_CheckedChanged(sender As Object, e As EventArgs) Handles cbxOPUmsatz.CheckedChanged txtOPUmsatzVon.Enabled = sender.checked txtOPUmsatzBis.Enabled = sender.checked txtOPUmsatzBetragVon.Enabled = sender.checked txtOPUmsatzBetragBis.Enabled = sender.checked End Sub Private Sub cbxBagatellgrenze_CheckedChanged(sender As Object, e As EventArgs) Handles cbxBagatellgrenze.CheckedChanged txtBagatellgrenzeBei.Enabled = sender.checked End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim sqlStr = " SELECT TOP (1000) [KundenNr] as KdNr,Ordnungsbegriff as Kunde" sqlStr &= " ,(Versicherungssumme ) as [Vers.summe]" ' sqlStr &= " ,isnull(cast(Versicherungssumme as varchar(50)),'') as [Vers.summe]" sqlStr &= " ,case when kde_Versicherung_Deckungsstopp=1 then 'WAHR' ELSE '' END as [DS]" sqlStr &= " ,isnull(cast(cast(kde_Versicherung_DeckungsstoppDatum as date) as varchar(10)),'') as [DS Datum]" sqlStr &= " ,case when kde_txtVersicherungNichtVersicherbar=1 then 'WAHR' ELSE '' END as [nicht versicherbar]" sqlStr &= " ,case when kde_Versicherung_Uebergeben=1 then 'WAHR' ELSE '' END as [Vers. übergeben]" sqlStr &= " ,isnull(cast(cast(kde_Versicherung_UebergebenAm as date) as varchar(10)),'') as [Vers. übergeben Dat] " sqlStr &= " ,case when kde_Versicherung_AnerkennungVersicherungsfall=1 then 'WAHR' ELSE '' END as [Vers.fall]" sqlStr &= " ,isnull(cast(kde_txtVersicherungDeckungsquote as varchar(20)),'') as [Quote]" sqlStr &= " ,isnull(cast(cast(kde_Versicherung_AnerkennungVersicherungsfallAb as date) as varchar(10)),'') as [Anerk. Vers. Fall] " sqlStr &= " FROM [VERAG].[dbo].[Kunden] inner join Adressen on AdressenNr=KundenNr left join tblKundenErweitert on kde_KundenNr =KundenNr" sqlStr &= " where (Versicherungssumme is not null or kde_txtVersicherungNichtVersicherbar=1 or kde_Versicherung_Deckungsstopp=1 or kde_Versicherung_Uebergeben=1 or kde_Versicherung_AnerkennungVersicherungsfall=1)" sqlStr &= " order by Ordnungsbegriff " Me.Cursor = Cursors.WaitCursor If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL") ' dt.Columns.Add("VersicherungsBetrag", Type.GetType("System.Double")) ' For Each r In dt.Rows 'r("VersicherungsBetrag") = getVersBetrag(r("Risiko"), r("Versicherungssumme")) ' Next ' dt.Columns("VersicherungsBetrag").ColumnName = "V-Betrag" ' dt.Columns("Versicherungssumme").ColumnName = "V-Summe" ' dt.Columns("Vorauszahlung").ColumnName = "VZ" ' If cbxFormatNumbers.Checked Then cProgramFunctions.genExcelFromDT_NEW(dt, {"C1:C" & (dt.Rows.Count + 1), "C1:C" & (dt.Rows.Count + 1)}) ' Else ' cProgramFunctions.genExcelCSVFromDT(dt) ' End If 'cProgramFunctions.genExcelFromDT_NEW(dt) 'cProgramFunctions.genExcelFromDT_NEW(dt, , False) Me.Cursor = Cursors.Default End Sub Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click Dim f As New frmVorauskasse f.Show(Me) End Sub Private Sub GroupBox4_Enter(sender As Object, e As EventArgs) Handles GroupBox4.Enter End Sub Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click Dim StartZeit As Date = DateTime.Now Dim StopZeit As Date = DateTime.Now Label31.Visible = False Dim cnt = 0 'dim listAVISO = New List(Of cAviso) Dim sql As New VERAG_PROG_ALLGEMEIN.SQL Dim kdnr_tmp = "" Try Dim fd As New OpenFileDialog fd.Filter = "CSV Files (*.csv)|*.csv" If fd.ShowDialog = DialogResult.OK Then If fd.FileName.ToUpper.EndsWith(".CSV") Then Dim Lines As String() = My.Computer.FileSystem.ReadAllText(fd.FileName, System.Text.Encoding.Default).Split(vbCr) Dim LineCount As Integer = Lines.Length ' fd.FileName.EndsWith(".csv") Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(fd.FileName, Encoding.Default) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(";") Dim currentRow As String() If VERAG_PROG_ALLGEMEIN.cOffene_Posten_DVO.DELETE_ALL Then While Not MyReader.EndOfData Try ' If cnt > 100 Then Exit Sub currentRow = MyReader.ReadFields() ' Dim currentField As String Dim kdnr As Integer = 1000000 If currentRow.Length > 24 Then If IsNumeric(currentRow(0).Trim()) AndAlso currentRow(0) > 99999 Then If CInt(currentRow(0)) <> 200001 Then ' DUBIOSE FORDERUNGEN Try kdnr += currentRow(0).Substring(1) 'erste Stelle weg --> 2 oder 5 kdnr_tmp = kdnr Dim OP As New VERAG_PROG_ALLGEMEIN.cOffene_Posten_DVO() ' VERAG_PROG_ALLGEMEIN.SQL.isleernothing(getTrimedString(currentRow(11), 20)) '220404 ' Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL OP.Konto = CInt(sql.isleernothing(currentRow(0))) OP.KontoBez = sql.isleernothing(currentRow(1)) OP.KundenNr = kdnr OP.Rechnung = sql.isleernothing(currentRow(2)) OP.Datum = sql.isleernothing(currentRow(3)) OP.Buchungsbetrag_SOLL = CDbl(sql.isleernothing(currentRow(4))) OP.Buchungsbetrag_HABEN = CDbl(sql.isleernothing(currentRow(5))) OP.Saldo = CDbl(sql.isleernothing(currentRow(6))) OP.Steuercode = sql.isleernothing(currentRow(7)) OP.Ländercode = sql.isleernothing(currentRow(8)) OP.Steuerbetrag = CDbl(sql.isleernothing(currentRow(9))) OP.Buchungstext = sql.isleernothing(currentRow(10) & currentRow(11)) OP.Faell_Tage1 = sql.isleernothing(currentRow(12)) If IsNumeric(currentRow(13)) Then OP.Faell_Prozent1 = CDbl(sql.isleernothing(currentRow(13))) OP.Faell_Tage2 = sql.isleernothing(currentRow(14)) If IsNumeric(currentRow(15)) Then OP.Faell_Prozent2 = CDbl(sql.isleernothing(currentRow(15))) OP.Faell_Tage3 = sql.isleernothing(currentRow(16)) If IsNumeric(currentRow(17)) Then OP.Faell_Prozent3 = CDbl(sql.isleernothing(currentRow(17))) OP.Mahnstufe = sql.isleernothing(currentRow(18)) ' OP.Rechnung_Gutschrift = sql.isleernothing(currentRow(21))? ' OP.Storno = sql.isleernothing(currentRow(XXXX)) OP.Jahr = sql.isleernothing(currentRow(20)) OP.Faelligkeit = CDate(sql.isleernothing(currentRow(25))) OP.SAVE() Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End If End If End If cnt += 1 If cnt Mod 10 = 0 Then My.Application.DoEvents() Label30.Text = (cnt) & " / " & LineCount End If 'For Each currentField In currentRow 'Next Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End While Label30.Text = (cnt + 1) & " / " & LineCount Label31.Visible = True Else MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.") End If End Using End If End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Finally End Try End Sub Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click Dim f As New frmBU_Mahnlauf f.Show() End Sub Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click Dim sqlStr = "SELECT KundenNr,[Adressen].[Name 1] + ' ' + isnull([Adressen].[Name 2],'') Name,[Adressen].[Straße],[Adressen].[LandKz],[Adressen].[PLZ],[Adressen].[Ort],[Adressen].[Telefon],[Adressen].[E-Mail],[Adressen].[UstIdKz],[Adressen].[UstIdNr],[Abfertigungsverbot seit],[Abfertigungsverbot Grund] FROM [Adressen] inner join Kunden on AdressenNr=KundenNr inner join Filialen on kunden.FilialenNr=Filialen.FilialenNr where Filialen.Firma='" & cboAbfVerbFirma._value & "' and Abfertigungsverbot=1 and Auswahl='A' ORDER BY KundenNr " Me.Cursor = Cursors.WaitCursor If Not checkOPValid() Then Me.Cursor = Cursors.Default : Exit Sub Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL") cProgramFunctions.genExcelFromDT_NEW(dt) Me.Cursor = Cursors.Default End Sub Private Sub Button9_Click(sender As Object, e As EventArgs) If txtStichtag.Text <> "" AndAlso Not IsNumeric(txtStichtag.Text) Then MsgBox("Stichtag nicht korrekt!") : Exit Sub Dim SQLStichtag = "" If txtStichtag.Text <> "" Then Try : DateTime.ParseExact(txtStichtag._value, "dd.MM.yyyy", culture) Catch ex As Exception : MsgBox("Stichtag nicht korrekt!") : Exit Sub : End Try SQLStichtag = " And (UStVAn_ReDatVon <='" & txtStichtag._value & "' and tblUStVAntrag.UStVAn_ReDatBis <= '" & txtStichtag._value & "')" End If Dim sqlStr = "SELECT tblUStVAntrag.UStVAn_KuNr as Kunde, Adressen.Ordnungsbegriff as Bezeichnung, sum(tblUStVAntrag.UStVAn_3470) as Betrag FROM tblUStVAntrag INNER JOIN Adressen ON tblUStVAntrag.UStVAn_KuNr = Adressen.AdressenNr WHERE tblUStVAntrag.UStVAn_3470 Is Not Null" & SQLStichtag & " Group by tblUStVAntrag.UStVAn_KuNr, Adressen.Ordnungsbegriff" Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL") cProgramFunctions.genExcelFromDT_NEW(dt, {"C1:C" & (dt.Rows.Count + 1)}) Me.Cursor = Cursors.Default End Sub Private Sub Button10_Click(sender As Object, e As EventArgs) If txtStichtag.Text <> "" AndAlso Not IsNumeric(txtStichtag.Text) Then MsgBox("Stichtag nicht korrekt!") : Exit Sub Dim SQLStichtag = "" Dim SQLKdNr = "" If sender Is Button10 Then SQLKdNr = " and [UStVAn_KuNr] Not Between 150000 And 155999" Else SQLKdNr = " and [UStVAn_KuNr] Between 150000 And 155999" End If If txtStichtag.Text <> "" Then Try : DateTime.ParseExact(txtStichtag._value, "dd.MM.yyyy", culture) Catch ex As Exception : MsgBox("Stichtag nicht korrekt!") : Exit Sub : End Try SQLStichtag = " And (UStVAn_ReDatVon <='" & txtStichtag._value & "' and tblUStVAntrag.UStVAn_ReDatBis <= '" & txtStichtag._value & "')" End If Dim sqlStr = "SELECT tblUStVAntrag.UStVAn_KuNr as Kunde, Adressen.Ordnungsbegriff as Kundenbezeichnung, sum(tblUStVAntrag.UStVAn_VZBetrag) as VZges, sum(isnull([UStVEr_USteuerbetragEUR],0)) AS Erstattungsbetrag, case when (sum([UStVAn_VZBetrag])-sum(isnull([UStVAn_RZBetragVZ],0))-sum(isnull([UStVEr_USteuerbetragEUR],0)))>0 then sum((([UStVAn_VZBetrag]-isnull([UStVAn_RZBetragVZ],0))-isnull([UStVEr_USteuerbetragEUR],0))) else 0 End AS VZBetragAktuell FROM tblUStVAntrag INNER JOIN [tblUStVErstattung] ON [tblUStVErstattung].[UStVAn_ID] = tblUStVAntrag .[UStVAn_ID] INNER JOIN Adressen ON tblUStVAntrag.UStVAn_KuNr = Adressen.AdressenNr WHERE tblUStVAntrag.UStVAn_VZBetrag Is Not Null" & SQLStichtag & SQLKdNr & " Group by tblUStVAntrag.UStVAn_KuNr, Adressen.Ordnungsbegriff" Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL") cProgramFunctions.genExcelFromDT_NEW(dt, {"C1:C" & (dt.Rows.Count + 1), "D1:D" & (dt.Rows.Count + 1), "E1:E" & (dt.Rows.Count + 1)}) Me.Cursor = Cursors.Default End Sub Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click Dim f As New SDL.frmLeistundenFIBUKonten(VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMIN", "SDL") Or VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("Leistungen_FIBU", "SDL")) f.ShowDialog(Me) End Sub Private Sub btnZinsbelastung_Click(sender As Object, e As EventArgs) Handles btnZinsbelastung.Click If txtKdNrvon.Text = "" OrElse Not IsNumeric(txtKdNrvon.Text) Then txtKdNrvon.Focus() Exit Sub End If If txtKdNrbis.Text = "" OrElse Not IsNumeric(txtKdNrbis.Text) Then txtKdNrbis.Focus() Exit Sub End If If txtZRvon.Text = "" OrElse Not IsDate(txtZRvon.Text) Then txtZRvon.Focus() Exit Sub End If If txtZRbis.Text = "" OrElse Not IsDate(txtZRbis.Text) Then txtZRbis.Focus() Exit Sub End If If txtTolInTagen.Text = "" OrElse Not IsNumeric(txtTolInTagen.Text) Then txtTolInTagen.Focus() Exit Sub End If If txtZinssatz.Text = "" OrElse Not IsNumeric(txtZinssatz.Text) Then txtZinssatz.Focus() Exit Sub End If If vbYes = MsgBox("Möchten Sie die Zinsbelastung starten?", vbYesNoCancel) Then 'Defaultwerte Dim zinssatz As Double = CDbl(txtZinssatz.Text.Replace(".", ",")) Dim toleranztage As Integer = CInt(txtTolInTagen.Text) Dim sqlStr_FIBU = "declare @KundeVon as Integer = " & txtKdNrvon.Text & " declare @KundeBis as Integer = " & txtKdNrbis.Text & " declare @ZahlungVon as Date = '" & CDate(txtZRvon.Text).ToString("yyyy-MM-dd") & "' declare @ZahlungBis as Date = '" & CDate(txtZRbis.Text).ToString("yyyy-MM-dd") & "' declare @MandantNr as Integer = 19 SELECT op_debitor.i_personenkonto AS KDNR, [Adressen].Ordnungsbegriff as Name, op_debitor.c_urbelegid AS BelegNr, op_debitor.c_bemerkung AS Buchungstext, op_debitor.d_rechnung AS Belegdatum, op_debitor.d_netto AS Fällig, op_debitor.d_zahlung AS Zahlungsdatum, --ISNULL(op_debitor.OWNFIELD_Belegdatum, '01.01.2000') AS origbelegdatum, DATEDIFF(DAY, DATEADD(DAY, (isnull(dbo.fibu_zahlziel.si_ntage,0) + 0 ), op_debitor.d_rechnung), op_debitor.d_zahlung) as ÜberschreitungInTagen, op_debitor.eur_zahlung AS Zahlungsbetrag, isnull(kde_zinssatz," & zinssatz.ToString.Replace(",", ".") & ") AS Zinssatz_Kunde, case when DATEDIFF(DAY, DATEADD(DAY, (isnull(dbo.fibu_zahlziel.si_ntage,0) + ISNULL(tblKundenErweitert.kde_abwToleranzTage," & toleranztage & ") ), op_debitor.d_rechnung), op_debitor.d_zahlung) > 0 then Round(op_debitor.eur_bruttobetrag * isnull(kde_zinssatz,9.5) / 100 * DATEDIFF(DAY, DATEADD(DAY, (isnull(dbo.fibu_zahlziel.si_ntage,0) ), op_debitor.d_rechnung), op_debitor.d_zahlung) / 360,2) else 0 end as Zinsbetrag, cast(0 as bit) as abgerechnet, op_debitor.eur_bruttobetrag AS Bruttobetrag, ISNULL(tblKundenErweitert.kde_abwToleranzTage," & toleranztage & ") as TolInTagen, ISNULL(op_debitor.c_zahlziel, '0/0/20') AS ZZ_in_OP, ISNULL(fibu_konto.c_zahlziel, '0/0/20') AS ZZ_in_Debitor, ISNULL(dbo.fibu_zahlziel.si_ntage,20) as ZZinTage, DATEADD(DAY, (isnull(dbo.fibu_zahlziel.si_ntage,0) + ISNULL(tblKundenErweitert.kde_abwToleranzTage," & toleranztage & ")), op_debitor.d_rechnung) as ReZielZahlungsdatum FROM op_debitor INNER JOIN fibu_konto ON (op_debitor.i_personenkonto = fibu_konto.i_konto) inner join " & VERAG_PROG_ALLGEMEIN.cAllgemein.FMZOLL_SERVER & ".[VERAG].[dbo].[Adressen] on [Adressen].AdressenNr = op_debitor.i_personenkonto inner join " & VERAG_PROG_ALLGEMEIN.cAllgemein.FMZOLL_SERVER & ".[VERAG].[dbo].[tblKundenErweitert] on kde_KundenNr = op_debitor.i_personenkonto left join fibu_zahlziel on dbo.fibu_zahlziel.i_firm_refid = dbo.op_debitor.i_firm_refid and dbo.fibu_zahlziel.c_zahlziel = ISNULL(fibu_konto.c_zahlziel, '0/0/20') WHERE op_debitor.i_firm_refid = @MandantNr and fibu_konto.i_firm_refid = @MandantNr AND (op_debitor.eur_bruttobetrag + op_debitor.eur_zahlung <= 1) AND (op_debitor.eur_bruttobetrag + op_debitor.eur_zahlung >= (-1)) AND op_debitor.i_personenkonto >= @KundeVon AND op_debitor.i_personenkonto <= @KundeBis AND op_debitor.d_zahlung >= @ZahlungVon AND op_debitor.d_zahlung <= @ZahlungBis AND DATEDIFF(DAY, DATEADD(DAY, (isnull(dbo.fibu_zahlziel.si_ntage,0) + ISNULL(tblKundenErweitert.kde_abwToleranzTage," & toleranztage & ")), op_debitor.d_rechnung), op_debitor.d_zahlung) > 0 AND LEFT(op_debitor.c_bemerkung, 4) IN (SELECT CAST(FilialenNr AS VARCHAR(4)) FROM " & VERAG_PROG_ALLGEMEIN.cAllgemein.FMZOLL_SERVER & ".[VERAG].[dbo].Filialen WHERE FilialenNr between 1000 and 9999) ORDER BY op_debitor.i_personenkonto, op_debitor.c_urbelegid desc, op_debitor.d_rechnung, ISNULL(op_debitor.OWNFIELD_Belegdatum, '01.01.2000')" Dim dt = SQL.loadDgvBySql(sqlStr_FIBU, "FIBU") If dt.Rows.Count = 0 Then MsgBox("keine Daten") Else Dim counter As Integer = 0 Dim cnt As Integer = 0 For Each r As DataRow In dt.Rows If r.Item("Zinsbetrag") > 0 Then Dim zins As New cMDMZinsberechnung(r.Item("KDNR"), r.Item("BelegNr")) If zins.hasEntry AndAlso zins.verrechnet IsNot Nothing Then counter += 1 dt.Columns("abgerechnet").ReadOnly = False r.Item("abgerechnet") = True dt.Columns("abgerechnet").ReadOnly = True Else zins.buchungstext = r.Item("Buchungstext").ToString.Replace("'", "") zins.kundeZahlungsziel = r.Item("ZZ_in_Debitor") zins.zinssatz = r.Item("Zinssatz_Kunde") zins.belegZahlungsziel = r.Item("ZZinTage") zins.ueberschreitungInTagen = r.Item("ÜberschreitungInTagen") zins.zinsbetrag = CDbl(r.Item("Zinsbetrag")) zins.timestamp = Now() zins.belegDatum = r.Item("Belegdatum") zins.zahlungsBetrag = r.Item("Zahlungsbetrag") zins.zahlungDatum = r.Item("Zahlungsdatum") zins.faelligkeitsDatum = CDate(r.Item("Belegdatum")).AddDays(CInt(r.Item("ZZinTage"))) zins.zahlungsperiode_start = CDate(txtZRvon.Text).ToShortDateString zins.zahlungsperiode_ende = CDate(txtZRbis.Text).ToShortDateString zins.SAVE() End If End If txtPloseAnh_Einarbeitung.Text = cnt & " / " & dt.Rows.Count Dim proz As Double = (cnt / dt.Rows.Count) * 100 pbPloseAnh_Proz.Value = proz lblPloseAnh_Proz.Text = proz.ToString("N2") & " %" 'GroupBox12.Refresh() My.Application.DoEvents() cnt += 1 Next If counter > 0 Then MsgBox("In der Zinsberechnung befinden sich " & counter & " Positionen, die bereits abgerechnet wurden!" & vbNewLine & "Diese werden übersprungen bzw. nicht nochmals verrechnet!") End If Dim dtTemp As New System.Data.DataTable dtTemp = dt.Select("Zinsbetrag > 0").CopyToDataTable If dtTemp.Columns.Contains("Bruttobetrag") Then dtTemp.Columns.Remove("Bruttobetrag") If dtTemp.Columns.Contains("ZZ_in_OP") Then dtTemp.Columns.Remove("ZZ_in_OP") If dtTemp.Columns.Contains("ZZ_in_Debitor") Then dtTemp.Columns.Remove("ZZ_in_Debitor") If dtTemp.Columns.Contains("ZZinTage") Then dtTemp.Columns.Remove("ZZinTage") If dtTemp.Columns.Contains("ReZielZahlungsdatum") Then dtTemp.Columns.Remove("ReZielZahlungsdatum") Dim dtTemp2 As New System.Data.DataTable dtTemp2.Columns.Add("KDNR", GetType(Int32)) dtTemp2.Columns.Add("Name", GetType(String)) dtTemp2.Columns.Add("Zinsbetrag", GetType(Decimal)) Dim query = From row In dtTemp.AsEnumerable() Group row By key = row.Field(Of Int32)("KDNR") Into grp = Group Select New With { .GroupValue = key, .KDName = grp.First().Field(Of String)("Name"), .SumValue = grp.Sum(Function(r) Convert.ToDecimal(r("Zinsbetrag"))) } ' Fill the new DataTable For Each item In query dtTemp2.Rows.Add(item.GroupValue, item.KDName, item.SumValue) Next If dtTemp.Rows.Count > 0 AndAlso dtTemp2.Rows.Count > 0 Then cProgramFunctions.genExcelFromMultibleDT_NEW(New List(Of DataTable) From {dtTemp, dtTemp2}, {"H1:H" & (dt.Rows.Count + 1), "J1:J" & (dt.Rows.Count + 1)}) txtnichtabrechneteKunden.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where verrechnet is null", "FMZOLL",,, "0") If IsNumeric(txtnichtabrechneteKunden.Text) AndAlso CInt(txtnichtabrechneteKunden.Text) > 0 Then btnDel_.Visible = True Else btnDel_.Visible = False End If End If End If pbPloseAnh_Proz.Value = 100 txtPloseAnh_Einarbeitung.Text = dt.Rows.Count & " / " & dt.Rows.Count lblPloseAnh_Proz.Text = "100.00 %" End If End Sub Function gen_SPEDBUCH_ByKdNr(KdNr As String, ByRef SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, Optional abrechnugsdatum As Date = Nothing, Optional Vermerk As String = "") Try If KdNr = "" Then Return False Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(KdNr) SPEDBUCH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch Dim OffertenNr As Integer Dim Abfertigungsart As Integer 'todo setzen!! OffertenNr = 95 : Abfertigungsart = 10 : SPEDBUCH.FilialenNr = 8001 Dim GJ = Now.Year If IsDate(abrechnugsdatum) AndAlso abrechnugsdatum > Now.AddYears(-5) Then GJ = cRKSV.getGJ(abrechnugsdatum, 19) SPEDBUCH.AbfertigungsNr = VERAG_PROG_ALLGEMEIN.cAllgemein.getMaxPosNrIncrement(SPEDBUCH.FilialenNr, GJ) SPEDBUCH.NewUNTER_NR() SPEDBUCH.Vermittler = AD.Ordnungsbegriff SPEDBUCH.VermittlerKundenNr = KdNr SPEDBUCH.VermittlerOffertenNr = OffertenNr SPEDBUCH.Abfertigungsdatum = abrechnugsdatum.ToShortDateString SPEDBUCH.Abfertigungsart = Abfertigungsart SPEDBUCH.Bar = 0 SPEDBUCH.Fakturiert = 1 SPEDBUCH.AnzahlSonstiges = 1 SPEDBUCH.Abfertigungsanzahl = 1 SPEDBUCH.AvisUhrzeit = Nothing SPEDBUCH.Umrechnungskurs = Nothing SPEDBUCH.veoerz_basbtg = Nothing SPEDBUCH.Sicherheitsbetrag = Nothing SPEDBUCH.Vermerk = Vermerk SPEDBUCH.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME Return SPEDBUCH.SAVE Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return False End Function Function gen_RECHNUNG_BySPEDBUCH(KdNr As String, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef RK_ID As Integer, ByRef Fusstext As String, ZahlungszielAusDebitor As Integer, sammelrechnung As Boolean, POSBNZ As Boolean) Try If KdNr = "" Then Return False Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(SPEDBUCH.VermittlerKundenNr) Dim KD As New VERAG_PROG_ALLGEMEIN.cKunde(SPEDBUCH.VermittlerKundenNr) Dim RG As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang Dim OffertenNr As Integer Dim Abfertigungsart As Integer 'TODO. Setzen! OffertenNr = 95 : Abfertigungsart = 10 RG.Firma_ID = 19 RG.FilialenNr = SPEDBUCH.FilialenNr RG.AbfertigungsNr = SPEDBUCH.AbfertigungsNr RG.SpeditionsbuchUnterNr = SPEDBUCH.UnterNr RG.UnterNr = RG.getMaxRGUnterNr() RG.Buchungsjahr = cRKSV.getGJ(SPEDBUCH.Abfertigungsdatum, RG.Firma_ID) 'If(Now.Month = 1, Now.Year - 1, Now.Year) RG.FilialenNr = SPEDBUCH.FilialenNr RG.Abfertigungsdatum = SPEDBUCH.Abfertigungsdatum If sammelrechnung Then RG.Sammelrechnung = 6 Else RG.Sammelrechnung = 0 End If RG.BelegartenKz = "AR" RG.BelegartenNr = 70 RG.BelegartenBez = "Rechnung" RG.Vorzeichen = "+" RG.VermittlerKundenNr = AD.AdressenNr RG.VermittlerLandKz = AD.LandKz RG.VermittlerName_1 = AD.Name_1 RG.VermittlerName_2 = AD.Name_2 RG.VermittlerOffertenNr = OffertenNr RG.VermittlerOrt = (If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")) RG.VermittlerStraße = AD.Straße RG.Rechnung_an = 3 RG.OffertenNr = OffertenNr RG.KundenNrZentrale = KD.KundenNrZentrale RG.RechnungsKundenNr = AD.AdressenNr RG.RechnungsLandKz = AD.LandKz RG.RechnungsName_1 = AD.Name_1 RG.RechnungsName_2 = AD.Name_2 RG.RechnungsOrt = (If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")) RG.RechnungsStraße = AD.Straße RG.RechnungsUstIdKz = AD.UstIdKz RG.RechnungsUstIdNr = AD.UstIdNr RG.RechnungsUstIdGeprüft = AD.UstIdGeprüft RG.Lastschrift = KD.Lastschrift RG.Kunden_SVS = KD.SVS RG.Steuerschlüssel = KD.Steuerschlüssel RG.Vorkasse = KD.Vorkasse RG.Vorlageprovision_Proz = KD.Vorlageprovision RG.Kreditaufwendungen_Proz = KD.Kreditaufwendungen RG.RechnungSprache = "DE" RG.Anlage_2 = "" RG.Anlage_3 = "" RG.Anlage_4 = "" RG.Anlage_5 = "" RG.Anlage_6 = "" RG.Packstücke_und_Warenbezeichnung = "NACHBERECHNUNG VON VERZUGSZINSEN" & vbNewLine & SPEDBUCH.Vermerk 'RG.EMailRechnungstext = Fusstext 'IN DIESEM FALL IMMER AUS DEBITOR NEHMEN!!! 'If Not IsDBNull(KD.Zahlungsziel) AndAlso IsNumeric(KD.Zahlungsziel) Then ' Dim Zahlungsziel As Integer = CInt(KD.Zahlungsziel) ' RG.Nettozahlungsziel = IIf(Zahlungsziel > 14, 14, KD.Zahlungsziel) 'End If RG.Nettozahlungsziel = ZahlungszielAusDebitor RG.SteuerpflichtigerGesamtbetrag = 0 RG.SteuerfreierGesamtbetrag = 0 RG.Status = 0 RG.[Vorkosten] = 0 RG.[Erlös] = 0 'RG.[Buchungsjahr] = 0 RG.[Währungscode] = "EUR" RG.ReErfZeitstempel = Now RG.Vermerk = SPEDBUCH.Vermerk RG.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME Dim sqlstr As String = "" Dim useNettogesamtbetrag As Boolean = False Dim OFFERTE As New VERAG_PROG_ALLGEMEIN.cOfferte(KdNr, OffertenNr, True) RG.LOAD_OFFERT_POSITIONEN() ' --> OFFERTE MIT ANZAHL >0 und Preis >0 Dim dt As New System.Data.DataTable cMDMZinsberechnung.GET_NICHTABGERECHNETE_ZB(dt, KdNr) For Each r In dt.Rows 'If r(0) AndAlso Not IsDBNull(r("zahlungsperiode_start")) AndAlso Not IsDBNull(r("zahlungsperiode_ende")) AndAlso IsDate(r("zahlungsperiode_start")) AndAlso IsDate(r("zahlungsperiode_ende")) Then ' zahlungsperiodeStart = CDate(r("zahlungsperiode_start")) ' zahlungsperiodeEnde = CDate(r("zahlungsperiode_ende")) 'End If 'If CDate(zahlungsperiodeStart) < CDate(r("zahlungsperiode_start")) Then zahlungsperiodeStart = CDate(r("zahlungsperiode_start")) 'If CDate(zahlungsperiodeEnde) > CDate(r("zahlungsperiode_ende")) Then zahlungsperiodeEnde = CDate(r("zahlungsperiode_ende")) Dim NettoBetrag As Double = r("zinsbetrag") Dim BruttoBetrag As Double = r("zinsbetrag") Dim id As Integer = r("id") Dim UstBetrag As Double = BruttoBetrag = NettoBetrag Dim LeistungsNr As Integer = 950 Dim LeistungsBezAdd As String = "" If r("buchungstext") <> "" Then LeistungsBezAdd &= id.ToString("D5") & "-" & r("buchungstext") If LeistungsBezAdd.Length > 30 Then LeistungsBezAdd = LeistungsBezAdd.ToString.Substring(0, 30) End If End If allPos(RG, OFFERTE, LeistungsNr, NettoBetrag, BruttoBetrag, UstBetrag, LeistungsBezAdd, id) Next Dim dtSt As DataTable = SQL.loadDgvBySql("SELECT TOP 1 isnull([Steuersatz %],0),isnull([Steuerbezeichnung],'') FROM [Steuertabelle] WHERE [Steuerschlüssel]='" & RG.Steuerschlüssel & "'", "FMZOLL") If dtSt IsNot Nothing AndAlso dtSt.Rows.Count > 0 Then RG.Steuersatz_Proz = dtSt.Rows(0)(0) End If cFakturierung.setGesamtBetraege(RG,, useNettogesamtbetrag) RG.Text = (cFakturierung.przRechnungstextTXT(RG, SPEDBUCH) & vbNewLine & cFakturierung.przRechnungstextZZ(RG)).Trim If POSBNZ Then Dim path As String = createZNBReport(dt, KdNr, CDate(SPEDBUCH.Abfertigungsdatum), RG) Dim fi As New System.IO.FileInfo(path) Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("MDM", "ZNB", RG.KundenNrZentrale, CDate(SPEDBUCH.Abfertigungsdatum).ToShortDateString, "", fi.Name & fi.Extension) If Not DS.uploadDataToDATENSERVER(path, fi.Name, fi.Extension,,,, True) Then MsgBox("Fehler beim Speichern: Datenserver! :" & RG.Firma_ID) End If Dim ANH As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangAnhaenge ANH.dsId = CInt(DS.da_id) ANH.Bezeichnung = "POS-Liste VERZUGSZINSEN " & CDate(SPEDBUCH.Abfertigungsdatum).ToShortDateString & fi.Extension RG.ANHAENGE.Add(ANH) If Not ANH.INSERT(RG.RK_ID, False) Then MsgBox("Fehler beim Anlegen des Anhangs für RK_ID " & RG.RK_ID) Else RG.Anlage_1 = "POS-Liste VERZUGSZINSEN" End If End If If RG.SAVE Then RK_ID = RG.RK_ID Return True Else Return False End If Catch ex As System.Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return "" End Function Private Function createZNBReport(dtZNBList As DataTable, KDNr As Integer, rechnungsdatum As Date, RG As cRechnungsausgang) As String Dim rpt As New rptPOS_ZNB(RG, RG.SteuerfreierGesamtbetrag + RG.SteuerpflichtigerGesamtbetrag) rpt.DataSource = dtZNBList rpt.lblRgDatum.Text = rechnungsdatum rpt.txtKunde.Text = KDNr & " " & New VERAG_PROG_ALLGEMEIN.cAdressen(KDNr).FullName rpt.Label2.Visible = False rpt.TextBox1.Visible = False rpt.Label4.Text = rechnungsdatum rpt.lblHeader.Text &= " " & RG.Vermerk If rpt.DataSource.rows.count = 0 Then Return "" Dim AD As New cAdressen(KDNr) Dim sum As Double = 0 rpt.txtKunde.Text = AD.FullName AddHandler rpt.Detail.Format, Sub() If Not IsDBNull(rpt.Fields.Item("clmnZinsen").Value) AndAlso Not IsNothing(rpt.Fields.Item("clmnZinsen").Value) AndAlso IsNumeric(rpt.Fields.Item("clmnZinsen").Value) Then sum += CDbl(rpt.Fields.Item("clmnZinsen").Value) End If End Sub AddHandler rpt.ReportFooter1.Format, Sub() rpt.txtBruttoGesSum.Text = sum.ToString("N2") End Sub Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG.AbfertigungsNr & ".pdf", ".pdf", , False) Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport rpt.Run(False) p.NeverEmbedFonts = "" p.Export(rpt.Document, tmpPath) rpt.Dispose() Return tmpPath End Function Function allPos(ByRef RG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, OFFERTE As VERAG_PROG_ALLGEMEIN.cOfferte, LeistungsNr As Integer, NettoBetrag As Double, BruttoBetrag As Double, Optional UstBetrag As Double = 0, Optional leistungsBez As String = "", Optional nachzahlungsID As Integer = -1) Try For Each o In OFFERTE.POSITIONEN If o.LeistungsNr = LeistungsNr Then Dim POS As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen() Dim LEISTUNG As New VERAG_PROG_ALLGEMEIN.cLeistungen(o.LeistungsNr) POS.LeistungsNr = o.LeistungsNr POS.LeistungsBez = IIf(leistungsBez <> "", leistungsBez, o.LeistungsBez) POS.BerechnungsartNr = o.BerechnungsartNr 'POS.Preis = BruttoBetrag POS.Anzahl = 1 POS.Steuerpflichtig = LEISTUNG.Steuerpflichtig 'Berrechnunggebühr wird immer vom übergebenen Betrag abzüglich UST berechnet (Nettobetrag), außer bei UTA! POS.BGebBgl = NettoBetrag - UstBetrag If POS.Steuerpflichtig Then POS.SteuerpflichtigerBetrag = NettoBetrag POS.Preis = NettoBetrag Else POS.SteuerfreierBetrag = BruttoBetrag POS.Preis = BruttoBetrag End If 'POS.NachzahlungsID = nachzahlungsID 'nix gut POS.BGebLeistungsNr = o.BGebLeistungsNr POS.BGebProzent = o.BGebProzent POS.BGebMinBetrag = o.BGebMinBetrag RG.POSITIONEN.Add(POS) Return True End If Next Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return False End Function Private Sub Button13_Click_1(sender As Object, e As EventArgs) Handles Button13.Click Dim frm As New frmZinsnachberechnung("tblMDM_Zinsberechnung", "FMZOLL", "") frm.ShowDialog(Me) End Sub Private Sub txtnichtabrechneteKunden_TextChanged(sender As Object, e As EventArgs) Handles txtnichtabrechneteKunden.TextChanged If txtnichtabrechneteKunden.Text <> "" AndAlso IsNumeric(txtnichtabrechneteKunden.Text) AndAlso txtnichtabrechneteKunden.Text > 0 Then btnZNBverrechnen.Enabled = True Else btnZNBverrechnen.Enabled = False End If End Sub Private Sub btnZNBverrechnen_Click(sender As Object, e As EventArgs) Handles btnZNBverrechnen.Click If txtZRbis.Text = "" OrElse Not IsDate(txtZRbis.Text) Then MsgBox("Abrechnungdatum (Zahlungen bis) setzen!") txtZRbis.Focus() Exit Sub End If Dim LimitBEtrag As Integer = -1 If txtAbBetragAbrechnen.Text <> "" AndAlso IsNumeric(txtAbBetragAbrechnen.Text) Then LimitBEtrag = CInt(txtAbBetragAbrechnen.Text) End If Dim dt_Main As DataTable = SQL.loadDgvBySql_Param("Select [kundenNr],SUM([zinsbetrag]) as Zinsbetrag,max(belegZahlungsziel) as belegZahlungsziel , zahlungsperiode_start,zahlungsperiode_ende FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where [verrechnet] Is null group by [kundenNr], zahlungsperiode_start, zahlungsperiode_ende" & IIf(LimitBEtrag > 0, " having SUM([zinsbetrag]) >= " & LimitBEtrag, ""), "FMZOLL") If dt_Main.Rows.Count > 0 Then Dim kundenNr As String = "" If dt_Main.Columns.Contains("kundenNr") Then Dim dtNew As DataTable = dt_Main.Rows.Cast(Of DataRow)().Where(Function(row) Not row.ItemArray.All(Function(field) field Is DBNull.Value Or field.Equals(""))).CopyToDataTable() If dtNew.Rows.Count > 0 Then Dim counter = 0 For Each r As DataRow In dtNew.Rows kundenNr &= r.Item(0) counter = counter + 1 If (dtNew.Rows.Count <> 0 And counter <> dtNew.Rows.Count) Then kundenNr &= "," End If Next End If End If Dim sqlStringFehlendeOffertenNr = "select KundenNr from Offertenpositionen where KundenNr in (" & kundenNr & ") GROUP by KundenNr EXCEPT select KundenNr from Offertenpositionen where LeistungsNr = 950 and OffertenNr = 95 and KundenNr in (" & kundenNr & ") GROUP by KundenNr" Dim dtfehlendeOfferten As DataTable = SQL.loadDgvBySql(sqlStringFehlendeOffertenNr, "FMZOLL") If dtfehlendeOfferten.Rows.Count > 0 Then 'nicht mehr fragen, sondern einfach anlegen! 'If Not vbYes = MsgBox("Es fehlen bei " & dtfehlendeOfferten.Rows.Count & " Kunden das Offert 95, bitte hinterlegen ansonsten wird die Position nicht verrechnet!" & vbNewLine & "Möchten Sie trotzdem fortfahren!", vbYesNoCancel) Then ' cProgramFunctions.genExcelCSVFromDT(dtfehlendeOfferten, True) ' Exit Sub 'End If For Each R As DataRow In dtfehlendeOfferten.Rows If Not IsDBNull(R.Item("KundenNr")) AndAlso R.Item("KundenNr") IsNot Nothing AndAlso IsNumeric(R.Item("KundenNr")) Then Dim o As New VERAG_PROG_ALLGEMEIN.cOfferte(R.Item("KundenNr"), 95, False) o.Art = "Neuanlage" o.SAVE() 'speichern o.LOAD_POSITIONEN() 'positionen Laden If o.POSITIONEN.Count = 0 Then 'wenn keine POS --> neues Offert o.RESET_STANDARTOFFERTEN_FIRMA(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME, "", "DE") '--> Standartofferten laden End If End If Next End If If dt_Main.Rows.Count = 0 Then MsgBox("keine zu verrechnenden Datensätze!") Exit Sub End If If vbYes = MsgBox("Möchten Sie für " & dt_Main.Rows.Count & " Kunden die Zinsbelastung mit Abrechnungsdatum " & CDate(txtZRbis.Text).ToShortDateString & " verrechnen?" & vbNewLine & "Es werden nur Rechnungen erstellt, deren Gesamtbelastung über " & LimitBEtrag & " EUR liegt!", vbYesNoCancel) Then Dim cnt As Integer = 0 For Each R In dt_Main.Rows Dim startDate As String = CDate(R("zahlungsperiode_start")).ToShortDateString Dim EndDate As String = CDate(R("zahlungsperiode_ende")).ToShortDateString Dim vermerk As String = "Zahlungen " & startDate & " - " & EndDate 'max 50 Zeichen!!! Dim Fußtext As String = "" 'Fußtext = "Sehr geehrte Damen und Herren," & vbNewLine & " ' Sie erhalten unten eine Aufstellung jener Rechnungen, deren Zahlungseingänge nach der gesetzten Zahlungsfrist von 14 Tagen gelegen ist." & vbNewLine & " ' Bitte haben Sie Verständnis dafür, dass wir Ihnen die dadurch entstehenden Verzugszinsen nachberechnen müssen." & vbNewLine & " ' Wir erwarten Ihre Zahlung über den untenstehenden Endbetrag wieder innerhalb von 14 Tagen." Dim verarbOK As Boolean = True Dim SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch = Nothing Dim RK_ID As Integer = -1 If Not gen_SPEDBUCH_ByKdNr(R("kundenNr"), SPEDBUCH, CDate(txtZRbis.Text).ToShortDateString, vermerk) Then verarbOK = False If Not gen_RECHNUNG_BySPEDBUCH(R("kundenNr"), SPEDBUCH, RK_ID, Fußtext, R("belegZahlungsziel"), cbxZBalsSR.Checked, cbxPOSBNZerstellen.Checked) Then verarbOK = False If verarbOK Then SQL.doSQL("UPDATE [tblMDM_Zinsberechnung] SET [verrechnet]=GETDATE(), RK_ID = " & RK_ID & " WHERE [verrechnet] Is null And kundenNr='" & R("kundenNr") & "' ", "FMZOLL") End If txtPloseAnh_Einarbeitung.Text = cnt & " / " & dt_Main.Rows.Count Dim proz As Double = (cnt / dt_Main.Rows.Count) * 100 pbPloseAnh_Proz.Value = proz lblPloseAnh_Proz.Text = proz.ToString("N2") & " %" 'GroupBox12.Refresh() My.Application.DoEvents() cnt += 1 Next txtnichtabrechneteKunden.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where verrechnet is null", "FMZOLL",,, "0") End If pbPloseAnh_Proz.Value = 100 txtPloseAnh_Einarbeitung.Text = dt_Main.Rows.Count & " / " & dt_Main.Rows.Count lblPloseAnh_Proz.Text = "100.00 %" End If End Sub Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click Try If txtUID_Jahr.Text <> "" AndAlso IsNumeric(txtUID_Jahr.Text) AndAlso txtUID_Jahr.Text.Length = 4 Then If txtUID_Monat.Text = "" OrElse txtUID_Monat.Text <> "" AndAlso IsNumeric(txtUID_Monat.Text) AndAlso CInt(txtUID_Monat.Text) > 0 AndAlso CInt(txtUID_Monat.Text) < 13 Then Dim SQL_UID As String = "SELECT [uid_KundenNr] as KdNr , Adressen.[Name 1],[uid_UstIdKz] as UstIdKz,[uid_UstIdNr] as UstIdnr, case when [uid_valid] = 1 then 'GUELTIG' else 'UNGUELTIG' end as Ergebnis, cast([uid_Datum] as date) as Pruefdatum,Convert(varchar(8), [uid_Datum], 108) As Pruefzeit, [tblUIDPruefung].[firma] as Firma, cast(Adressen.UstIdGeprüft as date) as [letzte Prüfung], uid_pruefungstool as Quelle, uid_Sachbearbeiter as Sachbearbeiter, Filialen.FilialenNr, isnull(uid_typ,'UID') as Typ FROM [VERAG].[dbo].[tblUIDPruefung] inner join Adressen on Adressen.AdressenNr = [uid_KundenNr] inner Join kunden On KundenNr=AdressenNr inner join Filialen On Filialen.FilialenNr=Kunden.FilialenNr where YEAR(uid_Datum) = " & txtUID_Jahr.Text & IIf(txtUID_Monat.Text <> "", " AND MONTH(uid_Datum) = " & txtUID_Monat.Text, "") & IIf(cbxFirmaUID._value <> "", " And Filialen.Firma = '" & cbxFirmaUID._value & "'", "") & IIf(cbx_nur_ungueltige.Checked, " AND [uid_valid] = 0 ", "") & " ORDER BY Filialen.FilialenNr " Me.Cursor = Cursors.WaitCursor Dim dt_UID As DataTable = SQL.loadDgvBySql(SQL_UID, "FMZOLL") If dt_UID.Rows.Count > 0 Then cProgramFunctions.genExcelFromDT_NEW(dt_UID) Me.Cursor = Cursors.Default Else MsgBox("keine Daten für den ausgewählten Zeitraum!") Me.Cursor = Cursors.Default End If End If End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Me.Cursor = Cursors.Default End Try End Sub Private Sub txtUID_Monat_TextChanged(sender As Object, e As EventArgs) Handles txtUID_Monat.TextChanged countIDPruefungen() End Sub Private Sub cbxFirmaUID_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxFirmaUID.SelectedIndexChanged countIDPruefungen() End Sub Private Sub countIDPruefungen() btn_fehlendeUID.Tag = "" If txtUID_Jahr.Text <> "" AndAlso IsNumeric(txtUID_Jahr.Text) AndAlso txtUID_Jahr.Text.Length = 4 Then If txtUID_Monat.Text = "" OrElse txtUID_Monat.Text <> "" AndAlso IsNumeric(txtUID_Monat.Text) AndAlso CInt(txtUID_Monat.Text) > 0 AndAlso CInt(txtUID_Monat.Text) < 13 Then Dim dt As New System.Data.DataTable Dim Month As Integer = CInt(txtUID_Monat.Text).ToString("D2") Dim Year As Integer = CInt(txtUID_Jahr.Text) Dim datum = CDate("15." & Month & "." & Year).AddMonths(-1) dt = VERAG_PROG_ALLGEMEIN.cUIDPruefung.get_zupruefendeKunden(-1, datum, cbxFirmaUID._value) lblUID_zupruefen.Text = "nicht geprüft: " & dt.Rows.Count If dt.Rows.Count > 0 Then Dim path = VERAG_PROG_ALLGEMEIN.cProgramFunctions.genExcelFromDT_NEW(dt,,,,, False, "fehlende UID-Prüfungen_" & IIf(cbxFirmaUID._value <> "", cbxFirmaUID._value, "ALLE") & "_" & datum.ToShortDateString) btn_fehlendeUID.Tag = path btn_fehlendeUID.Visible = True Else btn_fehlendeUID.Visible = False End If End If End If End Sub Private Sub btnWikiStatusmails_Click(sender As Object, e As EventArgs) Handles btnWikiStatusmails.Click Dim webAddress As String = "https://wiki.verag.ag/software/sdl/zinsnachberechnung" Process.Start(webAddress) End Sub Private Sub btnDel__Click(sender As Object, e As EventArgs) Handles btnDel_.Click If vbYes = MsgBox("Möchten Sie die alle nicht verrechneten Zinsbelastungen löschen?", vbYesNoCancel) Then If SQL.doSQL("delete from [tblMDM_Zinsberechnung] WHERE [verrechnet] Is null", "FMZOLL") Then txtnichtabrechneteKunden.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where verrechnet is null", "FMZOLL",,, "0") End If End If End Sub Private Sub btn_fehlendeUID_Click(sender As Object, e As EventArgs) Handles btn_fehlendeUID.Click If sender.tag <> "" Then Try : Process.Start(sender.tag) : Catch : End Try End If End Sub Private Sub Button15_Click(sender As Object, e As EventArgs) Handles btnBelegeOhnePOS.Click, btnfehlendeBelege.Click, btnfortlRENr.Click Try If txtRE_Jahr.Text <> "" AndAlso IsNumeric(txtRE_Jahr.Text) AndAlso txtRE_Jahr.Text.Length = 4 Then If txtRE_Monat.Text = "" OrElse txtRE_Monat.Text <> "" AndAlso IsNumeric(txtRE_Monat.Text) AndAlso CInt(txtRE_Monat.Text) > 0 AndAlso CInt(txtRE_Monat.Text) < 13 Then Dim Bezeichnung As String = "" Dim SQL_RE As String = "" Select Case sender.Name Case "btnfehlendeBelege" If cbxFirma_RE._value = "" Then MsgBox("Es muss eine Firma angegeben werden!") : Exit Sub If CInt(txtRE_Jahr.Text) < 2026 Then MsgBox("Erst ab Jahr 2026 möglich!") : Exit Sub Bezeichnung = "fehlende BELEGE von " & cbxFirma_RE.SelectedItem.Text & " Zeitraum: " & txtRE_Monat.Text & "/" & txtRE_Jahr.Text SQL_RE = "DECLARE @Month INT = " & txtRE_Monat.Text & "; DECLARE @Year INT = " & txtRE_Jahr.Text & "; DECLARE @FirmaID INT = " & cbxFirma_RE._value & "; SELECT DISTINCT REPLACE( REPLACE( REPLACE(da.da_name, 'Rechnung_', ''), '.pdf', ''), 'Gutschrift_', '') AS RechnungsNr, da_name as Bezeichnung, da_date as Erstellungszeitpunkt FROM tblDatenarchiv da WHERE da.da_kategorie = 'Rechnungen' AND da.da_ordner = 'Firma_' + CAST(@FirmaID AS VARCHAR) AND da.da_uOrdner1 = CAST(@Year AS VARCHAR) + '_' + CAST(@Month AS VARCHAR) AND LEFT(da.da_name, 6) <> 'Sammel' AND NOT EXISTS ( SELECT 1 FROM Rechnungsausgang ra WHERE ra.RechnungsNr = REPLACE( REPLACE( REPLACE(da.da_name, 'Rechnung_', ''), '.pdf', ''), 'Gutschrift_', '') AND MONTH(ra.RechnungsDatum) = @Month AND YEAR(ra.RechnungsDatum) = @Year AND ra.Firma_ID = @FirmaID AND ra.Sammelrechnung = 0 ) UNION SELECT DISTINCT REPLACE( REPLACE(da.da_name, 'Sammelrechnung_', ''), '.pdf', '') AS RechnungsNr, da_name as Bezeichnung, da_date as Erstellungszeitpunkt FROM tblDatenarchiv da WHERE da.da_kategorie = 'Rechnungen' AND da.da_ordner = 'Firma_' + CAST(@FirmaID AS VARCHAR) AND da.da_uOrdner1 = CAST(@Year AS VARCHAR) + '_' + CAST(@Month AS VARCHAR) AND LEFT(da.da_name, 6) = 'Sammel' AND NOT EXISTS ( SELECT 1 FROM Rechnungsausgang ra WHERE ra.RechnungsNr = REPLACE( REPLACE(da.da_name, 'Sammelrechnung_', ''), '.pdf', '') AND MONTH(ra.RechnungsDatum) = @Month AND YEAR(ra.RechnungsDatum) = @Year AND ra.Firma_ID = @FirmaID AND ra.Sammelrechnung <> 0 );" Case "btnBelegeOhnePOS" Bezeichnung = "BELEGE ohne Positionen" & IIf(cbxFirma_RE._value <> "", " von " & cbxFirma_RE.SelectedItem.Text, "") & " Zeitraum: " & txtRE_Monat.Text & "/" & txtRE_Jahr.Text SQL_RE = "Select * From Rechnungsausgang r Where YEAR(r.RechnungsDatum) = " & txtRE_Jahr.Text & " AND MONTH(r.RechnungsDatum) = " & txtRE_Monat.Text & " AND Not EXISTS( SELECT 1 From RechnungsausgangPositionen p Where p.RK_ID = r.RK_ID) " & IIf(cbxFirma_RE._value <> "", " AND r.[Firma_ID] = " & cbxFirma_RE._value, "") Case "btnfortlRENr" If cbxFirma_RE._value = "" Then MsgBox("Es muss eine Firma angegeben werden!") : Exit Sub Dim ignoreMonth As Boolean = False Dim InfoText As String = "Möchten Sie die fortlaufende Re-Nr für das Gesamtjahr " & txtRE_Jahr.Text & " prüfen?" If Not vbYes = MsgBox(InfoText, vbYesNoCancel) Then Exit Sub Bezeichnung = "Lücken in der fortl. Belegnummerierung von " & cbxFirma_RE.SelectedItem.Text & " Zeitraum: " & IIf(Not ignoreMonth, txtRE_Monat.Text & "/" & txtRE_Jahr.Text, txtRE_Jahr.Text) '----OLD------------- SQL_RE = "WITH Nummern AS ( SELECT RechnungsNr, LEAD(RechnungsNr) OVER (ORDER BY RechnungsNr) AS NextRechnungsNr FROM Rechnungsausgang WHERE Firma_ID = " & cbxFirma_RE._value & " AND YEAR(RechnungsDatum) = " & txtRE_Jahr.Text & IIf(Not ignoreMonth, " and Month(RechnungsDatum) = " & txtRE_Monat.Text, "") & " GROUP BY RechnungsNr ) SELECT RechnungsNr + 1 AS FehlendeVon, NextRechnungsNr - 1 AS FehlendeBis FROM Nummern WHERE NextRechnungsNr IS NOT NULL AND NextRechnungsNr > RechnungsNr + 1 ORDER BY FehlendeVon;" '----NEW------------- SQL_RE = "WITH Rechnungen AS ( SELECT RechnungsNr, MIN(CAST(RechnungsDatum AS date)) AS Rechnungsdatum FROM Rechnungsausgang WHERE Firma_ID = " & cbxFirma_RE._value & " AND YEAR(RechnungsDatum) = " & txtRE_Jahr.Text & " GROUP BY RechnungsNr ), Nummern AS ( SELECT RechnungsNr, Rechnungsdatum, LEAD(RechnungsNr) OVER (ORDER BY RechnungsNr) AS NextRechnungsNr, LEAD(Rechnungsdatum) OVER (ORDER BY RechnungsNr) AS NextRechnungsdatum FROM Rechnungen ) SELECT RechnungsNr, Rechnungsdatum, NextRechnungsNr, NextRechnungsdatum, RechnungsNr + 1 AS FehlendeVon, NextRechnungsNr - 1 AS FehlendeBis FROM Nummern WHERE NextRechnungsNr IS NOT NULL AND NextRechnungsNr > RechnungsNr + 1 ORDER BY FehlendeVon;" End Select Me.Cursor = Cursors.WaitCursor Dim dt_RE As DataTable = SQL.loadDgvBySql(SQL_RE, "FMZOLL") If dt_RE.Rows.Count > 0 Then cProgramFunctions.genExcelFromDT_NEW(dt_RE,,, Bezeichnung,,, True) Me.Cursor = Cursors.Default Else MsgBox("keine Daten für den ausgewählten Zeitraum!") Me.Cursor = Cursors.Default End If End If End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) Me.Cursor = Cursors.Default End Try End Sub Private Sub Button15_Click_1(sender As Object, e As EventArgs) Handles Button15.Click If txtMonateSyskavergleich.Text <> "" AndAlso IsNumeric(txtMonateSyskavergleich.Text) Then Dim SQLString = "select RechnungsKundenNr, Adressen.[Name 1], Kunden.FilialenNr, MAX(cast(RechnungsDatum as Date)) as aktuellsteRE from Rechnungsausgang inner join Kunden on Kunden.KundenNr = Rechnungsausgang.RechnungsKundenNr inner join Adressen on Adressen.AdressenNr = Kunden.KundenNr inner join Filialen On Filialen.FilialenNr=Kunden.FilialenNr where cast(RechnungsDatum as date) >= DATEADD(MONTH,-" & txtMonateSyskavergleich.Text & ", GETDATE()) and Kunden.FiBuSchnittstelle = 0 and Kunden.FiBuSchnittstelleNr is null and Adressen.Auswahl = 'A'" & IIf(cboFirma_FIBUFilialen._value <> "", " And Filialen.Firma = '" & cboFirma_FIBUFilialen._value & "'", "") & " group by RechnungsKundenNr, Adressen.[Name 1], Kunden.FilialenNr order by MAX(cast(RechnungsDatum as Date)) " Me.Cursor = Cursors.WaitCursor Dim dt_RE As DataTable = SQL.loadDgvBySql(SQLString, "FMZOLL") If dt_RE.Rows.Count > 0 Then cProgramFunctions.genExcelFromDT_NEW(dt_RE,,, "Kunden ohne FIBU-Filiale mit Belegen der letzten " & txtMonateSyskavergleich.Text & " Monate",,, True) Me.Cursor = Cursors.Default Else MsgBox("keine Daten für den ausgewählten Zeitraum!") Me.Cursor = Cursors.Default End If End If End Sub Private Sub Button16_Click(sender As Object, e As EventArgs) Handles btn_Erloeskkonten.Click, btn_Laender.Click, btn_ZV.Click If txtJahr_FIBU.Text <> "" AndAlso IsNumeric(txtJahr_FIBU.Text) AndAlso txtJahr_FIBU.TextLength = 4 Then Dim SQLString = "" Dim Bezeichnung As String = "" Select Case sender.Name Case "btn_Erloeskkonten" Bezeichnung = "Erlöskontenstatistik " & txtJahr_FIBU.Text SQLString = "declare @Jahr as Integer = " & txtJahr_FIBU.Text & " declare @Vorjahr as Integer = @Jahr - 1;WITH Daten AS ( SELECT bz.i_konto, k.c_name, YEAR(bz.d_beleg) AS Jahr, MONTH(bz.d_beleg) AS Monat, CASE WHEN bz.c_sollhabenkz = 'S' THEN bz.eur_betrag * -1 ELSE bz.eur_betrag END AS Betrag FROM FIBU2.dbo.fibu_belegzeile bz INNER JOIN FIBU2.dbo.fibu_konto k ON bz.i_konto = k.i_konto WHERE bz.i_firm_refid = 19 AND k.i_firm_refid = 19 AND bz.eur_betrag <> 0 AND bz.c_kennung = 'KO' AND bz.i_konto BETWEEN 4000 AND 4999 AND YEAR(bz.d_beleg) IN (@Jahr, @Vorjahr) ), Summen AS ( SELECT i_konto, c_name, Jahr, Monat, SUM(Betrag) AS Betrag FROM Daten GROUP BY i_konto, c_name, Jahr, Monat ), PivotDaten AS ( SELECT i_konto, c_name, Jahr, ISNULL([1],0) AS Jan, ISNULL([2],0) AS Feb, ISNULL([3],0) AS Mär, ISNULL([4],0) AS Apr, ISNULL([5],0) AS Mai, ISNULL([6],0) AS Jun, ISNULL([7],0) AS Jul, ISNULL([8],0) AS Aug, ISNULL([9],0) AS Sep, ISNULL([10],0) AS Okt, ISNULL([11],0) AS Nov, ISNULL([12],0) AS Dez FROM Summen PIVOT ( SUM(Betrag) FOR Monat IN ( [1],[2],[3],[4],[5],[6], [7],[8],[9],[10],[11],[12] ) ) p ), Jahreswerte AS ( SELECT*, Jan + Feb + Mär + Apr + Mai + Jun + Jul + Aug + Sep + Okt + Nov + Dez AS Gesamtsumme FROM PivotDaten ) -- Aktuelles Jahr + Vorjahr SELECT Konto, Bezeichnung, CAST(Jahr AS VARCHAR(10)) AS Zeile,Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt, Nov,Dez,Gesamtsumme FROM ( SELECT i_konto AS Konto, c_name AS Bezeichnung, Jahr,Jan,Feb,Mär,Apr,Mai,Jun,Jul, Aug,Sep,Okt,Nov,Dez,Gesamtsumme FROM Jahreswerte ) x UNION ALL -- Prozentuale Veränderung SELECT a.i_konto AS Konto, a.c_name AS Bezeichnung, '% Veränderung' AS Zeile, CASE WHEN v.Jan = 0 THEN 100 ELSE ROUND((a.Jan - v.Jan) * 100.0 / v.Jan, 2) END AS Jan, CASE WHEN v.Feb = 0 THEN 100 ELSE ROUND((a.Feb - v.Feb) * 100.0 / v.Feb, 2) END AS Feb, CASE WHEN v.Mär = 0 THEN 100 ELSE ROUND((a.Mär - v.Mär) * 100.0 / v.Mär, 2) END AS Mär, CASE WHEN v.Apr = 0 THEN 100 ELSE ROUND((a.Apr - v.Apr) * 100.0 / v.Apr, 2) END AS Apr, CASE WHEN v.Mai = 0 THEN 100 ELSE ROUND((a.Mai - v.Mai) * 100.0 / v.Mai, 2) END AS Mai, CASE WHEN v.Jun = 0 THEN 100 ELSE ROUND((a.Jun - v.Jun) * 100.0 / v.Jun, 2) END AS Jun, CASE WHEN v.Jul = 0 THEN 100 ELSE ROUND((a.Jul - v.Jul) * 100.0 / v.Jul, 2) END AS Jul, CASE WHEN v.Aug = 0 THEN 100 ELSE ROUND((a.Aug - v.Aug) * 100.0 / v.Aug, 2) END AS Aug, CASE WHEN v.Sep = 0 THEN 100 ELSE ROUND((a.Sep - v.Sep) * 100.0 / v.Sep, 2) END AS Sep, CASE WHEN v.Okt = 0 THEN 100 ELSE ROUND((a.Okt - v.Okt) * 100.0 / v.Okt, 2) END AS Okt, CASE WHEN v.Nov = 0 THEN 100 ELSE ROUND((a.Nov - v.Nov) * 100.0 / v.Nov, 2) END AS Nov, CASE WHEN v.Dez = 0 THEN 100 ELSE ROUND((a.Dez - v.Dez) * 100.0 / v.Dez, 2) END AS Dez, CASE WHEN v.Gesamtsumme = 0 THEN 100 ELSE ROUND((a.Gesamtsumme - v.Gesamtsumme) * 100.0 / v.Gesamtsumme, 2) END AS Gesamtsumme FROM Jahreswerte a INNER JOIN Jahreswerte v ON a.i_konto = v.i_konto AND a.Jahr = @Jahr AND v.Jahr = @Vorjahr ORDER BY Konto, Zeile desc" Case "btn_Laender" Bezeichnung = "Länderstatistik " & txtJahr_FIBU.Text SQLString = "declare @Jahr as Integer = " & txtJahr_FIBU.Text & " declare @VJ_Jahr as Integer = @Jahr - 1 declare @c_landid as NVARCHAR(50) = '" & txtLand.Text & "'; WITH Base AS ( SELECT k.c_landid, o.eur_bruttobetrag, YEAR(o.d_rechnung) AS jahr, MONTH(o.d_rechnung) AS monat FROM [FIBU2].dbo.op_debitor o INNER JOIN [FIBU2].dbo.fibu_konto k ON o.i_personenkonto = k.i_konto WHERE o.i_firm_refid = 19 AND k.i_firm_refid = 19 AND ISNULL(o.eur_bruttobetrag,0) <> 0 " & IIf(txtLand.Text <> "", "AND k.c_landid = @c_landid", "") & " AND YEAR(o.d_rechnung) IN (@Jahr, @VJ_Jahr)), Agg AS ( SELECT c_landid,jahr,monat,SUM(eur_bruttobetrag) AS betrag FROM Base GROUP BY c_landid, jahr, monat), PivotMonate AS ( SELECT * FROM Agg PIVOT ( SUM(betrag) FOR monat IN ( [1],[2],[3],[4],[5],[6], [7],[8],[9],[10],[11],[12] ) ) p ), Final AS ( SELECT c_landid, -- aktuelles Jahr SUM(CASE WHEN jahr = @Jahr THEN ISNULL([1],0) ELSE 0 END) AS akt_Jan, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([2],0) ELSE 0 END) AS akt_Feb, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([3],0) ELSE 0 END) AS akt_Mär, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([4],0) ELSE 0 END) AS akt_Apr, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([5],0) ELSE 0 END) AS akt_Mai, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([6],0) ELSE 0 END) AS akt_Jun, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([7],0) ELSE 0 END) AS akt_Jul, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([8],0) ELSE 0 END) AS akt_Aug, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([9],0) ELSE 0 END) AS akt_Sep, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([10],0) ELSE 0 END) AS akt_Okt, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([11],0) ELSE 0 END) AS akt_Nov, SUM(CASE WHEN jahr = @Jahr THEN ISNULL([12],0) ELSE 0 END) AS akt_Dez, -- Vorjahr SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([1],0) ELSE 0 END) AS vj_Jan, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([2],0) ELSE 0 END) AS vj_Feb, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([3],0) ELSE 0 END) AS vj_Mär, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([4],0) ELSE 0 END) AS vj_Apr, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([5],0) ELSE 0 END) AS vj_Mai, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([6],0) ELSE 0 END) AS vj_Jun, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([7],0) ELSE 0 END) AS vj_Jul, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([8],0) ELSE 0 END) AS vj_Aug, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([9],0) ELSE 0 END) AS vj_Sep, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([10],0) ELSE 0 END) AS vj_Okt, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([11],0) ELSE 0 END) AS vj_Nov, SUM(CASE WHEN jahr = @VJ_Jahr THEN ISNULL([12],0) ELSE 0 END) AS vj_Dez FROM PivotMonate GROUP BY c_landid ) -- ===================================== -- AKTUELLES JAHR -- ===================================== SELECT c_landid,CAST(@Jahr AS VARCHAR(10)) AS Kennzahl,akt_Jan AS Jan,akt_Feb AS Feb,akt_Mär AS Mär,akt_Apr AS Apr,akt_Mai AS Mai,akt_Jun AS Jun, akt_Jul AS Jul,akt_Aug AS Aug,akt_Sep AS Sep,akt_Okt AS Okt,akt_Nov AS Nov,akt_Dez AS Dez,akt_Jan + akt_Feb + akt_Mär + akt_Apr + akt_Mai + akt_Jun + akt_Jul + akt_Aug + akt_Sep + akt_Okt + akt_Nov + akt_Dez AS Gesamt FROM Final UNION ALL SELECT c_landid,CAST(@VJ_Jahr AS VARCHAR(10)), vj_Jan,vj_Feb,vj_Mär,vj_Apr,vj_Mai,vj_Jun,vj_Jul,vj_Aug,vj_Sep,vj_Okt,vj_Nov,vj_Dez,vj_Jan + vj_Feb + vj_Mär + vj_Apr +vj_Mai + vj_Jun + vj_Jul + vj_Aug +vj_Sep + vj_Okt + vj_Nov + vj_Dez FROM Final UNION ALL SELECT c_landid, '% Veränderung', CASE WHEN vj_Jan = 0 THEN 100 ELSE akt_Jan * 100.0 / vj_Jan END, CASE WHEN vj_Feb = 0 THEN 100 ELSE akt_Feb * 100.0 / vj_Feb END, CASE WHEN vj_Mär = 0 THEN 100 ELSE akt_Mär * 100.0 / vj_Mär END, CASE WHEN vj_Apr = 0 THEN 100 ELSE akt_Apr * 100.0 / vj_Apr END, CASE WHEN vj_Mai = 0 THEN 100 ELSE akt_Mai * 100.0 / vj_Mai END, CASE WHEN vj_Jun = 0 THEN 100 ELSE akt_Jun * 100.0 / vj_Jun END, CASE WHEN vj_Jul = 0 THEN 100 ELSE akt_Jul * 100.0 / vj_Jul END, CASE WHEN vj_Aug = 0 THEN 100 ELSE akt_Aug * 100.0 / vj_Aug END, CASE WHEN vj_Sep = 0 THEN 100 ELSE akt_Sep * 100.0 / vj_Sep END, CASE WHEN vj_Okt = 0 THEN 100 ELSE akt_Okt * 100.0 / vj_Okt END, CASE WHEN vj_Nov = 0 THEN 100 ELSE akt_Nov * 100.0 / vj_Nov END, CASE WHEN vj_Dez = 0 THEN 100 ELSE akt_Dez * 100.0 / vj_Dez END, CASE WHEN ( vj_Jan + vj_Feb + vj_Mär + vj_Apr + vj_Mai + vj_Jun + vj_Jul + vj_Aug + vj_Sep + vj_Okt + vj_Nov + vj_Dez ) = 0 THEN 100 ELSE ( (akt_Jan + akt_Feb + akt_Mär + akt_Apr + akt_Mai + akt_Jun + akt_Jul + akt_Aug + akt_Sep + akt_Okt + akt_Nov + akt_Dez) * 100.0 / (vj_Jan + vj_Feb + vj_Mär + vj_Apr + vj_Mai + vj_Jun + vj_Jul + vj_Aug + vj_Sep + vj_Okt + vj_Nov + vj_Dez) ) END FROM Final ORDER BY c_landid, Kennzahl desc;" Case "btn_ZV" Bezeichnung = "Zahlungsverhalten " & txtJahr_FIBU.Text & " von " & txtKundeNrVon.Text & " - " & txtKundeNrBis.Text & " " & IIf(txtLand.Text <> "", txtLand.Text, "") SQLString = "declare @Jahr as Integer = " & txtJahr_FIBU.Text & "; WITH BaseData AS ( SELECT o.i_personenkonto, o.d_rechnung, o.d_netto, o.d_zahlung,ISNULL(o.eur_zahlung, 0) AS eur_zahlung,DATEDIFF(DAY, o.d_rechnung, o.d_netto) AS ZZ_Tage,DATEDIFF(DAY, o.d_rechnung, o.d_zahlung) AS ZOP_Tage, MONTH(o.d_zahlung) AS Monat FROM [FIBU2].dbo.op_debitor o INNER JOIN [FIBU2].dbo.fibu_konto k ON o.i_personenkonto = k.i_konto WHERE o.i_firm_refid = 19 AND k.i_firm_refid = 19 AND ISNULL(o.eur_zahlung, 0) <> 0 " & IIf(txtKundeNrVon.Text <> "" AndAlso IsNumeric(txtKundeNrVon.Text) AndAlso txtKundeNrBis.Text <> "" AndAlso IsNumeric(txtKundeNrBis.Text), " AND o.i_personenkonto BETWEEN " & txtKundeNrVon.Text & " AND " & txtKundeNrBis.Text, "") & " AND Year(o.d_zahlung) = @Jahr " & IIf(txtLand.Text <> "", " AND ISNULL(k.c_landid, '') = '" & txtLand.Text & "'", "") & "), Agg AS ( SELECT Monat,i_personenkonto as Konto,COUNT(*) AS Anzahl,SUM(-eur_zahlung) AS Zahlung,SUM(ZZ_Tage) AS ZZ_Tage,SUM(ZOP_Tage) AS ZOP_Tage FROM BaseData GROUP BY Monat, i_personenkonto ) SELECT Kennzahl,i_personenkonto as Konto,[1] AS Jan,[2] AS Feb,[3] AS Mär,[4] AS Apr,[5] AS Mai,[6] AS Jun,[7] AS Jul,[8] AS Aug,[9] AS Sep,[10] AS Okt,[11] AS Nov,[12] AS Dez, Isnull([1],0) + isnull([2],0) + isnull([3],0) + isnull([4],0) + isnull([5],0) + isnull([6],0) + isnull([7],0) + isnull([8],0) + isnull([9],0) + isnull([10],0) + isnull([11],0) + isnull([12],0) AS Gesamtsumme FROM ( SELECT Monat, 'Zahlung' AS Kennzahl,i_personenkonto, SUM(-eur_zahlung) AS Wert FROM BaseData GROUP BY Monat,i_personenkonto UNION ALL SELECT Monat, 'Anzahl',i_personenkonto, COUNT(*) FROM BaseData GROUP BY Monat,i_personenkonto UNION ALL SELECT Monat, 'Zahlungsziel',i_personenkonto, SUM(ZZ_Tage) / COUNT(*) FROM BaseData GROUP BY Monat,i_personenkonto UNION ALL SELECT Monat, 'Zahlung nach Tagen',i_personenkonto, SUM(ZOP_Tage) / COUNT(*) FROM BaseData GROUP BY Monat,i_personenkonto UNION ALL SELECT Monat, 'Zahlungsverspätung',i_personenkonto, (SUM(ZOP_Tage) / COUNT(*)) - (SUM(ZZ_Tage) / COUNT(*)) FROM BaseData GROUP BY Monat,i_personenkonto ) x PIVOT ( SUM(Wert) FOR Monat IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) ) p order by p.i_personenkonto, p.Kennzahl;" End Select If SQLString <> "" Then Me.Cursor = Cursors.WaitCursor Dim dt_RE As DataTable = SQL.loadDgvBySql(SQLString, "FIBU") Dim rangeAsBuchhaltung() As String Dim lastRow = dt_RE.Rows.Count + 1 Select Case sender.Name Case "btn_Erloeskkonten" rangeAsBuchhaltung = {"D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"} _ .Select(Function(c) $"{c}2:{c}{lastRow}") _ .ToArray() Case "btn_Laender" rangeAsBuchhaltung = {"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O"} _ .Select(Function(c) $"{c}2:{c}{lastRow}") _ .ToArray() Case "btn_ZV" rangeAsBuchhaltung = {"C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O"} _ .Select(Function(c) $"{c}2:{c}{lastRow}") _ .ToArray() End Select If dt_RE.Rows.Count > 0 Then cProgramFunctions.genExcelFromDT_NEW(dt_RE,,, Bezeichnung,,, True,,,,,, rangeAsBuchhaltung) Me.Cursor = Cursors.Default Else MsgBox("keine Daten für den ausgewählten Zeitraum!") Me.Cursor = Cursors.Default End If End If End If End Sub Private Sub Button16_Click_1(sender As Object, e As EventArgs) Handles Button16.Click Dim firmenlist As New List(Of MyListItem) firmenlist.Add(New MyListItem("VERAG AG", 1)) firmenlist.Add(New MyListItem("VERAG CS", 11)) firmenlist.Add(New MyListItem("ATILLA", 7)) Dim dtList As New List(Of DataTable) For Each i In firmenlist Dim sql As New SQL Dim sqlstrKunden = " select * from ( SELECT [KundenNr] as KundenNr,[Name 1], Adressen.LandKz, (isnull(Adressen.UstIdKz,'') + isnull(Adressen.UstIdNr,'')) as UIDNrKunden, isnull(c_ustidnr,'') as UIDNrKundenDeb, [i_firm_refid] as MandantFIBU, FiBuSchnittstelleNr as MandantAVISO FROM [VERAG].[dbo].[Kunden] inner join Adressen on Adressen.AdressenNr = Kunden.KundenNr inner join Buchhaltung.[FIBU2].[dbo].[fibu_konto] on Kunden.KundenNrZentrale = i_konto where isnull(KundenNrZentrale,0) <> 0 and Auswahl = 'A' And isnull(FiBuSchnittstelleNr,0) = " & i.Value & " ANd [i_firm_refid] = " & i.Value & " ) as temp where UIDNrKunden <> UIDNrKundenDeb" Dim dtKunden As DataTable = sql.loadDgvBySql(sqlstrKunden, "FMZOLL") If dtKunden.Rows.Count > 0 Then dtKunden.TableName = i.Text dtList.Add(dtKunden) End If Next If dtList.Count > 0 Then cProgramFunctions.genExcelFromMultibleDT_NEW(dtList,,,,,,,,,,,, True) End If End Sub Private Sub Button18_Click(sender As Object, e As EventArgs) End Sub Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click Dim sql As New VERAG_PROG_ALLGEMEIN.SQL Try If cbxBankspesentyp._value = "" Then MsgBox("Typ auswählen!") cbxBankspesentyp.Focus() Exit Sub End If Dim importiert As Boolean = False Dim TYP = cbxBankspesentyp._value Dim fd As New OpenFileDialog fd.InitialDirectory = "\\share01.verag.ost.dmn\F\19 VERAG 360 - MDM\Buchhaltung MDM\Bank\Subkonten" fd.Filter = "Excel Dateien (*.csv)|*.csv" If fd.ShowDialog() <> DialogResult.OK Then Exit Sub If Not fd.FileName.ToUpper().EndsWith(".CSV") Then MessageBox.Show("Bitte eine CSV-Datei auswählen.") Exit Sub End If Dim dt As New System.Data.DataTable Dim visibleKdNrCheck As Boolean = False Dim missingKdNr As Integer = 0 If dt IsNot Nothing And Not dt.Columns.Contains("name") Then dt.Columns.Add("Umsatz-ID", GetType(String)) dt.Columns.Add("Datum", GetType(String)) dt.Columns.Add("IBAN", GetType(String)) dt.Columns.Add("BIC", GetType(String)) dt.Columns.Add("Buchungstext", GetType(String)) dt.Columns.Add("Währung", GetType(String)) dt.Columns.Add("Betrag", GetType(Double)) dt.Columns.Add("Gebühr", GetType(Double)) dt.Columns.Add("Kontoauszug", GetType(String)) dt.Columns.Add("KdNr", GetType(Integer)) dt.Columns.Add("KdNrCheck", GetType(String)) dt.Columns.Add("KdNrValid", GetType(Boolean)) End If Dim dataRows As New List(Of Dictionary(Of String, String)) Dim requiredHeaders As String() Select Case TYP Case "M" requiredHeaders = {"Belegdat", "Belegnr", "BuchText", "Soll EUR", "Haben EUR", "Gegenkto"} Case "Q" requiredHeaders = {"Umsatz-ID", "Datum", "IBAN", "BIC", "Buchungstext", "Währung", "Betrag", "Kontoauszug"} End Select Try Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(fd.FileName, Encoding.Default) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(";") MyReader.HasFieldsEnclosedInQuotes = True ' <— Important line! (semicolon inside quotes will be ignored) Dim headerMap As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) Dim startHeaderRow As Integer = 1 Dim counterFile As Integer = 1 Dim currentRow As String() While Not MyReader.EndOfData currentRow = MyReader.ReadFields() If counterFile = 1 Then For Each rawHeader In currentRow Dim countHeader As Integer = 0 If String.IsNullOrWhiteSpace(rawHeader) Then Continue For ' Trennzeichen erkennen: Semikolon oder Tab Dim sep As Char = ";"c If Not rawHeader.Contains(";") AndAlso rawHeader.Contains(ChrW(9)) Then sep = ChrW(9) End If If rawHeader.Contains(sep) Then ' Gesamte Kopfzeile steht in einer Zelle Dim headers As String() = rawHeader.Split(sep) For i As Integer = 0 To headers.Length - 1 Dim header As String = headers(i).Replace(ChrW(160), " "c).Trim().TrimEnd("."c).Trim() If header <> "" AndAlso Not headerMap.ContainsKey(header) Then headerMap.Add(header, i + 1) End If Next Else Dim header As String = rawHeader.Replace(ChrW(160), " "c).Trim().TrimEnd("."c).Trim() If header <> "" AndAlso Not headerMap.ContainsKey(header) Then headerMap.Add(header, countHeader) End If End If countHeader += 1 Next For Each h As String In requiredHeaders If Not headerMap.ContainsKey(h) Then MsgBox("Pflichtspalte nicht gefunden: " & h & vbNewLine & "Spaltenkopf muss sich an der " & startHeaderRow & " Zeile befinden!") Exit Sub End If Next If headerMap.ContainsKey("KDNR") OrElse headerMap.ContainsKey("Gegenkto") Then visibleKdNrCheck = True End If Else For Each rawLine As String In currentRow ' Fall b/c: ganze Zeile in einer Zelle (mit ; oder Tab getrennt) If Not String.IsNullOrWhiteSpace(rawLine) AndAlso (rawLine.Contains(";") OrElse rawLine.Contains(ChrW(9))) Then Dim sep As Char = If(rawLine.Contains(";"), ";"c, ChrW(9)) Dim parts As String() = rawLine.Split(sep) Dim dict As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) For Each kvp In headerMap Dim idx As Integer = kvp.Value - 1 ' Header-Position ist 1-basiert dict(kvp.Key) = If(idx < parts.Length, parts(idx).Replace(ChrW(160), " "c).Trim(), "") Next dataRows.Add(dict) ' Fall a: Werte stehen in einzelnen Zellen Else ' Überspringen, falls Zeile komplett leer Dim rowEmpty As Boolean = True For Each kvp In headerMap Dim v As String = Convert.ToString(rawLine) If Not String.IsNullOrWhiteSpace(v) Then rowEmpty = False Exit For End If Next If rowEmpty Then Continue For Dim dict As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) For Each kvp In headerMap Dim v As String = Convert.ToString(rawLine) dict(kvp.Key) = If(v Is Nothing, "", v.Replace(ChrW(160), " "c).Trim()) Next dataRows.Add(dict) End If Next End If counterFile += 1 End While 'Dim letzteZeile As Integer = Blatt.UsedRange.Rows.Count 'For row As Integer = startHeaderRow + 1 To letzteZeile Dim countMissingFields As Integer = 0 For Each d In dataRows If TYP = "Q" Then Dim Umsatz_ID As String = Convert.ToString(d("Umsatz-ID")) Dim Datum As String = Convert.ToString(d("Datum")) Dim IBAN As String = Convert.ToString(d("IBAN")) Dim BIC As String = Convert.ToString(d("BIC")) Dim Buchungstext As String = Convert.ToString(d("Buchungstext")) Dim Währung As String = Convert.ToString(d("Währung")) Dim Kontoauszug As String = Convert.ToString(d("Kontoauszug")) Dim Betrag As Double = Convert.ToDouble(d("Betrag")) Dim KundenNrCheck As String = "" If headerMap.ContainsKey("KDNR") Then KundenNrCheck = Convert.ToString(d("KDNR")) End If If String.IsNullOrWhiteSpace(Umsatz_ID) Then countMissingFields += 1 Continue For End If If IsNumeric(Umsatz_ID) AndAlso IsNumeric(Betrag) Then Dim R As DataRow = dt.NewRow R("Umsatz-ID") = Umsatz_ID R("Datum") = Datum R("IBAN") = IBAN R("BIC") = BIC R("Buchungstext") = Buchungstext R("Währung") = Währung R("Betrag") = Betrag R("Kontoauszug") = Kontoauszug Dim BuchungstextOnlyNr As String = System.Text.RegularExpressions.Regex.Replace(Buchungstext, "[^0-9]", "") Dim KundeNr = CInt(sql.DLookup("bnk_KundenNr", "tblBankverbindungen", "bnk_iban like '%" & BuchungstextOnlyNr & "%' and isnull(bnk_archiv,0) = 0", "FMZOLL", "-1")) R("KdNr") = KundeNr If visibleKdNrCheck Then R("KdNrCheck") = KundenNrCheck If KundenNrCheck <> "" AndAlso IsNumeric(KundenNrCheck) Then If CInt(KundenNrCheck) = KundeNr Then R("KdNrValid") = True Else R("KdNrValid") = False End If End If End If If KundeNr = -1 Then missingKdNr += 1 End If 'Betrag laut folgendem Schema berechnen: Betrag = Betrag * -1 Betrag = Betrag + 1 Dim aufgerundet As Double = Math.Ceiling(Betrag / 5) * 5 R("Gebühr") = aufgerundet dt.Rows.Add(R) Else countMissingFields += 1 Continue For End If Else Dim Umsatz_ID As String = Convert.ToString(d("Belegnr")) Dim Datum As String = Convert.ToString(d("Belegdat")) Dim Buchungstext As String = Convert.ToString(d("BuchText")) Dim Währung As String = "EUR" Dim SollBetrag As String = Convert.ToString(d("Soll EUR")) Dim HabenBetrag As String = Convert.ToString(d("Haben EUR")) Dim Betrag As Double = 0 If SollBetrag <> "" AndAlso IsNumeric(SollBetrag) Then Betrag = CDbl(SollBetrag) ElseIf HabenBetrag <> "" AndAlso IsNumeric(HabenBetrag) Then Betrag = CDbl(HabenBetrag) End If Dim KundenNrCheck As String = "" If headerMap.ContainsKey("Gegenkto") Then KundenNrCheck = Convert.ToString(d("Gegenkto")) End If If String.IsNullOrWhiteSpace(Umsatz_ID) Then Continue For End If If IsNumeric(Betrag) AndAlso Not String.IsNullOrWhiteSpace(Buchungstext) AndAlso Not String.IsNullOrWhiteSpace(Datum) AndAlso IsDate(Datum) Then Dim R As DataRow = dt.NewRow R("Umsatz-ID") = Umsatz_ID R("Datum") = Datum R("Buchungstext") = Buchungstext R("Währung") = Währung R("Betrag") = Betrag R("KdNr") = 0 If visibleKdNrCheck Then R("KdNrCheck") = KundenNrCheck If KundenNrCheck <> "" AndAlso IsNumeric(KundenNrCheck) Then If CInt(KundenNrCheck) = R("KdNr") Then R("KdNrValid") = True Else R("KdNrValid") = False End If End If End If If R("KdNr") = -1 Then missingKdNr += 1 End If 'Betrag laut folgendem Schema berechnen: If Betrag < 0 Then Betrag = Betrag * -1 Betrag = Betrag + 1 Dim aufgerundet As Double = Math.Ceiling(Betrag / 5) * 5 R("Gebühr") = aufgerundet dt.Rows.Add(R) Else countMissingFields += 1 Continue For End If End If Next If dt.Rows.Count > 0 Then Dim Warning As String = "" If countMissingFields > 0 Then If TYP = "Q" Then Warning = countMissingFields & " Einträge mit fehlenden Datum/Umsatz_ID/Betrag" Else Warning = countMissingFields & " Einträge mit fehlenden Betrag/Buchungstext/Datum" End If End If Using frm As New frmAbrechnungHandling(dt, Nothing, "Import " & dt.Rows.Count & " Buchungsdaten " & cbxBankspesentyp.SelectedItem.Text & IIf(missingKdNr > 0, missingKdNr & " Kundenkonten konnten nicht gefunden werden!", ""), Warning) With frm .btnPreisliste.Visible = False .dgvHandling.RowHeadersVisible = False .Button2.Text = "Importieren" .cbxDivers.Visible = True .cbxDivers.Text = "KundenNr aus Excel übernehmen" If visibleKdNrCheck Then .cbxDivers.Checked = True Else .cbxDivers.Checked = False .cbxDivers.Enabled = False End If End With frm.ShowDialog() If frm.DialogResult = DialogResult.OK Then Dim counter = 0 Dim dateTemp For Each r As DataGridViewRow In frm.dgvHandling.SelectedRows Dim Datum = r.Cells("Datum").Value Dim KdNr = 0 If frm.cbxDivers.Checked AndAlso visibleKdNrCheck Then If r.Cells("KdNrCheck").Value <> "" AndAlso IsNumeric(r.Cells("KdNrCheck").Value) Then KdNr = CInt(r.Cells("KdNrCheck").Value) Else KdNr = r.Cells("KdNr").Value End If dateTemp = Datum If KdNr > 0 Then Dim Bankspesen = New VERAG_PROG_ALLGEMEIN.cMDM_Bankspesen(KdNr, Datum, TYP) If Not Bankspesen.hasEntry Then Bankspesen.IBAN = r.Cells("IBAN").Value Bankspesen.BIC = r.Cells("BIC").Value Bankspesen.umsatzID = r.Cells("Umsatz-ID").Value Bankspesen.buchungstext = r.Cells("Buchungstext").Value Bankspesen.waehrung = r.Cells("Währung").Value Bankspesen.betrag = r.Cells("Betrag").Value Bankspesen.gebuehr = r.Cells("Gebühr").Value Bankspesen.kontoauszug = r.Cells("Kontoauszug").Value If Bankspesen.SAVE() Then counter += 1 End If txtBankspesen.Text = counter & " / " & frm.dgvHandling.SelectedRows.Count End If End If Next Dim MDMEinarb As New cMDMEinarbeitung("BANK", Now()) MDMEinarb.invoicedate = CDate(dateTemp) MDMEinarb.import_date = Now() MDMEinarb.importfilename = fd.FileName MDMEinarb.ds_count += counter MDMEinarb.ds_total += frm.dgvHandling.SelectedRows.Count MDMEinarb.completed = 1 MDMEinarb.completed_date = Now() MDMEinarb.SAVE() importiert = True MsgBox(counter & " von " & dt.Rows.Count & " erfolgreich importiert!") pb_bankspesen.Value = 100 txtBankspesen.Text = frm.dgvHandling.SelectedRows.Count & " / " & frm.dgvHandling.SelectedRows.Count lblBankspesen.Text = "100.00 %" End If End Using Else MsgBox("keine zu importierende Daten vorhanden!") Exit Sub End If End Using Finally If importiert Then Dim zielOrdner As String = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(fd.FileName), "Importiert") If Not System.IO.Directory.Exists(zielOrdner) Then System.IO.Directory.CreateDirectory(zielOrdner) End If Dim zielDatei As String = System.IO.Path.Combine(zielOrdner, System.IO.Path.GetFileName(fd.FileName)) 'Falls bereits vorhanden, überschreiben If System.IO.File.Exists(zielDatei) Then System.IO.File.Delete(zielDatei) End If System.IO.File.Move(fd.FileName, zielDatei) End If End Try Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Me.Refresh() End Sub Function getTrimedString(s As String, l As Integer) As String Try If s Is Nothing Then Return "" If s.ToString.Length > l Then Return s.Substring(0, l) End If Return s.ToString Catch ex As Exception MsgBox("getTrimedString: " & ex.Message & ex.StackTrace) End Try Return "" End Function Private Sub Button18_Click_1(sender As Object, e As EventArgs) Handles Button18.Click Dim where As String = "" If cbxBankspesentyp._value <> "" Then where = " AND typ = '" & cbxBankspesentyp._value & "'" End If Dim frm As New frmZinsnachberechnung("tblMDM_Bankspesen", "FMZOLL", where) frm.ShowDialog(Me) End Sub Private Sub btnDelBankspesen_Click(sender As Object, e As EventArgs) Handles btnDelBankspesen.Click If cbxBankspesentyp._value <> "" Then If vbYes = MsgBox("Möchten Sie die alle nicht abgerechneten Kontoführungsgebühren (" & cbxBankspesentyp.SelectedItem.Text & ") löschen?", vbYesNoCancel) Then If SQL.doSQL("delete from [tblMDM_Bankspesen] WHERE [verrechnet] Is null and typ = '" & cbxBankspesentyp._value & "'", "FMZOLL") Then txtnichtabgerechneteKundenBankspesen.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Bankspesen] where verrechnet is null and typ = '" & cbxBankspesentyp._value & "'", "FMZOLL",,, "0") End If End If End If End Sub Private Sub setnichtAbgerechnteBankspesen() If cbxBankspesentyp._value <> "" Then txtnichtabgerechneteKundenBankspesen.Text = SQL.getValueTxtBySql("SELECT count(distinct(kundenNr)) FROM [VERAG].[dbo].[tblMDM_Bankspesen] where verrechnet is null and typ = '" & cbxBankspesentyp._value & "'", "FMZOLL",,, "0") Else txtnichtabgerechneteKundenBankspesen.Text = 0 End If If IsNumeric(txtnichtabgerechneteKundenBankspesen.Text) AndAlso CInt(txtnichtabgerechneteKundenBankspesen.Text) > 0 Then btnDelBankspesen.Visible = True Else btnDelBankspesen.Visible = False End If End Sub Private Sub cbxBankspesentyp_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbxBankspesentyp.SelectedIndexChanged setnichtAbgerechnteBankspesen() End Sub Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click End Sub End Class