Imports System.Globalization
Imports System.Text
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)

        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

        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
                    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

                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 = 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
                                        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

                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


                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 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 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




        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)
        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.Anlage_1 = ""

            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
            RG.Sammelrechnung = 0
            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 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 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



    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



                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")) 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

                Next

                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 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 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
                                      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
                                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

                            If vbYes = MsgBox("Möchten Sie die fortlaufende Re-Nr für das Gesamtjahr " & txtRE_Jahr.Text & " prüfen?", vbYesNoCancel) Then ignoreMonth = True


                            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)
                            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;"

                    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


End Class
