Imports System.Globalization
Imports VERAG_PROG_ALLGEMEIN


Public Class usrCntlSpeditionsBuchSuche
    Dim SQL As New SQL
    Public Event SendungsdetailsRequested(ByVal AvisoId As Integer, ByVal SendungId As Integer)

    Dim AVISOSERVER = VERAG_PROG_ALLGEMEIN.cAllgemein.AVISO_SERVER & " .AVISO.dbo.AVISO"


    Sub New()

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

    End Sub

    Public KDSearch As Integer
    Public dat_von As Date
    Public dat_bis As Date

    Sub New(KDSearch As Integer, dat_von As Date, dat_bis As Date)

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()
        Me.KDSearch = KDSearch
        Me.dat_von = dat_von
        Me.dat_bis = dat_bis
        'txtAbfertDat._value = dat_von.ToShortDateString
        'txtAbfertDatBis._value = dat_bis.ToShortDateString
        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.

    End Sub

    Public Sub initSearch()
        btnSuche.PerformClick()
    End Sub





    Private Sub btnSuche_Click(sender As Object, e As EventArgs) Handles btnSuche.Click
        Me.Cursor = Cursors.WaitCursor

        Dim TopMax = If(IsNumeric(txtMaxSrch.Text), " TOP " & txtMaxSrch.Text, "")
        Dim sqlstr As String = ""

        If tbcntr.SelectedIndex = 0 Then
            dgvLKW.Visible = False

            sqlstr &= " SELECT " & TopMax & " [FilialenNr],[AbfertigungsNr],[UnterNr],[Abfertigungsdatum],speditionsbuch.[Abfertigungsart],Abfertigungsarten.Abfertigungsbezeichnung, " &
                    " isnull(cast([AbsenderKundenNr] as nvarchar(7)) + ' ','') + [Absender] as Absender,isnull(cast([EmpfängerKundenNr] as nvarchar(7)) + ' ','') + [Empfänger] as Empfänger,isnull(cast([VermittlerKundenNr] as nvarchar(7)) + ' ','') + [Vermittler] as Vermittler,isnull(cast([FrachtführerKundenNr] as nvarchar(7)) + ' ','') + [Frachtführer] as Frachtführer,isnull(cast([AvisiererKundenNr] as nvarchar(7)) + ' ','') + [Avisierer] as Avisierer, " &
                    " [LKW Kennzeichen],QKN,(SELECT isnull(Name,'') FROM Personal Where Personalnummer=ID) AS Sachbearbeiter,BelegNr, Grenzstelle  FROM [Speditionsbuch]  LEFT JOIN Abfertigungsarten ON Abfertigungsarten.Abfertigungsart=speditionsbuch.Abfertigungsart WHERE 1=1 "
            '/*Sachbearbeiter ,[Bar],[Fakturiert],[BelegNr],[ErfassungsNr],[AnzahlZA],[AnzahlZAFremd],[AnzahlZnV],[AnzahlZnVFremd],[AnzahlT1],[AnzahlT2],[AnzahlAE],[AnzahlCarnetTIR],[AnzahlBarvorlagen],[AnzahlSonstiges],[AnzahlGrenzgebühren],[AvisUhrzeit],[Rechnungsbetrag],[Abfertigungsanzahl],[Barzahlungsbetrag],[Sachbearbeiter],[Personalnummer],[AtlasBezNrEZA],[AtlasBezNrNCTS],[Versendungsland],[SB_CMR],[SB_CMRDatum],[veoerz_basbtg],[Zucker_MRN_Nr],[Zucker_MRN_Datum],[Zucker_Aufschub],[Zollsystem],[Bestimmungszollstelle],[Bürgschaft],[Sicherheitsbetrag],[SgutKompl],[Bestimmungsland],[EuFiskalEmpfänger],[QKN],[EndempfängerKundenNr],[Endempfänger] */
            With DataGridView
                '  .DataSource = myTable
                .SET_SQL(sqlstr & getSpedBuchWhere() & " ORDER BY Abfertigungsdatum, [FilialenNr],[AbfertigungsNr],[UnterNr]  ", "FMZOLL", getSpedbuchList)
                'MsgBox(sqlstr)
                '   MsgBox(getSpedBuchWhere)
                .LOAD()
            End With
            showDGV()

        Else

            sqlstr &= " SELECT  Aviso.AvisoID,[LKW Kennzeichen],Anzahl,Abfertigungsanzahl,CASE WHEN isnull(Aviso.[Frächter_KdNr],0) > 0 then cast(Aviso.[Frächter_KdNr] as nvarchar(60)) + ' ' ELSE '' END  + Aviso.frächter  as Frächter, CASE WHEN isnull(Aviso.Auftraggeber_KdNr,0) > 0 then cast(Aviso.Auftraggeber_KdNr as nvarchar(60)) + ' ' ELSE '' END  + Aviso.Auftraggeber as Avisierer, Freigabe from"
            sqlstr &= "  (SELECT " & TopMax & " AvisoID,COUNT (*) As anzahl, SUM(Abfertigungsanzahl) as Abfertigungsanzahl ,  case when Speditionsbuch.AvisoID is null then ' - Kein LKW - ' ELSE  max([LKW Kennzeichen]) END as [LKW Kennzeichen]"
            sqlstr &= "         FROM [Speditionsbuch]   WHERE 1=1 "
            sqlstr &= getSpedBuchWhere()
            sqlstr &= "         group by Speditionsbuch.AvisoID"
            sqlstr &= "  ) as t"
            sqlstr &= " INNER JOIN " & AVISOSERVER & " on Aviso.avisoid=t.AvisoID "

            DataGridView.Columns.Clear()

            With dgvLKW

                .SET_SQL(sqlstr, "FMZOLL", getSpedbuchList)
                .LOAD()
                .Visible = True

                If .RowCount = 0 Then Me.Cursor = Cursors.Default : Exit Sub
                .RowHeadersVisible = False
                .ReadOnly = True
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .MultiSelect = False

                .Columns("Abfertigungsanzahl").Visible = False
                .Columns("AvisoID").HeaderText = "LKW-Id"
                .Columns("AvisoID").Width = 50

                .Columns("Anzahl").Width = 30
                .Columns("Anzahl").HeaderText = "Snd."
                .Columns("Anzahl").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter

                .Columns("LKW Kennzeichen").Width = 100
                .Columns("LKW Kennzeichen").HeaderText = "LKW Kennz."

                .Columns("Frächter").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .Columns("Frächter").MinimumWidth = 150

                .Columns("Avisierer").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
                .Columns("Avisierer").MinimumWidth = 150


                .Columns("Freigabe").Width = 105


                lblErgebnis.Text = "Ergebnisse: " & .RowCount

                AddHandler .SelectionChanged, Sub()
                                                  DataGridView.Columns.Clear()
                                                  If dgvLKW.SelectedRows().Count = 0 Then Exit Sub

                                                  Dim sqlstrTmp = " SELECT " & TopMax & " [FilialenNr],[AbfertigungsNr],[UnterNr],[Abfertigungsdatum],speditionsbuch.[Abfertigungsart],Abfertigungsarten.Abfertigungsbezeichnung, " &
                                                          " isnull(cast([AbsenderKundenNr] as nvarchar(7)) + ' ','') + [Absender] as Absender,isnull(cast([EmpfängerKundenNr] as nvarchar(7)) + ' ','') + [Empfänger] as Empfänger,isnull(cast([VermittlerKundenNr] as nvarchar(7)) + ' ','') + [Vermittler] as Vermittler,isnull(cast([FrachtführerKundenNr] as nvarchar(7)) + ' ','') + [Frachtführer] as Frachtführer,isnull(cast([AvisiererKundenNr] as nvarchar(7)) + ' ','') + [Avisierer] as Avisierer, " &
                                                          " [LKW Kennzeichen],QKN,(SELECT isnull(Name,'') FROM Personal Where Personalnummer=ID) AS Sachbearbeiter ,BelegNr, Grenzstelle FROM [Speditionsbuch]  LEFT JOIN Abfertigungsarten ON Abfertigungsarten.Abfertigungsart=speditionsbuch.Abfertigungsart WHERE 1=1 "

                                                  With DataGridView
                                                      '  .DataSource = myTable
                                                      .SET_SQL(sqlstrTmp & getSpedBuchWhere() & " AND AvisoID='" & dgvLKW.SelectedRows(0).Cells("AvisoID").Value & "' " & " ORDER BY Abfertigungsdatum, [FilialenNr],[AbfertigungsNr],[UnterNr]  ", "FMZOLL", getSpedbuchList)
                                                      .LOAD()
                                                  End With
                                                  showDGV()
                                              End Sub

            End With
        End If

        Me.Cursor = Cursors.Default
    End Sub

    Sub showDGV()

        With DataGridView

            If .RowCount = 0 Then Me.Cursor = Cursors.Default : Exit Sub
            .RowHeadersVisible = False
            .ReadOnly = True
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .MultiSelect = False

            .Columns("FilialenNr").Width = 45
            .Columns("FilialenNr").HeaderText = "Filiale"
            .Columns("FilialenNr").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
            .Columns("AbfertigungsNr").Width = 80
            .Columns("AbfertigungsNr").HeaderText = "Abf-Nr"
            .Columns("AbfertigungsNr").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
            .Columns("UnterNr").Width = 45
            .Columns("UnterNr").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
            .Columns("Abfertigungsdatum").Width = 100
            .Columns("Abfertigungsdatum").HeaderText = "Abf-Dat."
            .Columns("Abfertigungsdatum").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter

            .Columns("Absender").MinimumWidth = 150
            .Columns("Absender").HeaderText = "Absender"
            .Columns("Absender").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("Abfertigungsart").Width = 50
            .Columns("Abfertigungsart").HeaderText = "Abf.Nr"
            .Columns("Abfertigungsart").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter

            .Columns("Abfertigungsbezeichnung").MinimumWidth = 100
            .Columns("Abfertigungsbezeichnung").HeaderText = "Abfertigungsart"
            .Columns("Abfertigungsbezeichnung").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("Vermittler").MinimumWidth = 150
            .Columns("Vermittler").HeaderText = "Auftraggeber"
            .Columns("Vermittler").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("Empfänger").MinimumWidth = 150
            .Columns("Empfänger").HeaderText = "Empfänger"
            .Columns("Empfänger").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("Frachtführer").MinimumWidth = 150
            .Columns("Frachtführer").HeaderText = "Frachtführer"
            .Columns("Frachtführer").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("Avisierer").MinimumWidth = 150
            .Columns("Avisierer").HeaderText = "Avisierer"
            .Columns("Avisierer").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill

            .Columns("LKW Kennzeichen").Width = 120
            .Columns("LKW Kennzeichen").HeaderText = "LKW Kennzeichen"
            .Columns("Grenzstelle").Visible = False

            '.Columns("Avisierer").Visible = False



            .Columns("BelegNr").Width = 160
            .Columns("Sachbearbeiter").MinimumWidth = 100
            'MsgBox(VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_niederlassung)
            If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_niederlassung = "NKD" Then
                .Columns("QKN").Width = 45
                .Columns("QKN").HeaderText = "QKN"
            Else
                .Columns("QKN").Visible = False
            End If

            lblErgebnis.Text = "Ergebnisse: " & .RowCount
        End With
    End Sub

    Function getSpedBuchWhere(Optional ignoreFiliale = False) As String
        Dim sqlstr = ""
        If txtAvisiererKdNr.Text <> "" And IsNumeric(txtAvisiererKdNr.Text) Then : sqlstr &= " AND Speditionsbuch.[AvisiererKundenNr] LIKE @AvisiererKundenNr "
        ElseIf kdtxtAvisierer.Text <> "" Then : sqlstr &= " AND  Speditionsbuch.[Avisierer] LIKE @Avisierer " : End If
        If txtAbsenderKdnr.Text <> "" And IsNumeric(txtAbsenderKdnr.Text) Then : sqlstr &= " AND Speditionsbuch.[AbsenderKundenNr] LIKE @AbsenderKundenNr "
        ElseIf kdtxtAbsender.Text <> "" Then : sqlstr &= " AND  Speditionsbuch.[Absender] LIKE @Absender " : End If

        If cbxOderEmpfanger.Checked Then
            If txtAuftraggeberKdnr.Text <> "" And IsNumeric(txtAuftraggeberKdnr.Text) Then : sqlstr &= " AND ( Speditionsbuch.[VermittlerKundenNr] LIKE @VermittlerKundenNr OR  Speditionsbuch.[EmpfängerKundenNr] LIKE @VermittlerKundenNr ) "
            ElseIf kdtxtAuftraggeber.Text <> "" Then : sqlstr &= " AND  ( Speditionsbuch.[Vermittler] LIKE @Vermittler OR Speditionsbuch.[Empfänger] LIKE @Vermittler  ) " : End If
        Else
            If txtAuftraggeberKdnr.Text <> "" And IsNumeric(txtAuftraggeberKdnr.Text) Then : sqlstr &= " AND Speditionsbuch.[VermittlerKundenNr] LIKE @VermittlerKundenNr "
            ElseIf kdtxtAuftraggeber.Text <> "" Then : sqlstr &= " AND  Speditionsbuch.[Vermittler] LIKE @Vermittler " : End If
            If txtEmpfaengerKdnr.Text <> "" And IsNumeric(txtEmpfaengerKdnr.Text) Then : sqlstr &= " AND Speditionsbuch.[EmpfängerKundenNr] LIKE @EmpfängerKundenNr "
            ElseIf kdtxtEmpfaenger.Text <> "" Then : sqlstr &= " AND  Speditionsbuch.[Empfänger] LIKE @Empfänger " : End If
        End If
        If txtFrachtfuehrerKdnr.Text <> "" And IsNumeric(txtFrachtfuehrerKdnr.Text) Then : sqlstr &= " AND Speditionsbuch.[FrachtführerKundenNr] LIKE @FrachtführerKundenNr "
        ElseIf kdtxtFrachtfuehrer.Text <> "" Then : sqlstr &= " AND  Speditionsbuch.[Frachtführer] LIKE @Frachtführer " : End If

        If txtEndempfaengerKdnr.Text <> "" And IsNumeric(txtEndempfaengerKdnr.Text) Then : sqlstr &= " AND Speditionsbuch.[EndempfängerKundenNr] LIKE @EndempfängerKundenNr "
        ElseIf kdtxtEndempfaenger.Text <> "" Then : sqlstr &= " AND  Speditionsbuch.[Endempfänger] LIKE @Endempfänger " : End If

        If txtFiskalEndempfaenger.Text <> "" Then sqlstr &= " AND Speditionsbuch.[EuFiskalEmpfänger] LIKE @FiskalEndempfaengerKundenNr "
        If txtKdAuftragsNr.Text <> "" Then sqlstr &= " AND Speditionsbuch.[KdAuftragsNr] LIKE @KdAuftragsNr "



        If txtAbfertDat.Text <> "" Then
            If txtAbfertDatBis.Text <> "" Then
                sqlstr &= " AND (Speditionsbuch.[Abfertigungsdatum] BETWEEN @Abfertigungsdatum AND @Abfertigungsdatum_bis ) "
            Else
                sqlstr &= " AND (Speditionsbuch.[Abfertigungsdatum] BETWEEN @Abfertigungsdatum AND @Abfertigungsdatum ) "
            End If
        End If

        If txtAbfertigungsnummer.Text <> "" Then
            If txtAbfertigungsnummerBis.Text <> "" Then
                sqlstr &= " AND (Speditionsbuch.[AbfertigungsNr] BETWEEN @AbfertigungsNr AND @AbfertigungsNr_bis ) "
            Else
                sqlstr &= " AND Speditionsbuch.AbfertigungsNr LIKE @AbfertigungsNr "
            End If
        End If
        If txtUnterNr.Text <> "" Then sqlstr &= " AND Speditionsbuch.[UnterNr] LIKE @UnterNr "
        If Not ignoreFiliale Then
            If cboFiliale._value <> "" Then sqlstr &= " AND Speditionsbuch.[FilialenNr] LIKE @FilialenNr "
        End If
        ' If cboFilialeHandling._value <> "" Then sqlstr &= " AND FilialenNrHandling IS NOT NULL AND [FilialenNrHandling] LIKE @FilialeHandling "


        Dim abfertigungsarten = getValues()
        If abfertigungsarten <> "" Then sqlstr &= " AND Speditionsbuch.Abfertigungsart IN (" & abfertigungsarten & ") "

        Dim filialeAuswahl = getValuesFiliale()
        If filialeAuswahl <> "" Then sqlstr &= " AND Speditionsbuch.FilialenNr IN (" & filialeAuswahl & ") "

        Dim filialeAuswahlHandling = getValuesFilialeHandling()
        If filialeAuswahlHandling <> "" Then sqlstr &= " AND Speditionsbuch.FilialenNrHandling IN (" & filialeAuswahlHandling & ") "



        Dim grenzeAuswahl = getValuesGrenzstelle()
        If grenzeAuswahl <> "" Then sqlstr &= " AND Speditionsbuch.Grenzstelle IN (" & grenzeAuswahl & ") "


        If txtCRN.Text <> "" Then sqlstr &= " AND Speditionsbuch.QKN LIKE @QKN "
        If txtPackstücke.Text <> "" Then sqlstr &= " AND Speditionsbuch.Packstücke LIKE @Packstücke "
        If txtBelegNr.Text <> "" Then sqlstr &= " AND Speditionsbuch.BelegNr LIKE @BelegNr "
        If cboVersLand._value <> "" Then sqlstr &= " AND Speditionsbuch.Versendungsland LIKE @Versendungsland "
        If cboBestLand._value <> "" Then sqlstr &= " AND Speditionsbuch.Bestimmungsland LIKE @Bestimmungsland "
        If txtErfassungsnNr.Text <> "" Then sqlstr &= " AND Speditionsbuch.ErfassungsNr LIKE @ErfassungsNr "

        If txtAvisoId.Text.Trim <> "" And IsNumeric(txtAvisoId.Text.Trim) Then sqlstr &= " AND Speditionsbuch.AvisoId=@AvisoId"

        If MyTextBox14.Text <> "" Then sqlstr &= " AND Speditionsbuch.[LKW Kennzeichen] LIKE @LKW "
        If cbxBar.CheckState = CheckState.Checked Then sqlstr &= " AND Bar=1 "
        If cbxFakturiert.CheckState = CheckState.Checked Then sqlstr &= " AND Fakturiert=1 "
        If cbxCMR.CheckState = CheckState.Checked Then sqlstr &= " AND SB_CMR=1 "
        If cbxBar.CheckState = CheckState.Unchecked Then sqlstr &= " AND Bar=0 "
        If cbxFakturiert.CheckState = CheckState.Unchecked Then sqlstr &= " AND Fakturiert=0 "
        If cbxCMR.CheckState = CheckState.Unchecked Then sqlstr &= " AND SB_CMR=0 "


        If cbxfehlZahlung_AVISOID.CheckState = CheckState.Checked Then sqlstr &= " AND NOT EXISTS (select * FROM [Rechnungsausgang] WHERE [Rechnungsausgang].AvisoID=Speditionsbuch.AvisoID) AND NOT EXISTS (select * FROM [tblEABelegnummer] WHERE LKW_id= Speditionsbuch.AvisoID AND storniert=0 and gebuchtstorno=0)"
        'If cbxfehlZahlung_AVISOID.CheckState = CheckState.Unchecked Then sqlstr &= " AND EXISTS (select * FROM [Rechnungsausgang] WHERE [Rechnungsausgang].AvisoID=Speditionsbuch.AvisoID) "

        If cbxfehlZahlung_SENDUNG.CheckState = CheckState.Checked Then sqlstr &= " AND NOT EXISTS (select * FROM [Rechnungsausgang] WHERE [Rechnungsausgang].FilialenNr=Speditionsbuch.FilialenNr and [Rechnungsausgang].AbfertigungsNr=[Speditionsbuch].AbfertigungsNr AND [Rechnungsausgang].[SpeditionsbuchUnterNr]=[Speditionsbuch].UnterNr) AND NOT EXISTS (select * FROM [tblEABelegnummer] WHERE tblEABelegnummer].FilialenNr=[Speditionsbuch].[FilialenNr] and [tblEABelegnummer].AbfertigungsNr=[Speditionsbuch].AbfertigungsNr and [tblEABelegnummer].FilialenNr>0 and [tblEABelegnummer].AbfertigungsNr>0 AND storniert=0 and gebuchtstorno=0) "
        'If cbxfehlZahlung_SENDUNG.CheckState = CheckState.Unchecked Then sqlstr &= "  AND EXISTS (select * FROM [Rechnungsausgang] WHERE [Rechnungsausgang].FilialenNr=Speditionsbuch.FilialenNr and [Rechnungsausgang].AbfertigungsNr=[Speditionsbuch].AbfertigungsNr AND [Rechnungsausgang].[SpeditionsbuchUnterNr]=[Speditionsbuch].UnterNr)"


        If cbxEIDR.Visible Then
            If cbxEIDR.CheckState = CheckState.Checked Then sqlstr &= " AND UK_EIDR_ausstehend=1 "
            If cbxEIDR.CheckState = CheckState.Unchecked Then sqlstr &= " AND UK_EIDR_ausstehend=0 "
        End If

        If txtZollstelle.Visible And txtZollstelle._value <> "" Then
            sqlstr &= " AND Zollstelle='" & txtZollstelle._value & "' "
        End If

        If cboSachbearbeiter._value <> "" Then sqlstr &= " AND Speditionsbuch.[Personalnummer] = @Personalnummer "
        If cboSB_Qs._value <> "" Then sqlstr &= " AND Speditionsbuch.[PersonalnummerQS] = @PersonalnummerQS "
        If cboSB_TR._value <> "" Then sqlstr &= " AND Speditionsbuch.[PersonalnummerAbklTR] = @PersonalnummerAbklTR "

        If txtVermerk.Text <> "" Then sqlstr &= " AND Speditionsbuch.[Vermerk] LIKE @Vermerk "

        Return sqlstr
    End Function

    Function getSpedbuchList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)

        Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Avisierer", kdtxtAvisierer.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AvisiererKundenNr", txtAvisiererKdNr.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Absender", kdtxtAbsender.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AbsenderKundenNr", txtAbsenderKdnr.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Empfänger", kdtxtEmpfaenger.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("EmpfängerKundenNr", txtEmpfaengerKdnr.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Vermittler", kdtxtAuftraggeber.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VermittlerKundenNr", txtAuftraggeberKdnr.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Frachtführer", kdtxtFrachtfuehrer.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("FrachtführerKundenNr", txtFrachtfuehrerKdnr.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Endempfänger", kdtxtEndempfaenger.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("EndempfängerKundenNr", txtEndempfaengerKdnr.Text.Replace("*", "%")))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("FiskalEndempfaengerKundenNr", txtFiskalEndempfaenger.Text.Replace("*", "%")))

        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("KdAuftragsNr", txtKdAuftragsNr.Text.Replace("*", "%")))

        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Abfertigungsdatum", txtAbfertDat.Text & " 00:00:00"))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Abfertigungsdatum_bis", txtAbfertDatBis.Text & " 23:59:59"))
        If txtAbfertigungsnummerBis.Text <> "" Then
            list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AbfertigungsNr", txtAbfertigungsnummer.Text.Replace("*", "")))
            list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AbfertigungsNr_bis", txtAbfertigungsnummerBis.Text.Replace("*", "")))
        Else
            list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AbfertigungsNr", txtAbfertigungsnummer.Text.Replace("*", "%")))
        End If
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("UnterNr", txtUnterNr.Text))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("FilialenNr", cboFiliale._value))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("LKW", MyTextBox14.Text.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("QKN", txtCRN.Text.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Packstücke", txtPackstücke.Text.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("BelegNr", txtBelegNr.Text.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Versendungsland", cboVersLand._value.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Bestimmungsland", cboBestLand._value.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ErfassungsNr", txtErfassungsnNr.Text.Replace("*", "%").ToUpper))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AvisoId", txtAvisoId.Text.Trim))


        ' list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("FilialeHandling", cboFilialeHandling._value))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Personalnummer", cboSachbearbeiter._value))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PersonalnummerQS", cboSB_Qs._value))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PersonalnummerAbklTR", cboSB_TR._value))
        list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Vermerk", txtVermerk.Text.Replace("*", "%").ToUpper))
        Return list

    End Function

    Private Sub frmSpeditionsbuchSuche_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        VERAG_PROG_ALLGEMEIN.cAllgemein._TRANSLATE(Me)

        If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then
            AVISOSERVER = "[DEVELOPER\DEVSQL].AVISO_new.dbo.AVISO"
        End If



        txtAbfertDat.Text = Now.ToShortDateString 'CDate("01." & Now.ToString("MM.yyyy")).AddMonths(-1).ToShortDateString
        txtAbfertDatBis.Text = Now.ToShortDateString

        btnMonat.Text = MONAT.ToString("MMMM")
        btnJahr.Text = JAHR.Year


        kdtxtAbsender.initKdBox(Me.FindForm, txtAbsenderKdnr) '   initKdAbsender()
        kdtxtEmpfaenger.initKdBox(Me.FindForm, txtEmpfaengerKdnr) 'initKdEmpfaenger()
        kdtxtAuftraggeber.initKdBox(Me.FindForm, txtAuftraggeberKdnr) 'initKdAuftraggeber()
        kdtxtFrachtfuehrer.initKdBox(Me.FindForm, txtFrachtfuehrerKdnr) 'initKdFrachtfuehrer()
        kdtxtEndempfaenger.initKdBox(Me.FindForm, txtEndempfaengerKdnr) 'initKdEndempfaenger()
        kdtxtAvisierer.initKdBox(Me.FindForm, txtAvisiererKdNr) 'initKdEndempfaenger()


        Dim FirmaTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_VERAGIMEX", "SDL") Then
            FirmaTmp = "VERAGIMEX"
        End If

        Dim sbWhere = ""

        Select Case FirmaTmp
            Case "ATILLA" : sbWhere = " AND Niederlassung = 'SUA' "
            Case "IMEX" : sbWhere = " AND Mandant = 'IMEX' "
            Case "VERAGIMEX" : sbWhere = " "
            Case Else
                sbWhere = " AND Mandant <> 'IMEX' "

        End Select


        cboSachbearbeiter.fillWithSQL("SELECT  ID,/*cast(ID as nvarchar(3)) +' ' + Name as*/ Name FROM Personal WHERE [Status]<>'L'  " & sbWhere & " ORDER BY Name ", False, "FMZOLL", True)
        If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then
            cboFiliale.fillWithSQL("SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' AND FilialenNr IN(4801,4802) ORDER BY FilialenNr ", True, "FMZOLL", True)
        Else
            cboFiliale.fillWithSQL("SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' ORDER BY FilialenNr ", True, "FMZOLL", True)
        End If

        '  cboFilialeHandling.fillWithSQL("SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' ORDER BY FilialenNr ", True, "FMZOLL", True)
        '  txtBestimmungszollstelle.initSearchBox(Me.FindForm, "[basncd_dstnr] ,[basncd_dstnr] +' - ' + [basncd_name] +' (' +[basncd_alpha]+')' as displayPARAM,[basncd_dstnr] as Nr,[basncd_name] as Dienststelle,[basncd_alpha] as Land FROM basncd", {" [basncd_dstnr]", "basncd_name"}, " [basncd_gbdat] >= getdate() ", " basncd_alpha,[basncd_name]", "basncd_dstnr", "displayPARAM", "ATLAS", , 400, 200, {"displayPARAM", "basncd_dstnr"})
        txtZollstelle.initSearchBox(Me.FindForm, "[Code] ,[Code] as Nr,Description as Dienststelle,left(Code,2) as Land,[Description] +' (' +left(Code,2)+')' as display FROM [tbl_DY_ZollDE_C0141_Zollstellen]", {" [Code]", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", " left(Code,2),[Description]", "Code", "display", "FMZOLL", , 400, 200, {"display", "Code"})

        cboHandlingssatz.fillWithSQL("SELECT hs_RgAn,[hs_Bezeichnung] FROM [tblHandlingssaetzeIntern] group by [hs_Bezeichnung],hs_RgAn ", False, "FMZOLL", True)

        If VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE <> "" And Not VERAG_PROG_ALLGEMEIN.cAllgemein.isCLUSTER And FirmaTmp <> "VERAGIMEX" Then
            If VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER = "FRONTOFFICE" Then
                Dim whereCluster = ""
                If VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER = "FRONTOFFICE" Then whereCluster = ",'5801'"
                cboFiliale.fillWithSQL("SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' AND FilialenNr  IN ('" & VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE & "'" & whereCluster & ") ORDER BY FilialenNr ", True, "FMZOLL", True)
                '    cboFiliale._allowedValuesFreiText = {VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE, 5801}

            ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then
                cboFiliale._allowedValuesFreiText = {4801, 4802}
                cboFiliale.Enabled = True
            Else
                cboFiliale._allowedValuesFreiText = {VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE}
                cboFiliale.Enabled = False
            End If

            cboFiliale.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE)

        End If

        'Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        '    Case "IMEX" : cboFiliale._allowedValuesFreiText = {"5501"}
        '        cboFiliale.changeItem("5501")
        '        cboFiliale.Enabled = False
        '    Case "ATILLA" : cboFiliale._allowedValuesFreiText = {"4801"}
        '        cboFiliale.changeItem("4801")
        '        cboFiliale.Enabled = False
        'End Select

        'ComboBox1.fillWithSQL("SELECT [Abfertigungsart],[Abfertigungsbezeichnung]  FROM [Abfertigungsarten] ORDER BY Abfertigungsart ", True, "FMZOLL")
        cboVersLand.fillWithSQL("SELECT LandKz, LandBez FROM [Länderverzeichnis für die Außenhandelsstatistik] ORDER BY LandKz ", True, "FMZOLL", True)
        cboBestLand.fillWithSQL("SELECT LandKz, LandBez FROM [Länderverzeichnis für die Außenhandelsstatistik] ORDER BY LandKz ", True, "FMZOLL", True)
        MyListBox1.fillWithSQL(" SELECT [Abfertigungsart],[Abfertigungsbezeichnung] FROM [Abfertigungsarten] ORDER BY Abfertigungsart ", , "FMZOLL")

        If VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE <> "" And Not VERAG_PROG_ALLGEMEIN.cAllgemein.isCLUSTER Then
            Dim whereCluster = ""
            ' If VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER = "FRONTOFFICE" Then whereCluster = ",'5801'"
            lstFiliale.fillWithSQL(" SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' AND FilialenNr  IN ('" & VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE & "'" & whereCluster & ") ORDER BY FilialenNr ", , "FMZOLL")
        Else
            lstFiliale.fillWithSQL(" SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' ORDER BY FilialenNr ", , "FMZOLL")
        End If

        lstFilialeHandling.fillWithSQL(" SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A'    ORDER BY FilialenNr ", , "FMZOLL")

        'Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        '    Case "IMEX"
        '        lstFiliale.fillWithSQL(" SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' AND FilialenNr=5501 ORDER BY FilialenNr ", , "FMZOLL")
        '    Case "ATILLA"
        '        lstFiliale.fillWithSQL(" SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' AND FilialenNr=4801  ORDER BY FilialenNr ", , "FMZOLL")
        '    Case Else
        '        lstFiliale.fillWithSQL(" SELECT FilialenNr, Grenzstelle FROM Filialen WHERE Fil_Status='A' ORDER BY FilialenNr ", , "FMZOLL")
        'End Select

        '   lstGrenze.fillWithSQL(" SELECT distinct(Grenzstelle),distinct(Grenzstelle)   FROM [VERAG].[dbo].[Speditionsbuch] where Grenzstelle is not null  order by Grenzstelle  ", , "FMZOLL")
        'lstGrenze.Items.Clear()
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("SUB", "SUB"))
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("SBG", "SBG"))
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("WAI", "WAI"))
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("NKD", "NKD"))
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("SUA", "SUA"))
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AMB", "AMB"))
        'lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("???", "???"))
        lstGrenze.Items.Clear()
        lstGrenze.fillWithSQL("SELECT [grz_Grenzstelle],[grz_BezeichnungCBO] FROM tblGrenzstelle where [grz_Firma]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' OR grz_Cluster='" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "' AND grz_Aktiv=1 order by grz_Reihenfolge, grz_Grenzstelle", False, "AVISO")

        If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then
            lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("SUB", "SUB"))
            lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("NEU", "NEU"))
        End If
        lstGrenze.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("???", "???"))
        lstGrenze.changeItem("")




        MyComboBox1.Items.Clear()
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", ""))
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("ALLE", "ALLE"))
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG", "VERAG"))
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("IMEX", "IMEX"))
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("UNISPED", "UNISPED"))
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AMBAR", "AMBAR"))
        MyComboBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("FRONTOFFICE", "FRONTOFFICE"))




        MyComboBox2.Items.Clear()
        MyComboBox2.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", ""))
        MyComboBox2.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG", "VERAG"))
        MyComboBox2.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("IMEX", "IMEX"))
        MyComboBox2.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("UNISPED", "UNISPED"))


        cboFilialeHandling.Items.Clear()
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", ""))
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("ALLE", "ALLE"))
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG", "VERAG"))
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("IMEX", "IMEX"))
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("UNISPED", "UNISPED"))
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AMBAR", "AMBAR"))
        cboFilialeHandling.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("FRONTOFFICE", "FRONTOFFICE"))



        Dim where = ""
        Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            Case "VERAG", "ATILLA", ""
            Case Else
                where = " AND mit_firma IN ('" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "','BEIDE') "
                'Case "IMEX" : where = " AND mit_firma IN ('IMEX','BEIDE') "
                '''   Case "ATILLA" : cboFiliale._allowedValuesFreiText = {"4801"}
        End Select

        cboSB_Qs.fillWithSQL("SELECT [mit_id],[mit_vname] + ' '+ [mit_nname] as NAME " &
                                  " FROM [tblMitarbeiter] WHERE mit_niederlassung IN ('SUB','Suben')  AND mit_abteilung='QS' AND [mit_gekuendigt]=0  " & where & "  order by name", False, "ADMIN", True)

        cboSB_TR.fillWithSQL("SELECT [mit_id],[mit_vname] + ' '+ [mit_nname] as NAME " &
                                  " FROM [tblMitarbeiter] WHERE mit_firma IN ('VERIMEX') AND [mit_gekuendigt]=0 order by name", False, "ADMIN", True)
        btnDetailsuche.PerformClick()

        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Auftraggeber", "VermittlerKundenNr"))
        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Avisierer", "AvisiererKundenNr"))
        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Absender", "AbsenderKundenNr"))
        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Empfänger", "EmpfängerKundenNr"))
        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Frachtführer", "FrachtführerKundenNr"))
        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Endempfänger", "EndempfängerKundenNr"))
        cboRolle.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("FiskalEndempfaenger", "FiskalEndempfaengerKundenNr"))
        cboRolle.SelectedIndex = 0


        cboDetailberichtKdAtrNr.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Auftraggeber", "AUFTRAGGEBER"))
        cboDetailberichtKdAtrNr.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Avisierer", "AVISIERER"))
        cboDetailberichtKdAtrNr.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Empfänger", "EMPFAENGER"))
        cboDetailberichtKdAtrNr.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Frachtführer", "FRACHTFUEHRER"))
        cboDetailberichtKdAtrNr.SelectedIndex = 0


        Label29.Visible = False
        Label30.Visible = False

        If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER IsNot Nothing Then
            If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_standartFiliale > 0 Then
                Dim aktNr = (New cOptionenDAL).getMaxPosNr(VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_standartFiliale, Now.Year)
                Label30.Text = "akt. Pos-Nr. (" & VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_standartFiliale & "):"
                Label29.Text = aktNr
                Label29.Visible = True
                Label30.Visible = True
            End If
        End If

        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMIN", "SDL") Then
            btnQSAufteilung.Visible = True
            btnCSAufteilung.Visible = True
        End If
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            pnlBerichte.Visible = True
            Button21.Visible = True
            Button16.Visible = True
            Button17.Visible = True
        ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "AMBAR" Then
            pnlBerichte.Visible = True
            For Each p In pnlBerichte.Controls
                p.Visible = False
            Next
            Button25.Visible = True
            MyComboBox2.Visible = True
        End If


        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen_Erlöse", "SDL") Then
            btnSpedBuchEinnahmen.Visible = True
        End If

        If KDSearch > 0 Then
            kdtxtAuftraggeber.KdNr = KDSearch
            txtAbfertDat._value = dat_von.ToShortDateString
            txtAbfertDatBis._value = dat_bis.ToShortDateString
            cbxOderEmpfanger.Checked = True
        End If

        initToolStripMenu()
    End Sub
    Function getValues() 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 getValuesFiliale() As String
        Dim s As String = ""
        For Each i In lstFiliale.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 getValuesFilialeHandling() As String
        Dim s As String = ""
        For Each i In lstFilialeHandling.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 getValuesGrenzstelle() As String
        Dim s As String = ""
        For Each i In lstGrenze.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

    ' Private Sub Button1_Click(sender As Object, e As EventArgs)
    '      For i = 0 To MyListBox1.Items.Count - 1
    '          MyListBox1.SetSelected(i, True)
    '      Next
    'End Sub
    '
    Private Sub Button13_Click(sender As Object, e As EventArgs) Handles btnKeine.Click
        For i = 0 To MyListBox1.Items.Count - 1
            MyListBox1.SetSelected(i, False)
        Next
    End Sub

    Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
        For i = 0 To lstFiliale.Items.Count - 1
            lstFiliale.SetSelected(i, False)
        Next
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnAlle.Click
        For i = 0 To MyListBox1.Items.Count - 1
            MyListBox1.SetSelected(i, True)
        Next
    End Sub


    '   Sub initKdAuftraggeber()
    '     Dim dgvFindKD As New DataGridView
    ' dgvFindKD.Name = "dgvFindKD"
    ' Me.Controls.Add(dgvFindKD)
    ' dgvFindKD.Visible = False
    ' kdtxtAuftraggeber.dgv = dgvFindKD
    ' AddHandler kdtxtAuftraggeber.PropertyChanged, Sub()
    ' txtAuftraggeberKdnr.Text = IIf(kdtxtAuftraggeber.KdNr_value > 0, kdtxtAuftraggeber.KdNr_value, "")
    ' End Sub
    ' End Sub

    ' Sub initKdAbsender()
    '     Dim dgvFindKD As New DataGridView
    ' dgvFindKD.Name = "dgvFindKD"
    ' Me.Controls.Add(dgvFindKD)
    ' dgvFindKD.Visible = False
    ' kdtxtAbsender.dgv = dgvFindKD
    ' kdtxtAbsender.kdNrField = txtAbsenderKdnr
    ' End Sub

    ' Sub initKdEmpfaenger()
    '     Dim dgvFindKD As New DataGridView
    ' dgvFindKD.Name = "dgvFindKD"
    ' Me.Controls.Add(dgvFindKD)
    ' dgvFindKD.Visible = False
    ' kdtxtEmpfaenger.dgv = dgvFindKD
    ' kdtxtEmpfaenger.kdNrField = txtEmpfaengerKdnr
    ' End Sub

    ' Sub initKdFrachtfuehrer()
    '     Dim dgvFindKD As New DataGridView
    ' dgvFindKD.Name = "dgvFindKD"
    ' Me.Controls.Add(dgvFindKD)
    ' dgvFindKD.Visible = False
    ' kdtxtFrachtfuehrer.dgv = dgvFindKD
    ' kdtxtFrachtfuehrer.kdNrField = txtFrachtfuehrerKdnr
    ' End Sub

    ' Sub initKdEndempfaenger()
    '     Dim dgvFindKD As New DataGridView
    ' dgvFindKD.Name = "dgvFindKD"
    ' Me.Controls.Add(dgvFindKD)
    ' dgvFindKD.Visible = False
    ' kdtxtEndempfaenger.dgv = dgvFindKD
    ' kdtxtEndempfaenger.kdNrField = txtEndempfaengerKdnr
    ' End Sub


    Private Sub txtAbfertDat_TextChanged(sender As Object, e As EventArgs) Handles txtAbfertDat.TextChanged
        txtAbfertDatBis.Enabled = sender.text <> ""
    End Sub

    Private Sub MyTextBox1_TextChanged(sender As Object, e As EventArgs) Handles txtAbfertigungsnummer.TextChanged
        txtAbfertigungsnummerBis.Enabled = sender.text <> ""
    End Sub



    Private Sub DataGridView_CellContentClick(sender As Object, e As EventArgs) Handles DataGridView.DoubleClick, DataGridView.CellContentDoubleClick
        If DataGridView.SelectedRows.Count = 0 Then Exit Sub
        'If tbcntr.SelectedIndex = 0 Then
        Dim frmNacherfassung As New frmNacherfassungNEU
        frmNacherfassung.srchFiliale = DataGridView.SelectedRows(0).Cells("FilialenNr").Value
        frmNacherfassung.srchAbfertigungsnummer = DataGridView.SelectedRows(0).Cells("AbfertigungsNr").Value
        frmNacherfassung.srchUnterNr = DataGridView.SelectedRows(0).Cells("UnterNr").Value
        frmNacherfassung.ShowDialog(Me)
        DataGridView.RELOAD()
        ' End If

        '   frmNacherfassung.showAll()
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        Dim frmNacherfassung As New frmNacherfassungNEU
        ' frmNacherfassung.cboFiliale.Text = DataGridView.SelectedRows(0).Cells("FilialenNr").Value
        ' frmNacherfassung.txtUnterNr.Text = DataGridView.SelectedRows(0).Cells("UnterNr").Value
        ' frmNacherfassung.txtAbfertigungsnummer.Text = DataGridView.SelectedRows(0).Cells("AbfertigungsNr").Value
        frmNacherfassung.newEntry = True
        '   frmNacherfassung.FMZollPersID = VERAG_PROG_ALLGEMEIN.cglobal.AktiverMitarbeiter.mit_FMZollPersID
        ' frmNacherfassung.initDataBinding()
        frmNacherfassung.ShowDialog(Me)
        DataGridView.RELOAD()
    End Sub

    Private Sub EintragLöschenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EintragLöschenToolStripMenuItem.Click
        If DataGridView.SelectedRows.Count > 0 Then
            If DataGridView.SelectedRows.Count > 1 Then
                MsgBox("Einträge können nur einzeln gelöscht werden!")
                Exit Sub
            End If

            If vbYes = MsgBox("Möchten Sie den Eintrag wirklich löschen?", vbYesNoCancel) Then
                Dim r As DataGridViewRow = DataGridView.SelectedRows(0)

                Dim anzRechnung = SQL.getValueTxtBySql("select count(*) FROM [VERAG].[dbo].[Rechnungsausgang] where AbfertigungsNr =" & (r.Cells("AbfertigungsNr").Value) & " AND FilialenNr = " & (r.Cells("FilialenNr").Value) & " AND SpeditionsbuchUnterNr = " & (r.Cells("UnterNr").Value), "FMZOLL")

                If CInt(anzRechnung) > 0 Then
                    MsgBox("Eintrag wurde bereits verrechnet (es existiert bereits ein Beleg " & vbNewLine & " mit dieser Abfertigungsnummer) und kann nicht gelöscht werden!")
                    Exit Sub
                End If

                Dim spb As New cSpeditionsbuch(r.Cells("FilialenNr").Value, r.Cells("AbfertigungsNr").Value, r.Cells("UnterNr").Value)
                Dim arv As New cSpeditionsbucharchiv
                arv.FilialenNr = spb.FilialenNr
                arv.AbfertigungsNr = spb.AbfertigungsNr
                arv.UnterNr = spb.UnterNr
                arv.Abfertigungsdatum = spb.Abfertigungsdatum
                arv.Bar = spb.Bar
                arv.Fakturiert = spb.Fakturiert
                arv.BelegNr = spb.BelegNr
                arv.ErfassungsNr = spb.ErfassungsNr
                arv.LKW_Kennzeichen = spb.LKW_Kennzeichen
                arv.AnzahlZA = spb.AnzahlZA
                arv.AnzahlZAFremd = spb.AnzahlZAFremd
                arv.AnzahlZnV = spb.AnzahlZnV
                arv.AnzahlZnVFremd = spb.AnzahlZnVFremd
                arv.AnzahlT1 = spb.AnzahlT1
                arv.AnzahlT2 = spb.AnzahlT2
                arv.AnzahlAE = spb.AnzahlAE
                arv.AnzahlCarnetTIR = spb.AnzahlCarnetTIR
                arv.AnzahlBarvorlagen = spb.AnzahlBarvorlagen
                arv.AnzahlSonstiges = spb.AnzahlSonstiges
                arv.AnzahlGrenzgebühren = spb.AnzahlGrenzgebühren
                arv.AvisUhrzeit = spb.AvisUhrzeit
                arv.Vermerk = spb.Vermerk
                arv.Bemerkungen = spb.Bemerkungen
                arv.Währungsschlüssel = spb.Währungsschlüssel
                arv.Rechnungsbetrag = spb.Rechnungsbetrag
                arv.Umrechnungskurs = spb.Umrechnungskurs
                arv.Packstücke = spb.Packstücke
                arv.Packstücke_Zoll = spb.Packstücke_Zoll
                arv.Rohmasse = spb.Rohmasse
                arv.Zahlungsaufschub = spb.Zahlungsaufschub
                arv.Löschen = spb.Löschen
                arv.Abfertigungsart = spb.Abfertigungsart
                arv.Abfertigungsanzahl = spb.Abfertigungsanzahl
                arv.AbfertigungsanzahlPos = spb.AbfertigungsanzahlPos
                arv.Barzahlungsbetrag = spb.Barzahlungsbetrag
                arv.Sachbearbeiter = spb.Sachbearbeiter
                arv.Personalnummer = spb.Personalnummer
                arv.PersonalnummerQS = spb.PersonalnummerQS
                arv.AtlasBezNrEZA = spb.AtlasBezNrEZA
                arv.AtlasBezNrNCTS = spb.AtlasBezNrNCTS
                arv.AtlasBezNrAES = spb.AtlasBezNrAES
                arv.Versendungsland = spb.Versendungsland
                arv.SB_CMR = spb.SB_CMR
                arv.SB_CMRDatum = spb.SB_CMRDatum
                arv.SB_CMRNr = spb.SB_CMRNr
                arv.veoerz_basbtg = spb.veoerz_basbtg
                arv.Zucker_MRN_Nr = spb.Zucker_MRN_Nr
                arv.Zucker_MRN_Datum = spb.Zucker_MRN_Datum
                arv.Zucker_Aufschub = spb.Zucker_Aufschub
                arv.Zollsystem = spb.Zollsystem
                arv.Bestimmungszollstelle = spb.Bestimmungszollstelle
                arv.Bürgschaft = spb.Bürgschaft
                arv.Sicherheitsbetrag = spb.Sicherheitsbetrag
                arv.SgutKompl = spb.SgutKompl
                arv.Bestimmungsland = spb.Bestimmungsland
                arv.EuFiskalEmpfänger = spb.EuFiskalEmpfänger
                arv.QKN = spb.QKN
                arv.EndempfängerKundenNr = spb.EndempfängerKundenNr
                arv.Endempfänger = spb.Endempfänger
                arv.AvisoID = spb.AvisoID
                arv.SendungID = spb.SendungID
                arv.Grenzstelle = spb.Grenzstelle
                arv.KdAuftragsNr = spb.KdAuftragsNr
                arv.KdAuftragsNrAvisierer = spb.KdAuftragsNrAvisierer
                arv.KdAuftragsNrEmpfaenger = spb.KdAuftragsNrEmpfaenger
                arv.KdAuftragsNrFrachtfuehrer = spb.KdAuftragsNrFrachtfuehrer
                arv.SB_Zeitstempel = spb.SB_Zeitstempel
                arv.NCTS_Verzollungsadresse = spb.NCTS_Verzollungsadresse
                arv.NCTS_VerzollungsadresseKdNr = spb.NCTS_VerzollungsadresseKdNr
                arv.AuftraggeberBetragKassiert = spb.AuftraggeberBetragKassiert
                arv.Lieferantenrechnung = spb.Lieferantenrechnung
                arv.DokumentId_Steuerbeleg = spb.DokumentId_Steuerbeleg
                arv.DokumentId_Mitteilung = spb.DokumentId_Mitteilung
                arv.DokumentId_VBD = spb.DokumentId_VBD
                arv.DokumentId_ABD = spb.DokumentId_ABD
                arv.DokumentId_AVM = spb.DokumentId_AVM
                arv.FilialenNrHandling = spb.FilialenNrHandling
                arv.HandlingZuKassieren = spb.HandlingZuKassieren
                arv.FilialenNrAbklaerung = spb.FilialenNrAbklaerung
                arv.PersonalnummerAbklTR = spb.PersonalnummerAbklTR
                arv.UK_EIDR_ausstehend = spb.UK_EIDR_ausstehend
                arv.Zollstelle = spb.Zollstelle
                arv.Zollsystem_Land = spb.Zollsystem_Land
                arv.geloescht_von = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
                arv.geloescht_am = Now()
                arv.AvisiererKundenNr = spb.AvisiererKundenNr
                arv.AbsenderKundenNr = spb.AbsenderKundenNr
                arv.AbsenderOffertenNr = spb.AbsenderOffertenNr
                arv.EmpfängerKundenNr = spb.EmpfängerKundenNr
                arv.EmpfängerOffertenNr = spb.EmpfängerOffertenNr
                arv.VermittlerKundenNr = spb.VermittlerKundenNr
                arv.VermittlerOffertenNr = spb.VermittlerOffertenNr
                arv.FrachtführerKundenNr = spb.FrachtführerKundenNr

                If Not arv.SAVE() Then
                    MsgBox("Eintrag konnte nicht gelöscht werden!")
                    Exit Sub
                End If

                SQL.doSQL("DELETE FROM [Speditionsbuch] WHERE [FilialenNr]='" & r.Cells("FilialenNr").Value & "' AND [AbfertigungsNr] ='" & r.Cells("AbfertigungsNr").Value & "' AND [UnterNr]='" & r.Cells("UnterNr").Value & "' ", "FMZOLL")
                DataGridView.RELOAD()
            End If
        End If
    End Sub


    Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged
        txtAbfertDat._value = CDate(sender.value).ToShortDateString
    End Sub

    Private Sub DateTimePicker2_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker2.ValueChanged
        txtAbfertDatBis._value = CDate(sender.value).ToShortDateString
    End Sub

    Private Sub btnMonat_Click(sender As Object, e As EventArgs) Handles btnMonat.Click
        initBtns("Monat")
    End Sub

    Dim MONAT As Date = CDate("01." & Now.Month & "." & Now.Year) '.AddMonths(-1)
    Dim srcTAG As Date = CDate(Now.ToShortDateString)

    Dim JAHR As Date = CDate("01.01." & Now.Year)

    Sub initBtns(MonatJahr)
        btnMonat.Text = MONAT.ToString("MMMM")
        btnJahr.Text = JAHR.Year
        Select Case MonatJahr
            Case "Monat"
                DateTimePicker1.Value = MONAT
                DateTimePicker2.Value = MONAT.AddMonths(1).AddDays(-1)
            Case "Jahr"
                '  If cbxGeschaftsjahr.Checked Then
                'DateTimePicker1.Value = JAHR.AddMonths(1)
                ' DateTimePicker2.Value = JAHR.AddYears(1).AddMonths(1).AddDays(-1)
                ' Else
                DateTimePicker1.Value = JAHR
                DateTimePicker2.Value = JAHR.AddYears(1).AddDays(-1)
                'End If
            Case "Tag"
                '  If cbxGeschaftsjahr.Checked Then
                'DateTimePicker1.Value = JAHR.AddMonths(1)
                ' DateTimePicker2.Value = JAHR.AddYears(1).AddMonths(1).AddDays(-1)
                ' Else
                DateTimePicker1.Value = srcTAG
                DateTimePicker2.Value = srcTAG
                If srcTAG = Now.ToShortDateString Then
                    btnToday.Text = "Heute"
                ElseIf srcTAG = Now.AddDays(-1).ToShortDateString Then
                    btnToday.Text = "Gestern"
                ElseIf srcTAG = Now.AddDays(-2).ToShortDateString Then
                    btnToday.Text = "Vorgestern"
                Else
                    btnToday.Text = srcTAG.ToString("dd.MM")
                End If

                'End If
            Case ""
                DateTimePicker1.Value = ("01." & Now.Month & "." & Now.Year)
                DateTimePicker2.Value = Now
        End Select
        btnSuche.PerformClick()
    End Sub

    Private Sub btnJahr_Click(sender As Object, e As EventArgs) Handles btnJahr.Click
        initBtns("Jahr")
    End Sub

    Private Sub btnBisMonat_Click(sender As Object, e As EventArgs) Handles btnBisMonat.Click
        MONAT = MONAT.AddMonths(1)
        initBtns("Monat")
    End Sub

    Private Sub btnVonMonat_Click(sender As Object, e As EventArgs) Handles btnVonMonat.Click
        MONAT = MONAT.AddMonths(-1)
        initBtns("Monat")
    End Sub

    Private Sub btnBisJahr_Click(sender As Object, e As EventArgs) Handles btnBisJahr.Click
        JAHR = JAHR.AddYears(1)
        initBtns("Jahr")
    End Sub

    Private Sub btnVonJahr_Click(sender As Object, e As EventArgs) Handles btnVonJahr.Click
        JAHR = JAHR.AddYears(-1)
        initBtns("Jahr")
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles btnDetailsuche.Click
        Try

            SplitContainer1.Panel2Collapsed = Not SplitContainer1.Panel2Collapsed

            If SplitContainer1.Panel2Collapsed Then
                '    pnlSearch.Height = SplitContainer1.Panel1.Height
                SplitContainer.SplitterDistance -= 200
            Else
                'pnlSearch.Height = SplitContainer1.Height
                SplitContainer.SplitterDistance += 200
            End If

            If btnDetailsuche.Image Is SDL.My.Resources.Resources.pfeil_unten Then
                btnDetailsuche.Image = SDL.My.Resources.Resources.pfeil_oben
            Else
                btnDetailsuche.Image = SDL.My.Resources.Resources.pfeil_unten
            End If

        Catch ex As Exception

        End Try
    End Sub


    Private Sub FlatButton7_Click(sender As Object, e As EventArgs) Handles FlatButton7.Click
        DataGridView.RELOAD()
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        srcTAG = srcTAG.AddDays(-1)
        initBtns("Tag")
    End Sub

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        srcTAG = srcTAG.AddDays(1)
        initBtns("Tag")
    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles btnToday.Click
        initBtns("Tag")
    End Sub

    Private Sub btnExcel_Click(sender As Object, e As EventArgs) Handles btnExcel.Click
        Me.Cursor = Cursors.WaitCursor
        cProgramFunctions.genExcelFromDGV_NEW(DataGridView, False)
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        Dim displayFilter = cbxFilterInBericht.Checked
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim sqlstr As String = ""
            If CheckBox1.Checked Then
                sqlstr &= " SELECT FilialenNr,Speditionsbuch.Abfertigungsart,Abfertigungsarten.Abfertigungsbezeichnung,sum(Abfertigungsanzahl) as Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,MIN(Abfertigungsdatum) as von, MAX(Abfertigungsdatum) as bis FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart WHERE 1=1 "
                sqlstr &= getSpedBuchWhere()
                sqlstr &= " group by FilialenNr,Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung "
                sqlstr &= " order by FilialenNr, Speditionsbuch.Abfertigungsart"
            Else
                sqlstr &= " SELECT Speditionsbuch.Abfertigungsart,Abfertigungsarten.Abfertigungsbezeichnung,sum(Abfertigungsanzahl) as Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,MIN(Abfertigungsdatum) as von, MAX(Abfertigungsdatum) as bis FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart WHERE 1=1 "
                sqlstr &= getSpedBuchWhere()
                sqlstr &= " group by Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung "
                sqlstr &= " order by Speditionsbuch.Abfertigungsart"
            End If
            Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL", , getSpedbuchList())
            'DataGridView.DataSource = dt


            Dim print As New frmPrintLayout
            print.Text = "Speditionsbericht"

            Dim rpt As New rptSpeditionsbericht

            rpt.DataSource = dt

            'Filter anzeigen
            If displayFilter Then
                rpt.lblFilterTxt.Visible = displayFilter
                rpt.txtFilter.Visible = displayFilter
                rpt.txtFilter.Text = generateReadableFilter(SQL.getStringReplaceScalarVar(getSpedBuchWhere, getSpedbuchList))

            Else
                If txtUeberschr.Text <> "" Then
                    rpt.txtFilter.Text = txtUeberschr.Text
                    rpt.txtFilter.Visible = True
                    rpt.lblFilterTxt.Visible = True
                    rpt.lblFilterTxt.Text = "Beschreibung:"
                End If
            End If
            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "IMEX" : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Label28.Text = "IMEX Customs Service GmbH"
                Case "ATILLA" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "ATILLA Spedition"
                Case "UNISPED" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "UNISPED Spedition"
                Case "AMBAR" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "AMBAR"
                Case "FRONTOFFICE" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "FRONTOFFICE"
                Case "VERIMEX" : rpt.picVERAG.Image = My.Resources.verimex : rpt.Label28.Text = "VERIMEX"
                Case Else
            End Select


            If CheckBox1.Checked Then
                rpt.GroupHeader1.DataField = "FilialenNr" 'Gruppierung
            End If
            If rpt.DataSource.rows.count = 0 Then
                rpt.Dispose() : print.Dispose()
                MsgBox("Keine Daten vorhanden!")
                Exit Sub
            End If

            Dim sum = 0
            rpt.lblUeberschrift.Text = "Speditionsbericht  " & txtAbfertDat.Text & " bis " & txtAbfertDatBis.Text
            rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
            'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung

            'Dim cnt As Integer = 0
            rpt.lblDat.Text = Now.ToLongDateString
            Dim sumAnz As Double = 0
            Dim sumBar As Double = 0

            If cbxSpedBerichtBar.Checked Then
                rpt.lblBarzahlungsbetrag.Visible = True
                rpt.lblBarTitle.Visible = True
                rpt.lblSummeBar.Visible = True
            Else
                rpt.lblBarzahlungsbetrag.Visible = False
                rpt.lblBarTitle.Visible = False
                rpt.lblSummeBar.Visible = False
            End If
            rpt.lblFiliale.Text = "Alle Filialen"

            AddHandler rpt.Detail.Format, Sub()
                                              rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
                                              rpt.lblBis.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString
                                              rpt.lblAbfAnz.Text = rpt.Fields.Item("Anzahl").Value
                                              rpt.lblAbfArtNr.Text = If(rpt.Fields.Item("Abfertigungsart").Value Is DBNull.Value, "-", rpt.Fields.Item("Abfertigungsart").Value)
                                              rpt.lblAbfArt.Text = If(rpt.Fields.Item("Abfertigungsbezeichnung").Value Is DBNull.Value, "-", rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              rpt.lblBarzahlungsbetrag.Text = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value()).ToString("C")

                                              sumBar += CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value)
                                              sumAnz += CDbl(rpt.Fields.Item("Anzahl").Value)
                                          End Sub
            AddHandler rpt.GroupHeader1.Format, Sub()
                                                    If CheckBox1.Checked Then rpt.lblFiliale.Text = SQL.getValueTxtBySql("SELECT CAST(FilialenNr as varchar (4)) + ' ' + Grenzstelle FROM filialen WHERE FilialenNr='" & rpt.Fields.Item("FilialenNr").Value & "'", "FMZOLL")
                                                    sumAnz = 0
                                                    sumBar = 0
                                                End Sub
            AddHandler rpt.GroupFooter1.Format, Sub()
                                                    rpt.lblSummeAnzahl.Text = sumAnz
                                                    rpt.lblSummeBar.Text = sumBar.ToString("C")
                                                End Sub

            print.Viewer.LoadDocument(rpt)
            print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            print.Show()
        End If
    End Sub

    Private Sub Button9_Click(sender As Object, e As EventArgs) Handles btnQSAufteilung.Click
        'MsgBox("Liefer erst korrekte Daten, wenn alle NL umgestellt!")
        DataGridView.Columns.Clear()

        Dim sqlstr As String = ""
        sqlstr &= " SELECT Aviso.[Grenzstelle],  SUM(Speditionsbuch.Abfertigungsanzahl) as Anzahl FROM Speditionsbuch INNER JOIN " & AVISOSERVER & " on Aviso.avisoid=Speditionsbuch.AvisoID WHERE  PersonalnummerQS is not null "
        sqlstr &= " and FilialenNr NOT IN ( 4801,4802,4806 ) "
        Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                               " GROUP BY Aviso.[Grenzstelle]" &
                                               " ORDER BY Anzahl DESC",
                                    "FMZOLL", , getSpedbuchList())
        DataGridView.DataSource = dt
    End Sub

    Private Sub Button9_Click_1(sender As Object, e As EventArgs) Handles Button9.Click, Button24.Click
        Dim displayFilter = cbxFilterInBericht.Checked
        Dim groupByKd = cboRolle._value

        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim sqlstr As String = ""
            If txtMax.Text <> "" And Not IsNumeric(txtMax.Text) Then
                MsgBox("Max muss eine Zahl sein!") : Exit Sub
            End If
            sqlstr &= " SELECT " & If(txtMax.Text <> "", " TOP " & txtMax.Text, "") & " isnull(Speditionsbuch.XXXXX,'-') as KdNr,isnull((SELECT Ordnungsbegriff FROM Adressen WHERE AdressenNr=XXXXX),'-') as Kunde, sum(Abfertigungsanzahl) as Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,MIN(Abfertigungsdatum) as von, MAX(Abfertigungsdatum) as bis FROM Speditionsbuch WHERE 1=1 "
            sqlstr &= getSpedBuchWhere()
            sqlstr &= " group by Speditionsbuch.XXXXX"
            sqlstr &= " order by Anzahl DESC,Kunde"
            Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr.Replace("XXXXX", groupByKd), "FMZOLL", , getSpedbuchList())
            'DataGridView.DataSource = dt

            If sender.name = "Button24" Then

                Me.Cursor = Cursors.WaitCursor
                cProgramFunctions.genExcelFromDT_NEW(dt)
                Me.Cursor = Cursors.Default

            Else


                Dim print As New frmPrintLayout
                print.Text = "Speditionsbericht"

                Dim rpt As New rptSpeditionsberichtKunde

                Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                    Case "IMEX" : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Label28.Text = "IMEX Customs Service GmbH"
                    Case "ATILLA" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "ATILLA Spedition"
                    Case Else
                End Select

                rpt.DataSource = dt

                'Filter anzeigen
                If displayFilter Then
                    rpt.lblFilterTxt.Visible = displayFilter
                    rpt.txtFilter.Visible = displayFilter
                    rpt.txtFilter.Text = generateReadableFilter(SQL.getStringReplaceScalarVar(getSpedBuchWhere, getSpedbuchList))
                Else
                    If txtUeberschr.Text <> "" Then
                        rpt.txtFilter.Text = txtUeberschr.Text
                        rpt.txtFilter.Visible = True
                        rpt.lblFilterTxt.Visible = True
                        rpt.lblFilterTxt.Text = "Beschreibung:"
                    End If
                End If


                If rpt.DataSource.rows.count = 0 Then
                    rpt.Dispose() : print.Dispose()
                    MsgBox("Keine Daten vorhanden!")
                    Exit Sub
                End If

                Dim sum = 0
                Dim cnt = 0
                rpt.lblUeberschrift.Text = "Speditionsbericht nach Kunden  " & txtAbfertDat.Text & " bis " & txtAbfertDatBis.Text
                rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
                'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung

                'Dim cnt As Integer = 0
                rpt.lblDat.Text = Now.ToLongDateString
                Dim sumAnz As Double = 0
                Dim sumBar As Double = 0

                rpt.lblFiliale.Text = "Alle Filialen"

                AddHandler rpt.Detail.Format, Sub()
                                                  cnt += 1
                                                  '   rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
                                                  '  rpt.lblBis.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString
                                                  rpt.lblNr.Text = cnt
                                                  ' rpt.lblAbfArtNr.Text = rpt.Fields.Item("Abfertigungsart").Value
                                                  ' rpt.lblAbfArt.Text = rpt.Fields.Item("Abfertigungsbezeichnung").Value
                                                  rpt.lblAbfAnz.Text = rpt.Fields.Item("Anzahl").Value

                                                  rpt.lblKunde.Text = CInt(If(rpt.Fields.Item("KdNr").Value, "0")).ToString("D6") & " " & rpt.Fields.Item("Kunde").Value

                                                  rpt.lblBarzahlungsbetrag.Text = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value()).ToString("C")

                                                  sumBar += CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value)
                                                  sumAnz += CDbl(rpt.Fields.Item("Anzahl").Value)
                                              End Sub
                AddHandler rpt.GroupHeader1.Format, Sub()
                                                        sumAnz = 0
                                                        sumBar = 0
                                                    End Sub
                AddHandler rpt.GroupFooter1.Format, Sub()
                                                        rpt.lblSummeAnzahl.Text = sumAnz
                                                        rpt.lblSummeBar.Text = sumBar.ToString("C")
                                                    End Sub

                print.Viewer.LoadDocument(rpt)
                print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
                print.Show()
            End If
        End If

    End Sub

    Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
        Dim displayFilter = cbxFilterInBericht.Checked
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim sqlstr As String = ""
            '     If CheckBox1.Checked Then

            Dim sql_KdAuftragsNr = ",Speditionsbuch.KdAuftragsNr as KdAuftragsNr"
            Select Case cboDetailberichtKdAtrNr._value
                Case "AVISIERER" : sql_KdAuftragsNr = ",Speditionsbuch.KdAuftragsNrAvisierer as KdAuftragsNr"
                Case "EMPFAENGER" : sql_KdAuftragsNr = ",Speditionsbuch.KdAuftragsNrEmpfaenger as KdAuftragsNr"
                Case "FRACHTFUEHRER" : sql_KdAuftragsNr = ",Speditionsbuch.KdAuftragsNrFrachtfuehrer as KdAuftragsNr"
            End Select


            sqlstr &= " SELECT  FilialenNr, AbfertigungsNr,UnterNr, Speditionsbuch.Abfertigungsart as Abfertigungsart ,Abfertigungsdatum, BelegNr, Rohmasse, Vermerk, Packstücke, AbsenderKundenNr, Absender, EmpfängerKundenNr, Empfänger, VermittlerKundenNr, Vermittler, "
            sqlstr &= "         FrachtführerKundenNr, Frachtführer, AvisiererKundenNr, Avisierer,Währungscode,Barzahlungsbetrag,Rechnungsbetrag, [LKW Kennzeichen],"
            sqlstr &= "         Abfertigungsanzahl, Speditionsbuch.Abfertigungsart, Abfertigungsbezeichnung,AvisoID" & sql_KdAuftragsNr & ",Speditionsbuch.KdAuftragsNrAvisierer,Speditionsbuch.KdAuftragsNrEmpfaenger,Speditionsbuch.KdAuftragsNrFrachtfuehrer, Speditionsbuch.Bemerkungen,Speditionsbuch.Zollstelle ,Speditionsbuch.Grenzstelle "
            sqlstr &= " FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart "
            sqlstr &= " LEFT JOIN Währungstabelle on  Währungstabelle.Währungsschlüssel=speditionsbuch.Währungsschlüssel WHERE 1=1 "
            sqlstr &= getSpedBuchWhere()
            If CheckBox2.Checked Then : sqlstr &= " order by FilialenNr, AvisoId,Speditionsbuch.Abfertigungsart,Abfertigungsdatum"
            Else : sqlstr &= " order by FilialenNr, Speditionsbuch.Abfertigungsart,Abfertigungsdatum"
            End If

            ' MsgBox(sqlstr)
            Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL", , getSpedbuchList())
            'DataGridView.DataSource = dt


            Dim print As New frmPrintLayout
            print.Text = "Speditionsbericht"

            Dim rpt As New rptSpeditionsberichtKdSpez

            rpt.PageSettings.PaperKind = GrapeCity.ActiveReports.Printing.PaperKind.A4

            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "IMEX" : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Label28.Text = "IMEX Customs Service GmbH"
                Case "ATILLA" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "ATILLA Spedition"
                Case "VERIMEX" : rpt.picVERAG.Image = My.Resources.verimex : rpt.Label28.Text = "VERIMEX"
                Case Else
            End Select

            rpt.DataSource = dt

            'Filter anzeigen
            If displayFilter Then
                rpt.lblFilterTxt.Visible = displayFilter
                rpt.txtFilter.Visible = displayFilter
                rpt.txtFilter.Text = generateReadableFilter(SQL.getStringReplaceScalarVar(getSpedBuchWhere, getSpedbuchList))

            Else
                If txtUeberschr.Text <> "" Then
                    rpt.txtFilter.Text = txtUeberschr.Text
                    rpt.txtFilter.Visible = True
                    rpt.lblFilterTxt.Visible = True
                    rpt.lblFilterTxt.Text = "Beschreibung:"
                End If
            End If

            Dim Zahlungsdetails = cbxRptDetailsZahlungsdetails.Checked
            rpt.lblBarTital.Visible = Zahlungsdetails
            rpt.lblBarzahlungsbetrag.Visible = Zahlungsdetails
            rpt.lblGesGesSumBarzahlungsbetrag.Visible = Zahlungsdetails
            rpt.lblGesSumBarzahlungsbetrag.Visible = Zahlungsdetails
            rpt.lblGesSumRechnungsbetrag.Visible = Zahlungsdetails
            rpt.lblGesGesSumRechnungsbetrag.Visible = Zahlungsdetails
            rpt.Label43.Visible = Zahlungsdetails
            rpt.Label43.Visible = Zahlungsdetails
            rpt.Label34.Visible = Zahlungsdetails
            rpt.Label35.Visible = Zahlungsdetails
            rpt.Label13.Visible = Zahlungsdetails
            rpt.Label17.Visible = Zahlungsdetails
            rpt.lblSumRechnungsbetrag.Visible = Zahlungsdetails
            rpt.lblSumBarzahlungsbetrag.Visible = Zahlungsdetails
            rpt.Label19.Visible = Zahlungsdetails
            rpt.Label39.Visible = Zahlungsdetails
            rpt.Label46.Visible = Zahlungsdetails
            rpt.Label47.Visible = Zahlungsdetails
            rpt.lblGesWaehrung.Visible = Zahlungsdetails
            rpt.lblGesgesWaehrung.Visible = Zahlungsdetails

            If CheckBox1.Checked Then
                rpt.GroupHeader1.DataField = "FilialenNr" 'Gruppierung
            Else
                rpt.lblFiliale.Text = "Alle Filialen"
                rpt.GroupFooter1.Visible = False ' Sonst doppelete Summe
            End If

            If CheckBox2.Checked Then
                rpt.GroupHeader3.DataField = "AvisoId" 'Gruppierung
                rpt.lblGesSumLKWsFilialeAnzahl.Visible = True
                rpt.lblSumFilialeLKWs.Visible = True

                rpt.lblGesGesSumLKWsAnzahl.Visible = True
                rpt.lblGesGesSumLKWs.Visible = True
            Else
                rpt.GroupHeader3.Visible = False ' Sonst doppelete Summe
                rpt.GroupFooter3.Visible = False ' Sonst doppelete Summe
                rpt.lblGesGesSumLKWsAnzahl.Visible = False
                rpt.lblGesGesSumLKWs.Visible = False
            End If


            If CheckBox3.Checked Then
                rpt.GroupHeader2.DataField = "Abfertigungsart" 'Gruppierung
            Else
                rpt.GroupHeader2.Visible = False ' Sonst doppelete Summe
                rpt.GroupFooter2.Visible = False ' Sonst doppelete Summe
            End If


            ' rpt.GroupHeader2.DataField = "AvisoId" 'Gruppierung

            ' MsgBox(rpt.DataSource.rows.count)
            If rpt.DataSource.rows.count = 0 Then
                rpt.Dispose() : print.Dispose()
                MsgBox("Keine Daten vorhanden!")
                Exit Sub
            End If

            Dim AvsioIdNull As String = ""
            For Each r In rpt.DataSource.rows
                If r("AvisoId") Is DBNull.Value OrElse r("AvisoId") <= 0 Then
                    AvsioIdNull &= r("FilialenNr") & " " & r("AbfertigungsNr") & " " & r("UnterNr") & "  -  " & r("Abfertigungsdatum") & "  -  " & r("LKW Kennzeichen") & vbNewLine
                End If
            Next
            If AvsioIdNull <> "" Then
                MsgBox("Achtung: folgende Sendungen sind keinem LKW/Aviso zugeordnet:" & vbNewLine & AvsioIdNull)

            End If
            Dim sum = 0
            rpt.lblUeberschrift.Text = "Speditionsbuch Details  " & txtAbfertDat.Text & " bis " & txtAbfertDatBis.Text
            rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
            'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung



            'Dim cnt As Integer = 0
            rpt.lblDat.Text = Now.ToLongDateString
            Dim sumAnz As Double = 0
            Dim sumBar As Double = 0
            Dim sumRg As Double = 0
            Dim gesSumAnz As Double = 0
            Dim gesSumBar As Double = 0
            Dim gesSumRg As Double = 0
            Dim gesgesSumAnz As Double = 0
            Dim gesgesSumBar As Double = 0
            Dim gesgesSumRg As Double = 0
            Dim SumAnzLKW As Double = 0
            Dim gesSumAnzLKW As Double = 0
            Dim gesgesSumAnzLKW As Double = 0

            Dim sumAbfBez = ""
            Dim gesFilBez = ""

            '   Dim gesgesAbfBez = ""

            AddHandler rpt.Detail.Format, Sub()
                                              ' rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
                                              ' rpt.lblLKWNr.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString

                                              rpt.lblPosNr.Text = rpt.Fields.Item("FilialenNr").Value & " " & rpt.Fields.Item("AbfertigungsNr").Value & " " & rpt.Fields.Item("UnterNr").Value
                                              rpt.lblAbfDatum.Text = "Abf.Datum: " & rpt.Fields.Item("Abfertigungsdatum").Value
                                              rpt.lblBezugsNr.Text = checkNull(rpt.Fields.Item("BelegNr").Value)
                                              rpt.lblRohmasse.Text = "Rohmasse: " & checkNull(rpt.Fields.Item("Rohmasse").Value, "0") & "kg"
                                              rpt.txtVermerk.Text = checkNull(rpt.Fields.Item("Vermerk").Value)
                                              rpt.txtPackstücke.Text = checkNull(rpt.Fields.Item("Packstücke").Value)
                                              If cbxSpedDetailBem.Checked Then
                                                  If checkNull(rpt.Fields.Item("Bemerkungen").Value) <> "" Then
                                                      rpt.txtPackstücke.Text = (rpt.txtPackstücke.Text & vbNewLine & vbNewLine & checkNull(rpt.Fields.Item("Bemerkungen").Value)).trim
                                                  End If
                                              End If

                                              If rpt.txtPackstücke.Text.Length > 550 Then
                                                  rpt.txtPackstücke.Text = rpt.txtPackstücke.Text.Substring(0, 550) & "..."
                                              End If

                                              rpt.Label11.Text = ""
                                              If rpt.Fields.Item("Grenzstelle").Value IsNot Nothing AndAlso rpt.Fields.Item("Grenzstelle").Value IsNot DBNull.Value Then

                                                  If rpt.Fields.Item("Grenzstelle").Value.Replace("???", "").Replace("WO_FREMD", "") = "" Then
                                                      rpt.Label11.Text = SQL.getValueTxtBySql("SELECT Code +' - ' + [Description]  FROM tbl_DY_ZollDE_C0141_Zollstellen WHERE Code='" & If(rpt.Fields.Item("Zollstelle").Value, "") & "' AND ((StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()))", "FMZOLL")
                                                  Else
                                                      Dim GRZ As New VERAG_PROG_ALLGEMEIN.cGrenzstelle(rpt.Fields.Item("Grenzstelle").Value)
                                                      If GRZ IsNot Nothing AndAlso GRZ.hasEntry Then
                                                          rpt.Label11.Text = If(GRZ.grz_ZollamtDST, "") & " " & If(GRZ.grz_ZollamtBezeichnung, "") & vbNewLine & rpt.Fields.Item("Grenzstelle").Value
                                                      End If
                                                  End If
                                              End If

                                              rpt.lblAbsKdNr.Text = checkNull(rpt.Fields.Item("AbsenderKundenNr").Value)
                                              rpt.lblAbs.Text = checkNull(rpt.Fields.Item("Absender").Value)
                                              rpt.lblEmpfKdNr.Text = checkNull(rpt.Fields.Item("EmpfängerKundenNr").Value)
                                              rpt.lblEmpf.Text = checkNull(rpt.Fields.Item("Empfänger").Value)
                                              rpt.lblAuftrKdNr.Text = checkNull(rpt.Fields.Item("VermittlerKundenNr").Value)
                                              rpt.lblAuftr.Text = checkNull(rpt.Fields.Item("Vermittler").Value)
                                              rpt.lblFrachtfKdNr.Text = checkNull(rpt.Fields.Item("FrachtführerKundenNr").Value)
                                              rpt.lblFrachtf.Text = checkNull(rpt.Fields.Item("Frachtführer").Value)
                                              '  rpt.lblLKWNr.Text = rpt.Fields.Item("AvisiererKundenNr").Value
                                              '    rpt.lblLKWNr.Text = rpt.Fields.Item("Avisierer").Value
                                              rpt.lblWaehrung.Text = checkNull(rpt.Fields.Item("Währungscode").Value)
                                              'lblGesgesWaehrung.te

                                              rpt.lblKdAuftragNr.Text = checkNull(rpt.Fields.Item("KdAuftragsNr").Value)


                                              If rpt.lblKdAuftragNr.Text <> "" Then rpt.lblKdAuftragNr.Text = "Auftrag: " & rpt.lblKdAuftragNr.Text
                                              Dim bar As Double = 0
                                              Dim rg As Double = 0
                                              Dim anz As Double = 0
                                              If IsNumeric(checkNull(rpt.Fields.Item("Barzahlungsbetrag").Value)) Then bar = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value())
                                              If IsNumeric(checkNull(rpt.Fields.Item("Rechnungsbetrag").Value)) Then rg = CDbl(rpt.Fields.Item("Rechnungsbetrag").Value())
                                              rpt.lblBarzahlungsbetrag.Text = CDbl(bar).ToString("N2", CultureInfo.CurrentCulture)
                                              rpt.lblRechnungsBetrag.Text = CDbl(rg).ToString("N2", Globalization.CultureInfo.CurrentCulture)

                                              ' rpt.lblRechnungsbetragInEur.Text = rpt.Fields.Item("Rechnungsbetrag").Value * rpt.Fields.Item("Umrechnungskurs").Value

                                              rpt.lblLKWNr.Text = checkNull(rpt.Fields.Item("LKW Kennzeichen").Value)
                                              rpt.lblAnzahl.Text = checkNull(rpt.Fields.Item("Abfertigungsanzahl").Value)
                                              rpt.lblAbfertigungsart.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)
                                              ' rpt.lblAbs.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              ' rpt.lblBarzahlungsbetrag.Text = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value()).ToString("C")

                                              'sumBar += CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value)
                                              If IsNumeric(checkNull(rpt.Fields.Item("Abfertigungsanzahl").Value)) Then anz = CDbl(rpt.Fields.Item("Abfertigungsanzahl").Value)

                                              sumAbfBez = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              sumBar += bar
                                              sumRg += rg
                                              sumAnz += anz
                                              gesSumAnz += anz
                                              gesSumBar += bar
                                              gesSumRg += rg
                                              gesgesSumAnz += anz
                                              gesgesSumBar += bar
                                              gesgesSumRg += rg
                                              SumAnzLKW += anz
                                          End Sub
            AddHandler rpt.GroupHeader1.Format, Sub()
                                                    If CheckBox1.Checked Then
                                                        rpt.lblFiliale.Text = SQL.getValueTxtBySql("SELECT CAST(FilialenNr as varchar (4)) + ' ' + Grenzstelle FROM filialen WHERE FilialenNr='" & rpt.Fields.Item("FilialenNr").Value & "'", "FMZOLL")
                                                        rpt.lblGesSumFilialeBez.Text = rpt.lblFiliale.Text
                                                    Else
                                                        rpt.lblFiliale.Text = "Alle Filialen"
                                                    End If


                                                    gesSumAnz = 0
                                                    gesSumBar = 0
                                                    gesSumRg = 0
                                                    gesSumAnzLKW = 0
                                                End Sub
            AddHandler rpt.GroupHeader2.Format, Sub()
                                                    rpt.lblAbfertigungsartHeader.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)
                                                    sumBar = 0
                                                    sumRg = 0
                                                    sumAnz = 0
                                                End Sub
            AddHandler rpt.GroupHeader3.Format, Sub()
                                                    rpt.lblLKW.Text = "LKW: " & If(rpt.Fields.Item("LKW Kennzeichen").Value Is DBNull.Value, "LKW: - keine Zuordnung -", checkNull(rpt.Fields.Item("LKW Kennzeichen").Value))
                                                    rpt.lblGesSumLKWBez.Text = "LKW: " & If(rpt.Fields.Item("LKW Kennzeichen").Value Is DBNull.Value, "LKW: - keine Zuordnung -", checkNull(rpt.Fields.Item("LKW Kennzeichen").Value))
                                                    SumAnzLKW = 0
                                                    gesSumAnzLKW += 1
                                                    gesgesSumAnzLKW += 1
                                                End Sub
            AddHandler rpt.GroupFooter2.Format, Sub()
                                                    rpt.lblSumAbfertigungsart.Text = sumAbfBez
                                                    rpt.lblSumBarzahlungsbetrag.Text = sumBar.ToString("N2", CultureInfo.CurrentCulture)
                                                    rpt.lblSumRechnungsbetrag.Text = sumRg.ToString("N2", CultureInfo.CurrentCulture)
                                                    rpt.lblSumAnzahl.Text = sumAnz.ToString("N0")
                                                    'rpt.lblSuag.Text = sumRg.ToString("C")
                                                End Sub
            AddHandler rpt.GroupFooter3.Format, Sub()
                                                    rpt.lblGesSumAnzahlLKW.Text = SumAnzLKW
                                                    'rpt.lblSuag.Text = sumRg.ToString("C")
                                                End Sub

            AddHandler rpt.GroupFooter1.Format, Sub()

                                                    '  If CheckBox1.Checked Then
                                                    '      rpt.lblGesSumFilialeBez.Text = SQL.getValueTxtBySql("SELECT CAST(FilialenNr as varchar (4)) + ' ' + Grenzstelle FROM filialen WHERE FilialenNr='" & rpt.Fields.Item("FilialenNr").Value & "'", "FMZOLL")
                                                    '  Else
                                                    '      rpt.lblGesSumFilialeBez.Text = ""
                                                    ' End If

                                                    rpt.lblGesSumBarzahlungsbetrag.Text = gesSumBar.ToString("N2", CultureInfo.CurrentCulture)
                                                    rpt.lblGesSumRechnungsbetrag.Text = gesSumRg.ToString("N2", CultureInfo.CurrentCulture)
                                                    rpt.lblGesSumAnzahl.Text = gesSumAnz.ToString("N0")
                                                    rpt.lblGesSumLKWsFilialeAnzahl.Text = gesSumAnzLKW
                                                End Sub
            AddHandler rpt.ReportFooter1.Format, Sub()
                                                     rpt.lblGesGesSumBarzahlungsbetrag.Text = gesgesSumBar.ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.lblGesGesSumRechnungsbetrag.Text = gesgesSumRg.ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.lblGesGesSumAnzahl.Text = gesgesSumAnz.ToString("N0")
                                                     rpt.lblGesGesSumLKWsAnzahl.Text = gesgesSumAnzLKW

                                                 End Sub

            print.Viewer.LoadDocument(rpt)
            print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            print.Show()

        End If

    End Sub

    Function checkNull(o As Object, Optional ret As String = "") As Object
        If o Is Nothing Then Return ret
        If o Is DBNull.Value Then Return ret
        Return o
    End Function

    Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
        'MsgBox("Liefer erst korrekte Daten, wenn alle NL umgestellt!")
        DataGridView.Columns.Clear()
        Dim sqlstr As String = ""
        sqlstr &= "  select SUM(Speditionsbuch.Abfertigungsanzahl) as Anzahl ,[Grenzstelle] from Speditionsbuch  WHERE 1=1  "
        Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() & " GROUP BY [Grenzstelle]  order by Anzahl desc ",
                                    "FMZOLL", , getSpedbuchList())
        DataGridView.DataSource = dt
    End Sub

    Private Sub Button15_Click(sender As Object, e As EventArgs) Handles btnCSAufteilung.Click
        'MsgBox("Liefer erst korrekte Daten, wenn alle NL umgestellt!")
        DataGridView.Columns.Clear()
        Dim sqlstr As String = ""
        sqlstr &= " SELECT Aviso.[Grenzstelle], SUM(Speditionsbuch.Abfertigungsanzahl) as Anzahl FROM Speditionsbuch INNER JOIN " & AVISOSERVER & " on Aviso.avisoid=Speditionsbuch.AvisoID WHERE  Abfertigungsart IN (26,28) "
        sqlstr &= " AND Aviso.[Grenzstelle] <> 'SFD' and FilialenNr NOT IN ( 4801,4802,4806 ) "
        Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                               " GROUP BY Aviso.[Grenzstelle]" &
                                               " ORDER BY Anzahl DESC",
                                    "FMZOLL", , getSpedbuchList())
        DataGridView.DataSource = dt

    End Sub

    Private Sub tbcntr_SelectedIndexChanged(sender As Object, e As EventArgs) Handles tbcntr.SelectedIndexChanged
        btnSuche.PerformClick()
    End Sub


    Private Sub DataGridView_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView.ColumnHeaderMouseClick
        If e.Button = Windows.Forms.MouseButtons.Right Then

        End If
    End Sub

    Private Sub cbxOderEmpfanger_CheckedChanged(sender As Object, e As EventArgs) Handles cbxOderEmpfanger.CheckedChanged
        kdtxtEmpfaenger.Enabled = Not cbxOderEmpfanger.Checked
    End Sub

    Private Sub Button15_Click_1(sender As Object, e As EventArgs) Handles Button15.Click
        Try
            If DataGridView.SelectedRows.Count = 0 Then Exit Sub
            If Not IsNumeric(DataGridView.SelectedRows(0).Cells("FilialenNr").Value) Then Exit Sub
            If Not IsNumeric(DataGridView.SelectedRows(0).Cells("AbfertigungsNr").Value) Then Exit Sub
            cProgramFunctions.openThereforeNavigator(DataGridView.SelectedRows(0).Cells("FilialenNr").Value.ToString & DataGridView.SelectedRows(0).Cells("AbfertigungsNr").Value.ToString, DataGridView.SelectedRows(0).Cells("FilialenNr").Value)
        Catch ex As Exception
            MsgBox("Fehler beim Öffnen!" & vbNewLine & ex.Message & ex.StackTrace)
        End Try
    End Sub

    Private Sub cbxFilterInBericht_CheckedChanged(sender As Object, e As EventArgs) Handles cbxFilterInBericht.CheckedChanged
        txtUeberschr.Enabled = Not cbxFilterInBericht.Checked
    End Sub

    Private Sub Button16_Click(sender As Object, e As EventArgs) Handles Button16.Click
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ATILLA_VERWALTUNG", "AVISO") Or VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim f As New Form
            Dim u As New SDL.usrCntlBrgBuchungenFremd
            f.Size = New Size(720, 185)
            f.Icon = Me.FindForm.Icon
            u.Dock = DockStyle.Fill
            f.Controls.Add(u)
            f.StartPosition = FormStartPosition.CenterScreen
            f.Show(Me)
        End If
    End Sub

    Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ATILLA_VERWALTUNG", "AVISO") Or VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim f As New Form
            Dim u As New SDL.usrCntlBrgBuchungenVERAG
            f.Size = New Size(720, 185)
            f.Icon = Me.FindForm.Icon
            u.Dock = DockStyle.Fill
            f.Controls.Add(u)
            f.StartPosition = FormStartPosition.CenterScreen
            f.Show(Me)
        End If
    End Sub

    Private Sub Button18_Click(sender As Object, e As EventArgs) Handles Button18.Click
        Dim kdnrTmp = -1
        Dim FirmaTmp = ""
        If kdtxtAuftraggeber.KdNr_value > 0 Then kdnrTmp = kdtxtAuftraggeber.KdNr_value : FirmaTmp = kdtxtAuftraggeber.Text
        If kdtxtEmpfaenger.KdNr_value > 0 Then kdnrTmp = kdtxtEmpfaenger.KdNr_value : FirmaTmp = kdtxtEmpfaenger.Text
        If kdtxtEndempfaenger.KdNr_value > 0 Then kdnrTmp = kdtxtEndempfaenger.KdNr_value : FirmaTmp = kdtxtEndempfaenger.Text
        If kdtxtAvisierer.KdNr_value > 0 Then kdnrTmp = kdtxtAvisierer.KdNr_value : FirmaTmp = kdtxtAvisierer.Text
        Dim VBNr = -1
        FirmaTmp = FirmaTmp.Replace("*", "").Replace("/", "").Replace(";", "").Replace(",", "").Replace("&", "").Replace("?", "")
        Dim path = getGelangensbestätigung(FirmaTmp, kdnrTmp,, VBNr)
        If path <> "" Then

            SDL.FormularManagerNEU.OPEN_FORM(SDL.FormularManagerArten.Gelangensbestaetigung, kdnrTmp, {kdnrTmp, path, VBNr})
        End If
    End Sub


    Function getrHandlingAussenstellen(ByRef ab_datum As Date, ByRef dtAbrechnung As DataTable, ByRef HandlingList As VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST, Optional showDok As Boolean = True, Optional Handlingssatz As String = "", Optional whereOpt As String = "", Optional ignoreFiliale As Boolean = False) 'Firma As String, kdnrTmp As Integer, Optional showDok As Boolean = False, Optional ByRef VBNr As Integer = -1) As String
        Dim displayFilter = cbxFilterInBericht.Checked
        If ignoreFiliale Or VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim sqlstr As String = ""

            Dim dtAbrechnungLocal As DataTable = dtAbrechnung
            Dim HandlingListLocal As VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST = HandlingList

            Dim sql_KdAuftragsNr = ""
            sqlstr &= " SELECT  Speditionsbuch.*,Abfertigungsbezeichnung"
            sqlstr &= " FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart "
            sqlstr &= " WHERE 1=1 "
            sqlstr &= getSpedBuchWhere(ignoreFiliale)
            sqlstr &= whereOpt
            sqlstr &= " order by  Speditionsbuch.Abfertigungsart,FilialenNr,Abfertigungsdatum"

            Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL", , getSpedbuchList())

            Dim header = "Handling / Front-Office "

            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "IMEX" : header &= "IMEX Customs Service GmbH"
                Case "ATILLA" : header &= "ATILLA Spedition"
                Case "AMBAR" : header = "AMBAR Logistic Services GmbH - Handling / AMBAR Bad Reichenhall"
                Case Else
            End Select

            If showDok Then
                If vbYes = MsgBox("Möchten Sie den Bericht ZUSÄTZLICH als Excel exportieren?", vbYesNoCancel) Then
                    cProgramFunctions.genExcelFromDT_NEW(dt,,, header)
                End If
            End If



            Dim print As New frmPrintLayout
            print.Text = "Handling / Front-Office"

            Dim rpt As New rptSpeditionsbericht_HandlingAussenstellen

            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "IMEX" : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Label28.Text = "IMEX Customs Service GmbH"
                Case "ATILLA" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "ATILLA Spedition"
                Case "AMBAR" : rpt.picVERAG.Image = My.Resources.ambar_simple : rpt.Label28.Text = "AMBAR Logistc Services GmbH" : print.Text = "Handling / AMBAR Bad Reichenhall"
                Case Else
                    If lstFiliale._value <> "" Then print.Text = "Handling / " & lstFiliale._value
            End Select

            rpt.DataSource = dt


            If CheckBox1.Checked Then
                rpt.GroupHeader1.DataField = "Abfertigungsart" 'Gruppierung
            End If

            If rpt.DataSource.rows.count = 0 Then
                rpt.Dispose() : print.Dispose()
                MsgBox("Keine Daten vorhanden!")
                Return ""
            End If



            Dim sum = 0
            rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME

            Dim defaultHandlingPreis As Double = 15 'der fallback vom fallback!

            If Handlingssatz <> "" Then
                HandlingListLocal = New VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST(Handlingssatz, ab_datum)
            End If

            rpt.lblDat.Text = Now.ToLongDateString

            Dim dt_summen As New DataTable

            dt_summen.Columns.Add("Anzahl", GetType(Double))
            dt_summen.Columns.Add("BAR", GetType(Double))
            dt_summen.Columns.Add("HANDLING", GetType(Double))
            dt_summen.Columns.Add("zu_kassieren_BAR", GetType(Double))
            dt_summen.Columns.Add("Grenzstelle", GetType(String))



            Dim gesAnz As Double = 0
            Dim gesBar As Double = 0
            Dim geshandling As Double = 0
            Dim geszukassBAR As Double = 0

            Dim sumAnz As Double = 0
            Dim sumBar As Double = 0
            Dim sumhandling As Double = 0
            Dim sumzukassBAR As Double = 0



            Dim sumAbfBez = ""
            Dim gesFilBez = ""

            '   Dim gesgesAbfBez = ""
            Dim SumText = ""
            AddHandler rpt.Detail.Format, Sub()
                                              ' rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
                                              ' rpt.lblLKWNr.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString

                                              rpt.lblPosNr.Text = rpt.Fields.Item("FilialenNr").Value & " " & rpt.Fields.Item("AbfertigungsNr").Value & " " & rpt.Fields.Item("UnterNr").Value
                                              rpt.lblAbfDatum.Text = rpt.Fields.Item("Abfertigungsdatum").Value

                                              rpt.lblEndEmpfKdNr.Text = checkNull(rpt.Fields.Item("EmpfängerKundenNr").Value)
                                              rpt.lblEndEmpf.Text = checkNull(rpt.Fields.Item("Empfänger").Value)

                                              Dim bar As Double = 0
                                              Dim handling As Double = 0
                                              Dim zukassBAR As Double = 0
                                              '  Dim rg As Double = 0
                                              Dim anz As Double = 0


                                              If IsNumeric(checkNull(rpt.Fields.Item("Barzahlungsbetrag").Value)) Then bar = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value())
                                              If IsNumeric(checkNull(rpt.Fields.Item("HandlingZuKassieren").Value)) Then zukassBAR = CDbl(rpt.Fields.Item("HandlingZuKassieren").Value())
                                              ' If IsNumeric(checkNull(rpt.Fields.Item("Rechnungsbetrag").Value)) Then rg = CDbl(rpt.Fields.Item("Rechnungsbetrag").Value())
                                              If IsNumeric(checkNull(rpt.Fields.Item("Abfertigungsanzahl").Value)) Then anz = CDbl(rpt.Fields.Item("Abfertigungsanzahl").Value)
                                              Dim Abfertigungsart = checkNull(rpt.Fields.Item("Abfertigungsart").Value)
                                              handling = getHandlingKostByListe(Abfertigungsart, defaultHandlingPreis, HandlingListLocal) * anz

                                              '  rpt.lblLKWNr.Text = checkNull(rpt.Fields.Item("LKW Kennzeichen").Value)
                                              rpt.lblAnzahl.Text = checkNull(rpt.Fields.Item("Abfertigungsanzahl").Value)
                                              rpt.lblAbfertigungsart.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)
                                              ' rpt.lblAbs.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              rpt.lblBarzahlungsbetrag.Text = CDbl(bar).ToString("C2")
                                              rpt.lblzuKassierenHandling.Text = CDbl(zukassBAR).ToString("C2")
                                              rpt.lblHandlingsgebuehr.Text = CDbl(handling).ToString("C2")
                                              'sumBar += CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value)

                                              sumAbfBez = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                                                  Case "AMBAR"
                                                      rpt.lblBarzahlungsbetrag.Visible = False
                                                      rpt.lblzuKassierenHandling.Visible = False
                                              End Select

                                              If Not IsDBNull(rpt.Fields.Item("Grenzstelle").Value) Then
                                                  Dim grenzstelle As String = rpt.Fields.Item("Grenzstelle").Value.ToString()
                                                  Dim existingRow = dt_summen.AsEnumerable().FirstOrDefault(Function(r) r.Field(Of String)("Grenzstelle") = grenzstelle)

                                                  If existingRow IsNot Nothing Then

                                                      existingRow("Anzahl") = CInt(existingRow("Anzahl")) + anz
                                                      existingRow("BAR") = CDbl(existingRow("BAR")) + bar
                                                      existingRow("HANDLING") = CDbl(existingRow("HANDLING")) + handling
                                                      existingRow("zu_kassieren_BAR") = CDbl(existingRow("zu_kassieren_BAR")) + zukassBAR
                                                  Else

                                                      Dim R As DataRow = dt_summen.NewRow()
                                                      R("Anzahl") = anz
                                                      R("BAR") = bar
                                                      R("HANDLING") = handling
                                                      R("zu_kassieren_BAR") = zukassBAR
                                                      R("Grenzstelle") = grenzstelle

                                                      dt_summen.Rows.Add(R)
                                                  End If


                                              End If

                                              sumAnz += anz
                                              sumBar += bar
                                              sumhandling += handling
                                              sumzukassBAR += zukassBAR

                                              gesAnz += anz
                                              gesBar += bar
                                              geshandling += handling
                                              geszukassBAR += zukassBAR



                                          End Sub

            Dim bezeichnung = ""
            AddHandler rpt.ReportFooter1.Format, Sub()
                                                     rpt.lblGesGesSumAnzahl.Text = sumAnz.ToString("N0")
                                                     rpt.lblSumBarzahlungsbetrag.Text = sumBar.ToString("N2")
                                                     rpt.lblSumzuKassierenHandling.Text = sumzukassBAR.ToString("N2")
                                                     rpt.lblSumHandlingsgebuehr.Text = sumhandling.ToString("N2")


                                                     Dim sb As New System.Text.StringBuilder

                                                     sb.AppendLine(String.Format("{0,-15} {1,6} {2,12} {3,15} {4,15}", "Grenzstelle", "Anz", "Bar", "Kassiert BAR", "Handling"))

                                                     sb.AppendLine(New String("-"c, 65))

                                                     For Each r_ As DataRow In dt_summen.Rows

                                                         Dim grenzstelle As String = If(IsDBNull(r_("Grenzstelle")), "", r_("Grenzstelle").ToString())
                                                         Dim anz As Integer = If(IsDBNull(r_("Anzahl")), 0, CInt(r_("Anzahl")))
                                                         Dim bar As Double = If(IsDBNull(r_("BAR")), 0, CDbl(r_("BAR")))
                                                         Dim kass As Double = If(IsDBNull(r_("zu_kassieren_BAR")), 0, CDbl(r_("zu_kassieren_BAR")))
                                                         Dim handling As Double = If(IsDBNull(r_("HANDLING")), 0, CDbl(r_("HANDLING")))

                                                         sb.AppendLine(String.Format("{0,-15} {1,6} {2,12:N2} {3,15:N2} {4,15:N2}", grenzstelle, anz, bar, kass, handling))
                                                     Next

                                                     SumText = sb.ToString()

                                                     rpt.txtUebersicht.Font = New Font("Consolas", 10)
                                                     rpt.txtUebersicht.Text = SumText

                                                     Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                                                         Case "AMBAR"
                                                             rpt.lblSumBarzahlungsbetrag.Visible = False
                                                             rpt.lblSumzuKassierenHandling.Visible = False
                                                     End Select

                                                 End Sub
            AddHandler rpt.GroupHeader1.Format, Sub()

                                                    rpt.lblAbfArtUeberschrift.Text = checkNull(rpt.Fields.Item("Abfertigungsart").Value) & " - " & checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)
                                                    bezeichnung = rpt.lblAbfArtUeberschrift.Text

                                                    gesAnz = 0
                                                    gesBar = 0
                                                    geshandling = 0
                                                    geszukassBAR = 0

                                                End Sub
            AddHandler rpt.GroupFooter1.Format, Sub()
                                                    rpt.lblGesSumAnzahl.Text = gesAnz.ToString("N0")
                                                    rpt.lblGesBarzahlungsbetrag.Text = gesBar.ToString("N2")
                                                    rpt.lblGeszuKassierenHandling.Text = geszukassBAR.ToString("N2")
                                                    rpt.lblGesHandlingsgebuehr.Text = geshandling.ToString("N2")

                                                    'SumText &= gesAnz.ToString("N0") & vbTab & bezeichnung & vbNewLine



                                                    Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                                                        Case "AMBAR"
                                                            rpt.lblGesBarzahlungsbetrag.Visible = False
                                                            rpt.lblGeszuKassierenHandling.Visible = False
                                                    End Select
                                                End Sub
            If showDok Then
                print.Viewer.LoadDocument(rpt)
                print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
                If dt_summen.Rows.Count > 0 Then
                    dtAbrechnungLocal = dt_summen.Copy()
                End If
                dtAbrechnung = dtAbrechnungLocal
                HandlingList = HandlingListLocal
                print.Show()
            Else

                Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("HandlingFO.pdf", ".pdf", True, False)
                Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
                rpt.Run(False)
                p.NeverEmbedFonts = ""
                p.Export(rpt.Document, tmpPath)

                rpt.Dispose()
                If dt_summen.Rows.Count > 0 Then
                    dtAbrechnungLocal = dt_summen.Copy()
                End If
                dtAbrechnung = dtAbrechnungLocal
                HandlingList = HandlingListLocal
                Return tmpPath

            End If




        End If

        Return ""
    End Function

    Function getHandlingKostByListe(AbfertigungsArt As Integer, defaultHandlingPreis As Double, HandlingList As VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST) As Double
        If HandlingList IsNot Nothing AndAlso HandlingList.LIST IsNot Nothing Then
            For Each h In HandlingList.LIST
                If h.hs_Abfertigungsart = AbfertigungsArt Then Return h.hs_Preis
                If IsDBNull(h.hs_Abfertigungsart) Then Return h.hs_Preis
                If h.hs_Abfertigungsart Is Nothing Then defaultHandlingPreis = h.hs_Preis
            Next
        End If
        Return defaultHandlingPreis
    End Function

    Function getGelangensbestätigung(Firma As String, kdnrTmp As Integer, Optional showDok As Boolean = False, Optional ByRef VBNr As Integer = -1) As String
        Dim displayFilter = cbxFilterInBericht.Checked
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim sqlstr As String = ""
            '     If CheckBox1.Checked Then

            Dim sql_KdAuftragsNr = "" '",Speditionsbuch.KdAuftragsNr as KdAuftragsNr"


            sqlstr &= " SELECT  FilialenNr, AbfertigungsNr,UnterNr, Speditionsbuch.Abfertigungsart as Abfertigungsart ,Abfertigungsdatum, BelegNr, Rohmasse, Vermerk, Packstücke, AbsenderKundenNr, Absender, EmpfängerKundenNr, Empfänger,EndEmpfänger,EndEmpfängerKundenNr, VermittlerKundenNr, Vermittler, "
            sqlstr &= "         FrachtführerKundenNr, Frachtführer, AvisiererKundenNr, Avisierer,Währungscode,Barzahlungsbetrag,Rechnungsbetrag, [LKW Kennzeichen],"
            sqlstr &= "         Abfertigungsanzahl, Speditionsbuch.Abfertigungsart, Abfertigungsbezeichnung,AvisoID" & sql_KdAuftragsNr & ",Speditionsbuch.KdAuftragsNrAvisierer,Speditionsbuch.KdAuftragsNrEmpfaenger,Speditionsbuch.KdAuftragsNrFrachtfuehrer, Speditionsbuch.Bemerkungen "
            sqlstr &= " FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart "
            sqlstr &= " LEFT JOIN Währungstabelle on  Währungstabelle.Währungsschlüssel=speditionsbuch.Währungsschlüssel WHERE 1=1 "
            sqlstr &= getSpedBuchWhere()
            '    sqlstr &= " order by FilialenNr, AvisoId,Speditionsbuch.Abfertigungsart,Abfertigungsdatum"
            sqlstr &= " order by FilialenNr, Speditionsbuch.Abfertigungsart,Abfertigungsdatum"

            Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL", , getSpedbuchList())

            Dim print As New frmPrintLayout
            print.Text = "Gelangensbestätigung"

            Dim rpt As New rptSpeditionsbericht_Gelangensbestaetigung

            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "IMEX" : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Label28.Text = "IMEX Customs Service GmbH"
                Case "ATILLA" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "ATILLA Spedition"
                Case Else
            End Select



            rpt.DataSource = dt

            If rpt.DataSource.rows.count = 0 Then
                rpt.Dispose() : print.Dispose()
                MsgBox("Keine Daten vorhanden!")
                Return ""
            End If

            If vbYes = MsgBox("Neue Gelangensbestätigungs-Nr. vergeben?", MsgBoxStyle.YesNo) Then
                Dim GBST = New VERAG_PROG_ALLGEMEIN.cGelangensbestaetigung(Firma, kdnrTmp)
                If GBST.SAVE Then
                    rpt.lblNr.Text = GBST.gb_nr
                    VBNr = GBST.gb_nr

                    Dim barcode As Image = Code128Rendering.MakeBarcodeImage("/VBNR-" & VBNr & "/", 1, True, 25)
                    rpt.Picture1.Image = barcode
                    'Gelangensbestätigungs/Verbringungsnachweis-Nr. speichern:
                    SQL.doSQLVarList("UPDATE Speditionsbuch SET SB_CMRNr='" & VBNr & "' WHERE 1=1  " & getSpedBuchWhere(), "FMZOLL",, getSpedbuchList())

                End If


            Else
                rpt.Label17.Visible = False
            End If


            Dim AvsioIdNull As String = ""
            For Each r In rpt.DataSource.rows
                If r("AvisoId") Is DBNull.Value OrElse r("AvisoId") <= 0 Then
                    AvsioIdNull &= r("FilialenNr") & " " & r("AbfertigungsNr") & " " & r("UnterNr") & "  -  " & r("Abfertigungsdatum") & "  -  " & r("LKW Kennzeichen") & vbNewLine
                End If
            Next
            If AvsioIdNull <> "" Then
                MsgBox("Achtung: folgende Sendungen sind keinem LKW/Aviso zugeordnet:" & vbNewLine & AvsioIdNull)

            End If
            Dim sum = 0
            rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
            'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung





            'Dim cnt As Integer = 0
            rpt.lblDat.Text = Now.ToLongDateString
            Dim sumAnz As Double = 0
            Dim sumBar As Double = 0
            Dim sumRg As Double = 0
            Dim gesSumAnz As Double = 0
            Dim gesSumBar As Double = 0
            Dim gesSumRg As Double = 0
            Dim gesgesSumAnz As Double = 0
            Dim gesgesSumBar As Double = 0
            Dim gesgesSumRg As Double = 0
            Dim SumAnzLKW As Double = 0
            Dim gesSumAnzLKW As Double = 0
            Dim gesgesSumAnzLKW As Double = 0

            Dim sumAbfBez = ""
            Dim gesFilBez = ""

            '   Dim gesgesAbfBez = ""

            AddHandler rpt.Detail.Format, Sub()
                                              ' rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
                                              ' rpt.lblLKWNr.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString

                                              rpt.lblPosNr.Text = rpt.Fields.Item("FilialenNr").Value & " " & rpt.Fields.Item("AbfertigungsNr").Value & " " & rpt.Fields.Item("UnterNr").Value
                                              rpt.lblAbfDatum.Text = "Datum: " & rpt.Fields.Item("Abfertigungsdatum").Value
                                              rpt.lblBezugsNr.Text = checkNull(rpt.Fields.Item("BelegNr").Value)
                                              rpt.lblRohmasse.Text = "Rohmasse: " & checkNull(rpt.Fields.Item("Rohmasse").Value, "0") & "kg"
                                              rpt.txtVermerk.Text = checkNull(rpt.Fields.Item("Vermerk").Value)
                                              rpt.txtPackstücke.Text = checkNull(rpt.Fields.Item("Packstücke").Value)
                                              If cbxSpedDetailBem.Checked Then
                                                  If checkNull(rpt.Fields.Item("Bemerkungen").Value) <> "" Then
                                                      rpt.txtPackstücke.Text = (rpt.txtPackstücke.Text & vbNewLine & vbNewLine & checkNull(rpt.Fields.Item("Bemerkungen").Value)).trim
                                                  End If
                                              End If

                                              rpt.lblAbsKdNr.Text = checkNull(rpt.Fields.Item("AbsenderKundenNr").Value)
                                              rpt.lblAbs.Text = checkNull(rpt.Fields.Item("Absender").Value)
                                              rpt.lblEmpfKdNr.Text = checkNull(rpt.Fields.Item("EmpfängerKundenNr").Value)
                                              rpt.lblEmpf.Text = checkNull(rpt.Fields.Item("Empfänger").Value)

                                              'Wenn EndEmpf leer --> Empfänger eintragen:
                                              Dim EndEmpf = checkNull(rpt.Fields.Item("EndEmpfänger").Value)
                                              If EndEmpf <> "" Then
                                                  rpt.lblEndEmpfKdNr.Text = checkNull(rpt.Fields.Item("EndEmpfängerKundenNr").Value)
                                                  rpt.lblEndEmpf.Text = checkNull(rpt.Fields.Item("EndEmpfänger").Value)
                                              Else
                                                  rpt.lblEndEmpfKdNr.Text = checkNull(rpt.Fields.Item("EmpfängerKundenNr").Value)
                                                  rpt.lblEndEmpf.Text = checkNull(rpt.Fields.Item("Empfänger").Value)
                                              End If
                                              rpt.lblAuftrKdNr.Text = checkNull(rpt.Fields.Item("VermittlerKundenNr").Value)
                                              rpt.lblAuftr.Text = checkNull(rpt.Fields.Item("Vermittler").Value)
                                              rpt.lblFrachtfKdNr.Text = checkNull(rpt.Fields.Item("FrachtführerKundenNr").Value)
                                              rpt.lblFrachtf.Text = checkNull(rpt.Fields.Item("Frachtführer").Value)
                                              '  rpt.lblLKWNr.Text = rpt.Fields.Item("AvisiererKundenNr").Value
                                              '    rpt.lblLKWNr.Text = rpt.Fields.Item("Avisierer").Value
                                              'lblGesgesWaehrung.te

                                              ' rpt.lblKdAuftragNr.Text = checkNull(rpt.Fields.Item("KdAuftragsNr").Value)
                                              'If rpt.lblKdAuftragNr.Text <> "" Then rpt.lblKdAuftragNr.Text = "Auftrag: " & rpt.lblKdAuftragNr.Text

                                              Dim bar As Double = 0
                                              Dim rg As Double = 0
                                              Dim anz As Double = 0
                                              If IsNumeric(checkNull(rpt.Fields.Item("Barzahlungsbetrag").Value)) Then bar = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value())
                                              If IsNumeric(checkNull(rpt.Fields.Item("Rechnungsbetrag").Value)) Then rg = CDbl(rpt.Fields.Item("Rechnungsbetrag").Value())

                                              ' rpt.lblRechnungsbetragInEur.Text = rpt.Fields.Item("Rechnungsbetrag").Value * rpt.Fields.Item("Umrechnungskurs").Value

                                              rpt.lblLKWNr.Text = checkNull(rpt.Fields.Item("LKW Kennzeichen").Value)
                                              rpt.lblAnzahl.Text = checkNull(rpt.Fields.Item("Abfertigungsanzahl").Value)
                                              rpt.lblAbfertigungsart.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)
                                              ' rpt.lblAbs.Text = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              ' rpt.lblBarzahlungsbetrag.Text = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value()).ToString("C")

                                              'sumBar += CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value)
                                              If IsNumeric(checkNull(rpt.Fields.Item("Abfertigungsanzahl").Value)) Then anz = CDbl(rpt.Fields.Item("Abfertigungsanzahl").Value)

                                              sumAbfBez = checkNull(rpt.Fields.Item("Abfertigungsbezeichnung").Value)

                                              gesgesSumAnz += anz

                                          End Sub

            AddHandler rpt.ReportFooter1.Format, Sub()
                                                     rpt.lblGesGesSumAnzahl.Text = gesgesSumAnz.ToString("N0")

                                                 End Sub
            If showDok Then
                print.Viewer.LoadDocument(rpt)
                print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
                print.Show()
            Else

                Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("Verbringungsnachweis_" & Firma & ".pdf", ".pdf", True, 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 If




        End If
        Return ""
    End Function

    Private Sub Button19_Click(sender As Object, e As EventArgs) Handles Button19.Click
        Dim SQLStr = "SELECT [FilialenNr],[AbfertigungsNr],[UnterNr],[Abfertigungsdatum],[LKW Kennzeichen],[EmpfängerKundenNr],[Empfänger],Abfertigungsart,AtlasBezNrEZA as BezugsNr
	  	                 ,  isnull((SELECT SUM(Betrag)  FROM Zkteing  WHERE Bezugsnummer=AtlasBezNrEZA) ,'') as EUST
                      FROM [VERAG].[dbo].[Speditionsbuch]
                        where Abfertigungsart IN (26,28) AND Abfertigungsdatum > DATEADD(Month,-6 ,getdate())   AND isnull(SB_CMR ,0)=0  AND FilialenNr NOT IN (5501,5601,5701)
                      order by Abfertigungsdatum ASC"

        Dim dt As DataTable = SQL.loadDgvBySql(SQLStr, "FMZOLL")

        cProgramFunctions.genExcelFromDT_NEW(dt, {"J1:J" & (dt.Rows.Count + 2)})

    End Sub

    Private Sub Button20_Click(sender As Object, e As EventArgs) Handles Button20.Click
        If CDate(txtAbfertDat.Text).Year <> CDate(txtAbfertDatBis.Text).Year Then
            MsgBox("keine jahresüberschneidende Handlingsauswertung möglich!")
            Exit Sub
        End If
        Dim dtAbrechnung As New DataTable
        Dim HandlingList As VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST = Nothing
        Dim anhang = getrHandlingAussenstellen(CDate(txtAbfertDat.Text), dtAbrechnung, HandlingList, Not cbxHandlingAbrechnen.Checked, cboHandlingssatz.Text.Trim,,)

        If cbxHandlingAbrechnen.Checked Then

            If lstFiliale.SelectedItems.Count > 1 Then
                MsgBox("Es darf nur eine Filiale ausgewählt werden!")
                Exit Sub
            End If

            createHandlingAbrechnung(dtAbrechnung, cboHandlingssatz.Text.Trim, cboHandlingssatz._value, CInt(lstFiliale._value), CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), anhang, HandlingList)
        End If
    End Sub

    Private Sub MyComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MyComboBox1.SelectedIndexChanged
        selctList(lstFiliale, MyComboBox1)
    End Sub
    Private Sub cboFilialeHandling_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFilialeHandling.SelectedIndexChanged
        selctList(lstFilialeHandling, cboFilialeHandling)
    End Sub

    Sub selctList(lst, cbo)
        lst.ClearSelected()
        Select Case cbo._value
            Case "ALLE"
                For i = 0 To lst.Items.Count - 1
                    lst.SetSelected(i, True)
                Next
            Case ""
                lst.ClearSelected()
            Case Else
                For i = 0 To lst.Items.Count - 1
                    If VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale2(DirectCast(lst.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value) = cbo._value Then
                        lst.SetSelected(i, True)
                    End If
                Next
        End Select
    End Sub

    Private Sub ZFFriedrichshafenAGZeitraumAuswählenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZFThyrnauZeitraumAuswählenToolStripMenuItem.Click, ZFFriedrichshafenAGZeitraumAuswählenToolStripMenuItem.Click, ZFSteyrZeitraumAuswählenToolStripMenuItem.Click
        lblKdAusFortschritt.Text = "lädt..."
        Me.Cursor = Cursors.WaitCursor
        Try

            Dim kdnrsrch = -1

            If sender Is ZFFriedrichshafenAGZeitraumAuswählenToolStripMenuItem Then
                kdnrsrch = 714869
            ElseIf sender Is ZFThyrnauZeitraumAuswählenToolStripMenuItem Then
                kdnrsrch = 718486
            ElseIf sender Is ZFSteyrZeitraumAuswählenToolStripMenuItem Then
                kdnrsrch = 764755
            End If


            'Dim dt As DataTable = SQL.loadDgvBySql("SELECT   CAST(Rechnungsausgang.[FilialenNr] as varchar) + '/' + CAST(Rechnungsausgang.[AbfertigungsNr] as varchar) Abfertigungsnummer
            '               ,[RechnungsNr],RechnungsKundenNr
            '                  ,cast([RechnungsDatum] as date)RechnungsDatum
            '                  ,[AbsenderName 1]Absender
            '               ,(SteuerfreierGesamtbetrag+SteuerpflichtigerGesamtbetrag) Betrag
            '                 ,Speditionsbuch.BelegNr
            '                  ,Rechnungsausgang.[FilialenNr],Rechnungsausgang.[AbfertigungsNr] ,Speditionsbuch.Abfertigungsart
            '              FROM [Rechnungsausgang] inner join Speditionsbuch ON Speditionsbuch.FilialenNr=Rechnungsausgang.FilialenNr and Speditionsbuch.AbfertigungsNr=Rechnungsausgang.AbfertigungsNr and Speditionsbuch.UnterNr=Rechnungsausgang.SpeditionsbuchUnterNr
            '              where RechnungsKundenNr IN (" & kdNrsrch & ") and rechnungsdatum BETWEEN '" & txtAbfertDat.Text & "' AND '" & txtAbfertDatBis.Text & "'", "FMZOLL")
            Dim dt As DataTable = SQL.loadDgvBySql("SELECT   CAST([FilialenNr] as varchar) + '/' + CAST([AbfertigungsNr] as varchar) Abfertigungsnummer
	                           ,cast([Abfertigungsdatum] as date)Abfertigungsdatum
                              ,Absender
	                          ,Rechnungsbetrag Betrag 
  	                          ,BelegNr
                              ,[FilialenNr],[AbfertigungsNr],Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung,Speditionsbuch.Zollsystem_Land
                          FROM Speditionsbuch INNER JOIN [Abfertigungsarten] ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart
                          where EmpfängerKundenNr IN (" & kdnrsrch & ") and VermittlerKundenNr IN (" & kdnrsrch & ") and Abfertigungsdatum BETWEEN '" & txtAbfertDat.Text & "' AND '" & txtAbfertDatBis.Text & "' And Speditionsbuch.Abfertigungsart IN (1,29,38)", "FMZOLL")

            Dim Path = ""
            If dt IsNot Nothing And dt.Rows.Count > 0 Then


                Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
                If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
                    My.Computer.FileSystem.CreateDirectory(sPath)
                End If


                Dim exclApp As Object 'as Application
                Dim Datei As Object 'as WorkBook
                Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet
                exclApp = CreateObject("Excel.Application")

                If cbxDetailbericht.Checked Then

                    With exclApp
                        .Visible = False

                        Try
                            Path = sPath & "ZF_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "" & " .xlsx"
                            While System.IO.File.Exists(Path)
                                Path = sPath & "ZF_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                            End While
                            My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.RG_ZF_NEW, False)
                        Catch ex As System.Exception
                            '  MsgBox(ex.Message)
                            MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                            Me.Cursor = Cursors.Default

                            Exit Sub
                        End Try

                        Datei = .Workbooks.Open(Path) 'Anpassen
                        Blatt = Datei.Worksheets(1) 'Anpassen

                        'Blatt.Range("I1").Value = txtAbfertDat.Text & "-" & txtAbfertDatBis.Text

                        Dim cnt = 2
                        For Each r In dt.Rows
                            Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                            Try
                                Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then

                                    If ZOLLANMELDUNG.dtWARENPOS.Rows.Count > 0 Then

                                        Dim rowcounter As Integer = 0

                                        For Each row As DataRow In ZOLLANMELDUNG.dtWARENPOS.Rows

                                            Dim ZollInProzent As Double = 0
                                            If If(ZOLLANMELDUNG.RechnungspreisohneWahrung, "") <> "" Then
                                                ZollInProzent = ZOLLANMELDUNG.ABGABEN_ZOLL / ZOLLANMELDUNG.RechnungspreisohneWahrung * 100
                                            End If

                                            Blatt.Range("A" & cnt).Value = cnt - 1
                                            Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                            Blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                                            Blatt.Range("D" & cnt).Value = ZOLLANMELDUNG.Empfaenger
                                            Blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                                            Blatt.Range("F" & cnt).Value = r("BelegNr")
                                            Blatt.Range("G" & cnt).Value = row.Item("PosNr")
                                            Blatt.Range("H" & cnt).Value = row.Item("WarenNr")
                                            Blatt.Range("I" & cnt).Value = "-"
                                            Blatt.Range("J" & cnt).Value = row.Item("WarenBez")
                                            Blatt.Range("K" & cnt).Value = ""
                                            Blatt.Range("L" & cnt).Value = ZOLLANMELDUNG.Waehrungscode
                                            Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Geschaeftsart
                                            Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Zollstelle_Eingang
                                            Blatt.Range("O" & cnt).Value = ""
                                            Blatt.Range("P" & cnt).Value = row.Item("Netto")
                                            Blatt.Range("Q" & cnt).Value = row.Item("PosWert")
                                            Blatt.Range("R" & cnt).Value = IIf(rowcounter = 0, ZOLLANMELDUNG.ABGABEN_EUST, "")
                                            Blatt.Range("S" & cnt).Value = IIf(rowcounter = 0, ZOLLANMELDUNG.ABGABEN_ZOLL, "")
                                            Blatt.Range("T" & cnt).Value = IIf(rowcounter = 0, ZollInProzent.ToString("N2") & " %", "")
                                            Blatt.Range("U" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Count > 1, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(0, 2), "")
                                            Blatt.Range("V" & cnt).Value = ZOLLANMELDUNG.Absender
                                            Blatt.Range("W" & cnt).Value = row.Item("Herkunft")
                                            Blatt.Range("X" & cnt).Value = ZOLLANMELDUNG.Incoterms
                                            Blatt.Range("Y" & cnt).Value = row.Item("Verfahren")
                                            Blatt.Range("Z" & cnt).Value = row.Item("Preferenz")
                                            Blatt.Range("AA" & cnt).Value = IIf(row.Item("isCBAM"), "Y", "N")

                                            If If(ZOLLANMELDUNG.ATCMRN, "") <> "" AndAlso Blatt.Range("F" & cnt).Value = "" Then
                                                Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                            End If

                                            cnt += 1
                                            rowcounter += 1
                                        Next
                                    Else
                                        Dim ZollInProzent As Double = 0
                                        If If(ZOLLANMELDUNG.RechnungspreisohneWahrung, "") <> "" Then
                                            ZollInProzent = ZOLLANMELDUNG.ABGABEN_ZOLL / ZOLLANMELDUNG.RechnungspreisohneWahrung * 100
                                        End If

                                        Blatt.Range("A" & cnt).Value = cnt - 1
                                        Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                        Blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                                        Blatt.Range("D" & cnt).Value = ZOLLANMELDUNG.Empfaenger
                                        Blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                                        Blatt.Range("F" & cnt).Value = r("BelegNr")
                                        Blatt.Range("G" & cnt).Value = ""
                                        Blatt.Range("H" & cnt).Value = ""
                                        Blatt.Range("I" & cnt).Value = "-"
                                        Blatt.Range("J" & cnt).Value = ""
                                        Blatt.Range("K" & cnt).Value = ""
                                        Blatt.Range("L" & cnt).Value = ZOLLANMELDUNG.Waehrungscode
                                        Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Geschaeftsart
                                        Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Zollstelle_Eingang
                                        Blatt.Range("O" & cnt).Value = ""
                                        Blatt.Range("P" & cnt).Value = ""
                                        Blatt.Range("Q" & cnt).Value = ""
                                        Blatt.Range("R" & cnt).Value = ZOLLANMELDUNG.ABGABEN_EUST
                                        Blatt.Range("S" & cnt).Value = ZOLLANMELDUNG.ABGABEN_ZOLL
                                        Blatt.Range("T" & cnt).Value = ZollInProzent.ToString("N2") & " %"
                                        Blatt.Range("U" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Count > 1, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(0, 2), "")
                                        Blatt.Range("V" & cnt).Value = ZOLLANMELDUNG.Absender
                                        Blatt.Range("W" & cnt).Value = ""
                                        Blatt.Range("X" & cnt).Value = ZOLLANMELDUNG.Incoterms
                                        Blatt.Range("Y" & cnt).Value = ""
                                        Blatt.Range("Z" & cnt).Value = ""
                                        Blatt.Range("AA" & cnt).Value = ""


                                        If If(ZOLLANMELDUNG.ATCMRN, "") <> "" AndAlso Blatt.Range("F" & cnt).Value = "" Then
                                            Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                        End If
                                        cnt += 1
                                    End If
                                End If



                            Catch ex As Exception
                                MsgBox(ex.Message & ex.StackTrace)
                            End Try
                            lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                            Me.Refresh()

                        Next
                        Datei.Save

                        If False Then
                            Blatt.PrintOutEx()
                        Else
                            'Process.Start(Path)
                            .Visible = True

                        End If
                    End With

                Else


                    With exclApp
                        .Visible = False

                        Try
                            Path = sPath & "ZF_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "" & " .xlsx"
                            While System.IO.File.Exists(Path)
                                Path = sPath & "ZF_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                            End While
                            My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.RG_ZF, False)
                        Catch ex As System.Exception
                            '  MsgBox(ex.Message)
                            MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                            Me.Cursor = Cursors.Default

                            Exit Sub
                        End Try

                        Datei = .Workbooks.Open(Path) 'Anpassen
                        Blatt = Datei.Worksheets(1) 'Anpassen

                        Blatt.Range("I1").Value = txtAbfertDat.Text & "-" & txtAbfertDatBis.Text

                        Dim cnt = 3
                        For Each r In dt.Rows
                            Blatt.Range("A" & cnt).Value = cnt - 2
                            Blatt.Range("B" & cnt).Value = r("Abfertigungsnummer")
                            '   Blatt.Range("C" & cnt).Value = r("RechnungsNr")
                            Blatt.Range("C" & cnt).Value = r("Abfertigungsdatum")
                            Blatt.Range("D" & cnt).Value = r("Abfertigungsbezeichnung")
                            Blatt.Range("E" & cnt).Value = r("Absender")
                            Blatt.Range("F" & cnt).Value = "" 'r("Betrag")
                            Blatt.Range("H" & cnt).Value = r("BelegNr")

                            Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                            Try
                                Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then
                                    Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.RechnungspreisohneWahrung
                                    Blatt.Range("G" & cnt).Value = ZOLLANMELDUNG.Handelsrechnung.Replace(", ", "," & vbNewLine)
                                    Blatt.Range("I" & cnt).Value = ZOLLANMELDUNG.ABGABEN_ZOLL
                                    Blatt.Range("J" & cnt).Value = ZOLLANMELDUNG.ANZ_POS


                                    '----------------------------------NEW

                                    Blatt.Range("K" & cnt).Value = ZOLLANMELDUNG.Anmelder
                                    Blatt.Range("L" & cnt).Value = ZOLLANMELDUNG.Warenbezeichung
                                    Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.VerBestLandZst
                                    '----------------------------------


                                    If If(ZOLLANMELDUNG.ATCMRN, "") <> "" Then
                                        Blatt.Range("H" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                    End If
                                End If

                            Catch ex As Exception
                                MsgBox(ex.Message & ex.StackTrace)
                            End Try
                            lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                            Me.Refresh()
                            cnt += 1
                        Next
                        Datei.Save

                        If False Then
                            Blatt.PrintOutEx()
                        Else
                            'Process.Start(Path)
                            .Visible = True

                        End If
                    End With

                End If

            End If
            lblKdAusFortschritt.Text = "fertig"
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
            lblKdAusFortschritt.Text = "Fehler"
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub cboFiliale_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFiliale.SelectedIndexChanged
        cbxEIDR.Visible = cboFiliale._value = "7001"
    End Sub

    Private Sub Button12_Click(sender As Object, e As EventArgs) Handles btnSpedBuchEinnahmen.Click
        Dim displayFilter = cbxFilterInBericht.Checked
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ZOLL_Auswertungen", "SDL") Then
            Dim sqlstr As String = ""
            Dim SpedBuchWhere = getSpedBuchWhere()

            If CheckBox1.Checked Then
                sqlstr &= " SELECT Speditionsbuch.FilialenNr,Speditionsbuch.Abfertigungsart,Abfertigungsarten.Abfertigungsbezeichnung,sum(Abfertigungsanzahl) as Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,MIN(Speditionsbuch.Abfertigungsdatum) as von, MAX(Speditionsbuch.Abfertigungsdatum) as bis 
                                ,isnull(sum(SteuerfreierGesamtbetrag+SteuerpflichtigerGesamtbetrag),0) as RgBetrag
                                FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart 
                            LEFT  JOIN Rechnungsausgang ON Rechnungsausgang.FilialenNr=Speditionsbuch.FilialenNr and Rechnungsausgang.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Rechnungsausgang.SpeditionsbuchUnterNr=Speditionsbuch.UnterNr 
                            WHERE 1=1 "
                sqlstr &= SpedBuchWhere
                sqlstr &= " group by Speditionsbuch.FilialenNr,Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung "
                sqlstr &= " order by Speditionsbuch.FilialenNr, Speditionsbuch.Abfertigungsart"
            Else
                sqlstr &= " SELECT Speditionsbuch.Abfertigungsart,Abfertigungsarten.Abfertigungsbezeichnung,sum(Abfertigungsanzahl) as Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,MIN(Speditionsbuch.Abfertigungsdatum) as von, MAX(Speditionsbuch.Abfertigungsdatum) as bis 
                                ,isnull(sum(SteuerfreierGesamtbetrag+SteuerpflichtigerGesamtbetrag),0) as RgBetrag
                            FROM Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart 
                            LEFT  JOIN Rechnungsausgang ON Rechnungsausgang.FilialenNr=Speditionsbuch.FilialenNr and Rechnungsausgang.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Rechnungsausgang.SpeditionsbuchUnterNr=Speditionsbuch.UnterNr 
                            WHERE 1=1 "
                sqlstr &= SpedBuchWhere
                sqlstr &= " group by Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung "
                sqlstr &= " order by Speditionsbuch.Abfertigungsart"
            End If

            Dim SpedBuchList = getSpedbuchList()
            Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL", , SpedBuchList)
            'DataGridView.DataSource = dt


            Dim print As New frmPrintLayout
            print.Text = "Speditionsbericht"

            Dim rpt As New rptSpeditionsberichtRg

            rpt.DataSource = dt

            'Filter anzeigen
            If displayFilter Then
                rpt.lblFilterTxt.Visible = displayFilter
                rpt.txtFilter.Visible = displayFilter
                rpt.txtFilter.Text = generateReadableFilter(SQL.getStringReplaceScalarVar(SpedBuchWhere, SpedBuchList))
            Else
                If txtUeberschr.Text <> "" Then
                    rpt.txtFilter.Text = txtUeberschr.Text
                    rpt.txtFilter.Visible = True
                    rpt.lblFilterTxt.Visible = True
                    rpt.lblFilterTxt.Text = "Beschreibung:"
                End If
            End If



            ''Problem mit beträge
            'If cboFiliale._value = "" Then
            '    rpt.Dispose() : print.Dispose()
            '    MsgBox("Bitte Filiale angeben!")
            '    Exit Sub
            'End If

            Dim FirmaTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            If cboFiliale._value <> "" Then
                FirmaTmp = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale2(cboFiliale._value)
            End If
            Select Case FirmaTmp
                Case "IMEX" : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Label28.Text = "IMEX Customs Service GmbH"
                Case "ATILLA" : rpt.picVERAG.Image = My.Resources.Atilla : rpt.Label28.Text = "ATILLA Spedition"
                Case "UNISPED" : rpt.picVERAG.Image = My.Resources.Unisped_logo : rpt.Label28.Text = "UNISPED Spedition"
                Case "AMBAR" : rpt.picVERAG.Image = My.Resources.ambar_simple : rpt.Label28.Text = "AMBAR"
                Case "FRONTOFFICE" : rpt.picVERAG.Image = My.Resources.FrontOfficeSUB_Horizontal : rpt.Label28.Text = "FRONTOFFICE"
                Case Else
            End Select


            If CheckBox1.Checked Then
                rpt.GroupHeader1.DataField = "FilialenNr" 'Gruppierung
            End If

            If rpt.DataSource.rows.count = 0 Then
                rpt.Dispose() : print.Dispose()
                MsgBox("Keine Daten vorhanden!")
                Exit Sub
            End If

            Dim sum = 0
            rpt.lblUeberschrift.Text = "Speditionsbericht  " & txtAbfertDat.Text & " bis " & txtAbfertDatBis.Text
            rpt.lblSachbearbeiter.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
            'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung

            'Dim cnt As Integer = 0
            rpt.lblDat.Text = Now.ToLongDateString
            Dim sumAnz As Double = 0
            Dim sumBar As Double = 0
            Dim sumRg As Double = 0
            Dim sumVk As Double = 0
            Dim sumZwSum As Double = 0


            rpt.lblBarzahlungsbetrag.Visible = True
            rpt.lblBarTitle.Visible = True
            rpt.lblSummeBar.Visible = True

            rpt.lblFiliale.Text = "Alle Filialen"

            AddHandler rpt.Detail.Format, Sub()
                                              rpt.lblVon.Text = CDate(rpt.Fields.Item("von").Value).ToShortDateString
                                              rpt.lblBis.Text = CDate(rpt.Fields.Item("bis").Value).ToShortDateString
                                              rpt.lblAbfAnz.Text = rpt.Fields.Item("Anzahl").Value
                                              rpt.lblAbfArtNr.Text = If(rpt.Fields.Item("Abfertigungsart").Value Is DBNull.Value, "-", rpt.Fields.Item("Abfertigungsart").Value)
                                              rpt.lblAbfArt.Text = If(rpt.Fields.Item("Abfertigungsbezeichnung").Value Is DBNull.Value, "-", rpt.Fields.Item("Abfertigungsbezeichnung").Value)


                                              Dim BarBetrag As Double = CDbl(rpt.Fields.Item("Barzahlungsbetrag").Value())
                                              Dim sqlstrRg = " SELECT isnull( sum(RechnungsausgangPositionen.SteuerfreierBetrag+RechnungsausgangPositionen.SteuerpflichtigerBetrag),0) as RgBetrag
                                                                FROM  Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart 
                                                                 inner JOIN   Rechnungsausgang ON Rechnungsausgang.FilialenNr=Speditionsbuch.FilialenNr and Rechnungsausgang.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Rechnungsausgang.SpeditionsbuchUnterNr=Speditionsbuch.UnterNr 
                                                                 inner JOIN RechnungsausgangPositionen ON Rechnungsausgang.RK_ID=RechnungsausgangPositionen.RK_ID 
                                                                 inner JOIN leistungen ON RechnungsausgangPositionen.LeistungsNr=leistungen.LeistungsNr 
                                                                WHERE  1=1 
                                                                " & SpedBuchWhere & "
                                                                and Speditionsbuch.Abfertigungsart=" & rpt.Fields.Item("Abfertigungsart").Value &
                                                                 If(CheckBox1.Checked, " and Speditionsbuch.FilialenNr='" & If(rpt.Fields.Item("FilialenNr") IsNot Nothing, rpt.Fields.Item("FilialenNr").Value, "") & "'", "") & "
                                                                and leistungen.Abfertigungskosten=1"
                                              Dim RgBetrag As Double = SQL.getValueTxtBySqlVarList(sqlstrRg, "FMZOLL", SpedBuchList, 0)

                                              Dim sqlstrVK = " SELECT  isnull(sum(Vorkosten.Preis),0) as VKBetrag
                                                                FROM  Speditionsbuch LEFT JOIN Abfertigungsarten ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart 
                                                                 inner JOIN Vorkosten ON Vorkosten.FilialenNr=Speditionsbuch.FilialenNr and Vorkosten.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Vorkosten.UnterNr=Speditionsbuch.UnterNr  
                                                                WHERE  1=1 
                                                                " & SpedBuchWhere & "
                                                                and Speditionsbuch.Abfertigungsart=" & rpt.Fields.Item("Abfertigungsart").Value &
                                                                 If(CheckBox1.Checked, " and Speditionsbuch.FilialenNr='" & If(rpt.Fields.Item("FilialenNr") IsNot Nothing, rpt.Fields.Item("FilialenNr").Value, "") & "'", "") & ""

                                              Dim VkBetrag As Double = SQL.getValueTxtBySqlVarList(sqlstrVK, "FMZOLL", SpedBuchList, 0)


                                              Dim ZwSum = RgBetrag + BarBetrag - VkBetrag

                                              rpt.lblBarzahlungsbetrag.Text = BarBetrag.ToString("C")
                                              rpt.Label8.Text = (RgBetrag).ToString("C")
                                              rpt.Label13.Text = (VkBetrag).ToString("C")
                                              rpt.Label14.Text = (ZwSum).ToString("C")

                                              sumAnz += CDbl(rpt.Fields.Item("Anzahl").Value)
                                              sumBar += BarBetrag
                                              sumRg += RgBetrag
                                              sumVk += VkBetrag
                                              sumZwSum += ZwSum
                                          End Sub
            AddHandler rpt.GroupHeader1.Format, Sub()
                                                    If CheckBox1.Checked Then rpt.lblFiliale.Text = SQL.getValueTxtBySql("SELECT CAST(FilialenNr as varchar (4)) + ' ' + Grenzstelle FROM filialen WHERE FilialenNr='" & rpt.Fields.Item("FilialenNr").Value & "'", "FMZOLL")
                                                    sumAnz = 0
                                                    sumBar = 0
                                                    sumRg = 0
                                                    sumVk = 0
                                                    sumZwSum = 0
                                                End Sub
            AddHandler rpt.GroupFooter1.Format, Sub()
                                                    rpt.lblSummeAnzahl.Text = sumAnz
                                                    rpt.lblSummeBar.Text = sumBar.ToString("C")
                                                    rpt.Label10.Text = sumRg.ToString("C")
                                                    rpt.Label15.Text = sumVk.ToString("C")
                                                    rpt.Label16.Text = sumZwSum.ToString("C")
                                                End Sub

            print.Viewer.LoadDocument(rpt)
            print.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            print.Show()
        End If
    End Sub

    Private Sub Button12_Click_1(sender As Object, e As EventArgs) Handles btnNurAbf.Click
        Dim dt = SQL.loadDgvBySql("SELECT Abfertigungsart FROM [Abfertigungsarten] where isAbfertigung=1", "FMZOLL")
        MyListBox1.ClearSelected()
        If dt IsNot Nothing Then
            For Each r In dt.Rows
                For i = 0 To MyListBox1.Items.Count - 1
                    If DirectCast(MyListBox1.Items(i), VERAG_PROG_ALLGEMEIN.MyListItem).Value = r("Abfertigungsart") Then
                        MyListBox1.SetSelected(i, True)
                    End If
                Next
            Next
        End If
    End Sub

    Private Sub Button21_Click(sender As Object, e As EventArgs) Handles Button21.Click
        DataGridView.Columns.Clear()
        Dim dt As DataTable

        If False Then

            Dim sqlstr As String = ""
            sqlstr &= " SELECT DATEPART(YEAR,Abfertigungsdatum) Jahr, DATEPART(month,Abfertigungsdatum) Monat, sum(Abfertigungsanzahl) Anzahl FROM Speditionsbuch "
            sqlstr &= " WHERE 1=1  "
            dt = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                               " GROUP BY DATEPART(YEAR,Abfertigungsdatum), DATEPART(month,Abfertigungsdatum)  " &
                                               " ORDER BY DATEPART(YEAR,Abfertigungsdatum), DATEPART(month,Abfertigungsdatum) ",
                                    "FMZOLL", , getSpedbuchList())
        Else

            Dim sqlstr As String = ""
            sqlstr &= " SELECT DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) Jahr, DATEPART(month,Speditionsbuch.Abfertigungsdatum) Monat, sum(Abfertigungsanzahl) Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,isnull(sum(SteuerfreierGesamtbetrag+SteuerpflichtigerGesamtbetrag),0) as RgBetrag "
            sqlstr &= " FROM Speditionsbuch "
            sqlstr &= "  LEFT  JOIN Rechnungsausgang ON Rechnungsausgang.FilialenNr=Speditionsbuch.FilialenNr and Rechnungsausgang.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Rechnungsausgang.SpeditionsbuchUnterNr=Speditionsbuch.UnterNr  "
            sqlstr &= "  INNER JOIN RechnungsausgangPositionen ON Rechnungsausgang.RK_ID=RechnungsausgangPositionen.RK_ID  "
            sqlstr &= "  INNER JOIN leistungen ON RechnungsausgangPositionen.LeistungsNr=leistungen.LeistungsNr  "
            sqlstr &= " WHERE 1=1 and leistungen.Abfertigungskosten=1 "

            dt = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                                   " GROUP BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum), DATEPART(month,Speditionsbuch.Abfertigungsdatum)  " &
                                                   " ORDER BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum), DATEPART(month,Speditionsbuch.Abfertigungsdatum) ",
                                        "FMZOLL", , getSpedbuchList())
        End If


        If dt IsNot Nothing Then DataGridView.DataSource = dt
    End Sub

    Private Sub Button22_Click(sender As Object, e As EventArgs) Handles Button22.Click
        DataGridView.Columns.Clear()
        Dim dt As DataTable

        'Dim sqlstr As String = ""
        'sqlstr &= " SELECT DATEPART(YEAR,Abfertigungsdatum) Jahr, DATEPART(iso_week,Abfertigungsdatum) Woche, count(*) Anzahl FROM Speditionsbuch "
        'sqlstr &= " WHERE 1=1  "
        'Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
        '                                       " GROUP BY DATEPART(YEAR,Abfertigungsdatum), DATEPART(iso_week,Abfertigungsdatum)  " &
        '                                       " ORDER BY DATEPART(YEAR,Abfertigungsdatum), DATEPART(iso_week,Abfertigungsdatum) ",
        '                            "FMZOLL", , getSpedbuchList())

        If False Then

            Dim sqlstr As String = ""
            sqlstr &= " SELECT DATEPART(YEAR,Abfertigungsdatum) Jahr, DATEPART(iso_week,Abfertigungsdatum) Monat, sum(Abfertigungsanzahl) Anzahl FROM Speditionsbuch "
            sqlstr &= " WHERE 1=1  "
            dt = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                               " GROUP BY DATEPART(YEAR,Abfertigungsdatum), DATEPART(iso_week,Abfertigungsdatum)  " &
                                               " ORDER BY DATEPART(YEAR,Abfertigungsdatum), DATEPART(iso_week,Abfertigungsdatum) ",
                                    "FMZOLL", , getSpedbuchList())
        Else

            Dim sqlstr As String = ""
            sqlstr &= " SELECT DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) Jahr, DATEPART(iso_week,Speditionsbuch.Abfertigungsdatum) Monat, sum(Abfertigungsanzahl) Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,isnull(sum(SteuerfreierGesamtbetrag+SteuerpflichtigerGesamtbetrag),0) as RgBetrag "
            sqlstr &= " FROM Speditionsbuch "
            sqlstr &= "  LEFT  JOIN Rechnungsausgang ON Rechnungsausgang.FilialenNr=Speditionsbuch.FilialenNr and Rechnungsausgang.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Rechnungsausgang.SpeditionsbuchUnterNr=Speditionsbuch.UnterNr  "
            sqlstr &= "  INNER JOIN RechnungsausgangPositionen ON Rechnungsausgang.RK_ID=RechnungsausgangPositionen.RK_ID  "
            sqlstr &= "  INNER JOIN leistungen ON RechnungsausgangPositionen.LeistungsNr=leistungen.LeistungsNr  "
            sqlstr &= " WHERE 1=1 and leistungen.Abfertigungskosten=1 "

            dt = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                                   " GROUP BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum), DATEPART(iso_week,Speditionsbuch.Abfertigungsdatum)  " &
                                                   " ORDER BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum), DATEPART(iso_week,Speditionsbuch.Abfertigungsdatum) ",
                                        "FMZOLL", , getSpedbuchList())
        End If

        If dt IsNot Nothing Then DataGridView.DataSource = dt
    End Sub
    Private Sub Buttonf2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        DataGridView.Columns.Clear()
        Dim dt As DataTable

        If True Then


            Dim sqlstr As String = ""
            sqlstr &= " SELECT DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) Jahr,  sum(Abfertigungsanzahl) Anzahl,SUM(Barzahlungsbetrag) as Barzahlungsbetrag,isnull(sum(SteuerfreierGesamtbetrag+SteuerpflichtigerGesamtbetrag),0) as RgBetrag "
            sqlstr &= " FROM Speditionsbuch "
            sqlstr &= "  LEFT  JOIN Rechnungsausgang ON Rechnungsausgang.FilialenNr=Speditionsbuch.FilialenNr and Rechnungsausgang.AbfertigungsNr=Speditionsbuch.AbfertigungsNr and Rechnungsausgang.SpeditionsbuchUnterNr=Speditionsbuch.UnterNr  "
            sqlstr &= "  INNER JOIN RechnungsausgangPositionen ON Rechnungsausgang.RK_ID=RechnungsausgangPositionen.RK_ID  "
            sqlstr &= "  INNER JOIN leistungen ON RechnungsausgangPositionen.LeistungsNr=leistungen.LeistungsNr  "
            sqlstr &= " WHERE 1=1 and leistungen.Abfertigungskosten=1 "
            MsgBox(sqlstr & getSpedBuchWhere() &
                                                   " GROUP BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) " &
                                                   " ORDER BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) ")
            dt = SQL.loadDgvBySql_Param(sqlstr & getSpedBuchWhere() &
                                                   " GROUP BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) " &
                                                   " ORDER BY DATEPART(YEAR,Speditionsbuch.Abfertigungsdatum) ",
                                        "FMZOLL", , getSpedbuchList())
        End If

        If dt IsNot Nothing Then DataGridView.DataSource = dt
    End Sub
    Private Sub Button23_Click(sender As Object, e As EventArgs) Handles Button23.Click
        Dim VerbNr = InputBox("Bitte geben Sie die Gelangensbestätigungs-Nr. ein:")
        If VerbNr.Trim <> "" AndAlso IsNumeric(VerbNr) Then
            Dim cnt = SQL.getValueTxtBySql("SELECT COUNT(*) FROM [Speditionsbuch] where SB_CMRNr ='" & VerbNr & "' ", "FMZOLL")
            If cnt > 0 Then
                If vbYes = MsgBox(cnt & " Einträge gefunden, fortfahren?", vbYesNoCancel) Then
                    Dim VerbDat = InputBox("Bitte geben Sie das Datum ein, an dem die Gelangensbestätigung erhalten wurde:")
                    If VerbDat.Trim <> "" AndAlso IsDate(VerbDat) Then
                        If SQL.doSQL("UPDATE [Speditionsbuch] SET SB_CMR=1, SB_CMRDatum='" & CDate(VerbDat).ToShortDateString & "' where SB_CMRNr ='" & VerbNr & "' ", "FMZOLL") Then
                            MsgBox("Erfolgreich eingetragen!")
                        Else
                            MsgBox("Fehler beim Eintragen!")
                        End If
                    End If
                End If
            Else
                MsgBox("Keine Daten!")
            End If
        End If
    End Sub

    Private Sub lstGrenze_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstGrenze.SelectedIndexChanged
        txtZollstelle.Visible = False

        For Each l In lstGrenze.SelectedItems
            If l.text <> "???" Then Exit Sub
        Next
        txtZollstelle.Visible = True
    End Sub

    Private Sub initToolStripMenu()
        For Each c As ToolStripMenuItem In KundenauswertungenToolStripMenuItem1.DropDownItems

            If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERAG" Then
                If c.Name = "ZFFriedrichshafenAGZeitraumAuswählenToolStripMenuItem" Or c.Name = "ZFThyrnauZeitraumAuswählenToolStripMenuItem" Then
                    c.Visible = True
                End If

            End If

            If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED" Then
                If c.Name = "FlenderBocholtZeitraumAuswählenToolStripMenuItem" Then
                    c.Visible = True
                End If
            End If



        Next
    End Sub

    Private Sub FlenderBocholtZeitraumAuswählenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AuswertungDiversZeitraumAuswählenToolStripMenuItem.Click
        lblKdAusFortschritt.Text = "lädt..."
        Me.Cursor = Cursors.WaitCursor
        Try

            Dim dt As DataTable = SQL.loadDgvBySql("SELECT [Speditionsbuch].[FilialenNr]
      ,[Speditionsbuch].[AbfertigungsNr] 
      ,CAST([Abfertigungsdatum] as DATE) [Abfertigungsdatum] 
      ,isnull([BelegNr],'') ATC
                  ,isnull([sndhdg_nr],'') ATA 
      ,[LKW Kennzeichen] 
      ,[Absender] 
      ,[Empfänger] 
      ,[Vermittler] 
      ,[Frachtführer] 
      ,[Avisierer]
      ,[Packstücke]
      ,isnull([Abfertigungsarten].AbfertigungsbezeichnungLang,[Abfertigungsarten].Abfertigungsbezeichnung) Abfertigungsart
      ,[Abfertigungsanzahl]
      ,CASE WHEN Aviso.[Grenzstelle]='???' THEN Aviso.[Zollstelle] ELSE Aviso.[Grenzstelle] END [Grenzstelle]
                        
        FROM [VERAG].[dbo].[Speditionsbuch] INNER JOIN " & VERAG_PROG_ALLGEMEIN.cAllgemein.AVISO_SERVER & ".[AVISO].dbo.tblSendungen ON SendungID=[tblSnd_SendungID]
        INNER JOIN " & VERAG_PROG_ALLGEMEIN.cAllgemein.AVISO_SERVER & ".[AVISO].dbo.Aviso ON [Speditionsbuch].AvisoID=Aviso.AvisoID
        INNER JOIN Abfertigungsarten ON Abfertigungsarten.Abfertigungsart=[Speditionsbuch].Abfertigungsart
        LEFT JOIN " & VERAG_PROG_ALLGEMEIN.cAllgemein.AVISO_SERVER & ".[AVISO].dbo.[tblSendHandling] ON [tblSnd_SendungID]=[sndhdg_sendId]

        where Empfänger LIKE '%Flender%' and [Speditionsbuch].FilialenNr=5601
        and Abfertigungsdatum BETWEEN '" & txtAbfertDat.Text & "' and '" & txtAbfertDatBis.Text & "'
        order by [Speditionsbuch].Abfertigungsart , Abfertigungsdatum", "FMZOLL")

            Dim Path = ""
            If dt IsNot Nothing And dt.Rows.Count > 0 Then

                cProgramFunctions.genExcelFromDT_NEW(dt)

            End If
            lblKdAusFortschritt.Text = "fertig"
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
            lblKdAusFortschritt.Text = "Fehler"
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Private Function generateReadableFilter(text As String) As String

        text = text.ToLower()
        text = text.Replace("=1", " ist wahr ")
        text = text.Replace("=0", " ist falsch ")
        text = text.Replace("=", " ist ")
        text = text.Replace("[", "")
        text = text.Replace("]", "")
        text = text.Replace("(", "")
        text = text.Replace(")", "")
        text = text.Replace(":", "")
        text = text.Replace("select", " Felder: ")
        text = text.Replace("from", " Tabelle: ")
        text = text.Replace("like", " wie ")
        text = text.Replace("and", " und ")
        text = text.Replace("inner join", " Untertabelle: ")
        text = text.Replace("left join", " Untertabelle: ")
        text = text.Replace("right join", " Untertabelle: ")
        text = text.Replace("between", " zwischen ")
        text = text.Replace("00", "")
        text = text.Replace("speditionsbuch.", "")
        text = text.Replace("%", "*")

        Return text

    End Function

    Private Sub Button25_Click(sender As Object, e As EventArgs) Handles Button25.Click

        If CDate(txtAbfertDat.Text).Year <> CDate(txtAbfertDatBis.Text).Year Then
            MsgBox("keine jahresüberschneidende Handlingsauswertung möglich!")
            Exit Sub
        End If

        Dim where = ""
        Select Case MyComboBox2._value
            Case "VERAG" : where = " AND FilialenNr IN (SELECT Filialen.FilialenNr FROM Filialen WHERE Filialen.Firma='VERAG' AND Filialen.FilialenNr NOT IN (4801,4802)) "
            Case "IMEX" : where = " AND FilialenNr IN (5501) "
            Case "UNISPED" : where = " AND FilialenNr IN (5601) "
                'Case "ATILLA" : where = " AND FilialenNr IN (SELECT Filialen.FilialenNr FROM Filialen WHERE Filialen.Firma='VERAG' AND Filialen.FilialenNr NOT IN (5601)) "
        End Select
        where &= " and Grenzstelle='AMB' "
        Dim dtAbrechnung As New DataTable
        Dim HandlingList As VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST = Nothing
        Dim anhang_path = getrHandlingAussenstellen(CDate(txtAbfertDat.Text), dtAbrechnung, HandlingList, Not cbxHandlingAbrechnen.Checked, "AMBAR an ALL", where, True)
        If cbxHandlingAbrechnen.Checked Then

            If lstFiliale.SelectedItems.Count > 1 Then
                MsgBox("Es darf nur eine Filiale ausgewählt werden!")
                Exit Sub
            End If

            createHandlingAbrechnung(dtAbrechnung, MyComboBox2._value, MyComboBox2._value, lstFiliale._value, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), anhang_path, HandlingList)
        End If
    End Sub

    Private Sub SendungsdetailsÖffnenToolStripMenuItem_Click(
        sender As Object, e As EventArgs) _
        Handles SendungsdetailsÖffnenToolStripMenuItem.Click

        If DataGridView.SelectedRows.Count <> 1 Then
            MsgBox("Bitte wählen Sie genau eine Zeile aus.")
            Exit Sub
        End If

        Dim r = DataGridView.SelectedRows(0)
        Dim spb = New cSpeditionsbuch(
            FilialenNr:=CInt(r.Cells("FilialenNr").Value),
            AbfertigungsNr:=CInt(r.Cells("AbfertigungsNr").Value),
            UnterNr:=CInt(r.Cells("UnterNr").Value)
        )


        RaiseEvent SendungsdetailsRequested(spb.AvisoID, spb.SendungID)


    End Sub

    Private Shared Function createHandlingAbrechnung(dt As DataTable, title As String, anFirma As String, filiale As Integer, von As Date, bis As Date, anhang_path As String, HandlingList As VERAG_PROG_ALLGEMEIN.cHandlingssaetzeInternLIST) As Boolean

        Try

            If dt Is Nothing OrElse dt.Rows.Count = 0 Then
                MessageBox.Show("Keine Daten vorhanden.", "Handling-Abrechnung",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information)
                Return False
            End If



            Using frm As New frmAbrechnungHandling(dt, HandlingList, "Handling " & anFirma & " " & title)

                If frm.ShowDialog() = DialogResult.OK Then
                    Dim kdNr As Integer = -1
                    Select Case anFirma.Trim()
                        Case "UNISPED" : kdNr = 704028
                        Case "IMEX" : kdNr = 550574
                        Case "AMBAR" : kdNr = 725012
                        Case Else
                            MsgBox("falscher Kunde!")
                            Return False
                    End Select

                    Dim counter = 0


                    Dim fi As New System.IO.FileInfo(anhang_path)
                    Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "ANHÄNGE", anFirma.Trim(), bis.ToShortDateString, "", fi.Name,)
                    If Not DS.uploadDataToDATENSERVER(anhang_path, fi.Name, fi.Extension,,,, True) Then
                        MsgBox("Fehler beim Speichern: Datenserver! :" & anFirma.Trim())
                    End If

                    For Each row As DataGridViewRow In frm.dgvHandling.SelectedRows

                        doRechnung(filiale, kdNr, row.Cells("Grenzstelle").Value, row.Cells("Anzahl").Value, von, bis, row.Cells("HANDLING").Value, row.Cells("zu_kassieren_BAR").Value, counter, DS, anFirma.Trim())

                    Next

                    MsgBox("Es wurden " & counter & " Belege erstellt!")

                    Return True
                End If

            End Using

            Return False

        Catch ex As Exception

            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(
            ex.Message,
            ex.StackTrace,
            Reflection.MethodInfo.GetCurrentMethod.Name)

            Return False

        End Try

    End Function

    Private Shared Function doRechnung(filiale As Integer, kdNr As Integer, grenzstelle As String, Anzahl As Integer, von As Date, bis As Date, AB_Handling As Double, AB_Handling_BAR As Double, ByRef counter As Integer, ByRef DS As cDATENSERVER, ByRef an_firma As String) As Boolean

        Dim verarbOK As Boolean = True
        Dim AbfertigungNr As Integer = 0

        For i = 0 To 1


            Dim SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch = Nothing
            Dim RK_ID As Integer = -1
            Dim isGutschrift As Boolean = False
            Dim nettobetrag As Double = 0
            Dim bruttobetrag As Double = 0
            Dim Ust As Double = 0
            If i = 1 Then
                isGutschrift = True
                nettobetrag = AB_Handling_BAR
                bruttobetrag = AB_Handling_BAR
                Ust = 0
            Else
                nettobetrag = AB_Handling
                bruttobetrag = AB_Handling
            End If

            If bruttobetrag <> 0 AndAlso nettobetrag <> 0 Then
                If Not gen_SPEDBUCH_ByKdNr(kdNr, SPEDBUCH, filiale, AbfertigungNr, Anzahl, von, bis) Then verarbOK = False
                If Not gen_RECHNUNG_BySPEDBUCH(kdNr, SPEDBUCH, RK_ID, grenzstelle, isGutschrift, nettobetrag, bruttobetrag, Ust, DS, an_firma) Then verarbOK = False
                If verarbOK Then
                    counter += 1
                End If
            End If


        Next





        Return verarbOK

    End Function


    Private Shared Function gen_SPEDBUCH_ByKdNr(ByRef KdNr As String, ByRef SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef Filiale As Integer, ByRef AbfertigungsNr As Integer, ByRef anzahl As Integer, ByRef von As Date, ByRef bis As Date)
        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

            OffertenNr = 2 : Abfertigungsart = 23 : SPEDBUCH.FilialenNr = Filiale


            Dim GJ = Now.Year
            If IsDate(bis) AndAlso bis > Now.AddYears(-5) Then GJ = cRKSV.getGJ(bis, 1)

            If AbfertigungsNr > 0 Then
                SPEDBUCH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(Filiale, AbfertigungsNr)
            Else
                SPEDBUCH.AbfertigungsNr = VERAG_PROG_ALLGEMEIN.cAllgemein.getMaxPosNrIncrement(SPEDBUCH.FilialenNr, GJ)
                AbfertigungsNr = SPEDBUCH.AbfertigungsNr
            End If

            SPEDBUCH.NewUNTER_NR()

            SPEDBUCH.Vermittler = AD.Ordnungsbegriff
            SPEDBUCH.VermittlerKundenNr = KdNr
            SPEDBUCH.VermittlerOffertenNr = OffertenNr
            SPEDBUCH.Abfertigungsdatum = bis.ToShortDateString
            SPEDBUCH.Zollsystem_Land = "DE"

            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.Abfertigungsanzahl = anzahl
            SPEDBUCH.Bemerkungen = "Sammelrechnung " & von.ToShortDateString & " - " & bis.ToShortDateString & " / Abfertigungen: " & anzahl

            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

    Private Shared Function gen_RECHNUNG_BySPEDBUCH(KdNr As String, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef RK_ID As Integer, ByRef grenzstelle As String, isGutschrift As Boolean, Nettobetrag As Double, Bruttobetrag As Double, UstBetrag As Double, DS As cDATENSERVER, firma_an As String)
        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

            OffertenNr = 2 : Abfertigungsart = 23
            If isGutschrift Then
                RG.Anlage_1 = "SA Handling " & grenzstelle
            Else
                RG.Anlage_1 = "SA Gutschrift " & grenzstelle
            End If

            If grenzstelle = "NKD" AndAlso VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA_ID = 1 Then
                RG.Firma_ID = 11 'wenn NKD
            Else
                RG.Firma_ID = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA_ID
            End If


            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

            If isGutschrift Then

                RG.[BelegartenKz] = "AG"
                RG.[BelegartenNr] = 71
                RG.Vorzeichen = "-"
                RG.BelegartenBez = "Gutschrift"
                RG.Steuerschlüssel = 10 'RC weil Bar!

            Else

                RG.BelegartenKz = "AR"
                RG.BelegartenNr = 70
                RG.BelegartenBez = "Rechnung"
                RG.Vorzeichen = "+"
                RG.Steuerschlüssel = KD.Steuerschlüssel

            End If


            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.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.Nettozahlungsziel = KD.Zahlungsziel
            RG.Grenze = grenzstelle

            RG.SteuerpflichtigerGesamtbetrag = 0
            RG.SteuerfreierGesamtbetrag = 0
            RG.Status = 0

            RG.[Vorkosten] = 0
            RG.[Erlös] = 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

            If isGutschrift Then
                allPos(RG, OFFERTE, 496, Nettobetrag, Bruttobetrag, UstBetrag, "Barinkasso Handling")
            Else
                allPos(RG, OFFERTE, 345, Nettobetrag, Bruttobetrag, UstBetrag, "Handling")
            End If

            Dim dtSt As DataTable = (New 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

            Dim ANH As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangAnhaenge
            ANH.dsId = CInt(DS.da_id)
            ANH.Bezeichnung = CDate(SPEDBUCH.Abfertigungsdatum).ToShortDateString & "_" & firma_an & "_Handling"
            RG.ANHAENGE.Add(ANH)

            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 Shared 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 = "")
        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.Anzahl = 1
                    POS.Steuerpflichtig = LEISTUNG.Steuerpflichtig
                    POS.BGebBgl = NettoBetrag - UstBetrag


                    If POS.Steuerpflichtig Then
                        POS.SteuerpflichtigerBetrag = NettoBetrag
                        POS.Preis = NettoBetrag
                    Else
                        POS.SteuerfreierBetrag = BruttoBetrag
                        POS.Preis = BruttoBetrag
                    End If
                    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 ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem1.Click, ToolStripMenuItem19.Click

        Dim kdnrsrch As Integer = -1
        Dim KUNDE
        Dim Detailbericht As Boolean = False


        If sender Is ToolStripMenuItem1 Then
            Detailbericht = False
        ElseIf sender Is ToolStripMenuItem19 Then
            Detailbericht = True
        End If

        If kdnrsrch < 0 Then

            Dim inputKdNr = InputBox("Bitte KdNr eingeben", "Kundenauswertung generieren")
            If inputKdNr <> "" Then inputKdNr = inputKdNr.Trim()
            If inputKdNr <> "" AndAlso IsNumeric(inputKdNr) AndAlso inputKdNr > 0 Then
                kdnrsrch = inputKdNr

                KUNDE = New cKunde(kdnrsrch)
                If KUNDE Is Nothing Then
                    MsgBox("KundenNr " & inputKdNr & " nicht vorhanden!")
                    Exit Sub
                End If
            Else
                MsgBox("KundenNr " & inputKdNr & " nicht gültig!")
                Exit Sub
            End If

        End If




        Dim dt As DataTable = SQL.loadDgvBySql("SELECT   CAST([FilialenNr] as varchar) + '/' + CAST([AbfertigungsNr] as varchar) Abfertigungsnummer
	                           ,cast([Abfertigungsdatum] as date)Abfertigungsdatum
                              ,Absender
	                          ,Rechnungsbetrag Betrag 
  	                          ,BelegNr
                              ,[FilialenNr],[AbfertigungsNr],Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung,Speditionsbuch.Zollsystem_Land, Speditionsbuch.[LKW Kennzeichen]
                          FROM Speditionsbuch INNER JOIN [Abfertigungsarten] ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart
                          where EmpfängerKundenNr IN (" & kdnrsrch & ") and VermittlerKundenNr IN (" & kdnrsrch & ") and Abfertigungsdatum BETWEEN '" & txtAbfertDat.Text & "' AND '" & txtAbfertDatBis.Text & "' And Speditionsbuch.Abfertigungsart IN (1,26,29,38)", "FMZOLL")

        Try

            Dim Path = ""
            If dt IsNot Nothing And dt.Rows.Count > 0 Then

                Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
                If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
                    My.Computer.FileSystem.CreateDirectory(sPath)
                End If


                Dim exclApp As Object 'as Application
                Dim Datei As Object 'as WorkBook
                Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet
                exclApp = CreateObject("Excel.Application")

                If Detailbericht Then

                    With exclApp
                        .Visible = False

                        Try
                            Path = sPath & "Detailbericht_" & KUNDE.KundenNr & "_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "" & " .xlsx"
                            While System.IO.File.Exists(Path)
                                Path = sPath & KUNDE.KundenNr & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                            End While
                            My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Detailauswertung_divers, False)
                        Catch ex As System.Exception
                            '  MsgBox(ex.Message)
                            MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                            Me.Cursor = Cursors.Default

                            Exit Sub
                        End Try

                        Datei = .Workbooks.Open(Path) 'Anpassen
                        Blatt = Datei.Worksheets(1) 'Anpassen

                        Dim cnt = 2
                        For Each r In dt.Rows
                            Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                            Try
                                Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then

                                    If ZOLLANMELDUNG.dtWARENPOS.Rows.Count > 0 Then

                                        Dim rowcounter As Integer = 0

                                        For Each row As DataRow In ZOLLANMELDUNG.dtWARENPOS.Rows

                                            Dim ZollInProzent As Double = 0
                                            If If(ZOLLANMELDUNG.RechnungspreisohneWahrung, "") <> "" Then
                                                ZollInProzent = ZOLLANMELDUNG.ABGABEN_ZOLL / ZOLLANMELDUNG.RechnungspreisohneWahrung * 100
                                            End If

                                            Blatt.Range("A" & cnt).Value = cnt - 1
                                            Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                            Blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                                            Blatt.Range("D" & cnt).Value = ZOLLANMELDUNG.Empfaenger
                                            Blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                                            Blatt.Range("F" & cnt).Value = r("BelegNr")
                                            Blatt.Range("G" & cnt).Value = row.Item("PosNr")
                                            Blatt.Range("H" & cnt).Value = row.Item("WarenNr")
                                            Blatt.Range("I" & cnt).Value = "-"
                                            Blatt.Range("J" & cnt).Value = row.Item("WarenBez")
                                            Blatt.Range("K" & cnt).Value = ""
                                            Blatt.Range("L" & cnt).Value = ZOLLANMELDUNG.Waehrungscode
                                            Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Geschaeftsart
                                            Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Zollstelle_Eingang
                                            Blatt.Range("O" & cnt).Value = ""
                                            Blatt.Range("P" & cnt).Value = row.Item("Netto")
                                            Blatt.Range("Q" & cnt).Value = row.Item("PosWert")
                                            Blatt.Range("R" & cnt).Value = IIf(rowcounter = 0, ZOLLANMELDUNG.ABGABEN_EUST, "")
                                            Blatt.Range("S" & cnt).Value = IIf(rowcounter = 0, ZOLLANMELDUNG.ABGABEN_ZOLL, "")
                                            Blatt.Range("T" & cnt).Value = IIf(rowcounter = 0, ZollInProzent.ToString("N2") & " %", "")
                                            Blatt.Range("U" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Count > 1, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(0, 2), "")
                                            Blatt.Range("V" & cnt).Value = ZOLLANMELDUNG.Absender
                                            Blatt.Range("W" & cnt).Value = row.Item("Herkunft")
                                            Blatt.Range("X" & cnt).Value = ZOLLANMELDUNG.Incoterms
                                            Blatt.Range("Y" & cnt).Value = row.Item("Verfahren")
                                            Blatt.Range("Z" & cnt).Value = row.Item("Preferenz")

                                            If If(ZOLLANMELDUNG.ATCMRN, "") <> "" AndAlso Blatt.Range("F" & cnt).Value = "" Then
                                                Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                            End If

                                            cnt += 1
                                            rowcounter += 1
                                        Next
                                    Else
                                        Dim ZollInProzent As Double = 0
                                        If If(ZOLLANMELDUNG.RechnungspreisohneWahrung, "") <> "" Then
                                            ZollInProzent = ZOLLANMELDUNG.ABGABEN_ZOLL / ZOLLANMELDUNG.RechnungspreisohneWahrung * 100
                                        End If

                                        Blatt.Range("A" & cnt).Value = cnt - 1
                                        Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                        Blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                                        Blatt.Range("D" & cnt).Value = ZOLLANMELDUNG.Empfaenger
                                        Blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                                        Blatt.Range("F" & cnt).Value = r("BelegNr")
                                        Blatt.Range("G" & cnt).Value = ""
                                        Blatt.Range("H" & cnt).Value = ""
                                        Blatt.Range("I" & cnt).Value = "-"
                                        Blatt.Range("J" & cnt).Value = ""
                                        Blatt.Range("K" & cnt).Value = ""
                                        Blatt.Range("L" & cnt).Value = ZOLLANMELDUNG.Waehrungscode
                                        Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Geschaeftsart
                                        Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Zollstelle_Eingang
                                        Blatt.Range("O" & cnt).Value = ""
                                        Blatt.Range("P" & cnt).Value = ""
                                        Blatt.Range("Q" & cnt).Value = ""
                                        Blatt.Range("R" & cnt).Value = ZOLLANMELDUNG.ABGABEN_EUST
                                        Blatt.Range("S" & cnt).Value = ZOLLANMELDUNG.ABGABEN_ZOLL
                                        Blatt.Range("T" & cnt).Value = ZollInProzent.ToString("N2") & " %"
                                        Blatt.Range("U" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Count > 1, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(0, 2), "")
                                        Blatt.Range("V" & cnt).Value = ZOLLANMELDUNG.Absender
                                        Blatt.Range("W" & cnt).Value = ""
                                        Blatt.Range("X" & cnt).Value = ZOLLANMELDUNG.Incoterms
                                        Blatt.Range("Y" & cnt).Value = ""
                                        Blatt.Range("Z" & cnt).Value = ""
                                        Blatt.Range("AA" & cnt).Value = ""


                                        If If(ZOLLANMELDUNG.ATCMRN, "") <> "" AndAlso Blatt.Range("F" & cnt).Value = "" Then
                                            Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                        End If
                                        cnt += 1
                                    End If
                                End If



                            Catch ex As Exception
                                MsgBox(ex.Message & ex.StackTrace)
                            End Try
                            lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                            Me.Refresh()

                        Next
                        Datei.Save

                        If False Then
                            Blatt.PrintOutEx()
                        Else
                            'Process.Start(Path)
                            .Visible = True

                        End If
                    End With

                Else


                    With exclApp
                        .Visible = False

                        Try
                            Path = sPath & "Bericht_" & KUNDE.KundenNr & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "" & " .xlsx"
                            While System.IO.File.Exists(Path)
                                Path = sPath & KUNDE.KundenNr & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                            End While
                            My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.Auswertung_divers, False)
                        Catch ex As System.Exception
                            '  MsgBox(ex.Message)
                            MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                            Me.Cursor = Cursors.Default

                            Exit Sub
                        End Try

                        Datei = .Workbooks.Open(Path) 'Anpassen
                        Blatt = Datei.Worksheets(1) 'Anpassen


                        If KUNDE.KundenNr = 902452 Then 'KUNDE WILL WIEDER EXZTAWURST!!!!!!!

                            Blatt.Range("H1").Value = txtAbfertDat.Text & "-" & txtAbfertDatBis.Text

                            Blatt.Range("A" & 2).Value = "Nr"
                            Blatt.Range("B" & 2).Value = "Datum"
                            Blatt.Range("C" & 2).Value = "MRN-Nr."
                            Blatt.Range("D" & 2).Value = "LKW/Cont."
                            Blatt.Range("E" & 2).Value = "Rg.-Nr."
                            Blatt.Range("F" & 2).Value = "EUST"
                            Blatt.Range("G" & 2).Value = "Anzahl Pos."
                            Blatt.Range("H" & 2).Value = ""
                            Blatt.Range("I" & 2).Value = ""
                            Blatt.Range("J" & 2).Value = ""
                            Blatt.Range("K" & 2).Value = ""
                            Blatt.Range("L" & 2).Value = ""

                            Dim cnt = 3
                            For Each r In dt.Rows
                                Blatt.Range("A" & cnt).Value = cnt - 2
                                Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                Blatt.Range("C" & cnt).Value = r("BelegNr")
                                Blatt.Range("D" & cnt).Value = r("LKW Kennzeichen")

                                Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                                Try
                                    Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                    If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then

                                        If ZOLLANMELDUNG.Handelsrechnung <> "" Then

                                            Dim RechnungsString = ZOLLANMELDUNG.Handelsrechnung.Replace(", ", "," & vbNewLine)
                                            Dim rows() As String = RechnungsString.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)

                                            For Each row As String In rows

                                                If IsDate(row) AndAlso row.Length = 10 Then
                                                    RechnungsString = RechnungsString.Replace(row.ToString, "")
                                                End If

                                            Next

                                            Blatt.Range("E" & cnt).Value = RechnungsString.Trim
                                        End If


                                        Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.ABGABEN_EUST
                                        Blatt.Range("G" & cnt).Value = ZOLLANMELDUNG.ANZ_POS
                                        If If(ZOLLANMELDUNG.ATCMRN, "") <> "" Then
                                            Blatt.Range("C" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                        End If
                                    End If

                                Catch ex As Exception
                                    MsgBox(ex.Message & ex.StackTrace)
                                End Try
                                lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                                Me.Refresh()
                                cnt += 1
                            Next


                        Else

                            Blatt.Range("I1").Value = txtAbfertDat.Text & "-" & txtAbfertDatBis.Text

                            Dim cnt = 3
                            For Each r In dt.Rows
                                Blatt.Range("A" & cnt).Value = cnt - 2
                                Blatt.Range("B" & cnt).Value = r("Abfertigungsnummer")
                                '   Blatt.Range("C" & cnt).Value = r("RechnungsNr")
                                Blatt.Range("C" & cnt).Value = r("Abfertigungsdatum")
                                Blatt.Range("D" & cnt).Value = r("Abfertigungsbezeichnung")
                                Blatt.Range("E" & cnt).Value = r("Absender")
                                Blatt.Range("F" & cnt).Value = "" 'r("Betrag")
                                Blatt.Range("H" & cnt).Value = r("BelegNr")
                                Blatt.Range("L" & cnt).Value = r("LKW Kennzeichen")

                                Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                                Try
                                    Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                    If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then
                                        Blatt.Range("F" & cnt).Value = ZOLLANMELDUNG.RechnungspreisohneWahrung
                                        Blatt.Range("G" & cnt).Value = ZOLLANMELDUNG.Handelsrechnung.Replace(", ", "," & vbNewLine)
                                        Blatt.Range("I" & cnt).Value = ZOLLANMELDUNG.ABGABEN_ZOLL
                                        Blatt.Range("J" & cnt).Value = ZOLLANMELDUNG.ABGABEN_EUST
                                        Blatt.Range("K" & cnt).Value = ZOLLANMELDUNG.ANZ_POS

                                        If If(ZOLLANMELDUNG.ATCMRN, "") <> "" Then
                                            Blatt.Range("H" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                        End If
                                    End If

                                Catch ex As Exception
                                    MsgBox(ex.Message & ex.StackTrace)
                                End Try
                                lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                                Me.Refresh()
                                cnt += 1
                            Next

                        End If

                        Datei.Save

                        If False Then
                            Blatt.PrintOutEx()
                        Else
                            'Process.Start(Path)
                            .Visible = True

                        End If
                    End With

                End If

            End If
            lblKdAusFortschritt.Text = "fertig"
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
            lblKdAusFortschritt.Text = "Fehler"
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click
        Try

            Me.Cursor = Cursors.WaitCursor
            Dim RPT As New cSpeditionsbuchReport


            If CheckBox4.Checked Then
                RPT.RunReport_VERAG_ZA_DETAIL_FULL(770931, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text))

            ElseIf cbxDetailbericht.Checked Then
                RPT.RunReport_VERAG_ZA_DETAIL(770931, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text))

            Else
                RPT.RunReport_VERAG_ZA_GENERAL(770931, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text))

            End If


        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)

        End Try

        Me.Cursor = Cursors.Default

        Exit Sub




        lblKdAusFortschritt.Text = "lädt..."
        Me.Cursor = Cursors.WaitCursor
        Try

            Dim kdnrsrch = 770931


            Dim dt As DataTable = SQL.loadDgvBySql("SELECT   CAST([FilialenNr] as varchar) + '/' + CAST([AbfertigungsNr] as varchar) Abfertigungsnummer
	                           ,cast([Abfertigungsdatum] as date)Abfertigungsdatum
                              ,Absender,Empfänger
	                          ,Rechnungsbetrag Betrag 
  	                          ,BelegNr
                              ,[FilialenNr],[AbfertigungsNr],Speditionsbuch.Abfertigungsart,Abfertigungsbezeichnung,Speditionsbuch.Zollsystem_Land,isnull(KdAuftragsNr,'')KdAuftragsNr
                          FROM Speditionsbuch INNER JOIN [Abfertigungsarten] ON Speditionsbuch.Abfertigungsart=Abfertigungsarten.Abfertigungsart
                          where (EmpfängerKundenNr IN (" & kdnrsrch & ") OR VermittlerKundenNr IN (" & kdnrsrch & ")) and Abfertigungsdatum BETWEEN '" & txtAbfertDat.Text & "' AND '" & txtAbfertDatBis.Text & "' And isAbfertigung =1 ", "FMZOLL") 'Speditionsbuch.Abfertigungsart IN (1,3,29,38,66,46,47,37,39)

            Dim Path = ""
            If dt IsNot Nothing And dt.Rows.Count > 0 Then


                Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
                If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
                    My.Computer.FileSystem.CreateDirectory(sPath)
                End If


                Dim exclApp As Object 'as Application
                Dim Datei As Object 'as WorkBook
                Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet
                exclApp = CreateObject("Excel.Application")

                If cbxDetailbericht.Checked Then

                    With exclApp
                        .Visible = False

                        Try
                            Path = sPath & "KVI_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "" & " .xlsx"
                            While System.IO.File.Exists(Path)
                                Path = sPath & "KVI_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                            End While
                            My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.KVI_report, False)
                        Catch ex As System.Exception
                            '  MsgBox(ex.Message)
                            MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                            Me.Cursor = Cursors.Default

                            Exit Sub
                        End Try

                        Datei = .Workbooks.Open(Path) 'Anpassen
                        Blatt = Datei.Worksheets(1) 'Anpassen

                        'Blatt.Range("I1").Value = txtAbfertDat.Text & "-" & txtAbfertDatBis.Text


                        Dim cnt = 2
                        For Each r In dt.Rows
                            Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                            Try
                                Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then

                                    If ZOLLANMELDUNG.dtWARENPOS.Rows.Count > 0 Then

                                        Dim rowcounter As Integer = 0

                                        For Each row As DataRow In ZOLLANMELDUNG.dtWARENPOS.Rows

                                            Dim ZollInProzent As Double = 0
                                            If If(ZOLLANMELDUNG.RechnungspreisohneWahrung, "") <> "" Then
                                                ZollInProzent = ZOLLANMELDUNG.ABGABEN_ZOLL / ZOLLANMELDUNG.RechnungspreisohneWahrung * 100
                                            End If

                                            Dim KdAtrNr = r("KDAuftragsNr")
                                            If kdnrsrch = 770931 Then ' Sonderfall Kanadevia
                                                If KdAtrNr.ToString.Contains("/") Then
                                                    KdAtrNr = KdAtrNr.ToString.Split("/")(0) 'nur vorderer Teil nehmen
                                                End If
                                            End If

                                            Blatt.Range("A" & cnt).Value = cnt - 1
                                            Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                            Blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                                            Blatt.Range("D" & cnt).Value = ZOLLANMELDUNG.Empfaenger
                                            Blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                                            Blatt.Range("F" & cnt).Value = KdAtrNr
                                            Blatt.Range("G" & cnt).Value = r("BelegNr")
                                            Blatt.Range("H" & cnt).Value = row.Item("PosNr")
                                            Blatt.Range("I" & cnt).Value = row.Item("WarenNr")
                                            Blatt.Range("J" & cnt).Value = "-"
                                            Blatt.Range("K" & cnt).Value = row.Item("WarenBez")
                                            Blatt.Range("L" & cnt).Value = ""
                                            Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Waehrungscode
                                            Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Geschaeftsart
                                            Blatt.Range("O" & cnt).Value = ZOLLANMELDUNG.Zollstelle_Eingang
                                            Blatt.Range("P" & cnt).Value = ""
                                            Blatt.Range("Q" & cnt).Value = row.Item("Netto")
                                            Blatt.Range("R" & cnt).Value = row.Item("PosWert")
                                            Blatt.Range("S" & cnt).Value = IIf(rowcounter = 0, ZOLLANMELDUNG.ABGABEN_EUST, "")
                                            Blatt.Range("T" & cnt).Value = IIf(rowcounter = 0, ZOLLANMELDUNG.ABGABEN_ZOLL, "")
                                            Blatt.Range("U" & cnt).Value = IIf(rowcounter = 0, ZollInProzent.ToString("N2") & " %", "")
                                            Blatt.Range("V" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Count > 1, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(0, 2), "")
                                            Blatt.Range("W" & cnt).Value = ZOLLANMELDUNG.Absender
                                            Blatt.Range("X" & cnt).Value = row.Item("Herkunft")
                                            Blatt.Range("Y" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Length >= 2, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(ZOLLANMELDUNG.VerBestLandZst.ToString.Length - 2, 2), "")
                                            Blatt.Range("z" & cnt).Value = ZOLLANMELDUNG.Incoterms_code
                                            Blatt.Range("AA" & cnt).Value = ZOLLANMELDUNG.Incoterms_ort
                                            Blatt.Range("AB" & cnt).Value = row.Item("Verfahren")
                                            Blatt.Range("AC" & cnt).Value = row.Item("Preferenz")
                                            Blatt.Range("AD" & cnt).Value = IIf(row.Item("isCBAM"), "Y", "N")

                                            If If(ZOLLANMELDUNG.ATCMRN, "") <> "" AndAlso Blatt.Range("G" & cnt).Value = "" Then
                                                Blatt.Range("G" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                            End If

                                            cnt += 1
                                            rowcounter += 1
                                        Next
                                    Else
                                        Dim ZollInProzent As Double = 0
                                        If If(ZOLLANMELDUNG.RechnungspreisohneWahrung, "") <> "" Then
                                            ZollInProzent = ZOLLANMELDUNG.ABGABEN_ZOLL / ZOLLANMELDUNG.RechnungspreisohneWahrung * 100
                                        End If



                                        Dim KdAtrNr = r("KDAuftragsNr")
                                        If kdnrsrch = 770931 Then ' Sonderfall Kanadevia
                                            If KdAtrNr.ToString.Contains("/") Then
                                                KdAtrNr = KdAtrNr.ToString.Split("/")(0) 'nur vorderer Teil nehmen
                                            End If
                                        End If


                                        Blatt.Range("A" & cnt).Value = cnt - 1
                                        Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                                        Blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                                        Blatt.Range("D" & cnt).Value = ZOLLANMELDUNG.Empfaenger
                                        Blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                                        Blatt.Range("F" & cnt).Value = KdAtrNr
                                        Blatt.Range("G" & cnt).Value = r("BelegNr")
                                        Blatt.Range("H" & cnt).Value = ""
                                        Blatt.Range("I" & cnt).Value = ""
                                        Blatt.Range("J" & cnt).Value = "-"
                                        Blatt.Range("K" & cnt).Value = ""
                                        Blatt.Range("L" & cnt).Value = ""
                                        Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Waehrungscode
                                        Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Geschaeftsart
                                        Blatt.Range("O" & cnt).Value = ZOLLANMELDUNG.Zollstelle_Eingang
                                        Blatt.Range("P" & cnt).Value = ""
                                        Blatt.Range("Q" & cnt).Value = ""
                                        Blatt.Range("R" & cnt).Value = ""
                                        Blatt.Range("S" & cnt).Value = ZOLLANMELDUNG.ABGABEN_EUST
                                        Blatt.Range("T" & cnt).Value = ZOLLANMELDUNG.ABGABEN_ZOLL
                                        Blatt.Range("U" & cnt).Value = ZollInProzent.ToString("N2") & " %"
                                        Blatt.Range("V" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Count > 1, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(0, 2), "")
                                        Blatt.Range("W" & cnt).Value = ZOLLANMELDUNG.Absender
                                        Blatt.Range("X" & cnt).Value = ""
                                        Blatt.Range("Y" & cnt).Value = IIf(ZOLLANMELDUNG.VerBestLandZst.ToString.Length >= 2, ZOLLANMELDUNG.VerBestLandZst.ToString.Substring(ZOLLANMELDUNG.VerBestLandZst.ToString.Length - 2, 2), "")
                                        Blatt.Range("Z" & cnt).Value = ZOLLANMELDUNG.Incoterms_code
                                        Blatt.Range("AA" & cnt).Value = ZOLLANMELDUNG.Incoterms_ort
                                        Blatt.Range("AB" & cnt).Value = ""
                                        Blatt.Range("AC" & cnt).Value = ""
                                        Blatt.Range("AD" & cnt).Value = ""


                                        If If(ZOLLANMELDUNG.ATCMRN, "") <> "" AndAlso Blatt.Range("G" & cnt).Value = "" Then
                                            Blatt.Range("G" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                        End If

                                    End If
                                End If

                                cnt += 1

                            Catch ex As Exception
                                MsgBox(ex.Message & ex.StackTrace)
                            End Try
                            lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                            Me.Refresh()

                        Next
                        Datei.Save

                        If False Then
                            Blatt.PrintOutEx()
                        Else
                            'Process.Start(Path)
                            .Visible = True

                        End If
                    End With

                Else


                    With exclApp
                        .Visible = False

                        Try
                            Path = sPath & "KVI_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "" & " .xlsx"
                            While System.IO.File.Exists(Path)
                                Path = sPath & "KVI_" & txtAbfertDat.Text & "-" & txtAbfertDatBis.Text & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                            End While
                            My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.KVI_report_general, False)
                        Catch ex As System.Exception
                            '  MsgBox(ex.Message) 
                            MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                            Me.Cursor = Cursors.Default

                            Exit Sub
                        End Try

                        Datei = .Workbooks.Open(Path) 'Anpassen
                        Blatt = Datei.Worksheets(1) 'Anpassen

                        Blatt.Range("I1").Value = txtAbfertDat.Text & "-" & txtAbfertDatBis.Text

                        Dim cnt = 3
                        For Each r In dt.Rows
                            Blatt.Range("A" & cnt).Value = cnt - 2
                            Blatt.Range("B" & cnt).Value = r("Abfertigungsnummer")
                            '   Blatt.Range("C" & cnt).Value = r("RechnungsNr")
                            Blatt.Range("C" & cnt).Value = r("Abfertigungsdatum")
                            Blatt.Range("D" & cnt).Value = r("Abfertigungsbezeichnung")
                            Blatt.Range("E" & cnt).Value = r("Absender")
                            Blatt.Range("F" & cnt).Value = r("Empfänger")
                            Blatt.Range("H" & cnt).Value = "" 'r("Betrag")


                            Dim KdAtrNr = r("KDAuftragsNr")
                            If kdnrsrch = 770931 Then ' Sonderfall Kanadevia
                                If KdAtrNr.ToString.Contains("/") Then
                                    KdAtrNr = KdAtrNr.ToString.Split("/")(0) 'nur vorderer Teil nehmen
                                End If
                            End If


                            Blatt.Range("G" & cnt).Value = KdAtrNr

                            Dim ZOLLANMELDUNG As New DAKOSY_Worker.cZollsysteme_Aktenbeschriftung
                            Try
                                Dim zS = If(r("Zollsystem_Land") IsNot DBNull.Value, r("Zollsystem_Land").ToString(), "")
                                If ZOLLANMELDUNG.getDataByBezugsnummer(r("FilialenNr") & "/" & r("AbfertigungsNr"), r("Abfertigungsart"), "", False, zS) Then
                                    Blatt.Range("H" & cnt).Value = ZOLLANMELDUNG.RechnungspreisohneWahrung
                                    Blatt.Range("I" & cnt).Value = ZOLLANMELDUNG.Handelsrechnung.Replace(", ", "," & vbNewLine)
                                    Blatt.Range("K" & cnt).Value = ZOLLANMELDUNG.ABGABEN_ZOLL
                                    Blatt.Range("L" & cnt).Value = ZOLLANMELDUNG.ANZ_POS


                                    '----------------------------------NEW

                                    Blatt.Range("M" & cnt).Value = ZOLLANMELDUNG.Anmelder
                                    Blatt.Range("N" & cnt).Value = ZOLLANMELDUNG.Warenbezeichung
                                    Blatt.Range("O" & cnt).Value = ZOLLANMELDUNG.VerBestLandZst
                                    '----------------------------------


                                    If If(ZOLLANMELDUNG.ATCMRN, "") <> "" Then
                                        Blatt.Range("J" & cnt).Value = ZOLLANMELDUNG.ATCMRN
                                    End If
                                End If

                            Catch ex As Exception
                                MsgBox(ex.Message & ex.StackTrace)
                            End Try
                            lblKdAusFortschritt.Text = (cnt - 2) & "/" & dt.Rows.Count
                            Me.Refresh()
                            cnt += 1
                        Next
                        Datei.Save

                        If False Then
                            Blatt.PrintOutEx()
                        Else
                            'Process.Start(Path)
                            .Visible = True

                        End If
                    End With

                End If

            End If
            lblKdAusFortschritt.Text = "fertig"
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
            lblKdAusFortschritt.Text = "Fehler"
        End Try
        Me.Cursor = Cursors.Default
    End Sub

    Private Sub DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs)

    End Sub
End Class
Class cSpeditionsbuchReport

    Public Function RunReport_VERAG_ZA_DETAIL(KDNR As Integer,
                                              AbfVon As Date,
                                              AbfBis As Date,
                                              Optional whereStr As String = "",
                                              Optional Open As Boolean = True) As String
        Try
            Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr)
            If dt Is Nothing OrElse dt.Rows.Count = 0 Then
                Return ""
            End If

            Dim path As String = CreateTargetPath(AbfVon, AbfBis, "VERAG_RPT_DETAIL_")
            Dim templateBytes() As Byte = My.Resources.KVI_report ', My.Resources.KVI_report_general)
            My.Computer.FileSystem.WriteAllBytes(path, templateBytes, False)

            Dim exclApp As Object = Nothing
            Dim datei As Object = Nothing
            Dim blatt As Object = Nothing

            Try
                exclApp = CreateObject("Excel.Application")
                exclApp.Visible = False

                datei = exclApp.Workbooks.Open(path)
                blatt = datei.Worksheets(1)


                CreateDetailReport(blatt, dt, KDNR)
                '       CreateGeneralReport(blatt, dt, KDNR, AbfVon, AbfBis)


                datei.Save()

                If Open Then
                    exclApp.Visible = True
                Else
                    datei.Close(True)
                    exclApp.Quit()
                End If

            Catch ex As Exception
                Try
                    If datei IsNot Nothing Then datei.Close(False)
                Catch
                End Try

                Try
                    If exclApp IsNot Nothing Then exclApp.Quit()
                Catch
                End Try

                MsgBox(ex.Message & vbCrLf & ex.StackTrace)
                Return ""
            End Try

            Return path

        Catch ex As Exception
            MsgBox(ex.Message & vbCrLf & ex.StackTrace)
            Return ""
        End Try
    End Function

    Public Function RunReport_VERAG_ZA_GENERAL(KDNR As Integer,
                                               AbfVon As Date,
                                               AbfBis As Date,
                                               Optional whereStr As String = "",
                                               Optional Open As Boolean = True) As String
        Try
            Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr)
            If dt Is Nothing OrElse dt.Rows.Count = 0 Then
                Return ""
            End If

            Dim path As String = CreateTargetPath(AbfVon, AbfBis, "VERAG_RPT_GENERAL")
            Dim templateBytes() As Byte = My.Resources.KVI_report_general
            My.Computer.FileSystem.WriteAllBytes(path, templateBytes, False)

            Dim exclApp As Object = Nothing
            Dim datei As Object = Nothing
            Dim blatt As Object = Nothing

            Try
                exclApp = CreateObject("Excel.Application")
                exclApp.Visible = False

                datei = exclApp.Workbooks.Open(path)
                blatt = datei.Worksheets(1)


                CreateGeneralReport(blatt, dt, KDNR, AbfVon, AbfBis)


                datei.Save()

                If Open Then
                    exclApp.Visible = True
                Else
                    datei.Close(True)
                    exclApp.Quit()
                End If

            Catch ex As Exception
                Try
                    If datei IsNot Nothing Then datei.Close(False)
                Catch
                End Try

                Try
                    If exclApp IsNot Nothing Then exclApp.Quit()
                Catch
                End Try

                MsgBox(ex.Message & vbCrLf & ex.StackTrace)
                Return ""
            End Try

            Return path

        Catch ex As Exception
            MsgBox(ex.Message & vbCrLf & ex.StackTrace)
            Return ""
        End Try
    End Function



    Private Function LoadSpeditionsbuchData(KDNR As Integer,
                                            AbfVon As Date,
                                            AbfBis As Date,
                                            Optional whereStr As String = "") As DataTable
        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL

        Dim sqlText As String =
            "SELECT CAST([FilialenNr] as varchar) + '/' + CAST([AbfertigungsNr] as varchar) Abfertigungsnummer, " &
            "       CAST([Abfertigungsdatum] as date) Abfertigungsdatum, " &
            "       Absender, Empfänger, " &
            "       Rechnungsbetrag Betrag, " &
            "       BelegNr, " &
            "       [FilialenNr], [AbfertigungsNr], " &
            "       Speditionsbuch.Abfertigungsart, " &
            "       Abfertigungsbezeichnung, " &
            "       Speditionsbuch.Zollsystem_Land, " &
            "       ISNULL(KdAuftragsNr,'') KdAuftragsNr, " &
            "       SendungID " &
            "FROM Speditionsbuch " &
            "INNER JOIN [Abfertigungsarten] " &
            "   ON Speditionsbuch.Abfertigungsart = Abfertigungsarten.Abfertigungsart " &
            "WHERE (EmpfängerKundenNr IN (" & KDNR & ") OR VermittlerKundenNr IN (" & KDNR & ")) " &
            "  AND Abfertigungsdatum BETWEEN '" & AbfVon.ToShortDateString & "' AND '" & AbfBis.ToShortDateString & "' " &
            "  AND isAbfertigung = 1 "

        Return SQL.loadDgvBySql(sqlText & " " & whereStr, "FMZOLL")
    End Function

    Private Function CreateTargetPath(AbfVon As Date, AbfBis As Date, prefix As String) As String
        Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
        If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
            My.Computer.FileSystem.CreateDirectory(sPath)
        End If

        Dim path As String = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & ".xlsx"

        While System.IO.File.Exists(path)
            path = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
        End While

        Return path
    End Function

    Private Function LoadCustomsDeclaration(r As DataRow) As cVERAG_CustomsDeclarations
        Dim cd As cVERAG_CustomsDeclarations = Nothing

        Dim belegNr As String = If(r("BelegNr"), "").ToString().Trim()
        If belegNr <> "" Then
            cd = cVERAG_CustomsDeclarations.loadByMRN(belegNr, True)
        End If

        If cd Is Nothing OrElse Not cd.hasEntry Then
            Dim sendungsId As String = If(r("SendungID"), "").ToString().Trim()
            If sendungsId <> "" Then
                cd = cVERAG_CustomsDeclarations.loadBySendungsID(sendungsId, True)
            End If
        End If

        If cd Is Nothing Then cd = New cVERAG_CustomsDeclarations

        Return cd
    End Function

    Private Sub CreateDetailReport(blatt As Object, dt As DataTable, kdnr As Integer)
        Dim cnt As Integer = 2

        For Each r As DataRow In dt.Rows
            Try
                Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r)

                If Not cd.hasEntry Then
                    MsgBox("ERROR: Nicht gefunden: " &
                           If(r("BelegNr"), "").ToString() & " " &
                           If(r("FilialenNr"), "").ToString() & "/" &
                           If(r("AbfertigungsNr"), "").ToString())
                End If
                's
                WriteDetailReportRow(blatt, r, cd, cnt, kdnr)

            Catch ex As Exception
                MsgBox(ex.Message & vbCrLf & ex.StackTrace)
            End Try
        Next
    End Sub

    Private Sub CreateGeneralReport(blatt As Object,
                                    dt As DataTable,
                                    kdnr As Integer,
                                    AbfVon As Date,
                                    AbfBis As Date)
        blatt.Range("I1").Value = AbfVon.ToShortDateString & "-" & AbfBis.ToShortDateString

        Dim cnt As Integer = 3

        For Each r As DataRow In dt.Rows
            Try
                Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r)

                If Not cd.hasEntry Then
                    MsgBox("ERROR: Nicht gefunden: " &
                           If(r("BelegNr"), "").ToString() & " " &
                           If(r("FilialenNr"), "").ToString() & "/" &
                           If(r("AbfertigungsNr"), "").ToString())
                End If

                WriteGeneralReportRow(blatt, r, cd, cnt, kdnr)

            Catch ex As Exception
                MsgBox(ex.Message & vbCrLf & ex.StackTrace)
            End Try
        Next
    End Sub

    Private Sub WriteDetailReportRow(blatt As Object,
                                     r As DataRow,
                                     cd As cVERAG_CustomsDeclarations,
                                     ByRef cnt As Integer,
                                     kdnrsrch As Integer)

        Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch)

        If cd IsNot Nothing AndAlso cd.hasEntry Then
            Dim empfaenger As String = GetPartyName(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES, "")
            Dim absender As String = GetPartyName(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES, "")

            Dim eustBetrag As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"})
            Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})

            Dim invoiceAmount As Decimal = If(cd.za_InvoiceAmount, 0D)
            Dim zollInProzent As Double = 0

            If invoiceAmount <> 0 Then
                zollInProzent = CDbl(zollBetrag / invoiceAmount * 100D)
            End If

            If cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then
                Dim rowcounter As Integer = 0

                For Each item As cVERAG_CustomsDeclarations_Item In cd.Items
                    blatt.Range("A" & cnt).Value = cnt - 1
                    blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                    blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                    blatt.Range("D" & cnt).Value = empfaenger
                    blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                    blatt.Range("F" & cnt).Value = kdAtrNr
                    blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN)
                    blatt.Range("H" & cnt).Value = item.zaItem_PosNo
                    blatt.Range("I" & cnt).Value = item.zaItem_HSCode
                    blatt.Range("J" & cnt).Value = "-"
                    blatt.Range("K" & cnt).Value = item.zaItem_Description
                    blatt.Range("L" & cnt).Value = ""
                    blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency
                    blatt.Range("N" & cnt).Value = item.zaItem_MainProcedure 'cd.za_MainProcedure
                    blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice
                    blatt.Range("P" & cnt).Value = If(item.zaItem_PosNo = 1, cd.za_TotGrossMass, "")
                    blatt.Range("Q" & cnt).Value = item.zaItem_NetMass
                    blatt.Range("R" & cnt).Value = If(item.zaItem_InvoiceValueForeign, item.zaItem_InvoiceValueEUR)
                    blatt.Range("S" & cnt).Value = If(rowcounter = 0, eustBetrag, "")
                    blatt.Range("T" & cnt).Value = If(rowcounter = 0, zollBetrag, "")
                    blatt.Range("U" & cnt).Value = If(rowcounter = 0, zollInProzent.ToString("N2") & " %", "")
                    blatt.Range("V" & cnt).Value = cd.za_CountryDispatch
                    blatt.Range("W" & cnt).Value = absender
                    blatt.Range("X" & cnt).Value = item.zaItem_OriginCountry
                    blatt.Range("Y" & cnt).Value = cd.za_CountryDestination
                    blatt.Range("Z" & cnt).Value = cd.za_Incoterms
                    blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace
                    blatt.Range("AB" & cnt).Value = item.zaItem_MainProcedure & If(Not String.IsNullOrWhiteSpace(item.zaItem_AdditionalProc), "/" & item.zaItem_AdditionalProc, "")
                    blatt.Range("AC" & cnt).Value = item.zaItem_PreferenceCode
                    blatt.Range("AD" & cnt).Value = If(IsItemCBAM(item), "Y", "N")
                    blatt.Range("AE" & cnt).Value = item.GetInvoiceListString()

                    cnt += 1
                    rowcounter += 1
                Next
            Else
                blatt.Range("A" & cnt).Value = cnt - 1
                blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
                blatt.Range("D" & cnt).Value = empfaenger
                blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
                blatt.Range("F" & cnt).Value = kdAtrNr
                blatt.Range("G" & cnt).Value = If(Not String.IsNullOrWhiteSpace(If(r("BelegNr"), "").ToString()), r("BelegNr"), cd.za_MRN)
                blatt.Range("H" & cnt).Value = ""
                blatt.Range("I" & cnt).Value = ""
                blatt.Range("J" & cnt).Value = "-"
                blatt.Range("K" & cnt).Value = ""
                blatt.Range("L" & cnt).Value = ""
                blatt.Range("M" & cnt).Value = cd.za_InvoiceCurrency
                blatt.Range("N" & cnt).Value = cd.za_MainProcedure
                blatt.Range("O" & cnt).Value = cd.za_EntryCustomsOffice
                blatt.Range("P" & cnt).Value = ""
                blatt.Range("Q" & cnt).Value = ""
                blatt.Range("R" & cnt).Value = ""
                blatt.Range("S" & cnt).Value = eustBetrag
                blatt.Range("T" & cnt).Value = zollBetrag
                blatt.Range("U" & cnt).Value = zollInProzent.ToString("N2") & " %"
                blatt.Range("V" & cnt).Value = cd.za_CountryDispatch
                blatt.Range("W" & cnt).Value = absender
                blatt.Range("X" & cnt).Value = ""
                blatt.Range("Y" & cnt).Value = cd.za_CountryDestination
                blatt.Range("Z" & cnt).Value = cd.za_Incoterms
                blatt.Range("AA" & cnt).Value = cd.za_IncotermsPlace
                blatt.Range("AB" & cnt).Value = ""
                blatt.Range("AC" & cnt).Value = ""
                blatt.Range("AD" & cnt).Value = ""


                cnt += 1
            End If
        Else
            blatt.Range("A" & cnt).Value = cnt - 1
            blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
            blatt.Range("C" & cnt).Value = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale(r("FilialenNr"))
            blatt.Range("D" & cnt).Value = r("Empfänger")
            blatt.Range("E" & cnt).Value = r("FilialenNr") & "/" & r("AbfertigungsNr")
            blatt.Range("F" & cnt).Value = kdAtrNr
            blatt.Range("G" & cnt).Value = r("BelegNr")

            cnt += 1
        End If
    End Sub

    Private Sub WriteGeneralReportRow(blatt As Object,
                                      r As DataRow,
                                      cd As cVERAG_CustomsDeclarations,
                                      ByRef cnt As Integer,
                                      kdnrsrch As Integer)

        Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), kdnrsrch)

        blatt.Range("A" & cnt).Value = cnt - 2
        blatt.Range("B" & cnt).Value = r("Abfertigungsnummer")
        blatt.Range("C" & cnt).Value = r("Abfertigungsdatum")
        blatt.Range("D" & cnt).Value = r("Abfertigungsbezeichnung")
        blatt.Range("E" & cnt).Value = r("Absender")
        blatt.Range("F" & cnt).Value = r("Empfänger")
        blatt.Range("G" & cnt).Value = kdAtrNr
        blatt.Range("H" & cnt).Value = ""

        If cd IsNot Nothing AndAlso cd.hasEntry Then
            Dim zollBetrag As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})

            blatt.Range("H" & cnt).Value = cd.za_InvoiceAmount
            blatt.Range("I" & cnt).Value = GetInvoiceReferences(cd)
            blatt.Range("J" & cnt).Value = cd.za_MRN
            blatt.Range("K" & cnt).Value = zollBetrag
            blatt.Range("L" & cnt).Value = If(cd.Items IsNot Nothing, cd.Items.Count, 0)
            blatt.Range("M" & cnt).Value = GetPartyName(cd, cVERAG_CustomsDeclarations.DECLARANT_ROLES, "")
            blatt.Range("N" & cnt).Value = GetItemsDescription(cd)
            blatt.Range("O" & cnt).Value = cd.za_CountryDispatch & " --> " & cd.za_CountryDestination
        End If

        cnt += 1
    End Sub

    Private Function GetPartyName(cd As cVERAG_CustomsDeclarations,
                                  roles As String(),
                                  Optional fallback As String = "") As String
        If cd Is Nothing OrElse cd.Parties Is Nothing Then Return fallback

        Dim p = cd.Parties.FirstOrDefault(Function(x) roles.Contains(If(x.zaParty_Role, "").Trim().ToUpper()))
        If p Is Nothing Then Return fallback

        Return If(p.zaParty_Name, fallback)
    End Function

    Private Function GetDutyAmount(cd As cVERAG_CustomsDeclarations, dutyTypes As String()) As Decimal
        If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D

        Return cd.Duties.
        Where(Function(d) DutyTypeMatches(If(d.zaDuty_DutyType, ""), dutyTypes)).
        Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
    End Function

    Private Function GetDutyAmountExcluding(cd As cVERAG_CustomsDeclarations, excludedDutyTypes As String()) As Decimal
        If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D

        Return cd.Duties.
        Where(Function(d) Not DutyTypeMatches(If(d.zaDuty_DutyType, ""), excludedDutyTypes)).
        Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
    End Function

    Private Function DutyTypeMatches(dutyType As String, patterns As String()) As Boolean
        Dim value As String = If(dutyType, "").Trim().ToUpper()
        If value = "" OrElse patterns Is Nothing Then Return False

        For Each p In patterns
            Dim pattern As String = If(p, "").Trim().ToUpper()
            If pattern = "" Then Continue For

            If pattern.Contains("%") Then
                Dim regexPattern As String =
                "^" & System.Text.RegularExpressions.Regex.Escape(pattern).Replace("%", ".*") & "$"

                If System.Text.RegularExpressions.Regex.IsMatch(value, regexPattern) Then
                    Return True
                End If
            Else
                If value = pattern Then
                    Return True
                End If
            End If
        Next

        Return False
    End Function

    Private Function GetInvoiceReferences(cd As cVERAG_CustomsDeclarations) As String
        If cd Is Nothing OrElse cd.Documents Is Nothing OrElse cd.Documents.Count = 0 Then Return ""

        Return String.Join(vbNewLine,
                           cd.Documents.
                              Where(Function(d) Not String.IsNullOrWhiteSpace(If(d.zaDoc_Reference, ""))).
                              Select(Function(d) d.zaDoc_Reference).
                              Distinct())
    End Function

    Private Function GetItemsDescription(cd As cVERAG_CustomsDeclarations) As String
        If cd Is Nothing OrElse cd.Items Is Nothing OrElse cd.Items.Count = 0 Then Return ""

        Return String.Join(" | ",
                           cd.Items.
                              Where(Function(i) Not String.IsNullOrWhiteSpace(If(i.zaItem_Description, ""))).
                              Select(Function(i) i.zaItem_Description).
                              Distinct())
    End Function

    Private Function IsItemCBAM(item As cVERAG_CustomsDeclarations_Item) As Boolean
        Try
            If item Is Nothing Then Return False

            Dim cbamList = VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers()
            Dim hs = If(item.zaItem_HSCode, "").Trim()

            If hs = "" OrElse cbamList Is Nothing Then Return False

            For Each p In cbamList
                If hs.StartsWith(If(p, "").Trim()) Then Return True
            Next
        Catch
        End Try

        Return False
    End Function

    Private Function NormalizeKdAuftragsNr(value As Object, kdnrsrch As Integer) As String
        Dim kdAtrNr As String = If(value, "").ToString()

        If kdnrsrch = 770931 AndAlso kdAtrNr.Contains("/") Then
            kdAtrNr = kdAtrNr.Split("/"c)(0)
        End If

        Return kdAtrNr
    End Function

    Private Function LeftSafe(value As String, length As Integer) As String
        value = If(value, "")
        If value.Length < length Then Return value
        Return value.Substring(0, length)
    End Function

    Private Function RightSafe(value As String, length As Integer) As String
        value = If(value, "")
        If value.Length < length Then Return value
        Return value.Substring(value.Length - length, length)
    End Function

    Public Function RunReport_VERAG_ZA_DETAIL_FULL(KDNR As Integer,
                                               AbfVon As Date,
                                               AbfBis As Date,
                                               Optional whereStr As String = "",
                                               Optional Open As Boolean = True) As String
        Try
            Dim dt As DataTable = LoadSpeditionsbuchData(KDNR, AbfVon, AbfBis, whereStr)
            If dt Is Nothing OrElse dt.Rows.Count = 0 Then
                Return ""
            End If

            Dim path As String = CreateTargetPathCsv(AbfVon, AbfBis, "KVI_DETAIL_FULL_")

            Using sw As New System.IO.StreamWriter(path, False, System.Text.Encoding.UTF8)

                sw.WriteLine(String.Join(";", {
                    CsvField("Speditionsbuch_Abfertigungsnummer"),
                    CsvField("Speditionsbuch_Abfertigungsdatum"),
                    CsvField("Speditionsbuch_Absender"),
                    CsvField("Speditionsbuch_Empfaenger"),
                    CsvField("Speditionsbuch_BelegNr"),
                    CsvField("Speditionsbuch_KdAuftragsNr"),
                    CsvField("Speditionsbuch_FilialenNr"),
                    CsvField("Speditionsbuch_AbfertigungsNr"),
                    CsvField("Speditionsbuch_Abfertigungsart"),
                    CsvField("Speditionsbuch_Abfertigungsbezeichnung"),
                    CsvField("Speditionsbuch_Zollsystem_Land"),
                    CsvField("Speditionsbuch_SendungID"),
                CsvField("za_Id"),
                CsvField("za_System"),
                CsvField("za_CustomsSystem"),
                CsvField("za_CustomsSystemCountry"),
                CsvField("za_IsExternalSystem"),
                CsvField("za_IsFinalDeclaration"),
                CsvField("za_UCR"),
                CsvField("za_Mandant_ID"),
                CsvField("za_Bereich_ID"),
                CsvField("za_Firma"),
                CsvField("za_Niederlassung"),
                CsvField("za_MRN"),
                CsvField("za_LRN"),
                CsvField("za_DeclarationNo"),
                CsvField("za_ReferenceCustomer"),
                CsvField("za_REGIME"),
                CsvField("za_RegistrationType"),
                CsvField("za_MainProcedure"),
                CsvField("za_AdditionalProcedure"),
                CsvField("za_DeclarationDate"),
                CsvField("za_ReleaseDate"),
                CsvField("za_AcceptanceDate"),
                CsvField("za_CustomsOffice"),
                CsvField("za_EntryCustomsOffice"),
                CsvField("za_RepresentationCode"),
                CsvField("za_TransportModeInland"),
                CsvField("za_TransportModeBorder"),
                CsvField("za_MeansOfTransport_Vehicle"),
                CsvField("za_MeansOfTransport_Type"),
                CsvField("za_MeansOfTransport_Nationality"),
                CsvField("za_ContainerNr1"),
                CsvField("za_ContainerNr2"),
                CsvField("za_ContainerNr3"),
                CsvField("za_ContainerNr4"),
                CsvField("za_ContainerNr5"),
                CsvField("za_ContainerNr6"),
                CsvField("za_ContainerNr7"),
                CsvField("za_ContainerNr8"),
                CsvField("za_ContainerNr9"),
                CsvField("za_CountryDispatch"),
                CsvField("za_CountryDestination"),
                CsvField("za_CountryDestinationState"),
                CsvField("za_CountryImport"),
                CsvField("za_WarehouseCode"),
                CsvField("za_Incoterms"),
                CsvField("za_IncotermsPlace"),
                CsvField("za_InvoiceAmount"),
                CsvField("za_InvoiceCurrency"),
                CsvField("za_FiscalRepFlag"),
                CsvField("za_TaxDeduction"),
                CsvField("za_ApplicantTaxOffice"),
                CsvField("za_ApplicantVATNo"),
                CsvField("za_DV1Flag"),
                CsvField("za_PrevDocument_Type"),
                CsvField("za_PrevDocument_No"),
                CsvField("za_AvisoId"),
                CsvField("za_SendungsId"),
                CsvField("za_Remarks"),
                CsvField("za_Sachbearbeiter"),
                CsvField("za_SachbearbeiterId"),
                CsvField("za_TotGrossMass"),
                CsvField("Parties_All"),
                CsvField("Importer_Name"),
                CsvField("Importer_EORI"),
                CsvField("Exporter_Name"),
                CsvField("Exporter_EORI"),
                CsvField("Declarant_Name"),
                CsvField("Declarant_EORI"),
                CsvField("Duties_All"),
                CsvField("Duty_Total"),
                CsvField("Duty_EUST"),
                CsvField("Duty_Excluding_EUST"),
                CsvField("Header_Documents_All"),
                CsvField("Item_Documents_All"),
                CsvField("All_Documents_Merged"),
                CsvField("Item_PosNo"),
                CsvField("Item_ArticleCode"),
                CsvField("Item_HSCode"),
                CsvField("Item_HSAddition1"),
                CsvField("Item_HSAddition2"),
                CsvField("Item_HSAddCodes1"),
                CsvField("Item_HSAddCodes2"),
                CsvField("Item_HSAddCodes3"),
                CsvField("Item_HSAddCodes4"),
                CsvField("Item_HSAddCodes5"),
                CsvField("Item_HSAddCodes6"),
                CsvField("Item_HSAddCodes7"),
                CsvField("Item_HSAddCodes8"),
                CsvField("Item_HSAddCodes9"),
                CsvField("Item_HSAddCodes10"),
                CsvField("Item_Description"),
                CsvField("Item_PackageColli"),
                CsvField("Item_PackageType"),
                CsvField("Item_PackageMark"),
                CsvField("Item_OriginCountry"),
                CsvField("Item_PreferentialCountry"),
                CsvField("Item_PreferenceCode"),
                CsvField("Item_QuotaNo"),
                CsvField("Item_MainProcedure"),
                CsvField("Item_AdditionalProc"),
                CsvField("Item_PrevProcedure"),
                CsvField("Item_GrossMass"),
                CsvField("Item_NetMass"),
                CsvField("Item_SuppUnitCode"),
                CsvField("Item_SuppQuantity"),
                CsvField("Item_StatisticalValueEUR"),
                CsvField("Item_CustomsValueEUR"),
                CsvField("Item_InvoiceCurrency"),
                CsvField("Item_InvoiceValueForeign"),
                CsvField("Item_InvoiceValueEUR"),
                CsvField("Item_BeguenstigungCode"),
                CsvField("Item_DV1Flag"),
                CsvField("Item_PosAddition"),
                CsvField("Item_Remarks"),
                CsvField("Item_isCBAM")
            }))

                For Each r As DataRow In dt.Rows
                    Try
                        Dim cd As cVERAG_CustomsDeclarations = LoadCustomsDeclaration(r)

                        Dim kdAtrNr As String = NormalizeKdAuftragsNr(r("KdAuftragsNr"), KDNR)

                        Dim importer = GetParty(cd, cVERAG_CustomsDeclarations.IMPORTER_ROLES)
                        Dim exporter = GetParty(cd, cVERAG_CustomsDeclarations.EXPORTER_ROLES)
                        Dim declarant = GetParty(cd, cVERAG_CustomsDeclarations.DECLARANT_ROLES)

                        Dim allParties As String = JoinParties(cd)
                        Dim allDuties As String = JoinDuties(cd)
                        Dim headerDocs As String = JoinDocuments(cd.Documents)

                        Dim dutyTotal As Decimal = GetDutyAmountTotal(cd)
                        Dim dutyEust As Decimal = GetDutyAmount(cd, {"B%", "B00", "EUST", "VAT"})
                        Dim dutyExcludingEust As Decimal = GetDutyAmountExcluding(cd, {"B%", "B00", "EUST", "VAT"})

                        If cd IsNot Nothing AndAlso cd.hasEntry AndAlso cd.Items IsNot Nothing AndAlso cd.Items.Count > 0 Then
                            For Each item As cVERAG_CustomsDeclarations_Item In cd.Items
                                Dim itemDocs As String = JoinDocuments(item.Documents)
                                Dim allDocsMerged As String = MergeDocumentStrings(headerDocs, itemDocs)

                                sw.WriteLine(String.Join(";", {
                                    CsvField(If(r("Abfertigungsnummer"), "")),
                                    CsvField(FormatDateForCsv(r("Abfertigungsdatum"))),
                                    CsvField(If(r("Absender"), "")),
                                    CsvField(If(r("Empfänger"), "")),
                                    CsvField(If(r("BelegNr"), "")),
                                    CsvField(kdAtrNr),
                                    CsvField(If(r("FilialenNr"), "")),
                                    CsvField(If(r("AbfertigungsNr"), "")),
                                    CsvField(If(r("Abfertigungsart"), "")),
                                    CsvField(If(r("Abfertigungsbezeichnung"), "")),
                                    CsvField(If(r("Zollsystem_Land"), "")),
                                    CsvField(If(r("SendungID"), "")),
                                CsvField(cd.za_Id),
                                CsvField(cd.za_System),
                                CsvField(cd.za_CustomsSystem),
                                CsvField(cd.za_CustomsSystemCountry),
                                CsvField(FormatBoolForCsv(cd.za_IsExternalSystem)),
                                CsvField(FormatBoolForCsv(cd.za_IsFinalDeclaration)),
                                CsvField(cd.za_UCR),
                                CsvField(cd.za_Mandant_ID),
                                CsvField(cd.za_Bereich_ID),
                                CsvField(cd.za_Firma),
                                CsvField(cd.za_Niederlassung),
                                CsvField(cd.za_MRN),
                                CsvField(cd.za_LRN),
                                CsvField(cd.za_DeclarationNo),
                                CsvField(cd.za_ReferenceCustomer),
                                CsvField(cd.za_REGIME),
                                CsvField(cd.za_RegistrationType),
                                CsvField(cd.za_MainProcedure),
                                CsvField(cd.za_AdditionalProcedure),
                                CsvField(FormatDateForCsv(cd.za_DeclarationDate)),
                                CsvField(FormatDateForCsv(cd.za_ReleaseDate)),
                                CsvField(FormatDateForCsv(cd.za_AcceptanceDate)),
                                CsvField(cd.za_CustomsOffice),
                                CsvField(cd.za_EntryCustomsOffice),
                                CsvField(cd.za_RepresentationCode),
                                CsvField(cd.za_TransportModeInland),
                                CsvField(cd.za_TransportModeBorder),
                                CsvField(cd.za_MeansOfTransport_Vehicle),
                                CsvField(cd.za_MeansOfTransport_Type),
                                CsvField(cd.za_MeansOfTransport_Nationality),
                                CsvField(cd.za_ContainerNr1),
                                CsvField(cd.za_ContainerNr2),
                                CsvField(cd.za_ContainerNr3),
                                CsvField(cd.za_ContainerNr4),
                                CsvField(cd.za_ContainerNr5),
                                CsvField(cd.za_ContainerNr6),
                                CsvField(cd.za_ContainerNr7),
                                CsvField(cd.za_ContainerNr8),
                                CsvField(cd.za_ContainerNr9),
                                CsvField(cd.za_CountryDispatch),
                                CsvField(cd.za_CountryDestination),
                                CsvField(cd.za_CountryDestinationState),
                                CsvField(cd.za_CountryImport),
                                CsvField(cd.za_WarehouseCode),
                                CsvField(cd.za_Incoterms),
                                CsvField(cd.za_IncotermsPlace),
                                CsvField(FormatDecimalForCsv(cd.za_InvoiceAmount)),
                                CsvField(cd.za_InvoiceCurrency),
                                CsvField(FormatNullableBoolForCsv(cd.za_FiscalRepFlag)),
                                CsvField(FormatNullableBoolForCsv(cd.za_TaxDeduction)),
                                CsvField(cd.za_ApplicantTaxOffice),
                                CsvField(cd.za_ApplicantVATNo),
                                CsvField(FormatNullableBoolForCsv(cd.za_DV1Flag)),
                                CsvField(cd.za_PrevDocument_Type),
                                CsvField(cd.za_PrevDocument_No),
                                CsvField(If(cd.za_AvisoId.HasValue, cd.za_AvisoId.Value.ToString(), "")),
                                CsvField(If(cd.za_SendungsId.HasValue, cd.za_SendungsId.Value.ToString(), "")),
                                CsvField(cd.za_Remarks),
                                CsvField(cd.za_Sachbearbeiter),
                                CsvField(cd.za_SachbearbeiterId),
                                CsvField(FormatDecimalForCsv(cd.za_TotGrossMass)),
                                CsvField(allParties),
                                CsvField(If(importer Is Nothing, "", importer.zaParty_Name)),
                                CsvField(If(importer Is Nothing, "", importer.zaParty_EORI)),
                                CsvField(If(exporter Is Nothing, "", exporter.zaParty_Name)),
                                CsvField(If(exporter Is Nothing, "", exporter.zaParty_EORI)),
                                CsvField(If(declarant Is Nothing, "", declarant.zaParty_Name)),
                                CsvField(If(declarant Is Nothing, "", declarant.zaParty_EORI)),
                                CsvField(allDuties),
                                CsvField(FormatDecimalForCsv(dutyTotal)),
                                CsvField(FormatDecimalForCsv(dutyEust)),
                                CsvField(FormatDecimalForCsv(dutyExcludingEust)),
                                CsvField(headerDocs),
                                CsvField(itemDocs),
                                CsvField(allDocsMerged),
                                CsvField(item.zaItem_PosNo),
                                CsvField(item.zaItem_ArticleCode),
                                CsvField(item.zaItem_HSCode),
                                CsvField(item.zaItem_HSAddition1),
                                CsvField(item.zaItem_HSAddition2),
                                CsvField(item.zaItem_HSAddCodes1),
                                CsvField(item.zaItem_HSAddCodes2),
                                CsvField(item.zaItem_HSAddCodes3),
                                CsvField(item.zaItem_HSAddCodes4),
                                CsvField(item.zaItem_HSAddCodes5),
                                CsvField(item.zaItem_HSAddCodes6),
                                CsvField(item.zaItem_HSAddCodes7),
                                CsvField(item.zaItem_HSAddCodes8),
                                CsvField(item.zaItem_HSAddCodes9),
                                CsvField(item.zaItem_HSAddCodes10),
                                CsvField(item.zaItem_Description),
                                CsvField(item.zaItem_PackageColli),
                                CsvField(item.zaItem_PackageType),
                                CsvField(item.zaItem_PackageMark),
                                CsvField(item.zaItem_OriginCountry),
                                CsvField(item.zaItem_PreferentialCountry),
                                CsvField(item.zaItem_PreferenceCode),
                                CsvField(item.zaItem_QuotaNo),
                                CsvField(item.zaItem_MainProcedure),
                                CsvField(item.zaItem_AdditionalProc),
                                CsvField(item.zaItem_PrevProcedure),
                                CsvField(FormatDecimalForCsv(item.zaItem_GrossMass)),
                                CsvField(FormatDecimalForCsv(item.zaItem_NetMass)),
                                CsvField(item.zaItem_SuppUnitCode),
                                CsvField(FormatDecimalForCsv(item.zaItem_SuppQuantity)),
                                CsvField(FormatDecimalForCsv(item.zaItem_StatisticalValueEUR)),
                                CsvField(FormatDecimalForCsv(item.zaItem_CustomsValueEUR)),
                                CsvField(item.zaItem_InvoiceCurrency),
                                CsvField(FormatDecimalForCsv(item.zaItem_InvoiceValueForeign)),
                                CsvField(FormatDecimalForCsv(item.zaItem_InvoiceValueEUR)),
                                CsvField(item.zaItem_BeguenstigungCode),
                                CsvField(FormatNullableBoolForCsv(item.zaItem_DV1Flag)),
                                CsvField(item.zaItem_PosAddition),
                                CsvField(item.zaItem_Remarks),
                                CsvField(If(IsItemCBAM(item), "Y", "N"))
                            }))
                            Next
                        Else
                            sw.WriteLine(String.Join(";", {
                                CsvField(If(r("Abfertigungsnummer"), "")),
                                CsvField(FormatDateForCsv(r("Abfertigungsdatum"))),
                                CsvField(If(r("Absender"), "")),
                                CsvField(If(r("Empfänger"), "")),
                                CsvField(If(r("BelegNr"), "")),
                                CsvField(kdAtrNr),
                                CsvField(If(r("FilialenNr"), "")),
                                CsvField(If(r("AbfertigungsNr"), "")),
                                CsvField(If(r("Abfertigungsart"), "")),
                                CsvField(If(r("Abfertigungsbezeichnung"), "")),
                                CsvField(If(r("Zollsystem_Land"), "")),
                                CsvField(If(r("SendungID"), "")),
                            CsvField(If(cd Is Nothing, "", cd.za_Id.ToString())),
                            CsvField(If(cd Is Nothing, "", cd.za_System)),
                            CsvField(If(cd Is Nothing, "", cd.za_CustomsSystem)),
                            CsvField(If(cd Is Nothing, "", cd.za_CustomsSystemCountry)),
                            CsvField(If(cd Is Nothing, "", FormatBoolForCsv(cd.za_IsExternalSystem))),
                            CsvField(If(cd Is Nothing, "", FormatBoolForCsv(cd.za_IsFinalDeclaration))),
                            CsvField(If(cd Is Nothing, "", cd.za_UCR)),
                            CsvField(If(cd Is Nothing, "", cd.za_Mandant_ID)),
                            CsvField(If(cd Is Nothing, "", cd.za_Bereich_ID)),
                            CsvField(If(cd Is Nothing, "", cd.za_Firma)),
                            CsvField(If(cd Is Nothing, "", cd.za_Niederlassung)),
                            CsvField(If(cd Is Nothing, "", cd.za_MRN)),
                            CsvField(If(cd Is Nothing, "", cd.za_LRN)),
                            CsvField(If(cd Is Nothing, "", cd.za_DeclarationNo)),
                            CsvField(If(cd Is Nothing, "", cd.za_ReferenceCustomer)),
                            CsvField(If(cd Is Nothing, "", cd.za_REGIME)),
                            CsvField(If(cd Is Nothing, "", cd.za_RegistrationType)),
                            CsvField(If(cd Is Nothing, "", cd.za_MainProcedure)),
                            CsvField(If(cd Is Nothing, "", cd.za_AdditionalProcedure)),
                            CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_DeclarationDate))),
                            CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_ReleaseDate))),
                            CsvField(If(cd Is Nothing, "", FormatDateForCsv(cd.za_AcceptanceDate))),
                            CsvField(If(cd Is Nothing, "", cd.za_CustomsOffice)),
                            CsvField(If(cd Is Nothing, "", cd.za_EntryCustomsOffice)),
                            CsvField(If(cd Is Nothing, "", cd.za_RepresentationCode)),
                            CsvField(If(cd Is Nothing, "", cd.za_TransportModeInland)),
                            CsvField(If(cd Is Nothing, "", cd.za_TransportModeBorder)),
                            CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Vehicle)),
                            CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Type)),
                            CsvField(If(cd Is Nothing, "", cd.za_MeansOfTransport_Nationality)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr1)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr2)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr3)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr4)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr5)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr6)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr7)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr8)),
                            CsvField(If(cd Is Nothing, "", cd.za_ContainerNr9)),
                            CsvField(If(cd Is Nothing, "", cd.za_CountryDispatch)),
                            CsvField(If(cd Is Nothing, "", cd.za_CountryDestination)),
                            CsvField(If(cd Is Nothing, "", cd.za_CountryDestinationState)),
                            CsvField(If(cd Is Nothing, "", cd.za_CountryImport)),
                            CsvField(If(cd Is Nothing, "", cd.za_WarehouseCode)),
                            CsvField(If(cd Is Nothing, "", cd.za_Incoterms)),
                            CsvField(If(cd Is Nothing, "", cd.za_IncotermsPlace)),
                            CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(cd.za_InvoiceAmount))),
                            CsvField(If(cd Is Nothing, "", cd.za_InvoiceCurrency)),
                            CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_FiscalRepFlag))),
                            CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_TaxDeduction))),
                            CsvField(If(cd Is Nothing, "", cd.za_ApplicantTaxOffice)),
                            CsvField(If(cd Is Nothing, "", cd.za_ApplicantVATNo)),
                            CsvField(If(cd Is Nothing, "", FormatNullableBoolForCsv(cd.za_DV1Flag))),
                            CsvField(If(cd Is Nothing, "", cd.za_PrevDocument_Type)),
                            CsvField(If(cd Is Nothing, "", cd.za_PrevDocument_No)),
                            CsvField(If(cd Is Nothing OrElse Not cd.za_AvisoId.HasValue, "", cd.za_AvisoId.Value.ToString())),
                            CsvField(If(cd Is Nothing OrElse Not cd.za_SendungsId.HasValue, "", cd.za_SendungsId.Value.ToString())),
                            CsvField(If(cd Is Nothing, "", cd.za_Remarks)),
                            CsvField(If(cd Is Nothing, "", cd.za_Sachbearbeiter)),
                            CsvField(If(cd Is Nothing, "", cd.za_SachbearbeiterId)),
                            CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(cd.za_TotGrossMass))),
                            CsvField(If(cd Is Nothing, "", allParties)),
                            CsvField(If(importer Is Nothing, "", importer.zaParty_Name)),
                            CsvField(If(importer Is Nothing, "", importer.zaParty_EORI)),
                            CsvField(If(exporter Is Nothing, "", exporter.zaParty_Name)),
                            CsvField(If(exporter Is Nothing, "", exporter.zaParty_EORI)),
                            CsvField(If(declarant Is Nothing, "", declarant.zaParty_Name)),
                            CsvField(If(declarant Is Nothing, "", declarant.zaParty_EORI)),
                            CsvField(If(cd Is Nothing, "", allDuties)),
                            CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyTotal))),
                            CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyEust))),
                            CsvField(If(cd Is Nothing, "", FormatDecimalForCsv(dutyExcludingEust))),
                            CsvField(If(cd Is Nothing, "", headerDocs)),
                            CsvField(""),
                            CsvField(If(cd Is Nothing, "", headerDocs)),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField(""),
                            CsvField("")
                        }))
                        End If

                    Catch ex As Exception
                        MsgBox(ex.Message & vbCrLf & ex.StackTrace)
                    End Try
                Next
            End Using

            If Open Then
                Process.Start(path)
            End If

            Return path

        Catch ex As Exception
            MsgBox(ex.Message & vbCrLf & ex.StackTrace)
            Return ""
        End Try
    End Function

    Private Function CreateTargetPathCsv(AbfVon As Date, AbfBis As Date, prefix As String) As String
        Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SR\"
        If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
            My.Computer.FileSystem.CreateDirectory(sPath)
        End If

        Dim path As String = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & ".csv"

        While System.IO.File.Exists(path)
            path = sPath & prefix & AbfVon.ToString("yyyy-MM-dd") & "-" & AbfBis.ToString("yyyy-MM-dd") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".csv"
        End While

        Return path
    End Function

    Private Function CsvField(value As Object) As String
        Dim s As String = If(value, "").ToString()
        s = s.Replace("""", """""")
        Return """" & s & """"
    End Function

    Private Function FormatDateForCsv(value As Object) As String
        If value Is Nothing OrElse value Is DBNull.Value Then Return ""
        If IsDate(value) Then Return CDate(value).ToString("yyyy-MM-dd")
        Return value.ToString()
    End Function

    Private Function FormatDecimalForCsv(value As Object) As String
        If value Is Nothing OrElse value Is DBNull.Value Then Return ""
        If IsNumeric(value) Then Return Convert.ToDecimal(value).ToString(System.Globalization.CultureInfo.InvariantCulture)
        Return value.ToString()
    End Function

    Private Function FormatBoolForCsv(value As Boolean) As String
        Return If(value, "1", "0")
    End Function

    Private Function FormatNullableBoolForCsv(value As Boolean?) As String
        If Not value.HasValue Then Return ""
        Return If(value.Value, "1", "0")
    End Function

    Private Function GetDutyAmountTotal(cd As cVERAG_CustomsDeclarations) As Decimal
        If cd Is Nothing OrElse cd.Duties Is Nothing Then Return 0D
        Return cd.Duties.Sum(Function(d) If(d.zaDuty_AmountEUR, 0D))
    End Function

    Private Function GetParty(cd As cVERAG_CustomsDeclarations, roles As String()) As cVERAG_CustomsDeclarations_Parties
        If cd Is Nothing OrElse cd.Parties Is Nothing Then Return Nothing

        Return cd.Parties.FirstOrDefault(
            Function(x) roles.Contains(If(x.zaParty_Role, "").Trim().ToUpper())
        )
    End Function

    Private Function JoinParties(cd As cVERAG_CustomsDeclarations) As String
        If cd Is Nothing OrElse cd.Parties Is Nothing OrElse cd.Parties.Count = 0 Then Return ""

        Return String.Join(" || ",
            cd.Parties.Select(Function(p)
                                  Return String.Join(" | ", {
                                      "Role=" & If(p.zaParty_Role, ""),
                                      "Name=" & If(p.zaParty_Name, ""),
                                      "EORI=" & If(p.zaParty_EORI, ""),
                                      "EORI_NL=" & If(p.zaParty_EORI_NL, ""),
                                      "Street=" & If(p.zaParty_Street, ""),
                                      "PostalCode=" & If(p.zaParty_PostalCode, ""),
                                      "City=" & If(p.zaParty_City, ""),
                                      "Country=" & If(p.zaParty_Country, ""),
                                      "TIN=" & If(p.zaParty_TIN, ""),
                                      "VAT=" & If(p.zaParty_VATNumber, ""),
                                      "TaxOffice=" & If(p.zaParty_TaxOffice, ""),
                                      "Contact=" & If(p.zaParty_ContactName, ""),
                                      "Phone=" & If(p.zaParty_Phone, ""),
                                      "Email=" & If(p.zaParty_Email, "")
                                  })
                              End Function))
    End Function

    Private Function JoinDuties(cd As cVERAG_CustomsDeclarations) As String
        If cd Is Nothing OrElse cd.Duties Is Nothing OrElse cd.Duties.Count = 0 Then Return ""

        Return String.Join(" || ",
            cd.Duties.Select(Function(d)
                                 Return String.Join(" | ", {
                                     "DutyType=" & If(d.zaDuty_DutyType, ""),
                                     "AmountEUR=" & FormatDecimalForCsv(d.zaDuty_AmountEUR),
                                     "AmountForeign=" & FormatDecimalForCsv(d.zaDuty_AmountForeign),
                                     "Currency=" & If(d.zaDuty_Currency, ""),
                                     "BIN=" & If(d.zaDuty_BIN, ""),
                                     "AccountType=" & If(d.zaDuty_AccountType, ""),
                                     "AccountHeadCustoms=" & If(d.zaDuty_AccountHeadCustoms, ""),
                                     "ApplicationType=" & If(d.zaDuty_ApplicationType, ""),
                                     "AccountNo=" & If(d.zaDuty_AccountNo, ""),
                                     "AccountEORI=" & If(d.zaDuty_AccountEORI, ""),
                                     "AccountHolderName=" & If(d.zaDuty_AccountHolderName, ""),
                                     "LimitDate=" & FormatDateForCsv(d.zaDuty_LimitDate)
                                 })
                             End Function))
    End Function

    Private Function JoinDocuments(docs As List(Of cVERAG_CustomsDeclarations_Document)) As String
        If docs Is Nothing OrElse docs.Count = 0 Then Return ""

        Return String.Join(" || ",
            docs.Select(Function(d)
                            Return String.Join(" | ", {
                                "Date=" & If(d.zaDoc_Date, ""),
                                "Section=" & If(d.zaDoc_Section, ""),
                                "Code=" & If(d.zaDoc_Code, ""),
                                "Reference=" & If(d.zaDoc_Reference, ""),
                                "Presentation=" & If(d.zaDoc_Presentation, ""),
                                "DepAmount=" & If(d.zaDoc_DepreciationAmount, ""),
                                "DepUnit=" & If(d.zaDoc_DepreciationUnitmeasurement, ""),
                                "DepQual=" & If(d.zaDoc_DepreciationUnitmeasurementQualifier, ""),
                                "Description=" & If(d.zaDoc_Description, "")
                            })
                        End Function))
    End Function

    Private Function MergeDocumentStrings(headerDocs As String, itemDocs As String) As String
        If headerDocs = "" Then Return itemDocs
        If itemDocs = "" Then Return headerDocs
        Return headerDocs & " || " & itemDocs
    End Function


End Class