
Imports System.Globalization
Imports awt.ShellApi
Imports Microsoft.Office.Interop

Public Class cFakturierung

    Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL

    Public Shared Function fktSVSRVS(firmaId As Integer, varWert As Object, Optional varWährungscode As Object = "EUR") As Object
        Select Case firmaId
            Case 21, 22, 23
                fktSVSRVS_UNISPED(varWert, varWährungscode)
            Case Else
                fktSVSRVS(varWert, varWährungscode)
        End Select
    End Function
    Public Shared Function fktSVSRVS(varWert As Object, Optional varWährungscode As Object = "EUR") As Object

        Dim varVersicherungssumme As Object
        Dim varRechnungswährung As Object

        ' Versicherungssumme prüfen

        varVersicherungssumme = varWert
        If varVersicherungssumme Is Nothing OrElse varVersicherungssumme = 0 Then
            MsgBox("Die SVS/RVS-Prämie kann nicht ermittelt werden. Der Warenwert zur Bestimmung der Versicherungssumme ist nicht bekannt.", , "fktSVSRVS")
            fktSVSRVS = Nothing
            Exit Function
        ElseIf varVersicherungssumme < 0 Then
            varVersicherungssumme = 0 - varVersicherungssumme
        End If

        ' Die SVS/RVS-Tabelle ist in der Währung ATS geführt.
        ' Wenn der Wert zur Bestimmung der Versicherungssumme auf einer anderen Währung basiert,
        ' wird der Wert in ATS umgerechnet.
        ' Die Versicherungsprämie ist in der Währung ATS angegeben. Lautet die Rechnung auf eine
        ' andere Währung, wird die Versicherungsprämie auf diese Währung umgerechnet.

        varRechnungswährung = varWährungscode
        Select Case VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(varVersicherungssumme, varRechnungswährung, "EUR")
            Case Is <= 2500
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(2.5, "EUR", varRechnungswährung)
            Case Is <= 3750
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(3.8, "EUR", varRechnungswährung)
            Case Is <= 5000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(5, "EUR", varRechnungswährung)
            Case Is <= 6250
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(6.1, "EUR", varRechnungswährung)
            Case Is <= 7500
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(7.45, "EUR", varRechnungswährung)
            Case Is <= 10000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(9.75, "EUR", varRechnungswährung)
            Case Is <= 15000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(13.95, "EUR", varRechnungswährung)
            Case Is <= 20000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(18.15, "EUR", varRechnungswährung)
            Case Is <= 25000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(22.15, "EUR", varRechnungswährung)
            Case Is <= 50000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(39.15, "EUR", varRechnungswährung)
            Case Is <= 100000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(64.6, "EUR", varRechnungswährung)
            Case Is <= 150000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(91.8, "EUR", varRechnungswährung)
            Case Is <= 200000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(117.3, "EUR", varRechnungswährung)
            Case Is <= 300000
                fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(140.8, "EUR", varRechnungswährung)
            Case Is <= 1500000
                fktSVSRVS = Int((varVersicherungssumme * 0.00039) * 100 + 0.5) / 100
            Case Else   'ab V.193 auf Veranlassung von Andreas Luxbauer.
                fktSVSRVS = Int((1500000 * 0.00039) * 100 + 0.5) / 100
        End Select

        If False Then

            Select Case VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(varVersicherungssumme, varRechnungswährung, "ATS")
                Case Is <= 20000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(18, "ATS", varRechnungswährung)
                Case Is <= 40000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(28, "ATS", varRechnungswährung)
                Case Is <= 60000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(39, "ATS", varRechnungswährung)
                Case Is <= 80000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(50, "ATS", varRechnungswährung)
                Case Is <= 100000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(61, "ATS", varRechnungswährung)
                Case Is <= 120000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(78, "ATS", varRechnungswährung)
                Case Is <= 140000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(89, "ATS", varRechnungswährung)
                Case Is <= 160000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(100, "ATS", varRechnungswährung)
                Case Is <= 180000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(111, "ATS", varRechnungswährung)
                Case Is <= 200000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(122, "ATS", varRechnungswährung)
                Case Is <= 250000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(138, "ATS", varRechnungswährung)
                Case Is <= 300000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(160, "ATS", varRechnungswährung)
                Case Is <= 350000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(182, "ATS", varRechnungswährung)
                Case Is <= 400000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(204, "ATS", varRechnungswährung)
                Case Is <= 450000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(226, "ATS", varRechnungswährung)
                Case Is <= 500000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(248, "ATS", varRechnungswährung)
                Case Is <= 550000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(282, "ATS", varRechnungswährung)
                Case Is <= 600000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(304, "ATS", varRechnungswährung)
                Case Is <= 650000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(326, "ATS", varRechnungswährung)
                Case Is <= 700000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(348, "ATS", varRechnungswährung)
                Case Is <= 750000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(370, "ATS", varRechnungswährung)
                Case Is <= 800000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(392, "ATS", varRechnungswährung)
                Case Is <= 850000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(409, "ATS", varRechnungswährung)
                Case Is <= 900000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(426, "ATS", varRechnungswährung)
                Case Is <= 950000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(443, "ATS", varRechnungswährung)
                Case Is <= 1000000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(460, "ATS", varRechnungswährung)
                Case Is <= 1050000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(489, "ATS", varRechnungswährung)
                Case Is <= 1100000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(506, "ATS", varRechnungswährung)
                Case Is <= 1150000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(523, "ATS", varRechnungswährung)
                Case Is <= 1200000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(540, "ATS", varRechnungswährung)
                Case Is <= 1250000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(557, "ATS", varRechnungswährung)
                Case Is <= 1300000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(574, "ATS", varRechnungswährung)
                Case Is <= 1350000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(591, "ATS", varRechnungswährung)
                Case Is <= 1400000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(608, "ATS", varRechnungswährung)
                Case Is <= 1450000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(625, "ATS", varRechnungswährung)
                Case Is <= 1500000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(642, "ATS", varRechnungswährung)
                Case Is <= 1600000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(669, "ATS", varRechnungswährung)
                Case Is <= 1700000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(696, "ATS", varRechnungswährung)
                Case Is <= 1800000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(723, "ATS", varRechnungswährung)
                Case Is <= 1900000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(750, "ATS", varRechnungswährung)
                Case Is <= 2000000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(777, "ATS", varRechnungswährung)
                Case Is <= 2200000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(823, "ATS", varRechnungswährung)
                Case Is <= 2400000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(857, "ATS", varRechnungswährung)
                Case Is <= 2600000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(891, "ATS", varRechnungswährung)
                Case Is <= 2800000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(925, "ATS", varRechnungswährung)
                Case Is <= 3000000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(959, "ATS", varRechnungswährung)
                Case Is <= 3200000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(993, "ATS", varRechnungswährung)
                Case Is <= 3400000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(1027, "ATS", varRechnungswährung)
                Case Is <= 3600000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(1061, "ATS", varRechnungswährung)
                Case Is <= 3800000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(1095, "ATS", varRechnungswährung)
                Case Is <= 4000000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(1129, "ATS", varRechnungswährung)
                Case Is <= 4500000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(1163, "ATS", varRechnungswährung)
                Case Is <= 5000000
                    fktSVSRVS = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(1268, "ATS", varRechnungswährung)
                Case Else
                    fktSVSRVS = Int((varVersicherungssumme * 0.00024) * 100 + 0.5) / 100
            End Select
        End If

    End Function

    Public Shared Function fktSVSRVS_UNISPED(varWert As Object, Optional varWährungscode As Object = "EUR") As Object

        Dim varVersicherungssumme As Object
        Dim varRechnungswährung As Object

        ' Versicherungssumme prüfen

        varVersicherungssumme = varWert
        If varVersicherungssumme Is Nothing OrElse varVersicherungssumme = 0 Then
            MsgBox("Die SVS/RVS-Prämie kann nicht ermittelt werden. Der Warenwert zur Bestimmung der Versicherungssumme ist nicht bekannt.", , "fktSVSRVS")
            fktSVSRVS_UNISPED = Nothing
            Exit Function
        ElseIf varVersicherungssumme < 0 Then
            varVersicherungssumme = 0 - varVersicherungssumme
        End If

        ' Die SVS/RVS-Tabelle ist in der Währung ATS geführt.
        ' Wenn der Wert zur Bestimmung der Versicherungssumme auf einer anderen Währung basiert,
        ' wird der Wert in ATS umgerechnet.
        ' Die Versicherungsprämie ist in der Währung ATS angegeben. Lautet die Rechnung auf eine
        ' andere Währung, wird die Versicherungsprämie auf diese Währung umgerechnet.

        varRechnungswährung = varWährungscode
        Select Case VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(varVersicherungssumme, varRechnungswährung, "EUR")
            Case Is <= 2500
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(2.91, "EUR", varRechnungswährung)
            Case Is <= 3750
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(4.42, "EUR", varRechnungswährung)
            Case Is <= 5000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(5.82, "EUR", varRechnungswährung)
            Case Is <= 6250
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(7.1, "EUR", varRechnungswährung)
            Case Is <= 7500
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(8.67, "EUR", varRechnungswährung)
            Case Is <= 10000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(11.34, "EUR", varRechnungswährung)
            Case Is <= 15000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(16.24, "EUR", varRechnungswährung)
            Case Is <= 20000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(21.13, "EUR", varRechnungswährung)
            Case Is <= 25000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(25.3, "EUR", varRechnungswährung)
            Case Is <= 50000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(44.73, "EUR", varRechnungswährung)
            Case Is <= 100000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(73.8, "EUR", varRechnungswährung)
            Case Is <= 150000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(104.87, "EUR", varRechnungswährung)
            Case Is <= 200000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(134, "EUR", varRechnungswährung)
            Case Is <= 300000
                fktSVSRVS_UNISPED = VERAG_PROG_ALLGEMEIN.cProgramFunctions.fktEuro(160.85, "EUR", varRechnungswährung)
            Case Is <= 1500000
                fktSVSRVS_UNISPED = Int((varVersicherungssumme * 0.00055) * 100 + 0.5) / 100
            Case Else
                fktSVSRVS_UNISPED = Int((1500000 * 0.00055) * 100 + 0.5) / 100
        End Select

    End Function

    Shared Sub setGesamtBetraege(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional Steuersatz_Proz As Object = Nothing)
        Dim steuerPflichtigerBetrag As Double = 0
        Dim steuerFreierBetrag As Double = 0
        Dim Abfertigungskosten As Double = 0
        Dim vorzeichen = 1 'If(RECHNUNG.Vorzeichen = "-", -1, 1)
        If Steuersatz_Proz IsNot Nothing Then
            RECHNUNG.Steuersatz_Proz = CDbl(Steuersatz_Proz)
        End If ' RECHNUNG.Steuersatz_Proz = If(txtSteuersatz._value, 0)

        For Each POS In RECHNUNG.POSITIONEN
            If POS.Anzahl > 0 And POS.Preis <> 0 Then 'HIER WIRD GEFILTERT --> Nur wo etwas zu verrechnen ist!
                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
        Next

        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
            RECHNUNG.SteuerpflichtigerGesamtbetrag = 0
            RECHNUNG.SteuerfreierGesamtbetrag = steuerFreierBetrag + steuerPflichtigerBetrag
        End If
    End Sub


    Shared Function przRechnungstextZZ(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As String ', ByRef strZahlbar As String, ByRef strText As String)

        If RECHNUNG Is Nothing Then Exit Function

        Dim strZahlbar As String = ""
        Dim strText As String = ""
        ' Dim varPos As Object
        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL

        ' Dim Nettozahlungsziel

        Dim ZZTage = 10
        If RECHNUNG.RechnungsKundenNr > 0 Then

            Dim RECHNUNG_AD As New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)
            Dim RECHNUNG_KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)

            If RECHNUNG_KD.Zahlungsziel IsNot Nothing AndAlso IsNumeric(RECHNUNG_KD.Zahlungsziel) Then
                ZZTage = RECHNUNG_KD.Zahlungsziel
            End If

            Select Case RECHNUNG.[BelegartenNr]
                Case 70 'RECHNUNG

                    Dim VK = VERAG_PROG_ALLGEMEIN.cVorauskasse.LOADByFilialeAbfNr(RECHNUNG.FilialenNr, RECHNUNG.AbfertigungsNr)
                    Dim VK_Tmp = False

                    If RECHNUNG.[Vorkasse] Then
                        VK_Tmp = (VK IsNot Nothing)
                    End If

                    If Not VK_Tmp Then
                        If RECHNUNG.Lastschrift Then
                            Select Case RECHNUNG.RechnungSprache
                                Case "EN" : strText = strText & "The invoice amount was collected by direct debit order." & vbCrLf
                                Case Else : strText = strText & "Der Rechnungsbetrag wurde durch erteilten Abbuchungsauftrag eingezogen." & vbCrLf
                            End Select
                        Else
                            If checkIfKreditaufwendungen(RECHNUNG) Then
                                Select Case RECHNUNG.RechnungSprache
                                    'Case "EN" : strZahlbar = "Payable within " & ZZTage & " days less pos. 750; due net from " & ZZTage & " days."
                                    'Case Else : strZahlbar = "Zahlbar innerhalb " & ZZTage & " Tagen abzüglich Pos. 750; ab " & ZZTage & " Tagen netto fällig."
                                    Case "EN" : strZahlbar = "Payment term: " & ZZTage & " days from invoice date; Pos. 750 is deductible within the payment term."
                                    Case Else : strZahlbar = "Zahlungsziel: " & ZZTage & " Tage ab Rechnungsdatum; Pos. 750 ist innerhalb des Zahlungsziels abzugfähig."
                                End Select
                            Else
                                'Zahlungsziel allgemein.
                                Select Case RECHNUNG.RechnungSprache
                                    Case "EN" : strZahlbar = "Payment term: " & ZZTage & " days from invoice date"
                                    Case Else : strZahlbar = "Zahlungsziel: " & ZZTage & " Tage ab Rechnungsdatum"
                                        'Case "EN" : strZahlbar = "Payable within " & ZZTage & " days from date of invoice."
                                        'Case Else : strZahlbar = "Zahlbar innerhalb " & ZZTage & " Tagen ab Rechnungsdatum."
                                End Select
                            End If

                            'Zahlungsziel bei Maut/Diesel.
                            'DA STIMMT WAS NICHT::::::
                            'If RECHNUNG.OffertenNr IsNot Nothing And RECHNUNG.RechnungsKundenNr > 0 And RECHNUNG.RechnungsLandKz IsNot Nothing Then
                            '    Dim ZahlungszielOffert As String = SQL.getValueTxtBySql("SELECT isnull(Zahlungsziel,'') FROM Offertenstamm  WHERE OffertenNr='" & RECHNUNG.OffertenNr & "' AND Zahlungsziel Is Not Null", "FMZOLL")
                            '    Dim ZahlungszielKunde As String = If(RECHNUNG_KD.Zahlungsziel, "")
                            '    Dim ZahlungszielText As String = SQL.getValueTxtBySql("SELECT isnull(tblZahlungszieltexte.Text,'')  FROM tblZahlungszieltexte WHERE tblZahlungszieltexte.LandKz='" & RECHNUNG.RechnungsLandKz & "' AND tblZahlungszieltexte.Text Is Not Null", "FMZOLL")

                            '    If ZahlungszielKunde <> "" Then  'Zahlungsziel für Kunde verwenden
                            '        RECHNUNG.Nettozahlungsziel = ZahlungszielKunde
                            '        strZahlbar = If(ZahlungszielText <> "", ZahlungszielText, "Rechnung zahlbar spätestens bis") & " " & ZahlungszielKunde & "!"
                            '    ElseIf ZahlungszielOffert <> "" Then                    'Zahlungsziel für Offerte verwenden
                            '        RECHNUNG.Nettozahlungsziel = ZahlungszielOffert
                            '        strZahlbar = If(ZahlungszielText <> "", ZahlungszielText, "Rechnung zahlbar spätestens bis") & " " & ZahlungszielOffert & "!"
                            '    End If
                            'End If


                            '' Text bei Zoll oder EUSt drucken --> UNTEN IM TEXT
                            'If checkIfcheckIfZollbelege(RECHNUNG) Then
                            '    Select Case RECHNUNG.RechnungSprache
                            '        Case "EN" : strText = strText & "Please check all customs documents immediately for correctness, as objections are only possible 1 month after the date of the customs notification." & vbCrLf
                            '        Case Else : strText = strText & "Alle Zollbelege bitte sofort auf Richtigkeit prüfen da Einspruch gemäß § 355 AO nur 1 Monat nach Datum des Zollbescheides möglich." & vbCrLf
                            '    End Select
                            'End If

                        End If
                    Else
                        If VK IsNot Nothing AndAlso CDbl(VK.vk_Betrag) > 0 Then
                            If VK.vk_GeldEingetroffen Then ' Wenn 0 dann Fehler 
                                Dim diff As Double = CDbl(VK.vk_Betrag) - CDbl(RECHNUNG.SteuerfreierGesamtbetrag + RECHNUNG.SteuerpflichtigerGesamtbetrag)
                                If diff = 0 Then
                                    Select Case RECHNUNG.RechnungSprache
                                        Case "EN" : strText = strText & "The invoice amount has already been paid in advance." & vbCrLf
                                        Case Else : strText = strText & "Der Rechnungsbetrag wurde bereits per Vorauszahlung beglichen." & vbCrLf
                                    End Select
                                Else
                                    If diff > 0 Then 'Guthaben
                                        'Select Case RECHNUNG.RechnungSprache
                                        '    Case "EN" : strText = strText & "An advance payment has already been made for this invoice, resulting in a credit balance of " & diff.ToString("C2") & "." & vbCrLf
                                        '    Case Else : strText = strText & "Zu dieser Rechnung wurde bereits eine Vorauszahlung geleistet, daraus ergibt sich ein Guthaben von " & diff.ToString("C2") & "." & vbCrLf
                                        'End Select
                                        Select Case RECHNUNG.RechnungSprache
                                            Case "EN" : strText = strText & "An advance payment has already been made for this invoice." & vbCrLf
                                            Case Else : strText = strText & "Zu dieser Rechnung wurde bereits eine Vorauszahlung geleistet." & vbCrLf
                                        End Select
                                    Else 'Nachzahlung
                                        Select Case RECHNUNG.RechnungSprache
                                            Case "EN" : strText = strText & "An advance payment has already been made for this invoice, please transfer the difference." & vbCrLf
                                            Case Else : strText = strText & "Zu dieser Rechnung wurde bereits eine Vorauszahlung geleistet, bitte überweisen Sie den Differenzbetrag." & vbCrLf
                                        End Select
                                    End If
                                End If
                            End If
                        End If
                    End If
                Case 71 'GS
                    If RECHNUNG.Lastschrift Then
                        Select Case RECHNUNG.RechnungSprache
                            Case "EN" : strText = strText & "The credit amount was offset against the debit order issued." & vbCrLf
                            Case Else : strText = strText & "Der Gutschriftsbetrag wurde mit erteilten Abbuchungsauftrag verrechnet." & vbCrLf
                        End Select
                    End If
            End Select

            strText = (strZahlbar & vbNewLine & strText).Trim

            If strText = "" Then
                RECHNUNG.TextZZ = Nothing
            Else
                strText.Replace("<EMailAdresse>", If(RECHNUNG_AD.E_Mail, " - "))

                RECHNUNG.TextZZ = strText
            End If


        End If


        Return strText.Trim


    End Function
    Shared Function checkAnlage_Orig(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)
        If RECHNUNG IsNot Nothing Then
            If (RECHNUNG.Anlage_1.contains("ATR") Or RECHNUNG.Anlage_1.contains("ATR") Or RECHNUNG.Anlage_1.contains("Präf")) And Not (RECHNUNG.Anlage_1.contains("Kopie") Or RECHNUNG.Anlage_1.contains("Copy")) Then Return True
            If (RECHNUNG.Anlage_2.contains("ATR") Or RECHNUNG.Anlage_2.contains("ATR") Or RECHNUNG.Anlage_2.contains("Präf")) And Not (RECHNUNG.Anlage_2.contains("Kopie") Or RECHNUNG.Anlage_2.contains("Copy")) Then Return True
            If (RECHNUNG.Anlage_3.contains("ATR") Or RECHNUNG.Anlage_3.contains("ATR") Or RECHNUNG.Anlage_3.contains("Präf")) And Not (RECHNUNG.Anlage_3.contains("Kopie") Or RECHNUNG.Anlage_3.contains("Copy")) Then Return True
            If (RECHNUNG.Anlage_4.contains("ATR") Or RECHNUNG.Anlage_4.contains("ATR") Or RECHNUNG.Anlage_4.contains("Präf")) And Not (RECHNUNG.Anlage_4.contains("Kopie") Or RECHNUNG.Anlage_4.contains("Copy")) Then Return True
            If (RECHNUNG.Anlage_5.contains("ATR") Or RECHNUNG.Anlage_5.contains("ATR") Or RECHNUNG.Anlage_5.contains("Präf")) And Not (RECHNUNG.Anlage_5.contains("Kopie") Or RECHNUNG.Anlage_5.contains("Copy")) Then Return True
            If (RECHNUNG.Anlage_6.contains("ATR") Or RECHNUNG.Anlage_6.contains("ATR") Or RECHNUNG.Anlage_6.contains("Präf")) And Not (RECHNUNG.Anlage_6.contains("Kopie") Or RECHNUNG.Anlage_6.contains("Copy")) Then Return True
        End If
        Return False
    End Function

    'Shared Function przRechnungstext(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As String ', ByRef strZahlbar As String, ByRef strText As String)
    '    Dim txtZZ = przRechnungstextTXT(RECHNUNG)
    '    Dim txtTXT = przRechnungstextZZ(RECHNUNG)
    '    Return (txtZZ & vbNewLine & txtTXT).Trim
    'End Function
    Shared Function przRechnungstextTXT(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch) As String ', ByRef strZahlbar As String, ByRef strText As String)

        If RECHNUNG Is Nothing Then Exit Function

        '  Dim strZahlbar As String = ""
        Dim strText As String = ""
        ' Dim varPos As Object
        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL


        ' Dim Nettozahlungsziel


        If RECHNUNG.RechnungsKundenNr > 0 Then

            Select Case RECHNUNG.[BelegartenNr]
                Case 70 'RECHNUNG

                    ' Text bei Zoll oder EUSt drucken
                    If checkIfcheckIfZollbelege(RECHNUNG) Then
                        Select Case RECHNUNG.RechnungSprache
                            Case "EN" : strText = strText & "Please check all customs documents immediately for correctness, as objections are only possible 1 month after the date of the customs notification." & vbCrLf
                            Case Else : strText = strText & "Alle Zollbelege bitte sofort auf Richtigkeit prüfen da Einspruch gemäß § 355 AO nur 1 Monat nach Datum des Zollbescheides möglich." & vbCrLf
                        End Select
                    End If

            End Select
            'strText = przRechnungstextZZ(RECHNUNG)

            Dim RECHNUNG_AD As New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)
            Dim RECHNUNG_KD As New VERAG_PROG_ALLGEMEIN.cKunde(RECHNUNG.RechnungsKundenNr)



            If getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, RECHNUNG.RechnungsLandKz, RECHNUNG.OffertenNr, True) Then
            ElseIf getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, RECHNUNG.RechnungsLandKz, , True) Then
            ElseIf getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, ,, True) Then
            ElseIf getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, , RECHNUNG.RechnungsLandKz, , True) Then
            ElseIf getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, ,, ) Then
            ElseIf getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, ,,, True) Then
            ElseIf getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, ,,, False) Then
            End If

            'Fixtexte die immer angefügt werden (ImmerAnfuegen=1):
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, RECHNUNG.RechnungsLandKz, RECHNUNG.OffertenNr, True, True)
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, RECHNUNG.RechnungsLandKz, , True, True)
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, RECHNUNG.Firma_ID, ,, True, True)
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, , RECHNUNG.RechnungsLandKz, , True, True)
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, ,,, True, True)
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, ,,, False, True)
            getRTXT_SQL(strText, RECHNUNG, RECHNUNG_AD, ,,, False, True)


            '' Informations- und Werbetexte drucken
            'Dim sqlStr = "SELECT * FROM Rechnungstexte WHERE 1=1"
            'If RECHNUNG.Firma_ID > 0 Then sqlStr &= " AND (Firma_ID='" & RECHNUNG.Firma_ID & "' or Firma_ID is null) "
            'If If(RECHNUNG_AD.LandKz, "") <> "" Then sqlStr &= " AND (LandKz='" & RECHNUNG_AD.LandKz & "' or LandKz is null) "
            'If If(RECHNUNG.OffertenNr, 0) > 0 Then sqlStr &= " AND (OffertenNr='" & RECHNUNG.OffertenNr & "' or OffertenNr is null) "

            ''Wennn Rechnung als Email geschickt werden sollte Rechnungsdruck=2
            'If If(RECHNUNG_AD.Rechnungsdruck, -1) = 2 And If(RECHNUNG_AD.E_Mail, "") <> "" Then sqlStr &= " AND EMailRechnung=1 "

            'Select Case RECHNUNG.[BelegartenNr]
            '    Case 70
            '        sqlStr &= " AND (DrucksteuerungsKz='R' OR DrucksteuerungsKz='') "
            '    Case 71
            '        sqlStr &= " AND (DrucksteuerungsKz='G' OR DrucksteuerungsKz='') "
            'End Select

            'Dim dt_RechnungsTexte As DataTable = SQL.loadDgvBySql(sqlStr & " order by Firma_ID desc,LandKz desc,Offertennr desc", "FMZOLL")
            'If dt_RechnungsTexte.Rows.Count > 0 Then
            '    strText &= dt_RechnungsTexte.Rows(0)("Text") & vbCrLf
            '    '  MsgBox(dt_RechnungsTexte.Rows(0)("Text") & vbCrLf)
            'End If

            Select Case RECHNUNG.Firma_ID
                Case 21, 22, 23
                    Dim VORL = RECHNUNG.POSITIONEN.FindAll(Function(x) (x.LeistungsNr = 700 Or x.LeistungsNr = 710))
                    If VORL IsNot Nothing AndAlso VORL.Count > 0 Then
                        Select Case RECHNUNG.RechnungSprache
                            Case "EN" : strText = strText.Replace("<Vorlageprovision>", "If payment is received by <Rechnungsdatum+10T>, you can deduct the template commission charged. " & vbCrLf)
                            Case Else : strText = strText.Replace("<Vorlageprovision>", "Bei Zahlungseingang bis zum <Rechnungsdatum+10T> können Sie die verrechnete Vorlageprovision in Abzug bringen. " & vbCrLf)
                        End Select
                    End If
            End Select

            'strText = strZahlbar & vbNewLine & strText
            ' Text in Rechnungskopfsatz übernehmen.
            strText = strText.Replace("<Vorlageprovision>", "")

            If strText = "" Then
                RECHNUNG.Text = Nothing
            Else
                strText.Replace("<EMailAdresse>", If(RECHNUNG_AD.E_Mail, " - "))

                RECHNUNG.Text = strText
            End If

        End If

        'Select Case RECHNUNG.Firma_ID
        '    Case "21", "22", "23"
        '        strText = strText.Replace("", "")
        'End Select

        If SPEDBUCH IsNot Nothing Then
            Select Case SPEDBUCH.Abfertigungsart
                Case 1, 2, 3, 4, 23, 28, 39, 47
                    If checkAnlage_Orig(RECHNUNG) Then
                        Select Case RECHNUNG.RechnungSprache
                            Case "EN" : strText = strText & "Please keep the original documents (e.g. ATR, EUR1) carefully for at least 7 years, as these will be required for any inspections by the customs authorities!" & vbCrLf
                            Case Else : strText = strText & "Bitte bewahren Sie die Original Dokumente (zB ATR, EUR1) mid. 7 Jahre sorgfältig auf, diese werden bei etwaigen Prüfungen durch die Zollbehörde benötigt!" & vbCrLf
                        End Select
                    End If
            End Select
        End If


        'MsgBox("Firma:" & RECHNUNG.Firma_ID & " - Land:" & "" & RECHNUNG.RechnungsLandKz & " - OffertenNr:" & RECHNUNG.OffertenNr & " - TXT: " & strText)



        Return strText


    End Function



    Shared Function getRTXT_SQL(ByRef strText, RECHNUNG, RECHNUNG_AD, Optional FIRMA_ID = Nothing, Optional LandKz = Nothing, Optional OffertenNr = Nothing, Optional EMailRechnung = Nothing, Optional ImmerAnfuegen = False) As Boolean
        ' Informations- und Werbetexte drucken
        Dim sqlStr = "SELECT * FROM Rechnungstexte WHERE 1=1"
        If FIRMA_ID IsNot Nothing Then
            sqlStr &= " AND Firma_ID='" & RECHNUNG.Firma_ID & "' "
        Else
            sqlStr &= " AND Firma_ID is null"
        End If
        If LandKz IsNot Nothing Then
            sqlStr &= " AND LandKz='" & LandKz & "' "
        Else
            sqlStr &= " AND LandKz is null"
        End If
        If OffertenNr IsNot Nothing Then
            sqlStr &= " AND OffertenNr='" & OffertenNr & "' "
        Else
            sqlStr &= " AND OffertenNr is null"
        End If
        If ImmerAnfuegen Then
            sqlStr &= " AND ImmerAnfuegen=1 "
        Else
            sqlStr &= " AND ImmerAnfuegen=0 "
        End If
        If EMailRechnung IsNot Nothing Then
            'Wennn Rechnung als Email geschickt werden sollte Rechnungsdruck=2
            If If(RECHNUNG_AD.Rechnungsdruck, -1) = 2 And If(RECHNUNG_AD.E_Mail, "") <> "" Then sqlStr &= " AND EMailRechnung=1 "
        End If

        Select Case RECHNUNG.[BelegartenNr]
            Case 70
                sqlStr &= " AND (DrucksteuerungsKz='R' OR DrucksteuerungsKz='') "
            Case 71
                sqlStr &= " AND (DrucksteuerungsKz='G' OR DrucksteuerungsKz='') "
        End Select
        '  MsgBox(sqlStr & " order by Firma_ID desc,LandKz desc,Offertennr desc")

        Dim dt_RechnungsTexte As DataTable = SQL.loadDgvBySql(sqlStr & " order by Firma_ID desc,LandKz desc,Offertennr desc", "FMZOLL")


        If dt_RechnungsTexte.Rows.Count > 0 Then
            strText &= dt_RechnungsTexte.Rows(0)("Text") & vbCrLf
            Return True
        End If
        Return False
    End Function

    Shared Function checkIfcheckIfZollbelege(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Boolean
        For Each POS In RECHNUNG.POSITIONEN
            If (POS.LeistungsNr = 10 Or POS.LeistungsNr = 60 Or POS.LeistungsNr = 70) Then
                Return True
            End If
        Next
        Return False
    End Function



    Shared Function checkIfKreditaufwendungen(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Boolean
        For Each POS In RECHNUNG.POSITIONEN
            If POS.LeistungsNr = 750 And POS.BerechnungsartNr = 9 Then
                Return True
            End If
        Next
        Return False
    End Function


    Shared Function getRgDatInput(txt As String, ByRef RechnungsDatum As Date) As Boolean
        Dim f As New frmRechnungsdatum()
        f.ShowDialog()
        RechnungsDatum = f.Datum
        Return True

        'If txt <> "" Then txt &= vbNewLine & vbNewLine
        'Dim RechnungsDatumText = InputBox(txt & "Bitte geben Sie das Rechnungsdatum an: ", "Rechnungsdatum", Now.ToShortDateString)
        'If IsDate(RechnungsDatumText) Then
        '    RechnungsDatum = CDate(CDate(RechnungsDatumText).ToShortDateString & Now.ToString(" HH:mm:ss"))
        '    Return True
        'End If
        'Return False
    End Function

    'Shared Function Datum_Per_Inpubox(txt) As String
    '    Datum_Per_Inpubox = InputBox(txt & "Bitte geben Sie das Rechnungsdatum an: ", "Rechnungsdatum", Now.ToShortDateString)

    '    If Not IsDate(CDate(Datum_Per_Inpubox)) Then Return ""

    'End Function

    Public Shared Function doRechnungsDruck_SRorER(RK_ID As Integer, Optional RechnungsDatum As Object = Nothing, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional ByRef PrinterName As String = "", Optional printStbVdb As Boolean = False, Optional AnlageEinzelRg As Boolean = False) As Boolean
        If RK_ID <= 0 Then Return False
        Dim RG_TMP As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID)
        If RG_TMP.Sammelrechnung = 0 Then
            Return doRechnungsDruck(New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID), RechnungsDatum, vorschau, Rechnugnsdruck, Path, PrinterName, , printStbVdb)
        Else
            Return cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", AnlageEinzelRg, , Rechnugnsdruck, Path, True)
        End If
    End Function

    Public Shared Function doRechnungsDruck(RK_ID As Integer, Optional RechnungsDatum As Object = Nothing, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional ByRef PrinterName As String = "", Optional ByRef printOriginalRg As Boolean = False, Optional SammelrechnungAnlagendruck As Boolean = False, Optional printStbVdb As Boolean = False) As Boolean
        If RK_ID <= 0 Then Return False
        Return doRechnungsDruck(New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID), RechnungsDatum, vorschau, Rechnugnsdruck, Path, PrinterName, printOriginalRg, SammelrechnungAnlagendruck, printStbVdb)
    End Function

    Public Shared Function doRechnungsDruck_MAIL(RK_ID As Integer, Optional RechnungsDatum As Object = Nothing, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional ByRef PrinterName As String = "", Optional SammelrechnungAnlagendruck As Boolean = False, Optional printStbVdb As Boolean = False, Optional printRgCopy As Boolean = False) As Boolean
        If RK_ID <= 0 Then Return False

        Dim RG_TMP = New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID)
        If RG_TMP Is Nothing Then Return False
        Dim SPEDBUCH_TMP = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(RG_TMP.FilialenNr, RG_TMP.AbfertigungsNr, RG_TMP.SpeditionsbuchUnterNr)

        If Rechnugnsdruck <= 0 Then Rechnugnsdruck = 3 ' Default Mail
        If SPEDBUCH_TMP Is Nothing Then Return False
        Dim f As New frmFaktEmail(RG_TMP, SPEDBUCH_TMP, Nothing, Rechnugnsdruck)
        f.Show()
        Return True
        '     Return doRechnungsDruck(New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID), RechnungsDatum, vorschau, Rechnugnsdruck, Path, PrinterName, SammelrechnungAnlagendruck, printStbVdb)
    End Function

    Shared Sub initRgFirma(ByRef rpt As rptRechnungDruck, FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, Rechnung As VERAG_PROG_ALLGEMEIN.cRechnungsausgang)

        rpt.lblFirmaOrt.Text = If(FIRMA.Firma_Ort, "")
        rpt.lblFirmaStrasse.Text = If(FIRMA.Firma_Straße, "")
        rpt.lblFirmaTel.Text = If(FIRMA.Firma_Telefon, "")
        rpt.lblFirmaFax.Text = If(FIRMA.Firma_Telefax, "")
        rpt.lblFirmaEmail.Text = If(FIRMA.Firma_E_Mail, "")
        rpt.lblFirmaWeb.Text = If(FIRMA.Firma_Webadresse, "")
        rpt.lblFirma.Text = If(FIRMA.Firma_Bez, "") & ", " & If(FIRMA.Firma_Ort, "")
        rpt.lblFirmenbuch.Text = If(FIRMA.Firma_Firmenbuch, "").ToString.Replace("Firmenbuch:", "").Trim
        rpt.lblUID.Text = If(FIRMA.Firma_UID, "").ToString.Replace("UID:", "").Trim
        rpt.lblEORI.Text = If(FIRMA.Firma_EORI, "").ToString.Replace("EORI:", "").Trim

        Select Case FIRMA.Firma_ID'VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            Case 21 '"UNISPED"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
                rpt.picVERAG.Size = New SizeF(2.712, 0.61)
            Case 22 '"UNISPED DE"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
                rpt.picVERAG.Size = New SizeF(2.712, 0.61)
                rpt.lblFirma.Text = If(FIRMA.Firma_Bez, "")  ' Ohne Ort gewünscht!
            Case 23 '"UNISPED ZS"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
                rpt.picVERAG.Size = New SizeF(2.712, 0.61)
            Case 24 '"AMBAR DE"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
                rpt.picVERAG.Size = New SizeF(2.712, 0.61)
            Case 26
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
                rpt.picVERAG.Size = New SizeF(2.712, 0.61)
            Case 20 '"IMEX"
                If Rechnung.RechnungsLandKz = "TR" Then
                    'rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR84 0006 2001 6040 0009 0987 13 " & vbNewLine & "BLZ Sube.: 1604 - Beykent Ticari - Hesap: 9098713"
                    ' rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR21 0006 2000 5440 0009 0818 67" & vbNewLine & "BLZ Sube.: 544 - Beykent Ticari - Hesap: 9081867"
                    rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR21 0006 2000 5440 0009 0818 67" & vbNewLine & "BLZ Sube.: 544 - Hadimköy Ticari - Hesap: 9081867"
                    rpt.txtBank2.Text = ""
                Else
                    If hasVK(Rechnung) Then
                        rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT35 4480 0365 7822 0002" & vbNewLine & "BIC: VBOEATWWOOE"
                        rpt.txtBank2.Text = ""
                    Else
                        If hasEUSTZOLL(Rechnung) Then
                            rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT62 4480 0365 7822 0001" & vbNewLine & "BIC: VBOEATWWOOE"
                            rpt.txtBank2.Text = ""
                        Else
                            rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT89 4480 0365 7822 0000" & vbNewLine & "BIC: VBOEATWWOOE"
                            rpt.txtBank2.Text = ""
                        End If
                    End If
                End If
            Case Else 'VERAG,ATILLA

                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim

                rpt.txtBank1.Text = rpt.txtBank1.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "Deutschland:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)
                rpt.txtBank2.Text = rpt.txtBank2.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "Deutschland:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)

                'TR Bankverbindung
                'Dim RgBetrag = (Rechnung.SteuerfreierGesamtbetrag + Rechnung.SteuerpflichtigerGesamtbetrag)
                'If Rechnung.RechnungsLandKz = "TR" And RgBetrag <= 500 And RgBetrag >= -500 Then
                '    rpt.txtBank2.Text = "Garanti Bank " & vbNewLine & "Eur Iban: TR 96 0006 2000 5440 0009 0672 28" & vbNewLine & "Kto: 544  Swift kodu: TGBATRISXXX"
                'End If

        End Select


    End Sub

    Shared Sub initRgFirmaSammelRg(ByRef rpt As rptSammelRechnungDruck, FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RechnungsNr As Integer, RechnungsLandKz As String, Buchungsjahr As Object)

        rpt.lblFirmaOrt.Text = If(FIRMA.Firma_Ort, "")
        rpt.lblFirmaStrasse.Text = If(FIRMA.Firma_Straße, "")
        rpt.lblFirmaTel.Text = If(FIRMA.Firma_Telefon, "")
        rpt.lblFirmaFax.Text = If(FIRMA.Firma_Telefax, "")
        rpt.lblFirmaEmail.Text = If(FIRMA.Firma_E_Mail, "")
        rpt.lblFirmaWeb.Text = If(FIRMA.Firma_Webadresse, "")
        rpt.lblFirma.Text = If(FIRMA.Firma_Bez, "") & ", " & If(FIRMA.Firma_Ort, "")
        rpt.lblFirmenbuch.Text = If(FIRMA.Firma_Firmenbuch, "").ToString.Replace("Firmenbuch:", "").Trim
        rpt.lblUID.Text = If(FIRMA.Firma_UID, "")
        rpt.lblEORI.Text = If(FIRMA.Firma_EORI, "")

        'Für Vorschau:
        If Buchungsjahr Is DBNull.Value Then Buchungsjahr = Now.Year
        If Buchungsjahr Is Nothing Then Buchungsjahr = Now.Year

        '  Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        Select Case FIRMA.Firma_ID
            Case 21, 22, 23 '"UNISPED"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
            Case 24 '"AMABR"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim
            Case 26 'VERAG-UNISPED"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim


            Case 20 '"IMEX"
                If RechnungsLandKz = "TR" Then
                    'rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR84 0006 2001 6040 0009 0987 13 " & vbNewLine & "BLZ Sube.: 1604 - Beykent Ticari - Hesap: 9098713"
                    rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR84 0006 2001 6040 0009 0987 13 " & vbNewLine & "BLZ Sube.: 1604 - Hadimköy Ticari - Hesap: 9098713"
                    rpt.txtBank2.Text = ""
                Else
                    If hasVK(RechnungsNr, Buchungsjahr) Then
                        rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT35 4480 0365 7822 0002" & vbNewLine & "BIC: VBOEATWWOOE"
                        rpt.txtBank2.Text = ""
                    Else
                        If hasEUSTZOLL(RechnungsNr) Then
                            rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT62 4480 0365 7822 0001" & vbNewLine & "BIC: VBOEATWWOOE"
                            rpt.txtBank2.Text = ""
                        Else
                            rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT89 4480 0365 7822 0000" & vbNewLine & "BIC: VBOEATWWOOE"
                            rpt.txtBank2.Text = ""
                        End If
                    End If
                End If
            Case Else 'VERAG,ATILLA
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim

                rpt.txtBank1.Text = rpt.txtBank1.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "Deutschland:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)
                rpt.txtBank2.Text = rpt.txtBank2.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "Deutschland:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)
        End Select


    End Sub
    Shared Sub initRgFirmaSammelRg_Bericht(ByRef rpt As rptSammelRechnungAnlagenDruck, FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RechnungsNr As Integer, RechnungsLandKz As String, Buchungsjahr As Object)

        rpt.lblFirmaOrt.Text = If(FIRMA.Firma_Ort, "")
        rpt.lblFirmaStrasse.Text = If(FIRMA.Firma_Straße, "")
        rpt.lblFirmaTel.Text = If(FIRMA.Firma_Telefon, "")
        rpt.lblFirmaFax.Text = If(FIRMA.Firma_Telefax, "")
        rpt.lblFirmaEmail.Text = If(FIRMA.Firma_E_Mail, "")
        rpt.lblFirmaWeb.Text = If(FIRMA.Firma_Webadresse, "")
        rpt.lblFirma.Text = If(FIRMA.Firma_Bez, "") & ", " & If(FIRMA.Firma_Ort, "")
        rpt.lblFirmenbuch.Text = If(FIRMA.Firma_Firmenbuch, "").ToString.Replace("Firmenbuch:", "").Trim
        rpt.lblUID.Text = If(FIRMA.Firma_UID, "")
        rpt.lblEORI.Text = If(FIRMA.Firma_EORI, "")

        'Für Vorschau:
        If Buchungsjahr Is DBNull.Value Then Buchungsjahr = Now.Year
        If Buchungsjahr Is Nothing Then Buchungsjahr = Now.Year

        '  Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        Select Case FIRMA.Firma_ID
            Case 21, 22, 23 '"UNISPED"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim

            Case 26 'VERAG-UNISPED"
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim

            Case 20 '"IMEX"
                If RechnungsLandKz = "TR" Then
                    '     rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR84 0006 2001 6040 0009 0987 13 " & vbNewLine & "BLZ Sube.: 1604 - Beykent Ticari - Hesap: 9098713"
                    rpt.txtBank1.Text = "Garanti Bank " & vbNewLine & "IBAN:TR84 0006 2001 6040 0009 0987 13 " & vbNewLine & "BLZ Sube.: 1604 - Hadimköy Ticari - Hesap: 9098713"
                    rpt.txtBank2.Text = ""
                Else
                    If hasVK(RechnungsNr, Buchungsjahr) Then
                        rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT35 4480 0365 7822 0002" & vbNewLine & "BIC: VBOEATWWOOE"
                        rpt.txtBank2.Text = ""
                    Else
                        If hasEUSTZOLL(RechnungsNr) Then
                            rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT62 4480 0365 7822 0001" & vbNewLine & "BIC: VBOEATWWOOE"
                            rpt.txtBank2.Text = ""
                        Else
                            rpt.txtBank1.Text = "Volksbank Oberösterreich AG" & vbNewLine & "IBAN:AT89 4480 0365 7822 0000" & vbNewLine & "BIC: VBOEATWWOOE"
                            rpt.txtBank2.Text = ""
                        End If
                    End If
                End If
            Case Else 'VERAG,ATILLA
                rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
                rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim

                rpt.txtBank1.Text = rpt.txtBank1.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "Deutschland:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)
                rpt.txtBank2.Text = rpt.txtBank2.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "Deutschland:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)
        End Select


    End Sub

    Shared Function hasEUSTZOLL(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Boolean
        For Each pos In RECHNUNG.POSITIONEN
            Select Case pos.LeistungsNr
                Case 10, 20, 60, 67, 66 : Return True
            End Select
        Next
        Return False
    End Function


    Shared Function hasEUSTZOLL(RechnungsNr As Integer) As Boolean
        ' MsgBox(SQL.getValueTxtBySql("SELECT top 1 isnull(count(*),0)  FROM [VERAG].[dbo].[RechnungsausgangPositionen] as POS inner join Rechnungsausgang as RA on Ra.RK_ID=pos.RK_ID  where RechnungsNr='" & RechnungsNr & "' AND LeistungsNr IN (10, 20, 60, 67, 66 )", "FMZOLL"))
        Return CBool(CInt(SQL.getValueTxtBySql("SELECT top 1 isnull(count(*),0)  FROM [VERAG].[dbo].[RechnungsausgangPositionen] as POS inner join Rechnungsausgang as RA on Ra.RK_ID=pos.RK_ID  where RechnungsNr='" & RechnungsNr & "' AND LeistungsNr IN (10, 20, 60, 67, 66 )", "FMZOLL")) > 0)
    End Function

    Shared Function hasVK(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Boolean
        Return CBool(CInt(SQL.getValueTxtBySql("SELECT TOP 1 isnull(count(*),0) FROM [tblVorauskassen] WHERE [vk_FilialeNr]='" & RECHNUNG.FilialenNr & "' AND [vk_AbfertigungsNr]='" & RECHNUNG.AbfertigungsNr & "' AND [vk_KdNr]='" & RECHNUNG.RechnungsKundenNr & "'", "FMZOLL")) > 0)
    End Function

    Shared Function hasVK(RechnungsNr As Integer, Buchungsjahr As Integer) As Boolean
        Return CBool(CInt(SQL.getValueTxtBySql("SELECT TOP 1 isnull(count(*),0) FROM [tblVorauskassen] inner join Rechnungsausgang ON [vk_FilialeNr]=FilialenNr AND [vk_AbfertigungsNr]=AbfertigungsNr AND [vk_KdNr]=RechnungsKundenNr  WHERE RechnungsNr='" & RechnungsNr & "' AND Buchungsjahr='" & Buchungsjahr & "'", "FMZOLL")) > 0)
    End Function

    Public Shared Function doRechnungsDruck(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional RechnungsDatum As Object = Nothing, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional ByRef PrinterName As String = "", Optional printOriginalRg As Boolean = False, Optional SammelrechnungAnlagendruck As Boolean = False, Optional printStbVdb As Boolean = False) As Boolean
        If RECHNUNG Is Nothing Then MsgBox("Fehler beim Laden der Rechnungsdaten!") : Return False
        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        Try
            Dim rpt As New rptRechnungDruck(RECHNUNG.RechnungSprache)

            Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(RECHNUNG.Firma_ID)
            Dim KD_RG As New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)

            If FIRMA Is Nothing Then MsgBox("Keine Firma gewählt!") : Return False

            If Not SammelrechnungAnlagendruck Then
                If vorschau = False And RECHNUNG.Sammelrechnung <> "0" Then MsgBox("Nur bei Einzelrechnung möglich!") : Return False
            End If

            If RECHNUNG.POSITIONEN.Count = 0 Then MsgBox("Keine Daten vorhanden!") : Return False
            Dim dtDataSource As New DataTable

            dtDataSource.Columns.Add("LeistungsNr")
            dtDataSource.Columns.Add("LeistungsBez")
            dtDataSource.Columns.Add("Anzahl")
            dtDataSource.Columns.Add("SteuerpflichtigerBetrag")
            dtDataSource.Columns.Add("SteuerfreierBetrag")
            dtDataSource.Columns.Add("Belegdaten")

            Dim gsBetrTmp As Double = 0
            For Each r In RECHNUNG.POSITIONEN
                ' dtDataSource.Rows.Add(r.LeistungsNr, r.LeistungsBez, r.Anzahl, r.SteuerpflichtigerBetrag, r.SteuerfreierBetrag, (If(r.Belegdaten, "") & " " & If(r.Aufschubfälligkeit, "")).ToString.Trim)
                dtDataSource.Rows.Add(r.LeistungsNr, r.LeistungsBez, r.Anzahl, r.SteuerpflichtigerBetrag, r.SteuerfreierBetrag, If(r.Belegdaten, "").ToString.Trim)
                gsBetrTmp += CDbl(r.SteuerpflichtigerBetrag + r.SteuerfreierBetrag)
            Next

            If gsBetrTmp = 0 Then MsgBox("Rechnungsbetrag ist EUR 0,- ") : Return False


            Dim dataView As New DataView(dtDataSource)
            dataView.Sort = " LeistungsNr "
            Dim dtTmp As DataTable = dataView.ToTable()

            '    rpt.DataSource = SQL.loadDgvBySql("SELECT * FROM [Rechnungsausgangpositionen] where RK_ID ='" & RECHNUNG.RK_ID & "' ", "FMZOLL")
            rpt.DataSource = dtTmp

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

            Dim sum = 0
            Select Case RECHNUNG.RechnungSprache
                Case "EN"
                    Select Case RECHNUNG.BelegartenKz
                        Case "AR"
                            rpt.lblUeberschriftRG_GS.Text = "INVOICE"
                            rpt.lblSummeUeberschrift.Text = "Invoice Amount:"
                            rpt.lblRgNrUeberschrift.Text = "Invoice No.:"
                            rpt.lblRgDatumUeberschrift.Text = "Invoice Date:"
                        Case "AG"
                            rpt.lblUeberschriftRG_GS.Text = "CREDIT NOTE"
                            rpt.lblSummeUeberschrift.Text = "Credit Amount:"
                            rpt.lblRgNrUeberschrift.Text = "Credit Note No.:"
                            rpt.lblRgDatumUeberschrift.Text = "Credit Note Date:"
                    End Select
                Case Else
                    Select Case RECHNUNG.BelegartenKz
                        Case "AR"
                            rpt.lblUeberschriftRG_GS.Text = "RECHNUNG"
                        Case "AG"
                            rpt.lblUeberschriftRG_GS.Text = "GUTSCHRIFT"
                            rpt.lblSummeUeberschrift.Text = "Gutschriftsbetrag:"
                            rpt.lblRgNrUeberschrift.Text = "Gutschrifts-Nr.:"
                            rpt.lblRgDatumUeberschrift.Text = "Gutschrifts-Datum:"
                    End Select

            End Select


            initRgFirma(rpt, FIRMA, RECHNUNG)

            Select Case RECHNUNG.Firma_ID
                Case 1 ' rpt.picVERAG.Image= My.Resources.Verag_AG_Logo : rpt.Picture1.Image = My.Resources.aeo_AT_imex is eh standard
                Case 4 : rpt.picVERAG.Image = My.Resources.Verag_AG_Logo : rpt.Picture1.Image = Nothing
                Case 7 : rpt.picVERAG.Image = My.Resources.Atilla_big_med : rpt.Picture1.Image = Nothing
                Case 11 : rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo : rpt.Picture1.Image = My.Resources.aeo_CS
                Case 20 : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Picture1.Image = My.Resources.aeo_AT_imex
                Case 21 : rpt.picVERAG.Image = My.Resources.Unisped_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_AT
                Case 22 : rpt.picVERAG.Image = My.Resources.Unisped_DE_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_DE
                Case 26 : rpt.picVERAG.Image = My.Resources.VERAG_UNISPED_Logo : rpt.Picture1.Image = Nothing
                Case 23 : rpt.picVERAG.Image = My.Resources.Unisped_ZS_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_ZS_AT
                Case 24 : rpt.picVERAG.Image = My.Resources.ambar_simple : rpt.Picture1.Image = Nothing
                    rpt.txtAvisierer.Visible = False : rpt.lblAvisiererUeberschrift.Visible = False : rpt.txtWarenwert.Visible = False : rpt.lblWarenWertUeberschrift.Visible = False
                Case 17 : rpt.picVERAG.Image = My.Resources.FrontOfficeSUB_Horizontal : rpt.Picture1.Image = Nothing
            End Select

            Dim ZZTage = 10
            Dim ZZKdZahlungsziel = SQL.DLookup("Zahlungsziel", "Kunden", "Kundennr=" & RECHNUNG.RechnungsKundenNr, "FMZOLL", 10)
            If ZZKdZahlungsziel IsNot Nothing AndAlso IsNumeric(ZZKdZahlungsziel) Then
                ZZTage = ZZKdZahlungsziel
            End If
            Select Case RECHNUNG.RechnungSprache
                Case "EN" : rpt.Label2.Text = ZZTage & " Days" : rpt.Label1.Text = "Payment target:"
                Case Else : rpt.Label2.Text = ZZTage & " Tage"
            End Select

            Select Case RECHNUNG.Firma_ID
                Case 21, 22, 23, 26, 24 : rpt.Label1.Visible = False : rpt.Label2.Visible = False
            End Select

            rpt.lblKundenNr.Text = If(RECHNUNG.RechnungsKundenNr > 0, RECHNUNG.RechnungsKundenNr, "")
            rpt.lblRgNr.Text = If(RECHNUNG.RechnungsNr > 0, addYeartoRgNr(FIRMA.Firma_ID, RECHNUNG.Buchungsjahr) & RECHNUNG.RechnungsNr, "Vorschau")
            rpt.lblRgDatum.Text = If(RECHNUNG.RechnungsDatum IsNot Nothing, CDate(RECHNUNG.RechnungsDatum).ToShortDateString, "VORSCHAU")

            'rpt.lblKundenAuftragsnummer.Text = If(RECHNUNG.KdAuftragsNr, "")
            'If rpt.lblKundenAuftragsnummer.Text = String.Empty Then rpt.lblKundenAuftragsnummerUeberschrift.Visible = False

            rpt.lblAbfertigungsNr.Text = RECHNUNG.FilialenNr & " / " & RECHNUNG.AbfertigungsNr & " " & RECHNUNG.UnterNr.ToString("00")
            rpt.lblAbfertigungsDatum.Text = RECHNUNG.Abfertigungsdatum.ToShortDateString
            rpt.lblLKWId.Text = If(RECHNUNG.AvisoID, "")

            rpt.lblSachbearbeiter.Text = getSBRgName(RECHNUNG.Firma_ID, RECHNUNG.Sachbearbeiter) 'If(RECHNUNG.Sachbearbeiter, "")

            rpt.txtAbsender.Text = If(RECHNUNG.AbsenderName_1, "") & " " & If(RECHNUNG.AbsenderName_2, "") & vbNewLine & If(RECHNUNG.AbsenderOrt, "").ToString.Trim
            rpt.txtEmpfaenger.Text = If(RECHNUNG.EmpfängerName_1, "") & " " & If(RECHNUNG.EmpfängerName_2, "") & vbNewLine & If(RECHNUNG.EmpfängerOrt, "").ToString.Trim
            rpt.txtAvisierer.Text = If(RECHNUNG.Avisierer, "")
            If rpt.txtAbsender.Text = String.Empty Then rpt.lblAbsenderUeberschrift.Visible = False
            If rpt.txtEmpfaenger.Text = String.Empty Then rpt.lblEmpfaengerUeberschrift.Visible = False
            If rpt.txtAvisierer.Text = String.Empty Then rpt.lblAvisiererUeberschrift.Visible = False

            rpt.txtZollbelegNr.Text = If(RECHNUNG.BelegNr, "")

            Dim waehrungCode As String = SQL.getValueTxtBySql("SELECT isnull(Währungscode,'') FROM Währungstabelle WHERE Währungsschlüssel = " & If(RECHNUNG.[WährungsNr], -1) & ";", "FMZOLL")
            If IsNumeric(If(RECHNUNG.Wert, "")) Then
                '  rpt.txtWarenwert.Text = CDbl(RECHNUNG.Wert).ToString("N2") & " " & If(RECHNUNG.Währungscode, "")
                rpt.txtWarenwert.Text = CDbl(RECHNUNG.Wert).ToString("N2") & " " & waehrungCode
            Else
                ' rpt.txtWarenwert.Text = If(RECHNUNG.Wert, "") & " " & If(RECHNUNG.Währungscode, "")
                rpt.txtWarenwert.Text = If(RECHNUNG.Wert, "") & " " & waehrungCode
            End If
            rpt.txtSendungsdaten.Text = If(RECHNUNG.Packstücke_und_Warenbezeichnung, "")
            If rpt.txtSendungsdaten.Text.Length > 200 Then rpt.txtSendungsdaten.Text = rpt.txtSendungsdaten.Text.Substring(0, 200)
            rpt.txtSendungsdaten.Text = rpt.txtSendungsdaten.Text.Replace(", 0,0 kg", "") '0kg ausblenden
            rpt.txtBeförderungsmittel.Text = If(RECHNUNG.LKW_Kennzeichen, "")

            rpt.txtGrenze.Text = If(RECHNUNG.Grenze, "")
            If rpt.txtGrenze.Text = String.Empty Then rpt.txtGrenze.Text = SQL.getValueTxtBySql("SELECT TOP 1 isnull([Grenzstelle],'')   FROM [Filialen]  where FilialenNr='" & RECHNUNG.FilialenNr & "'", "FMZOLL")
            If rpt.txtGrenze.Text = String.Empty Then rpt.txtGrenzeUeberschrift.Visible = False

            rpt.lblRechnungAn.Text = If(RECHNUNG.RechnungsName_1, "") & vbNewLine
            If If(RECHNUNG.RechnungsName_2, "") <> "" Then rpt.lblRechnungAn.Text &= RECHNUNG.RechnungsName_2 & vbNewLine
            If If(RECHNUNG.RechnungsName_AdressZusatz, "") <> "" Then rpt.lblRechnungAn.Text &= RECHNUNG.RechnungsName_AdressZusatz & vbNewLine
            If If(RECHNUNG.RechnungsStraße, "") <> "" Then rpt.lblRechnungAn.Text &= RECHNUNG.RechnungsStraße & vbNewLine
            If If(RECHNUNG.RechnungsOrt, "") <> "" Then rpt.lblRechnungAn.Text &= RECHNUNG.RechnungsOrt & vbNewLine
            If If(RECHNUNG.RechnungsLandKz, "") <> "" Then rpt.lblRechnungAn.Text &= cProgramFunctions.getLandBez_fromISO1Land(RECHNUNG.RechnungsLandKz, "", RECHNUNG.RechnungSprache).ToString.ToUpper


            'If If(RECHNUNG.RechnungsName_2, "") = "" Then
            '    rpt.lblRechnung_Name1.Text = ""
            '    rpt.lblRechnung_Name2.Text = If(RECHNUNG.RechnungsName_1, "")
            'Else
            '    rpt.lblRechnung_Name1.Text = If(RECHNUNG.RechnungsName_1, "")
            '    rpt.lblRechnung_Name2.Text = If(RECHNUNG.RechnungsName_2, "")
            'End If
            'rpt.lblRechnung_Strasse.Text = If(RECHNUNG.RechnungsStraße, "")
            'rpt.lblRechnung_Ort.Text = If(RECHNUNG.RechnungsOrt, "")
            'rpt.lblRechnung_Land.Text = cProgramFunctions.getLandBez_fromISO1Land(RECHNUNG.RechnungsLandKz, "", RECHNUNG.RechnungSprache).ToString.ToUpper

            If KD_RG IsNot Nothing AndAlso If(KD_RG.Steuernummer, "") <> String.Empty Then
                rpt.lblRechnung_Steuernummer.Text = If(KD_RG.LandKz, "") & " " & If(KD_RG.Steuernummer, "").ToString.Trim
                ' rpt.lblRechnung_UID.Text = If(KD_RG.UstIdKz, "") & " " & If(KD_RG.UstIdNr, "").ToString.Trim
            Else
                rpt.lblRechnung_Steuernummer.Text = ""
                '   rpt.lblRechnung_UID.Text = ""
            End If
            rpt.lblRechnung_Steuernummer.Visible = (rpt.lblRechnung_Steuernummer.Text <> String.Empty)
            rpt.lblRechnung_Steuernummer_Ueberschrift.Visible = (rpt.lblRechnung_Steuernummer.Text <> String.Empty)

            rpt.lblRechnung_UID.Text = If(RECHNUNG.RechnungsUstIdKz, "") & If(RECHNUNG.RechnungsUstIdNr, "")
            rpt.lblRechnung_UID.Visible = (rpt.lblRechnung_UID.Text <> String.Empty)
            rpt.lblRechnung_UID_Ueberschrift.Visible = (rpt.lblRechnung_UID.Text <> String.Empty)

            rpt.txtKdAuftragsNr.Text = If(RECHNUNG.KdAuftragsNr, "")
            rpt.txtKdAuftragsNr_Ueberschrift.Visible = (rpt.txtKdAuftragsNr.Text <> String.Empty)

            rpt.TextBox1.Text = If(RECHNUNG.TextZZ, "").ToString.Replace("; ", vbNewLine).Trim
            rpt.txtVermerk.Text = (If(RECHNUNG.Text, "").ToString.Trim & vbNewLine & vbNewLine & If(RECHNUNG.Notiz, "").ToString.Trim).ToString.Trim

            If RECHNUNG.RechnungsDatum IsNot Nothing Then 'Muss zweimal vorkommen, Wiederholungsdruck
                rpt.txtVermerk.Text = rpt.txtVermerk.Text.Replace("<Rechnungsdatum+10T>", CDate(RECHNUNG.RechnungsDatum).AddDays(10).ToShortDateString)
                rpt.TextBox1.Text = rpt.TextBox1.Text.Replace("<Rechnungsdatum+10T>", CDate(RECHNUNG.RechnungsDatum).AddDays(10).ToShortDateString)
            Else
                rpt.txtVermerk.Text = rpt.txtVermerk.Text.Replace("<Rechnungsdatum+10T>", Now.AddDays(10).ToShortDateString)
                rpt.TextBox1.Text = rpt.TextBox1.Text.Replace("<Rechnungsdatum+10T>", Now.AddDays(10).ToShortDateString)
            End If


            '  REVERSE CHARGE (Übergang der Steuerschuld in EU-Ländern).
            '             Dies hat zur Folge, dass steuerfreie Rechnungsbeträge für Leistungen,
            '             die in der Leistungstabelle als ReverseCharge gekennzeichnet sind,
            '             summiert und auf der Rechnung ausgewiesen werden.
            If isReverseChargeSumme(FIRMA, RECHNUNG) Then
                Select Case RECHNUNG.RechnungSprache
                    '  Case "EN" : rpt.txtInfo.Text = "Attention! For EU customers! Since 1.1.2010, services are subject to the application of the reverse charge procedure. Transfer of the tax liability to the recipient of the service."
                  '  Case Else : rpt.txtInfo.Text = "Achtung! Für EU-Kunden! Seit 1.1.2010 unterliegen Leistungen der Anwendung des Reverse Charge Verfahrens. Übergang der Steuerschuld an den Leistungsempfänger."
                    Case "EN" : rpt.txtInfo.Text = "The VAT liability is transferred to the recipient of the service (reverse charge system)." '"Attention! For EU customers! Since 1.1.2010, services are subject to the application of the reverse charge procedure. Transfer of the tax liability to the recipient of the service."
                    Case Else : rpt.txtInfo.Text = "Die Umsatzsteuerschuld geht auf den Leistungsempfänger über (Reverse Charge Verfahren)." '"Achtung! Für EU-Kunden! Seit 1.1.2010 unterliegen Leistungen der Anwendung des Reverse Charge Verfahrens. Übergang der Steuerschuld an den Leistungsempfänger."
                End Select
            Else : rpt.txtInfo.Text = "" : End If



            rpt.txtAnlagen.Text = ""
            If If(RECHNUNG.Anlage_1, "") <> "" Then rpt.txtAnlagen.Text &= RECHNUNG.Anlage_1
            If If(RECHNUNG.Anlage_2, "") <> "" Then rpt.txtAnlagen.Text &= vbNewLine & RECHNUNG.Anlage_2
            If If(RECHNUNG.Anlage_3, "") <> "" Then rpt.txtAnlagen.Text &= vbNewLine & RECHNUNG.Anlage_3
            If If(RECHNUNG.Anlage_4, "") <> "" Then rpt.txtAnlagen.Text &= vbNewLine & RECHNUNG.Anlage_4
            If If(RECHNUNG.Anlage_5, "") <> "" Then rpt.txtAnlagen.Text &= vbNewLine & RECHNUNG.Anlage_5
            If If(RECHNUNG.Anlage_6, "") <> "" Then rpt.txtAnlagen.Text &= vbNewLine & RECHNUNG.Anlage_6

            rpt.txtAnlagen.Text = rpt.txtAnlagen.Text.Trim

            If rpt.txtAnlagen.Text.Replace(" ", "") = "" Then
                rpt.lblAnlagenUeberschrift.Visible = False
            End If

            rpt.txtHandlingATA.Text = If(RECHNUNG.Handling, "")
            If rpt.txtHandlingATA.Text.Replace(" ", "") = "" Then
                rpt.lblHandlingATA.Visible = False
            End If


            'rpt.lblMandantNiederlassung.Text = PERSONAL.Mandant & "  /  " & PERSONAL.Niederlassung

            'ANLAGE ZUR RECHNUNG:
            If RECHNUNG.Status = 3 Or RECHNUNG.Sammelrechnung <> 0 Then
                rpt.txtAnlagen.Visible = False
                rpt.lblAnlagenUeberschrift.Visible = False
                rpt.lblRgDatumUeberschrift.Visible = False
                rpt.lblRgNrUeberschrift.Visible = False
                rpt.lblRgDatum.Visible = False
                rpt.lblRgNr.Visible = False

                rpt.lblSummeUeberschrift.Visible = False
                rpt.lblSumme.Visible = False
                rpt.lblZWSumme.Visible = False
                rpt.lblZwText.Visible = False
                rpt.lblSteuersatz.Visible = False
                rpt.lblSteuerbetrag.Visible = False

                rpt.Label46.Visible = False
                rpt.Line1.Visible = False
                rpt.Line5.Visible = False
                rpt.Line14.Visible = False
                rpt.Line8.Visible = False
                rpt.Line7.Visible = False


                Select Case RECHNUNG.RechnungSprache
                    Case "EN"
                        Select Case RECHNUNG.BelegartenKz
                            Case "AR"
                                rpt.lblUeberschriftRG_GS.Text = "Attachment to invoice"
                            Case "AG"
                                rpt.lblUeberschriftRG_GS.Text = "Attachment to CREDIT NOTE"
                        End Select
                    Case Else
                        Select Case RECHNUNG.BelegartenKz
                            Case "AR"
                                rpt.lblUeberschriftRG_GS.Text = "Anlage zur Sammelrechnung"
                            Case "AG"
                                rpt.lblUeberschriftRG_GS.Text = "Anlage zur Gutschrift"
                        End Select

                End Select
            End If

            If Not printOriginalRg Then 'sonst wird der originaldruck erzwungen
                If RECHNUNG.DruckDatumZeit IsNot Nothing Then
                    Select Case RECHNUNG.RechnungSprache
                        Case "EN" : rpt.lblUeberschriftRG_GS.Text &= " - COPY"
                        Case Else : rpt.lblUeberschriftRG_GS.Text &= " - KOPIE"
                    End Select
                End If
            End If

            'Dim cnt As Integer = 0

            Dim sumSteuerpflichtig As Double = 0
            Dim sumSteuerfrei As Double = 0

            '     Dim Anz As Double = 0
            '   Dim gesSumBt As Double = 0
            ' Dim gesAnz As Double = 0
            Dim vorzeichen = If(If(RECHNUNG.Vorzeichen, "") = "-", -1, 1)

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

                                              rpt.lblLeistungNr.Text = checkNull(rpt.Fields.Item("LeistungsNr").Value)
                                              rpt.txtLeistung.Text = checkNull(rpt.Fields.Item("LeistungsBez").Value)


                                              If rpt.Fields.Item("Belegdaten").Value IsNot Nothing Then
                                                  rpt.txtLeistung.Text &= vbNewLine & checkNull(rpt.Fields.Item("Belegdaten").Value)
                                              End If

                                              rpt.lblAnzahl.Text = checkNull(rpt.Fields.Item("Anzahl").Value)
                                              ' rpt.lblBetrag.Text = rpt.Fields.Item("betrag").Value

                                              Dim stPfl As Double = 0
                                              Dim stFrei As Double = 0


                                              If IsNumeric(checkNull(rpt.Fields.Item("SteuerpflichtigerBetrag").Value)) Then stPfl = CDbl(rpt.Fields.Item("SteuerpflichtigerBetrag").Value())
                                              rpt.lblSteuerpflichtig.Text = If(stPfl <> 0, CDbl(stPfl * vorzeichen).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")
                                              If IsNumeric(checkNull(rpt.Fields.Item("SteuerfreierBetrag").Value)) Then stFrei = CDbl(rpt.Fields.Item("SteuerfreierBetrag").Value())
                                              rpt.lblSteuerfrei.Text = If(stFrei <> 0, CDbl(stFrei * vorzeichen).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")


                                              sumSteuerpflichtig += stPfl
                                              sumSteuerfrei += stFrei

                                              '  Anz += 1
                                              ' gesAnz += 1

                                              ' If Anz Mod 2 = 0 Then
                                              '     rpt.Detail.BackColor = Color.FromArgb(240, 240, 240)
                                              'Else
                                              '  rpt.Detail.BackColor = Color.White
                                              ' End If
                                              'rpt.Line10.Height = rpt.Detail.Height
                                          End Sub

            AddHandler rpt.ReportFooter1.Format, Sub()
                                                     rpt.lblSteuerpflichtigGes.Text = If(sumSteuerpflichtig <> 0, CDbl(sumSteuerpflichtig * vorzeichen).ToString("N2", CultureInfo.CurrentCulture), "")
                                                     rpt.lblSteuerfreiGes.Text = If(sumSteuerfrei <> 0, CDbl(sumSteuerfrei * vorzeichen).ToString("N2", CultureInfo.CurrentCulture), "")


                                                     Dim steuerProz As Double = 0
                                                     Dim steuerBez As String = ""

                                                     Dim dt As DataTable = SQL.loadDgvBySql("SELECT TOP 1 isnull([Steuersatz %],0),isnull([Steuerbezeichnung],'')  FROM [Steuertabelle] WHERE [Steuerschlüssel]='" & RECHNUNG.Steuerschlüssel & "'", "FMZOLL")
                                                     If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
                                                         steuerProz = dt.Rows(0)(0)
                                                         steuerBez = dt.Rows(0)(1)
                                                     End If

                                                     Dim tmpSteuerbetrag = CDbl((sumSteuerpflichtig * steuerProz) * vorzeichen)
                                                     rpt.lblSteuersatz.Text = steuerBez
                                                     rpt.lblSteuerbetrag.Text = If((sumSteuerpflichtig * steuerProz) <> 0, tmpSteuerbetrag.ToString("N2", CultureInfo.CurrentCulture), "")
                                                     If tmpSteuerbetrag = 0 Then
                                                         rpt.lblSteuerbetrag.Visible = False
                                                     End If

                                                     '  rpt.lblZWSumme.Text = (sumSteuerpflichtig + sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture)
                                                     '  rpt.lblSumme.Text = (sumSteuerpflichtig + sumSteuerfrei + (sumSteuerpflichtig * steuerProz)).ToString("N2", CultureInfo.CurrentCulture)

                                                     rpt.lblZWSumme.Text = CDbl((sumSteuerpflichtig + sumSteuerfrei) * vorzeichen).ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.lblSumme.Text = CDbl((sumSteuerpflichtig + sumSteuerfrei + (sumSteuerpflichtig * steuerProz)) * vorzeichen).ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.Label46.Text = If(RECHNUNG.Währungscode, "EUR")

                                                     If isSTARK(RECHNUNG) Then
                                                         rpt.lblZwText.Text = "Summe EUST"
                                                         rpt.lblZWSumme.Text = CDbl(getSTARK_EUST(FIRMA, RECHNUNG)).ToString("N2", CultureInfo.CurrentCulture)
                                                         rpt.lblZwText.Visible = True
                                                         rpt.lblZWSumme.Visible = True

                                                         rpt.lblSteuersatz.Text = "Summe ohne EUST"
                                                         rpt.lblSteuerbetrag.Text = CDbl(getSTARK_ohneEUST(FIRMA, RECHNUNG)).ToString("N2", CultureInfo.CurrentCulture)
                                                         rpt.lblSteuersatz.Visible = True
                                                         rpt.lblSteuerbetrag.Visible = True

                                                     Else

                                                         If isReverseChargeSumme(FIRMA, RECHNUNG) Then
                                                             rpt.lblZwText.Text = "Summe Steuerfrei"
                                                             rpt.lblZWSumme.Text = CDbl(getSteuerfreiEUSTZOLL(FIRMA, RECHNUNG)).ToString("N2", CultureInfo.CurrentCulture)
                                                             rpt.lblZwText.Visible = True
                                                             rpt.lblZWSumme.Visible = True

                                                             rpt.lblSteuersatz.Text = "Summe Reverse Charge"
                                                             rpt.lblSteuerbetrag.Text = CDbl(getReverseChargeSummeRKID(FIRMA, RECHNUNG)).ToString("N2", CultureInfo.CurrentCulture)
                                                             rpt.lblSteuersatz.Visible = True
                                                             rpt.lblSteuerbetrag.Visible = True
                                                         Else

                                                             If sumSteuerfrei = 0 Or sumSteuerpflichtig = 0 Then

                                                                 rpt.lblZwText.Visible = False
                                                                 rpt.lblZWSumme.Visible = False
                                                             End If
                                                         End If
                                                     End If


                                                 End Sub

            'DruckDatumUhrzeit wird gesetzt, falls noch ungedruckt...
            'If RECHNUNG.DruckDatumZeit Is Nothing Then
            '    RECHNUNG.SET_DruckdatumUhrzeit()
            'End If


            If vorschau Then
                cProgramFunctions.showRpt(rpt, "Rechnungsdruck", False)
                Return True
            Else
                Dim Kopie = True
                'ORIGINAL
                Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(RECHNUNG.RechnungsKundenNr)
                If RECHNUNG.Status = 0 Then
                    If AD IsNot Nothing Then
                        Kopie = False
                        'Aktualisierung und speichern:
                        If Abrechnugsdaten_AKTUALISIEREN(RECHNUNG, RechnungsDatum) Then
                            rpt.lblRgNr.Text = If(RECHNUNG.RechnungsNr > 0, addYeartoRgNr(RECHNUNG.Firma_ID, RECHNUNG.Buchungsjahr) & RECHNUNG.RechnungsNr, "Vorschau")
                            rpt.lblRgDatum.Text = CDate(RECHNUNG.RechnungsDatum).ToShortDateString

                            If RECHNUNG.RechnungsDatum IsNot Nothing Then 'Muss zweimal vorkommen, Erstmaliger Druck
                                rpt.txtVermerk.Text = rpt.txtVermerk.Text.Replace("<Rechnungsdatum+10T>", CDate(RECHNUNG.RechnungsDatum).AddDays(10).ToShortDateString)
                                rpt.TextBox1.Text = rpt.TextBox1.Text.Replace("<Rechnungsdatum+10T>", CDate(RECHNUNG.RechnungsDatum).AddDays(10).ToShortDateString)
                            Else
                                rpt.txtVermerk.Text = rpt.txtVermerk.Text.Replace("<Rechnungsdatum+10T>", Now.AddDays(10).ToShortDateString)
                                rpt.TextBox1.Text = rpt.TextBox1.Text.Replace("<Rechnungsdatum+10T>", Now.AddDays(10).ToShortDateString)
                            End If

                        Else
                            MsgBox("Fehler bei der Vergabe der Rg-Nr.!")
                            Return False
                        End If
                    Else
                        MsgBox("Fehler: Kein Rechnungsempfänger gefunden!")
                        Return False
                    End If
                Else
                    If RECHNUNG.[DruckDatumZeit] Is Nothing Then
                        RECHNUNG.[DruckDatumZeit] = Now 'Wenn Rg-Nr schon vergeben wird das neu gesetzt
                        RECHNUNG.SAVE_DruckDatumZeit() ' Nur SAVE_DruckDatumZeit ändern/setzen
                    End If
                End If

                If Not RECHNUNG.checkRechnungsNrIsSet() Then
                    MsgBox("Rechnungsnummer wurde nicht in Datenbank eingetragen" & vbNewLine & "Vorgang wird abgebrochen")
                    Return False
                End If

                'Rechnugnsdruck  =  Individuell für deise Rechnung, wird optional mitgegeben
                ' Dim RG_Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Rechnung_" & If(RECHNUNG.RechnungsNr, "") & ".pdf"
                Dim RG_Bezeichnung = If(RECHNUNG.[BelegartenKz] = "AR", "Rechnung_", "Gutschrift_") & If(RECHNUNG.RechnungsNr, "") & ".pdf"

                '--------------------------------
                ' --> TEST wegen Size Problem
                '--------------------------------
                If PrinterName <> "" Then
                    rpt.Document.Printer.PrinterName = PrinterName
                End If
                rpt.Document.Printer.PaperSize = rpt.Document.Printer.PrinterSettings.DefaultPageSettings.PaperSize
                '--------------------------------

                'Immer Exportieren, da in Therefore speichern
                Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG_Bezeichnung, ".pdf", , False)
                Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
                rpt.Run(False)
                p.NeverEmbedFonts = ""
                p.Export(rpt.Document, tmpPath)
                Path = tmpPath

                'THEREFORE IMPORT:
                '-------------------------------------------------------------------------------
                Try
                    If Not Kopie And (Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM OrElse vbYes = MsgBox("TEST - in Therefore speichern?", vbYesNoCancel)) Then

                        VERAG_PROG_ALLGEMEIN.cTherefore.saveFileTo_ImportFolder(tmpPath, RECHNUNG.FilialenNr & RECHNUNG.AbfertigungsNr, If(RECHNUNG.AvisoID, ""), RECHNUNG.Firma_ID, False)

                    End If
                Catch ex As Exception
                    MsgBox("Therefore-Import fehlgeschlagen!" & ex.Message & ex.StackTrace)
                End Try
                '-------------------------------------------------------------------------------

                'ABRECHNUNGS API:
                '-------------------------------------------------------------------------------
                If Not Kopie Then
                    Try
                        Dim KUNDE_ERW As New VERAG_PROG_ALLGEMEIN.cKundenErweitert(RECHNUNG.RechnungsKundenNr)
                        If KUNDE_ERW IsNot Nothing Then
                            'TRADESHIFT:
                            Try
                                If KUNDE_ERW.kde_API_Tradeshift Then
                                    Select Case RECHNUNG.Firma_ID
                                        Case 21, 22, 23
                                            'System.IO.File.Copy(tmpPath, "\\srv01.unisu.at\Unisped\___AR_PDF\" & RG_Bezeichnung, True)
                                            System.IO.File.Copy(tmpPath, "\\unidc01.unisu.at\Unisped\___AR_PDF\" & RG_Bezeichnung, True)
                                    End Select
                                End If
                            Catch ex As Exception
                                MsgBox("Tradeshift Export fehlgeschlagen! " & ex.Message & ex.StackTrace)
                            End Try
                        End If
                    Catch ex As Exception
                        MsgBox("API Fehler!" & ex.Message & ex.StackTrace)
                    End Try
                End If
                '-------------------------------------------------------------------------------

                Dim RD_DRUCK = If(Rechnugnsdruck > 0, Rechnugnsdruck, If(AD.Rechnungsdruck, 0)) 'If(AD.Rechnungsdruck, 0)
                Select Case RD_DRUCK
                    Case 0, 1 'DRUCKEN

                        Dim ret = cProgramFunctions.printRpt(rpt, PrinterName, False)

                        If printStbVdb Then
                            If (RECHNUNG.[DruckDatumZeit] Is Nothing OrElse vbYes = MsgBox("Zollbeleg drucken?", vbYesNoCancel)) Then
                                printSpedBuchAnhaenge(RECHNUNG, True, True)
                            End If
                        End If

                        Return ret

                        'Case 1 'FAX
                    Case 2, 5 'MAIL
                        'Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG_Bezeichnung, ".pdf", , False)
                        'Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
                        'rpt.Run(False)
                        'p.NeverEmbedFonts = ""
                        'p.Export(rpt.Document, tmpPath)

                        ' rpt.Dispose()
                        Path = tmpPath

                        Try
                            Dim outl As New Outlook.Application
                            Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
                            Mail = outl.CreateItem(0)
                            Select Case RECHNUNG.RechnungsLandKz
                                Case "TR"
                                    Mail.Subject = "Invoice No. " & RECHNUNG.RechnungsNr
                                    Mail.HTMLBody = "Sayin Bayanlar ve Baylar,<br><br>ekte baslikta yazan faturayi bulabilirsinz."
                                    Mail.HTMLBody &= "<br><br><br>Saygilarimizla<br><br>" & getSignature(RECHNUNG)
                                Case "A", "AT", "D", "DE", "CH"
                                    Mail.Subject = "Rechnung Nr. " & RECHNUNG.RechnungsNr
                                    Mail.HTMLBody = "Sehr geehrte Damen und Herren,<br><br>im Anhang senden wir Ihnen die o.g. Rechnung."
                                    Mail.HTMLBody &= "<br><br><br>Mit freundlichen Grüßen<br><br>" & getSignature(RECHNUNG)
                                Case Else
                                    Mail.Subject = "Invoice No. " & RECHNUNG.RechnungsNr
                                    Mail.HTMLBody = "Dear Sir or Madam,<br><br>attached we send you the invoice mentioned above."
                                    Mail.HTMLBody &= "<br><br><br>Best regards<br><br>" & getSignature(RECHNUNG)
                            End Select
                            Mail.HTMLBody = "<div style=""font-family:Calibri, Arial"">" & Mail.HTMLBody & "</div>"
                            Mail.To = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(RECHNUNG.RechnungsKundenNr, "Rechnung an")
                            Mail.Attachments.Add(tmpPath, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , "Rechnung.pdf")
                            Mail.Display()

                            If RD_DRUCK = 5 Then
                                ' --> RPOT KOPIE DRUCKEN
                                Select Case RECHNUNG.RechnungSprache
                                    Case "EN" : rpt.lblUeberschriftRG_GS.Text &= " - COPY"
                                    Case Else : rpt.lblUeberschriftRG_GS.Text &= " - KOPIE"
                                End Select

                                Dim ret = cProgramFunctions.printRpt(rpt, PrinterName, False)
                                If printStbVdb Then
                                    If (RECHNUNG.[DruckDatumZeit] Is Nothing OrElse vbYes = MsgBox("Zollbeleg drucken?", vbYesNoCancel)) Then
                                        printSpedBuchAnhaenge(RECHNUNG, True, True)
                                    End If
                                End If

                            End If

                        Catch ex As Exception
                            MsgBox("Fehler beim Öffnen des Mail-Programmes. PDF wird geladen!")
                            Process.Start(tmpPath)
                        End Try
                        rpt.Dispose()
                        Return True

                    Case 3 'PDF + öffnen
                        'Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG_Bezeichnung, ".pdf", , False)
                        'Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
                        'rpt.Run(False)
                        'p.NeverEmbedFonts = ""
                        'p.Export(rpt.Document, tmpPath)

                        ' rpt.Dispose()
                        Path = tmpPath
                        Process.Start(tmpPath)
                        rpt.Dispose()
                        Return True
                    Case 4 'PDF

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

                        'rpt.Dispose()
                        Path = tmpPath

                        rpt.Dispose()
                        Return True
                End Select
            End If



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

    Shared Sub printSpedBuchAnhaenge(RG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional printStb As Boolean = False, Optional printVbD As Boolean = False)
        Try
            Dim SPEDBCUH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(RG.FilialenNr, RG.AbfertigungsNr, RG.SpeditionsbuchUnterNr)
            If SPEDBCUH.hasEntry Then
                If printStb Then
                    If SPEDBCUH.DokumentId_Steuerbeleg IsNot Nothing Then
                        VERAG_PROG_ALLGEMEIN.cFormularManager.PrintViaSpirePDF({VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(SPEDBCUH.DokumentId_Steuerbeleg)})
                    End If
                End If
                If printVbD Then
                    If SPEDBCUH.DokumentId_VBD IsNot Nothing Then
                        VERAG_PROG_ALLGEMEIN.cFormularManager.PrintViaSpirePDF({VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(SPEDBCUH.DokumentId_VBD)})
                    End If
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try

    End Sub

    Shared Function getSpedBuchAnhaenge_Path(FilialenNr As Integer, AbfertigungsNr As Integer, SpeditionsbuchUnterNr As Integer) As String
        Try
            Dim SPEDBCUH = New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch(FilialenNr, AbfertigungsNr, SpeditionsbuchUnterNr)
            If SPEDBCUH.hasEntry Then
                If SPEDBCUH.DokumentId_Steuerbeleg IsNot Nothing Then
                    Return VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(SPEDBCUH.DokumentId_Steuerbeleg)
                End If
                If SPEDBCUH.DokumentId_VBD IsNot Nothing Then
                    Return VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(SPEDBCUH.DokumentId_VBD)
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
        Return ""
    End Function


    Shared Function getFirmaNr(Optional firma = -1) As String
        If firma < 0 Then 'Falls keine Firma
            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "VERAG" : firma = 1
                Case "IMEX" : firma = 20
                Case "ATILLA" : firma = 7
                Case "UNISPED" : firma = 21
                Case "AMBAR" : firma = 24
                Case "FRONTOFFICE" : firma = 17
                Case Else : firma = 1
            End Select
        End If
        Return firma
    End Function
    Shared Function getSignature(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As String
        Return getSignature(RECHNUNG.RechnungsLandKz, RECHNUNG.Firma_ID)
    End Function

    Shared Function getSignature(Optional landKz = "", Optional firma = -1, Optional individuell = False, Optional displayFirmenmane = True, Optional special = "", Optional additionalLine = "") As String
        getSignature = ""

        firma = getFirmaNr(firma)

        Dim imgsrc = System.IO.Path.GetFullPath(Application.StartupPath & "\Resources\").Replace("\", "/")

        Dim emailindividuell = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_email

        If additionalLine <> "" Then additionalLine = "<div style=""font-size:12px"">" & additionalLine & "</div>"

        Select Case special
            Case "BREXIT_VERAG"
                getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "VERAG_AEO_MailSig.jpg""/>"
                If displayFirmenmane Then getSignature &= "<br><b>VERAG Spedition AG</b><br>"
                getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 100 <br><b>T</b>  +43 7711 2777-885  |  <b>F</b>  +43 7711 31 073  |  <b>@</b>  " & If(individuell, emailindividuell, "brexit@verag.ag") & "  |  www.verag.ag  |  FN 216714y</div>"

            Case Else
                Select Case firma
                    Case 1 'VERAG
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "VERAG_AEO_MailSig.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>VERAG Spedition AG</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 100 <br><b>T</b>  +43 7711 2777-0  |  <b>F</b>  +43 7711 31 073  |  <b>@</b>  " & If(individuell, emailindividuell, "rechnungsversand@verag.ag") & "  |  www.verag.ag  |  FN 216714y</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 4 'VERAG AG  (DE)
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "Verag-AG-Logo21.png""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>VERAG Spedition AG</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 100 <br><b>T</b>  +43 7711 2777-0  |  <b>F</b>  +43 7711 31 073  |  <b>@</b>  " & If(individuell, emailindividuell, "rechnungsversand@verag.ag") & "  |  www.verag.ag  |  FN 216714y</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 7 'ATILLA
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "Atilla.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>ATILLA Spedition GmbH</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 15 <br><b>T</b>  +43 7711 2845-0  |  <b>@</b>  " & If(individuell, emailindividuell, "rechnungsversand@verag.ag") & "  |  www.verag.ag  |  FN 288916b</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 11 'VERAG CS
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "Verag_Customs_Service_AEO.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>VERAG Customs Service</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 14 <br><b>T</b>  +43 7711 2777-0  |  <b>F</b>  +43 7711 31 073  |  <b>@</b>  " & If(individuell, emailindividuell, "versand@verag.com") & "  |  www.verag.ag  |  FN 406316z</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 20 'Imex
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "IMEX-LOGO-AEO_sig.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>Imex Customs Service GmbH</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Autobahngrenze 15  <br><b>T</b>  +43 7711 31630  |  <b>F</b>  +43 7711 31630-1  |  <b>@</b>  " & If(individuell, emailindividuell, "info@imex-group.at") & "  |  www.imex-group.at  |  FN 410356s</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 24 'AMBAR
                        getSignature &= "<img width=""250"" height=""70"" src=""" & imgsrc & "ambar_simple.png""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>AMBAR Logistic Services GmbH</b><br>"
                        getSignature &= "<div style=""font-size:12px"">D 83435 Bad Reichenhall, Reichenhallerstrasse 62<br><b>T</b>  +49 8651 99624911  |  <b>F</b>  +49 8651 9962493   |  <b>@</b>  " & If(individuell, emailindividuell, "info@ambarlog.de") & "  |  www.ambarlog.com  |  DE309105428</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 21 'UNISPED
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "Unisped_logo.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>Unisped Speditions GmbH</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 15  <br><b>T</b>  +43 7711 2677-0  |  <b>F</b>  +43 7711 2677-27  |  <b>@</b>  " & If(individuell, emailindividuell, "office@unisped.at") & "  |  www.unisped.at  |  FN 375838d</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 26 'VERAG-UNISPED
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "VERAG-UNISPED-Logo.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>VERAG-UNISPED LTD</b><br>"
                        getSignature &= "<div style=""font-size:12px"">Kent CT16 1BY Dover, 1 Cannon Street<br><b>T</b> +44 1304 272475  |  <b>@</b>  invoice@verag-unisped.uk  |  www.verag-unisped.uk  |  Company-No. 13107151  |  VAT GB389356931</div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 99 'GmbH
                        getSignature &= "<img width=""250"" height=""50"" src=""" & imgsrc & "Verag-Spedition-GMBH-Logo1.png""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>VERAG Spedition GmbH</b><br>"
                        getSignature &= "<div style=""font-size:12px"">D 94152 Neuhaus/Inn, Hartham 6 <br><b>T</b>  +43 7711 2777-0  |  <b>F</b>  +43 7711 31 073  |  <b>@</b>  " & If(individuell, emailindividuell, "rechnungsversand@verag.ag") & "  |  www.verag.ag </div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                    Case 17 'Front-Office
                        getSignature &= "<img width=""170"" height=""50"" src=""" & imgsrc & "Logo_blue_globe_Horizontal.jpg""/>"
                        If displayFirmenmane Then getSignature &= "<br><b>Front Office Suben eG</b><br>"
                        getSignature &= "<div style=""font-size:12px"">A 4975 Suben, Nr. 14<br><b>T</b>  +43 7711 31636 -0  |  <b>@</b>  " & If(individuell, emailindividuell, "suben@front-office.eu") & "  |  www.front-office.eu </div>"
                        If additionalLine <> "" Then getSignature &= vbNewLine & additionalLine & vbNewLine
                End Select
        End Select
        getSignature &= "<br>"

        'BREXIT
        If True Then
            Select Case firma
                Case 21, 22, 23 'UNISPED
                    Exit Select ' nicht mehr!
                    getSignature &= "<br>"
                    getSignature &= "<div style=""font-size:14px"">"
                    getSignature &= "Sind Sie bereits auf den BREXIT vorbereitet?<br/>"
                    getSignature &= "Weiter Infos finden Sie unter: <a href=""http://www.brexit.at"">http://www.brexit.at<br/>"
                    getSignature &= "<img width=""250"" height=""80"" src=""" & imgsrc & "bexit.png""/></a><br/>"
                    getSignature &= "<b>BREXIT Hotline:</b>  +43 7711 2677 - 27|  <b>@</b>  <a href=""mailto:brexit@unisped.at"">brexit@unisped.at</a> <br/>"
                    getSignature &= "</div>"
                    getSignature &= "<br>"
                    getSignature &= "<br>"
                Case Else
                    Exit Select ' nicht mehr!
                    getSignature &= "<br>"
                    getSignature &= "<div style=""font-size:14px"">"
                    getSignature &= "Sind Sie bereits auf den BREXIT vorbereitet?<br/>"
                    getSignature &= "Weiter Infos finden Sie unter: <a href=""http://www.brexit.at"">http://www.brexit.at<br/>"
                    getSignature &= "<img width=""250"" height=""80"" src=""" & imgsrc & "brexit.png""/></a><br/>"
                    getSignature &= "<b>BREXIT Hotline:</b>  +43 7711 2777 - 885  |  <b>@</b>  <a href=""mailto:brexit@verag.ag"">brexit@verag.ag</a> <br/>"
                    getSignature &= "</div>"
                    getSignature &= "<br>"
                    getSignature &= "<br>"
            End Select
        End If
        Select Case landKz
            Case "D", "A", "DE", "AT", "CH"
                getSignature &= "<span style=""font-size:9px"">Wir arbeiten ausschließlich auf Grund der Allgemeinen Österreichischen Spediteurbedingungen in der jeweils geltenden Fassung. Zahlungen werden zunächst auf Frachten,<br>
                 Spesen und Zinsen zuletzt auf Zölle angerechnet. Zahlbar und klagbar in Schärding. Steuer-Zoll - und Tarifauskünfte sind unverbindlich.</span>"
            Case "E", "GB"
                getSignature &= "<span style=""font-size:9px"">We operate exclusively on the basis of the General Freight Forwarding Terms and Conditions in the respectively applicable version. Payments are initially<br>
                charged on freight, fees and interests and at last on customs duties. The place of jurisdiction is Schärding or Ried. Tax, customs and tariff information are not binding.</span>"
            Case Else
                getSignature &= "<span style=""font-size:9px"">Wir arbeiten ausschließlich auf Grund der Allgemeinen Spediteurbedingungen in der jeweils geltenden Fassung. Zahlungen werden zunächst auf Frachten,<br>
                 Spesen und Zinsen zuletzt auf Zölle angerechnet. Zahlbar und klagbar in Schärding. Steuer-Zoll - und Tarifauskünfte sind unverbindlich.</span>"
                getSignature &= "<br>"
                getSignature &= "<span style=""font-size:9px"">We operate exclusively on the basis of the General Freight Forwarding Terms and Conditions in the respectively applicable version. Payments are initially<br>
                charged on freight, fees and interests and at last on customs duties. The place of jurisdiction is Schärding or Ried. Tax, customs and tariff information are not binding.</span>"

        End Select
    End Function

    Shared Function Abrechnugsdaten_AKTUALISIEREN(ByRef RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional RechnungsDatum As Object = Nothing) As Boolean
        RECHNUNG.[DruckDatumZeit] = Now

        If RECHNUNG.checkAlreadyPrinted Then
            'Rechnung wurde bereits gedruck - evtl. bei überschneidenden Rechnungslauf --> Druck abbrechen!
            MsgBox("Die Rechnung '" & RECHNUNG.FilialenNr & "/" & RECHNUNG.AbfertigungsNr & "' an '" & RECHNUNG.RechnungsName_1 & "' wurde bereits gedruckt!")
            Return False
        End If


        If RECHNUNG.Sammelrechnung = 0 Then
            ' Rechnungsdaten im RK eintragen.
            RECHNUNG.[Status] = 1


            If RECHNUNG.RechnungsNr Is Nothing OrElse RECHNUNG.RechnungsNr <= 0 Then 'Falls Druck neu durchgeführt.. --> nicht nochaml RgNr vergeben!
                If RechnungsDatum IsNot Nothing AndAlso IsDate(RechnungsDatum) AndAlso CDate(RechnungsDatum) > CDate("01.01.2001") Then
                    RECHNUNG.[RechnungsDatum] = RechnungsDatum.ToShortDateString
                Else
                    'RECHNUNG.[RechnungsDatum] = Now.ToShortDateString
                    If Not getRgDatInput("", RECHNUNG.[RechnungsDatum]) Then 'Now.ToShortDateString
                        RECHNUNG.[RechnungsDatum] = Now
                    End If
                    '        RECHNUNG.Buchungsjahr = If(Now.Month = 1, Now.Year - 1, Now.Year)
                End If
                RECHNUNG.Buchungsjahr = cRKSV.getGJ(RECHNUNG.[RechnungsDatum], RECHNUNG.Firma_ID) ' If(CDate(RECHNUNG.[RechnungsDatum]).Month = 1, CDate(RECHNUNG.[RechnungsDatum]).Year - 1, CDate(RECHNUNG.[RechnungsDatum]).Year)

                If RECHNUNG.Buchungsjahr < 2000 Then
                    MsgBox("Buchungsjahr im falschen Format!")
                    Return False
                End If

                RECHNUNG.[RechnungsNr] = getNewRgNr(RECHNUNG.Firma_ID, RECHNUNG.Buchungsjahr)

                'Dim RG_NR As New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(RECHNUNG.Firma_ID, RECHNUNG.Buchungsjahr)
                '' Nächste Rechnungsnummer speichern.
                'RG_NR.INCREASE_RGNR() ' SOFORT Speichern, Sonst gibt es wieder eine Doppelvergabe!
                '' Prüfung, ob RgNr schon vergeben wurde --> dann +1, bis freie Nr. (sollte EÜGENTLICH nicht vorkommen)
                'RG_NR.CHECK_RGNR()
                'RECHNUNG.[RechnungsNr] = RG_NR.LfdRechnungsNr

                'RECHNUNG.[LfdRechnungsNr] = RG_NR.LfdRechnungsNr
                If RECHNUNG.SAVE Then
                Else
                    VERAG_PROG_ALLGEMEIN.cRechnungsnummern.DECREASE_RGNR_NEW(RECHNUNG.Firma_ID, RECHNUNG.Buchungsjahr) ' Bei Fehler --> LfdRgNr um eins mindern. 
                    Return False
                End If

                'Rechnungsnummer UPDATEN
                '.....................
            End If
        Else
            ' Anlage zur Sammelrechnung 

            RECHNUNG.[Status] = 2

        End If

        ' Diese Rechnung wurde zum Drucken ausgewählt,
        ' deshalb kann der Status der Zollkontrolle auf 'F' gesetzt werden.
        For Each p In RECHNUNG.POSITIONEN
            If p.IndexZkteing > 0 Then 'p.IndexZkteing IsNot Nothing AndAlso 
                ' Dim ZK As New VERAG_PROG_ALLGEMEIN.cAbgaben(RECHNUNG.POSITIONEN(0).IndexZkteing)
                ' If ZK.Status = "X" Then ZK.Status = "F" : ZK.SAVE()
                VERAG_PROG_ALLGEMEIN.cZkteing.UPDATE_Status("F", RECHNUNG.POSITIONEN(0).IndexZkteing)
            End If

        Next

        Return RECHNUNG.SAVE(True)

    End Function


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

    End Function

    Public Shared Function isSTARK(RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Boolean 'obj As Object, tablename As String, where As String) As Boolean
        Select Case RECHNUNG.RechnungsKundenNr
            Case 714875, 751634
                Return True
            Case Else
                Return False
        End Select
    End Function
    Public Shared Function isReverseChargeSumme(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Boolean 'obj As Object, tablename As String, where As String) As Boolean
        'Wenn selbes Land --> Kein Reversecharge 
        If RECHNUNG.RechnungsLandKz = FIRMA.Firma_LandKz Then
            Return False

        End If

        If Not cProgramFunctions.isEULand(RECHNUNG.RechnungsLandKz) Then
            Return False
        End If

        If FIRMA IsNot Nothing Then 'Nur EU_länder
            If Not cProgramFunctions.isEULand(FIRMA.Firma_LandKz) Then
                Return False
            End If
        End If

        Dim sqlstr = "   SELECT SUM(POS.SteuerfreierBetrag) AS ReverseChargeSumme "
        sqlstr &= "  FROM   Rechnungsausgang  as RA INNER JOIN RechnungsausgangPositionen as POS ON RA.RK_ID = POS.RK_ID INNER JOIN Leistungen ON POS.LeistungsNr = Leistungen.LeistungsNr INNER JOIN [Länderverzeichnis für die Außenhandelsstatistik] AS LD ON RA.RechnungsUstIdKz = LD.LandKz"
        sqlstr &= "  WHERE RA.rk_id='" & RECHNUNG.RK_ID & "' AND LD.ReverseCharge = 1 AND Leistungen.ReverseCharge = 1"

        'If Not CBool(SQL.DLookup("isnull([MitgliedslandEU],0)", "Währungstabelle", "LandKz='" & If(RECHNUNG.RechnungsLandKz, "") & "'", "FMZOLL", 0)) Then
        '    Return False
        'End If
        Return If(SQL.getValueTxtBySql(sqlstr, "FMZOLL",,, 0) = 0, False, True)
    End Function


    Shared Function getReverseChargeSumme(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RechnungsLandKz As String, RechnungsNr As Object, RechnungsDatum As Object, Optional VorschauID As String = "") As Double
        'Wenn selbes Land --> Kein Reversecharge 
        '  MsgBox(RechnungsLandKz & " - " & FIRMA.Firma_LandKz)
        If RechnungsLandKz = FIRMA.Firma_LandKz Then
            Return False
        End If

        If Not cProgramFunctions.isEULand(RechnungsLandKz) Then
            Return 0
        End If
        If FIRMA IsNot Nothing Then 'Nur EU_länder
            If Not cProgramFunctions.isEULand(FIRMA.Firma_LandKz) Then
                Return 0
            End If
        End If

        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        Dim SqlStr = "SELECT SUM(dbo.RechnungsausgangPositionen.SteuerfreierBetrag) AS ReverseChargeSumme
                FROM   dbo.Rechnungsausgang INNER JOIN
                dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID INNER JOIN
                dbo.Leistungen ON dbo.RechnungsausgangPositionen.LeistungsNr = dbo.Leistungen.LeistungsNr INNER JOIN
                dbo.[Länderverzeichnis für die Außenhandelsstatistik] ON dbo.Rechnungsausgang.RechnungsUstIdKz = dbo.[Länderverzeichnis für die Außenhandelsstatistik].LandKz
                WHERE 1=1 "

        If VorschauID = "" Then
            SqlStr &= "   AND (dbo.Rechnungsausgang.RechnungsNr = '" & RechnungsNr & "') AND (dbo.Rechnungsausgang.RechnungsDatum = '" & CDate(RechnungsDatum).ToShortDateString & "') "
        Else
            SqlStr &= "   AND (dbo.Rechnungsausgang.VorschauID = '" & VorschauID & "') "
        End If

        SqlStr &= " AND (dbo.[Länderverzeichnis für die Außenhandelsstatistik].ReverseCharge = 1) AND (dbo.Leistungen.ReverseCharge = 1)"

        Dim sum = SQL.getValueTxtBySql(SqlStr, "FMZOLL")
        If sum Is DBNull.Value Or sum = "" Then Return 0
        Return sum
    End Function

    Shared Function getReverseChargeSummeRKID(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Double
        'Wenn selbes Land --> Kein Reversecharge 
        '  MsgBox(RechnungsLandKz & " - " & FIRMA.Firma_LandKz)
        If RECHNUNG.RechnungsLandKz = FIRMA.Firma_LandKz Then
            Return False
        End If

        If Not cProgramFunctions.isEULand(RECHNUNG.RechnungsLandKz) Then
            Return 0
        End If
        If FIRMA IsNot Nothing Then 'Nur EU_länder
            If Not cProgramFunctions.isEULand(FIRMA.Firma_LandKz) Then
                Return 0
            End If
        End If

        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        Dim SqlStr = "SELECT SUM(dbo.RechnungsausgangPositionen.SteuerfreierBetrag) AS ReverseChargeSumme
                FROM   dbo.Rechnungsausgang INNER JOIN
                dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID INNER JOIN
                dbo.Leistungen ON dbo.RechnungsausgangPositionen.LeistungsNr = dbo.Leistungen.LeistungsNr INNER JOIN
                dbo.[Länderverzeichnis für die Außenhandelsstatistik] ON dbo.Rechnungsausgang.RechnungsUstIdKz = dbo.[Länderverzeichnis für die Außenhandelsstatistik].LandKz
                WHERE 1=1 "


        SqlStr &= " AND (dbo.Rechnungsausgang.RK_ID = '" & RECHNUNG.RK_ID & "') "

        SqlStr &= " AND (dbo.[Länderverzeichnis für die Außenhandelsstatistik].ReverseCharge = 1) AND (dbo.Leistungen.ReverseCharge = 1)"

        Dim sum = SQL.getValueTxtBySql(SqlStr, "FMZOLL")
        If sum Is DBNull.Value Or sum = "" Then Return 0
        Return sum
    End Function

    Shared Function getSteuerfreiEUSTZOLL(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Double

        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        Dim SqlStr = "SELECT SUM(dbo.RechnungsausgangPositionen.SteuerfreierBetrag) AS ReverseChargeSumme
                FROM   dbo.Rechnungsausgang INNER JOIN
                dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID INNER JOIN
                dbo.Leistungen ON dbo.RechnungsausgangPositionen.LeistungsNr = dbo.Leistungen.LeistungsNr  
                WHERE 1=1 "

        SqlStr &= " AND (dbo.Rechnungsausgang.RK_ID = '" & RECHNUNG.RK_ID & "') "


        SqlStr &= " AND Leistungen.Steuerpflichtig=0 "

        Dim sum = SQL.getValueTxtBySql(SqlStr, "FMZOLL")
        If sum Is DBNull.Value Or sum = "" Then Return 0
        Return sum
    End Function

    Shared Function getSTARK_EUST(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Double

        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        Dim SqlStr = "SELECT SUM(dbo.RechnungsausgangPositionen.SteuerfreierBetrag) AS ohneEUST
                FROM   dbo.Rechnungsausgang INNER JOIN
                dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID  
                WHERE 1=1 "

        SqlStr &= " AND (dbo.Rechnungsausgang.RK_ID = '" & RECHNUNG.RK_ID & "') "

        SqlStr &= " AND LeistungsNr IN (20,77) "

        Dim sum = SQL.getValueTxtBySql(SqlStr, "FMZOLL")
        If sum Is DBNull.Value Or sum = "" Then Return 0
        Return sum
    End Function

    Shared Function getSTARK_ohneEUST(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang) As Double

        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
        Dim SqlStr = "SELECT SUM(dbo.RechnungsausgangPositionen.SteuerfreierBetrag) AS ohneEUST
                FROM   dbo.Rechnungsausgang INNER JOIN
                dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID  
                WHERE 1=1 "

        SqlStr &= " AND (dbo.Rechnungsausgang.RK_ID = '" & RECHNUNG.RK_ID & "') "

        SqlStr &= " AND LeistungsNr NOT IN (20,77) "

        Dim sum = SQL.getValueTxtBySql(SqlStr, "FMZOLL")
        If sum Is DBNull.Value Or sum = "" Then Return 0
        Return sum
    End Function

    'Shared Function getSteuerfreiEUSTZOLL(FIRMA As VERAG_PROG_ALLGEMEIN.cFirmen, RechnungsNr As String, RechnungsDatum As String, Firma_ID As Integer, Optional VorschauID As String = "") As Double

    '    Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
    '    Dim SqlStr = "SELECT SUM(dbo.RechnungsausgangPositionen.SteuerfreierBetrag) AS ReverseChargeSumme
    '            FROM   dbo.Rechnungsausgang INNER JOIN
    '            dbo.RechnungsausgangPositionen ON dbo.Rechnungsausgang.RK_ID = dbo.RechnungsausgangPositionen.RK_ID INNER JOIN
    '            dbo.Leistungen ON dbo.RechnungsausgangPositionen.LeistungsNr = dbo.Leistungen.LeistungsNr  
    '            WHERE 1=1 "

    '    If VorschauID = "" Then
    '        SqlStr &= "   AND (dbo.Rechnungsausgang.RechnungsNr = '" & RechnungsNr & "') AND (dbo.Rechnungsausgang.RechnungsDatum = '" & CDate(RechnungsDatum).ToShortDateString & "') "
    '    Else
    '        SqlStr &= "   AND (dbo.Rechnungsausgang.VorschauID = '" & VorschauID & "') "
    '    End If

    '    SqlStr &= " AND Leistungen.Steuerpflichtig=0 "
    '    SqlStr &= " and Firma_ID= '" & Firma_ID & "' "

    '    Dim sum = SQL.getValueTxtBySql(SqlStr, "FMZOLL")
    '    If sum Is DBNull.Value Or sum = "" Then Return 0
    '    Return sum
    'End Function

    ' 0-_> Rechnung angelegt
    ' 1-_> Einzel-Rg gedruckt
    ' 2-_> Anlagen zur Rg gedruckt
    ' 3-_> Sammel-Rg gedruckt
    ' 4-_> ? irgendwas mit SR 6 Maut/Diesel??

    Public Shared Function GET_SR_SQLDT(Firma_ID As Integer, SammelrechungArt As Integer, DatumBis As Date, Optional whereKdNr As String = "", Optional SB As String = "", Optional AvisoIds As List(Of Integer) = Nothing, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "") As DataTable
        If whereKdNr <> "" Then whereKdNr = " AND RechnungsKundenNr IN(" & whereKdNr & ") "
        Dim whereAbfArt = ""
        If Abfertigungsart <> "" Then whereAbfArt = " AND (SELECT TOP 1 Abfertigungsart FROM Speditionsbuch WHERE Speditionsbuch.FilialenNr=Rechnungsausgang.FilialenNr and Speditionsbuch.AbfertigungsNr=Rechnungsausgang.AbfertigungsNr and Speditionsbuch.UnterNr=Rechnungsausgang.SpeditionsbuchUnterNr)='" & Abfertigungsart & "'  "

        Dim sqlStr = " SELECT Rechnungsausgang.RK_ID, Rechnungsausgang.Firma_ID, Rechnungsausgang.FilialenNr, Rechnungsausgang.RechnungsKundenNr, Rechnungsausgang.BelegartenNr, Rechnungsausgang.[Steuersatz %], Rechnungsausgang.Lastschrift, Rechnungsausgang.Währungscode, Rechnungsausgang.AvisoID, Rechnungsausgang.RechnungsNr, Rechnungsausgang.RechnungsDatum, Rechnungsausgang.DruckDatumZeit, Rechnungsausgang.Status, Rechnungsausgang.Sammelrechnung, Rechnungsausgang.Abfertigungsdatum, Rechnungsausgang.Buchungsjahr,Rechnungsausgang.AbfertigungsNr,Rechnungsausgang.SpeditionsbuchUnterNr,[SteuerpflichtigerGesamtbetrag],[SteuerfreierGesamtbetrag]
	                       From Rechnungsausgang
                            WHERE Rechnungsausgang.Status IN(0, 2) And Rechnungsausgang.Firma_ID = " & Firma_ID & " And Rechnungsausgang.Sammelrechnung = '" & SammelrechungArt & "' And Rechnungsausgang.FakturierungsGruppe = '" & FakturierungsGruppe & "' And CONVERT(DATE,Rechnungsausgang.Abfertigungsdatum,104) <= '" & DatumBis.ToShortDateString & "' " & whereKdNr & whereAbfArt & " 
                         " & If(SammelrechungArt = 7 And SB <> "", " AND Sachbearbeiter='" & SB & "' ", "") & "" & getWhereAvisoId(AvisoIds)
        'Rechnungsausgang.Status IN(0, 2) --> vorher nur 2, da Anlagen vor der SR gedruckt wurden...
        If SammelrechungArt = 7 Then
            sqlStr &= " ORDER BY Rechnungsausgang.AvisoID,Rechnungsausgang.Firma_ID,Rechnungsausgang.RechnungsKundenNr,Rechnungsausgang.FilialenNr, Rechnungsausgang.AbfertigungsNr,  Rechnungsausgang.BelegartenNr, Rechnungsausgang.[Steuersatz %], Rechnungsausgang.Lastschrift, Rechnungsausgang.Währungscode "
        Else
            sqlStr &= " ORDER BY Rechnungsausgang.Firma_ID, Rechnungsausgang.RechnungsKundenNr,Rechnungsausgang.FilialenNr,Rechnungsausgang.AbfertigungsNr,  Rechnungsausgang.BelegartenNr, Rechnungsausgang.[Steuersatz %], Rechnungsausgang.Lastschrift, Rechnungsausgang.Währungscode, Rechnungsausgang.AvisoID "
        End If
        ' MsgBox(sqlStr)
        Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL")
        Return dt
    End Function


    Public Shared Function CHECK_SR_SQLDT(dt As DataTable) As Boolean
        For Each r In dt.Rows
            If (CDbl(r("SteuerpflichtigerGesamtbetrag")) + CDbl(r("SteuerfreierGesamtbetrag"))) = 0 Then
                Return False
            End If
        Next
        Return True
    End Function

    Public Shared Function getWhereAvisoId(ids As List(Of Integer)) As String
        If ids Is Nothing Then Return ""
        If ids.Count = 0 Then Return ""
        getWhereAvisoId = " AND AvisoId IN ("
        For Each i In ids
            getWhereAvisoId &= "'" & i & "',"
        Next
        getWhereAvisoId = getWhereAvisoId.Substring(0, getWhereAvisoId.Length - 1) ' ","
        getWhereAvisoId &= ") "
    End Function


    Public Shared Function doSAMMELRechnungsDruck(Firma_ID As Integer, SammelrechungArt As Integer, DatumBis As Date, Rechnungsdatum As Date, PrinterName As String, Optional AnlageEinzelRg As Boolean = True, Optional Sammelrechnungsbericht As Boolean = True, Optional whereKdNr As String = "", Optional RechnungsdruckArt As Integer = -1, Optional ByRef listPDFs As List(Of String) = Nothing, Optional SB As String = "", ByRef Optional lastAktuelle_RgNr As Integer = -1, ByRef Optional DruckdatumUhrzeit As DateTime = Nothing, Optional AvisoIds As List(Of Integer) = Nothing, Optional AnlageExcelEvolog As Boolean = False, Optional ByRef SonstAnlagen As List(Of String) = Nothing, Optional vorschau As Boolean = False, Optional AnlageExcelTransferry360 As Boolean = False, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "") As Boolean 'RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "") As Boolean
        'If RECHNUNG Is Nothing Then MsgBox("Fehler beim Laden der Rechnungsdaten!") : Return False
        Try
            'If whereKdNr <> "" Then whereKdNr = " AND RechnungsKundenNr IN(" & whereKdNr & ") "
            'Dim sqlStr = " SELECT Rechnungsausgang.RK_ID, Rechnungsausgang.Firma_ID, Rechnungsausgang.FilialenNr, Rechnungsausgang.RechnungsKundenNr, Rechnungsausgang.BelegartenNr, Rechnungsausgang.[Steuersatz %], Rechnungsausgang.Lastschrift, Rechnungsausgang.Währungscode, Rechnungsausgang.AvisoID, Rechnungsausgang.RechnungsNr, Rechnungsausgang.RechnungsDatum, Rechnungsausgang.DruckDatumZeit, Rechnungsausgang.Status, Rechnungsausgang.Sammelrechnung, Rechnungsausgang.Abfertigungsdatum, Rechnungsausgang.Buchungsjahr
            '            From Rechnungsausgang
            '                WHERE Rechnungsausgang.Status IN(0, 2) And Rechnungsausgang.Firma_ID = " & Firma_ID & " And Rechnungsausgang.Sammelrechnung = '" & SammelrechungArt & "' And CONVERT(DATE,Rechnungsausgang.Abfertigungsdatum,104) <= '" & DatumBis.ToShortDateString & "' " & whereKdNr & " 
            '             " & If(SammelrechungArt = 7 And SB <> "", " AND Sachbearbeiter='" & SB & "' ", "") & ""
            ''Rechnungsausgang.Status IN(0, 2) --> vorher nur 2, da Anlagen vor der SR gedruckt wurden...
            'If SammelrechungArt = 7 Then
            '    sqlStr &= " ORDER BY Rechnungsausgang.AvisoID,Rechnungsausgang.Firma_ID,Rechnungsausgang.RechnungsKundenNr,Rechnungsausgang.FilialenNr, Rechnungsausgang.AbfertigungsNr,  Rechnungsausgang.BelegartenNr, Rechnungsausgang.[Steuersatz %], Rechnungsausgang.Lastschrift, Rechnungsausgang.Währungscode "
            'Else
            '    sqlStr &= " ORDER BY Rechnungsausgang.Firma_ID, Rechnungsausgang.RechnungsKundenNr,Rechnungsausgang.FilialenNr,Rechnungsausgang.AbfertigungsNr,  Rechnungsausgang.BelegartenNr, Rechnungsausgang.[Steuersatz %], Rechnungsausgang.Lastschrift, Rechnungsausgang.Währungscode, Rechnungsausgang.AvisoID "
            'End If
            Dim VorschauID = ""
            If vorschau Then
                VorschauID = Now.ToString("dd.MM.yyyy HH:mm:ss.fff") & "_" & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "_" & Firma_ID
            End If

            If SammelrechungArt = 7 And (AvisoIds IsNot Nothing AndAlso AvisoIds.Count = 0) Then Return False 'Prüfung, ob Daten vorhanden; Abbruch ZB wenn keine AvisoId

            Dim dt = GET_SR_SQLDT(Firma_ID, SammelrechungArt, DatumBis, whereKdNr, SB, AvisoIds, FakturierungsGruppe, Abfertigungsart) 'SQL.loadDgvBySql(sqlStr, "FMZOLL")
            If dt Is Nothing Then MsgBox("ERR01: Keine Daten") : Return True
            If dt.Rows.Count = 0 Then MsgBox("ERR02: Keine Daten") : Return True
            If Not CHECK_SR_SQLDT(dt) Then MsgBox("ERR03: Es wurden Rechnungen mit einem 0-Betrag gefunden. Bitte prüfen Sie die Eingaben und starten Sie die Sammelabrechnung erneut.") : Return True

            Dim Buchungsjahr = cRKSV.getGJ(Rechnungsdatum, Firma_ID) 'IIf(Rechnungsdatum.Month = 1, Rechnungsdatum.Year - 1, Rechnungsdatum.Year)

            Dim Aktuelle_RgNr As Integer = -1
            If Not vorschau Then
                Aktuelle_RgNr = getNewRgNr(Firma_ID, Buchungsjahr) 'Nimmt die aktuelle RgNr und zählt eine Pos. hoch.
            End If

            DruckdatumUhrzeit = Now.ToString("dd.MM.yyyy HH:mm:ss.fff")

            If listPDFs Is Nothing Then listPDFs = New List(Of String)
            If SonstAnlagen Is Nothing Then SonstAnlagen = New List(Of String)
            Dim kdTmp = -1
            Dim AvisoIdTmp = -1
            Dim FilialeTmp = -1
            Dim FIRMATmp = -1
            Dim found = False
            For Each r In dt.Rows
                Dim RG As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(r("RK_ID"))
                If RG IsNot Nothing Then
                    Select Case SammelrechungArt
                        Case 7 'LKW Abrechnung
                            If kdTmp < 0 Then kdTmp = RG.RechnungsKundenNr 'erstes Mal
                            If AvisoIdTmp < 0 Then AvisoIdTmp = RG.AvisoID  'erstes Mal
                            '   If FilialeTmp < 0 Then FilialeTmp = RG.FilialenNr  'erstes Mal
                            If FIRMATmp < 0 Then FIRMATmp = RG.Firma_ID  'erstes Mal
                            If kdTmp <> RG.RechnungsKundenNr Or AvisoIdTmp <> RG.AvisoID Or FIRMATmp <> RG.Firma_ID Then 'Or FilialeTmp <> RG.FilialenNr
                                Dim path = ""
                                doSAMMELRechnungsDruck_Abschnitt(Aktuelle_RgNr, Firma_ID, Buchungsjahr, DruckdatumUhrzeit, PrinterName, AnlageEinzelRg, Sammelrechnungsbericht, RechnungsdruckArt, path,, SB, AnlageExcelEvolog, SonstAnlagen, VorschauID, AnlageExcelTransferry360, FakturierungsGruppe, Abfertigungsart) 'hier wird auch die RG Nr erhöht!
                                Aktuelle_RgNr = getNewRgNr(Firma_ID, Buchungsjahr)
                                If path <> "" Then listPDFs.Add(path)
                            End If
                            kdTmp = RG.RechnungsKundenNr
                            AvisoIdTmp = RG.AvisoID
                            FilialeTmp = RG.FilialenNr
                            FIRMATmp = RG.Firma_ID
                        Case Else
                            If kdTmp < 0 Then kdTmp = RG.RechnungsKundenNr 'erstes Mal
                            '  If FilialeTmp < 0 Then FilialeTmp = RG.FilialenNr  'erstes Mal
                            If FIRMATmp < 0 Then FIRMATmp = RG.Firma_ID  'erstes Mal
                            If kdTmp <> RG.RechnungsKundenNr Or FIRMATmp <> RG.Firma_ID Then 'Or FilialeTmp <> RG.FilialenNr
                                Dim path = ""
                                doSAMMELRechnungsDruck_Abschnitt(Aktuelle_RgNr, Firma_ID, Buchungsjahr, DruckdatumUhrzeit, PrinterName, AnlageEinzelRg, Sammelrechnungsbericht, RechnungsdruckArt, path,, SB, AnlageExcelEvolog, SonstAnlagen, VorschauID, AnlageExcelTransferry360, FakturierungsGruppe, Abfertigungsart)
                                Aktuelle_RgNr = getNewRgNr(Firma_ID, Buchungsjahr)
                                If path <> "" Then listPDFs.Add(path)
                            End If
                            kdTmp = RG.RechnungsKundenNr
                            FilialeTmp = RG.FilialenNr
                            FIRMATmp = RG.Firma_ID
                    End Select

                    If vorschau Then
                        RG.[VorschauID] = VorschauID
                    Else
                        RG.[RechnungsNr] = Aktuelle_RgNr
                        RG.[Status] = 3
                        RG.[RechnungsDatum] = Rechnungsdatum.ToShortDateString
                        RG.[Buchungsjahr] = Buchungsjahr
                        RG.[DruckDatumZeit] = DruckdatumUhrzeit.ToString("dd.MM.yyyy HH:mm:ss.fff")
                    End If
                    RG.SAVE()


                    If Not RG.checkRechnungsNrIsSet() AndAlso Not vorschau Then
                        MsgBox("Rechnungsnummer wurde nicht in Datenbank eingetragen" & vbNewLine & "Vorgang wird abgebrochen")
                        Return False
                    Else
                        found = True
                    End If

                End If
            Next

            'Letzter Abschnitt:
            If found Then
                Dim path = ""
                doSAMMELRechnungsDruck_Abschnitt(Aktuelle_RgNr, Firma_ID, Buchungsjahr, DruckdatumUhrzeit, PrinterName, AnlageEinzelRg, Sammelrechnungsbericht, RechnungsdruckArt, path,, SB, AnlageExcelEvolog, SonstAnlagen, VorschauID, AnlageExcelTransferry360, FakturierungsGruppe, Abfertigungsart)
                If path <> "" Then listPDFs.Add(path)
            End If
            lastAktuelle_RgNr = Aktuelle_RgNr
            Return True
        Catch ex As Exception
            MsgBox(ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function

    Shared Function getNewRgNr(Firma_ID, Buchungsjahr)
        Dim RG_NR As New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(Firma_ID, Buchungsjahr)
        getNewRgNr = RG_NR.LfdRechnungsNr ' --> Die in der DB gespeicherte RgNr wird verwendet

        ' Nächste Rechnungsnummer speichern.
        'RG_NR.INCREASE_RGNR() ' SOFORT Speichern, Sonst gibt es wieder eine Doppelvergabe!
        ' Prüfung, ob RgNr schon vergeben wurde --> dann +1, bis freie Nr. (sollte EÜGENTLICH nicht vorkommen)
        getNewRgNr = VERAG_PROG_ALLGEMEIN.cRechnungsnummern.CHECK_RGNR_NEW(getNewRgNr, Firma_ID, Buchungsjahr)

    End Function

    Public Shared Function doSAMMELRechnungsDruck_Abschnitt(ByRef RechnungsNr As Integer, Firma_ID As Integer, Buchungsjahr As Integer, DruckdatumUhrzeit As DateTime, PrinterName As String, Optional AnlageEinzelRg As Boolean = True, Optional Sammelrechnungsbericht As Boolean = True, Optional RechnungsdruckArt As Integer = -1, Optional ByRef pathPDF As String = "", Optional SRDruckWiederholen As Boolean = False, Optional SB As String = "", Optional AnlageExcelEvolog As Boolean = False, Optional ByRef SonstAnlagen As List(Of String) = Nothing, Optional VorschauID As String = "", Optional AnlageExcelTransferry360 As Boolean = False, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "") As Boolean
        'SB Nicht mehr benötigt, da RG-Nr und DruckdatumUhrzeit

        Dim dt As DataTable
        If SRDruckWiederholen Then
            dt = getSAMMELRechnung_Dt(RechnungsNr, DruckdatumUhrzeit, "3,4,5") ' 3,4,5-_> irgendebbs
        Else
            'Dim RG_NR = New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(Firma_ID, Buchungsjahr)
            'RG_NR.INCREASE_RGNR() 'für die nächste Rechnung
            dt = getSAMMELRechnung_Dt(RechnungsNr, DruckdatumUhrzeit, 3, [VorschauID]) ' 3-_> Anlagen gedruckt
        End If


        If dt Is Nothing OrElse dt.Rows.Count <= 0 Then MsgBox("ERR03: Keine Daten!") : Return False

        '-------------- für PDF-Sammel-Rechnung -------------- 
        Dim pathPDF_SammelRg = ""
        Dim pathPDF_SammelBericht = ""
        Dim xls_Evolog = ""
        Dim xls_Transferry360 = ""
        Dim pathPDF_Anlage As New List(Of String)

        '-------------- ENDE -------------- 

        doSAMMELRechnungsDruck_Abschnitt = doSAMMELRechnungDruck_Rechnungsdruck(dt, RechnungsNr, DruckdatumUhrzeit, 3, RechnungsdruckArt, pathPDF_SammelRg, PrinterName, SRDruckWiederholen, VorschauID) 'Sammelrechnung drucken
        If Sammelrechnungsbericht Then If Not doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht(RechnungsNr, DruckdatumUhrzeit, RechnungsdruckArt, pathPDF_SammelBericht, PrinterName, VorschauID) Then doSAMMELRechnungsDruck_Abschnitt = False  'Sammelrechnungsbericht drucken
        If AnlageEinzelRg Then If Not doSAMMELRechnungDruck_Rechnungsdruck_Anlagen(RechnungsNr, DruckdatumUhrzeit, PrinterName, pathPDF_Anlage, RechnungsdruckArt, VorschauID) Then doSAMMELRechnungsDruck_Abschnitt = False 'Anlagen drucken

        'SONSTIGE ANLAGEN:
        If AnlageExcelEvolog Then 'Sammelrechnungsbericht EVOLOG  
            If doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht_ExcelEvolog(RechnungsNr, DruckdatumUhrzeit, RechnungsdruckArt, xls_Evolog, PrinterName, VorschauID) Then
                If xls_Evolog <> "" Then SonstAnlagen.Add(xls_Evolog)
            Else
                doSAMMELRechnungsDruck_Abschnitt = False
            End If
        End If
        If AnlageExcelTransferry360 Then 'Sammelrechnungsbericht EVOLOG  
            If doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht_ExcelTransFerry360(RechnungsNr, DruckdatumUhrzeit, RechnungsdruckArt, xls_Transferry360, PrinterName, VorschauID) Then
                If xls_Transferry360 <> "" Then SonstAnlagen.Add(xls_Transferry360)
            Else
                doSAMMELRechnungsDruck_Abschnitt = False
            End If
        End If

        'ZOLLBELEGE:
        If RechnungsdruckArt = 0 Or RechnungsdruckArt = 1 Then 'DRUCK
            If VERAG_PROG_ALLGEMEIN.cAllgemein.PARAMS.GET_PARAMETER_VALUE_BOOL("FAKTURIERUNG_PRINT_Zollbeleg") Then
                Try
                    Dim pathZollbeleg = getSpedBuchAnhaenge_Path(dt.Rows(0)("FilialenNr"), dt.Rows(0)("AbfertigungsNr"), dt.Rows(0)("SpeditionsbuchUnterNr"))
                    If pathZollbeleg <> "" Then SonstAnlagen.Add(pathZollbeleg)
                Catch ex As Exception
                    MsgBox("ERR ZOLLBELEG-ANHNAG: " & ex.Message & ex.StackTrace)
                End Try
            End If
        End If

        '-------------- für PDF-Sammel-Rechnung -------------- 
        Dim list As New List(Of String) ' Sammlung PDFs 
        If pathPDF_SammelRg <> "" Then list.Add(pathPDF_SammelRg)
        If pathPDF_SammelBericht <> "" Then list.Add(pathPDF_SammelBericht)
        If pathPDF_Anlage.Count > 0 Then
            For Each l In pathPDF_Anlage
                list.Add(l)
            Next
        End If

        If list.Count > 0 Then
            '            pathPDF = ""        'PAD Pfad zurückgeben!!!!!!
            pathPDF = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("Sammelrechnung_" & RechnungsNr & ".pdf", ".pdf", False, False)
            'pathPDF = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Sammelrechnung_" & RechnungsNr & ".pdf", ".pdf", False, False)

            If Not FormularManagerNEU.MergePdfFiles(list, pathPDF) Then
                pathPDF = "" : MsgBox("Fehler PDF")
                '  Else
                '  Process.Start(pathPDF)
            End If

            'THEREFORE IMPORT:
            '-------------------------------------------------------------------------------
            Try
                If Not SRDruckWiederholen And (Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM OrElse vbYes = MsgBox("TEST - in Therefore speichern?", vbYesNoCancel)) Then
                    VERAG_PROG_ALLGEMEIN.cTherefore.saveFileTo_ImportFolder(pathPDF, "SA " & RechnungsNr & " " & dt.Rows(0)("RechnungsName 1"), "", Firma_ID, False)
                End If
            Catch ex As Exception
                MsgBox("Therefore-Import fehlgeschlagen!" & ex.Message & ex.StackTrace)
            End Try
            '-------------------------------------------------------------------------------

            'ABRECHNUNGS API:
            '-------------------------------------------------------------------------------
            Try
                If Not SRDruckWiederholen Then
                    Dim KUNDE_ERW As New VERAG_PROG_ALLGEMEIN.cKundenErweitert(dt.Rows(0)("RechnungsKundenNr"))
                    If KUNDE_ERW IsNot Nothing Then

                        'TRADESHIFT:
                        Try
                            If KUNDE_ERW.kde_API_Tradeshift Then
                                Select Case dt.Rows(0)("Firma_ID")
                                    Case 21, 22, 23
                                        '   System.IO.File.Copy(pathPDF, "\\srv01.unisu.at\Unisped\___AR_PDF\Sammelrechnung_" & RechnungsNr & ".pdf", True)
                                        System.IO.File.Copy(pathPDF, "\\unidc01.unisu.at\Unisped\___AR_PDF\Sammelrechnung_" & RechnungsNr & ".pdf", True)
                                End Select
                            End If
                        Catch ex As Exception
                            MsgBox("Tradeshift Export fehlgeschalgen! " & ex.Message & ex.StackTrace)
                        End Try
                    End If
                End If
            Catch ex As Exception
                MsgBox("API Fehler!" & ex.Message & ex.StackTrace)
            End Try
            '-------------------------------------------------------------------------------


        End If
        '-------------- ENDE -------------- 
    End Function

    Shared Function doSAMMELRechnungDruck_Rechnungsdruck_Anlagen(RechnungsNr As Integer, DruckDatumZeit As Date, PrinterName As String, Optional ByRef pathPDF_Anlage As List(Of String) = Nothing, Optional RechnungsdruckArt As Integer = -1, Optional VorschauID As String = "") As Boolean
        Dim dt As DataTable
        If VorschauID = "" Then
            SQL.loadDgvBySql("SELECT RK_ID FROM Rechnungsausgang WHERE Rechnungsausgang.Status IN(3) And CONVERT(datetime,DruckDatumZeit ,104)='" & DruckDatumZeit.ToString("dd.MM.yyyy HH:mm:ss.fff") & "'  and RechnungsNr='" & RechnungsNr & "' ORDER BY FilialenNr, AbfertigungsNr", "FMZOLL")
        Else
            SQL.loadDgvBySql("SELECT RK_ID FROM Rechnungsausgang WHERE RechnungsNr is null AND VorschauID='" & VorschauID & "' ORDER BY FilialenNr, AbfertigungsNr", "FMZOLL")
        End If

        If dt IsNot Nothing Then
            For Each r In dt.Rows
                Dim Path = ""
                If Not doRechnungsDruck(r("RK_ID"),, False, RechnungsdruckArt, Path, PrinterName, True) Then
                    MsgBox("Fehler beim Sammel-Rechnungsdruck - Anlage zur Rechnung: " & RechnungsNr)
                    Return False
                End If
                If Path <> "" Then pathPDF_Anlage.Add(Path)
            Next
        End If
        Return True
    End Function




    Shared Function doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht_ExcelEvolog(RechnungsNr As Integer, DruckdatumUhrzeit As Date, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional PrinterName As String = "", Optional VorschauID As String = "") As Boolean 'RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "") As Boolean
        Try
            Dim sqlStr = " SELECT RechnungsNr,RechnungsKundenNr,Rechnungsausgang.Abfertigungsdatum,Rechnungsausgang.KdAuftragsNr,Rechnungsausgang.AbfertigungsNr,Rechnungsausgang.[LKW Kennzeichen] as Kennzeichen,Abfertigungsarten.Abfertigungsbezeichnung, (SELECT SUM([SteuerpflichtigerBetrag]+[SteuerfreierBetrag]) FROM RechnungsausgangPositionen where RechnungsausgangPositionen.RK_ID=Rechnungsausgang.RK_ID) as Betrag
                              FROM Rechnungsausgang INNER JOIN Speditionsbuch on Speditionsbuch.AbfertigungsNr=Rechnungsausgang.AbfertigungsNr and Speditionsbuch.FilialenNr=Rechnungsausgang.FilialenNr and Speditionsbuch.UnterNr=Rechnungsausgang.SpeditionsbuchUnterNr
                              INNER JOIN Abfertigungsarten ON Abfertigungsarten .Abfertigungsart=Speditionsbuch.Abfertigungsart 
                            WHERE 1=1 "

            If VorschauID = "" Then
                sqlStr &= " AND  Rechnungsausgang.Status IN(3) And CONVERT(datetime,DruckDatumZeit ,104)='" & DruckdatumUhrzeit.ToString("dd.MM.yyyy HH:mm:ss.fff") & "'  and RechnungsNr='" & RechnungsNr & "'  "
            Else
                sqlStr &= " AND RechnungsNr is null  AND VorschauID='" & VorschauID & "' "
            End If
            sqlStr &= " ORDER BY Rechnungsausgang.FilialenNr, Rechnungsausgang.AbfertigungsNr"


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


            If dt IsNot Nothing And dt.Rows.Count > 0 Then


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


                Dim exclApp As Object 'as Application
                Dim Datei As Object 'as WorkBook
                Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet
                exclApp = CreateObject("Excel.Application")
                '  Dim nWeek As Integer
                ' nWeek = DatePart(DateInterval.WeekOfYear, New Date(2004, 3, 22), _
                '     FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)


                With exclApp
                    .Visible = False

                    Try
                        Path = sPath & "SR_" & dt.Rows(0)("RechnungsKundenNr") & ".xlsx"
                        While System.IO.File.Exists(Path)
                            Path = sPath & "SR_" & dt.Rows(0)("RechnungsKundenNr") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                        End While
                        My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.SR_EVOLOG, False)
                    Catch ex As System.Exception
                        '  MsgBox(ex.Message)
                        MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                        Return False
                    End Try


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

                    Dim cnt = 2
                    For Each r In dt.Rows
                        Blatt.Range("A" & cnt).Value = cnt - 1
                        Blatt.Range("B" & cnt).Value = r("Abfertigungsdatum")
                        Blatt.Range("C" & cnt).Value = r("KdAuftragsNr")
                        Blatt.Range("D" & cnt).Value = r("AbfertigungsNr")
                        Blatt.Range("E" & cnt).Value = r("Kennzeichen")
                        Blatt.Range("F" & cnt).Value = r("Abfertigungsbezeichnung")
                        Blatt.Range("G" & cnt).Value = r("Betrag")

                        cnt += 1
                    Next
                    Datei.Save

                    If Rechnugnsdruck = -1 Then
                        Blatt.PrintOutEx()
                    ElseIf Rechnugnsdruck = 3 Then
                        'Process.Start(Path)
                        .Visible = True
                    Else
                        Datei.close
                    End If
                End With

                Return True
            End If

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


    Shared Function doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht_ExcelTransFerry360(RechnungsNr As Integer, DruckdatumUhrzeit As Date, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional PrinterName As String = "", Optional VorschauID As String = "") As Boolean 'RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "") As Boolean
        Try
            'Dim sqlStr = " SELECT [RechnungsName 1],[AbsenderName 1],[EmpfängerName 1],Abfertigungsarten.Abfertigungsart,RechnungsNr,RechnungsDatum,RechnungsKundenNr,Rechnungsausgang.Abfertigungsdatum,Rechnungsausgang.KdAuftragsNr,Rechnungsausgang.AbfertigungsNr,Rechnungsausgang.FilialenNr,Rechnungsausgang.SpeditionsbuchUnterNr,Rechnungsausgang.[LKW Kennzeichen] as Kennzeichen,Abfertigungsarten.Abfertigungsbezeichnung, (SELECT SUM([SteuerpflichtigerBetrag]+[SteuerfreierBetrag]) FROM RechnungsausgangPositionen where RechnungsausgangPositionen.RK_ID=Rechnungsausgang.RK_ID) as Betrag
            '                    ,isnull((SELECT cast(Sum(Anzahl)as varchar(5)) FROM RechnungsausgangPositionen AS POS2 where POS2.RK_ID=Rechnungsausgang.RK_ID and POS2.[BerechnungsartNr]=10),'') As POSAnz 
            '                  FROM Rechnungsausgang INNER JOIN Speditionsbuch on Speditionsbuch.AbfertigungsNr=Rechnungsausgang.AbfertigungsNr and Speditionsbuch.FilialenNr=Rechnungsausgang.FilialenNr and Speditionsbuch.UnterNr=Rechnungsausgang.SpeditionsbuchUnterNr
            '                  INNER JOIN Abfertigungsarten ON Abfertigungsarten .Abfertigungsart=Speditionsbuch.Abfertigungsart 
            '                WHERE 1=1 "
            Dim sqlStr = " SELECT [RechnungsName 1],[AbsenderName 1],[EmpfängerName 1],Abfertigungsarten.Abfertigungsart,RechnungsNr,RechnungsDatum,RechnungsKundenNr,Rechnungsausgang.Abfertigungsdatum,Rechnungsausgang.KdAuftragsNr,
                                Rechnungsausgang.AbfertigungsNr,Rechnungsausgang.FilialenNr,Rechnungsausgang.SpeditionsbuchUnterNr,Rechnungsausgang.[LKW Kennzeichen] as Kennzeichen,POS.LeistungsBez,([SteuerpflichtigerBetrag]+[SteuerfreierBetrag]) Betrag 
                                ,CASE WHEN [BerechnungsartNr]=10 THEN '' ELSE pos.Anzahl  END as  [Count],CASE WHEN [BerechnungsartNr]=10 THEN pos.Anzahl ELSE '' END as  POSCnt
                              FROM Rechnungsausgang INNER JOIN RechnungsausgangPositionen as POS ON pos.RK_ID=Rechnungsausgang.RK_ID INNER JOIN Speditionsbuch on Speditionsbuch.AbfertigungsNr=Rechnungsausgang.AbfertigungsNr and Speditionsbuch.FilialenNr=Rechnungsausgang.FilialenNr and Speditionsbuch.UnterNr=Rechnungsausgang.SpeditionsbuchUnterNr
                              INNER JOIN Abfertigungsarten ON Abfertigungsarten .Abfertigungsart=Speditionsbuch.Abfertigungsart 
                            WHERE  1=1 "

            If VorschauID = "" Then
                sqlStr &= " AND  Rechnungsausgang.Status IN(3) And CONVERT(datetime,DruckDatumZeit ,104)='" & DruckdatumUhrzeit.ToString("dd.MM.yyyy HH:mm:ss.fff") & "'  and RechnungsNr='" & RechnungsNr & "'  "
            Else
                sqlStr &= " AND RechnungsNr is null  AND VorschauID='" & VorschauID & "' "
            End If
            'sqlStr &= " ORDER BY Rechnungsausgang.FilialenNr, Rechnungsausgang.AbfertigungsNr"
            sqlStr &= " 	order by Rechnungsausgang.AvisoID desc, FilialenNr,AbfertigungsNr,POS.[BerechnungsartNr]"


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


            If dt IsNot Nothing And dt.Rows.Count > 0 Then


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


                Dim exclApp As Object 'as Application
                Dim Datei As Object 'as WorkBook
                Dim Blatt As Object 'Microsoft.Office.Interop.Excel.Worksheet 'As Object 'as Worksheet
                exclApp = CreateObject("Excel.Application")
                '  Dim nWeek As Integer
                ' nWeek = DatePart(DateInterval.WeekOfYear, New Date(2004, 3, 22), _
                '     FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFourDays)


                With exclApp
                    .Visible = False

                    Try
                        Path = sPath & "SR_" & dt.Rows(0)("RechnungsKundenNr") & ".xlsx"
                        While System.IO.File.Exists(Path)
                            Path = sPath & "SR_" & dt.Rows(0)("RechnungsKundenNr") & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
                        End While
                        My.Computer.FileSystem.WriteAllBytes(Path, My.Resources.SR_TransFerry360, False)
                    Catch ex As System.Exception
                        '  MsgBox(ex.Message)
                        MsgBox("ERROR 01: " & ex.Message & vbNewLine & ex.StackTrace)
                        Return False
                    End Try


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

                    Dim cnt = 2
                    For Each r In dt.Rows
                        Blatt.Range("A" & cnt).Value = cnt - 1
                        Blatt.Range("B" & cnt).Value = r("RechnungsNr")
                        Blatt.Range("C" & cnt).Value = r("RechnungsDatum")
                        Blatt.Range("D" & cnt).Value = r("FilialenNr")
                        Blatt.Range("E" & cnt).Value = r("AbfertigungsNr")
                        Blatt.Range("F" & cnt).Value = r("Abfertigungsdatum")
                        Blatt.Range("G" & cnt).Value = r("RechnungsName 1")
                        Blatt.Range("H" & cnt).Value = r("AbsenderName 1")
                        Blatt.Range("I" & cnt).Value = r("EmpfängerName 1")
                        Blatt.Range("J" & cnt).Value = r("Kennzeichen")
                        Blatt.Range("K" & cnt).Value = r("LeistungsBez")
                        Blatt.Range("L" & cnt).Value = If(r("Count") = "0", "", r("Count"))
                        Blatt.Range("M" & cnt).Value = If(r("POSCnt") = "0", "", r("POSCnt"))
                        Blatt.Range("N" & cnt).Value = r("Betrag")
                        Blatt.Range("O" & cnt).Value = r("KdAuftragsNr")

                        cnt += 1
                    Next
                    Datei.Save

                    If Rechnugnsdruck = -1 Then
                        Blatt.PrintOutEx()
                    ElseIf Rechnugnsdruck = 3 Then
                        'Process.Start(Path)
                        .Visible = True

                    End If
                End With

                Return True
            End If

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


    Shared Function doSAMMELRechnungDruck_Rechnungsdruck_Sammelrechnungsbericht(RechnungsNr As Integer, DruckdatumUhrzeit As Date, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional PrinterName As String = "", Optional VorschauID As String = "") As Boolean 'RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "") As Boolean
        Try


            Dim dt As DataTable
            If VorschauID = "" Then
                dt = SQL.loadDgvBySql("Select * FROM Rechnungsausgang WHERE Rechnungsausgang.Status In(3) And CONVERT(datetime,DruckDatumZeit ,104)='" & DruckdatumUhrzeit.ToString("dd.MM.yyyy HH:mm:ss.fff") & "'  and RechnungsNr='" & RechnungsNr & "' ORDER BY FilialenNr, AbfertigungsNr", "FMZOLL")
            Else
                dt = SQL.loadDgvBySql("Select * FROM Rechnungsausgang WHERE RechnungsNr is null  AND VorschauID='" & VorschauID & "'    ORDER BY FilialenNr, AbfertigungsNr", "FMZOLL")
            End If
            Dim ROW As DataRow = dt.Rows(0)

            Dim rpt As New rptSammelRechnungAnlagenDruck(ROW("RechnungSprache"))
            rpt.DataSource = dt

            Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(ROW("Firma_ID"))
            Dim KD_RG As New VERAG_PROG_ALLGEMEIN.cAdressen(ROW("RechnungsKundenNr"))

            If FIRMA Is Nothing Then MsgBox("Keine Firma gewählt!") : Return False


            ' Dim dataView As New DataView(dtDataSource)
            ' dataView.Sort = " LeistungsNr "
            ' Dim dtTmp As DataTable = dataView.ToTable()


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

            Dim sum = 0
            'Select Case RECHNUNG.[BelegartenKz]
            '    Case "AR"
            '        rpt.lblUeberschriftRG_GS.Text = "RECHNUNG"
            '    Case "AG"
            '        rpt.lblUeberschriftRG_GS.Text = "GUTSCHRIFT"
            '        rpt.Label9.Text = "Gutschriftsbetrag:"
            '        rpt.Label16.Text = "Gutschrifts-Nr.:"
            'End Select

            'If RECHNUNG.DruckDatumZeit IsNot Nothing Then rpt.lblUeberschriftRG_GS.Text &= " - KOPIE"
            'Dim Gesamt_RG_Betrag As Double = CDbl(dt.Compute("SUM(SteuerFreierBetrag)", "")) + CDbl(dt.Compute("SUM(SteuerpflichtigerBetrag)", ""))
            '   If ROW("SteuerFreierBetrag") IsNot DBNull.Value AndAlso IsNumeric(ROW("SteuerFreierBetrag")) Then Gesamt_RG_Betrag += ROW("SteuerFreierBetrag")
            '   If ROW("SteuerpflichtigerBetrag") IsNot DBNull.Value AndAlso IsNumeric(ROW("SteuerpflichtigerBetrag")) Then Gesamt_RG_Betrag += ROW("SteuerpflichtigerBetrag")
            Dim BelegartenKz = "AR" 'If(Gesamt_RG_Betrag < 0, "AG", "AR")


            Select Case ROW("RechnungSprache")
                Case "EN"
                    Select Case BelegartenKz
                        Case "AR"
                            rpt.lblUeberschriftRG_GS.Text = "Attatchment to INVOICE"
                            rpt.lblSummeUeberschrift.Text = "Invoice Amount:"
                            rpt.lblRgNrUeberschrift.Text = "Invoice No.:"
                            rpt.lblRgDatumUeberschrift.Text = "Invoice Date:"
                        Case "AG"
                            rpt.lblUeberschriftRG_GS.Text = "Attatchment to CREDIT NOTE"
                            rpt.lblSummeUeberschrift.Text = "Credit Amount:"
                            rpt.lblRgNrUeberschrift.Text = "Credit Note No.:"
                            rpt.lblRgDatumUeberschrift.Text = "Credit Note Date:"
                    End Select
                Case Else
                    Select Case BelegartenKz
                        Case "AR"
                            rpt.lblUeberschriftRG_GS.Text = "Anlage zur Sammelrechnung"
                        Case "AG"
                            rpt.lblUeberschriftRG_GS.Text = "GUTSCHRIFT"
                            rpt.lblSummeUeberschrift.Text = "Gutschriftsbetrag:"
                            rpt.lblRgNrUeberschrift.Text = "Gutschrifts-Nr.:"
                            rpt.lblRgDatumUeberschrift.Text = "Gutschrifts-Datum:"
                    End Select

            End Select



            initRgFirmaSammelRg_Bericht(rpt, FIRMA, RechnungsNr, ROW("RechnungsLandKz"), ROW("Buchungsjahr"))

            Select Case ROW("Firma_ID")
                Case 1 ' rpt.picVERAG.Image= My.Resources.Verag_AG_Logo : rpt.Picture1.Image = My.Resources.aeo_AT_imex is eh standard
                Case 4 : rpt.picVERAG.Image = My.Resources.Verag_AG_Logo : rpt.Picture1.Image = Nothing
                Case 7 : rpt.picVERAG.Image = My.Resources.Atilla_big_med : rpt.Picture1.Image = Nothing
                Case 11 : rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo : rpt.Picture1.Image = My.Resources.aeo_CS
                Case 20 : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Picture1.Image = My.Resources.aeo_AT_imex
                Case 21 : rpt.picVERAG.Image = My.Resources.Unisped_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_AT
                Case 22 : rpt.picVERAG.Image = My.Resources.Unisped_DE_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_DE
                Case 23 : rpt.picVERAG.Image = My.Resources.Unisped_ZS_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_ZS_AT
                Case 24 : rpt.picVERAG.Image = My.Resources.ambar_simple : rpt.Picture1.Image = Nothing
                Case 26 : rpt.picVERAG.Image = My.Resources.VERAG_UNISPED_Logo : rpt.Picture1.Image = Nothing
                Case 17 : rpt.picVERAG.Image = My.Resources.FrontOfficeSUB_Horizontal : rpt.Picture1.Image = Nothing
            End Select


            rpt.lblKundenNr.Text = If(ROW("RechnungsKundenNr") > 0, ROW("RechnungsKundenNr"), "")
            rpt.lblRgNr.Text = If(ROW("RechnungsNr") IsNot DBNull.Value, addYeartoRgNr(FIRMA.Firma_ID, ROW("Buchungsjahr")) & ROW("RechnungsNr"), "Vorschau")
            rpt.lblRgDatum.Text = If(ROW("RechnungsDatum") IsNot DBNull.Value, ROW("RechnungsDatum"), "Vorschau")

            'rpt.lblKundenAuftragsnummer.Text = If(RECHNUNG.KdAuftragsNr, "")
            'If rpt.lblKundenAuftragsnummer.Text = String.Empty Then rpt.lblKundenAuftragsnummerUeberschrift.Visible = False

            'rpt.lblAbfertigungsNr.Text = ROW("FilialenNr") & " / " & ROW("AbfertigungsNr") & " " & ROW("SpeditionsbuchUnterNr").ToString("00")
            'rpt.lblAbfertigungsDatum.Text = RECHNUNG.Abfertigungsdatum.ToShortDateString
            'rpt.lblLKWId.Text = If(RECHNUNG.AvisoID, "")

            rpt.lblSachbearbeiter.Text = getSBRgName(FIRMA.Firma_ID, VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME) 'könnten ja mehrerer SB die Rg-Anlagen geschreiben haben
            rpt.lblFirmenbuch.Text = If(FIRMA.Firma_Firmenbuch, "").ToString.Replace("Firmenbuch:  ", "").Trim
            rpt.lblUID.Text = If(FIRMA.Firma_UID, "")
            rpt.lblEORI.Text = If(FIRMA.Firma_EORI, "")

            rpt.txtKdAuftragsnummer.Text = If(ROW("KdAuftragsNr") IsNot DBNull.Value, ROW("KdAuftragsNr"), "")


            rpt.lblRechnungAn.Text = ROW("RechnungsName 1") & vbNewLine
            If ROW("RechnungsName 2") IsNot DBNull.Value AndAlso ROW("RechnungsName 2") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsName 2") & vbNewLine
            If ROW("RechnungsName_AdressZusatz") IsNot DBNull.Value AndAlso ROW("RechnungsName_AdressZusatz") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsName_AdressZusatz") & vbNewLine
            If ROW("RechnungsStraße") IsNot DBNull.Value AndAlso ROW("RechnungsStraße") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsStraße") & vbNewLine
            If ROW("RechnungsOrt") IsNot DBNull.Value AndAlso ROW("RechnungsOrt") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsOrt") & vbNewLine
            If ROW("RechnungsLandKz") IsNot DBNull.Value AndAlso ROW("RechnungsLandKz") <> "" Then rpt.lblRechnungAn.Text &= cProgramFunctions.getLandBez_fromISO1Land(ROW("RechnungsLandKz"), "", ROW("RechnungSprache")).ToString.ToUpper

            'If If(ROW("RechnungsName 2") IsNot DBNull.Value, ROW("RechnungsName 2"), "") = "" Then
            '    rpt.lblRechnung_Name1.Text = ""
            '    rpt.lblRechnung_Name2.Text = ROW("RechnungsName 1")
            'Else
            '    rpt.lblRechnung_Name1.Text = ROW("RechnungsName 1")
            '    rpt.lblRechnung_Name2.Text = If(ROW("RechnungsName 2") IsNot DBNull.Value, ROW("RechnungsName 2"), "")
            'End If

            'rpt.lblRechnung_Strasse.Text = If(ROW("RechnungsStraße") IsNot DBNull.Value, ROW("RechnungsStraße"), "")
            'rpt.lblRechnung_Ort.Text = If(ROW("RechnungsOrt") IsNot DBNull.Value, ROW("RechnungsOrt"), "")
            'rpt.lblRechnung_Land.Text = cProgramFunctions.getLandBez_fromISO1Land(ROW("RechnungsLandKz"), "", ROW("RechnungSprache")).ToString.ToUpper


            If KD_RG IsNot Nothing AndAlso If(KD_RG.Steuernummer, "") <> String.Empty Then
                rpt.lblRechnung_Steuernummer.Text = If(KD_RG.LandKz, "") & " " & If(KD_RG.Steuernummer, "").ToString.Trim
                ' rpt.lblRechnung_UID.Text = If(KD_RG.UstIdKz, "") & " " & If(KD_RG.UstIdNr, "").ToString.Trim
            Else
                rpt.lblRechnung_Steuernummer.Text = ""
                '   rpt.lblRechnung_UID.Text = ""
            End If
            rpt.lblRechnung_Steuernummer.Visible = (rpt.lblRechnung_Steuernummer.Text <> String.Empty)
            rpt.lblRechnung_Steuernummer_Ueberschrift.Visible = (rpt.lblRechnung_Steuernummer.Text <> String.Empty)

            rpt.lblRechnung_UID.Text = If(ROW("RechnungsUstIdKz") IsNot DBNull.Value, ROW("RechnungsUstIdKz"), "") & If(ROW("RechnungsUstIdNr") IsNot DBNull.Value, ROW("RechnungsUstIdNr"), "")
            rpt.lblRechnung_UID.Visible = (rpt.lblRechnung_UID.Text <> String.Empty)
            rpt.lblRechnung_UID_Ueberschrift.Visible = (rpt.lblRechnung_UID.Text <> String.Empty)



            Dim sumSteuerpflichtig As Double = 0
            Dim sumSteuerfrei As Double = 0


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

                                              ' rpt.lblLeistungNr.Text = checkNull(rpt.Fields.Item("LeistungsNr").Value)
                                              ' rpt.txtLeistung.Text = checkNull(rpt.Fields.Item("LeistungsBez").Value)
                                              Dim RECHNUNG As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(rpt.Fields.Item("RK_ID").Value)
                                              If RECHNUNG IsNot Nothing Then
                                                  rpt.lblPosNr.Text = RECHNUNG.FilialenNr & "/" & RECHNUNG.AbfertigungsNr & "/" & CDbl(If(RECHNUNG.SpeditionsbuchUnterNr, 0)).ToString("000")
                                                  rpt.lblDatum.Text = RECHNUNG.Abfertigungsdatum.ToShortDateString

                                                  Dim AbfertigungsBez = SQL.getValueTxtBySql("SELECT TOP 1 isnull(Abfertigungsbezeichnung,'')  FROM [Speditionsbuch] inner join Abfertigungsarten ON Abfertigungsarten.Abfertigungsart=Speditionsbuch.Abfertigungsart WHERE FilialenNr='" & RECHNUNG.FilialenNr & "' AND AbfertigungsNr='" & RECHNUNG.AbfertigungsNr & "' AND UnterNr='" & RECHNUNG.SpeditionsbuchUnterNr & "'", "FMZOLL")
                                                  AbfertigungsBez = AbfertigungsBez.Replace("ZA", "Zollabfertigung")
                                                  AbfertigungsBez = AbfertigungsBez.Replace("AE", "Ausfuhrabfertigung")
                                                  AbfertigungsBez = AbfertigungsBez.Replace("T1", "T1 Versandschein")
                                                  AbfertigungsBez = AbfertigungsBez.Replace("T2", "T2 Versandschein")
                                                  rpt.txtAbfertigungsart.Text = AbfertigungsBez

                                                  rpt.txtPackstuecke.Text = ""
                                                  If If(RECHNUNG.Packstücke_und_Warenbezeichnung, "") <> "" Then rpt.txtPackstuecke.Text = RECHNUNG.Packstücke_und_Warenbezeichnung.replace(vbNewLine, ", ")

                                                  rpt.txtSendungsdetails.Text = ""
                                                  If RECHNUNG.AbsenderName_1 <> "" Then rpt.txtSendungsdetails.Text &= "Absender: " & RECHNUNG.AbsenderName_1 & " " & If(RECHNUNG.AbsenderName_2, "") & "  " & If(RECHNUNG.AbsenderOrt, "") & vbNewLine
                                                  If RECHNUNG.EmpfängerName_1 <> "" Then rpt.txtSendungsdetails.Text &= "Empfänger: " & RECHNUNG.EmpfängerName_1 & " " & If(RECHNUNG.EmpfängerName_2, "") & "  " & If(RECHNUNG.EmpfängerOrt, "") & vbNewLine
                                                  If RECHNUNG.LKW_Kennzeichen <> "" Then rpt.txtSendungsdetails.Text &= "LKW-Kennzeichen: " & RECHNUNG.LKW_Kennzeichen & vbNewLine
                                                  If RECHNUNG.BelegNr <> "" Then rpt.txtSendungsdetails.Text &= "Zollbeleg-Nr.: " & RECHNUNG.BelegNr & vbNewLine

                                                  If If(RECHNUNG.Handling, "") <> "" Then
                                                      rpt.txtSendungsdetails.Text &= "Handling: " & RECHNUNG.Handling.ToString.Replace(vbNewLine, ", ").Replace(vbCr, ", ").Replace(vbLf, ", ") & vbNewLine
                                                  End If

                                                  If True Then 'ANLAGEN
                                                      Dim Anlagen = ""
                                                      If If(RECHNUNG.Anlage_1, "") <> "" Then Anlagen &= RECHNUNG.Anlage_1 & ", "
                                                      If If(RECHNUNG.Anlage_2, "") <> "" Then Anlagen &= RECHNUNG.Anlage_2 & ", "
                                                      If If(RECHNUNG.Anlage_3, "") <> "" Then Anlagen &= RECHNUNG.Anlage_3 & ", "
                                                      If If(RECHNUNG.Anlage_4, "") <> "" Then Anlagen &= RECHNUNG.Anlage_4 & ", "
                                                      If If(RECHNUNG.Anlage_5, "") <> "" Then Anlagen &= RECHNUNG.Anlage_5 & ", "
                                                      If If(RECHNUNG.Anlage_6, "") <> "" Then Anlagen &= RECHNUNG.Anlage_6 & ", "
                                                      If Anlagen.EndsWith(", ") Then Anlagen = Anlagen.Substring(0, Anlagen.Length - 2)
                                                      If Anlagen.Replace(" ", "").Trim <> "" Then rpt.txtSendungsdetails.Text &= "Anlagen: " & Anlagen
                                                  End If



                                                  rpt.txtSendungsdetails.Text = rpt.txtSendungsdetails.Text.Trim
                                                  rpt.txtKdAuftragsnummer.Text = If(RECHNUNG.KdAuftragsNr, "")

                                                  Dim stPfl As Double = 0
                                                  Dim stFrei As Double = 0

                                                  Dim vorzeichen = If(If(RECHNUNG.Vorzeichen, "") = "-", -1, 1) 'Bei Rechnung als Klasse ist der Betrag immer positiv!

                                                  For Each p In RECHNUNG.POSITIONEN
                                                      stPfl += CDbl(p.SteuerpflichtigerBetrag)
                                                  Next
                                                  stPfl *= vorzeichen
                                                  rpt.lblSteuerpflichtig.Text = If(stPfl <> 0, CDbl(stPfl).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")

                                                  stFrei = CDbl(RECHNUNG.SteuerfreierGesamtbetrag) * vorzeichen
                                                  rpt.lblSteuerfrei.Text = If(stFrei <> 0, CDbl(stFrei).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")

                                                  sumSteuerpflichtig += stPfl
                                                  sumSteuerfrei += stFrei


                                                  Dim KUNDE_ERW As New VERAG_PROG_ALLGEMEIN.cKundenErweitert(RECHNUNG.RechnungsKundenNr)
                                                  If KUNDE_ERW.kde_FakturierungSR_Details Then
                                                      Dim subRpt = New rptSammelRechnungAnlagenDruck_Leistungen(rpt._LAN, RECHNUNG)
                                                      rpt.SubReport.Report = subRpt
                                                      rpt.lblSteuerfrei.Font = New Font(rpt.lblSteuerfrei.Font, FontStyle.Bold)
                                                      rpt.lblSteuerpflichtig.Font = New Font(rpt.lblSteuerfrei.Font, FontStyle.Bold)

                                                      'txtPackstuecke.Top += SubReport.Height
                                                      'txtKdAuftragsnummer.Top += SubReport.Height
                                                      'txtSendungsdetails.Top += SubReport.Height
                                                  Else
                                                      rpt.SubReport.Report = Nothing
                                                  End If
                                                  ' rpt.Line10.AnchorBottom = True
                                                  ' rpt.Line10.Height = rpt.Detail.Height
                                              End If

                                          End Sub

            AddHandler rpt.ReportFooter1.Format, Sub()
                                                     rpt.lblSteuerpflichtigGes.Text = If(sumSteuerpflichtig <> 0, (sumSteuerpflichtig).ToString("N2", CultureInfo.CurrentCulture), "")
                                                     rpt.lblSteuerfreiGes.Text = If(sumSteuerfrei <> 0, (sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture), "")


                                                     Dim steuerProz As Double = 0
                                                     Dim steuerBez As String = ""

                                                     Dim dt2 As DataTable = SQL.loadDgvBySql("SELECT TOP 1 isnull([Steuersatz %],0),isnull([Steuerbezeichnung],'')  FROM [Steuertabelle] WHERE [Steuerschlüssel]='" & checkNull(rpt.Fields.Item("Steuerschlüssel").Value) & "'", "FMZOLL")
                                                     If dt2 IsNot Nothing AndAlso dt2.Rows.Count > 0 Then
                                                         steuerProz = dt2.Rows(0)(0)
                                                         steuerBez = dt2.Rows(0)(1)
                                                     End If

                                                     Dim tmpSteuerbetrag = CDbl((sumSteuerpflichtig * steuerProz))
                                                     If tmpSteuerbetrag = 0 Then
                                                         rpt.lblSteuerbetrag.Visible = False
                                                     End If

                                                     rpt.lblSteuersatz.Text = steuerBez
                                                     rpt.lblSteuerbetrag.Text = If((sumSteuerpflichtig * steuerProz) <> 0, tmpSteuerbetrag.ToString("N2", CultureInfo.CurrentCulture), "")
                                                     rpt.lblZWSumme.Text = (sumSteuerpflichtig + sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.lblSumme.Text = (sumSteuerpflichtig + sumSteuerfrei + (sumSteuerpflichtig * steuerProz)).ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.Label46.Text = If(ROW("Währungscode") IsNot DBNull.Value, ROW("Währungscode"), "EUR")

                                                     If sumSteuerfrei = 0 Or sumSteuerpflichtig = 0 Then
                                                         rpt.lblZwText.Visible = False
                                                         rpt.lblZWSumme.Visible = False
                                                     End If


                                                     'Dim BelegartenKz = If(CDbl((sumSteuerpflichtig + sumSteuerfrei + (sumSteuerpflichtig * steuerProz))) < 0, "AG", "AR")


                                                 End Sub

            'DruckDatumUhrzeit wird gesetzt, falls noch ungedruckt...
            'If RECHNUNG.DruckDatumZeit Is Nothing Then
            '    RECHNUNG.SET_DruckdatumUhrzeit()
            'End If




            'ORIGINAL
            Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(ROW("RechnungsKundenNr"))
            'Dim RG_Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & " _Rechnung_" & RechnungsNr & ".pdf"
            Dim RG_Bezeichnung = "Rechnung_" & RechnungsNr & ".pdf"
            'Rechnugnsdruck  =  Individuell für deise Rechnung, wird optional mitgegeben

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

            Select Case If(Rechnugnsdruck > 0, Rechnugnsdruck, If(AD.Rechnungsdruck, 0))'If(AD.Rechnungsdruck, 0)
                Case 0, 1 'DRUCKEN
                    Return cProgramFunctions.printRpt(rpt, PrinterName, False)
                'Case 1 'FAX
                Case 2 'MAIL


                    rpt.Dispose()

                    Try
                        Dim outl As New Outlook.Application
                        Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
                        Mail = outl.CreateItem(0)
                        ' Mail.Subject = " Rechnung Nr. " & ROW("RechnungsNr")
                        ' Mail.Subject = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & " Rechnung Nr. " & ROW("RechnungsNr")
                        Select Case ROW("RechnungsLandKz")
                            Case "TR"
                                Mail.Subject = "Invoice No. " & ROW("RechnungsNr")
                                Mail.HTMLBody = "Sayin Bayanlar ve Baylar,<br><br>ekte baslikta yazan faturayi bulabilirsinz."
                                Mail.HTMLBody &= "<br><br><br>Saygilarimizla<br><br>" & getSignature(ROW("RechnungsLandKz"), ROW("Firma_ID"))
                            Case "A", "AT", "D", "DE", "CH"
                                Mail.Subject = "Rechnung Nr. " & ROW("RechnungsNr")
                                Mail.HTMLBody = "Sehr geehrte Damen und Herren,<br><br>im Anhang senden wir Ihnen die o.g. Rechnung."
                                Mail.HTMLBody &= "<br><br><br>Mit freundlichen Grüßen<br><br>" & getSignature(ROW("RechnungsLandKz"), ROW("Firma_ID"))
                            Case Else
                                Mail.Subject = "Invoice No. " & ROW("RechnungsNr")
                                Mail.HTMLBody = "Dear Sir or Madam,<br><br>attached we send you the invoice mentioned above."
                                Mail.HTMLBody &= "<br><br><br>Best regards<br><br>" & getSignature(ROW("RechnungsLandKz"), ROW("Firma_ID"))
                        End Select
                        Mail.HTMLBody = "<div style=""font-family:Calibri, Arial"">" & Mail.HTMLBody & "</div>"

                        ' Mail.HTMLBody = "Sehr geehrte Damen und Herren,<br><br>anbei erhalten Sie die Rechnung Nr. " & ROW("RechnungsNr") & "."
                        ' Mail.Attachments.Add(tmpPath, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Formular.pdf")
                        Mail.Attachments.Add(tmpPath, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , "Formular.pdf")
                        Mail.Display()

                    Catch ex As Exception
                        MsgBox("Fehler bim Öffnen des Mail-Programmes. PDF wird geladen!")
                        Process.Start(tmpPath)
                    End Try
                    Return True

                Case 3 'PDF + öffnen

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

                    rpt.Dispose()
                    Path = tmpPath
                    Process.Start(tmpPath)
                    Return True
                Case 4 'PDF

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

                    rpt.Dispose()
                    Path = tmpPath
                    Return True
            End Select




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

    Shared Function getSBRgName(Firma_id As Integer, USRKURZNAME As String) As String

        If USRKURZNAME Is Nothing Then Return ""
        If USRKURZNAME Is DBNull.Value Then Return ""
        If USRKURZNAME = "" Then USRKURZNAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
        Dim txt = SQL.getValueTxtBySql("SELECT top 1 CASE WHEN mit_geschlecht='w' THEN 'Frau ' ELSE (CASE WHEN mit_geschlecht='m' THEN 'Herr ' ELSE '' END ) END + mit_nname  FROM [tblMitarbeiter] WHERE [mit_username]='" & USRKURZNAME & "'  ", "ADMIN")
        If txt <> "" Then Return txt
        Return USRKURZNAME
    End Function


    Shared Function getSBRgName_FirmaPruef(Firma_id As Integer, USRKURZNAME As String) As String
        Dim firma = ""
        Select Case Firma_id
            Case 20
                firma = "'IMEX'"
            Case 21
                firma = "'UNISPED'"
            Case Else
                firma = "'VERAG','ALL'"
        End Select

        If USRKURZNAME Is Nothing Then Return ""
        If USRKURZNAME Is DBNull.Value Then Return ""
        If USRKURZNAME = "" Then USRKURZNAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME
        Dim txt = SQL.getValueTxtBySql("SELECT CASE WHEN mit_geschlecht='w' THEN 'Frau ' ELSE (CASE WHEN mit_geschlecht='m' THEN 'Herr ' ELSE '' END ) END + mit_nname  FROM [tblMitarbeiter] WHERE [mit_username]='" & USRKURZNAME & "' AND  [mit_firma] IN (" & firma & ")", "ADMIN")
        If txt <> "" Then Return txt
        Return USRKURZNAME
    End Function

    Shared Function addYeartoRgNr(Firma_ID, Buchungsjahr)
        Select Case Firma_ID
            Case "21", "22", "23" : Return Buchungsjahr.ToString.Substring(2) & "-"
        End Select
        Return ""
    End Function

    Shared Function doSAMMELRechnungDruck_Rechnungsdruck(dt As DataTable, RechnungsNr As Integer, DruckdatumUhrzeit As Date, Rgstatus As Integer, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "", Optional PrinterName As String = "", Optional SRDruckWiederholen As Boolean = False, Optional VorschauID As String = "") As Boolean 'RECHNUNG As VERAG_PROG_ALLGEMEIN.cRechnungsausgang, Optional vorschau As Boolean = False, Optional Rechnugnsdruck As Integer = -1, Optional ByRef Path As String = "") As Boolean
        Try


            Dim ROW As DataRow = dt.Rows(0)
            Dim rpt As New rptSammelRechnungDruck(ROW("RechnungSprache"))

            Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(ROW("Firma_ID"))
            Dim KD_RG As New VERAG_PROG_ALLGEMEIN.cAdressen(ROW("RechnungsKundenNr"))

            If FIRMA Is Nothing Then MsgBox("Keine Firma gewählt!") : Return False


            ' Dim dataView As New DataView(dtDataSource)
            ' dataView.Sort = " LeistungsNr "
            ' Dim dtTmp As DataTable = dataView.ToTable()

            '    rpt.DataSource = SQL.loadDgvBySql("SELECT * FROM [Rechnungsausgangpositionen] where RK_ID ='" & RECHNUNG.RK_ID & "' ", "FMZOLL")
            rpt.DataSource = dt

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

            Dim sum = 0
            'Select Case RECHNUNG.[BelegartenKz]
            '    Case "AR"
            '        rpt.lblUeberschriftRG_GS.Text = "RECHNUNG"
            '    Case "AG"
            '        rpt.lblUeberschriftRG_GS.Text = "GUTSCHRIFT"
            '        rpt.Label9.Text = "Gutschriftsbetrag:"
            '        rpt.Label16.Text = "Gutschrifts-Nr.:"
            'End Select

            'If RECHNUNG.DruckDatumZeit IsNot Nothing Then rpt.lblUeberschriftRG_GS.Text &= " - KOPIE"


            ' Dim Gesamt_RG_Betrag As Double = 0
            Dim Gesamt_RG_Betrag As Double = CDbl(dt.Compute("SUM(SteuerFreierBetrag)", "")) + CDbl(dt.Compute("SUM(SteuerpflichtigerBetrag)", ""))

            ' If ROW("SteuerFreierBetrag") IsNot DBNull.Value AndAlso IsNumeric(ROW("SteuerFreierBetrag")) Then Gesamt_RG_Betrag += ROW("SteuerFreierBetrag")
            'If ROW("SteuerpflichtigerBetrag") IsNot DBNull.Value AndAlso IsNumeric(ROW("SteuerpflichtigerBetrag")) Then Gesamt_RG_Betrag += ROW("SteuerpflichtigerBetrag")
            Dim BelegartenKz = If(Gesamt_RG_Betrag < 0, "AG", "AR")

            Select Case ROW("RechnungSprache")
                Case "EN"
                    '   MsgBox(("EN"))
                    Select Case BelegartenKz
                        Case "AR"
                            rpt.lblUeberschriftRG_GS.Text = "COLLECTIVE INVOICE"
                            rpt.lblSummeUeberschrift.Text = "Invoice Amount:"
                            rpt.lblRgNrUeberschrift.Text = "Invoice No.:"
                            rpt.lblRgDatumUeberschrift.Text = "Invoice Date:"
                        Case "AG"
                            rpt.lblUeberschriftRG_GS.Text = "CREDIT NOTE"
                            rpt.lblSummeUeberschrift.Text = "Credit Amount:"
                            rpt.lblRgNrUeberschrift.Text = "Credit Note No.:"
                            rpt.lblRgDatumUeberschrift.Text = "Credit Note Date:"
                    End Select
                Case Else
                    Select Case BelegartenKz
                        Case "AR"
                            rpt.lblUeberschriftRG_GS.Text = "SAMMELRECHNUNG"
                        Case "AG"
                            rpt.lblUeberschriftRG_GS.Text = "GUTSCHRIFT"
                            rpt.lblSummeUeberschrift.Text = "Gutschriftsbetrag:"
                            rpt.lblRgNrUeberschrift.Text = "Gutschrifts-Nr.:"
                            rpt.lblRgDatumUeberschrift.Text = "Gutschrifts-Datum:"
                    End Select

            End Select

            initRgFirmaSammelRg(rpt, FIRMA, RechnungsNr, ROW("LandKz"), ROW("Buchungsjahr"))



            'rpt.lblFirmaOrt.Text = If(FIRMA.Firma_Ort, "")
            'rpt.lblFirmaStrasse.Text = If(FIRMA.Firma_Straße, "")
            'rpt.lblFirmaTel.Text = If(FIRMA.Firma_Telefon, "")
            'rpt.lblFirmaFax.Text = If(FIRMA.Firma_Telefax, "")
            'rpt.lblFirmaEmail.Text = If(FIRMA.Firma_E_Mail, "")

            Select Case ROW("Firma_ID")
                Case 1 ' rpt.picVERAG.Image= My.Resources.Verag_AG_Logo : rpt.Picture1.Image = My.Resources.aeo_AT_imex is eh standard
                Case 4 : rpt.picVERAG.Image = My.Resources.Verag_AG_Logo : rpt.Picture1.Image = Nothing
                Case 7 : rpt.picVERAG.Image = My.Resources.Atilla_big_med : rpt.Picture1.Image = Nothing
                Case 11 : rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo : rpt.Picture1.Image = My.Resources.aeo_CS
                Case 20 : rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple : rpt.Picture1.Image = My.Resources.aeo_AT_imex
                Case 21 : rpt.picVERAG.Image = My.Resources.Unisped_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_AT
                Case 22 : rpt.picVERAG.Image = My.Resources.Unisped_DE_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_DE
                Case 23 : rpt.picVERAG.Image = My.Resources.Unisped_ZS_logo : rpt.Picture1.Image = My.Resources.unisped_aeo_ZS_AT
                Case 24 : rpt.picVERAG.Image = My.Resources.ambar_simple : rpt.Picture1.Image = Nothing
                Case 26 : rpt.picVERAG.Image = My.Resources.VERAG_UNISPED_Logo : rpt.Picture1.Image = Nothing
                Case 17 : rpt.picVERAG.Image = My.Resources.FrontOfficeSUB_Horizontal : rpt.Picture1.Image = Nothing
            End Select


            Dim strText = ""
            If ROW("Lastschrift") Then
                strText = "Der Rechnungsbetrag wurde durch Lastschrift eingezogen."
            End If
            rpt.txtVermerk.Text = strText



            Dim ZZTage = 10
            Dim ZZKdZahlungsziel = SQL.DLookup("Zahlungsziel", "Kunden", "Kundennr=" & ROW("RechnungsKundenNr"), "FMZOLL", 10)
            If ZZKdZahlungsziel IsNot Nothing AndAlso IsNumeric(ZZKdZahlungsziel) Then
                ZZTage = ZZKdZahlungsziel
            End If
            Select Case ROW("RechnungSprache")
                Case "EN" : rpt.Label2.Text = ZZTage & " Days" : rpt.Label1.Text = "Payment target:"
                Case Else : rpt.Label2.Text = ZZTage & " Tage"
            End Select
            Select Case ROW("Firma_ID")
                Case 21, 22, 23, 26 : rpt.Label1.Visible = False : rpt.Label2.Visible = False
            End Select


            rpt.lblKundenNr.Text = If(ROW("RechnungsKundenNr") > 0, ROW("RechnungsKundenNr"), "")
            rpt.lblRgNr.Text = If(ROW("RechnungsNr") IsNot DBNull.Value, addYeartoRgNr(FIRMA.Firma_ID, ROW("Buchungsjahr")) & ROW("RechnungsNr"), "Vorschau")
            rpt.lblRgDatum.Text = If(ROW("RechnungsDatum") IsNot DBNull.Value, ROW("RechnungsDatum"), "Vorschau")

            'rpt.lblKundenAuftragsnummer.Text = If(RECHNUNG.KdAuftragsNr, "")
            'If rpt.lblKundenAuftragsnummer.Text = String.Empty Then rpt.lblKundenAuftragsnummerUeberschrift.Visible = False

            'rpt.lblAbfertigungsNr.Text = ROW("FilialenNr") & " / " & ROW("AbfertigungsNr") & " " & ROW("SpeditionsbuchUnterNr").ToString("00")
            'rpt.lblAbfertigungsDatum.Text = RECHNUNG.Abfertigungsdatum.ToShortDateString
            'rpt.lblLKWId.Text = If(RECHNUNG.AvisoID, "")

            rpt.lblSachbearbeiter.Text = getSBRgName(ROW("Firma_ID"), VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME)  'könnten ja mehrerer SB die Rg-Anlagen geschreiben haben
            'rpt.lblFirmenbuch.Text = If(FIRMA.Firma_Firmenbuch, "").ToString.Replace("Firmenbuch:  ", "").Trim
            'rpt.lblUID.Text = If(FIRMA.Firma_UID, "")
            'rpt.lblEORI.Text = If(FIRMA.Firma_EORI, "")
            rpt.lblLKWId.Text = getLKWID(RechnungsNr, DruckdatumUhrzeit, Rgstatus)
            rpt.lblLKWIdUebeschrift.Visible = (rpt.lblLKWId.Text <> "")


            rpt.lblRechnungAn.Text = ROW("RechnungsName 1") & vbNewLine
            If ROW("RechnungsName 2") IsNot DBNull.Value AndAlso ROW("RechnungsName 2") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsName 2") & vbNewLine
            If ROW("RechnungsName_AdressZusatz") IsNot DBNull.Value AndAlso ROW("RechnungsName_AdressZusatz") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsName_AdressZusatz") & vbNewLine
            If ROW("RechnungsStraße") IsNot DBNull.Value AndAlso ROW("RechnungsStraße") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsStraße") & vbNewLine
            If ROW("RechnungsOrt") IsNot DBNull.Value AndAlso ROW("RechnungsOrt") <> "" Then rpt.lblRechnungAn.Text &= ROW("RechnungsOrt") & vbNewLine
            If ROW("RechnungsLandKz") IsNot DBNull.Value AndAlso ROW("RechnungsLandKz") <> "" Then rpt.lblRechnungAn.Text &= cProgramFunctions.getLandBez_fromISO1Land(ROW("RechnungsLandKz"), "", ROW("RechnungSprache")).ToString.ToUpper

            'If If(ROW("RechnungsName 2") IsNot DBNull.Value, ROW("RechnungsName 2"), "") = "" Then
            '    rpt.lblRechnung_Name1.Text = ""
            '    rpt.lblRechnung_Name2.Text = ROW("RechnungsName 1")
            'Else
            '    rpt.lblRechnung_Name1.Text = ROW("RechnungsName 1")
            '    rpt.lblRechnung_Name2.Text = If(ROW("RechnungsName 2") IsNot DBNull.Value, ROW("RechnungsName 2"), "")
            'End If

            'rpt.lblRechnung_Strasse.Text = If(ROW("RechnungsStraße") IsNot DBNull.Value, ROW("RechnungsStraße"), "")
            'rpt.lblRechnung_Ort.Text = If(ROW("RechnungsOrt") IsNot DBNull.Value, ROW("RechnungsOrt"), "")
            'rpt.lblRechnung_Land.Text = cProgramFunctions.getLandBez_fromISO1Land(ROW("RechnungsLandKz"), "", ROW("RechnungSprache")).ToString.ToUpper


            If KD_RG IsNot Nothing AndAlso If(KD_RG.Steuernummer, "") <> String.Empty Then
                rpt.lblRechnung_Steuernummer.Text = If(KD_RG.LandKz, "") & " " & If(KD_RG.Steuernummer, "").ToString.Trim
                ' rpt.lblRechnung_UID.Text = If(KD_RG.UstIdKz, "") & " " & If(KD_RG.UstIdNr, "").ToString.Trim
            Else
                rpt.lblRechnung_Steuernummer.Text = ""
                '   rpt.lblRechnung_UID.Text = ""
            End If
            rpt.lblRechnung_Steuernummer.Visible = (rpt.lblRechnung_Steuernummer.Text <> String.Empty)
            rpt.lblRechnung_Steuernummer_Ueberschrift.Visible = (rpt.lblRechnung_Steuernummer.Text <> String.Empty)

            rpt.lblRechnung_UID.Text = If(ROW("RechnungsUstIdKz") IsNot DBNull.Value, ROW("RechnungsUstIdKz"), "") & If(ROW("RechnungsUstIdNr") IsNot DBNull.Value, ROW("RechnungsUstIdNr"), "")
            rpt.lblRechnung_UID.Visible = (rpt.lblRechnung_UID.Text <> String.Empty)
            rpt.lblRechnung_UID_Ueberschrift.Visible = (rpt.lblRechnung_UID.Text <> String.Empty)



            '  REVERSE CHARGE (Übergang der Steuerschuld in EU-Ländern).
            '             Dies hat zur Folge, dass steuerfreie Rechnungsbeträge für Leistungen,
            '             die in der Leistungstabelle als ReverseCharge gekennzeichnet sind,
            '             summiert und auf der Rechnung ausgewiesen werden.
            If getReverseChargeSumme(FIRMA, ROW("RechnungsLandKz"), ROW("RechnungsNr"), ROW("RechnungsDatum"), VorschauID) > 0 Then
                Select Case ROW("RechnungSprache")
                    Case "EN" : rpt.txtInfo.Text = "The VAT liability is transferred to the recipient of the service (reverse charge system)." '"Attention! For EU customers! Since 1.1.2010, services are subject to the application of the reverse charge procedure. Transfer of the tax liability to the recipient of the service."
                    Case Else : rpt.txtInfo.Text = "Die Umsatzsteuerschuld geht auf den Leistungsempfänger über (Reverse Charge Verfahren)." '"Achtung! Für EU-Kunden! Seit 1.1.2010 unterliegen Leistungen der Anwendung des Reverse Charge Verfahrens. Übergang der Steuerschuld an den Leistungsempfänger."
                End Select
            Else : rpt.txtInfo.Text = "" : End If

            'rpt.txtBank1.Text = If(FIRMA.Firma_Bankverbindung1, "") & vbNewLine & If(FIRMA.Firma_IBAN1, "") & vbNewLine & If(FIRMA.Firma_BIC1, "").ToString.Trim
            'rpt.txtBank2.Text = If(FIRMA.Firma_Bankverbindung2, "") & vbNewLine & If(FIRMA.Firma_IBAN2, "") & vbNewLine & If(FIRMA.Firma_BIC2, "").ToString.Trim

            'rpt.txtBank1.Text = rpt.txtBank1.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "BRD:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)
            'rpt.txtBank2.Text = rpt.txtBank2.Text.Replace("Österreich: ", "Österreich:" & vbNewLine).Replace("BRD: ", "BRD:" & vbNewLine).Replace("Deutschland: ", "Deutschland:" & vbNewLine)


            Dim sumSteuerpflichtig As Double = 0
            Dim sumSteuerfrei As Double = 0


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

                                              rpt.lblLeistungNr.Text = checkNull(rpt.Fields.Item("LeistungsNr").Value)
                                              rpt.txtLeistung.Text = checkNull(rpt.Fields.Item("LeistungsBez").Value)

                                              If Not ROW("Lastschrift") Then
                                                  If checkNull(rpt.Fields.Item("LeistungsNr").Value) = "750" Then
                                                      strText = "Pos. 750 kann bei Zahlung innerhalb 10 Tagen gekürzt werden."
                                                  End If
                                              End If


                                              If rpt.Fields.Item("Belegdaten") IsNot Nothing AndAlso rpt.Fields.Item("Belegdaten").Value IsNot Nothing Then
                                                  rpt.txtLeistung.Text &= vbNewLine & checkNull(rpt.Fields.Item("Belegdaten").Value)
                                              End If

                                              rpt.lblAnzahl.Text = checkNull(rpt.Fields.Item("Anzahl").Value)
                                              ' rpt.lblBetrag.Text = rpt.Fields.Item("betrag").Value

                                              Dim stPfl As Double = 0
                                              Dim stFrei As Double = 0

                                              If IsNumeric(checkNull(rpt.Fields.Item("SteuerpflichtigerBetrag").Value)) Then stPfl = CDbl(rpt.Fields.Item("SteuerpflichtigerBetrag").Value())
                                              rpt.lblSteuerpflichtig.Text = If(stPfl <> 0, CDbl(stPfl).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")
                                              If IsNumeric(checkNull(rpt.Fields.Item("SteuerfreierBetrag").Value)) Then stFrei = CDbl(rpt.Fields.Item("SteuerfreierBetrag").Value())
                                              rpt.lblSteuerfrei.Text = If(stFrei <> 0, CDbl(stFrei).ToString("N2", Globalization.CultureInfo.CurrentCulture), "")


                                              sumSteuerpflichtig += stPfl
                                              sumSteuerfrei += stFrei

                                              '  Anz += 1
                                              ' gesAnz += 1

                                              ' If Anz Mod 2 = 0 Then
                                              '     rpt.Detail.BackColor = Color.FromArgb(240, 240, 240)
                                              'Else
                                              '  rpt.Detail.BackColor = Color.White
                                              ' End If
                                              'rpt.Line10.Height = rpt.Detail.Height
                                          End Sub

            AddHandler rpt.ReportFooter1.Format, Sub()
                                                     rpt.lblSteuerpflichtigGes.Text = If(sumSteuerpflichtig <> 0, (sumSteuerpflichtig).ToString("N2", CultureInfo.CurrentCulture), "")
                                                     rpt.lblSteuerfreiGes.Text = If(sumSteuerfrei <> 0, (sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture), "")


                                                     Dim steuerProz As Double = 0
                                                     Dim steuerBez As String = ""

                                                     Dim dt2 As DataTable = SQL.loadDgvBySql("SELECT TOP 1 isnull([Steuersatz %],0),isnull([Steuerbezeichnung],'')  FROM [Steuertabelle] WHERE [Steuerschlüssel]='" & ROW("Steuerschlüssel") & "'", "FMZOLL")
                                                     If dt2 IsNot Nothing AndAlso dt2.Rows.Count > 0 Then
                                                         steuerProz = dt2.Rows(0)(0)
                                                         steuerBez = dt2.Rows(0)(1)
                                                     End If

                                                     rpt.lblSteuersatz.Text = steuerBez
                                                     rpt.lblSteuerbetrag.Text = If((sumSteuerpflichtig * steuerProz) <> 0, (sumSteuerpflichtig * steuerProz).ToString("N2", CultureInfo.CurrentCulture), "")
                                                     rpt.lblZWSumme.Text = (sumSteuerpflichtig + sumSteuerfrei).ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.lblSumme.Text = (sumSteuerpflichtig + sumSteuerfrei + (sumSteuerpflichtig * steuerProz)).ToString("N2", CultureInfo.CurrentCulture)
                                                     rpt.Label46.Text = If(ROW("Währungscode") IsNot DBNull.Value, ROW("Währungscode"), "EUR")

                                                     If sumSteuerfrei = 0 Or sumSteuerpflichtig = 0 Then
                                                         rpt.lblZwText.Visible = False
                                                         rpt.lblZWSumme.Visible = False
                                                     End If





                                                 End Sub

            'DruckDatumUhrzeit wird gesetzt, falls noch ungedruckt...
            'If RECHNUNG.DruckDatumZeit Is Nothing Then
            '    RECHNUNG.SET_DruckdatumUhrzeit()
            'End If


            If False Then

            Else

                'ORIGINAL
                Dim AD As New VERAG_PROG_ALLGEMEIN.cAdressen(ROW("RechnungsKundenNr"))
                Dim RG_Bezeichnung = "Rechnung_" & RechnungsNr & ".pdf"
                ' Dim RG_Bezeichnung = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "_Rechnung_" & RechnungsNr & ".pdf"
                'Rechnugnsdruck  =  Individuell für deise Rechnung, wird optional mitgegeben
                '  MsgBox("RechnungsdruckArt2: " & If(Rechnugnsdruck > 0, Rechnugnsdruck, If(AD.Rechnungsdruck, 0)))

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


                Select Case If(Rechnugnsdruck > 0, Rechnugnsdruck, If(AD.Rechnungsdruck, 0))'If(AD.Rechnungsdruck, 0)
                    Case 0, 1 'DRUCKEN
                        Path = tmpPath 'wird für Therefore benötigt
                        Return cProgramFunctions.printRpt(rpt, PrinterName, False)
                            'Case 1 'FAX
                    Case 2 'MAIL

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


                        Try
                            Dim outl As New Outlook.Application
                            Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
                            Mail = outl.CreateItem(0)
                            ' Mail.Subject = "Rechnung Nr. " & ROW("RechnungsNr")
                            ' Mail.HTMLBody = "Sehr geehrte Damen und Herren,<br><br>anbei erhalten Sie die Rechnung Nr. " & ROW("RechnungsNr") & "."

                            ' Mail.Subject = " Rechnung Nr. " & ROW("RechnungsNr")
                            ' Mail.Subject = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & " Rechnung Nr. " & ROW("RechnungsNr")
                            Select Case ROW("RechnungsLandKz")
                                Case "TR"
                                    Mail.Subject = "Invoice NO. " & ROW("RechnungsNr")
                                    Mail.HTMLBody = "Sayin Bayanlar ve Baylar,<br><br>ekte baslikta yazan faturayi bulabilirsinz."
                                    Mail.HTMLBody &= "<br><br><br>Saygilarimizla<br><br>" & getSignature(ROW("RechnungsLandKz"), ROW("Firma_ID"))
                                Case "A", "AT", "D", "DE", "CH"
                                    Mail.Subject = "Rechnung Nr. " & ROW("RechnungsNr")
                                    Mail.HTMLBody = "Sehr geehrte Damen und Herren,<br><br>im Anhang senden wir Ihnen die o.g. Rechnung."
                                    Mail.HTMLBody &= "<br><br><br>Mit freundlichen Grüßen<br><br>" & getSignature(ROW("RechnungsLandKz"), ROW("Firma_ID"))
                                Case Else
                                    Mail.Subject = "Invoice No. " & ROW("RechnungsNr")
                                    Mail.HTMLBody = "Dear Sir or Madam,<br><br>attached we send you the invoice mentioned above."
                                    Mail.HTMLBody &= "<br><br><br>Best regards<br><br>" & getSignature(ROW("RechnungsLandKz"), ROW("Firma_ID"))
                            End Select
                            Mail.Attachments.Add(tmpPath, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , "Formular.pdf")
                            Mail.Display()

                        Catch ex As Exception
                            MsgBox("Fehler bim Öffnen des Mail-Programmes. PDF wird geladen!")
                            Process.Start(tmpPath)
                        End Try
                        rpt.Dispose()
                        Return True

                    Case 3 'PDF + öffnen

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

                        'rpt.Dispose()
                        Path = tmpPath
                        Process.Start(tmpPath)
                        rpt.Dispose()
                        Return True
                    Case 4 'PDF
                        'Dim tmpPath = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(RG_Bezeichnung, ".pdf", , False)
                        'Dim p As New GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport
                        'rpt.Run(True)
                        'p.NeverEmbedFonts = ""
                        'p.Export(rpt.Document, tmpPath)

                        'rpt.Dispose()
                        Path = tmpPath
                        rpt.Dispose()
                        Return True

                End Select
            End If



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

    Shared Function getSAMMELRechnung_Dt(RechnungsNr As Integer, DruckDatumZeit As DateTime, Status As String, Optional VorschauID As String = "") As DataTable
        Dim SQLStr = "SELECT DISTINCT MIN(Rechnungsausgang.RK_ID) as RK_ID,Rechnungsausgang.RechnungsNr, Rechnungsausgang.RechnungsDatum, RechnungsausgangPositionen.LeistungsNr, RechnungsausgangPositionen.Steuerpflichtig, RechnungsausgangPositionen.LeistungsBez, Rechnungsausgang.Status, Rechnungsausgang.DruckDatumZeit
                     ,MIN(Filialen.Speditionsbuch) AS Speditionsbuch, Min(Rechnungsausgang.Abfertigungsdatum) AS AbfertigungsdatumVon, Max(Rechnungsausgang.Abfertigungsdatum) AS AbfertigungsdatumBis, 
                     Min(Rechnungsausgang.AbfertigungsNr) AS AbfertigungsNr, Min(Rechnungsausgang.UnterNr) AS UnterNr, Min(Rechnungsausgang.FilialenNr) AS FilialenNr, Min(Filialen.[Name 1]) AS FilialenName1, MIN(Filialen.[Name 2]) AS FilialenName2, Min(Filialen.Straße) AS FilialenStraße,
                      --Min(([Filialen].[LandKz] + ' ' + [Filialen].[PLZ] + ' ' - [Filialen].[Ort])) AS FilialenOrt, 
                      Min(Filialen.Telefon) AS FilialenTelefon, Min(Filialen.Telefax) AS FilialenTelefax, 
                      Min(Filialen.[E-Mail]) AS [FilialenE-Mail], Min(Filialen.UstIdKz) AS FilialenUstIdKz, 
                      MIN(Filialen.UstIdNr) AS FilialenUstIdNr, MIN(Filialen.Absender) AS Absender, 
                      MIN(Rechnungsausgang.BelegartenNr) AS BelegartenNr, MIN(Rechnungsausgang.BelegartenKz) AS BelegartenKz, 
                      MIN(Rechnungsausgang.BelegartenBez) AS BelegartenBez, MIN(Rechnungsausgang.KundenNrZentrale) AS KundenNrZentrale, 
                      MIN(Rechnungsausgang.RechnungsKundenNr) AS RechnungsKundenNr, MIN(Rechnungsausgang.[RechnungsName 1]) AS [RechnungsName 1],
                       MIN(Rechnungsausgang.[RechnungsName 2]) AS [RechnungsName 2],MIN(RechnungsName_AdressZusatz) as RechnungsName_AdressZusatz, MIN(Rechnungsausgang.RechnungsStraße) AS RechnungsStraße,
                        MIN(Rechnungsausgang.RechnungsOrt) AS RechnungsOrt, MIN(Rechnungsausgang.RechnungsUstIdKz) AS RechnungsUstIdKz, 
	                    MIN(Rechnungsausgang.RechnungsUstIdNr) AS RechnungsUstIdNr, MIN(cast(Rechnungsausgang.Lastschrift as int)) AS Lastschrift, 
	                    Sum(RechnungsausgangPositionen.Anzahl) AS Anzahl, Sum(RechnungsausgangPositionen.SteuerpflichtigerBetrag) AS SteuerpflichtigerBetrag, 
	                    Sum(RechnungsausgangPositionen.SteuerfreierBetrag) AS SteuerfreierBetrag, Rechnungsausgang.Buchungsjahr, Rechnungsausgang.Währungscode,
	                     Rechnungsausgang.Steuerschlüssel, MIN(Rechnungsausgang.[Steuersatz %]) AS [Steuersatz %], MIN(Steuertabelle.Steuerbezeichnung) AS Steuerbezeichnung, 
	                     Adressen.LandKz AS LandKz, Adressen.Steuernummer AS Steuernummer, MIN(Rechnungsausgang.Sachbearbeiter) AS Sachbearbeiter, Rechnungsausgang.Firma_ID,
	                      tblFirma.Firma_Firmenbuch, tblFirma.Firma_UID, tblFirma.Firma_EORI, tblFirma.Firma_Bankverbindung1, tblFirma.Firma_BLZ1, tblFirma.Firma_KTO1, 
	                      tblFirma.Firma_IBAN1, tblFirma.Firma_BIC1, tblFirma.Firma_Bankverbindung2, tblFirma.Firma_BLZ2, tblFirma.Firma_KTO2, tblFirma.Firma_IBAN2, 
	                      tblFirma.Firma_BIC2, tblFirma.Firma_Ort, tblFirma.Firma_Straße, tblFirma.Firma_Telefon, tblFirma.Firma_Telefax, tblFirma.[Firma_E-Mail], 
	                      tblFirma.Firma_Webadresse, MIN(Rechnungsausgang.KdAuftragsNr) as KdAuftragsNr,
                        MIN(Rechnungsausgang.RechnungsLandKz) AS RechnungsLandKz, MIN(Rechnungsausgang.RechnungSprache) AS RechnungSprache
                    FROM ((Adressen INNER JOIN ((Rechnungsausgang INNER JOIN Filialen ON Rechnungsausgang.FilialenNr = Filialen.FilialenNr) INNER JOIN Steuertabelle ON Rechnungsausgang.Steuerschlüssel = Steuertabelle.Steuerschlüssel) ON Adressen.AdressenNr = Rechnungsausgang.RechnungsKundenNr) INNER JOIN tblFirma ON Rechnungsausgang.Firma_ID = tblFirma.Firma_ID) INNER JOIN RechnungsausgangPositionen ON Rechnungsausgang.RK_ID = RechnungsausgangPositionen.RK_ID

                    where 1=1 "

        If VorschauID="" Then
            SQLStr &= " AND Status IN (" & Status & ")   And Convert(DateTime, DruckDatumZeit, 104) ='" & DruckDatumZeit.ToString("dd.MM.yyyy HH:mm:ss.fff") & "'  and RechnungsNr='" & RechnungsNr & "'"
        Else
            SQLStr &= " AND RechnungsNr is null And VorschauID='" & VorschauID & "' "
        End If

        SQLStr &= " GROUP BY Rechnungsausgang.RechnungsNr, Rechnungsausgang.RechnungsDatum, RechnungsausgangPositionen.LeistungsNr, RechnungsausgangPositionen.Steuerpflichtig, RechnungsausgangPositionen.LeistungsBez, Rechnungsausgang.Status, Rechnungsausgang.DruckDatumZeit, Rechnungsausgang.Buchungsjahr, Rechnungsausgang.Währungscode, Rechnungsausgang.Steuerschlüssel, Adressen.LandKz, Adressen.Steuernummer, Rechnungsausgang.Firma_ID, tblFirma.Firma_Firmenbuch, tblFirma.Firma_UID, tblFirma.Firma_EORI, tblFirma.Firma_Bankverbindung1, tblFirma.Firma_BLZ1, tblFirma.Firma_KTO1, tblFirma.Firma_IBAN1, tblFirma.Firma_BIC1, tblFirma.Firma_Bankverbindung2, tblFirma.Firma_BLZ2, tblFirma.Firma_KTO2, tblFirma.Firma_IBAN2, tblFirma.Firma_BIC2, tblFirma.Firma_Ort, tblFirma.Firma_Straße, tblFirma.Firma_Telefon, tblFirma.Firma_Telefax, tblFirma.[Firma_E-Mail], tblFirma.Firma_Webadresse
                    ORDER BY Rechnungsausgang.RechnungsNr, RechnungsausgangPositionen.LeistungsNr, RechnungsausgangPositionen.Steuerpflichtig, RechnungsausgangPositionen.LeistungsBez;
                    "

        Return SQL.loadDgvBySql(SQLStr, "FMZOLL")
    End Function


    Shared Function getLKWID(RechnungsNr As Integer, DruckDatumZeit As Date, Status As Integer) As String
        Dim SQLStr = "SELECT DISTINCT(AvisoId) FROM  Rechnungsausgang WHERE Status='" & Status & "' and CONVERT(datetime,DruckDatumZeit ,104)='" & DruckDatumZeit.ToString("dd.MM.yyyy HH:mm:ss.fff") & "'  and RechnungsNr='" & RechnungsNr & "' "
        Dim dt = SQL.loadDgvBySql(SQLStr, "FMZOLL")
        If dt.Rows.Count = 1 Then
            Return dt.Rows(0)("AvisoId").ToString
        End If
        Return ""
    End Function
End Class
