
Imports VERAG_PROG_ALLGEMEIN

Public Class usrCntlFaktAbrechnung


    Dim RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang = Nothing
    Dim SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch = Nothing
    Dim FUNC As New cProgramFunctions

    Dim FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen = Nothing
    Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL


    Public SAVED = True ' Eigenschaft, ob das Formular gespeichert ist oder verändert wurde
    Dim loaded As Boolean = False
    Dim allowGetValues As Boolean = True
    Public Event EVENT_SAVED()
    Public Event EVENT_DELETED()
    Public Event SOMETHING_CHANGED(RK_ID)

    Dim vorherige_RK_ID = 0
    Dim nachstehende_RK_ID = 0
    Dim veragKunde As Integer = -1

    ' Public VALUE_CHANGED = True ' Eigenschaft, ob das Formular gespeichert ist oder verändert wurde

    Sub New()

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

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

    End Sub

    Sub New(RK_ID)

        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()
        RECHNUNG = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID)

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

    End Sub

    Public Sub newRECHNUNG(Optional Firma = Nothing)

        RECHNUNG = Nothing
        dgvOfferteDetailsUebersicht.Columns.Clear()
        initRECHNUNG()

        Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            'Case "IMEX"
                'Firma = 20 'VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                'cboFiliale.changeItem(5501)
            Case "UNISPED"
                Firma = -1
                cboFiliale.changeItem(5601)
            Case "AMBAR"
                Firma = 24
                cboFiliale.changeItem(5701)

            Case "FRONT-OFFICE"
                Firma = 17
                cboFiliale.changeItem(5801)

        End Select


        If Firma IsNot Nothing Then
            cboFirma.changeItem(Firma)
        End If
        If cboFiliale._value <> "" Then
            txtAbfertigungsnummer.Focus()
        Else
            cboFiliale.Focus()
        End If
        '   RaiseEvent SOMETHING_CHANGED(-1)
    End Sub



    Sub initLblAnzahl()
        vorherige_RK_ID = 0
        nachstehende_RK_ID = 0

        Dim dt As DataTable = SQL.loadDgvBySql("SELECT UnterNr,RK_ID FROM Rechnungsausgang WHERE FilialenNr='" & RECHNUNG.FilialenNr & "' AND AbfertigungsNr='" & RECHNUNG.AbfertigungsNr & "' order by UnterNr", "FMZOLL")
        If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
            Dim anzahlRg = dt.Rows.Count
            Dim cnt = 1
            Dim exitSub = False
            Dim found = False
            For Each r In dt.Rows
                If exitSub Then
                    nachstehende_RK_ID = r("RK_ID")
                    btnPrev.Enabled = (vorherige_RK_ID > 0)
                    btnNext.Enabled = (nachstehende_RK_ID > 0)

                    Exit Sub
                End If
                If r("UnterNr") = RECHNUNG.UnterNr Then

                    lblSendungen.Text = cnt & "/" & anzahlRg
                    found = True
                    exitSub = True
                Else
                    If Not exitSub Then vorherige_RK_ID = r("RK_ID")

                End If
                cnt += 1
            Next
            'If exitSub Then Exit Sub
            If Not found Then lblSendungen.Text = "-/" & anzahlRg : Exit Sub

        Else
            lblSendungen.Text = "-"
        End If
        ' If Not IsNumeric(anzahlRg) Then anzahlRg = 0
        btnPrev.Enabled = (vorherige_RK_ID > 0)
        btnNext.Enabled = (nachstehende_RK_ID > 0)
    End Sub

    Public Sub initRECHNUNG(Optional RK_ID_TMP = -1)

        Try
            cbxAdmin.Checked = False
            loaded = False
            allowGetValues = False
            lblUIDOK.Visible = False
            lblUIDErr.Visible = False
            lblKdInaktiv.Visible = False
            Label40.Visible = False
            sbLeistung._value = ""
            cbxOriginalPrint.Checked = False

            If RK_ID_TMP > 0 Then
                RECHNUNG = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID_TMP)
            End If
            If RECHNUNG Is Nothing Then
                txtAbfertigungsnummer.Text = ""
                cboFiliale.changeItem("")
                txtUnterNr.Text = ""
                lblRechnungsNummer.Text = "-"
                RECHNUNG = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang
                RECHNUNG.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
            Else
                txtAbfertigungsnummer.Text = RECHNUNG.AbfertigungsNr
                Dim FirmaTMP = RECHNUNG.Firma_ID
                cboFiliale.changeItem(RECHNUNG.FilialenNr)
                RECHNUNG.Firma_ID = FirmaTMP
                cboFirma.changeItem(RECHNUNG.Firma_ID) 'sonst durch filiale Überschrieben
                txtUnterNr.Text = RECHNUNG.UnterNr

                cboSpedBuchUnterNr.changeItem(RECHNUNG.SpeditionsbuchUnterNr)
                lblRechnungsNummer.Text = RECHNUNG.RechnungsNr
            End If

            Dim OfferteNrTmp = RECHNUNG.OffertenNr
            '  MsgBox (OfferteNrTmp)
            getDataFromSpedbuch_SHOW()

            PictureBox1.BackgroundImage = My.Resources.ok_gray
            PictureBox2.BackgroundImage = My.Resources.ok_gray
            PictureBox1.Cursor = Cursors.Default : Label50.Cursor = Cursors.Default
            PictureBox2.Cursor = Cursors.Default : Label51.Cursor = Cursors.Default
            If SPEDBUCH IsNot Nothing Then
                If SPEDBUCH.DokumentId_Steuerbeleg IsNot Nothing Then
                    PictureBox1.BackgroundImage = My.Resources.ok
                    PictureBox1.Cursor = Cursors.Hand : Label50.Cursor = Cursors.Hand
                End If
                If SPEDBUCH.DokumentId_VBD IsNot Nothing Then
                    PictureBox2.BackgroundImage = My.Resources.ok
                    PictureBox2.Cursor = Cursors.Hand : Label51.Cursor = Cursors.Hand
                End If
            End If

            If RECHNUNG.DruckDatumZeit Is Nothing Then
                cbxOriginalPrint.Visible = False
            Else
                cbxOriginalPrint.Visible = True
            End If

            initLblAnzahl()
            '  Exit Sub 'Falls keine Rechnung geladen
            'If RECHNUNG.RK_ID <= 0 Then Exit Sub 'Falls keine Rechnung geladen
            lblRechnungsDatum.Text = ""
            If RECHNUNG.RechnungsDatum IsNot Nothing AndAlso IsDate(RECHNUNG.RechnungsDatum) Then
                lblRechnungsDatum.Text = If(RECHNUNG.RechnungsDatum > CDate("01.01.1990"), CDate(RECHNUNG.RechnungsDatum).ToString("dd.MM.yyyy HH:mm"), "-")
            End If
            lblDruckDatum.Text = If(RECHNUNG.DruckDatumZeit, "")
            lblDruckaufheben.Visible = (RECHNUNG.DruckDatumZeit IsNot Nothing)

            cboRgGS.SelectedIndex = 0
            Select Case RECHNUNG.[BelegartenKz]
                Case "AR" : cboRgGS.SelectedIndex = 0
                Case "AG" : cboRgGS.SelectedIndex = 1
            End Select
            cboFirma.changeItem(RECHNUNG.Firma_ID)

            cboRechnungAn.changeItem(RECHNUNG.Rechnung_an)

            If RECHNUNG.RechnungsKundenNr > 0 Then
                kdFirmaRechnungAn.KdNr = RECHNUNG.RechnungsKundenNr
                kdFirmaRechnungAn.Text = If(RECHNUNG.RechnungsName_1, "")
                txtRechnungAnName2.Text = If(RECHNUNG.RechnungsName_2, "")
            Else
                kdFirmaRechnungAn.KdNr = -1
                kdFirmaRechnungAn.Text = If(RECHNUNG.RechnungsName_1, "")
                txtRechnungAnName2.Text = If(RECHNUNG.RechnungsName_2, "")
            End If
            txtRechnungAnStrasse.Text = If(RECHNUNG.RechnungsStraße, "")
            txtRechnungAnOrt.Text = If(RECHNUNG.RechnungsOrt, "")
            txtRechnungAnZusatz.Text = If(RECHNUNG.RechnungsName_AdressZusatz, "")

            If RECHNUNG.AbsenderKundenNr IsNot Nothing AndAlso RECHNUNG.AbsenderKundenNr > 0 Then
                kdFirmaAbsender.KdNr = RECHNUNG.AbsenderKundenNr
                kdFirmaAbsender.Text = If(RECHNUNG.AbsenderName_1, "")
                txtAbsenderName2.Text = If(RECHNUNG.AbsenderName_2, "")
            Else
                kdFirmaAbsender.KdNr = -1
                kdFirmaAbsender.Text = If(RECHNUNG.AbsenderName_1, "")
                txtAbsenderName2.Text = If(RECHNUNG.AbsenderName_2, "")
            End If
            txtAbsenderStrasse.Text = If(RECHNUNG.AbsenderStraße, "")
            txtAbsenderOrt.Text = If(RECHNUNG.AbsenderOrt, "")
            'txtAbsenderPLZ.Text = If(RECHNUNG., "")
            '   sbAbsenderLand.Text = If(RECHNUNG.AbsenderLandKz, "")

            If RECHNUNG.EmpfängerKundenNr IsNot Nothing AndAlso RECHNUNG.EmpfängerKundenNr > 0 Then
                kdFirmaEmpfaenger.KdNr = RECHNUNG.EmpfängerKundenNr
                ' kdFirmaEmpfaenger.KdNr_value = RECHNUNG.EmpfängerKundenNr
                kdFirmaEmpfaenger.Text = If(RECHNUNG.EmpfängerName_1, "")
                txtEmpfeangerName2.Text = If(RECHNUNG.EmpfängerName_2, "")
            Else
                kdFirmaEmpfaenger.KdNr = -1
                kdFirmaEmpfaenger.Text = If(RECHNUNG.EmpfängerName_1, "")
                txtEmpfeangerName2.Text = If(RECHNUNG.EmpfängerName_2, "")
            End If
            txtEmpfaengerStrasse.Text = If(RECHNUNG.EmpfängerStraße, "")
            txtEmpfaengerOrt.Text = If(RECHNUNG.EmpfängerOrt, "")
            'txtEmpfaengerPLZ.Text = If(RECHNUNG., "")
            ' sbEmpfaengerLand.Text = If(RECHNUNG.EmpfängerLandKz, "")



            If RECHNUNG.VermittlerKundenNr IsNot Nothing AndAlso RECHNUNG.VermittlerKundenNr > 0 Then
                kdFirmaAuftraggeber.KdNr = RECHNUNG.VermittlerKundenNr
                kdFirmaAuftraggeber.Text = If(RECHNUNG.VermittlerName_1, "")
                txtAuftraggeberName2.Text = If(RECHNUNG.VermittlerName_2, "")
            Else
                kdFirmaAuftraggeber.KdNr = -1
                kdFirmaAuftraggeber.Text = If(RECHNUNG.VermittlerName_1, "")
                txtAuftraggeberName2.Text = If(RECHNUNG.VermittlerName_2, "")
            End If


            txtAuftragggeberStrasse.Text = If(RECHNUNG.VermittlerStraße, "")
            txtAuftragggeberOrt.Text = If(RECHNUNG.VermittlerOrt, "")
            'txtAuftragggeberPLZ.Text = If(RECHNUNG., "")
            '    sbAuftragggeberLand.Text = If(RECHNUNG.VermittlerLandKz, "")

            If RECHNUNG.AvisiererKundenNr IsNot Nothing AndAlso RECHNUNG.AvisiererKundenNr > 0 Then
                kdFirmaAvisierer.KdNr = RECHNUNG.AvisiererKundenNr
                kdFirmaAvisierer.Text = If(RECHNUNG.Avisierer, "")
            Else
                kdFirmaAvisierer.KdNr = -1
                kdFirmaAvisierer.Text = If(RECHNUNG.Avisierer, "")
            End If
            txtAvisoId.Text = If(RECHNUNG.AvisoID, "")


            cboSammelrechnung.changeItem(RECHNUNG.Sammelrechnung)
            txtZollbelegNr.Text = If(RECHNUNG.BelegNr, "")
            cboRechnungSprache.changeItem(If(RECHNUNG.RechnungSprache, "DE"))

            txtWarenwertUmrechnung.Text = ""
            txtWarenwert._value = If(RECHNUNG.Wert, "")
            cboWaehrung.changeItem(If(RECHNUNG.WährungsNr, 900))
            cboWaehrungUmrechnung.changeItem(If(RECHNUNG.Währungscode, "EUR"))
            txtSendungsdaten.Text = If(RECHNUNG.Packstücke_und_Warenbezeichnung, "")
            txtGrenze.Text = If(RECHNUNG.Grenze, "")

            txtVermerk.Text = If(RECHNUNG.Vermerk, "")
            'txtRohmasse.Text = If(RECHNUNG.ro, "")
            txtBefoerderungsmittel.Text = If(RECHNUNG.LKW_Kennzeichen, "")

            txtErfassungsnummer.Text = If(RECHNUNG.ErfassungsNr, "")
            cboRechnungNotiz.Text = If(RECHNUNG.Notiz, "")
            'txtRohmasse.Text = If(RECHNUNG., "")

            cboAnlage1.Text = If(RECHNUNG.Anlage_1, "")
            cboAnlage2.Text = If(RECHNUNG.Anlage_2, "")
            cboAnlage3.Text = If(RECHNUNG.Anlage_3, "")
            cboAnlage4.Text = If(RECHNUNG.Anlage_4, "")
            cboAnlage5.Text = If(RECHNUNG.Anlage_5, "")
            cboAnlage6.Text = If(RECHNUNG.Anlage_6, "")

            rtbHandling.Text = If(RECHNUNG.Handling, "")

            If RECHNUNG.Vorkasse Then
                lblVorauskasse.Text = "JA"
            Else
                lblVorauskasse.Text = "NEIN"
            End If

            txtText.Text = If(RECHNUNG.Text, "")
            txtTextZZ.Text = If(RECHNUNG.TextZZ, "")

            If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                cboSteuerschlüssel.changeItem(RECHNUNG.ForceSteuerschlüssel)
            Else
                cboSteuerschlüssel.changeItem(RECHNUNG.Steuerschlüssel)
            End If

            txtSteuerpflichtigerBetrag._value = If(RECHNUNG.SteuerpflichtigerGesamtbetrag <> 0, RECHNUNG.SteuerpflichtigerGesamtbetrag, "")
            txtSteuerFreierBetrag._value = If(RECHNUNG.SteuerfreierGesamtbetrag <> 0, RECHNUNG.SteuerfreierGesamtbetrag, "")
            'txtSteuerBetrag._value = RECHNUNG.ste
            txtGesamtsumme._value = RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag
            lblSB.Text = If(RECHNUNG.Sachbearbeiter, "")

            cboRechnungAn.changeItem(RECHNUNG.Rechnung_an)

            txtKdAuftragsNr.Text = If(RECHNUNG.KdAuftragsNr, "")

            Button2.Enabled = (RECHNUNG.Status = 0)
            btnOK.Enabled = (RECHNUNG.Status = 0)

            'RECHNUNG.OffertenNr = OfferteNrTmp
            ' RECHNUNG.OffertenNr = OfferteNrTmp
            initSperre(RECHNUNG.OffertenNr)
            RECHNUNG.OffertenNr = OfferteNrTmp
            RECHNUNG.LOAD_POSITIONEN() 'Sonst werden beim Laden die POS überschrieben
            loadFormRGPosInOfferte(False)
            initDGVRechnungenPositionen()
            '  dgvOffertenSperrlisteasdasd
            initDGVAnhaenge()

            Dim VK = VERAG_PROG_ALLGEMEIN.cVorauskasse.LOADByFilialeAbfNr(RECHNUNG.FilialenNr, RECHNUNG.AbfertigungsNr)
            btnVorauskasseAnzeigen.Enabled = (VK IsNot Nothing)
            lblVK_Zahlungseingang.Text = ""
            lblVK_ZahlungseingangBemerkung.Text = ""
            picVK.Visible = False

            If VK IsNot Nothing Then
                If VK.vk_GeldEingetroffen Then
                    picVK.Visible = True
                    lblVK_Zahlungseingang.Text = VK.vk_Betrag
                    lblVK_ZahlungseingangBemerkung.Text = VK.vk_BH_Bemerkung
                End If
            End If

            Dim pnlEnabled = (RECHNUNG.SpeditionsbuchUnterNr Is Nothing OrElse RECHNUNG.SpeditionsbuchUnterNr < 0)
            setControlsEnabled(pnlEmpfaenger, pnlEnabled)
            setControlsEnabled(pnlAbsender, pnlEnabled)
            setControlsEnabled(pnlAuftraggeber, pnlEnabled)
            setControlsEnabled(pnlAvisierer, pnlEnabled)

            'If RECHNUNG.Sachbearbeiter = "AUTO" AndAlso RECHNUNG.VermittlerKundenNr = "3013401" Then 'sperren, damit autom. generierte Email neu mit Offerte initialisiwert werden kann!
            '    dgvOffertenSperrliste.Enabled = False
            'Else
            '    dgvOffertenSperrliste.Enabled = True
            'End If


            SAVED = True
            loaded = True
            allowGetValues = True
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Sub setControlsEnabled(pnl As Panel, pnlEnabled As Boolean)
        For Each c In pnl.Controls
            If c.GetType Is GetType(VERAG_PROG_ALLGEMEIN.MyTextBox) Or c.GetType Is GetType(VERAG_PROG_ALLGEMEIN.KdSearchBox) Then
                c.Enabled = IIf(cboFiliale._value = "5701" AndAlso VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AMBAR_ALLE_RECHNUNGSEMPFÄNGER", "SDL"), True, pnlEnabled)
            End If
        Next
    End Sub

    Sub loadFormRGPosInOfferte(Optional checkLoaded = True)
        If RECHNUNG Is Nothing Then Exit Sub
        If checkLoaded Then
            If Not loaded Then Exit Sub
        End If
        Dim tmpLoaded = loaded
        loaded = False
        'Zuerst eichtiges Offert auswählen


        For Each r As DataGridViewRow In dgvOffertenSperrliste.Rows
            If r.Cells("OffertenNr").Value = RECHNUNG.OffertenNr Then
                dgvOffertenSperrliste.ClearSelection() : r.Cells("OffertenBez").Selected = True : Exit For
            End If
        Next

        If dgvOffertenSperrliste.SelectedRows.Count > 0 Then
            If Not IsDBNull(dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt").Value) AndAlso dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt").Value AndAlso IsDate(dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt_Datum").Value) AndAlso dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt_Datum").Value >= RECHNUNG.Abfertigungsdatum Then
                dgvOfferteDetailsUebersicht.Rows.Clear()
                RECHNUNG.POSITIONEN.Clear()
                Exit Sub
            End If

        End If
            'initDGVOfferteDetailsUebersicht(RECHNUNG.kundenn,RECHNUNG.OffertenNr)
            'Dann die Werte eintragen:
            ' MsgBox("G: " & RECHNUNG.POSITIONEN.Count)
            Dim vorzeichen = 1 'If(RECHNUNG.Vorzeichen = "-", -1, 1)
        For Each POS In RECHNUNG.POSITIONEN
            Dim found = False
            For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
                If r.Cells("LeistungsNr").Value = POS.LeistungsNr And r.Cells("LeistungsBez").Value = POS.LeistungsBez Then
                    r.Cells("Preis").Value = If(POS.Preis, 0) * vorzeichen
                    r.Cells("Anzahl").Value = If(POS.Anzahl, 0)

                    r.Cells("BGebLeistungsNr").Value = If(POS.BGebLeistungsNr, DBNull.Value)
                    r.Cells("BGebProzent").Value = If(POS.BGebProzent, DBNull.Value)
                    r.Cells("BGebMinBetrag").Value = If(POS.BGebMinBetrag, DBNull.Value)
                    If RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                        POS.Steuerpflichtig = (RECHNUNG.ForceSteuerschlüssel > 0)
                    End If

                    r.Cells("Steuerpflichtig").Value = POS.Steuerpflichtig
                    r.Cells("IndexZkteing").Value = If(POS.IndexZkteing <= 0, DBNull.Value, POS.IndexZkteing)
                    r.Cells("AufschubkontoNr").Value = If(POS.AufschubkontoNr, DBNull.Value)
                    r.Cells("Aufschubfälligkeit").Value = If(POS.Aufschubfälligkeit, DBNull.Value)
                    r.Cells("DateiNameAufschub").Value = If(POS.DateiNameAufschub, DBNull.Value)
                    r.Cells("Belegdaten").Value = If(POS.Belegdaten, DBNull.Value)
                    'MsgBox(r.Cells("LeistungsBez").Value & " : " & If(POS.Preis, 0) & " : " & If(POS.Anzahl, 0))

                    found = True : Exit For
                End If
            Next
            '    MsgBox("G2: " & RECHNUNG.POSITIONEN.Count)

            If Not found Then
                '  Dim dRow As DataRow = SQL.loadDgvBySql(" SELECT * FROM [Leistungen] WHERE LeistungsNr=" & POS.LeistungsNr, "FMZOLL").Rows(0)
                'dgvOfferteDetailsUebersicht.DataBindings.clear
                Dim dtable As DataTable = dgvOfferteDetailsUebersicht.DataSource
                '   If dgvOfferteDetailsUebersicht.Rows.Count > 0 Then dgvOfferteDetailsUebersicht.Rows.Clear()

                If dtable IsNot Nothing Then
                    'Sortierung
                    'Dim dataView As New DataView(dtable)
                    'dataView.Sort = " LeistungsNr ASC "
                    'Dim dt As DataTable = dataView.ToTable()
                    'For Each r As DataColumn In dt.Columns
                    '    MsgBox(r.ColumnName)
                    'Next
                    'dt.Rows.Add(POS.LeistungsNr, POS.LeistungsBez, POS.Anzahl, POS.Preis, POS.BerechnungsartNr, POS.[BGebLeistungsNr], POS.[BGebProzent], POS.[BGebMinBetrag], POS.Steuerpflichtig,
                    '            POS.IndexZkteing, POS.AufschubkontoNr, POS.Aufschubfälligkeit, POS.DateiNameAufschub, POS.Belegdaten)
                    'dgvOfferteDetailsUebersicht.DataSource = dt
                    'MsgBox("ASF")
                    'dgvOfferteDetailsUebersicht.Rows.Add(POS.LeistungsNr, POS.LeistungsBez, POS.Anzahl, POS.Preis, POS.BerechnungsartNr, POS.[BGebLeistungsNr], POS.[BGebProzent], POS.[BGebMinBetrag], POS.Steuerpflichtig,
                    '            POS.IndexZkteing, POS.AufschubkontoNr, POS.Aufschubfälligkeit, POS.DateiNameAufschub, POS.Belegdaten)
                End If
                'SELECT [Offertenpositionen].[LeistungsNr],[Offertenpositionen].[LeistungsBez],[Offertenpositionen].[BerechnungsartNr],[Anzahl],[Preis],[BGebLeistungsNr],[BGebProzent],[BGebMinBetrag],/*[Eingegeben am],[PreisänderungProzent],[PreisAlt],[Preisänderung],*/Steuerpflichtig,[Geändert am],[Sachbearbeiter] " &
                If dgvOfferteDetailsUebersicht.Columns.Count > 0 And dgvOfferteDetailsUebersicht.Rows.Count > 0 Then
                    'If(POS.BerechnungsartNr, 1)
                    Try
                        ' POS.BerechnungsartNr !!!
                        Dim newR As DataGridViewRow = dgvOfferteDetailsUebersicht.Rows(0).Clone ' dgvOfferteDetailsUebersicht.DataSource.Tables(0).NewRow()

                        newR.Cells(0).Value = POS.LeistungsNr
                        newR.Cells(1).Value = If(POS.LeistungsBez, DBNull.Value)
                        newR.Cells(2).Value = If(POS.Anzahl, DBNull.Value)
                        newR.Cells(3).Value = If(POS.Preis, DBNull.Value) '* vorzeichen
                        newR.Cells(4).Value = POS.BerechnungsartNr
                        newR.Cells(5).Value = If(POS.BGebLeistungsNr, DBNull.Value)
                        newR.Cells(6).Value = If(POS.BGebProzent, DBNull.Value)
                        newR.Cells(7).Value = If(POS.BGebMinBetrag, DBNull.Value)
                        newR.Cells(8).Value = POS.Steuerpflichtig ' * vorzeichen
                        newR.Cells(9).Value = POS.IndexZkteing
                        newR.Cells(10).Value = If(POS.AufschubkontoNr, DBNull.Value)
                        newR.Cells(11).Value = If(POS.Aufschubfälligkeit, DBNull.Value)
                        newR.Cells(12).Value = If(POS.DateiNameAufschub, DBNull.Value)
                        newR.Cells(13).Value = If(POS.Belegdaten, DBNull.Value)


                        '' dgvOfferteDetailsUebersicht.DataSource.AcceptChanges()
                        ' dgvOfferteDetailsUebersicht.DataSource.Tables(0).Rows.add(newR)
                        '  dgvOfferteDetailsUebersicht.Rows(dgvOfferteDetailsUebersicht.Rows.Count - 1).Cells("BerechnungsartNr").DefaultNewRowValue = POS.BerechnungsartNr.ToString

                        dgvOfferteDetailsUebersicht.Rows.Add(newR)
                        setBerartValue(newR, POS.BerechnungsartNr)


                        'newR.Cells(4).Value = POS.BerechnungsartNr

                        ' dgvOfferteDetailsUebersicht.Rows(dgvOfferteDetailsUebersicht.Rows.Count - 1).Cells("BerechnungsartNr"). = POS.BerechnungsartNr.ToString

                        '  MsgBox(DirectCast(newR.Cells(4), DataGridViewComboBoxCell).ValueMember.Count) '= POS.BerechnungsartNr
                        'dgvOfferteDetailsUebersicht.DataSource.AcceptChanges()

                        '  dgvOfferteDetailsUebersicht.Rows.Add(POS.LeistungsNr, POS.LeistungsBez, POS.Anzahl, POS.Preis, DBNull.Value, POS.[BGebLeistungsNr], POS.[BGebProzent], POS.[BGebMinBetrag], POS.Steuerpflichtig,
                        '  POS.IndexZkteing, POS.AufschubkontoNr, POS.Aufschubfälligkeit, POS.DateiNameAufschub, POS.Belegdaten)

                        '    dgvOfferteDetailsUebersicht.Rows(dgvOfferteDetailsUebersicht.Rows.Count - 1).Cells("BerechnungsartNr").Value = POS.BerechnungsartNr
                    Catch ex As Exception
                        VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
                    End Try



                End If


            End If
        Next
        loaded = tmpLoaded
    End Sub

    Private Sub usrCntlFaktAbrechnung_Load(sender As Object, e As EventArgs) Handles Me.Load
        tGespeichert.Interval = 2000

        cboRgGS.SelectedIndex = 0

        GutschriftAnVeragToolStripMenuItem.Visible = False

        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


        cboSammelrechnung.Items.Clear()
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("0 Einzel", 0))
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("1 täglich", 1))
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("2 halbmonatlich", 2))
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("3 monatlich", 3))
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4 Dekade", 4))
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("5 wöchentlich", 5))
        '  cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("6 Maut/Diesel", 6))
        cboSammelrechnung.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("7 pro  LKW", 7))
        cboSammelrechnung.changeItem(0)

        cboRechnungSprache.Items.Clear()
        cboRechnungSprache.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Deutsch", "DE"))
        cboRechnungSprache.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Englisch", "EN"))
        cboRechnungSprache.changeItem(0)

        'cboSteuerschlüssel.fillWithSQL("SELECT tblSteuersätze.Nr, tblSteuersätze.Beschreibung FROM tblSteuersätze ORDER BY tblSteuersätze.Nr; ", False, "FMZOLL", True)
        cboSteuerschlüssel.fillWithSQL("SELECT [Steuerschlüssel],isnull([AuswahlSteuerbezeichnung],'') as Steuerbezeichnung FROM [Steuertabelle] ORDER BY [Steuerschlüssel]", False, "FMZOLL", True)

        Dim whereFirma = ""
        Dim firstEmpty = False

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

        'If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then
        'FirmaTmp = "AMBAR"
        'End If

        Select Case FirmaTmp
            Case "VERAG"
                If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("FAKTURIERUNG_VERAGAG_DE", "SDL") Then
                    whereFirma = " AND FIRMENGRUPPE IN ('VERAG','ATILLA','FRONTOFFICE','VERAGAG_DE') " : pnlDocs.Visible = True
                    'MsgBox("AH")
                Else
                    whereFirma = " AND FIRMENGRUPPE IN ('VERAG','ATILLA','FRONTOFFICE') " : pnlDocs.Visible = True
                End If

            Case "IMEX" : whereFirma = " AND FIRMENGRUPPE IN ('IMEX') " : pnlDocs.Visible = True
            'Case "VERAG" : whereFirma = " AND Firma_ID<>20 " : pnlDocs.Visible = True
            'Case "IMEX" : whereFirma = " AND Firma_ID=20 "
            Case "ATILLA" : whereFirma = " AND Firma_ID=7 " : pnlDocs.Visible = True
            Case "UNISPED" : whereFirma = " AND FIRMENGRUPPE IN ('UNISPED') " : firstEmpty = True : pnlDocs.Visible = True

            Case "AMBAR" : whereFirma = " AND Firma_ID=24 " : pnlDocs.Visible = True : GutschriftAnVeragToolStripMenuItem.Visible = True
            Case "FRONT-OFFICE" : whereFirma = " AND Firma_ID=17 " : pnlDocs.Visible = True
            Case "VERAGIMEX"
                whereFirma = " AND FIRMENGRUPPE IN ('VERAG','IMEX','ATILLA','VERAGUNISPED','FRONTOFFICE') "
                If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("FAKTURIERUNG_VERAGAG_DE", "SDL") Then
                    whereFirma = " AND FIRMENGRUPPE IN ('VERAG','IMEX','ATILLA','VERAGUNISPED','FRONTOFFICE','VERAGAG_DE') "
                End If
                pnlDocs.Visible = True
            Case "VERA360"
                If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("FAKTURIERUNG_VERAGAG_DE", "SDL") Then
                    whereFirma = " AND FIRMENGRUPPE IN ('VERAG360','VERAGAG_DE') " : pnlDocs.Visible = True
                Else
                    whereFirma = " AND FIRMENGRUPPE IN ('VERAG360') " : pnlDocs.Visible = True
                End If
        End Select

        cboFirma.fillWithSQL("SELECT  [Firma_ID],[Firma_Bez] FROM [tblFirma] WHERE Firma_ID NOT IN(3) " & whereFirma & " ORDER BY Firma_ID  ", True, "FMZOLL", firstEmpty)
        cboFirma.SelectedIndex = 0

        If VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE <> "" And Not VERAG_PROG_ALLGEMEIN.cAllgemein.isCLUSTER And FirmaTmp <> "VERAGIMEX" Then
            If 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

        cboRechnungNotiz.fillWithSQL("SELECT [Notiz],[Notiz] as N2 FROM tblRechnungsnotizen", True, "FMZOLL", True)
        'cboWaehrung.fillWithSQL("  SELECT Währungscode, isnull(Währungscode + ' - '  ,'') + LandBez    + ' (' + cast(LandNr as varchar(8)) + ')' FROM [Länderverzeichnis für die Außenhandelsstatistik] ORDER BY case when Währungscode is null then 1 else 0 end,LandBez ", False, "FMZOLL", True)
        cboWaehrung.fillWithSQL("  SELECT Währungsschlüssel, Währungscode FROM Währungstabelle ORDER BY Währungscode,[Währungsschlüssel] DESC ", False, "FMZOLL", True)
        cboWaehrungUmrechnung.fillWithSQL("SELECT Währungstabelle.Währungscode, Währungstabelle.Währungscode FROM Währungstabelle WHERE (((Währungstabelle.Eurokurs) Is Not Null And (Währungstabelle.Eurokurs)>0)) ORDER BY Währungstabelle.Währungscode; ", False, "FMZOLL", True)
        cboWaehrungUmrechnung.changeItem("EUR")


        sbLeistung.initSearchBox(Me.FindForm, " [LeistungsNr] ,[LeistungsBez],(cast([LeistungsNr] as varchar(3)) + ' - ' + [LeistungsBez]) AS Display  FROM Leistungen", {"LeistungsNr", "LeistungsBez"}, "  1=1 ", "LeistungsNr", "LeistungsNr", "Display", "FMZOLL", , 400, 200, {"Display"})

        Dim ANL_LIST = SQL.loadCboBySqlWithListItem("SELECT [AnlagenBez],AnlagenBez as AnlagenBez2 FROM [Anlagen] ORDER BY AnlagenBez; ", False, "FMZOLL")
        cboAnlage1.fillWithMyListItem(ANL_LIST, True)
        cboAnlage1.fillWithMyListItem(ANL_LIST, True)
        cboAnlage2.fillWithMyListItem(ANL_LIST, True)
        cboAnlage3.fillWithMyListItem(ANL_LIST, True)
        cboAnlage4.fillWithMyListItem(ANL_LIST, True)
        cboAnlage5.fillWithMyListItem(ANL_LIST, True)
        cboAnlage6.fillWithMyListItem(ANL_LIST, True)


        kdFirmaRechnungAn.initKdBox(Me.FindForm, txtkdNrRechnungAn)
        kdFirmaAbsender.initKdBox(Me.FindForm, txtkdNrAbsender)
        kdFirmaEmpfaenger.initKdBox(Me.FindForm, txtkdNrEmpfaenger)
        kdFirmaAuftraggeber.initKdBox(Me.FindForm, txtkdNrAuftraggeber)
        kdFirmaAvisierer.initKdBox(Me.FindForm, txtkdNrAvisierer)


        AddHandler kdFirmaRechnungAn.PropertyChanged, Sub()
                                                          Try
                                                              initKdAtrNr()
                                                              initRechnungKd()
                                                              FlatButton3.Image = IIf(kdFirmaRechnungAn.KdNr_value > 0, My.Resources.person1, My.Resources.personInaktiv)

                                                              '  setOffertFromAbfArt() 'setzt dir OffertenNr in RECHNUNG, für die Auswahl wichtig!
                                                              initDGVOffertenSperrliste(kdFirmaRechnungAn.KdNr_value, IIf(veragKunde = -1, False, True))
                                                              initWarnKd(kdFirmaRechnungAn, picWarnRgAn)

                                                              cboRechnungSprache.changeItem("DE")
                                                              If kdFirmaRechnungAn.KdData_KUNDE_ERW IsNot Nothing Then
                                                                  If If(kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_Fakturierung_Sprache, "") <> "" Then
                                                                      cboRechnungSprache.changeItem(kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_Fakturierung_Sprache)
                                                                  End If
                                                              End If


                                                              If kdFirmaRechnungAn.KdData_KUNDE_ERW IsNot Nothing AndAlso kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_InfoAuftragsNr IsNot Nothing AndAlso kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_InfoAuftragsNr <> "" Then
                                                                  ToolTip.SetToolTip(picKdAuftrInfo, kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_InfoAuftragsNr)
                                                                  picKdAuftrInfo.Cursor = Cursors.Hand
                                                                  picKdAuftrInfo.Tag = kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_InfoAuftragsNr

                                                              Else
                                                                  ToolTip.SetToolTip(picKdAuftrInfo, "")
                                                                  picKdAuftrInfo.Cursor = Cursors.Default
                                                                  picKdAuftrInfo.Tag = ""
                                                              End If


                                                              Try
                                                                  Dim OfferteNnr = setOffertFromAbfArt() 'setzt dir OffertenNr in RECHNUNG, für die Auswahl wichtig!
                                                                  For Each r As DataGridViewRow In dgvOffertenSperrliste.Rows
                                                                      If r.Cells("OffertenNr").Value = OfferteNnr Then
                                                                          dgvOffertenSperrliste.ClearSelection() : r.Cells("OffertenBez").Selected = True : Exit For
                                                                      End If
                                                                  Next
                                                              Catch ex As Exception

                                                              End Try


                                                              If kdFirmaRechnungAn.KdData_KUNDE_ERW.AutoFakturierung Then
                                                                  Button7.Visible = True
                                                                  Button7.Enabled = True
                                                                  Button7.PerformClick()
                                                              End If

                                                          Catch ex As Exception
                                                              MsgBox(ex.Message & ex.StackTrace)
                                                          End Try
                                                      End Sub
        AddHandler kdFirmaRechnungAn.TextChanged, Sub()
                                                      picWarnRgAn.Visible = False
                                                      lblKdInaktiv.Visible = False
                                                  End Sub

        AddHandler kdFirmaAbsender.PropertyChanged, Sub()
                                                        FlatButton1.Image = If(kdFirmaAbsender.KdNr_value > 0, My.Resources.person1, My.Resources.personInaktiv)
                                                    End Sub
        AddHandler kdFirmaEmpfaenger.PropertyChanged, Sub()
                                                          FlatButton2.Image = If(kdFirmaEmpfaenger.KdNr_value > 0, My.Resources.person1, My.Resources.personInaktiv)
                                                      End Sub
        AddHandler kdFirmaAuftraggeber.PropertyChanged, Sub()
                                                            FlatButton4.Image = If(kdFirmaAuftraggeber.KdNr_value > 0, My.Resources.person1, My.Resources.personInaktiv)
                                                        End Sub
        AddHandler kdFirmaAvisierer.PropertyChanged, Sub()
                                                         FlatButton5.Image = If(kdFirmaAvisierer.KdNr_value > 0, My.Resources.person1, My.Resources.personInaktiv)
                                                     End Sub

        cboRechnungAn.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", ""))
        cboRechnungAn.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("1 - Absender", "1"))
        cboRechnungAn.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("2 - Empfänger", "2"))
        cboRechnungAn.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("3 - Auftraggeber", "3"))
        cboRechnungAn.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4 - Avisierer", "4"))


        'initChangeEvent(Panel1)
        'AddHandler DirectCast(cboSteuerschlüssel, ComboBox).SelectedIndexChanged, AddressOf setChange

        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("ADMINFUNCTIONS", "SDL") Then
            cbxAdmin.Visible = True
        End If

        initRECHNUNG()
    End Sub

    Function setOffertFromAbfArt()
        Dim OffertNr = ""
        If SPEDBUCH IsNot Nothing Then
            If IsNumeric(SPEDBUCH.Abfertigungsart) Then
                Dim OffertNrtmp = SQL.getValueTxtBySql("SELECT isnull([ao_OffertenNr],-1) FROM [tblAbfertigungsartOffertenstamm] WHERE [ao_Abfertigungsart]=" & SPEDBUCH.Abfertigungsart, "FMZOLL")
                If OffertNrtmp <> "" AndAlso OffertNrtmp > 0 Then OffertNr = OffertNrtmp
                'MsgBox(OffertNr)
            End If
        End If
        Return OffertNr
    End Function

    'Läuft alle Elememte durch
    Public Sub initChangeEvent(ByVal oContainer As Object)
        If Not IsNothing(oContainer) Then
            ' alle Controls des Container-Objekts durchlaufen
            For Each oControl As Control In oContainer.Controls
                ' Falls es sich um ein Container-Control handelt und die 
                ' TextBox-Controls ebenfalls zurückgesetzt werden sollen, muss
                ' die Funktion ResetTextBox rekursiv erneut aufgerufen werden
                If oControl.Controls.Count > 0 Then
                    initChangeEvent(oControl)
                Else
                    ' Sofern es sich um ein TextBox-Control handelt...
                    If TypeOf oControl Is TextBox Or TypeOf oControl Is RichTextBox Or TypeOf oControl Is VERAG_PROG_ALLGEMEIN.MyRichTextBox Or TypeOf oControl Is VERAG_PROG_ALLGEMEIN.MyTextBox Then
                        AddHandler oControl.TextChanged, AddressOf setChange
                    End If
                    If TypeOf oControl Is CheckBox Or TypeOf oControl Is VERAG_PROG_ALLGEMEIN.MyCheckbox Then
                        AddHandler DirectCast(oControl, CheckBox).CheckedChanged, AddressOf setChange
                    End If
                    If TypeOf oControl Is DateTimePicker Then
                        AddHandler DirectCast(oControl, DateTimePicker).ValueChanged, AddressOf setChange
                    End If
                    If TypeOf oControl Is ComboBox Or TypeOf oControl Is VERAG_PROG_ALLGEMEIN.MyComboBox Then
                        AddHandler DirectCast(oControl, ComboBox).SelectedIndexChanged, AddressOf setChange
                    End If
                    If TypeOf oControl Is RadioButton Then
                        AddHandler DirectCast(oControl, RadioButton).CheckedChanged, AddressOf setChange
                    End If
                    If TypeOf oControl Is VERAG_PROG_ALLGEMEIN.KdSearchBox Then
                        AddHandler DirectCast(oControl, VERAG_PROG_ALLGEMEIN.KdSearchBox).PropertyChanged, AddressOf setChange
                    End If

                End If
            Next
        End If
    End Sub
    Private Sub setChange()
        If loaded Then
            SAVED = False
        End If
    End Sub
    Sub initWarnKd(kdSearch As VERAG_PROG_ALLGEMEIN.KdSearchBox, pic As PictureBox)
        Try
            lblKdInaktiv.Visible = False
            pic.Visible = False
            ToolTip.SetToolTip(pic, "")
            Dim InfoText = ""
            If kdSearch.KdData_ADRESSEN IsNot Nothing Then
                If kdSearch.KdData_ADRESSEN.Auswahl = "I" Then
                    InfoText &= "KUNDE INAKTIV!" & vbNewLine & vbNewLine
                    lblKdInaktiv.Visible = True
                End If
            End If

            If kdSearch.KdData_KUNDE IsNot Nothing Then
                If kdSearch.KdData_KUNDE.Abfertigungsverbot Then
                    pic.Visible = True
                    Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                        Case "VERAG" : InfoText &= "ACHTUNG!" & vbNewLine
                        Case Else
                            InfoText &= "ABFERTIGUNGSVERBOT!" & vbNewLine
                    End Select

                    If If(kdSearch.KdData_KUNDE.Abfertigungsverbot_Grund, "") <> "" Then InfoText &= kdSearch.KdData_KUNDE.Abfertigungsverbot_Grund & vbNewLine


                    If If(kdSearch.KdData_KUNDE.Besonderheiten, "") <> "" Then
                        pic.Visible = True
                        InfoText &= "BESONDERHEITEN:" & vbNewLine
                        InfoText &= kdSearch.KdData_KUNDE.Besonderheiten
                    End If

                End If
            End If

            ToolTip.SetToolTip(pic, InfoText.Trim)

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Sub initRechnungKd(Optional reload = False)
        Try
            If reload Then kdFirmaRechnungAn.reloadKdData()

            txtRechnungAnUIDNr.Text = ""
            txtRechnungAnUIDKz.Text = ""
            Label7.Text = "-"
            txtRechnungAnBuKdNr.Text = ""
            txtBesonderheiten.Text = ""

            rtbAbf_Besonderheiten.Visible = False
            RECHNUNG.Lastschrift = Nothing
            RECHNUNG.Kunden_SVS = Nothing

            RECHNUNG.Vorlageprovision_Proz = Nothing
            RECHNUNG.Kreditaufwendungen_Proz = Nothing
            RECHNUNG.Besonderheiten = Nothing
            RECHNUNG.Vorkasse = Nothing

            If kdFirmaRechnungAn.KdNr_value > 0 And kdFirmaRechnungAn.KdData_ADRESSEN IsNot Nothing Then
                Dim AD As VERAG_PROG_ALLGEMEIN.cAdressen = kdFirmaRechnungAn.KdData_ADRESSEN
                Dim KD_ERW As VERAG_PROG_ALLGEMEIN.cKundenErweitert = kdFirmaRechnungAn.KdData_KUNDE_ERW
                txtRechnungAnName2.Text = If(AD.Name_2, "")
                txtRechnungAnStrasse.Text = If(AD.Straße, "")
                txtRechnungAnOrt.Text = (If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")).trim
                If KD_ERW IsNot Nothing Then txtRechnungAnZusatz.Text = If(KD_ERW.kde_AdressZusatz, "") Else txtRechnungAnZusatz.Text = ""

                txtRechnungAnUIDNr.Text = If(AD.UstIdNr, "")
                txtRechnungAnUIDKz.Text = If(AD.UstIdKz, "")
                Label7.Text = If(AD.UstIdGeprüft IsNot Nothing, "geprüft am: " & AD.UstIdGeprüft, "-")
                '   RECHNUNG.RechnungsUstIdGeprüft = If(AD.UstIdGeprüft IsNot Nothing, "geprüft am: " & CDate(AD.UstIdGeprüft).ToShortDateString, Nothing)
                RECHNUNG.RechnungsUstIdGeprüft = AD.UstIdGeprüft

            End If


            If kdFirmaRechnungAn.KdNr_value > 0 And kdFirmaRechnungAn.KdData_KUNDE IsNot Nothing Then
                Dim KD As VERAG_PROG_ALLGEMEIN.cKunde = kdFirmaRechnungAn.KdData_KUNDE
                Dim KUNDE_ERW As VERAG_PROG_ALLGEMEIN.cKundenErweitert = kdFirmaRechnungAn.KdData_KUNDE_ERW
                txtRechnungAnBuKdNr.Text = If(KD.KundenNrZentrale, "")
                txtBesonderheiten.Text = If(KD.Besonderheiten, "")

                If KUNDE_ERW.kde_BesonderheitenNeu Then
                    rtbAbf_Besonderheiten.Size = txtBesonderheiten.Size
                    rtbAbf_Besonderheiten.init(kdFirmaRechnungAn.KdNr_value, , True, "VRR", "'ZOLL','ALLG','DISPO'")
                    rtbAbf_Besonderheiten.Visible = True
                Else
                    rtbAbf_Besonderheiten.Visible = False
                End If

                RECHNUNG.Besonderheiten = KD.Besonderheiten
                RECHNUNG.Kunden_SVS = KD.SVS
                RECHNUNG.Vorkasse = KD.Vorkasse
                RECHNUNG.Kreditaufwendungen_Proz = KD.Kreditaufwendungen
                RECHNUNG.Vorlageprovision_Proz = KD.Vorlageprovision

                If FIRMA IsNot Nothing Then
                    If FIRMA.Firma_ID = 11 Then ' Bei VERAG Customs Service GmbH --> kein Bankeinzug
                        RECHNUNG.Lastschrift = False
                    Else
                        RECHNUNG.Lastschrift = KD.Lastschrift
                    End If
                End If


            End If

            txtBesonderheiten.Visible = Not rtbAbf_Besonderheiten.Visible
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub txtRechnungAnUIDKz_TextChanged(sender As Object, e As EventArgs) Handles txtRechnungAnUIDKz.TextChanged, txtRechnungAnUIDNr.TextChanged
        Button6.Enabled = (txtRechnungAnUIDNr.Text <> "" And txtRechnungAnUIDKz.Text <> "")
    End Sub
    Private Sub cboRechnungAn_TextChanged(sender As Object, e As EventArgs) Handles cboRechnungAn.SelectedIndexChanged
        Button15.Enabled = (cboRechnungAn._value <> "")
    End Sub

    Private Sub cboSteuerschlüssel_SelectedValueChanged(sender As Object, e As EventArgs) Handles cboSteuerschlüssel.SelectedIndexChanged
        If IsNumeric(cboSteuerschlüssel._value) Then
            '      txtSteuersatz.fillWithSQL("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & cboSteuerschlüssel._value & "' ", "FMZOLL")
            txtSteuersatz.fillWithSQL("SELECT isnull([Steuersatz %],0) FROM [Steuertabelle] WHERE [Steuerschlüssel]='" & cboSteuerschlüssel._value & "' ", "FMZOLL")
        End If
        getValues()
        'initDGVRechnungenPositionen()
        przRefreshDGV_Positionen()

    End Sub

    Private Sub cboRechnungAn_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRechnungAn.SelectedIndexChanged
        'initBackColor = Color.WhiteSmoke
        pnlEmpfaenger.BackColor = Color.WhiteSmoke
        pnlAuftraggeber.BackColor = Color.WhiteSmoke
        pnlAvisierer.BackColor = Color.WhiteSmoke
        btnAbsenderEuro.ForeColor = Color.Silver
        btnEmpfaengerEuro.ForeColor = Color.Silver
        btnAuftraggeberEuro.ForeColor = Color.Silver
        btnAvisiererEuro.ForeColor = Color.Silver

        Select Case cboRechnungAn._value
            Case "1" : pnlAbsender.BackColor = Color.PapayaWhip ': setBGbColotTxt(pnlAbsender)
                btnAbsenderEuro.ForeColor = Color.FromArgb(0, 54, 128)
            Case "2" : pnlEmpfaenger.BackColor = Color.PapayaWhip ': setBGbColotTxt(pnlEmpfaenger)
                btnEmpfaengerEuro.ForeColor = Color.FromArgb(0, 54, 128)
            Case "3" : pnlAuftraggeber.BackColor = Color.PapayaWhip ': setBGbColotTxt(pnlAuftraggeber)
                btnAuftraggeberEuro.ForeColor = Color.FromArgb(0, 54, 128)
            Case "4" : pnlAvisierer.BackColor = Color.PapayaWhip ' : setBGbColotTxt(pnlAvisierer)
                btnAvisiererEuro.ForeColor = Color.FromArgb(0, 54, 128)
            Case Else
        End Select

        setBGbColotTxt(pnlAbsender)
        setBGbColotTxt(pnlEmpfaenger)
        setBGbColotTxt(pnlAuftraggeber)
        setBGbColotTxt(pnlAvisierer)

        If Not loaded Then Exit Sub

        Select Case cboRechnungAn._value
            Case "1"
                kdFirmaRechnungAn.KdNr = kdFirmaAbsender.KdNr
                If kdFirmaRechnungAn.KdNrNullInt <= 0 Then kdFirmaRechnungAn.Text = kdFirmaAbsender.Text
                txtRechnungAnName2.Text = txtAbsenderName2.Text
                txtRechnungAnStrasse.Text = txtAbsenderStrasse.Text
                txtRechnungAnOrt.Text = txtAbsenderOrt.Text
                If kdFirmaAbsender.KdData_KUNDE_ERW IsNot Nothing Then txtRechnungAnZusatz.Text = If(kdFirmaAbsender.KdData_KUNDE_ERW.kde_AdressZusatz, "") Else txtRechnungAnZusatz.Text = ""
                If kdFirmaAbsender.KdData_KUNDE IsNot Nothing Then

                    If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                        cboSteuerschlüssel.changeItem(RECHNUNG.ForceSteuerschlüssel)
                    Else
                        cboSteuerschlüssel.changeItem(If(kdFirmaAbsender.KdData_KUNDE.Steuerschlüssel, ""))
                    End If
                    cboSammelrechnung.changeItem(If(kdFirmaAbsender.KdData_KUNDE.Sammelrechnung, ""))
                    cboWaehrungUmrechnung.changeItem(If(kdFirmaAbsender.KdData_KUNDE.Währungscode, ""))

                End If
            Case "2"
                kdFirmaRechnungAn.KdNr = kdFirmaEmpfaenger.KdNr
                If kdFirmaRechnungAn.KdNrNullInt <= 0 Then kdFirmaRechnungAn.Text = kdFirmaEmpfaenger.Text
                txtRechnungAnName2.Text = txtEmpfeangerName2.Text
                txtRechnungAnStrasse.Text = txtEmpfaengerStrasse.Text
                txtRechnungAnOrt.Text = txtEmpfaengerOrt.Text
                If kdFirmaEmpfaenger.KdData_KUNDE_ERW IsNot Nothing Then txtRechnungAnZusatz.Text = If(kdFirmaEmpfaenger.KdData_KUNDE_ERW.kde_AdressZusatz, "") Else txtRechnungAnZusatz.Text = ""
                If kdFirmaEmpfaenger.KdData_KUNDE IsNot Nothing Then
                    If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                        cboSteuerschlüssel.changeItem(RECHNUNG.ForceSteuerschlüssel)
                    Else
                        cboSteuerschlüssel.changeItem(If(kdFirmaEmpfaenger.KdData_KUNDE.Steuerschlüssel, ""))
                    End If
                    cboSammelrechnung.changeItem(If(kdFirmaEmpfaenger.KdData_KUNDE.Sammelrechnung, ""))
                    cboWaehrungUmrechnung.changeItem(If(kdFirmaEmpfaenger.KdData_KUNDE.Währungscode, ""))
                End If
            Case "3"
                kdFirmaRechnungAn.KdNr = kdFirmaAuftraggeber.KdNr
                If kdFirmaRechnungAn.KdNrNullInt <= 0 Then kdFirmaRechnungAn.Text = kdFirmaAuftraggeber.Text
                txtRechnungAnName2.Text = txtAuftraggeberName2.Text
                txtRechnungAnStrasse.Text = txtAuftragggeberStrasse.Text
                txtRechnungAnOrt.Text = txtAuftragggeberOrt.Text
                If kdFirmaAuftraggeber.KdData_KUNDE_ERW IsNot Nothing Then txtRechnungAnZusatz.Text = If(kdFirmaAuftraggeber.KdData_KUNDE_ERW.kde_AdressZusatz, "") Else txtRechnungAnZusatz.Text = ""
                If kdFirmaAuftraggeber.KdData_KUNDE IsNot Nothing Then
                    If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                        cboSteuerschlüssel.changeItem(RECHNUNG.ForceSteuerschlüssel)
                    Else
                        cboSteuerschlüssel.changeItem(If(kdFirmaAuftraggeber.KdData_KUNDE.Steuerschlüssel, ""))
                    End If
                    cboSammelrechnung.changeItem(If(kdFirmaAuftraggeber.KdData_KUNDE.Sammelrechnung, ""))
                    cboWaehrungUmrechnung.changeItem(If(kdFirmaAuftraggeber.KdData_KUNDE.Währungscode, ""))
                End If
            Case "4"
                kdFirmaRechnungAn.KdNr = kdFirmaAvisierer.KdNr
                If kdFirmaRechnungAn.KdNrNullInt <= 0 Then kdFirmaRechnungAn.Text = kdFirmaAvisierer.Text
                If kdFirmaAvisierer.KdData_KUNDE_ERW IsNot Nothing Then txtRechnungAnZusatz.Text = If(kdFirmaAvisierer.KdData_KUNDE_ERW.kde_AdressZusatz, "") Else txtRechnungAnZusatz.Text = ""
                If kdFirmaAvisierer.KdData_KUNDE IsNot Nothing Then
                    If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                        cboSteuerschlüssel.changeItem(RECHNUNG.ForceSteuerschlüssel)
                    Else
                        cboSteuerschlüssel.changeItem(If(kdFirmaAvisierer.KdData_KUNDE.Steuerschlüssel, ""))
                    End If
                    cboSammelrechnung.changeItem(If(kdFirmaAvisierer.KdData_KUNDE.Sammelrechnung, ""))
                    cboWaehrungUmrechnung.changeItem(If(kdFirmaAvisierer.KdData_KUNDE.Währungscode, ""))
                End If
            Case Else
        End Select

        initKdAtrNr()
        initPkSt()
    End Sub

    Sub setBGbColotTxt(p_cntl As Control)
        For Each c As Control In p_cntl.Controls
            If c.GetType.ToString = GetType(VERAG_PROG_ALLGEMEIN.MyTextBox).ToString Then
                If DirectCast(c, VERAG_PROG_ALLGEMEIN.MyTextBox).BorderStyle = BorderStyle.None Then
                    c.BackColor = p_cntl.BackColor
                End If
            End If
        Next
    End Sub

    Sub initKdAtrNr()
        Select Case cboRechnungAn._value
            Case "1"
                txtKdAuftragsNr.Text = ""
            Case "2"
                If SPEDBUCH IsNot Nothing Then txtKdAuftragsNr.Text = If(SPEDBUCH.KdAuftragsNrEmpfaenger, "")
            Case "3"
                If SPEDBUCH IsNot Nothing Then txtKdAuftragsNr.Text = If(SPEDBUCH.KdAuftragsNr, "")
            Case "4"
                If SPEDBUCH IsNot Nothing Then txtKdAuftragsNr.Text = If(SPEDBUCH.KdAuftragsNrAvisierer, "")
            Case Else
        End Select
        initKdAtrNrBG()
    End Sub
    Sub initPkSt()
        Select Case cboRechnungAn._value
            Case "1"
                If kdFirmaAbsender.KdData_KUNDE_ERW IsNot Nothing AndAlso kdFirmaAbsender.KdData_KUNDE_ERW.kde_Abrechnung_SendungsdatenAusSTB Then
                    If SPEDBUCH IsNot Nothing Then txtSendungsdaten.Text = If(SPEDBUCH.Packstücke_Zoll, "")
                End If
            Case "2"
                If kdFirmaEmpfaenger.KdData_KUNDE_ERW IsNot Nothing AndAlso kdFirmaEmpfaenger.KdData_KUNDE_ERW.kde_Abrechnung_SendungsdatenAusSTB Then
                    If SPEDBUCH IsNot Nothing Then txtSendungsdaten.Text = If(SPEDBUCH.Packstücke_Zoll, "")
                End If
            Case "3"
                If kdFirmaAuftraggeber.KdData_KUNDE_ERW IsNot Nothing AndAlso kdFirmaAuftraggeber.KdData_KUNDE_ERW.kde_Abrechnung_SendungsdatenAusSTB Then
                    If SPEDBUCH IsNot Nothing Then txtSendungsdaten.Text = If(SPEDBUCH.Packstücke_Zoll, "")
                End If
            Case "4"
                If kdFirmaAvisierer.KdData_KUNDE_ERW IsNot Nothing AndAlso kdFirmaAvisierer.KdData_KUNDE_ERW.kde_Abrechnung_SendungsdatenAusSTB Then
                    If SPEDBUCH IsNot Nothing Then txtSendungsdaten.Text = If(SPEDBUCH.Packstücke_Zoll, "")
                End If
            Case Else
        End Select
        initKdAtrNrBG()
    End Sub

    Sub initKdAtrNrBG()
        picKdAuftrInfo.Visible = False
        txtKdAuftragsNr.BackColor = Color.White
        If kdFirmaRechnungAn.KdNr > 0 Then
            If kdFirmaRechnungAn.KdData_KUNDE_ERW IsNot Nothing Then
                If kdFirmaRechnungAn.KdData_KUNDE_ERW.kde_VerwendetAuftragsNr Then txtKdAuftragsNr.BackColor = Color.LightYellow : picKdAuftrInfo.Visible = True
            End If
        End If
    End Sub

    Private Sub txtkdNrRechnungAn_KeyDown(sender As Object, e As KeyEventArgs) Handles txtkdNrRechnungAn.KeyDown
        If e.KeyCode = Keys.Return Then
            If IsNumeric(txtkdNrRechnungAn.Text) Then
                kdFirmaRechnungAn.KdNr = txtkdNrRechnungAn.Text
            End If
        End If
    End Sub



    Sub initDGVOffertenSperrliste(kdNr As Integer, Optional VeragGU As Boolean = False)
        With dgvOffertenSperrliste
            If Not IsNumeric(kdNr) OrElse kdNr < 0 Then
                .Columns.Clear()
                Exit Sub
            End If

            Dim nurVerzollung = IIf(VeragGU, " AND Offerten.OffertenNr = 1", "")

            .DataSource = SQL.loadDgvBySql("SELECT Offerten.OffertenNr, cast(Offerten.OffertenNr as varchar(3)) + ' - ' + Offertenstamm.OffertenBez as OffertenBez ,Offerten.Besonderheiten, Gesperrt, Gesperrt_Datum, Gesperrt_Grund FROM Offerten inner join Offertenstamm on [Offerten].OffertenNr=Offertenstamm.OffertenNr WHERE Offerten.KundenNr='" & kdNr & "' " & nurVerzollung & "  ORDER BY Offerten.OffertenNr ", "FMZOLL")
            If .ColumnCount = 0 Then Exit Sub
            .Columns("OffertenNr").Visible = False
            .Columns("Besonderheiten").Visible = False
            ' .Columns("OffertenNr").HeaderText = "Nr"
            .Columns("OffertenBez").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            .Columns("OffertenBez").HeaderText = "Bezeichnung"
            .Columns("Gesperrt").HeaderText = "Sperre"
            .Columns("Gesperrt").Width = 45
            .Columns("Gesperrt_Datum").HeaderText = "Datum"
            .Columns("Gesperrt_Datum").Width = 100
            .Columns("Gesperrt_Grund").HeaderText = "Sperre-Grund"
            .Columns("Gesperrt_Grund").Width = 320
            .Columns("Gesperrt").Visible = False
            .Columns("Gesperrt_Grund").Visible = False
            .Columns("Gesperrt_Datum").Visible = False

            ' lblKeineSperren.Visible = (.RowCount = 0)


            For Each r As DataGridViewRow In .Rows
                If r.Cells("Gesperrt").Value IsNot DBNull.Value Then
                    If CBool(r.Cells("Gesperrt").Value) = True Then
                        r.DefaultCellStyle.ForeColor = Color.Red
                    End If
                End If
            Next
            If loaded Then initSperre()

        End With


    End Sub

    Private Sub dgvOffertenSperrliste_SelectionChanged(sender As Object, e As EventArgs) Handles dgvOffertenSperrliste.SelectionChanged
        If dgvOffertenSperrliste.Rows.Count <= 0 Then dgvOfferteDetailsUebersicht.Columns.Clear()
        If loaded Then initSperre()
    End Sub

    Private Sub initSperre(Optional OffertenNr = -1)
        RECHNUNG.OffertenNr = Nothing
        dgvOfferteDetailsUebersicht.Columns.Clear()
        If dgvOffertenSperrliste.SelectedRows.Count > 0 Then
            If OffertenNr > 0 Then
                initDGVOfferteDetailsUebersicht(kdFirmaRechnungAn.KdNr_value, OffertenNr)
                RECHNUNG.OffertenNr = OffertenNr
            Else
                initDGVOfferteDetailsUebersicht(kdFirmaRechnungAn.KdNr_value, dgvOffertenSperrliste.SelectedRows(0).Cells("OffertenNr").Value)
                RECHNUNG.OffertenNr = dgvOffertenSperrliste.SelectedRows(0).Cells("OffertenNr").Value
            End If
            If dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt").Value IsNot DBNull.Value Then
                If dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt").Value Then
                    dgvOffertenSperrliste.SelectedRows(0).DefaultCellStyle.SelectionForeColor = Color.Red

                Else
                    dgvOffertenSperrliste.SelectedRows(0).DefaultCellStyle.SelectionForeColor = Color.Black
                End If
                lblOFgesperrt.Visible = dgvOffertenSperrliste.SelectedRows(0).Cells("Gesperrt").Value
            Else
                lblOFgesperrt.Visible = False
            End If
        Else
            '.Columns..Columns.Clear()
            przRefreshDGV_Positionen()
        End If

    End Sub





    Sub initDGVOfferteDetailsUebersicht(kdNr, OffertenNr)

        With dgvOfferteDetailsUebersicht
            If Not IsNumeric(kdNr) OrElse kdNr < 0 Then
                .Columns.Clear()
                Exit Sub
            End If
            Dim loadedtmp = loaded
            loaded = False
            '  .Columns.Clear()

            ' FUNC.dgvCellToCbo(dgvOfferteDetailsUebersicht, 4, "Berechnungsart", "BerechnungsartNr", " SELECT [BerechnungsartNr], CAST(BerechnungsartNr as varchar(3))  + ' - ' + [BerechnungsartBez] as [BerechnungsartBez]  FROM [Berechnungsart] ORDER BY BerechnungsartNr ", "FMZOLL", 150)
            'NAMEN:::::::::::

            Dim c As New DataGridViewTextBoxColumn() : c.Name = "LeistungsNr" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "LeistungsBez" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "Anzahl" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "Preis" : .Columns.Add(c)
            'BerechnungsartNr
            .Columns.Add(FUNC.getdgvCboCell("BerechnungsartNr", "BerechnungsartNr", "BerechnungsartNr", " SELECT [BerechnungsartNr], CAST(BerechnungsartNr as varchar(2)) + ' - ' + [BerechnungsartBez] as Display  FROM [Berechnungsart] ORDER BY [BerechnungsartNr] ", "FMZOLL", 250)) ', 1))
            c = New DataGridViewTextBoxColumn() : c.Name = "BGebLeistungsNr" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "BGebProzent" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "BGebMinBetrag" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "Steuerpflichtig" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "IndexZkteing" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "AufschubkontoNr" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "Aufschubfälligkeit" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "DateiNameAufschub" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "Belegdaten" : .Columns.Add(c)
            c = New DataGridViewTextBoxColumn() : c.Name = "BerechnungsartPosInkludiert" : .Columns.Add(c)


            Dim dt As DataTable = SQL.loadDgvBySql(" SELECT [Offertenpositionen].[LeistungsNr],[Offertenpositionen].[LeistungsBez],[Anzahl],[Preis],[Offertenpositionen].[BerechnungsartNr],[BGebLeistungsNr],[BGebProzent],[BGebMinBetrag],Steuerpflichtig/*,[Geändert am],[Sachbearbeiter]*/,BerechnungsartPosInkludiert " &
                                           " FROM [Offertenpositionen] INNER JOIN [Leistungen] ON leistungen.LeistungsNr=Offertenpositionen.LeistungsNr " &
                                           " WHERE KundenNr='" & kdNr & "' and OffertenNr='" & OffertenNr & "' ORDER BY LeistungsNr ", "FMZOLL")


            'If .ColumnCount = 0 Then Exit Sub
            .Columns("LeistungsNr").Width = 30
            .Columns("LeistungsNr").HeaderText = "Nr"
            .Columns("LeistungsBez").MinimumWidth = 180
            .Columns("LeistungsBez").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            .Columns("LeistungsBez").HeaderText = "Leistung"
            DirectCast(.Columns("LeistungsBez"), DataGridViewTextBoxColumn).MaxInputLength = 30

            .Columns("LeistungsNr").ReadOnly = True
            .Columns("LeistungsBez").ReadOnly = False
            .Columns("BerechnungsartNr").ReadOnly = False
            '.Columns("BerechnungsartNr").DefaultCellStyle.NullValue = 1


            ' .Columns("BerechnungsartNr").MinimumWidth = 130
            .Columns("Preis").Width = 60
            .Columns("Preis").DefaultCellStyle.Format = "N2"
            .Columns("Preis").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
            '.Columns("Anzahl").Width = 50
            '.Columns("Anzahl").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
            '.Columns("BGebLeistungsNr").Width = 60
            '.Columns("BGebProzent").Width = 55
            '.Columns("BGebProzent").HeaderText = "BGeb %"
            '.Columns("BGebProzent").DefaultCellStyle.Format = "P"
            '.Columns("BGebProzent").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
            '.Columns("BGebMinBetrag").Width = 60
            '.Columns("BGebMinBetrag").HeaderText = "BGebMinBetr."
            '.Columns("BGebMinBetrag").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
            '.Columns("Eingegeben am").Visible = False

            '.Columns("Sachbearbeiter").Width = 65
            ' .Columns("Geändert am").Width = 95
            .Columns("BGebProzent").Width = 65
            .Columns("BGebMinBetrag").Width = 65
            '.Columns("PreisänderungProzent").Width = 65
            '.Columns("PreisänderungProzent").HeaderText = "Preisänd.%"
            '.Columns("PreisänderungProzent").DefaultCellStyle.Format = "P"
            '.Columns("PreisänderungProzent").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
            '.Columns("PreisAlt").Width = 60
            '.Columns("PreisAlt").DefaultCellStyle.Format = "N2"
            '.Columns("PreisAlt").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
            '.Columns("Preisänderung").Width = 60
            '.Columns("Preisänderung").HeaderText = "PreisNeu"
            '.Columns("Preisänderung").DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight


            .Columns("BGebLeistungsNr").Visible = False
            .Columns("BGebProzent").Visible = False
            .Columns("BGebMinBetrag").Visible = False
            .Columns("Steuerpflichtig").Visible = False
            .Columns("BerechnungsartPosInkludiert").Visible = False
            ' .Columns("Geändert am").Visible = False
            '.Columns("Sachbearbeiter").Visible = False



            .Columns("IndexZkteing").Visible = False
            .Columns("AufschubkontoNr").Visible = False
            .Columns("Aufschubfälligkeit").Visible = False
            .Columns("DateiNameAufschub").Visible = False
            .Columns("Belegdaten").Visible = False

            If dt Is Nothing Then Exit Sub
            For Each r As DataRow In dt.Rows
                Dim steuerpflichtigTMP = r("Steuerpflichtig")
                If RECHNUNG.ForceSteuerschlüssel IsNot Nothing Then
                    steuerpflichtigTMP = (RECHNUNG.ForceSteuerschlüssel > 0)
                End If
                dgvOfferteDetailsUebersicht.Rows.Add(r("LeistungsNr"), r("LeistungsBez"), r("Anzahl"), r("Preis"), r("BerechnungsartNr"), DBNull.Value, DBNull.Value, DBNull.Value, steuerpflichtigTMP,
                                DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value, r("BerechnungsartPosInkludiert"))



            Next

            For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
                '  Try : If (r.Cells("BerechnungsartNr").Value = 8) And r.Cells("Anzahl").Value > 1 Then r.Cells("Anzahl").Value = 1
                ' Catch ex As Exception : End Try
                Try : r.Cells("Preis").ReadOnly = (r.Cells("BerechnungsartNr").Value = 8)
                Catch ex As Exception : End Try
            Next
            przRefreshDGV_Positionen()

            '   loaded = True
            loaded = loadedtmp
        End With

    End Sub


    Sub initDGVRechnungenPositionen()
        Dim loadedtmp = loaded

        Try
            Dim steuerPflichtigerBetrag As Double = 0
            Dim steuerFreierBetrag As Double = 0
            Dim Abfertigungskosten As Double = 0
            Dim vorzeichen = 1 'If(RECHNUNG.Vorzeichen = "-", -1, 1)
            With dgvRechnungenPositionen
                .Rows.Clear()

                If RECHNUNG Is Nothing Then loaded = loadedtmp : Exit Sub
                '  MsgBox(RECHNUNG.POSITIONEN.Count)
                For Each POS In RECHNUNG.POSITIONEN
                    If .Columns.Count > 0 Then
                        If POS.Anzahl > 0 And POS.Preis <> 0 Then 'HIER WIRD GEFILTERT --> Nur wo etwas zu verrechnen ist!


                            'If RECHNUNG.Steuersatz_Proz = 0 Then
                            '    .Rows.Add(POS.LeistungsNr & " " & POS.LeistungsBez, POS.Anzahl, POS.Preis, 0, (If(POS.SteuerfreierBetrag, 0) + If(POS.SteuerpflichtigerBetrag, 0)), POS.AufschubkontoNr)
                            'Else
                            '    .Rows.Add(POS.LeistungsNr & " " & POS.LeistungsBez, POS.Anzahl, POS.Preis, POS.SteuerpflichtigerBetrag, POS.SteuerfreierBetrag, POS.AufschubkontoNr)
                            'End If


                            .Rows.Add(POS.LeistungsNr & " " & POS.LeistungsBez, POS.Anzahl, POS.Preis * vorzeichen, If(POS.SteuerpflichtigerBetrag = 0, "", POS.SteuerpflichtigerBetrag * vorzeichen), If(POS.SteuerfreierBetrag = 0, "", POS.SteuerfreierBetrag * vorzeichen), POS.AufschubkontoNr)

                            If CBool(POS.Steuerpflichtig) Then
                                steuerPflichtigerBetrag += POS.SteuerpflichtigerBetrag
                            Else
                                steuerFreierBetrag += POS.SteuerfreierBetrag
                            End If

                            If CBool(SQL.DLookup("[Abfertigungskosten]", "Leistungen", "[LeistungsNr]=" & POS.[LeistungsNr], "FMZOLL", False)) Then

                                Abfertigungskosten += VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(POS.[SteuerpflichtigerBetrag], RECHNUNG.Währungscode, "EUR")
                                Abfertigungskosten += VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(POS.[SteuerfreierBetrag], RECHNUNG.Währungscode, "EUR")

                            End If
                        End If
                    End If
                Next
                .ClearSelection()
            End With

            RECHNUNG.Steuersatz_Proz = If(txtSteuersatz._value, 0)
            RECHNUNG.Abfertigungskosten = Abfertigungskosten * vorzeichen

            steuerFreierBetrag *= vorzeichen
            steuerPflichtigerBetrag *= vorzeichen
            steuerFreierBetrag *= vorzeichen

            Dim steuerBetrag As Double = 0
            If RECHNUNG.Steuersatz_Proz <> 0 Then
                steuerBetrag = steuerPflichtigerBetrag * RECHNUNG.Steuersatz_Proz
                RECHNUNG.SteuerpflichtigerGesamtbetrag = steuerPflichtigerBetrag + steuerBetrag
                RECHNUNG.SteuerfreierGesamtbetrag = steuerFreierBetrag
            Else
                '  txtSteuerFreierBetrag._value = steuerFreierBetrag + steuerPflichtigerBetrag
                ' txtSteuerpflichtigerBetrag._value = 0
                RECHNUNG.SteuerpflichtigerGesamtbetrag = 0
                RECHNUNG.SteuerfreierGesamtbetrag = steuerFreierBetrag + steuerPflichtigerBetrag
            End If


            vorzeichen = If(cboRgGS.SelectedIndex = 1, -1, 1)

            txtSteuerFreierBetrag._value = steuerFreierBetrag * vorzeichen
            txtSteuerpflichtigerBetrag._value = steuerPflichtigerBetrag * vorzeichen
            txtSteuerBetrag._value = steuerBetrag * vorzeichen
            txtGesamtsumme._value = (steuerFreierBetrag + steuerPflichtigerBetrag + steuerBetrag) * vorzeichen

            ' txtSteuerFreierBetrag._value = steuerFreierBetrag
            '  txtSteuerpflichtigerBetrag._value = steuerPflichtigerBetrag

            ' RECHNUNG.SteuerpflichtigerGesamtbetrag = steuerPflichtigerBetrag
            ' RECHNUNG.SteuerfreierGesamtbetrag = steuerFreierBetrag
            txtText.Text = cFakturierung.przRechnungstextTXT(RECHNUNG, SPEDBUCH) 'Das war vorher unter przBerechneRAPos
            txtTextZZ.Text = cFakturierung.przRechnungstextZZ(RECHNUNG) 'Das war vorher unter przBerechneRAPos

            '   przBerechneRAPos("")


        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
        loaded = loadedtmp
    End Sub



    Private Sub dgvOfferteDetailsUebersicht_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs) Handles dgvOfferteDetailsUebersicht.CellValueChanged
        If Not loaded Then Exit Sub
        przRefreshDGV_Positionen()
    End Sub

    Sub przRefreshDGV_Positionen()

        RECHNUNG.POSITIONEN.Clear()
        If RECHNUNG Is Nothing Then Exit Sub 'OrElse RECHNUNG.RK_ID <= 0 Then Exit Sub
        Try
            If dgvOfferteDetailsUebersicht.Columns IsNot Nothing AndAlso dgvOfferteDetailsUebersicht.Columns("LeistungsNr") IsNot Nothing Then dgvOfferteDetailsUebersicht.Sort(dgvOfferteDetailsUebersicht.Columns("LeistungsNr"), System.ComponentModel.ListSortDirection.Ascending)
        Catch ex As Exception

        End Try


        Try
            For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
                If r.Cells("Anzahl").Value IsNot DBNull.Value AndAlso Not IsNumeric(r.Cells("Anzahl").Value) Then r.Cells("Anzahl").Value = 0
                If r.Cells("Preis").Value IsNot DBNull.Value AndAlso Not IsNumeric(r.Cells("Preis").Value) Then r.Cells("Preis").Value = 0

                ' If r.Cells("Anzahl").Value IsNot DBNull.Value AndAlso r.Cells("Anzahl").Value > 0 Then
                Dim POS As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                POS.LeistungsNr = r.Cells("LeistungsNr").Value
                POS.LeistungsBez = If(r.Cells("LeistungsBez").Value, "")
                '    POS.IndexZkteing = r.Cells("IndexZkteing").Value
                POS.BerechnungsartNr = r.Cells("BerechnungsartNr").Value
                POS.Preis = If(r.Cells("Preis").Value Is DBNull.Value, 0, CDbl(r.Cells("Preis").Value.ToString.Replace(".", "")))
                POS.Anzahl = If(r.Cells("Anzahl").Value Is DBNull.Value, 0, r.Cells("Anzahl").Value)


                If POS.Anzahl = 0 And POS.BerechnungsartNr = 8 And POS.Preis <> 0 Then
                    POS.Preis = 0 'Wenn Anzahl =0 bei Berart 8, dann Preis auch 0
                End If

                Dim vorzeichen = 1 'If(RECHNUNG.Vorzeichen = "-", -1, 1)
                POS.Preis *= vorzeichen
                'MsgBox(RECHNUNG.Steuersatz_Proz)


                '  POS.Steuerpflichtig = r.Cells("Steuerpflichtig").Value
                initSteuerbetraege(RECHNUNG, POS)

                'If (RECHNUNG.Steuersatz_Proz <> 0) And CBool(SQL.DLookup("Steuerpflichtig", "Leistungen", "[LeistungsNr] = '" & POS.LeistungsNr & "'", "FMZOLL")) Then ' Steuersatz muss ungleich 0 sein, damit der Betrag steuerpflichtig wird
                '    POS.SteuerpflichtigerBetrag = POS.Preis * POS.Anzahl
                '    POS.Steuerpflichtig = True
                'Else
                '    POS.SteuerfreierBetrag = POS.Preis * POS.Anzahl
                '    POS.Steuerpflichtig = False
                'End If



                ' POS.AufschubkontoNr = r.Cells("AufschubkontoNr").Value
                '   POS.Aufschubfälligkeit = r.Cells("Aufschubfälligkeit").Value
                ' POS.Prüfsumme_berechnen = r.Cells("Prüfsumme berechnen").Value
                ' POS.DateiNameAufschub = r.Cells("DateiNameAufschub").Value
                ' POS.Preisbindung = r.Cells("Preisbindung").Value
                ' POS.Belegdaten = r.Cells("Belegdaten").Value
                ' POS.Fremdwährung = r.Cells("Fremdwährung").Value
                POS.BGebLeistungsNr = r.Cells("BGebLeistungsNr").Value
                POS.BGebProzent = r.Cells("BGebProzent").Value
                '   POS.BGebBgl = r.Cells("BGebBgl").Value
                POS.BGebMinBetrag = r.Cells("BGebMinBetrag").Value

                ' Property RePosZeitstempel As Object = Nothing


                POS.IndexZkteing = DBnullNothing(r.Cells("IndexZkteing").Value, 0)
                POS.AufschubkontoNr = DBnullNothing(r.Cells("AufschubkontoNr").Value)
                POS.Aufschubfälligkeit = DBnullNothing(r.Cells("Aufschubfälligkeit").Value)
                POS.DateiNameAufschub = DBnullNothing(r.Cells("DateiNameAufschub").Value)
                POS.Belegdaten = DBnullNothing(r.Cells("Belegdaten").Value)


                ' Try : If (r.Cells("BerechnungsartNr").Value = 8) And r.Cells("Anzahl").Value > 1 Then r.Cells("Anzahl").Value = 1
                ' Catch ex As Exception : End Try

                Try : r.Cells("Preis").ReadOnly = (r.Cells("BerechnungsartNr").Value = 8)
                Catch ex As Exception : End Try

                'End If
                RECHNUNG.POSITIONEN.Add(POS) 'ALLE HINENLADEN! --> Sonst Proglem mit SVS/VP/KA
            Next
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

        Dim loadedTmp = loaded
        loaded = False
        przBerechneRAPos("")
        loadFormRGPosInOfferte()
        'initDGVOfferteDetailsUebersicht(kdFirmaRechnungAn.KdNr_value, RECHNUNG.OffertenNr)

        'Die 0-Einträge löschen:
        RECHNUNG.POSITIONEN.RemoveAll(Function(p) p.Anzahl = 0 Or p.Preis = 0)
        initDGVRechnungenPositionen()


        'loaded = True
        loaded = loadedTmp

    End Sub
    Function DBnullNothing(o, Optional t = Nothing)
        If o Is DBNull.Value Then Return t
        Return o
    End Function
    Private Sub dgvOffertenSperrliste_KeyDown(sender As Object, e As KeyEventArgs) Handles dgvOffertenSperrliste.KeyDown
        If e.KeyCode = Keys.Tab Then
            dgvOfferteDetailsUebersicht.Focus()
            e.Handled = True
        End If
    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnDatenLaden.Click
        lblAbfNrExists.Visible = False
        lblAbfNr_Err.Visible = False
        lblErrFiliale.Visible = False
        lblErrUnterNr.Visible = False



        If Not IsNumeric(cboFiliale._value) Then lblErrFiliale.Visible = True : Exit Sub
        If Not IsNumeric(txtAbfertigungsnummer.Text) OrElse txtAbfertigungsnummer.Text.Length <> 8 Then lblAbfNr_Err.Visible = True : Exit Sub
        If Not IsNumeric(cboSpedBuchUnterNr._value) Then lblErrUnterNr.Visible = True : Exit Sub




        Dim SPEDBUCH As New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(cboFiliale._value, txtAbfertigungsnummer.Text, cboSpedBuchUnterNr._value) 'txtUnterNr.Text)
        If Not SPEDBUCH.hasEntry Then lblAbfNrExists.Visible = True : Exit Sub

        'Neue Rg; UnterNr noch nicht vergeben; oder Abfertigungsnummer wurde geändert...
        If RECHNUNG Is Nothing OrElse RECHNUNG.UnterNr < 0 OrElse RECHNUNG.AbfertigungsNr <> txtAbfertigungsnummer.Text Then
            RECHNUNG = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang
            RECHNUNG.AbfertigungsNr = SPEDBUCH.AbfertigungsNr
            RECHNUNG.FilialenNr = SPEDBUCH.FilialenNr
            RECHNUNG.UnterNr = RECHNUNG.getMaxRGUnterNr()
            If RECHNUNG.UnterNr > 0 Then
                Label53.Visible = True
                Timer.Enabled = True
            End If
        Else
            RECHNUNG.AbfertigungsNr = SPEDBUCH.AbfertigungsNr
            RECHNUNG.FilialenNr = SPEDBUCH.FilialenNr

        End If
        'RECHNUNG.Firma_ID = If(cboFirma._value = "", -1, cboFirma._value)
        RECHNUNG.Abfertigungsdatum = SPEDBUCH.Abfertigungsdatum

        RECHNUNG.SpeditionsbuchUnterNr = SPEDBUCH.UnterNr

        'rechnung. RechnungsNr As Integer
        'RECHNUNG.RechnungsDatum = Now ???????????????????? WAR ZUVOR AKTIV!!!
        'RECHNUNG.Sammelrechnung = SPEDBUCH.XXXXXXXX
        'RECHNUNG.BelegartenNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.BelegartenKz = SPEDBUCH.XXXXXXXX
        'RECHNUNG.BelegartenBez = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Vorzeichen = SPEDBUCH.XXXXXXXX
        RECHNUNG.BelegNr = If(SPEDBUCH.BelegNr, "")
        If SPEDBUCH.AbsenderKundenNr IsNot Nothing AndAlso SPEDBUCH.AbsenderKundenNr > 0 Then
            Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(SPEDBUCH.AbsenderKundenNr)
            RECHNUNG.AbsenderLandKz = AD.LandKz
            RECHNUNG.AbsenderKundenNr = AD.AdressenNr
            RECHNUNG.AbsenderName_1 = AD.Name_1
            RECHNUNG.AbsenderName_2 = AD.Name_2
            RECHNUNG.AbsenderStraße = AD.Straße
            RECHNUNG.AbsenderOrt = (If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")).ToString.Trim
            RECHNUNG.AbsenderOffertenNr = SPEDBUCH.AbsenderOffertenNr
        Else
            RECHNUNG.AbsenderName_1 = SPEDBUCH.Absender
        End If
        If SPEDBUCH.EmpfängerKundenNr IsNot Nothing AndAlso SPEDBUCH.EmpfängerKundenNr > 0 Then
            Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(SPEDBUCH.EmpfängerKundenNr)
            RECHNUNG.EmpfängerLandKz = AD.LandKz
            RECHNUNG.EmpfängerKundenNr = AD.AdressenNr
            RECHNUNG.EmpfängerName_1 = AD.Name_1
            RECHNUNG.EmpfängerName_2 = AD.Name_2
            RECHNUNG.EmpfängerStraße = AD.Straße
            RECHNUNG.EmpfängerOrt = (If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")).ToString.Trim
            RECHNUNG.EmpfängerOffertenNr = SPEDBUCH.EmpfängerOffertenNr
        Else
            RECHNUNG.EmpfängerName_1 = SPEDBUCH.Empfänger
        End If

        If SPEDBUCH.VermittlerKundenNr IsNot Nothing AndAlso SPEDBUCH.VermittlerKundenNr > 0 Then
            Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(SPEDBUCH.VermittlerKundenNr)
            RECHNUNG.VermittlerLandKz = AD.LandKz
            RECHNUNG.VermittlerKundenNr = AD.AdressenNr
            RECHNUNG.VermittlerName_1 = AD.Name_1
            RECHNUNG.VermittlerName_2 = AD.Name_2
            RECHNUNG.VermittlerStraße = AD.Straße
            RECHNUNG.VermittlerOrt = (If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")).ToString.Trim
            RECHNUNG.VermittlerOffertenNr = SPEDBUCH.VermittlerOffertenNr
        Else
            RECHNUNG.VermittlerName_1 = SPEDBUCH.Vermittler
        End If

        'RECHNUNG.Rechnung_an =
        'RECHNUNG.KundenNrZentrale = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsLandKz = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsKundenNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsName_1 = SPEDBUCH.XXXXXXXX '!!!!
        'RECHNUNG.RechnungsName_2 = SPEDBUCH.XXXXXXXX '!!!!
        'RECHNUNG.RechnungsStraße = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsOrt = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsUstIdKz = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsUstIdNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RechnungsUstIdGeprüft = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Lastschrift = SPEDBUCH.
        'RECHNUNG.Kunden_SVS = SPEDBUCH.XXXXXXXX '!!!!-
        'RECHNUNG.Steuerschlüssel = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Steuersatz_Proz = SPEDBUCH.XXXXXXXX '!!!! %
        RECHNUNG.LKW_Kennzeichen = SPEDBUCH.LKW_Kennzeichen
        'txtRohmasse   SPEDBUCH.Rohmasse
        RECHNUNG.WährungsNr = SPEDBUCH.Währungsschlüssel
        RECHNUNG.Wert = SPEDBUCH.Rechnungsbetrag
        '    RECHNUNG.Umrechnungskurs = "EUR"
        RECHNUNG.Packstücke_und_Warenbezeichnung = SPEDBUCH.Packstücke
        RECHNUNG.Vermerk = SPEDBUCH.Vermerk
        'RECHNUNG.Anlage_1 = SPEDBUCH.XXXXXXXX '!!!!
        ' RECHNUNG.Anlage_2 = SPEDBUCH.XXXXXXXX '!!!!
        ' RECHNUNG.Anlage_3 = SPEDBUCH.XXXXXXXX '!!!!
        ' RECHNUNG.Anlage_4 = SPEDBUCH.XXXXXXXX '!!!!
        ' RECHNUNG.Anlage_5 = SPEDBUCH.XXXXXXXX '!!!!
        ' RECHNUNG.Anlage_6 = SPEDBUCH.XXXXXXXX '!!!!
        'RECHNUNG.OffertenNr = SPEDBUCH.o
        'RECHNUNG.Vorlageprovision_Proz = SPEDBUCH.XXXXXXXX '!!!!%
        'RECHNUNG.Kreditaufwendungen_Proz = SPEDBUCH.XXXXXXXX '!!!!%
        'RECHNUNG.Besonderheiten = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Vorkasse = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Text = SPEDBUCH.XXXXXXXX
        'RECHNUNG.SteuerpflichtigerGesamtbetrag = SPEDBUCH.XXXXXXXX
        'RECHNUNG.SteuerfreierGesamtbetrag = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Status = SPEDBUCH.XXXXXXXX
        'RECHNUNG.DruckDatumZeit = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Abfertigungskosten = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Vorkosten = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Erlös = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Buchungsjahr = SPEDBUCH.XXXXXXXX
        ' RECHNUNG.Währungscode = SPEDBUCH.XXXXXXXX
        RECHNUNG.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
        'RECHNUNG.Trdin = SPEDBUCH.XXXXXXXX
        'RECHNUNG.KartenNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RefFilialenNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RefAbfertigungsNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.RefUnterNr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Notiz = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Zucker_MRN_Nr = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Zucker_MRN_Datum = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Zucker_Aufschub = SPEDBUCH.XXXXXXXX
        'RECHNUNG.ReErfZeitstempel = SPEDBUCH.XXXXXXXX
        'RECHNUNG.Nettozahlungsziel = SPEDBUCH.XXXXXXXX
        '  RECHNUNG.Firma_ID = SPEDBUCH.XXXXXXXX
        RECHNUNG.SpeditionsbuchUnterNr = SPEDBUCH.UnterNr
        RECHNUNG.ErfassungsNr = SPEDBUCH.ErfassungsNr
        RECHNUNG.AvisiererKundenNr = SPEDBUCH.AvisiererKundenNr
        RECHNUNG.Avisierer = SPEDBUCH.Avisierer
        'RECHNUNG.EMailRechnungstext = SPEDBUCH.XXXXXXXX
        RECHNUNG.AvisoID = SPEDBUCH.AvisoID

        If SPEDBUCH.Grenzstelle IsNot Nothing Then
            If SPEDBUCH.Grenzstelle.Replace("???", "") = "" Then
                If RECHNUNG.AvisoID IsNot Nothing Then
                    Dim Zollstelle = SQL.DLookup("Zollstelle", "AVISO", "AvisoID='" & SPEDBUCH.AvisoID & "'", "AVISO")
                    '                    RECHNUNG.Grenze = SQL.getValueTxtBySql("SELECT [basncd_name] FROM basncd WHERE basncd_dstnr='" & If(Zollstelle, "") & "' ", "ATLAS")
                    RECHNUNG.Grenze = SQL.getValueTxtBySql("SELECT [Description] FROM tbl_DY_ZollDE_C0141_Zollstellen WHERE  Code='" & If(Zollstelle, "") & "' AND  ((StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE())) ", "FMZOLL")


                End If
            Else
                Select Case SPEDBUCH.Grenzstelle
                    Case "SUB" : RECHNUNG.Grenze = "Suben"
                    Case "WAI" : RECHNUNG.Grenze = "Waidhaus"
                    Case "SBG" : RECHNUNG.Grenze = "Bad Reichenhall"
                    Case "NKD" : RECHNUNG.Grenze = "Nickelsdorf"
                    Case "SFD" : RECHNUNG.Grenze = "Spielfeld"
                End Select
            End If
        End If
        If RECHNUNG.Grenze = String.Empty Then RECHNUNG.Grenze = SQL.getValueTxtBySql("SELECT TOP 1 isnull([Grenzstelle],'')   FROM [Filialen]  where FilialenNr='" & RECHNUNG.FilialenNr & "'", "FMZOLL")


        If SPEDBUCH.SendungID IsNot Nothing AndAlso IsNumeric(SPEDBUCH.SendungID) AndAlso SPEDBUCH.SendungID > 0 Then
            Dim SND As New VERAG_PROG_ALLGEMEIN.cSendungen(SPEDBUCH.SendungID)
            SND.LOAD_HANDLING()
            RECHNUNG.Handling = ""
            If SND.HANDLING IsNot Nothing Then
                For Each s In SND.HANDLING
                    RECHNUNG.Handling &= If(RECHNUNG.Handling = "", "", vbNewLine) & s.sndhdg_nr
                Next
            End If
        End If

        initDGVAnhaenge()

        cboRechnungAn.Focus()
        initRg_Anhaenhe_Default(RECHNUNG, SPEDBUCH)
        initRECHNUNG()
        Me.SPEDBUCH = SPEDBUCH
        initKdAtrNr()
        initFirma() ' wegen EV-VZ
    End Sub


    Sub initDGVAnhaenge()
        With dgvAnhaenge

            .Rows.Clear()
            If SPEDBUCH IsNot Nothing AndAlso SPEDBUCH.AvisoID IsNot Nothing AndAlso SPEDBUCH.SendungID IsNot Nothing Then
                Dim dt = SQL.loadDgvBySql("SELECT [anh_docId],[anh_id],[anh_Art],[anh_Name] FROM [tblAvisoAnhaenge] where (anh_SendungsId='" & SPEDBUCH.SendungID & "' OR (anh_AvisoId='" & SPEDBUCH.AvisoID & "' AND anh_SendungsId is null))", "AVISO")

                If dt IsNot Nothing Then
                    For Each r In dt.Rows
                        .Rows.Add(0, r("anh_Art"), r("anh_Name"), r("anh_docId"), r("anh_id"))
                    Next
                End If
            End If
            RECHNUNG.LOAD_ANHAENGE()

            If RECHNUNG IsNot Nothing AndAlso RECHNUNG.ANHAENGE IsNot Nothing Then
                '-----------------------------
                'ANHÄNGE OHNE AVISO-BEZUG LADEN:
                '-----------------------------
                For Each RG_AH In RECHNUNG.ANHAENGE
                    If RG_AH.anhId <= 0 Then
                        .Rows.Add(0, "", RG_AH.Bezeichnung, RG_AH.dsId, RG_AH.anhId)
                    End If
                Next
                '-----------------------------

                '-----------------------------
                'ANHÄNGE SELEKTIEREN
                '-----------------------------
                For Each RG_AH In RECHNUNG.ANHAENGE
                    For Each r As DataGridViewRow In .Rows
                        If r.Cells("clmnDsId").Value = RG_AH.dsId Or r.Cells("clmnAnhId").Value = 0 Then 'anh_id = 0 --> Anhang ohne AVISO-Bezug
                            DirectCast(r.Cells("optAnhSel"), DataGridViewCheckBoxCell).Value = -1
                        End If
                    Next
                Next
                '-----------------------------
            End If

        End With
        dgvAnhaenge.ClearSelection()
    End Sub
    Sub getDataFromSpedbuch_SHOW()
        txtAbfertigungsart.Text = ""
        txtAbfertigungsanzahl.Text = ""
        txtPositionAnzahl.Text = ""

        If Not IsNumeric(cboFiliale._value) Then Exit Sub
        If Not IsNumeric(txtAbfertigungsnummer.Text) OrElse txtAbfertigungsnummer.Text.Length <> 8 Then Exit Sub
        If Not IsNumeric(cboSpedBuchUnterNr._value) Then Exit Sub

        SPEDBUCH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(cboFiliale._value, txtAbfertigungsnummer.Text, cboSpedBuchUnterNr._value) 'txtUnterNr.Text)
        If SPEDBUCH IsNot Nothing And SPEDBUCH.hasEntry Then
            txtAbfertigungsart.Text = SPEDBUCH.Abfertigungsart & " " & (SQL.getValueTxtBySql("SELECT isnull([Abfertigungsbezeichnung],'')  FROM [Abfertigungsarten] WHERE Abfertigungsart ='" & SPEDBUCH.Abfertigungsart & "'", "FMZOLL"))
            txtAbfertigungsanzahl.Text = SPEDBUCH.Abfertigungsanzahl
            If SPEDBUCH.Vermerk.Contains("Pos-Anzahl: ") And IsNumeric(SPEDBUCH.Vermerk.Replace("Pos-Anzahl: ", "")) Then
                txtPositionAnzahl.Text = CInt(SPEDBUCH.Vermerk.Replace("Pos-Anzahl: ", ""))
            End If
        End If
    End Sub

    Sub initRg_Anhaenhe_Default(ByRef RECHNUNG, SPEDBUCH)
        If RECHNUNG IsNot Nothing Then
            Select Case RECHNUNG.Firma_ID
                Case 26 ' VERAG-UNISPED LTD
                    RECHNUNG.Anlage_1 = ""
                    RECHNUNG.Anlage_2 = ""
                    RECHNUNG.Anlage_3 = ""
                    RECHNUNG.Anlage_4 = ""
                    RECHNUNG.Anlage_5 = ""
                Case 4 ' VERAG AG (DE)
                    'RECHNUNG.Anlage_1 = "" wird befüllt
                    RECHNUNG.Anlage_2 = ""
                    RECHNUNG.Anlage_3 = ""
                    RECHNUNG.Anlage_4 = ""
                    RECHNUNG.Anlage_5 = ""
                Case Else
                    If SPEDBUCH IsNot Nothing Then
                        Select Case SPEDBUCH.Abfertigungsart
                            Case "26", "27", "38"
                                If If(RECHNUNG.Anlage_1, String.Empty) = String.Empty Then RECHNUNG.Anlage_1 = "Zollbelege"
                            Case "5", "6"
                                If If(RECHNUNG.Anlage_1, String.Empty) = String.Empty Then RECHNUNG.Anlage_1 = ""
                            Case "7"
                                If If(RECHNUNG.Anlage_1, String.Empty) = String.Empty Then RECHNUNG.Anlage_1 = ""
                            Case "19"
                                If If(RECHNUNG.Anlage_1, String.Empty) = String.Empty Then RECHNUNG.Anlage_1 = ""
                            Case "9" 'Leihgeld
                                If If(RECHNUNG.Anlage_1, String.Empty) = String.Empty Then RECHNUNG.Anlage_1 = "Auszahlungsquittung"
                                If If(RECHNUNG.Anlage_2, String.Empty) = String.Empty Then RECHNUNG.Anlage_2 = "Auftrag"
                                If If(RECHNUNG.Anlage_3, String.Empty) = String.Empty Then RECHNUNG.Anlage_3 = "Passkopie"
                            Case Else
                                If If(RECHNUNG.Anlage_1, String.Empty) = String.Empty Then RECHNUNG.Anlage_1 = "Zollbelege"
                                If If(RECHNUNG.Anlage_2, String.Empty) = String.Empty Then RECHNUNG.Anlage_2 = "Lief.-Rechn."
                                If If(RECHNUNG.Anlage_3, String.Empty) = String.Empty Then RECHNUNG.Anlage_3 = "Präferenzz./Original"
                                If If(RECHNUNG.Anlage_4, String.Empty) = String.Empty Then RECHNUNG.Anlage_4 = ""
                                If If(RECHNUNG.Anlage_5, String.Empty) = String.Empty Then RECHNUNG.Anlage_5 = ""
                        End Select
                    End If
            End Select

        End If

    End Sub


    Private Sub btnAbsenderEuro_Click(sender As Object, e As EventArgs) Handles btnAbsenderEuro.Click
        cboRechnungAn.changeItem("1")
    End Sub

    Private Sub btnEmpfaengerEuro_Click(sender As Object, e As EventArgs) Handles btnEmpfaengerEuro.Click
        cboRechnungAn.changeItem("2")
    End Sub

    Private Sub btnAuftraggeberEuro_Click(sender As Object, e As EventArgs) Handles btnAuftraggeberEuro.Click
        cboRechnungAn.changeItem("3")
    End Sub

    Private Sub btnAvisiererEuro_Click(sender As Object, e As EventArgs) Handles btnAvisiererEuro.Click
        cboRechnungAn.changeItem("4")
    End Sub


    Private Sub cboFirma_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFirma.SelectedIndexChanged
        Dim errCOlor = Color.Red
        pnlTop.BackColor = Color.FromArgb(0, 54, 128)
        pic.BackgroundImage = Nothing

        cboWaehrungUmrechnung.changeItem("EUR")
        Select Case cboFirma._value
            Case 1 : pic.BackgroundImage = My.Resources.Verag_AG_Logo
                pnlTop.BackColor = Color.FromArgb(0, 54, 128)
            Case 4 : pic.BackgroundImage = My.Resources.Verag_AG_Logo_DE
                pnlTop.BackColor = Color.FromArgb(0, 54, 128)
            Case 7 : pic.BackgroundImage = My.Resources.Atilla_big_med
                pnlTop.BackColor = Color.FromArgb(192, 0, 0) : errCOlor = Color.Yellow
            Case 11 : pic.BackgroundImage = My.Resources.Verag_Customs_Service_GMBH_Logo
                pnlTop.BackColor = Color.Teal
            Case 20 : pic.BackgroundImage = My.Resources.IMEX_LOGO_simple
                pnlTop.BackColor = Color.FromArgb(250, 120, 0) : errCOlor = Color.DarkRed

                'UNISPED:
            Case 21 : pic.BackgroundImage = My.Resources.Unisped_logo
                pnlTop.BackColor = Color.FromArgb(192, 0, 0) : errCOlor = Color.DarkRed
            Case 22 : pic.BackgroundImage = My.Resources.Unisped_DE_logo
                pnlTop.BackColor = Color.FromArgb(192, 0, 0) : errCOlor = Color.DarkRed
            Case 23 : pic.BackgroundImage = My.Resources.Unisped_ZS_logo
                pnlTop.BackColor = Color.FromArgb(192, 0, 0) : errCOlor = Color.DarkRed

            Case 24 : pic.BackgroundImage = My.Resources.ambar_boarder
                pnlTop.BackColor = Color.FromArgb(0, 120, 120) : errCOlor = Color.DarkRed
            'Case 23 : pic.BackgroundImage = My.Resources.FrontOfficeSUB_Horizontal
            '    pnlTop.BackColor = Color.FromArgb(0, 120, 120) : errCOlor = Color.DarkRed
            Case 17 : pic.BackgroundImage = My.Resources.FrontOfficeSUB_Horizontal
                pnlTop.BackColor = Color.FromArgb(192, 0, 0) : errCOlor = Color.DarkRed


            Case 26 : pic.BackgroundImage = My.Resources.VERAG_UNISPED_Logo
                pnlTop.BackColor = Color.FromArgb(192, 0, 0) : errCOlor = Color.DarkRed
                cboWaehrungUmrechnung.changeItem("GBP")
            Case Else : pic.BackgroundImage = Nothing
                pnlTop.BackColor = Color.Gray : errCOlor = Color.White

        End Select


        cboRgGS.BackColor = pnlTop.BackColor
        '     Panel2.BackColor = pnlTop.BackColor
        lblErrFiliale.ForeColor = errCOlor
        lblErrUnterNr.ForeColor = errCOlor
        lblAbfNr_Err.ForeColor = errCOlor

        '    Exit Sub

        If cboFirma._value <> "" Then
            FIRMA = New VERAG_PROG_ALLGEMEIN.cFirmen(cboFirma._value)
            lblFirma1.Text = FIRMA.Firma_Bez
            lblFirma2.Text = If(FIRMA.Firma_Straße, "")
            lblFirma3.Text = If(FIRMA.Firma_Ort, "")
            'Try

            '    Dim stmBLOBData As New MemoryStream(DirectCast(FIRMA.Firma_Logo, Byte()))
            '    pic.BackgroundImage = Image.FromStream(stmBLOBData)
            'Catch ex As Exception
            '    ' MsgBox(ex.Message)
            'End Try

        Else
            lblFirma1.Text = "-"
            lblFirma2.Text = "-"
            lblFirma3.Text = "-"
            FIRMA = Nothing
        End If

        initRg_Anhaenhe_Default(RECHNUNG, SPEDBUCH)
    End Sub


    Private Sub cboFiliale_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFiliale.SelectedIndexChanged
        initFirma()
    End Sub

    Sub initFirma()
        Select Case cboFiliale._value
            Case "4805" : cboFirma.changeItem(11) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 11
            Case "4801", "4802" : cboFirma.changeItem(7) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 7
            Case "5501" : cboFirma.changeItem(20) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 20
''   Case "4819" : cboFirma.changeItem(4) : RECHNUNG.Firma_ID = 4

            Case "5601" : cboFirma.changeItem("") : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = -1 'UNISPED
            Case "7001" : cboFirma.changeItem("") : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = -1 'UK oder AG
            Case "7002", "7003" : cboFirma.changeItem("26") : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 26 'UK AWOR oder UNISPED
            'Case "7002" : cboFirma.changeItem(26) : RECHNUNG.Firma_ID = 26 'UK oder AG
            Case "5701" : cboFirma.changeItem(24) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 24'AMBAR
            Case "5801" : cboFirma.changeItem(17) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 17 'FRONT-OFFICE

            Case Else
                If SPEDBUCH IsNot Nothing AndAlso SPEDBUCH.Abfertigungsart = 38 Then 'EV-VZ
                    cboFirma.changeItem(11) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 11
                Else
                    cboFirma.changeItem(1) : If RECHNUNG IsNot Nothing Then RECHNUNG.Firma_ID = 1
                End If
        End Select

        Dim FIRMATMP = VERAG_PROG_ALLGEMEIN.cAllgemein.getFirmaFromFiliale2(cboFiliale._value)
        kdFirmaRechnungAn._UseFIRMA = FIRMATMP
        If cboFiliale._value = "5701" AndAlso VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AMBAR_ALLE_RECHNUNGSEMPFÄNGER", "SDL") Then kdFirmaRechnungAn._UseFIRMA = Nothing
        kdFirmaAbsender._UseFIRMA = FIRMATMP
        kdFirmaAuftraggeber._UseFIRMA = FIRMATMP
        kdFirmaEmpfaenger._UseFIRMA = FIRMATMP
        kdFirmaAvisierer._UseFIRMA = FIRMATMP
    End Sub

    Sub getValues()
        If Not allowGetValues Then Exit Sub

        '   RECHNUNG.RK_ID As Integer
        'RECHNUNG.FilialenNr As Integer
        'RECHNUNG.AbfertigungsNr As Integer
        'RECHNUNG.UnterNr As Integer
        'RECHNUNG.Abfertigungsdatum As Date
        'RECHNUNG.RechnungsNr As Integer
        '    RECHNUNG.RechnungsDatum As Date
        '   RECHNUNG.Umrechnungskurs = 1

        Dim zahlbar = ""

        Select Case cboRgGS.SelectedIndex
            Case 0 : RECHNUNG.[BelegartenKz] = "AR" : RECHNUNG.[BelegartenNr] = 70 : RECHNUNG.Vorzeichen = "+" : RECHNUNG.BelegartenBez = "Rechnung" : RECHNUNG.Text = cProgramFunctions.isLeerNothing(txtText.Text) : RECHNUNG.TextZZ = cProgramFunctions.isLeerNothing(txtTextZZ.Text)
            Case 1 : RECHNUNG.[BelegartenKz] = "AG" : RECHNUNG.[BelegartenNr] = 71 : RECHNUNG.Vorzeichen = "-" : RECHNUNG.BelegartenBez = "Gutschrift" : RECHNUNG.Text = ""
        End Select

        RECHNUNG.Sammelrechnung = cProgramFunctions.isLeerNothing(cboSammelrechnung._value)



        RECHNUNG.RechnungSprache = cboRechnungSprache._value
        If RECHNUNG.RechnungSprache = "" Then RECHNUNG.RechnungSprache = "DE"

        RECHNUNG.BelegNr = txtZollbelegNr.Text

        RECHNUNG.AbsenderKundenNr = kdFirmaAbsender.KdNrNullInt
        RECHNUNG.AbsenderName_1 = cProgramFunctions.isLeerNothing(kdFirmaAbsender.Text) '!!!!
        RECHNUNG.AbsenderName_2 = cProgramFunctions.isLeerNothing(txtAbsenderName2.Text) '!!!!
        RECHNUNG.AbsenderStraße = cProgramFunctions.isLeerNothing(txtAbsenderStrasse.Text)
        RECHNUNG.AbsenderOrt = cProgramFunctions.isLeerNothing(txtAbsenderOrt.Text)
        If kdFirmaAbsender.KdData_ADRESSEN IsNot Nothing Then
            RECHNUNG.AbsenderLandKz = kdFirmaAbsender.KdData_ADRESSEN.LandKz
            'RECHNUNG.AbsenderOffertenNr = cProgramFunctions.isLeerNothing(absen.text)
        End If

        RECHNUNG.EmpfängerKundenNr = kdFirmaEmpfaenger.KdNrNullInt
        RECHNUNG.EmpfängerName_1 = cProgramFunctions.isLeerNothing(kdFirmaEmpfaenger.Text) '!!!!
        RECHNUNG.EmpfängerName_2 = cProgramFunctions.isLeerNothing(txtEmpfeangerName2.Text) '!!!!
        RECHNUNG.EmpfängerStraße = cProgramFunctions.isLeerNothing(txtEmpfaengerStrasse.Text)
        RECHNUNG.EmpfängerOrt = cProgramFunctions.isLeerNothing(txtEmpfaengerOrt.Text)
        If kdFirmaEmpfaenger.KdData_ADRESSEN IsNot Nothing Then
            RECHNUNG.EmpfängerLandKz = kdFirmaEmpfaenger.KdData_ADRESSEN.LandKz
            'RECHNUNG.EmpfängerOffertenNr = cProgramFunctions.isLeerNothing(absen.text)
        End If

        RECHNUNG.VermittlerKundenNr = kdFirmaAuftraggeber.KdNrNullInt
        RECHNUNG.VermittlerName_1 = cProgramFunctions.isLeerNothing(kdFirmaAuftraggeber.Text) '!!!!
        RECHNUNG.VermittlerName_2 = cProgramFunctions.isLeerNothing(txtAuftraggeberName2.Text) '!!!!
        RECHNUNG.VermittlerStraße = cProgramFunctions.isLeerNothing(txtAuftragggeberStrasse.Text)
        RECHNUNG.VermittlerOrt = cProgramFunctions.isLeerNothing(txtAuftragggeberOrt.Text)
        If kdFirmaAuftraggeber.KdData_ADRESSEN IsNot Nothing Then
            RECHNUNG.VermittlerLandKz = kdFirmaAuftraggeber.KdData_ADRESSEN.LandKz
            'RECHNUNG.VermittlerOffertenNr = cProgramFunctions.isLeerNothing(absen.text)

        End If

        RECHNUNG.Rechnung_an = cProgramFunctions.isLeerNothing(cboRechnungAn._value) '!!!!
        RECHNUNG.KundenNrZentrale = cProgramFunctions.isLeerNothing(txtRechnungAnBuKdNr.Text)
        RECHNUNG.RechnungsKundenNr = kdFirmaRechnungAn.KdNrNullInt
        If kdFirmaRechnungAn.KdData_ADRESSEN IsNot Nothing Then
            RECHNUNG.RechnungsName_1 = cProgramFunctions.isLeerNothing(kdFirmaRechnungAn.KdData_ADRESSEN.Name_1) '!!!!
            RECHNUNG.RechnungsName_2 = cProgramFunctions.isLeerNothing(kdFirmaRechnungAn.KdData_ADRESSEN.Name_2) '!!!!
        Else
            RECHNUNG.RechnungsName_1 = cProgramFunctions.isLeerNothing(kdFirmaRechnungAn.Text) '!!!!
            RECHNUNG.RechnungsName_2 = cProgramFunctions.isLeerNothing(txtRechnungAnName2.Text) '!!!!
        End If
        RECHNUNG.RechnungsStraße = cProgramFunctions.isLeerNothing(txtRechnungAnStrasse.Text)
        RECHNUNG.RechnungsOrt = cProgramFunctions.isLeerNothing(txtRechnungAnOrt.Text)
        RECHNUNG.RechnungsName_AdressZusatz = (txtRechnungAnZusatz.Text)
        RECHNUNG.RechnungsUstIdKz = cProgramFunctions.isLeerNothing(txtRechnungAnUIDKz.Text)
        RECHNUNG.RechnungsUstIdNr = cProgramFunctions.isLeerNothing(txtRechnungAnUIDNr.Text)
        If kdFirmaRechnungAn.KdData_ADRESSEN IsNot Nothing Then
            RECHNUNG.RechnungsLandKz = kdFirmaRechnungAn.KdData_ADRESSEN.LandKz
            RECHNUNG.RechnungsUstIdGeprüft = kdFirmaRechnungAn.KdData_ADRESSEN.UstIdGeprüft
        End If
        If kdFirmaRechnungAn.KdData_KUNDE IsNot Nothing Then
            If cboFirma._value <> "" Then
                If cboFirma._value = 11 Then ' Bei VERAG Customs Service GmbH --> kein Bankeinzug
                    RECHNUNG.Lastschrift = False
                Else
                    RECHNUNG.Lastschrift = kdFirmaRechnungAn.KdData_KUNDE.Lastschrift
                End If
            End If
            RECHNUNG.Kunden_SVS = kdFirmaRechnungAn.KdData_KUNDE.SVS
            RECHNUNG.Vorlageprovision_Proz = kdFirmaRechnungAn.KdData_KUNDE.Vorlageprovision '!!!!%
            RECHNUNG.Kreditaufwendungen_Proz = kdFirmaRechnungAn.KdData_KUNDE.Kreditaufwendungen '!!!!%
            RECHNUNG.Besonderheiten = kdFirmaRechnungAn.KdData_KUNDE.Besonderheiten
            RECHNUNG.Vorkasse = kdFirmaRechnungAn.KdData_KUNDE.Vorkasse
            RECHNUNG.Nettozahlungsziel = kdFirmaRechnungAn.KdData_KUNDE.Zahlungsziel
        End If



        RECHNUNG.Steuerschlüssel = cProgramFunctions.isLeerNothing(cboSteuerschlüssel._value)
        '  MsgBox("txtSteuersatz._value" & txtSteuersatz._value)
        RECHNUNG.Steuersatz_Proz = cProgramFunctions.isLeerNothing(txtSteuersatz._value) '!!!! %
        RECHNUNG.LKW_Kennzeichen = cProgramFunctions.isLeerNothing(txtBefoerderungsmittel.Text) '!!!!

        RECHNUNG.WährungsNr = cProgramFunctions.isLeerNothing(cboWaehrung._value) '?????????????????
        RECHNUNG.Währungscode = cProgramFunctions.isLeerNothing(cboWaehrungUmrechnung._value) '?????????????????
        If RECHNUNG.Währungscode Is Nothing Then RECHNUNG.Währungscode = "EUR"
        If RECHNUNG.WährungsNr Is Nothing Then RECHNUNG.WährungsNr = 900



        RECHNUNG.Wert = cProgramFunctions.isLeerNothingDbl(txtWarenwert._value) '????????????????? 

        ' RECHNUNG.Umrechnungskurs = cProgramFunctions.isLeerNothing(XXXXXXXXX.text)--> Erst beim Erstellen?? '?????????????????

        ' If RECHNUNG.Umrechnungskurs Is Nothing Then RECHNUNG.Umrechnungskurs = 1
        RECHNUNG.Packstücke_und_Warenbezeichnung = cProgramFunctions.isLeerNothing(txtSendungsdaten.Text) '!!!!
        RECHNUNG.Grenze = cProgramFunctions.isLeerNothing(txtGrenze.Text) '!!!!
        RECHNUNG.Vermerk = txtVermerk.Text
        RECHNUNG.Anlage_1 = cProgramFunctions.isLeerNothing(cboAnlage1.Text) '!!!!
        RECHNUNG.Anlage_2 = cProgramFunctions.isLeerNothing(cboAnlage2.Text) '!!!!
        RECHNUNG.Anlage_3 = cProgramFunctions.isLeerNothing(cboAnlage3.Text) '!!!!
        RECHNUNG.Anlage_4 = cProgramFunctions.isLeerNothing(cboAnlage4.Text) '!!!!
        RECHNUNG.Anlage_5 = cProgramFunctions.isLeerNothing(cboAnlage5.Text) '!!!!
        RECHNUNG.Anlage_6 = cProgramFunctions.isLeerNothing(cboAnlage6.Text) '!!!!

        RECHNUNG.Handling = cProgramFunctions.isLeerNothing(rtbHandling.Text)


        'RECHNUNG.SteuerpflichtigerGesamtbetrag = cProgramFunctions.isLeerNothing(steuer.text)
        'RECHNUNG.SteuerfreierGesamtbetrag = cProgramFunctions.isLeerNothing(XXXXXXXXX.text)

        RECHNUNG.Status = 0
        'RECHNUNG.DruckDatumZeit = nothicProgramFunctions.isLeerNothing(XXXXXXXXX.text) DRUCK!!!!
        '   RECHNUNG.Buchungsjahr = cProgramFunctions.isLeerNothing(XXXXXXXXX.text) DRUCK!!!!

        RECHNUNG.Abfertigungskosten = Abfertigungskosten_Berechnen()

        RECHNUNG.Vorkosten = Vorkosten_Berechnen()

        RECHNUNG.Erlös = RECHNUNG.Abfertigungskosten - RECHNUNG.Vorkosten
        '  RECHNUNG.Währungscode = cProgramFunctions.isLeerNothing(cboWaehrung._value) '????????
        If Not cbxAdmin.Checked Then
            RECHNUNG.Sachbearbeiter = cProgramFunctions.isLeerNothing(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME)
            RECHNUNG.FakturierungsGruppe = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_fakturierungsgruppe
        End If

        ' RECHNUNG.Trdin = cProgramFunctions.isLeerNothing(XXXXXXXXX.text) '????????
        ' RECHNUNG.KartenNr = cProgramFunctions.isLeerNothing(XXXXXXXXX.text) '????????
        RECHNUNG.RefFilialenNr = cProgramFunctions.isLeerNothing(cboFilialeRef._value) '????????
        RECHNUNG.RefAbfertigungsNr = cProgramFunctions.isLeerNothing(txtAbfertigungsnummerRef.Text) '????????
        RECHNUNG.RefUnterNr = cProgramFunctions.isLeerNothing(txtUnterNrRef.Text) '????????
        RECHNUNG.Notiz = cProgramFunctions.isLeerNothing(cboRechnungNotiz.Text)
        ' RECHNUNG.Zucker_MRN_Nr = cProgramFunctions.isLeerNothing(XXXXXXXXX.text)
        ' RECHNUNG.Zucker_MRN_Datum = cProgramFunctions.isLeerNothing(XXXXXXXXX.text)
        ' RECHNUNG.Zucker_Aufschub = cProgramFunctions.isLeerNothing(XXXXXXXXX.text)
        RECHNUNG.ReErfZeitstempel = Now
        RECHNUNG.Firma_ID = If(cboFirma._value = "", -1, cboFirma._value)
        RECHNUNG.SpeditionsbuchUnterNr = cProgramFunctions.isLeerNothing(cboSpedBuchUnterNr._value)
        RECHNUNG.ErfassungsNr = txtErfassungsnummer.Text

        RECHNUNG.AvisiererKundenNr = kdFirmaAvisierer.KdNrNullInt
        RECHNUNG.Avisierer = cProgramFunctions.isLeerNothing(kdFirmaAvisierer.Text)
        '  RECHNUNG.EMailRechnungstext = cProgramFunctions.isLeerNothing(XXXXXXXXX.text)
        RECHNUNG.AvisoID = cProgramFunctions.isLeerNothing(txtAvisoId.Text)

        RECHNUNG.KdAuftragsNr = cProgramFunctions.isLeerNothing(txtKdAuftragsNr.Text)

        If RECHNUNG.Abfertigungsdatum < CDate("01.01.2000") Then RECHNUNG.Abfertigungsdatum = Now

        If dgvOffertenSperrliste.SelectedRows.Count > 0 Then RECHNUNG.OffertenNr = dgvOffertenSperrliste.SelectedRows(0).Cells("OffertenNr").Value 'Wenn mehrfachauswahl möcglich-> Ändern

        getValues_ANHAENGE()
    End Sub
    Sub getValues_ANHAENGE()
        Try

            RECHNUNG.ANHAENGE.Clear()

            For Each r As DataGridViewRow In dgvAnhaenge.Rows

                If r.Cells("optAnhSel") IsNot Nothing AndAlso r.Cells("optAnhSel").Value Then
                    Dim ANH As New VERAG_PROG_ALLGEMEIN.cRechnungsausgangAnhaenge
                    ANH.dsId = r.Cells("clmnDsId").Value
                    ANH.anhId = r.Cells("clmnAnhId").Value
                    ANH.Bezeichnung = r.Cells("clmnBezeichnung").Value
                    RECHNUNG.ANHAENGE.Add(ANH)
                End If
            Next

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Function Abfertigungskosten_Berechnen() As Double
        Abfertigungskosten_Berechnen = 0

        For Each POS In RECHNUNG.POSITIONEN
            If POS.Preis IsNot Nothing AndAlso IsNumeric(POS.Preis) AndAlso POS.Preis <> 0 Then
                If CBool(SQL.getValueTxtBySql("SELECT isnull([Abfertigungskosten],0)  FROM [Leistungen] where LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL")) Then
                    Abfertigungskosten_Berechnen += POS.SteuerpflichtigerBetrag 'fktEuro(![SteuerpflichtigerBetrag], Me![Währungscode], "EUR")
                    Abfertigungskosten_Berechnen += POS.SteuerfreierBetrag
                    'Me![Abfertigungskosten] = Me![Abfertigungskosten] + fktEuro(![SteuerfreierBetrag], Me![Währungscode], "EUR")
                End If

            End If
        Next
    End Function


    Function Vorkosten_Berechnen() As Double
        Dim vk = SQL.getValueTxtBySql("SELECT isnull([Preis],0) FROM [Vorkosten]  where FilialenNr='" & RECHNUNG.FilialenNr & "' and AbfertigungsNr='" & RECHNUNG.AbfertigungsNr & "' and UnterNr='" & RECHNUNG.SpeditionsbuchUnterNr & "'", "FMZOLL")
        If IsNumeric(vk) Then Return CDbl(vk) Else Return 0
    End Function










    Private Sub przBerechneRAPos(ByRef strProzedur As String)
        loaded = False
        Dim boolFehler As Boolean

        Dim varAbfertigungskosten As Object
        Dim varVorkosten As Object

        'WANN WELCHES EVENT AUSLÖSEN??????????????????
        getValues()
        '  If RECHNUNG.RK_ID <= 0 Then Exit Sub
        If RECHNUNG.FilialenNr <= 0 Then Exit Sub
        If RECHNUNG.AbfertigungsNr <= 0 Then Exit Sub
        If RECHNUNG.UnterNr < 0 Then Exit Sub


        For Each POS In RECHNUNG.POSITIONEN
            If False Then

                If POS.BerechnungsartNr = 9 Then 'Berechnung lt. Basistarif
                    If POS.Preis IsNot Nothing Then
                        POS.Preis = Nothing
                        POS.Anzahl = Nothing
                        POS.SteuerpflichtigerBetrag = 0
                        POS.SteuerfreierBetrag = 0
                    End If
                End If

            End If
            If If(POS.Anzahl, 0) < 0 Then ' falls Anzahl negativ ist
                POS.Anzahl *= -1
            End If
        Next


        Call przSVSRVS(RECHNUNG)      ' SVS/RVS errechnen
        '  Call przSKR()         ' SKR errechnen
        'RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang
        RECHNUNG.RechnungSprache = cboRechnungSprache._value
        Call przVL(RECHNUNG)          ' Vorlageprovision errechnen
        Call przKapitalbereitstellung(RECHNUNG) 'Kapitalbereitstellung errechnen

        ' boolFehler = fktBGeb(RECHNUNG.[RK_ID], RECHNUNG.Steuersatz_Proz, RECHNUNG.[Sammelrechnung], RECHNUNG.[BelegartenNr]) ' Bearbeitungsgebühr errechnen

        Call przKA(RECHNUNG)          ' Kreditaufwendungen errechnen
        RECHNUNG.Währungscode = cProgramFunctions.isLeerNothing(cboWaehrungUmrechnung._value)
        Call przFixeTaxe(RECHNUNG)    ' Fixe Taxe errechnen
        Call przPP(RECHNUNG)          ' Porto/Papiere errechnen

        Call przBS415(RECHNUNG)       ' Bankspesen errechnen

        'Me![SteuerpflichtigerGesamtbetrag] = 0.0#
        'Me![SteuerfreierGesamtbetrag] = 0.0#
        'Me![Abfertigungskosten] = 0.0#
        'Me![Vorkosten] = 0.0#
        'Me![Erlös] = 0.0#



        '  initDGVRechnungenPositionen()


        'txtText.Text = cFakturierung.przRechnungstext(RECHNUNG) ', zahlbar, MyRichTextBox2.Text)

        ' przRechnungstext()
        'initDGVRechnungenPositionen()  ??????????????
        'Positionsanzeige aktualisieren.

        loaded = True
    End Sub


    Shared Sub przVL(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)
        ' Vorlageprovision errechnen

        Dim curVLPreis As Double
        Dim Vorlageprovision_Berechnungbetrag As Double = 0

        If Not leistungExistsInPos(RECHNUNG, 700, 9) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist

        If If(RECHNUNG.Vorlageprovision_Proz, 0) = 0 Then Exit Sub 'keine Vorlageprovision
        If RECHNUNG.[Vorkasse] Then Exit Sub 'Vorkasse

        For Each POS In RECHNUNG.POSITIONEN
            If Not POS.Preisbindung Then
                If SQL.getValueTxtBySql("SELECT  isnull(Vorlageprovision,0) FROM Leistungen WHERE LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL") Then
                    Vorlageprovision_Berechnungbetrag += POS.[Preis] * POS.Anzahl
                End If
            End If
        Next


        If Vorlageprovision_Berechnungbetrag > 0 Then

            'Sucht, ob BS415 schon vorhanden ist,...
            Dim FindPOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 700 And x.BerechnungsartNr = 9)
            If FindPOS IsNot Nothing Then
                '  FindPOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                FindPOS.LeistungsNr = 700
                FindPOS.BerechnungsartNr = 9
                FindPOS.Steuerpflichtig = False
                If RECHNUNG.RechnungSprache = "DE" Or FindPOS.LeistungsBez Is Nothing Then FindPOS.LeistungsBez = "Vorlageprovision"
                'RECHNUNG.POSITIONEN.Add(FindPOS)
                FindPOS.Anzahl = 1
                FindPOS.Preis = Math.Round(Vorlageprovision_Berechnungbetrag * (RECHNUNG.Vorlageprovision_Proz), 2) 'Int(Vorlageprovision_Berechnungbetrag * (RECHNUNG.Vorlageprovision_Proz) * 10 + 0.5) / 10
                '...und der Wert gesetzt.

                initSteuerbetraege(RECHNUNG, FindPOS)
            End If

        End If

    End Sub


    Shared Sub przKapitalbereitstellung(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)
        ' Vorlageprovision % WIRD VERWENDET!!

        Dim curVLPreis As Double
        Dim Vorlageprovision_Berechnungbetrag As Double = 0

        If Not leistungExistsInPos(RECHNUNG, 751, 9) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist


        If If(RECHNUNG.Vorlageprovision_Proz, 0) = 0 Then Exit Sub 'keine Vorlageprovision
        If RECHNUNG.[Vorkasse] Then Exit Sub 'Vorkasse

        For Each POS In RECHNUNG.POSITIONEN
            If Not POS.Preisbindung Then
                If SQL.getValueTxtBySql("SELECT  isnull(Vorlageprovision,0) FROM Leistungen WHERE LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL") Then
                    Vorlageprovision_Berechnungbetrag += POS.[Preis] * POS.Anzahl
                End If
            End If
        Next


        If Vorlageprovision_Berechnungbetrag > 0 Then

            'Sucht, ob BS415 schon vorhanden ist,...
            Dim FindPOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 751 And x.BerechnungsartNr = 9)

            If FindPOS IsNot Nothing Then
                '  FindPOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                FindPOS.LeistungsNr = 751
                FindPOS.BerechnungsartNr = 9
                FindPOS.Steuerpflichtig = False
                If RECHNUNG.RechnungSprache = "DE" Or FindPOS.LeistungsBez Is Nothing Then FindPOS.LeistungsBez = "Kapitalbereitstellung"
                'RECHNUNG.POSITIONEN.Add(FindPOS)
                FindPOS.Anzahl = 1
                FindPOS.Preis = Math.Round(Vorlageprovision_Berechnungbetrag * (RECHNUNG.Vorlageprovision_Proz), 2) ' Int(Vorlageprovision_Berechnungbetrag * (RECHNUNG.Vorlageprovision_Proz) * 10 + 0.5) / 10
                '...und der Wert gesetzt.

                initSteuerbetraege(RECHNUNG, FindPOS)
            End If

        End If

    End Sub

    Function getNumeric(o) As Double
        If o Is Nothing Then Return 0
        If o Is DBNull.Value Then Return 0
        Return If(IsNumeric(o), o, 0)
    End Function
    Public Function fktBGeb(ByRef lngRK_ID As Long, ByRef sngSteuersatz As Single, ByVal intSammelrechnung As Integer, ByVal intBelegartenNr As Integer) As Boolean
        '---------------------------------------------------------------------------------------
        ' Prozedur  : fktBGeb   (Aufruf in Rechnungserfassung-HF und frmReErfSchn)
        ' Autor     : MSa
        ' Datum     : 27.09.2014
        ' Aufgabe   : Bearbeitungsgebühr berechnen.
        '---------------------------------------------------------------------------------------
        '

        Dim fResult As Boolean
        Dim curBGebBetrag As Double
        Dim curBGebErrBetrag As Double
        Dim curBGebMinBetrag As Double
        Dim fSteuerpflichtig As Boolean
        Dim strLeistungsBez As String


        fResult = False
        Dim FixeTaxePOS = Nothing
        ' Int(Nz([BGebBgl],[Preis]*[Anzahl])*[BGebProzent]*10+0.5)/10 AS BGebErrBetrag

        For Each POS In RECHNUNG.POSITIONEN
            '            Dim BGebErrBetrag As Double = Int(If(If(POS.BGebBgl, 0), If(POS.Preis, 0) * If(POS.Anzahl, 0)) * If(POS.BGebProzent, 0) * 10 + 0.5) / 10
            Dim BGebErrBetrag As Double = Math.Round(If(POS.BGebBgl IsNot Nothing, POS.BGebBgl, getNumeric(POS.Preis) * getNumeric(POS.Anzahl)) * getNumeric(POS.BGebProzent), 2) 'Int(If(POS.BGebBgl IsNot Nothing, POS.BGebBgl, getNumeric(POS.Preis) * getNumeric(POS.Anzahl)) * getNumeric(POS.BGebProzent) * 10 + 0.5) / 10


            curBGebBetrag = 0
            curBGebErrBetrag = BGebErrBetrag        'Errechneten Betrag bereitstellen.
            curBGebMinBetrag = getNumeric(POS.BGebMinBetrag)        'Mindestbetrag bereitstellen.
            'Vorzeichen für Vergleich einstellen.
            If curBGebErrBetrag < 0 Then
                curBGebErrBetrag = 0 - curBGebErrBetrag     'Vorzeichen in Plus ändern.
            End If
            If curBGebMinBetrag < 0 Then
                curBGebMinBetrag = 0 - curBGebMinBetrag     'Vorzeichen in Plus ändern.
            End If
            'Größeren Betrag bereitstellen.
            If curBGebErrBetrag > curBGebMinBetrag Then
                curBGebBetrag = curBGebErrBetrag            'Errechneten Betrag verwenden
            Else
                curBGebBetrag = curBGebMinBetrag            'Mindestbetrag verwenden
            End If
            'Vorzeichen einstellen.
            If POS.Preis < 0 Then
                curBGebBetrag = 0 - curBGebBetrag           'Vorzeichen von Plus in Minus ändern.
            End If

            'Prüfung auf UStV-Rückerstattung.
            If SQL.DLookup("[BGebUStV]", "Leistungen", "[LeistungsNr] = '" & POS.LeistungsNr & "'", "FMZOLL") Then
                curBGebBetrag = 0 - curBGebBetrag           'Vorzeichen wechseln.
            End If
            'ab 20.06.2015 bei Rechnung aus Maut/Diesel-Schnittstelle keine negative Bearbeitungsgebühr ausweisen.
            If intSammelrechnung = 6 And intBelegartenNr = 70 Then
                If curBGebBetrag < 0 Then
                    curBGebBetrag = 0
                End If
            End If


            'WHERE (((RechnungsausgangPositionen.RK_ID)=[prmRK_ID]) AND ((RechnungsausgangPositionen.LeistungsNr)=[prmLeistungsNr]) AND ((RechnungsausgangPositionen.BerechnungsartNr)=[prmBerechnungsartNr]));



            'Sucht, ob Fixetaxe schon vorhanden ist,...
            FixeTaxePOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = POS.LeistungsNr And x.BerechnungsartNr = 1)
            '... sonst wird eine neue Pos eingefügt...
            If FixeTaxePOS IsNot Nothing Then
                '  FixeTaxePOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                FixeTaxePOS.LeistungsNr = 440
                FixeTaxePOS.LeistungsBez = "P.P./Fixe Taxe"
                FixeTaxePOS.BerechnungsartNr = 1


                'Steuerpflichtig/Steuerfrei ermitteln.
                If sngSteuersatz = 0 Then
                    fSteuerpflichtig = False
                Else
                    'LeistungsNr bestimmt Steuerpflicht
                    fSteuerpflichtig = SQL.DLookup("[Steuerpflichtig]", "Leistungen", "[LeistungsNr] = " & POS.[BGebLeistungsNr], "FMZOLL")
                End If
                FixeTaxePOS.Steuerpflichtig = fSteuerpflichtig

                'Leistungsbezeichnung ermitteln.
                FixeTaxePOS.LeistungsBez = SQL.DLookup("[LeistungsBez]", "Leistungen", "[LeistungsNr] = " & POS.[BGebLeistungsNr], "FMZOLL")

            End If
            '...und der Wert gesetzt.
            FixeTaxePOS.Anzahl = 1
            FixeTaxePOS.Preis = curBGebBetrag 'If(If(RECHNUNG.Vorzeichen, False), -1, 1) * FixeTaxe

        Next

        If FixeTaxePOS IsNot Nothing Then
            '  RECHNUNG.POSITIONEN.Add(FixeTaxePOS)

        End If
        ':::::::::::::BEARBEITUNGSGEBÜHR : Evtl zuerst elistungen durchlaufen, dann meherere Bearbgeb,. je nach gekoppelter leistungsnr...????

    End Function



    Private Sub przBerechneWert()
        Try

            Dim varVonWährung As Object
            Dim varNachWährung As Object

            If RECHNUNG.[WährungsNr] Is Nothing Then Exit Sub ' Währungsnummer für Warenwert nicht eingegeben
            If RECHNUNG.[Wert] Is Nothing Then Exit Sub ' Warenwert nicht eingegeben
            If RECHNUNG.[Währungscode] Is Nothing Then Exit Sub ' Währungscode für Rechnung nicht eingegeben

            Dim dt = SQL.loadDgvBySql("SELECT Währungscode, Menge, Eurokurs FROM Währungstabelle WHERE Währungsschlüssel = " & If(RECHNUNG.[WährungsNr], -1) & ";", "FMZOLL")

            If dt Is Nothing OrElse dt.Rows.Count = 0 Then
                MsgBox("Die Währungsnummer " & RECHNUNG.[WährungsNr] & " ist nicht in der Währungstabelle gespeichert.", , "przBerechneWert")
                Exit Sub
            Else
                If RECHNUNG.Währungscode = dt.Rows(0)("Währungscode") Then
                    ' Die Währung für Rechnung und Warenwert ist gleich. Keine Kursumrechnung erforderlich.
                    RECHNUNG.Umrechnungskurs = Nothing
                End If

                If RECHNUNG.Umrechnungskurs IsNot Nothing AndAlso RECHNUNG.Umrechnungskurs <> 0 Then
                    ' Der Mengenfaktor für den Umrechnungskurs muß in der Währungstabelle gespeichert sein.
                    If dt.Rows(0)("Menge") Is DBNull.Value OrElse dt.Rows(0)("Menge") = 0 Then
                        MsgBox("Für die Währungsnummer " & RECHNUNG.[WährungsNr] & " ist in der Währungstabelle keine Mengenangabe gespeichert.", , "przBerechneWert")
                        Exit Sub
                    End If
                    ' Mit dem eingegebenen Umrechnungskurs rechnen.
                    RECHNUNG.[Wert] = Int(RECHNUNG.[Wert] / dt.Rows(0)("Menge") * RECHNUNG.[Umrechnungskurs] + 0.5)
                    RECHNUNG.[WährungsNr] = SQL.DLookup("[Währungsschlüssel]", "Währungstabelle", "Währungscode = '" & RECHNUNG.[Währungscode] & "' ORDER BY Währungsschlüssel DESC", "FMZOLL")
                    RECHNUNG.[Umrechnungskurs] = Nothing
                    Call przBerechneRAPos("Wert_1")
                    Exit Sub
                End If
                If dt.Rows(0)("Eurokurs") Is DBNull.Value OrElse dt.Rows(0)("Eurokurs") = 0 Then
                    ' Eine Umrechnung in EURO ist nicht möglich.
                    Exit Sub
                End If

                Dim dt_Umrechnung = SQL.loadDgvBySql("SELECT Währungsschlüssel, Eurokurs FROM Währungstabelle WHERE Währungscode = '" & If(RECHNUNG.[Währungscode], "") & "'  ORDER BY Währungsschlüssel DESC;", "FMZOLL")
                If dt Is Nothing OrElse dt.Rows.Count > 0 Then
                    ' Die Zielwährung ist nicht in der Währungstabelle enthalten.
                    Exit Sub
                Else
                    If dt_Umrechnung.Rows(0)("Eurokurs") Is Nothing OrElse dt_Umrechnung.Rows(0)("Eurokurs") = 0 Then
                        ' Eine Umrechnung von EURO ist nicht möglich.
                        Exit Sub
                    End If
                    varVonWährung = RECHNUNG.[WährungsNr]
                    varNachWährung = RECHNUNG.[Währungscode]

                    RECHNUNG.[Wert] = Int(VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(RECHNUNG.[Wert], varVonWährung, varNachWährung) + 0.5)
                    RECHNUNG.[WährungsNr] = dt_Umrechnung.Rows(0)("Währungsschlüssel")
                    RECHNUNG.[Umrechnungskurs] = Nothing
                    Call przBerechneRAPos("Wert_2")

                End If
            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Shared Sub przBS415(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)

        ' Banküberweisung/Bankspesen berechnen 
        Dim BS415 As Double = 0.0

        '  Dim Bankspesen_DT As DataTable = SQL.loadDgvBySql("SELECT isnull(Kunden.[Bankspesen %],0) as BankspesenProz, Kunden.[Bankspesen Mindestbetrag] FROM Kunden WHERE KundenNr=" & RECHNUNG.RechnungsKundenNr & "", "FMZOLL")
        Dim KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)
        If KD IsNot Nothing Then

            If If(KD.Bankspesen, 0) > 0 Then

                Dim BS415_Berechnungbetrag As Double = 0
                For Each POS In RECHNUNG.POSITIONEN
                    If Not POS.Preisbindung Then
                        If SQL.getValueTxtBySql("SELECT  isnull(BS415,0) FROM Leistungen WHERE LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL") Then
                            BS415_Berechnungbetrag += POS.[Preis] * POS.Anzahl
                        End If
                    End If
                Next
                '  mind??KD
                If BS415_Berechnungbetrag <> 0 Then
                    If BS415_Berechnungbetrag < 0 Then BS415_Berechnungbetrag *= -1
                    BS415 = Int(BS415_Berechnungbetrag * KD.Bankspesen + 0.5)
                End If

            End If
        End If
        If BS415 = 0 Then Exit Sub

        If Not leistungExistsInPos(RECHNUNG, 415, 1) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist


        'Sucht, ob BS415 schon vorhanden ist,...
        Dim BS415POS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 415 And x.BerechnungsartNr = 1)
        '... sonst wird eine neue Pos eingefügt...
        If BS415POS IsNot Nothing Then
            '    BS415POS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
            BS415POS.LeistungsNr = 415
            BS415POS.BerechnungsartNr = 1
            BS415POS.LeistungsBez = "Überweisung/Bankspesen"
            'RECHNUNG.POSITIONEN.Add(BS415POS)
            BS415POS.Anzahl = 1
            BS415POS.Preis = getVorzeichen(RECHNUNG) * BS415
            initSteuerbetraege(RECHNUNG, BS415POS)
        End If
        '...und der Wert gesetzt.
    End Sub

    Shared Sub przFixeTaxe(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)
        Dim FixeTaxe_Berechnungbetrag As Double = 0
        ' Bei Leistungs-Nr 440 und Berechnungs-Code-Nr 9 wird Fixe Taxe berechnet.
        Dim FixeTaxe As Double = 0.0

        If Not leistungExistsInPos(RECHNUNG, 440, 9) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist


        For Each POS In RECHNUNG.POSITIONEN
            If SQL.getValueTxtBySql("SELECT  isnull(FixeTaxe,0) FROM Leistungen WHERE LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL") Then
                FixeTaxe_Berechnungbetrag += POS.[Preis] * POS.Anzahl
            End If
        Next

        If FixeTaxe_Berechnungbetrag <> 0 Then
            If FixeTaxe_Berechnungbetrag < 0 Then
                FixeTaxe_Berechnungbetrag *= -1
            End If
            ' Die Basistabelle ist in der Währung ATS geführt.
            ' Wenn der Basisbetrag auf einer anderen Währung basiert,
            ' wird der Basisbetrag in ATS umgerechnet.  

            FixeTaxe_Berechnungbetrag = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(FixeTaxe_Berechnungbetrag, RECHNUNG.Währungscode, "ATS")
            Select Case FixeTaxe_Berechnungbetrag
                Case Is <= 100
                    FixeTaxe = 61.8
                Case Is <= 300
                    FixeTaxe = 82.4
                Case Is <= 500
                    FixeTaxe = 124
                Case Is <= 1000
                    FixeTaxe = 185
                Case Is <= 5000
                    FixeTaxe = 185
                    FixeTaxe_Berechnungbetrag = FixeTaxe_Berechnungbetrag - 1000
                    While FixeTaxe_Berechnungbetrag > 0
                        FixeTaxe = FixeTaxe + 124
                        FixeTaxe_Berechnungbetrag = FixeTaxe_Berechnungbetrag - 1000
                    End While
                Case Else
                    FixeTaxe = 185 + 124 + 124 + 124 + 124
                    FixeTaxe_Berechnungbetrag = FixeTaxe_Berechnungbetrag - 5000
                    While FixeTaxe_Berechnungbetrag > 0
                        FixeTaxe = FixeTaxe + 61.8
                        FixeTaxe_Berechnungbetrag = FixeTaxe_Berechnungbetrag - 1000
                    End While
            End Select
            ' Die Fixe Taxe ist in der Währung ATS angegeben.
            ' Lautet die Rechnung auf eine andere Währung,
            ' wird die Fixe Taxe auf diese Währung umgerechnet.
            FixeTaxe = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(FixeTaxe, "ATS", RECHNUNG.Währungscode)

        End If


        If FixeTaxe = 0 Then Exit Sub

        'Sucht, ob Fixetaxe schon vorhanden ist,...
        Dim FixeTaxePOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 440 And x.BerechnungsartNr = 9)
        '... sonst wird eine neue Pos eingefügt...
        If FixeTaxePOS IsNot Nothing Then
            '  FixeTaxePOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
            FixeTaxePOS.LeistungsNr = 440
            FixeTaxePOS.LeistungsBez = "P.P./Fixe Taxe"
            FixeTaxePOS.BerechnungsartNr = 9
            '    RECHNUNG.POSITIONEN.Add(FixeTaxePOS)
            '...und der Wert gesetzt.
            FixeTaxePOS.Anzahl = 1
            FixeTaxePOS.Preis = getVorzeichen(RECHNUNG) * FixeTaxe

            initSteuerbetraege(RECHNUNG, FixeTaxePOS)
        End If



    End Sub

    Shared Function getVorzeichen(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Integer
        Return 1
        Return If(RECHNUNG.Vorzeichen = "-", -1, 1)
    End Function


    Shared Sub przKA(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)
        ' Bei Leistungs-Nr 440 und Berechnungs-Code-Nr 9 wird Fixe Taxe berechnet.
        Dim Kreditaufwendungen As Double = 0.0

        If Not leistungExistsInPos(RECHNUNG, 750, 9) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist

        '  Dim Bankspesen_DT As DataTable = SQL.loadDgvBySql("SELECT isnull(Kunden.[Bankspesen %],0) as BankspesenProz, Kunden.[Bankspesen Mindestbetrag] FROM Kunden WHERE KundenNr=" & RECHNUNG.RechnungsKundenNr & "", "FMZOLL")
        Dim KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)
        If KD IsNot Nothing Then
            If RECHNUNG.[Lastschrift] Then Exit Sub 'Lastschrift
            If RECHNUNG.[Vorkasse] Then Exit Sub 'Vorkasse

            If If(KD.Kreditaufwendungen, 0) > 0 Then

                Dim Kreditaufwendungen_Berechnungbetrag As Double = 0
                For Each POS In RECHNUNG.POSITIONEN
                    If Not POS.Preisbindung Then
                        If SQL.getValueTxtBySql("SELECT  isnull(Kreditaufwendungen,0) FROM Leistungen WHERE LeistungsNr='" & POS.LeistungsNr & "'", "FMZOLL") Then
                            Kreditaufwendungen_Berechnungbetrag += POS.[Preis] * POS.Anzahl
                        End If
                    End If
                Next

                If Kreditaufwendungen_Berechnungbetrag <> 0 Then
                    '   MsgBox("1: " & Kreditaufwendungen_Berechnungbetrag)
                    If Kreditaufwendungen_Berechnungbetrag < 0 Then Kreditaufwendungen_Berechnungbetrag *= -1
                    Kreditaufwendungen = Math.Round(Kreditaufwendungen_Berechnungbetrag * KD.Kreditaufwendungen, 2) '(Int(Kreditaufwendungen_Berechnungbetrag * KD.Kreditaufwendungen) * 10 + 0.5) / 10
                End If

            End If
        End If

        If Kreditaufwendungen = 0 Then Exit Sub

        'Sucht, ob Kreditaufwendungen schon vorhanden ist,...
        Dim KreditaufwendungenPOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 750 And x.BerechnungsartNr = 9)
        '... sonst wird eine neue Pos eingefügt...

        If KreditaufwendungenPOS IsNot Nothing Then
            ' KreditaufwendungenPOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
            KreditaufwendungenPOS.LeistungsNr = 750
            If RECHNUNG.RechnungSprache = "DE" Or KreditaufwendungenPOS.LeistungsBez Is Nothing Then KreditaufwendungenPOS.LeistungsBez = "Kreditaufwendungen"
            KreditaufwendungenPOS.BerechnungsartNr = 9
            '            RECHNUNG.POSITIONEN.Add(KreditaufwendungenPOS)

            '...und der Wert gesetzt.
            KreditaufwendungenPOS.Anzahl = 1
            KreditaufwendungenPOS.Preis = getVorzeichen(RECHNUNG) * Kreditaufwendungen
            initSteuerbetraege(RECHNUNG, KreditaufwendungenPOS)
        End If

    End Sub

    Shared Sub initSteuerbetraege(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, ByRef POS As VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen)
        If RECHNUNG.ForceSteuerschlüssel Is Nothing Then
            POS.Steuerpflichtig = 0
            POS.SteuerfreierBetrag = 0
            Dim vorzeichen = 1 'If(RECHNUNG.Vorzeichen = "-", -1, 1)

            If (RECHNUNG.Steuersatz_Proz <> 0) And CBool(SQL.DLookup("Steuerpflichtig", "Leistungen", "[LeistungsNr] = '" & POS.LeistungsNr & "'", "FMZOLL")) Then ' Steuersatz muss ungleich 0 sein, damit der Betrag steuerpflichtig wird
                POS.SteuerpflichtigerBetrag = POS.Preis * POS.Anzahl
                POS.Steuerpflichtig = True
            Else
                POS.SteuerfreierBetrag = POS.Preis * POS.Anzahl
                POS.Steuerpflichtig = False
            End If

            POS.Steuerpflichtig *= vorzeichen
            POS.SteuerfreierBetrag *= vorzeichen
        Else

            POS.Steuerpflichtig = (RECHNUNG.ForceSteuerschlüssel > 0)
            If POS.Steuerpflichtig Then
                POS.SteuerpflichtigerBetrag = POS.Preis * POS.Anzahl
            Else
                POS.SteuerfreierBetrag = POS.Preis * POS.Anzahl
            End If

        End If
    End Sub

    Shared Sub przPP(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)
        ' Berechnung Porto/Papiere

        Dim PapirePorti_Berechnungbetrag As Double = 0
        Dim PapirePorti As Double = 0
        If Not CBool(SQL.DLookup("[PP440]", "Filialen", "[FilialenNr]=" & RECHNUNG.FilialenNr, "FMZOLL", False)) Then
            'If Not CBool(SQL.getValueTxtBySql("SELECT isnull(Filialen.PP440,0) FROM Filialen WHERE Filialen.FilialenNr='" & RECHNUNG.FilialenNr & "'", "FMZOLL")) Then
            'bei dieser Filiale  gibt es keine PP
            Exit Sub
        End If

        If Not leistungExistsInPos(RECHNUNG, 440) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist

        For Each POS In RECHNUNG.POSITIONEN
            If POS.LeistungsNr <> 440 Then
                PapirePorti_Berechnungbetrag += POS.[Preis] * POS.Anzahl
            End If
        Next


        If PapirePorti_Berechnungbetrag < 0 Then PapirePorti_Berechnungbetrag *= -1

        If PapirePorti_Berechnungbetrag > 150 Then
            'Sucht, ob PapirePorti schon vorhanden ist,...
            Dim PapirePortiPOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 440 And If(x.LeistungsBez, "") = "PapirePorti")
            '... sonst wird eine neue Pos eingefügt...
            If PapirePortiPOS IsNot Nothing Then
                'PapirePortiPOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                PapirePortiPOS.LeistungsNr = 440
                PapirePortiPOS.LeistungsBez = "PapirePorti"
                ' RECHNUNG.POSITIONEN.Add(PapirePortiPOS)
                '...und der Wert gesetzt.
                PapirePortiPOS.Anzahl = 1
                '     PapirePortiPOS.Preis = ??????
                initSteuerbetraege(RECHNUNG, PapirePortiPOS)
            End If



        End If



    End Sub

    Shared Sub przSKR(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)



        Dim SKR_Berechnungbetrag As Double = 0
        Dim SKR As Double = 0



        For Each POS In RECHNUNG.POSITIONEN
            If POS.LeistungsNr <> 261 Then
                SKR_Berechnungbetrag += POS.[Preis] * POS.Anzahl
            End If
        Next


        If SKR_Berechnungbetrag < 0 Then SKR_Berechnungbetrag *= -1

        If SKR_Berechnungbetrag > 150 Then
            'Sucht, ob SKR schon vorhanden ist,...
            Dim SKRPOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 261 And x.BerechnungsartNr = 9)
            '... sonst wird eine neue Pos eingefügt...
            If SKRPOS IsNot Nothing Then
                'SKRPOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                SKRPOS.LeistungsNr = 261
                SKRPOS.LeistungsBez = "SKR"
                SKRPOS.BerechnungsartNr = 9
                'RECHNUNG.POSITIONEN.Add(SKRPOS)
                '...und der Wert gesetzt.
                SKRPOS.Anzahl = 1
                '     PapirePortiPOS.Preis = ??????

                initSteuerbetraege(RECHNUNG, SKRPOS)
            End If

        End If




    End Sub

    Shared Function leistungExistsInPos(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, LeistungsNr As Integer, Optional BerechnungsartNr As Object = Nothing)
        Return True

        For Each POS In RECHNUNG.POSITIONEN
            If POS.LeistungsNr = LeistungsNr And If(BerechnungsartNr Is Nothing, True, POS.BerechnungsartNr = BerechnungsartNr) Then
                Return True
            End If
        Next
        Return False
    End Function

    Shared Sub przSVSRVS(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)

        Dim KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)

        If Not KD.SVS Then Exit Sub ' Kunde ist Verzeichtskunde!

        Dim SVSRVS_Berechnungbetrag As Double = 0
        Dim SVSRVS As Double = 0

        If Not leistungExistsInPos(RECHNUNG, 260) Then Exit Sub 'Schauen, ob die Leistung in den Positionen vorhanden ist

        'For Each POS In RECHNUNG.POSITIONEN
        '    If POS.LeistungsNr <> 260 Then
        '        SVSRVS_Berechnungbetrag += POS.[Preis] * POS.Anzahl
        '    End If
        'Next

        Dim ur = If(RECHNUNG.Umrechnungskurs, 1)
        If ur <= 0 Then ur = 1

        SVSRVS_Berechnungbetrag = RECHNUNG.Wert * ur

        If SVSRVS_Berechnungbetrag < 0 Then SVSRVS_Berechnungbetrag *= -1
        '  If SVSRVS_Berechnungbetrag > 150 Then
        'Sucht, ob SVSRVS schon vorhanden ist,...
        Dim SVSRVSPOS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = 260 And x.BerechnungsartNr = 9)
        '... sonst wird eine neue Pos eingefügt...

        If SVSRVSPOS IsNot Nothing Then

            '  SVSRVSPOS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
            SVSRVSPOS.LeistungsNr = 260
            SVSRVSPOS.LeistungsBez = "SVS/RVS"
            SVSRVSPOS.BerechnungsartNr = 9
            SVSRVSPOS.Steuerpflichtig = False
            'RECHNUNG.POSITIONEN.Add(SVSRVSPOS)

            SVSRVSPOS.Anzahl = 1
            ' Dim vorzeichen = If(RECHNUNG.Vorzeichen = "-", -1, 1)
            ' SVSRVSPOS.Preis = cFakturierung.fktSVSRVS(SVSRVS_Berechnungbetrag, "EUR") '= ??????
            If SVSRVS_Berechnungbetrag > 150 Then
                'Dim waehrungCode As String = SQL.getValueTxtBySql("SELECT isnull(Währungscode,'') FROM Währungstabelle WHERE Währungsschlüssel = " & If(RECHNUNG.[WährungsNr], 900) & ";", "FMZOLL")
                'SVSRVSPOS.Preis = cFakturierung.fktSVSRVS(RECHNUNG.Wert * ur, waehrungCode) '*vorzeichen
                SVSRVSPOS.Preis = cFakturierung.fktSVSRVS(SVSRVS_Berechnungbetrag) '*vorzeichen
            Else
                SVSRVSPOS.Preis = 0
            End If

            '...und der Wert gesetzt.
            '  SVSRVSPOS.Anzahl = 1
            '     PapirePortiPOS.Preis = ??????
            '  
            initSteuerbetraege(RECHNUNG, SVSRVSPOS)

            ' End If

        End If


    End Sub



    Sub setError(s, Optional c = Nothing, Optional type = "ERR")
        Label40.Text = s
        Label40.Visible = (s <> "")
        Select Case type
            Case "ERR" : Label40.ForeColor = Color.Red
            Case "WARN" : Label40.ForeColor = Color.DarkOrange
        End Select

        If c IsNot Nothing Then
            Try : DirectCast(c, Control).Focus()
            Catch ex As Exception : End Try
        End If
    End Sub


    Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click

        If Not checkUIDNR() Then Exit Sub

        saveMe()
    End Sub


    Dim WithEvents tGespeichert As New Timer

    Sub setLblGespeichert()
        Label46.Visible = True
        tGespeichert.Enabled = True
    End Sub

    Private Sub tGespeichert_Tick(sender As Object, e As EventArgs) Handles tGespeichert.Tick
        Label46.Visible = False
        tGespeichert.Enabled = False
    End Sub

    Function saveMe() As Boolean
        If cbxAdmin.Checked And cbxAdmin.Visible Then
            'Nix
        Else
            If RECHNUNG.DruckDatumZeit IsNot Nothing Or RECHNUNG.Status <> 0 Then
                Return False
            End If
        End If

        getValues()
        Dim errMsg = ""
        setError(errMsg)

        If RECHNUNG.CHECK_Validation(errMsg, dgvRechnungenPositionen) Then
            If RECHNUNG.SAVE(True) Then
                RECHNUNG.setSPEDBUCH_FAKTURIERT() 'Fakturiert wird in SpedBuch geschrieben

                If SPEDBUCH.hasEntry AndAlso SPEDBUCH.Vermittler = "" Then
                    addVermittlerToSpedbuch()
                End If

                initLblAnzahl()
                SAVED = True
                setLblGespeichert()
                RaiseEvent EVENT_SAVED()
                Return True
            End If
            setError(errMsg,, "WARN")
        Else
            setError(errMsg)
        End If
        Return False
    End Function

    Sub addVermittlerToSpedbuch()
        Try
            Dim VmAd = New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)
            SPEDBUCH.Vermittler = VmAd.Ordnungsbegriff
            SPEDBUCH.VermittlerKundenNr = RECHNUNG.RechnungsKundenNr
            SPEDBUCH.SAVE()
        Catch ex As Exception
            MsgBox("VERMITTLER: " & ex.Message & ex.StackTrace)
        End Try
    End Sub
    Private Sub txtWarenwert_TextChanged(sender As Object, e As EventArgs) Handles txtWarenwert.Leave, cboWaehrung.SelectedIndexChanged, cboWaehrungUmrechnung.SelectedIndexChanged
        If cbxAdmin.Checked OrElse RECHNUNG Is Nothing OrElse RECHNUNG.Status = 0 Then WarenwertUmrechnung()

        lblEUR_1.Text = cboWaehrungUmrechnung.Text
        lblEUR_2.Text = cboWaehrungUmrechnung.Text
        lblEUR_3.Text = cboWaehrungUmrechnung.Text
        lblEUR_4.Text = cboWaehrungUmrechnung.Text

    End Sub

    Sub WarenwertUmrechnung()
        Try
            If RECHNUNG Is Nothing Then Exit Sub
            If cboWaehrung._value = "" Then Exit Sub
            If Not IsNumeric(txtWarenwert._value) Then Exit Sub

            Dim rg_Umrechnung As Double = 1
            Dim euro As Double = txtWarenwert._value
            If cboWaehrung._value <> "900" Then
                Dim kurs = (SQL.getValueTxtBySql("SELECT  TOP 1 isnull([Eurokurs] ,0)  FROM [Währungstabelle]  where Währungsschlüssel='" & cboWaehrung._value & "' AND Eurokurs is not null ", "FMZOLL"))
                If IsNumeric(kurs) AndAlso kurs > 0 Then
                    euro = CDbl(txtWarenwert._value / kurs)
                    rg_Umrechnung /= kurs
                End If
            End If

            Dim umrechnung As Double = euro
            If cboWaehrungUmrechnung._value <> "EUR" Then
                Dim kurs_Umrechnung = CDbl(SQL.getValueTxtBySql("SELECT  TOP 1 isnull([Eurokurs] ,0)  FROM [Währungstabelle]  where Währungscode='" & cboWaehrungUmrechnung._value & "'  ORDER BY Währungsschlüssel DESC", "FMZOLL"))
                umrechnung = CDbl(euro * kurs_Umrechnung)
                rg_Umrechnung *= kurs_Umrechnung
            End If

            RECHNUNG.Umrechnungskurs = If(rg_Umrechnung = 1, Nothing, rg_Umrechnung)
            txtWarenwertUmrechnung._value = umrechnung

            If loaded Then przRefreshDGV_Positionen() 'wegen SVS

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub

    Dim loadedFilAbf = True
    Private Sub txtAbfertigungsnummer_TextChanged(sender As Object, e As EventArgs) Handles txtAbfertigungsnummer.TextChanged, cboFiliale.TextChanged
        If cboFiliale.Text.StartsWith("/") Then
            If cboFiliale.Text.EndsWith("/") And cboFiliale.Text.Contains("-") Then
                Dim t As String = cboFiliale.Text
                t = t.Replace("/", "")
                Dim v() = t.Split("-")
                If v.Length > 1 Then
                    txtAbfertigungsnummer.Text = v(1)

                    loadedFilAbf = False 'damit changeItem kein erneuters laden verursachts
                    cboFiliale.changeItem(v(0))
                    loadedFilAbf = True

                    getFilialeAbfertNUrnterNr(v(0), v(1))

                End If
            End If
        Else
            getFilialeAbfertNUrnterNr(cboFiliale._value, txtAbfertigungsnummer.Text)
        End If
    End Sub

    Sub getFilialeAbfertNUrnterNr(FilialenNr, AbfertigungsNr)
        If Not loadedFilAbf Then Exit Sub
        If FilialenNr <> String.Empty And AbfertigungsNr.Length >= 8 Then
            cboSpedBuchUnterNr.fillWithSQL("SELECT  [UnterNr], convert(varchar(10),[Abfertigungsdatum], 104) + ' | ' + cast(Abfertigungsarten.Abfertigungsart as varchar(2)) + ' ' + Abfertigungsarten.Abfertigungsbezeichnung + '  - ' + isnull(cast(EmpfängerKundenNr as varchar(10)),'') + ' ' + isnull(Empfänger,'') " &
                                           " FROM [Speditionsbuch] inner join Abfertigungsarten on Abfertigungsarten.Abfertigungsart=Speditionsbuch.Abfertigungsart  where FilialenNr='" & FilialenNr & "' and AbfertigungsNr='" & AbfertigungsNr & "'", True, "FMZOLL", False)
            If loaded Then
                If cboSpedBuchUnterNr.Items.Count = 1 Then
                    cboSpedBuchUnterNr.SelectedIndex = 0
                    btnDatenLaden.PerformClick()
                End If
            End If
        Else
            cboSpedBuchUnterNr.Items.Clear()
        End If
    End Sub

    Private Sub txtAbfertigungsnummer_Leave(sender As Object, e As EventArgs) Handles txtAbfertigungsnummer.Leave
        If IsNumeric(txtAbfertigungsnummer.Text) AndAlso txtAbfertigungsnummer.Text.Length <= 6 Then
            txtAbfertigungsnummer.Text = Now.ToString("yy") & CInt(txtAbfertigungsnummer.Text).ToString("000000")
        End If
    End Sub


    Private Sub cboFiliale_Leave(sender As Object, e As EventArgs) Handles cboFiliale.Leave
        If cboFiliale.Text.StartsWith("/") Then
            loadedFilAbf = False 'damit changeItem kein erneuters laden verursachts
            cboFiliale.changeItem(RECHNUNG.FilialenNr)
            loadedFilAbf = True
        End If

        If cboSpedBuchUnterNr.Items.Count = 1 Then
            cboSpedBuchUnterNr.SelectedIndex = 0
        ElseIf cboSpedBuchUnterNr.Items.Count > 1 Then
            cboSpedBuchUnterNr.DroppedDown = True
            cboSpedBuchUnterNr.Focus()
        End If
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click

        If Not checkUIDNR() Then Exit Sub
        saveMe() 'Damit Prüfungen in der Vorschau funktionieren (zT mit DB abhängig -> ReverseCharge)
        getValues()


        cFakturierung.doRechnungsDruck(RECHNUNG,, True,,, getPrinterFromParent)
    End Sub



    Function getRechnungsText() As String
        Dim strText = ""
        Dim dt As DataTable = SQL.loadDgvBySql("SELECT * FROM [Rechnungstexte] where [Text] is not null", "FMZOLL")
        If dt Is Nothing Then Return ""
        For Each r In dt.Rows

            ' Informations- und Werbetexte drucken
            '   Set rstTex = dbs.OpenRecordset("qryRechnungstexte", dbOpenSnapshot)

            If r("Firma_ID") IsNot DBNull.Value Then
                If RECHNUNG.Firma_ID <= 0 Then GoTo Nächste_Textzeile_lesen
                If r("Firma_ID") <> RECHNUNG.Firma_ID Then GoTo Nächste_Textzeile_lesen
            End If
            If r("LandKz") IsNot DBNull.Value Then
                If RECHNUNG.RechnungsLandKz Is Nothing Then GoTo Nächste_Textzeile_lesen
                If r("LandKz") <> RECHNUNG.RechnungsLandKz Then GoTo Nächste_Textzeile_lesen
            End If
            If r("OffertenNr") IsNot DBNull.Value Then
                If RECHNUNG.OffertenNr Is Nothing Then GoTo Nächste_Textzeile_lesen
                If r("OffertenNr") <> RECHNUNG.OffertenNr Then GoTo Nächste_Textzeile_lesen
            End If

            If r("EMailRechnung") IsNot DBNull.Value Then
                If kdFirmaRechnungAn.KdData_ADRESSEN Is Nothing Then GoTo Nächste_Textzeile_lesen
                If kdFirmaRechnungAn.KdData_ADRESSEN.Rechnungsdruck <> 2 Then GoTo Nächste_Textzeile_lesen
                If If(kdFirmaRechnungAn.KdData_ADRESSEN.[E_Mail], "") = "" Then GoTo Nächste_Textzeile_lesen
            End If
            Select Case RECHNUNG.BelegartenNr
                Case "R" 'RECHNUNG
                    If r("DrucksteuerungsKz") Is DBNull.Value OrElse r("DrucksteuerungsKz") = "R" Then
                        strText = strText & r("Text") & vbCrLf
                    End If
                Case "G" 'GUTSCHRIFT
                    If r("DrucksteuerungsKz") Is DBNull.Value OrElse r("DrucksteuerungsKz") = "G" Then
                        strText = strText & r("Text") & vbCrLf
                    End If
            End Select

Nächste_Textzeile_lesen:


        Next
        Return strText
    End Function

    Private Sub dgvRechnungenPositionen_Leave(sender As Object, e As EventArgs) Handles dgvRechnungenPositionen.Leave
        'przBerechneRAPos
    End Sub

    'Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
    '    Try
    '        If keyData = (Keys.Control Or Keys.Add) Then
    '            'RaiseEvent a() : Return True
    '            addItem()
    '            Return True
    '        ElseIf keyData = (Keys.Control Or Keys.Subtract) Then
    '            'RaiseEvent REMOVE(ID) : Return True
    '            removeItem(dgvPositionen.SelectedRows(0).Cells("index").Value)
    '            Return True
    '        ElseIf keyData = Keys.PageUp Then
    '            'RaiseEvent PREV_POS() : Return True
    '            PREV_POS()
    '            Return True
    '        ElseIf keyData = Keys.PageDown Then
    '            'RaiseEvent NEXT_POS() : Return True
    '            NEXT_POS()
    '            Return True
    '        End If
    '    Catch ex As Exception
    '    End Try
    '    Return False
    'End Function

    Dim fired = False
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        Try


            If keyData = (Keys.Control Or Keys.Tab) Then
                If Me.ActiveControl Is cboRechnungAn Then : txtZollbelegNr.Focus() : Return False
                ElseIf Me.ActiveControl Is cboSammelrechnung Then : txtZollbelegNr.Focus() : Return False
                ElseIf Me.ActiveControl.Parent Is pnlRechnungAn Then : txtZollbelegNr.Focus() : Return False
                ElseIf Me.ActiveControl Is txtZollbelegNr Then : dgvOfferteDetailsUebersicht.Focus() : Return False
                ElseIf Me.ActiveControl Is dgvOfferteDetailsUebersicht Then : cboAnlage1.Focus() : Return False
                ElseIf Me.ActiveControl.Parent Is dgvOfferteDetailsUebersicht Then : cboAnlage1.Focus() : Return False
                ElseIf Me.ActiveControl.Name.Contains("cboAnlage") Then : cboSteuerschlüssel.Focus() : Return False
                End If
            End If


            If False Then
                If fired Then Return False
                If keyData = (Keys.Control Or Keys.Tab) Then

                    fired = True
                    Dim thisControl = Me.ActiveControl
                    Dim cnt = 0
                    Do
                        SendKeys.Send("{TAB}") '"{TAB}")

                        Application.DoEvents()
                        If Me.ActiveControl IsNot thisControl Then
                            If Me.ActiveControl Is cboRechnungAn Then fired = False : Return False
                            If Me.ActiveControl Is txtZollbelegNr Then fired = False : Return False
                            If Me.ActiveControl Is dgvOfferteDetailsUebersicht Then fired = False : Return False
                            If Me.ActiveControl Is cboAnlage1 Then fired = False : Return False
                            If Me.ActiveControl Is cboSteuerschlüssel Then fired = False : Return False
                            If Me.ActiveControl Is btnOK Then
                                btnOK.PerformClick()
                                fired = False : Return False
                            End If
                        End If
                        cnt += 1
                        If cnt > 200 Then fired = False : Return False ' zur Sicherheit
                    Loop
                End If
            End If

            If keyData = Keys.F1 Then
                Button7.PerformClick()
            End If
            If keyData = Keys.F2 Then
                Button1.PerformClick()
            End If

            If keyData = Keys.F3 AndAlso cboSammelrechnung._value = 0 Then
                btn.PerformClick()
            End If

            If keyData = (Keys.Control Or Keys.P) Then
                Button4.PerformClick()
            End If

            If keyData = (Keys.Control Or Keys.S) Then

                saveMe()
            End If


            If (keyData = (Keys.Control Or Keys.Add)) Or (keyData = (Keys.Control Or Keys.Return)) Then
                btnNeueUnterNR.PerformClick()
            End If

            If keyData = Keys.PageDown Then
                If saveMe() Then
                    btnNext.PerformClick()
                End If
            End If
            If keyData = Keys.PageUp Then
                If saveMe() Then
                    btnPrev.PerformClick()
                End If
            End If

        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 dgvRechnungenPositionen_SelectionChanged(sender As Object, e As EventArgs) Handles dgvRechnungenPositionen.SelectionChanged
        dgvRechnungenPositionen.ClearSelection()
    End Sub

    Private Sub btnVorauskasseAnzeigen_Click(sender As Object, e As EventArgs) Handles btnVorauskasseAnzeigen.Click
        'If Not btnVorauskasseAnzeigen.Enabled Then Exit Sub
        'Dim VK = VERAG_PROG_ALLGEMEIN.cVorauskasse.LOADByFilialeAbfNr(RECHNUNG.FilialenNr, RECHNUNG.AbfertigungsNr)
        'If VK IsNot Nothing Then
        '    SDL.FormularManagerNEU.OPEN_FORM(SDL.FormularManagerArten.Importaviso_VK, VK.vk_KdNr, {VK.vk_KdNr, Nothing, Nothing, Nothing, "", VK.vk_id})
        'End If

        Dim f As New SDL.frmVorauskasse(RECHNUNG.FilialenNr, RECHNUNG.AbfertigungsNr, Now.AddYears(-1))
        f.Show(Me)
    End Sub

    Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
        Dim bezugsNr = ""
        If RECHNUNG IsNot Nothing Then
            bezugsNr = RECHNUNG.FilialenNr & "/" & RECHNUNG.AbfertigungsNr & ""
        End If
        Dim DakosyRef = SQL.DLookup("tblSnd_DakosyRef", "tblSendungen", "FilialenNr='" & RECHNUNG.FilialenNr & "' and AbfertigungsNr='" & RECHNUNG.AbfertigungsNr & "'", "AVISO", "")
        Dim f As New frmFaktAufschubSuche(bezugsNr, True, DakosyRef)
        If f.ShowDialog(Me) = DialogResult.OK Then
            For Each i In f.Zkteing_Index
                przInsertEUSTZOLL(i)
            Next
        End If
    End Sub


    Sub przInsertEUSTZOLL(Zkteing_Index)
        getValues()
        przRefreshDGV_Positionen()
        Dim Zkteing As New VERAG_PROG_ALLGEMEIN.cZkteing(Zkteing_Index)

        If Zkteing.hasEntry Then
            Dim LeistungsNr = ""
            Dim LeistungsBez = ""
            Select Case Zkteing.LeistungsNr
                Case 20, 77
                    LeistungsNr = 20 ' immer 20
                Case 10, 76, 60
                    LeistungsNr = Zkteing.LeistungsNr
                Case 482
                    LeistungsNr = 482
                    If If(Zkteing.LeistungsBez, "") <> "" Then LeistungsBez = Zkteing.LeistungsBez
            End Select
            'Sucht, ob EUST/ZOLL schon vorhanden ist,...
            Dim ZKteing_POS
            If LeistungsBez <> "" Then
                ZKteing_POS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = LeistungsNr And LeistungsBez = x.LeistungsBez And x.BerechnungsartNr = 8)
            Else
                ZKteing_POS = RECHNUNG.POSITIONEN.Find(Function(x) x.LeistungsNr = LeistungsNr And x.BerechnungsartNr = 8)
                LeistungsBez = SQL.getValueTxtBySql("SELECT LeistungsBez FROM Leistungen WHERE LeistungsNr=" & LeistungsNr, "FMZOLL")
            End If

            If ZKteing_POS Is Nothing Then
                ZKteing_POS = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
                ZKteing_POS.LeistungsNr = LeistungsNr
                If RECHNUNG.RechnungSprache = "DE" Or ZKteing_POS.LeistungsBez Is Nothing Then ZKteing_POS.LeistungsBez = LeistungsBez
                ZKteing_POS.BerechnungsartNr = 8
                RECHNUNG.POSITIONEN.Add(ZKteing_POS)
            End If

            ZKteing_POS.Anzahl = 1
            ZKteing_POS.Preis = Zkteing.Betrag '* If(RECHNUNG.Vorzeichen = "-", -1, 1)
            ZKteing_POS.SteuerfreierBetrag = ZKteing_POS.Preis
            ZKteing_POS.SteuerpflichtigerBetrag = Nothing

            If Zkteing.[AKTO] IsNot Nothing And Zkteing.AOFD IsNot Nothing Then
                ZKteing_POS.AufschubkontoNr = SQL.isleernothing(If(Zkteing.[AOFD], "") & "-" & CInt(Zkteing.[AKTO]))
            Else
                ZKteing_POS.AufschubkontoNr = Nothing
            End If
            ZKteing_POS.Aufschubfälligkeit = Zkteing.[Fälligkeitsdatum]
            ZKteing_POS.DateiNameAufschub = Zkteing.Dateiname
            ZKteing_POS.IndexZkteing = Zkteing.Index

            ZKteing_POS.Belegdaten = If(Zkteing.Registriernummer, "")
            If ZKteing_POS.Belegdaten.ToString.Length > 30 Then ZKteing_POS.Belegdaten = ZKteing_POS.Belegdaten.ToString.Substring(0, 30)
            'If Zkteing.Fälligkeitsdatum IsNot Nothing AndAlso IsDate(Zkteing.Fälligkeitsdatum) Then
            '    ZKteing_POS.Belegdaten &= " " & CDate(Zkteing.Fälligkeitsdatum).ToShortDateString
            'End If
            'If ZKteing_POS.Belegdaten.ToString.Length > 30 Then ZKteing_POS.Belegdaten = ZKteing_POS.Belegdaten.ToString.Substring(0, 30)
            '...und der Wert gesetzt.

        End If

        loadFormRGPosInOfferte()
        ' initDGVRechnungenPositionen()
        przRefreshDGV_Positionen()

    End Sub



    Private Sub btnNeueUnterNR_Click(sender As Object, e As EventArgs) Handles btnNeueUnterNR.Click
        saveMe()
        newRECHNUNG()
    End Sub

    Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
        lblUIDErr.Visible = False
        lblUIDOK.Visible = False
        'Dim UID As New 
        getValues()
        Dim UID = VERAG_PROG_ALLGEMEIN.cUIDPruefung.doUIDPruefung(RECHNUNG.RechnungsKundenNr)
        If UID IsNot Nothing Then

            If UID.uid_valid Then
                lblUIDOK.Visible = True
            Else
                lblUIDErr.Visible = True
            End If

            initRechnungKd(True)
            getValues()
        End If
    End Sub

    Private Sub FlatButton3_Click(sender As Object, e As EventArgs) Handles FlatButton3.Click
        If kdFirmaRechnungAn.KdNr > 0 Then
            Me.Cursor = Cursors.WaitCursor
            Dim zoll As New SDL.frmKundenUebersichtZOLL(kdFirmaRechnungAn.KdNr)
            zoll.ShowDialog(Me)
            initRechnungKd()
            Me.Cursor = Cursors.Default
        End If
    End Sub

    Private Sub FlatButton1_Click(sender As Object, e As EventArgs) Handles FlatButton1.Click
        showKd(kdFirmaAbsender)
    End Sub

    Sub showKd(kd As VERAG_PROG_ALLGEMEIN.KdSearchBox)
        If kd.KdNr > 0 Then
            Me.Cursor = Cursors.WaitCursor
            Dim zoll As New SDL.frmKundenUebersichtZOLL(kd.KdNr)
            zoll.ShowDialog(Me)
            Me.Cursor = Cursors.Default
        End If
    End Sub

    Private Sub FlatButton4_Click(sender As Object, e As EventArgs) Handles FlatButton4.Click
        showKd(kdFirmaAuftraggeber)
    End Sub

    Private Sub FlatButton5_Click(sender As Object, e As EventArgs) Handles FlatButton5.Click
        showKd(kdFirmaAvisierer)
    End Sub

    Private Sub FlatButton2_Click(sender As Object, e As EventArgs) Handles FlatButton2.Click
        showKd(kdFirmaEmpfaenger)
    End Sub

    Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
        saveMe()
        initRECHNUNG(nachstehende_RK_ID)
    End Sub

    Private Sub btnPrev_Click(sender As Object, e As EventArgs) Handles btnPrev.Click
        saveMe()
        initRECHNUNG(vorherige_RK_ID)
    End Sub
    ' RECHNUNG.DruckDatumZeit
    Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
        If Not checkUIDNR() Then Exit Sub
        If RECHNUNG.Sammelrechnung <> "0" Then MsgBox("Nur bei Einzelrechnung möglich!") : Exit Sub
        If RECHNUNG.Status <> 0 OrElse vbYes = MsgBox("Möchten Sie das PDF erstellen?" & vbNewLine & "Es wird eine Rechnungsnummer vergeben, die Rechnung gilt somit als gedruckt und kann nicht mehr bearbeitet werden.", vbYesNoCancel) Then
            If RECHNUNG.Status <> 0 OrElse saveMe() Then
                If cFakturierung.doRechnungsDruck(RECHNUNG,,, 3,, getPrinterFromParent, cbxOriginalPrint.Checked) Then
                    initRECHNUNG()
                    RaiseEvent SOMETHING_CHANGED(-1)
                End If
            End If
        End If
        cbxOriginalPrint.Checked = False
    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        If RECHNUNG.Sammelrechnung <> "0" Then MsgBox("Nur bei Einzelrechnung möglich!") : Exit Sub
        If RECHNUNG.Status <> 0 OrElse vbYes = MsgBox("Möchten Sie die Rechnung drucken?" & vbNewLine & "Es wird eine Rechnungsnummer vergeben, die Rechnung kann nicht mehr bearbeitet werden.", vbYesNoCancel) Then
            If RECHNUNG.Status <> 0 OrElse saveMe() Then

                ' Anhänge sichern, falls geändert
                If RECHNUNG.RK_ID > 0 And RECHNUNG.Status <> 0 Then
                    getValues_ANHAENGE()
                    RECHNUNG.SAVE_ANHAENGE(RECHNUNG.RK_ID)
                End If

                Dim PARAM_printZollbeleg = VERAG_PROG_ALLGEMEIN.cAllgemein.PARAMS.GET_PARAMETER_VALUE_BOOL("FAKTURIERUNG_PRINT_Zollbeleg")
                If cFakturierung.doRechnungsDruck(RECHNUNG,,, 0,, getPrinterFromParent, cbxOriginalPrint.Checked,, PARAM_printZollbeleg) Then
                    initRECHNUNG()
                    RaiseEvent SOMETHING_CHANGED(-1)
                End If
            End If
        End If
        cbxOriginalPrint.Checked = False
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If vbYes = MsgBox("Möchten Sie diese ungedruckte Rechnung wirklich löschen?", vbYesNoCancel) Then
            If RECHNUNG IsNot Nothing AndAlso RECHNUNG.Status = 0 Then
                RECHNUNG.DELETE()
                RaiseEvent EVENT_DELETED()
            End If
        End If
    End Sub

    Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click, Button16.Click
        If Not checkUIDNR() Then Exit Sub
        If RECHNUNG.Sammelrechnung <> "0" Then MsgBox("Nur bei Einzelrechnung möglich!") : Exit Sub
        If RECHNUNG.Status <> 0 OrElse saveMe() Then
            ' Anhänge sichern, falls geändert
            If RECHNUNG.RK_ID > 0 And RECHNUNG.Status <> 0 Then
                getValues_ANHAENGE()
                RECHNUNG.SAVE_ANHAENGE(RECHNUNG.RK_ID)
            End If

            'RG-Druck - Mail (+Kopie)
            Dim RG_DRUCK = 2
            If sender Is Button16 Then
                RG_DRUCK = 5
            End If

            Dim f As New frmFaktEmail(RECHNUNG, SPEDBUCH, If(cbxOriginalPrint.Visible, cbxOriginalPrint.Checked, Nothing), RG_DRUCK)
            f.ShowDialog(Me)
            initRECHNUNG()
            RaiseEvent SOMETHING_CHANGED(-1)

            'If cFakturierung.doRechnungsDruck(RECHNUNG,,, 2,, getPrinterFromParent) Then
            '    initRECHNUNG()
            '    RaiseEvent SOMETHING_CHANGED(-1)
            'End If

        End If
        cbxOriginalPrint.Checked = False
    End Sub

    Function getPrinterFromParent()
        Try
            If Me.FindForm IsNot Nothing Then
                If Me.FindForm.GetType Is GetType(frmAbrechnungsMaske) Then
                    Return DirectCast(Me.FindForm, frmAbrechnungsMaske).cboPrinter.Text
                End If
            End If
        Catch ex As Exception
        End Try
        Return ""
    End Function

    Private Sub lblDruckaufheben_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles lblDruckaufheben.LinkClicked
        If RECHNUNG.Sammelrechnung = 0 Then
            'saveMe()
            RECHNUNG.DruckDatumZeit = Nothing
            RECHNUNG.SAVE()
            initRECHNUNG()
            RaiseEvent SOMETHING_CHANGED(RECHNUNG.RK_ID)
        Else
            MsgBox("Nur bei Einzelrechnung möglich!")
        End If
    End Sub

    Private Sub cboRgGS_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRgGS.SelectedIndexChanged
        Select Case cboRgGS.SelectedIndex
            Case 0
                cboRgGS.BackColor = pnlTop.BackColor
            Case 1
                cboRgGS.BackColor = Color.LightGreen
        End Select

        initDGVRechnungenPositionen()
    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        If kdFirmaRechnungAn.KdNr_value > 0 Then
            Dim f As New frmKundenUebersichtZOLL(kdFirmaRechnungAn.KdNr)
            f.selectedTAB = "Offerte"
            f.ShowDialog(Me)
            If vbYes = MsgBox("Sollen die Offerte/Preise neu geladen werden (Rg.-Positionen werden zurückgesetzt)?", vbYesNoCancel) Then
                initDGVOffertenSperrliste(kdFirmaRechnungAn.KdNr_value, IIf(veragKunde = -1, False, True))
            End If
        End If
    End Sub

    Private Sub Button12_Click(sender As Object, e As EventArgs) Handles Button12.Click
        If sbLeistung._value <> "" Then
            Dim leistungTmp = sbLeistung._value
            Dim TMPPos = New VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen
            TMPPos.LeistungsNr = leistungTmp
            TMPPos.LeistungsBez = SQL.DLookup("[LeistungsBez]", "Leistungen", "[LeistungsNr] = " & leistungTmp, "FMZOLL")
            TMPPos.BerechnungsartNr = SQL.DLookup("[BerechnungsartNr]", "Leistungen", "[LeistungsNr] = " & leistungTmp, "FMZOLL")


            RECHNUNG.POSITIONEN.Add(TMPPos)
            sbLeistung._value = ""
            'aktualisieren:

            'przBerechneRAPos("")

            przBerechneRAPos("")
            loadFormRGPosInOfferte()
            initDGVRechnungenPositionen()
            'przRefreshDGV_Positionen() 'false
            'initDGVRechnungenPositionen()
            '   przRefreshDGV_Positionen()
            '  przRefreshDGV_Positionen()

            sbLeistung.SET_VALUE("")

            ' loadFormRGPosInOfferte(False)
        End If
    End Sub

    Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
        If Not IsNumeric(cboFiliale._value) Then Exit Sub
        If Not IsNumeric(txtAbfertigungsnummer.Text) Then Exit Sub
        If Not IsNumeric(cboSpedBuchUnterNr._value) Then Exit Sub

        Dim s As New SDL.frmNacherfassungNEU()
        Dim frmNacherfassung As New frmNacherfassungNEU
        frmNacherfassung.srchFiliale = cboFiliale._value
        frmNacherfassung.srchAbfertigungsnummer = txtAbfertigungsnummer.Text
        frmNacherfassung.srchUnterNr = cboSpedBuchUnterNr._value
        frmNacherfassung.ShowDialog(Me)
    End Sub

    Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
        ContextMenuStrip2.Show(Cursor.Position)
    End Sub

    Private Sub GutschriftAusRechnungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GutschriftAusRechnungToolStripMenuItem.Click
        If vbYes = MsgBox("Soll aus den Daten der Rechnung wirklich eine neue Gutschrift erstellt werden?", vbYesNoCancel) Then

            saveMe()
            'Dim RECHNUNG2 = RECHNUNG
            RECHNUNG.RK_ID = -1
            RECHNUNG.RechnungsNr = -1
            'RECHNUNG.RechnungsNr = Nothing
            RECHNUNG.UnterNr = RECHNUNG.getMaxRGUnterNr()
            RECHNUNG.RechnungsDatum = Nothing
            RECHNUNG.DruckDatumZeit = Nothing
            RECHNUNG.Status = 0
            RECHNUNG.Trdin = 0

            RECHNUNG.[BelegartenKz] = "AG" : RECHNUNG.[BelegartenNr] = 71 : RECHNUNG.Vorzeichen = "-"
            cboRgGS.SelectedIndex = 1

            dgvOfferteDetailsUebersicht.Columns.Clear()

            '  initDGVRechnungenPositionen()

            przBerechneRAPos("")
            loadFormRGPosInOfferte()


            initDGVRechnungenPositionen()

            ' przRefreshDGV_Positionen()


            cboFiliale.Focus()
            saveMe()
            initRECHNUNG()
            RaiseEvent SOMETHING_CHANGED(RECHNUNG.RK_ID)
        End If
    End Sub



    Sub setBerartValue(row As DataGridViewRow, valuetmp As String)
        For Each r In DirectCast(dgvOfferteDetailsUebersicht.Columns("Berechnungsartnr"), DataGridViewComboBoxColumn).Items
            If r("Berechnungsartnr") = valuetmp Then
                CType(row.Cells("Berechnungsartnr"), DataGridViewComboBoxCell).Value = r("Berechnungsartnr")
            End If
        Next
    End Sub

    'Private Sub dgvOfferteDetailsUebersicht_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles dgvOfferteDetailsUebersicht.CellValidating
    '    'e.Cancel = False
    '    If e.ColumnIndex = 4 Then
    '        dgvOfferteDetailsUebersicht.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = 1
    '    End If
    'End Sub


    Private Sub DataGridView_DataError(ByVal sender As Object, ByVal e As DataGridViewDataErrorEventArgs) Handles dgvOfferteDetailsUebersicht.DataError
        If (e.Context = (DataGridViewDataErrorContexts.Formatting Or DataGridViewDataErrorContexts.PreferredSize)) Then
            e.ThrowException = False
        End If
    End Sub

    Private Sub cboAnlage1_MouseWheel(sender As Object, e As HandledMouseEventArgs) Handles cboAnlage1.MouseWheel, cboAnlage2.MouseWheel, cboAnlage3.MouseWheel, cboAnlage4.MouseWheel, cboAnlage5.MouseWheel, cboAnlage6.MouseWheel
        e.Handled = True 'Scrollen unterbinden
    End Sub

    Private Sub cbxAdmin_CheckedChanged(sender As Object, e As EventArgs) Handles cbxAdmin.CheckedChanged
        If cbxAdmin.Checked Then btnOK.Enabled = True
    End Sub

    Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click, Label51.Click
        If SPEDBUCH IsNot Nothing AndAlso SPEDBUCH.DokumentId_VBD IsNot Nothing Then
            Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(SPEDBUCH.DokumentId_VBD)
            DS.OPEN_SINGLE()
        End If
    End Sub

    Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click, Label50.Click
        If SPEDBUCH IsNot Nothing AndAlso SPEDBUCH.DokumentId_Steuerbeleg IsNot Nothing Then
            Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(SPEDBUCH.DokumentId_Steuerbeleg)
            DS.OPEN_SINGLE()
            If SPEDBUCH.DokumentId_Mitteilung IsNot Nothing Then 'AT
                Dim DS2 As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(SPEDBUCH.DokumentId_Mitteilung)
                DS2.OPEN_SINGLE()
            End If
        End If
    End Sub

    Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
        If cboFiliale._value = "" Then
            MsgBox("Es muss eine Filiale ausgewählt werden")
            Exit Sub
        End If

        Dim dtAbf = SQL.loadDgvBySql("SELECT [Abfertigungsarten].[Abfertigungsart],[Abfertigungsbezeichnung]   FROM [Abfertigungsarten] inner join tblAbfertigungsartenFiliale on  tblAbfertigungsartenFiliale.Abfertigungsart=[Abfertigungsarten].Abfertigungsart  where FilialenNr=" & cboFiliale._value & " order by tblAbfertigungsartenFiliale.Abfertigungsart", "FMZOLL")
        CntxtAbfArt.Items.Clear()

        For Each r In dtAbf.Rows
            Dim tool As New ToolStripMenuItem()
            tool.Text = r("Abfertigungsart") & " - " & r("Abfertigungsbezeichnung")
            tool.Tag = r("Abfertigungsart")
            AddHandler tool.Click, Sub()
                                       ' If vbYes = MsgBox("Möchten Sie einen neuen Speditionsbucheintrag für die Filiale '" & cboFiliale._value & "' erstellen?", vbYesNoCancel) Then
                                       SPEDBUCH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch

                                       Dim Abfertigungsart = r("Abfertigungsart") ' 10

                                       SPEDBUCH.FilialenNr = cboFiliale._value
                                       SPEDBUCH.AbfertigungsNr = VERAG_PROG_ALLGEMEIN.cAllgemein.getMaxPosNrIncrement(SPEDBUCH.FilialenNr, Now.Year)
                                       SPEDBUCH.NewUNTER_NR()

                                       SPEDBUCH.Abfertigungsdatum = Now.Date

                                       SPEDBUCH.Abfertigungsart = Abfertigungsart
                                       SPEDBUCH.Abfertigungsanzahl = 1
                                       SPEDBUCH.SgutKompl = "K"
                                       SPEDBUCH.Zollsystem = "D"

                                       'SPEDBUCH.Vermittler = ""

                                       SPEDBUCH.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME

                                       If SPEDBUCH.SAVE Then
                                           txtAbfertigungsnummer.Text = SPEDBUCH.AbfertigungsNr
                                           txtUnterNr.Text = SPEDBUCH.UnterNr
                                           btnDatenLaden.PerformClick()
                                       End If
                                       '  End If
                                   End Sub
            CntxtAbfArt.Items.Add(tool)
        Next
        CntxtAbfArt.Show(Cursor.Position)

    End Sub

    Function bool_SendAbrechung(sendungsId As Integer, kdNr As Integer, art As String)
        Dim SENDUNG As New VERAG_PROG_ALLGEMEIN.cSendungen(SPEDBUCH.SendungID)
        If SENDUNG IsNot Nothing Then
            SENDUNG.LOAD_ABRECHNUNG()
            For Each AB In SENDUNG.ABRECHNUNG
                If AB.sndabr_abrArt = art And AB.sndabr_wert = "X" Then
                    Select Case AB.sndabr_beteiligter
                        Case "ABS" : If kdNr = SPEDBUCH.AbsenderKundenNr Then Return True
                        Case "AVISIERER" : If kdNr = SPEDBUCH.AvisiererKundenNr Then Return True
                        Case "EMPF" : If kdNr = SPEDBUCH.EmpfängerKundenNr Then Return True
                        Case "FRACHTF" : If kdNr = SPEDBUCH.FrachtführerKundenNr Then Return True
                        Case "AUFTR" : If kdNr = SPEDBUCH.VermittlerKundenNr Then Return True
                    End Select
                End If
            Next
        End If
        Return False
    End Function

    Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
        If kdFirmaRechnungAn.KdNr <= 0 Then Exit Sub
        If dgvOfferteDetailsUebersicht.Rows.Count = 0 Then Exit Sub

        If SPEDBUCH IsNot Nothing And SPEDBUCH.SendungID IsNot Nothing Then
            If If(SPEDBUCH.AtlasBezNrEZA, "") <> "" Then

                If bool_SendAbrechung(SPEDBUCH.SendungID, kdFirmaRechnungAn.KdNr, "EUST") Then
                    loadEUST()
                End If

                If bool_SendAbrechung(SPEDBUCH.SendungID, kdFirmaRechnungAn.KdNr, "ZOLL") Then
                    loadZOLL()
                End If
            End If

            If bool_SendAbrechung(SPEDBUCH.SendungID, kdFirmaRechnungAn.KdNr, "ABFKOST") Then
                loadBerechnungsArt_jePosition()
            End If
        End If

    End Sub

    Sub loadEUST()
        Dim whereKTO = ""
        Select Case cboFirma._value
            Case 20 : whereKTO = " AND AKTO IN ('002719','002718') "
            Case Else : whereKTO = " AND AKTO IN ('006136','006128','3517233') "
        End Select

        'Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        '    Case "IMEX"
        '        whereKTO = " AND AKTO IN ('002719','002718') "
        '    Case Else
        '        whereKTO = " AND AKTO IN ('006136','006128','3517233') "
        'End Select
        Try


            Dim dt As DataTable = SQL.loadDgvBySql("SELECT [Index] FROM [Zkteing] where Bezugsnummer='" & SPEDBUCH.AtlasBezNrEZA & "' AND LeistungsNr IN (20,77) AND [Status] IS NULL " & whereKTO, "FMZOLL")
            For Each r In dt.Rows
                VERAG_PROG_ALLGEMEIN.cZkteing.UPDATE_Status("X", r("Index"))
                przInsertEUSTZOLL(r("Index"))
            Next

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub
    'Case 20, 77 
    'Case 10, 76, 60 
    'Case 482
    Sub loadZOLL()
        Dim whereKTO = ""
        Select Case cboFirma._value
            Case 20 : whereKTO = " AND AKTO IN ('002719','002718') "
            Case Else : whereKTO = " AND AKTO IN ('006136','006128','3517233') "
        End Select

        'Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        '    Case "IMEX"
        '        whereKTO = " AND AKTO IN ('002719','002718') "
        '    Case Else
        '        whereKTO = " AND AKTO IN ('006136','006128','3517233') "
        'End Select
        Try

            Dim dt As DataTable = SQL.loadDgvBySql("SELECT [Index] FROM [Zkteing] where Bezugsnummer='" & SPEDBUCH.AtlasBezNrEZA & "' AND LeistungsNr NOT IN (20,77) AND [Status] IS NULL " & whereKTO, "FMZOLL")
            For Each r In dt.Rows
                VERAG_PROG_ALLGEMEIN.cZkteing.UPDATE_Status("X", r("Index"))
                przInsertEUSTZOLL(r("Index"))
            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub
    Sub loadBerechnungsArt_jeAbfertigung()
        If Not IsNumeric(SPEDBUCH.Abfertigungsanzahl) Then Exit Sub
        If SPEDBUCH.Abfertigungsanzahl = 0 Then Exit Sub

        'Sucht, ob PosAnzahl schon vorhanden ist,...
        'For Each PosAnzahlPOS In RECHNUNG.POSITIONEN
        For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
            If r.Cells("BerechnungsartNr").Value = 1 Then
                r.Cells("Anzahl").Value = SPEDBUCH.Abfertigungsanzahl
                If r.Cells("Anzahl").Value < 0 Then r.Cells("Anzahl").Value = 0
            End If
        Next
    End Sub

    Sub loadBerechnungsArt_jePosition()
        If Not IsNumeric(txtPositionAnzahl.Text) Then Exit Sub
        Dim PosAnzahl = CInt(txtPositionAnzahl.Text)
        If PosAnzahl = 0 Then Exit Sub

        'inkludierte Pos ermitteln
        Dim BerechnungsartPosInkludiert = 0
        For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
            If r.Cells("BerechnungsartNr").Value = 1 AndAlso r.Cells("BerechnungsartPosInkludiert").Value IsNot DBNull.Value AndAlso IsNumeric(r.Cells("BerechnungsartPosInkludiert").Value) AndAlso CInt(r.Cells("BerechnungsartPosInkludiert").Value) > 0 Then
                BerechnungsartPosInkludiert = CInt(r.Cells("BerechnungsartPosInkludiert").Value)
                Exit For
            End If
        Next

        For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
            If r.Cells("BerechnungsartNr").Value = 10 Then
                Dim AnzahlTmp = PosAnzahl - BerechnungsartPosInkludiert
                If AnzahlTmp <= 0 Then AnzahlTmp = 0
                '      MsgBox(PosAnzahl - BerechnungsartPosInkludiert)
                r.Cells("Anzahl").Value = AnzahlTmp
                If r.Cells("Anzahl").Value < 0 Then r.Cells("Anzahl").Value = 0
            End If
        Next
    End Sub

    Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
        loadEUST()
        loadZOLL()
        loadBerechnungsArt_jePosition()
    End Sub

    Private Sub cboAnlage1_MouseWheel(sender As Object, e As MouseEventArgs) Handles cboAnlage6.MouseWheel, cboAnlage5.MouseWheel, cboAnlage4.MouseWheel, cboAnlage3.MouseWheel, cboAnlage2.MouseWheel, cboAnlage1.MouseWheel

    End Sub

    Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
        Label53.Visible = False
        Timer.Enabled = False
    End Sub

    Private Sub Label53_Click(sender As Object, e As EventArgs) Handles Label53.Click
        Label53.Visible = False
    End Sub

    Private Sub cboRechnungSprache_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRechnungSprache.SelectedIndexChanged
        txtTextZZ.Text = cFakturierung.przRechnungstextZZ(RECHNUNG)
        txtText.Text = cFakturierung.przRechnungstextTXT(RECHNUNG, SPEDBUCH)
    End Sub

    Private Sub dbgAnhaenge_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvAnhaenge.CellClick 'dbgAnhaenge.CellContentClick,
        Try
            '        DirectCast(r.Cells("optAnhSel"), DataGridViewCheckBoxCell).Value = 1
            If dgvAnhaenge.Columns(e.ColumnIndex).Name = "optAnhSel" Then
                '  MsgBox(DirectCast(dgvAnhaenge.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewCheckBoxCell).Value)
                dgvAnhaenge.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = Not DirectCast(dgvAnhaenge.Rows(e.RowIndex).Cells(e.ColumnIndex), DataGridViewCheckBoxCell).Value
            End If
            dgvAnhaenge.ClearSelection()
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
    End Sub

    Private Sub dbgAnhaenge_sel(sender As Object, e As EventArgs) Handles dgvAnhaenge.SelectionChanged

    End Sub

    Private Sub Button14_Click(sender As Object, e As EventArgs) Handles Button14.Click
        If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("Kundendaten_bearbeiten", "SDL") Then
            Dim frmKundenblatt As New SDL.frmKundenblatt
            frmKundenblatt.showEdit = True
            frmKundenblatt.kdNr = -1
            frmKundenblatt.FilialeNr = cboFiliale._value

            'frmKundenblatt.BERECHTIGUNEN = BERECHTIGUNEN
            If frmKundenblatt.ShowDialog(Me) Then
                If frmKundenblatt.kdNr > 0 Then
                    kdFirmaRechnungAn.KdNr = frmKundenblatt.kdNr
                End If
            End If
        Else
            Dim frmKd As New SDL.frmNeuerKunde
            frmKd.openKd = False
            frmKd.timerIntervall = 500
            frmKd.username = VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.mit_username
            If frmKd.username.Length > 15 Then frmKd.username = frmKd.username.Substring(0, 15)
            frmKd.tmpFiliale = VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.StandartFiliale
            '  frmKd.tmpKdNrKreis = 9
            If kdFirmaRechnungAn.KdNr = -1 Then
                frmKd.tmpKdName = kdFirmaRechnungAn.Text
            End If
            frmKd.ShowDialog()
            If frmKd.kdnr > 0 Then
                kdFirmaRechnungAn.KdNr = frmKd.kdnr
            End If
        End If
    End Sub

    Private Sub dgvAnhaenge_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvAnhaenge.CellDoubleClick

        Try
            If dgvAnhaenge.SelectedRows.Count > 0 Then '  If e.RowIndex > 0 Then
                dgvAnhaenge.Rows(e.RowIndex).Selected = True
                Process.Start(VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(dgvAnhaenge.SelectedRows(0).Cells("clmnDsId").Value))
            End If

        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try

    End Sub

    Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click
        ContextMenuStrip1.Show(Cursor.Position)
    End Sub

    Private Sub AbsenderToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AbsenderToolStripMenuItem.Click, EmpfängerToolStripMenuItem.Click, AuftraggeberToolStripMenuItem.Click, AvisiererToolStripMenuItem.Click
        Try


            If cboRechnungAn._value = "" Then Exit Sub
            getValues()
            Dim ROLLE = "AUFTRAGGEBER"

            Dim FirmaFrm = (RECHNUNG.RechnungsName_1 & " " & If(RECHNUNG.RechnungsName_2, "")).trim
            Dim kdnrFrm As Integer = RECHNUNG.RechnungsKundenNr

            Select Case sender.text.ToString.Substring(0, 1) 'cboRechnungAn._value
                Case "1"
                    ROLLE = "ABSENDER"
                    FirmaFrm = (RECHNUNG.AbsenderName_1 & " " & If(RECHNUNG.AbsenderName_2, "")).trim
                    kdnrFrm = RECHNUNG.AbsenderKundenNr
                Case "2"
                    ROLLE = "EMPFAENGER"
                    FirmaFrm = (RECHNUNG.EmpfängerName_1 & " " & If(RECHNUNG.EmpfängerName_2, "")).trim
                    kdnrFrm = RECHNUNG.EmpfängerKundenNr
                Case "3"
                    ROLLE = "AUFTRAGGEBER"
                    FirmaFrm = (RECHNUNG.VermittlerName_1 & " " & If(RECHNUNG.VermittlerName_2, "")).trim
                    kdnrFrm = RECHNUNG.VermittlerKundenNr
                Case "4"
                    ROLLE = "AVISIERER"
                    FirmaFrm = (RECHNUNG.Avisierer)
                    kdnrFrm = RECHNUNG.AvisiererKundenNr
            End Select
            If SPEDBUCH IsNot Nothing Then

                Dim SENDUNG As New VERAG_PROG_ALLGEMEIN.cSendungen(SPEDBUCH.SendungID)
                Dim AVISODAL As New VERAG_PROG_ALLGEMEIN.cAvisoDAL
                Dim AVISO = AVISODAL.LesenAviso(SPEDBUCH.AvisoID, "")
                SDL.FormularManagerNEU.OPEN_FORM(SDL.FormularManagerArten.Verzollungsunterlagen, kdnrFrm, {kdnrFrm, FirmaFrm, SENDUNG, AVISO, ROLLE, -1, True})
            Else
                MsgBox("Speditionsbuch Eintrag nicht gefunden.")
            End If
        Catch ex As Exception
            VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
        End Try
    End Sub

    Private Sub SeperateRechnungFürEUSTToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SeperateRechnungFürEUSTToolStripMenuItem.Click
        If vbYes = MsgBox("Soll aus der Rechnung wirklich eine seperate EUST Rechnung erstellt werden?", vbYesNoCancel) Then

            saveMe()
            Dim RECHNUNG_TMP_RKID = RECHNUNG.RK_ID


            '--------------------------------------------------------------------------------------------

            'Dim RECHNUNG2 = RECHNUNG
            RECHNUNG.RK_ID = -1
            RECHNUNG.RechnungsNr = -1
            'RECHNUNG.RechnungsNr = Nothing
            RECHNUNG.UnterNr = RECHNUNG.getMaxRGUnterNr()
            RECHNUNG.RechnungsDatum = Nothing
            RECHNUNG.DruckDatumZeit = Nothing
            RECHNUNG.Status = 0
            RECHNUNG.Trdin = 0
            RECHNUNG.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME

            dgvOfferteDetailsUebersicht.Columns.Clear()

            '  initDGVRechnungenPositionen()

            przBerechneRAPos("")
            loadFormRGPosInOfferte()
            initDGVRechnungenPositionen()
            cboFiliale.Focus()

            '--------------------------------------------------------------------------------------------
            If Not saveMe() Then Exit Sub 'neue EUST-Rg speichern
            Dim REM_POS_TMP As New List(Of VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen)
            'EUST aus alter Rg entfernen
            Dim RECHNUNG_TMP = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RECHNUNG_TMP_RKID)
            RECHNUNG_TMP.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
            'RECHNUNG_TMP.SteuerfreierGesamtbetrag
            For Each POS In RECHNUNG_TMP.POSITIONEN
                Select Case POS.LeistungsNr
                    Case "20", "77"
                        REM_POS_TMP.Add(POS)
                End Select
            Next
            For Each R_POS In REM_POS_TMP
                RECHNUNG_TMP.POSITIONEN.Remove(R_POS)
            Next
            initDGVRechnungenPositionen()
            RECHNUNG_TMP.SAVE_POSITIONEN(RECHNUNG_TMP.RK_ID)
            saveMe()


            '--------------------------------------------------------------------------------------------

            'alles außer EUST aus neuer Rg entfernen
            Dim REM_POS As New List(Of VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen)
            For Each POS In RECHNUNG.POSITIONEN
                Select Case POS.LeistungsNr
                    Case "20", "77"
                    Case Else
                        REM_POS.Add(POS)
                End Select
            Next
            For Each R_POS In REM_POS
                RECHNUNG.POSITIONEN.Remove(R_POS)
            Next
            RECHNUNG.SAVE_POSITIONEN(RECHNUNG.RK_ID)

            '--------------------------------------------------------------------------------------------


            '  End If
            initRECHNUNG()
            RaiseEvent SOMETHING_CHANGED(RECHNUNG.RK_ID)
        End If
    End Sub

    Private Sub EUStGutschriftAnVeragToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VeragAGToolStripMenuItem.Click, VeragCSToolStripMenuItem.Click

        Dim verag As String = ""

        Select Case sender.name
            Case "VeragAGToolStripMenuItem"
                verag = "Verag AG"
                veragKunde = 3013401

            Case "VeragCSToolStripMenuItem"
                verag = "Verag Customs Service"
                veragKunde = 3017683
        End Select

        Dim spedbuch = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(cboFiliale._value, txtAbfertigungsnummer.Text, cboSpedBuchUnterNr._value)

        If spedbuch.Abfertigungsart <> 1 AndAlso RECHNUNG.[BelegartenNr] = 71 Then Exit Sub 'nur bei Rechnung und abfertigungsart 1


        Dim abfrage = "Soll eine neue Gutschrift an die " & verag & " für die Verzollung/EUST erstellt werden?"
        Dim PosWithWEustOrVerz As Boolean = False
        Dim selectedPOS As New List(Of VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen)
        For Each POS In RECHNUNG.POSITIONEN.Where(Function(x) x.Anzahl > 0).ToList
            Select Case POS.LeistungsNr
                Case "20" : abfrage &= vbNewLine & POS.Anzahl & "x EUSt: " & CDbl(POS.Preis) : PosWithWEustOrVerz = True : selectedPOS.Add(POS)
                Case "340", "60" : abfrage &= vbNewLine & POS.Anzahl & "x : " & POS.LeistungsBez & " laut Offerte" : PosWithWEustOrVerz = True : selectedPOS.Add(POS)
            End Select
        Next

        If Not PosWithWEustOrVerz Then Exit Sub

        If vbYes = MsgBox(abfrage, vbYesNoCancel) Then
            saveMe()
            Dim RECHNUNGOldID = RECHNUNG.RK_ID
            Dim RECHNUNG_TMP = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RECHNUNGOldID)
            '--------------------------------------------------------------------------------------------
            'Gutschrift

            RECHNUNG.RK_ID = -1
            RECHNUNG.RechnungsNr = -1
            RECHNUNG.UnterNr = RECHNUNG.getMaxRGUnterNr()
            RECHNUNG.RechnungsDatum = Nothing
            RECHNUNG.DruckDatumZeit = Nothing
            RECHNUNG.Status = 0
            RECHNUNG.Trdin = 0
            RECHNUNG.[BelegartenKz] = "AG" : RECHNUNG.[BelegartenNr] = 71 : RECHNUNG.Vorzeichen = "-"
            RECHNUNG.OffertenNr = 1

            cboRgGS.SelectedIndex = 1

            'setze VERG ALS Vermittler/Kunde
            Dim kundeVerag As New cKunde(veragKunde)
            Dim kundeVeragAdr As New cAdressen(veragKunde)
            Dim kundeVeragErw As New cKundenErweitert(veragKunde)
            RECHNUNG.VermittlerKundenNr = veragKunde
            kdFirmaAuftraggeber.KdNr_value = veragKunde
            kdFirmaAuftraggeber.KdNr = veragKunde
            kdFirmaAuftraggeber.KdData_KUNDE = kundeVerag
            kdFirmaAuftraggeber.KdData_ADRESSEN = kundeVeragAdr
            kdFirmaAuftraggeber.KdData_KUNDE_ERW = kundeVeragErw
            RECHNUNG.Rechnung_an = cboRechnungAn._value

            cboRechnungAn.changeItem("3")

            cboSteuerschlüssel.changeItem(If(kdFirmaAuftraggeber.KdData_KUNDE.Steuerschlüssel, ""))

            kdFirmaRechnungAn.KdNr = veragKunde

            przBerechneRAPos("")
            loadFormRGPosInOfferte()
            initDGVRechnungenPositionen()
            cboFiliale.Focus()
            saveMe()

            RECHNUNG.OffertenNr = 1

            Dim REM_POS_TMP As New List(Of VERAG_PROG_ALLGEMEIN.cRechnungsausgangPositionen)


            For Each POS In RECHNUNG_TMP.POSITIONEN
                POS.RK_ID = RECHNUNG.RK_ID
                Select Case POS.LeistungsNr
                    Case "20", "60"  '->org. EUST direkt in POS
                        ''POS.Preis = POS.Preis * -1
                        'REM_POS_GU.Add(POS)
                        For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
                            If r.Cells("LeistungsNr").Value = POS.LeistungsNr And r.Cells("LeistungsBez").Value = POS.LeistungsBez Then
                                r.Cells("Anzahl").Value = If(POS.Anzahl, 0)
                                r.Cells("Preis").Value = If(POS.Preis, 0)
                            End If
                        Next


                    Case "340" 'Verzollung in dgvPOS
                        For Each r As DataGridViewRow In dgvOfferteDetailsUebersicht.Rows
                            If r.Cells("LeistungsNr").Value = POS.LeistungsNr And r.Cells("LeistungsBez").Value = POS.LeistungsBez Then
                                r.Cells("Anzahl").Value = If(POS.Anzahl, 0)
                            End If
                        Next
                End Select
                initSteuerbetraege(RECHNUNG, POS)
            Next

            RECHNUNG.POSITIONEN.Clear()

            przRefreshDGV_Positionen()

            RECHNUNG.SAVE_POSITIONEN(RECHNUNG.RK_ID)
            saveMe()
            If Not loaded Then Exit Sub

            initRECHNUNG()

            RaiseEvent SOMETHING_CHANGED(RECHNUNG.RK_ID)

        End If

        veragKunde = -1

    End Sub


    Private Function checkUIDNR() As Boolean

        If cboSteuerschlüssel._value IsNot Nothing AndAlso IsNumeric(cboSteuerschlüssel._value) Then

            Dim check As Integer = cAllgemein.checkSteuerschluessel(cboFirma._value, RECHNUNG.RechnungsLandKz, RECHNUNG.RechnungsUstIdKz, RECHNUNG.RechnungsUstIdNr, RECHNUNG.RechnungsUstIdGeprüft)
            Dim daysCheck As Integer = 31
            If check >= 0 Then
                If IsNumeric(cboSteuerschlüssel._value) AndAlso CInt(cboSteuerschlüssel._value) <> check Then
                    Dim text = SQL.getValueTxtBySql("select AuswahlSteuerbezeichnung from Steuertabelle where Steuerschlüssel =" & check, "FMZOLL")
                    Dim hintUIDPruef As String = IIf((RECHNUNG.RechnungsUstIdGeprüft IsNot Nothing AndAlso CDate(RECHNUNG.RechnungsUstIdGeprüft) < Today.AddDays(-daysCheck)), "UID-Prüfung ist älter als " & daysCheck & " Tage!", "")
                    If Not vbYes = MsgBox("Falscher Steuertyp!" & vbNewLine & "Steuerschlüssel " & text & " sollte hinterlegt werden." & vbNewLine & IIf(hintUIDPruef <> "", hintUIDPruef & vbNewLine, "") & "Trotzdem speichern?", vbYesNo) Then
                        Return False
                    End If
                End If
            End If
        End If

        Return True

    End Function

    Private Sub cboSammelrechnung_SelectedValueChanged(sender As Object, e As EventArgs) Handles cboSammelrechnung.SelectedValueChanged

        btn.Enabled = IIf(cboSammelrechnung._value = 0, True, False)

    End Sub


End Class