Imports System.Net.Http
Imports System.Text
Imports GrapeCity.ActiveReports
Imports GrapeCity.DataVisualization.Options
Imports Newtonsoft.json
Imports SDL.RKSVServer
Imports VERAG_PROG_ALLGEMEIN.DSFinVKService

Public Class cRKSV
    Shared SQL As New SQL

    Shared Function insertRKSV(ByVal kasse As cRKSV_Kasse, CompanyGUID As String, ByVal umsatzZaehler As Double, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String) As Boolean
        '
        Try



            Dim client As RKSVWcfClient = New RKSVWcfClient()
            client.Endpoint.Address = New System.ServiceModel.EndpointAddress(getRKSVLink(kasse))
            client.Open()
            '   svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials();
            Dim credentials As New SDL.RKSVServer.DBUserCredentials

            credentials.Database = "RKSVWcfDB"
            credentials.Server = "AVISO\SQLEXPRESS"

            credentials.Username = "Admin"
            credentials.Password = "verag#2"
            credentials.CashboxID = kasse.rksv_bez
            '"VERAG-SUB-KASSE-ZOLL"
            credentials.CompanyGUID = CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059"

            Dim jws As String = String.Empty
            Dim qr As String = String.Empty
            Dim ocra As String = String.Empty
            'Dim answer As String = String.Empty

            Dim Belegnummer = RKSV_Beleg_Id
            Dim BelegDatumUhrzeit = belegDat ' BELEG.BelegDat

            Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & steuerSchluessel & "' ", "FMZOLL")



            Dim BetragSatzNormal = IIf(steuersatz = 0.2, summeBRUTTO, 0.0) 'summe
            Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summeBRUTTO, 0.0)
            Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summeBRUTTO, 0.0)
            Dim BetragSatzNull = IIf(steuersatz = 0.0, summeBRUTTO, 0.0)
            Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summeBRUTTO, 0.0)
            Dim StandUmsatzzaehler = umsatzZaehler 'KASSE.rksv_Umsatzzaehler



            If TEST Then
                If (client.SignTrainReceipt(credentials, Belegnummer, BelegDatumUhrzeit, BetragSatzNormal, BetragSatzErm1, BetragSatzErm2, BetragSatzBesonders, BetragSatzNull, jws, qr, ocra, answer)) Then
                    QR_CodeString = qr
                    LastJWS = jws
                Else
                    If (jws.Length > 50) Then
                        QR_CodeString = qr
                        LastJWS = jws
                    Else
                        'Unmittelbares return, damit Änderungen Rückgängig gemacht werden, bevor die nächste Belegerstellung anfängt
                        'MessageBox.Show(answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        Return False
                    End If
                End If
            Else
                If (client.SignReceipt(credentials, Belegnummer, BelegDatumUhrzeit, BetragSatzNormal, BetragSatzErm1, BetragSatzErm2, BetragSatzBesonders, BetragSatzNull, StandUmsatzzaehler, jws, qr, ocra, answer)) Then
                    QR_CodeString = qr
                    LastJWS = jws
                Else
                    If (jws.Length > 50) Then
                        QR_CodeString = qr
                        LastJWS = jws
                    Else
                        'Unmittelbares return, damit Änderungen Rückgängig gemacht werden, bevor die nächste Belegerstellung anfängt
                        ' MessageBox.Show(answer, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                        Return False
                    End If
                End If
            End If

            If QR_CodeString.Length > 50 And LastJWS.Length > 50 Then
                Return True
            End If

        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function


    Shared Function insertRKSVFiskaltrust(ByVal kasse As cRKSV_Kasse, CompanyGUID As String, ByVal umsatzZaehler As Double, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, TEST As Boolean, POS As List(Of EABelegPositionen)) As Boolean
        Try


            Dim credentials As New SDL.RKSVServer.DBUserCredentials

            credentials.Database = "RKSVWcfDB"
            credentials.Server = "AVISO\SQLEXPRESS"
            credentials.Username = "Admin"
            credentials.Password = "verag#2"
            credentials.CashboxID = kasse.rksv_FT_CashboxID
            credentials.CompanyGUID = CompanyGUID
            Dim AccessToken As String = kasse.rksv_FT_AccessToken

            Dim jws As String = String.Empty
            Dim qr As String = String.Empty
            Dim ocra As String = String.Empty
            'Dim answer As String = String.Empty

            Dim Belegnummer = RKSV_Beleg_Id
            Dim BelegDatumUhrzeit = belegDat ' BELEG.BelegDat

            Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & steuerSchluessel & "' ", "FMZOLL")



            Dim BetragSatzNormal = IIf(steuersatz = 0.2, summeBRUTTO, 0.0) 'summe
            Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summeBRUTTO, 0.0)
            Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summeBRUTTO, 0.0)
            Dim BetragSatzNull = IIf(steuersatz = 0.0, summeBRUTTO, 0.0)
            Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summeBRUTTO, 0.0)
            Dim StandUmsatzzaehler = umsatzZaehler 'KASSE.rksv_Umsatzzaehler

            Dim countryID As String

            Dim client As New cFiskaltrustClient(kasse.rksv_FT_RestServiceURL, kasse.rksv_FT_CashboxID, kasse.rksv_FT_AccessToken, kasse.rksv_FT_Country)

            Dim result = client.SignReceiptAsync(summeBRUTTO, steuersatz, POS)


        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function


    Shared Function getKB(BELEG As EABeleg, PERSONAL As cPersonal, ByRef KBEntry As cKassenbuch, ByRef KBEntryGB As cKassenbuch, Firma As String) As Boolean
        Dim j1 = SQL.getValueTxtBySql("SELECT [JournalNr]  FROM [tblKassenbuch] " &
                                                                  " WHERE  [Mandant]='" & PERSONAL.Mandant & "'  AND [Niederlassung]='" & PERSONAL.Niederlassung & "'  AND [Benutzer]='" & PERSONAL.ID & "'  AND [Geschäftsjahr]='" & cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma) & "'  AND [BelegNr] ='" & BELEG.BelegNr & "'   and Steuer <=0   AND Soll <> 0", "FMZOLL")
        Dim j2 = SQL.getValueTxtBySql("SELECT [JournalNr]  FROM [tblKassenbuch] " &
                                                    " WHERE  [Mandant]='" & PERSONAL.Mandant & "'  AND [Niederlassung]='" & PERSONAL.Niederlassung & "'  AND [Benutzer]='" & PERSONAL.ID & "'  AND [Geschäftsjahr]='" & cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma) & "'  AND [BelegNr] ='" & BELEG.BelegNr & "'   and Steuer <=0   AND Haben <> 0", "FMZOLL")
        Dim journalNr = ""
        Dim journalNrGB = ""

        If BELEG.Belegart = 1 Then
            journalNr = j1
            journalNrGB = j2
        Else
            journalNr = j2
            journalNrGB = j1
        End If

        If Not IsNumeric(journalNr) Or Not IsNumeric(journalNrGB) Then
            MsgBox("Zugehörige Kassenbucheinträge wurden nicht gefunden!")
            Return False
        End If
        'J1 /j2 nicht ganz sicher...
        KBEntry = New cKassenbuch("LOAD", BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma), j2)
        KBEntryGB = New cKassenbuch("LOAD", BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma), j1)
        Return True
    End Function

    Shared Function getZahlungsmittel(BELEG As EABeleg, PERSONAL As cPersonal, Firma As String) As String
        Dim zm = SQL.getValueTxtBySql("SELECT [Finanzwege]  FROM [tblKassenbuch] " &
                                                                  " WHERE  [Mandant]='" & PERSONAL.Mandant & "'  AND [Niederlassung]='" & PERSONAL.Niederlassung & "'  AND [Benutzer]='" & PERSONAL.ID & "'  AND [Geschäftsjahr]='" & cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma) & "'  AND [BelegNr] ='" & BELEG.BelegNr & "'   and Steuer <=0   AND Soll <> 0", "FMZOLL")


        If zm Is DBNull.Value Or zm Is Nothing Then
            Return "-"
        End If

        Return zm
    End Function


    Shared Function getDEP(ByVal kasse_id As Integer, ByRef exportResult As String) As Boolean

        Dim KASSE As New cRKSV_Kasse(kasse_id)
        Dim client As RKSVWcfClient = New RKSVWcfClient()
        client.Endpoint.Address = New System.ServiceModel.EndpointAddress(getRKSVLink(KASSE))
        client.Open()
        '   svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials();
        Dim credentials As New SDL.RKSVServer.DBUserCredentials

        credentials.Database = "RKSVWcfDB"
        credentials.Server = "AVISO\SQLEXPRESS"
        'KASSENPWD: !VERAG-SUB-KASSE-ZOLL#2016
        '   Select Case kasse ' KASSE.rksv_bez
        '      Case "VERAG-SUB-KASSE-ZOLL"
        credentials.Username = "Admin"
        credentials.Password = "verag#2"



        If KASSE.rksv_ITG_id Is Nothing Then
            MsgBox("Keine RKSV-ITG-ID vorhanden!")
            Return False
        End If


        credentials.CashboxID = KASSE.rksv_bez '"VERAG-SUB-KASSE-ZOLL"
        credentials.CompanyGUID = KASSE.rksv_CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059"

        '     Dim inValue As RKSVServer.ExportJWSRequest = New RKSVServer.ExportJWSRequest()
        '   inValue.certificate = certificate
        ' #   inValue.certificateChain = certificateChain
        '    inValue.jwsCompactReceipts = jwsCompactReceipts
        '    inValue.exportResult = exportResult
        '    Dim retVal As RKSVServer.ExportJWSResponse = CType(Me, RKSVServer.IRKSVWcf).ExportJWS(inValue)
        '    exportResult = retVal.exportResult

        '      Dim exportResult = ""

        If False Then '(client.ExportJWS( certificate ,  certificateChain ,  jwsCompactReceipts,  exportResult )  Then
            '   If (client.SignTrainReceipt(credentials, Belegnummer, BelegDatumUhrzeit, BetragSatzNormal,
            '           BetragSatzErm1, BetragSatzErm2, BetragSatzNull, BetragSatzBesonders,
            '            jws, qr, ocra, answer)) Then

        Else

            MessageBox.Show("FEHLER", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return False

        End If
        Return True
    End Function

    'Shared Function getRKSVLink(ByVal kasse As String) As String
    '    If kasse = "FRONT-OFFICE-SUB-KASSE" Then
    '        Return "http://192.168.0.25:8733/Design_Time_Addresses/RKSVCompleteServer/Service1/?singleWsdl"
    '    End If
    '    Return "http://192.168.0.106:8733/Design_Time_Addresses/RKSVCompleteServer/Service1/?singleWsdl"
    'End Function

    Shared Function getRKSVLink(ByVal kasse As cRKSV_Kasse) As String
        Return kasse.rksv_ipAdresse
        'Return getRKSVLink(kasse.rksv_bez)
    End Function
    'Shared Function stornoRKSV_DE(ByVal kasse As cRKSV_Kasse, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, ByRef answer As String) As Boolean
    Shared Function stornoRKSV_DE_TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT(PERSONAL As cPersonal, BELEG As EABeleg, ByVal kasse As cRKSV_Kasse, ByVal RKSV_Beleg_Id As Integer, ByVal OLD_RKSV_Beleg_Id As Object, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String) As Boolean
        Try

            ' MsgBox("0: ")
            Dim cashbox As String = kasse.rksv_KassaGuid '"VERAG_GMBH_KASSE_01" "KASSA 001"

            Dim m_com As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.DSFinVKServerClient = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.DSFinVKServerClient() 'PROBLEM??
            m_com.Endpoint.Address = New System.ServiceModel.EndpointAddress("http://ymgk028055.verag.ost.dmn:8733/DSFinVKService?wsdl")
            m_com.Open()
            '   svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials();
            'Dim credentials As New SDL.RKSVServer.DBUserCredentials

            'credentials.Database = "RKSVWcfDB"
            'credentials.Server = "AVISO\SQLEXPRESS"

            'credentials.Username = "Admin"
            'credentials.Password = "verag#2"
            'credentials.CashboxID = kasse.rksv_bez
            ''"VERAG-SUB-KASSE-ZOLL"
            'credentials.CompanyGUID = CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059"



            'Dim m_com As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer() 'PROBLEM??
            ' m_com.Url = "http://ymgk028055.verag.ost.dmn:8733/DSFinVKService"
            Dim [error] As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.ErrorCode
            Dim InitializeLibraryResultSpecified As Boolean
            '     Dim [error] = "" 'm_com.InitializeLibrary(tbLicense.Text, "D:\Database\DSFinVK\dsfinvkdb.db3", "Administrator", "test", cashbox)
            [error] = m_com.InitializeLibrary("SQLGUIDE01.verag.ost.dmn", "itg_RKSV_DE", "dsfinvk", "dsfinvk#1337", cashbox) '[error], InitializeLibraryResultSpecified)

            ' MsgBox("1: " & [error])

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                If [error].ToString() <> "CASHBOX_ALREADY_MANAGED" Then '--> CASHBOX_ALREADY_MANAGED --> der Fehler darf auftreten, die Cashbox wird Serverseitig initialisert, hier nur der Versuch, falls das nciht geschehen ist... lt. Jan Mika / AITG
                    MessageBox.Show([error].ToString(), "Error1", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                    Return False
                End If
            End If

            'BelegNr wird von RKSV übernommen
            Dim BON_ID As Integer = 0
            If False Then

                Dim BON_IDSpecified = False
                Dim GetNextBON_IDResultSpecified = False
                [error] = m_com.GetNextBON_ID(cashbox, BON_ID)
                '  MsgBox("3: " & [error])

                If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                    MessageBox.Show([error].ToString(), "Error2", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                    Return False
                End If
            Else
                '  MsgBox(RKSV_Beleg_Id)
                BON_ID = RKSV_Beleg_Id
            End If


            'Dim BON_NR As Integer = 0
            '[error] = m_com.GetNextBON_NR(cashbox, BON_NR)

            'If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
            '    MessageBox.Show([error].ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            '    Return False
            'End If


            '  MsgBox("4")

            'Rechnung beginnen


            Dim stornoVz = -1


            Dim bonkopfBegin As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonKopfBegin = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonKopfBegin
            ' Dim bonkopfBegin As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfBegin = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfBegin()

            bonkopfBegin.Z_KASSE_ID = cashbox

            bonkopfBegin.BEDIENER_ID = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID 'tbBEDIENER_ID.Text

            bonkopfBegin.BEDIENER_NAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME 'tbBEDIENER_NAME.Text

            bonkopfBegin.BON_ID = BON_ID.ToString()
            bonkopfBegin.REF_BON_ID = If(OLD_RKSV_Beleg_Id, "").ToString

            bonkopfBegin.BON_NAME = "" 'tbBON_NAME.Text

            bonkopfBegin.BON_NOTIZ = "" 'tbBON_NOTIZ.Text

            bonkopfBegin.BON_NR = BON_ID

            bonkopfBegin.BON_STORNO = 1  'If(cbBON_STORNO.Checked, "1", "0")

            bonkopfBegin.BON_TYP = "Beleg" 'cmbBON_TYP.SelectedItem.ToString()

            bonkopfBegin.KUNDE_ID = If(BELEG.KundenNr > 0, BELEG.KundenNr, "") 'tbKUNDE_ID.Text

            bonkopfBegin.KUNDE_LAND = If(BELEG.LandKz, "") 'tbKUNDE_LAND.Text

            bonkopfBegin.KUNDE_NAME = If(BELEG.Frachtführer, "") 'tbKUNDE_NAME.Text

            bonkopfBegin.KUNDE_ORT = If(BELEG.Ort, "") 'tbKUNDE_ORT.Text

            bonkopfBegin.KUNDE_PLZ = If(BELEG.PLZ, "") 'tbKUNDE_PLZ.Text

            bonkopfBegin.KUNDE_STRASSE = If(BELEG.Straße, "") ' tbKUNDE_STRASSE.Text

            bonkopfBegin.KUNDE_TYP = "" ' tbKUNDE_TYP.Text

            bonkopfBegin.KUNDE_USTID = If(BELEG.UstIdKz, "") & If(BELEG.UstIdNr, "") ' tbKUNDE_USTID.Text

            bonkopfBegin.TERMINAL_ID = "" 'tbTERMINAL_ID.Text

            Dim transactionNumber As Integer = 0
            Dim transactionNumberSpecified As Boolean

            Dim BeginReceiptResultSpecified As Boolean
            [error] = m_com.BeginReceipt(cashbox, bonkopfBegin, transactionNumber)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error3", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If

            '    MsgBox("5 ANZ: " & BELEG.POS.Count)
            Dim cntZeile = 1
            Dim GES_BRUTTO As Double = 0
            For Each POS In BELEG.POS

                'Bonposition hinzufügen
                Dim position As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonPosition = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonPosition()

                position.AGENTUR_ID = -1 'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["AGENTUR_ID"].Value)

                position.ARTIKELTEXT = POS.LeistungsBez 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ARTIKELTEXT"].Value)

                position.ART_NR = POS.LeistungsNr ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ART_NR"].Value)

                position.BON_ID = Convert.ToString(BON_ID)

                position.EINHEIT = "Stk." ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["EINHEIT"].Value)

                position.FAKTOR = 1 ' Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["FAKTOR"].Value)

                position.GTIN = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GTIN"].Value)

                position.GUTSCHEIN_NR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GUTSCHEIN_NR"].Value)

                position.GV_NAME = "" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_NAME"].Value)

                position.GV_TYP = "Umsatz" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_TYP"].Value)

                position.INHAUS = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["INHAUS"].Value)

                position.MENGE = POS.Anzahl 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["MENGE"].Value)

                position.POS_TERMINAL_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_TERMINAL_ID"].Value)

                position.POS_ZEILE = cntZeile 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_ZEILE"].Value)

                position.P_STORNO = 0 'Hier kein Storno, das wäre nur wenn eine Pos storniert wird...

                position.STK_BR = POS.Preis 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["STK_BR"].Value)

                position.WARENGR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR"].Value)

                position.WARENGR_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR_ID"].Value)

                position.Z_KASSE_ID = cashbox 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["Z_KASSE_ID"].Value)

                ' Beträge der Position

                Dim position_vat = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonPosition_Ust()

                position_vat.BON_ID = position.BON_ID

                position_vat.POS_ZEILE = position.POS_ZEILE

                Dim steuersatzID = 1
                Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT [Steuersatz] FROM [tblSteuersätze] where nr='" & BELEG.Steuerschlüssel & "'", "FMZOLL")
                Select Case steuersatz
                    Case 0.19 : steuersatzID = 1
                    Case 0.07 : steuersatzID = 2
                    Case 0.00 : steuersatzID = 6
                End Select
                '  MsgBox(POS.Anzahl)
                '  MsgBox(POS.Betrag)

                position_vat.UST_SCHLUESSEL = steuersatzID 'm_com.GetTaxIds(cashbox,)   'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["UST_SCHLUESSEL"].Value)
                Dim steuerBetrag = POS.Betrag * position_vat.UST_SCHLUESSEL
                position_vat.POS_BRUTTO = POS.Betrag + steuerBetrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_BRUTTO"].Value)

                position_vat.POS_NETTO = POS.Betrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_NETTO"].Value)

                position_vat.POS_UST = steuerBetrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_UST"].Value)

                position_vat.POS_BRUTTO *= stornoVz
                position_vat.POS_NETTO *= stornoVz
                position_vat.POS_UST *= stornoVz

                Dim AddPositionToReceiptResultSpecified As Boolean
                [error] = m_com.AddPositionToReceipt(cashbox, position, position_vat, transactionNumber)
                cntZeile += 1
                GES_BRUTTO += position_vat.POS_BRUTTO

            Next
            ' MsgBox("6: " & GES_BRUTTO)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error4", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If

            'Rechnung abschließen

            Dim bonkopfFinish As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonKopfFinish = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.BonKopfFinish()

            bonkopfFinish.Z_KASSE_ID = cashbox

            bonkopfFinish.BON_ID = BON_ID



            If Not Decimal.TryParse(GES_BRUTTO, bonkopfFinish.UMS_BRUTTO) Then
                bonkopfFinish.UMS_BRUTTO = 0.00
            End If


            bonkopfFinish.PROCESS_TYPE = "Kassenbeleg-V1"

            bonkopfFinish.payment_currencies = {"EUR"}

            bonkopfFinish.payment_types = {"Bar"}

            bonkopfFinish.payment_per_currency = {GES_BRUTTO} '{0.0} 'BETRAG"!!!!!!!!!!!!

            ' MsgBox("6,1: ")

            Dim FinishReceiptResult As Boolean = True
            Dim FinishReceiptResultSpecified As Boolean
            [error] = m_com.FinishReceipt(cashbox, bonkopfFinish, transactionNumber)
            '   MsgBox("6,2: ")

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error5", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If
            ' Kassenabschluss anlegen über alle noch nicht abgeschlossenen Rechnungen zu dieser Kasse

            ' Error = m_com.CreateCashpointClosing(cashbox)

            '            ' DSFinV-K-Export

            '            Int from = 0

            'Int to = 10

            'Dim ret = m_com.ExportCSVFiles(from, to, tbSelectedFolder.Text, tbZipName.Text, True, True,

            'true, true, true, true, true, true,

            'true, true, true, true,

            'true, true, true, true, true,

            'true, true, true);

            'If (ret == ErrorCode.OK) Then

            '{

            'MessageBox.Show("Die CSV Dateien wurden im Ordner " + tbSelectedFolder.Text + " angelegt und in die Zip-Datei " + tbZipName.Text + " gepackt.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

            '}

            'Else

            '{

            'MessageBox.Show("Beim exportieren der CSV-Dateien ging etwas schief:\r\n" + ret.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

            '}
            ' MsgBox("7")

            Dim transactionNumberRet As String
            Dim serialNumber As String
            Dim signature As String
            Dim transactionStart As Date
            Dim transactionFinish As Date
            Dim sigCounter As String
            Dim transactionStartSpecified As Boolean
            Dim transactionFinishSpecified As Boolean
            Dim GetLastReceiptValuesResultSpecified As Boolean
            '
            [error] = m_com.GetLastReceiptValues(cashbox, transactionNumberRet, serialNumber, signature, transactionStart, transactionFinish, sigCounter)

            '   MsgBox("8")

            Dim qrCode As String = String.Empty
            Dim mimeType As String = String.Empty
            Dim GetLastReceiptQrCodeResult As Boolean
            Dim GetLastReceiptQrCodeResultSpecified As Boolean
            [error] = m_com.GetLastReceiptQrCode(cashbox, qrCode, mimeType)

            QR_CodeString = qrCode
            LastJWS = signature


            '  MsgBox("9")
            If QR_CodeString.Length > 50 And LastJWS.Length > 50 Then
                Return True
            End If
        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function

    Shared Function stornoRKSV_DE(PERSONAL As cPersonal, BELEG As EABeleg, ByVal kasse As cRKSV_Kasse, ByVal RKSV_Beleg_Id As Integer, ByVal OLD_RKSV_Beleg_Id As Object, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String) As Boolean
        Try

            ' MsgBox("0: ")
            Dim cashbox As String = kasse.rksv_KassaGuid '"VERAG_GMBH_KASSE_01" "KASSA 001"
            'Dim endpoint = New System.ServiceModel.EndpointAddress(getRKSVLink(kasse))
            '  Dim m_com As VERAG_PROG_ALLGEMEIN.DSFinVKService.DSFinVKServerClient = New VERAG_PROG_ALLGEMEIN.DSFinVKService.DSFinVKServerClient("DSFinVKService", endpoint) '"http://ymgk028055.verag.ost.dmn:8733/DSFinVKService")

            Dim m_com As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer() 'PROBLEM??
            m_com.Url = "http://ymgk028055.verag.ost.dmn:8733/DSFinVKService"
            Dim [error] As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.ErrorCode
            Dim InitializeLibraryResultSpecified As Boolean
            '     Dim [error] = "" 'm_com.InitializeLibrary(tbLicense.Text, "D:\Database\DSFinVK\dsfinvkdb.db3", "Administrator", "test", cashbox)
            m_com.InitializeLibrary("SQLGUIDE01.verag.ost.dmn", "itg_RKSV_DE", "dsfinvk", "dsfinvk#1337", cashbox, [error], InitializeLibraryResultSpecified)

            '            Dim m_com As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer() 'PROBLEM??
            '  Dim m_com As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.DSFinVKServerClient = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService_2022.DSFinVKServerClient() 'PROBLEM??

            ' m_com.Url = "http://ymgk028055.verag.ost.dmn:8733/DSFinVKService"
            'Dim [error] As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.ErrorCode
            'Dim InitializeLibraryResultSpecified As Boolean
            '     Dim [error] = "" 'm_com.InitializeLibrary(tbLicense.Text, "D:\Database\DSFinVK\dsfinvkdb.db3", "Administrator", "test", cashbox)
            '  m_com.InitializeLibrary("SQLGUIDE01.verag.ost.dmn", "itg_RKSV_DE", "dsfinvk", "dsfinvk#1337", cashbox, [error], InitializeLibraryResultSpecified)

            ' MsgBox("1: " & [error])

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                If [error].ToString() <> "CASHBOX_ALREADY_MANAGED" Then '--> CASHBOX_ALREADY_MANAGED --> der Fehler darf auftreten, die Cashbox wird Serverseitig initialisert, hier nur der Versuch, falls das nciht geschehen ist... lt. Jan Mika / AITG
                    MessageBox.Show([error].ToString(), "Error1", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                    Return False
                End If
            End If

            ' MsgBox("2")
            Dim BON_ID As Integer = 0
            If False Then

                Dim BON_IDSpecified = False
                Dim GetNextBON_IDResultSpecified = False
                m_com.GetNextBON_ID(cashbox, BON_ID, BON_IDSpecified, [error], GetNextBON_IDResultSpecified)
                '  MsgBox("3: " & [error])

                If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                    If [error].ToString() <> "CASHBOX_ALREADY_MANAGED" Then '--> CASHBOX_ALREADY_MANAGED --> der Fehler darf auftreten, die Cashbox wird Serverseitig initialisert, hier nur der Versuch, falls das nciht geschehen ist... lt. Jan Mika / AITG
                        MessageBox.Show([error].ToString(), "Error2", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                        Return False
                    End If
                End If
            Else
                '  MsgBox(RKSV_Beleg_Id)
                BON_ID = RKSV_Beleg_Id
            End If

            'Dim BON_ID As Integer = 0
            'Dim BON_IDSpecified = False
            'Dim GetNextBON_IDResultSpecified = False
            'm_com.GetNextBON_ID(cashbox, BON_ID, BON_IDSpecified, [error], GetNextBON_IDResultSpecified)
            ''MsgBox("3: " & [error])

            'If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
            '    MessageBox.Show([error].ToString(), "Error2", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            '    Return False
            'End If

            'Dim BON_NR As Integer = 0
            '[error] = m_com.GetNextBON_NR(cashbox, BON_NR)

            'If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
            '    MessageBox.Show([error].ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            '    Return False
            'End If


            '  MsgBox("4")

            'Rechnung beginnen


            Dim stornoVz = -1


            Dim bonkopfBegin As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfBegin = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfBegin()

            bonkopfBegin.Z_KASSE_ID = cashbox

            bonkopfBegin.BEDIENER_ID = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID 'tbBEDIENER_ID.Text

            bonkopfBegin.BEDIENER_NAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME 'tbBEDIENER_NAME.Text

            bonkopfBegin.BON_ID = BON_ID.ToString()
            bonkopfBegin.REF_BON_ID = If(OLD_RKSV_Beleg_Id, "").ToString()

            bonkopfBegin.BON_NAME = "" 'tbBON_NAME.Text

            bonkopfBegin.BON_NOTIZ = "" 'tbBON_NOTIZ.Text

            bonkopfBegin.BON_NR = BON_ID

            bonkopfBegin.BON_STORNO = 1  'If(cbBON_STORNO.Checked, "1", "0")

            bonkopfBegin.BON_TYP = "Beleg" 'cmbBON_TYP.SelectedItem.ToString()

            bonkopfBegin.KUNDE_ID = If(BELEG.KundenNr > 0, BELEG.KundenNr, "") 'tbKUNDE_ID.Text

            bonkopfBegin.KUNDE_LAND = If(BELEG.LandKz, "") 'tbKUNDE_LAND.Text

            bonkopfBegin.KUNDE_NAME = If(BELEG.Frachtführer, "") 'tbKUNDE_NAME.Text

            bonkopfBegin.KUNDE_ORT = If(BELEG.Ort, "") 'tbKUNDE_ORT.Text

            bonkopfBegin.KUNDE_PLZ = If(BELEG.PLZ, "") 'tbKUNDE_PLZ.Text

            bonkopfBegin.KUNDE_STRASSE = If(BELEG.Straße, "") ' tbKUNDE_STRASSE.Text

            bonkopfBegin.KUNDE_TYP = "" ' tbKUNDE_TYP.Text

            bonkopfBegin.KUNDE_USTID = If(BELEG.UstIdKz, "") & If(BELEG.UstIdNr, "") ' tbKUNDE_USTID.Text

            bonkopfBegin.TERMINAL_ID = "" 'tbTERMINAL_ID.Text

            Dim transactionNumber As Integer = 0
            Dim transactionNumberSpecified As Boolean

            Dim BeginReceiptResultSpecified As Boolean
            m_com.BeginReceipt(cashbox, bonkopfBegin, transactionNumber, transactionNumberSpecified, [error], BeginReceiptResultSpecified)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error3", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If

            '    MsgBox("5 ANZ: " & BELEG.POS.Count)
            Dim cntZeile = 1
            Dim GES_BRUTTO As Double = 0
            For Each POS In BELEG.POS

                'Bonposition hinzufügen
                Dim position As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonPosition = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonPosition()

                position.AGENTUR_ID = -1 'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["AGENTUR_ID"].Value)

                position.ARTIKELTEXT = POS.LeistungsBez 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ARTIKELTEXT"].Value)

                position.ART_NR = POS.LeistungsNr ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ART_NR"].Value)

                position.BON_ID = Convert.ToString(BON_ID)

                position.EINHEIT = "Stk." ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["EINHEIT"].Value)

                position.FAKTOR = 1 ' Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["FAKTOR"].Value)

                position.GTIN = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GTIN"].Value)

                position.GUTSCHEIN_NR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GUTSCHEIN_NR"].Value)

                position.GV_NAME = "" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_NAME"].Value)

                position.GV_TYP = "Umsatz" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_TYP"].Value)

                position.INHAUS = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["INHAUS"].Value)

                position.MENGE = POS.Anzahl 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["MENGE"].Value)

                position.POS_TERMINAL_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_TERMINAL_ID"].Value)

                position.POS_ZEILE = cntZeile 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_ZEILE"].Value)

                position.P_STORNO = 0 'Hier kein Storno, das wäre nur wenn eine Pos storniert wird...

                position.STK_BR = POS.Preis 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["STK_BR"].Value)

                position.WARENGR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR"].Value)

                position.WARENGR_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR_ID"].Value)

                position.Z_KASSE_ID = cashbox 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["Z_KASSE_ID"].Value)

                ' Beträge der Position

                Dim position_vat = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonPosition_Ust()

                position_vat.BON_ID = position.BON_ID

                position_vat.POS_ZEILE = position.POS_ZEILE

                Dim steuersatzID = 1
                Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT [Steuersatz] FROM [tblSteuersätze] where nr='" & BELEG.Steuerschlüssel & "'", "FMZOLL")
                Select Case steuersatz
                    Case 0.19 : steuersatzID = 1
                    Case 0.07 : steuersatzID = 2
                    Case 0.00 : steuersatzID = 6
                End Select
                '  MsgBox(POS.Anzahl)
                '  MsgBox(POS.Betrag)

                position_vat.UST_SCHLUESSEL = steuersatzID 'm_com.GetTaxIds(cashbox,)   'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["UST_SCHLUESSEL"].Value)
                Dim steuerBetrag = POS.Betrag * position_vat.UST_SCHLUESSEL
                position_vat.POS_BRUTTO = POS.Betrag + steuerBetrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_BRUTTO"].Value)

                position_vat.POS_NETTO = POS.Betrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_NETTO"].Value)

                position_vat.POS_UST = steuerBetrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_UST"].Value)

                position_vat.POS_BRUTTO *= stornoVz
                position_vat.POS_NETTO *= stornoVz
                position_vat.POS_UST *= stornoVz

                Dim AddPositionToReceiptResultSpecified As Boolean
                m_com.AddPositionToReceipt(cashbox, position, position_vat, transactionNumber, transactionNumberSpecified, [error], AddPositionToReceiptResultSpecified)
                cntZeile += 1
                GES_BRUTTO += position_vat.POS_BRUTTO

            Next
            ' MsgBox("6: " & GES_BRUTTO)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error4", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If

            'Rechnung abschließen

            Dim bonkopfFinish As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfFinish = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfFinish()

            bonkopfFinish.Z_KASSE_ID = cashbox

            bonkopfFinish.BON_ID = BON_ID



            If Not Decimal.TryParse(GES_BRUTTO, bonkopfFinish.UMS_BRUTTO) Then
                bonkopfFinish.UMS_BRUTTO = 0.00
            End If


            bonkopfFinish.PROCESS_TYPE = "Kassenbeleg-V1"

            bonkopfFinish.payment_currencies = {"EUR"}

            bonkopfFinish.payment_types = {"Bar"}

            bonkopfFinish.payment_per_currency = {GES_BRUTTO} '{0.0} 'BETRAG"!!!!!!!!!!!!

            ' MsgBox("6,1: ")

            Dim FinishReceiptResult As Boolean = True
            Dim FinishReceiptResultSpecified As Boolean
            m_com.FinishReceipt(cashbox, bonkopfFinish, transactionNumber, FinishReceiptResult, [error], FinishReceiptResultSpecified)
            '   MsgBox("6,2: ")

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error5", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If
            ' Kassenabschluss anlegen über alle noch nicht abgeschlossenen Rechnungen zu dieser Kasse

            ' Error = m_com.CreateCashpointClosing(cashbox)

            '            ' DSFinV-K-Export

            '            Int from = 0

            'Int to = 10

            'Dim ret = m_com.ExportCSVFiles(from, to, tbSelectedFolder.Text, tbZipName.Text, True, True,

            'true, true, true, true, true, true,

            'true, true, true, true,

            'true, true, true, true, true,

            'true, true, true);

            'If (ret == ErrorCode.OK) Then

            '{

            'MessageBox.Show("Die CSV Dateien wurden im Ordner " + tbSelectedFolder.Text + " angelegt und in die Zip-Datei " + tbZipName.Text + " gepackt.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

            '}

            'Else

            '{

            'MessageBox.Show("Beim exportieren der CSV-Dateien ging etwas schief:\r\n" + ret.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

            '}
            ' MsgBox("7")

            Dim transactionNumberRet As String
            Dim serialNumber As String
            Dim signature As String
            Dim transactionStart As Date
            Dim transactionFinish As Date
            Dim sigCounter As String
            Dim transactionStartSpecified As Boolean
            Dim transactionFinishSpecified As Boolean
            Dim GetLastReceiptValuesResultSpecified As Boolean
            '
            m_com.GetLastReceiptValues(cashbox, transactionNumberRet, serialNumber, signature, transactionStart, transactionStartSpecified, transactionFinish, transactionFinishSpecified, sigCounter, [error], GetLastReceiptValuesResultSpecified)

            '   MsgBox("8")

            Dim qrCode As String = String.Empty
            Dim mimeType As String = String.Empty
            Dim GetLastReceiptQrCodeResult As Boolean
            Dim GetLastReceiptQrCodeResultSpecified As Boolean
            m_com.GetLastReceiptQrCode(cashbox, qrCode, mimeType, GetLastReceiptQrCodeResult, GetLastReceiptQrCodeResultSpecified)

            QR_CodeString = qrCode
            LastJWS = signature


            '  MsgBox("9")
            If QR_CodeString.Length > 50 And LastJWS.Length > 50 Then
                Return True
            End If
        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function

    Shared Function stornoRKSV(ByVal kasse As cRKSV_Kasse, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, ByRef answer As String) As Boolean
        Try

            If RKSV_Beleg_Id <= 0 Then
                MsgBox("Keine RKSV-Beleg-ID")
                Return False
            End If
            Dim client As RKSVWcfClient = New RKSVWcfClient()
            client.Endpoint.Address = New System.ServiceModel.EndpointAddress(getRKSVLink(kasse))
            client.Open()
            '   svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials();
            Dim credentials As New SDL.RKSVServer.DBUserCredentials

            credentials.Database = "RKSVWcfDB"
            credentials.Server = "AVISO\SQLEXPRESS"


            credentials.Username = "Admin"
            credentials.Password = "verag#2"
            'credentials.CashboxID = kasse '"VERAG-SUB-KASSE-ZOLL"
            'credentials.CompanyGUID = CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059"

            credentials.CashboxID = kasse.rksv_bez '"VERAG-SUB-KASSE-ZOLL"
            credentials.CompanyGUID = kasse.rksv_CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059"




            Dim jws As String = String.Empty
            Dim qr As String = String.Empty
            Dim ocra As String = String.Empty
            'Dim answer As String = String.Empty

            Dim Belegnummer = RKSV_Beleg_Id
            Dim BelegDatumUhrzeit = belegDat

            Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & steuerSchluessel & "' ", "FMZOLL")



            Dim BetragSatzNormal = IIf(steuersatz = 0.2, summeBRUTTO, 0.0) 'summe
            Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summeBRUTTO, 0.0)
            Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summeBRUTTO, 0.0)
            Dim BetragSatzNull = IIf(steuersatz = 0.0, summeBRUTTO, 0.0)
            Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summeBRUTTO, 0.0)
            Dim StandUmsatzzaehler = kasse.rksv_Umsatzzaehler 'KASSE.rksv_Umsatzzaehler


            ' Dim BetragSatzNormal = summe * -1
            '  Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summe, 0.0) * -1
            ' Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summe, 0.0) * -1
            ' Dim BetragSatzNull = IIf(steuersatz = 0.0, summe, 0.0) * -1
            ' Dim BetragSatzBesonders = IIf(steuersatz = 0.19, summe, 0.0) * -1
            ' Dim StandUmsatzzaehler = kasse.rksv_Umsatzzaehler

            ' Dim BetragSatzBesonders = 0
            ' Dim BetragSatzBesonders = 0
            ' Dim BetragSatzBesonders = 0
            'client.ExportJWS

            '  MsgBox(credentials.CashboxID & " credentials.CashboxID")
            '  MsgBox(credentials.CompanyGUID & " credentials.CompanyGUID")


            If (client.SignStornoReceipt(credentials, Belegnummer, BelegDatumUhrzeit, BetragSatzNormal, BetragSatzErm1, BetragSatzErm2, BetragSatzBesonders, BetragSatzNull, jws, qr, ocra, answer)) Then

                QR_CodeString = qr
                LastJWS = jws
            Else

                If (jws.Length > 50) Then

                    QR_CodeString = qr
                    '   Dim bmpBytes As Byte() = Convert.FromBase64String(qr)
                    '  Dim ms As New System.IO.MemoryStream(bmpBytes)
                    '  Dim bmp As Image = Image.FromStream(ms)
                    '  QR_Image = Image.FromStream(ms)
                    ' pbQrCode.Image = bmp
                    LastJWS = jws
                Else

                    Return False
                End If
            End If
            Return True

        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function

    'Beleg storno und Kassenbuch Gegenbuchung
    Shared Function STORNO(BELEG As EABeleg, ByVal grund As String, Firma As String, Optional stornoGegenbuchen As Boolean = False) As EABeleg
        If (Not BELEG.gebuchtStorno) Or stornoGegenbuchen Then
            '   MsgBox("SELECT * FROM tblKassenbuch WHERE  [Mandant]='" & BELEG.Mandant & "' AND Niederlassung='" & BELEG.Niederlassung & "' AND Benutzer='" & BELEG.Benutzer & "' AND Geschäftsjahr='" & getGJ(BELEG.BelegDat) & "' AND BelegNr='" & BELEG.BelegNr & "'")
            'Dim dt As DataTable = SQL.loadDgvBySql("SELECT * FROM tblKassenbuch WHERE  [Mandant]='" & BELEG.Mandant & "' AND Niederlassung='" & BELEG.Niederlassung & "' AND Benutzer='" & BELEG.Benutzer & "' AND Geschäftsjahr='" & getGJ_FIRMA(BELEG.BelegDat, Firma) & "' AND BelegNr='" & BELEG.BelegNr & "'", "FMZOLL")
            Dim dt As DataTable = SQL.loadDgvBySql("SELECT * FROM tblKassenbuch WHERE  [Mandant]='" & BELEG.Mandant & "' AND Niederlassung='" & BELEG.Niederlassung & "' AND Benutzer='" & BELEG.Benutzer & "' AND Geschäftsjahr='" & getGJ_FIRMA(BELEG.BelegDat, Firma) & "' AND rksv_BelegId='" & BELEG.rksv_BelegId & "'", "FMZOLL")
            ' Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, getGJ(BELEG.BelegDat))
            If dt IsNot Nothing Then
                For Each r In dt.Rows
                    Dim KBEntry As New cKassenbuch("LOAD", BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, getGJ_FIRMA(BELEG.BelegDat, Firma), r("JournalNr"))
                    KBEntry.JournalNr = cRKSV.getNewJournalNr(BELEG, Firma) ' GJ.INCREASE_JOURNAL() 'Vergabe der Journalnummer'
                    KBEntry.BelegDat = BELEG.BelegDat
                    KBEntry.Buchungsdatum = Now.ToShortDateString
                    KBEntry.Soll = KBEntry.Soll * -1
                    KBEntry.Haben = KBEntry.Haben * -1
                    KBEntry.Steuerbetrag = KBEntry.Steuerbetrag * -1
                    KBEntry.INSERT()
                Next
            End If
            If Not stornoGegenbuchen Then
                BELEG.gebuchtStorno = True
                BELEG.storniert = True
                BELEG.Stornogrund = grund
                BELEG.SAVE()
            End If
        End If
        Return BELEG
    End Function

    'Beleg storno und Kassenbuch Gegenbuchung
    Shared Function STORNO_BELEG_ONLY(BELEG As EABeleg, ByVal grund As String) As EABeleg
        BELEG.gebuchtStorno = True
        BELEG.storniert = True
        BELEG.Stornogrund = grund
        BELEG.SAVE()
        Return BELEG
    End Function
    'Beleg storno und Kassenbuch Gegenbuchung
    Shared Function DELETE(BELEG As EABeleg, Firma As String) As Boolean
        Try
            Dim dt As DataTable = SQL.loadDgvBySql("DELETE FROM tblKassenbuch WHERE  [Mandant]='" & BELEG.Mandant & "' AND Niederlassung='" & BELEG.Niederlassung & "' AND Benutzer='" & BELEG.Benutzer & "' AND Geschäftsjahr='" & getGJ_FIRMA(BELEG.BelegDat, Firma) & "' AND BelegNr='" & BELEG.BelegNr & "'", "FMZOLL")
            Return BELEG.DELETE()
        Catch ex As Exception
            MsgBox(ex.Message)
            Return False
        End Try
        Return True
    End Function


    Shared Function STORNO_RUECKGAENGIG(BELEG As EABeleg, ByVal grund As String, Firma As String) As EABeleg
        If BELEG.gebuchtStorno Then
            Dim dt As DataTable = SQL.loadDgvBySql("SELECT * FROM tblKassenbuch WHERE  [Mandant]='" & BELEG.Mandant & "' AND Niederlassung='" & BELEG.Niederlassung & "' AND Benutzer='" & BELEG.Benutzer & "' AND Geschäftsjahr='" & getGJ_FIRMA(BELEG.BelegDat, Firma) & "' AND BelegNr='" & BELEG.BelegNr & "'", "FMZOLL")
            '  Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, getGJ(BELEG.BelegDat))
            If dt IsNot Nothing Then
                For Each r In dt.Rows
                    Dim KBEntry As New cKassenbuch("LOAD", BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, getGJ_FIRMA(BELEG.BelegDat, Firma), r("JournalNr"))
                    KBEntry.JournalNr = cRKSV.getNewJournalNr(BELEG, Firma) ' GJ.INCREASE_JOURNAL() 'Vergabe der Journalnummer'
                    KBEntry.BelegDat = BELEG.BelegDat
                    KBEntry.Buchungsdatum = Now.ToShortDateString
                    KBEntry.Soll = KBEntry.Soll * -1
                    KBEntry.Haben = KBEntry.Haben * -1
                    KBEntry.Steuerbetrag = KBEntry.Steuerbetrag * -1
                    KBEntry.INSERT()
                Next
            End If
            BELEG.gebuchtStorno = False
            BELEG.storniert = False
            BELEG.Stornogrund = ""
            BELEG.SAVE()
        End If
        Return BELEG
    End Function

    Shared Function getGJ_FIRMA(BelegDat As Date, FIRMA As String) As Integer
        If FIRMA = "" Then FIRMA = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        Select Case FIRMA
            Case "VERAG", "ATILLA"
                Return IIf(BelegDat.Month = 1, BelegDat.Year - 1, BelegDat.Year)
            Case Else
                Return BelegDat.Year
        End Select

    End Function

    Shared Function getGJ(BelegDat As Date, FIRMA_ID As Integer) As Integer
        'If FIRMA = "" Then FIRMA = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        Select Case FIRMA_ID
            Case -1, 1, 3, 11, 7, 15 'Abweichendes WJ
                Return IIf(BelegDat.Month = 1, BelegDat.Year - 1, BelegDat.Year)
            Case Else
                Return BelegDat.Year
        End Select
    End Function
    'Shared Function getGJ(BelegDat As Date, FIRMAId As String) As Integer

    '    If FIRMA = "" Then FIRMA = New VERAG_PROG_ALLGEMEIN.cFirmen()
    '    Select Case FIRMA
    '        Case "IMEX", "FRONTOFFICE", "UNISPED", "AMBAR"
    '            Return BelegDat.Year
    '        Case Else
    '            Return IIf(BelegDat.Month = 1, BelegDat.Year - 1, BelegDat.Year)
    '    End Select

    'End Function

    'Shared Function getGJ_ByRksvId(BelegDat As Date, RksvId As Integer) As Integer
    '    Select Case RksvId
    '        Case 1
    '            Return getGJ(BelegDat, "VERAG")
    '        Case Else
    '            Return IIf(BelegDat.Month = 1, BelegDat.Year - 1, BelegDat.Year)
    '    End Select

    'End Function


    Shared Function getGJ_EndOfYear(GeschaerftsJahr As Integer, Optional FIRMA As String = "") As Date
        If FIRMA = "" Then FIRMA = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        Select Case FIRMA
            Case "VERAG", "ATILLA"
                Return CDate("31.01." & (GeschaerftsJahr + 1))
            Case Else
                Return CDate("31.12." & GeschaerftsJahr)
        End Select
    End Function

    Shared Function getGJ_BeginOfYear(GeschaerftsJahr As Integer, Optional FIRMA As String = "") As Date
        If FIRMA = "" Then FIRMA = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
        Select Case FIRMA
            Case "VERAG", "ATILLA"
                Return CDate("01.02." & GeschaerftsJahr)
            Case Else
                Return CDate("01.01." & GeschaerftsJahr)
        End Select
    End Function

    Public Shared Function isforbiddenDate() As Boolean
        Dim lastDayofMonth = CDate("01." & Now.AddMonths(1).Month & "." & Now.AddMonths(1).Year).AddDays(-1)
        Dim nowdate As Date = CDate("31.01.2018") 'Now
        'wenn letzter Tag im Monat...
        If nowdate.ToShortDateString = lastDayofMonth.ToShortDateString Then
            Dim zp As Date = CDate(Now.ToShortDateString & " 23:54:50")
            '... und kurz vor Mitternacht:
            If Now > zp Then
                Return True
            End If
        End If
        Return False
    End Function

    'cboPrinter.SelectedItem.ToString
    Public Shared Function printKundenBeleg(BELEG As EABeleg, KASSE As cRKSV_Kasse, PERSONAL As cPersonal, printername As String, showDok As Boolean) As Boolean

        'Dim print As New frmPrintLayout

        Dim rpt As New rptKundenBeleg
        rpt.lblRgNr.Text = BELEG.rksv_BelegId '"12345 / TR"
        rpt.lblRgDatum.Text = BELEG.BelegDat.ToString("dd.MM.yyyy") ' HH:mm")
        ' rpt.lblKdNr.Text = IIf(BELEG.KundenNr > 0, BELEG.KundenNr, "")
        rpt.lblFirma.Text = BELEG.Ordnungsbegriff

        Dim adr1 = BELEG.Straße
        Dim adr2 = (BELEG.LandKz & " " & BELEG.PLZ & " " & BELEG.Ort).Trim
        If adr1.Trim <> "" Then rpt.lblFirma.Text &= vbNewLine & adr1
        If adr2.Trim <> "" Then rpt.lblFirma.Text &= vbNewLine & adr2

        Dim uidkdnr = (BELEG.UstIdKz & " " & BELEG.UstIdNr).Trim
        If uidkdnr <> "" Then uidkdnr &= vbNewLine
        uidkdnr &= IIf(BELEG.KundenNr > 0, BELEG.KundenNr, "")
        rpt.lblUID.Text = uidkdnr

        rpt.lblFahrer.Text = BELEG.Fahrer
        rpt.lblLKWKz.Text = BELEG.LKW_Kennzeichen
        If BELEG.LKW_Kennzeichen = "" Then rpt.lblKennzeichenUeberschrift.Text = "" ' = False
        rpt.txtPassnummer.Text = BELEG.Passnummer
        If BELEG.Passnummer = "" Then rpt.TextBox1.Text = "" ' = False

        If BELEG.Fahrer = "" Then rpt.lblFahrerUeberschrift.Text = "" '= False
        rpt.lblTextSteuern.Text = SQL.getValueTxtBySql("SELECT TOP 1 isnull(Beschreibung,'< keine Steuerberechnung >')  FROM [tblSteuersätze] WHERE Nr='" & BELEG.Steuerschlüssel & "'", "FMZOLL")
        Dim steuersatz = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & BELEG.Steuerschlüssel & "' ", "FMZOLL")

        rpt.lblSachbearbeiter.Text = PERSONAL.Name
        rpt.lblKbNr.Text = "( " & PERSONAL.KassenbuchNr & " )"
        rpt.Label25.Visible = (BELEG.DruckDatumUhrzeit IsNot Nothing) 'KOPIE

        rpt.lblBetragSum.Text = ""
        rpt.lblGesamtbetrag.Text = ""
        rpt.lblBetragSteuern.Text = ""

        rpt.lblPosNr.Text = ""
        If If(BELEG.LKW_Beleg, True) Then
            If BELEG.FilialenNr > 0 And BELEG.AbfertigungsNr > 0 Then
                rpt.lblPosNr.Text = BELEG.FilialenNr & " / " & BELEG.AbfertigungsNr
            End If
        Else
            'alle betroffenen AbfNr:
            For Each b In BELEG.POS
                If b.FilialenNr > 0 And b.AbfertigungsNr > 0 Then
                    If Not rpt.lblPosNr.Text.Contains(b.FilialenNr & "/" & b.AbfertigungsNr) Then
                        rpt.lblPosNr.Text &= b.FilialenNr & "/" & b.AbfertigungsNr & vbNewLine
                    End If
                End If
            Next
        End If
        rpt.lblPosNr.Text = rpt.lblPosNr.Text.Trim
        If rpt.lblPosNr.Text = "" Then rpt.lblPosNr.Visible = False : rpt.Label26.Visible = False


        If If(BELEG.LKW_Id, 0) > 0 Then
            rpt.txtLKWId.Text = BELEG.LKW_Id
        Else
            rpt.txtLKWId.Visible = False : rpt.Label1.Visible = False
        End If


        If BELEG.storniert Then
            rpt.Label25.Text = "**** STORNO ****"
            rpt.Label25.Visible = True
            rpt.lblStorno.Visible = True
            rpt.lblStorno.Text = "STORNORECHNUNG" & vbNewLine & BELEG.Stornogrund
        End If


        Select Case KASSE.rksv_bez
            Case "VERAG-SUB-KASSE-ZOLL"
                'Default Werte:
                'rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2 'Standart
                rpt.lblFirma_Name.Text = "VERAG Spedition AG"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 100" & vbNewLine & "UID: ATU53187000 "
            Case "VERAG-CUSTOMSSERVICE-KASSE-ZOLL"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo_med
                rpt.lblFirma_Name.Text = "VERAG Customs Service GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU68374109 "
            Case "ATILLA-SUB-KASSE-ZOLL"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.Atilla_big_med
                rpt.lblFirma_Name.Text = "ATILLA Spedition GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU63158647 "
            Case "VERAG-GMBH-KASSE-ZOLL"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.Verag_Spedition_GMBH_Logo_med
                rpt.lblFirma_Name.Text = "VERAG Spedition GmbH"
                rpt.lblFirma_Details.Text = "D 94152 Neuhaus am Inn  |  Hartham 6" & vbNewLine & "UID: DE813570890 "
                Select Case PERSONAL.Niederlassung
                    Case "SBG"
                        rpt.lblFirma_Details.Text &= vbNewLine & "Niederlassung: Bad Reichenhall"
                    Case "WAI"
                        rpt.lblFirma_Details.Text &= vbNewLine & "Niederlassung: Waidhaus"
                End Select
            Case "KASSE-VERWALTUNG"
                'Default Werte:
                '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                rpt.lblFirma_Details.Text = " *** nur intern ***"
            Case "IMEX-KASSE-VERWALTUNG"
                rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                rpt.lblFirma_Details.Text = " *** nur intern ***"
                rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
            Case "TEST-KASSE"
                'Default Werte:
                '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "IMEX" Then rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then rpt.picVERAG.Image = My.Resources.Atilla_big_med

                rpt.lblFirma_Name.Text = "TEST-KASSE"
                rpt.lblFirma_Details.Text = " *** nur intern ***"
            Case "IMEX-KASSE-SUB"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
            Case "FRONT-OFFICE-SUB-KASSE"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.FrontOfficeSUB
                rpt.lblFirma_Name.Text = "Front-Office Suben eG"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU74813856 "
        End Select

        If KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv Then
            If BELEG.rksv_qr Is Nothing OrElse BELEG.rksv_qr = "" Then
                If KASSE.rksv_KassaGuid <> "KASSE_01" Then
                    MsgBox("Fehler: QR-Code wurde nicht richtig erstellt!")
                End If
            Else
                Dim bmpBytes As Byte() = Convert.FromBase64String(BELEG.rksv_qr)
                Dim MS As New System.IO.MemoryStream(bmpBytes)
                Dim QR_Image = Image.FromStream(MS)
                rpt.QR.Image = QR_Image
            End If

        End If
        '     rpt.DataSource = cProgramFunctions.dgridViewTods(dgvBelegPos)

        Dim dt As New DataTable
        dt.Columns.Add("clmnAnzahl", GetType(String))
        dt.Columns.Add("clmnBeschreibung", GetType(String))
        dt.Columns.Add("clmnBetrag", GetType(String))
        dt.Columns.Add("clmnPreis", GetType(String))

        For Each p In BELEG.POS
            ' dt.Rows.Add(p.Anzahl, p.Leistungsbeschreibung, p.Betrag, p.Preis)
            If BELEG.Belegart = 1 Then
                dt.Rows.Add(p.Anzahl, p.LeistungsBez, p.Betrag, p.Preis)
            Else
                dt.Rows.Add(p.Anzahl, p.LeistungsBez, p.Betrag * -1, p.Preis * -1)
            End If
        Next

        rpt.DataSource = dt 'cProgramFunctions.dgridViewTods(dgvBelegPos)
        Dim sum As Double = 0
        'Dim cnt As Integer = 0
        AddHandler rpt.Detail.Format, Sub()
                                          rpt.lblLeistungsNr.Text = rpt.Fields.Item("clmnAnzahl").Value()
                                          rpt.lblLeistun.Text = rpt.Fields.Item("clmnBeschreibung").Value()
                                          rpt.lblBetrag.Text = CDbl(rpt.Fields.Item("clmnBetrag").Value()).ToString("C")
                                          rpt.lblEinzelpreis.Text = CDbl(rpt.Fields.Item("clmnPreis").Value()).ToString("C")
                                          sum += rpt.Fields.Item("clmnBetrag").Value()
                                      End Sub
        AddHandler rpt.ReportFooter1.Format, Sub()
                                                 rpt.lblBetragSum.Text = CDbl(sum).ToString("C")
                                                 Dim s As Double = IIf(IsNumeric(steuersatz), steuersatz, 0)
                                                 rpt.lblBetragSteuern.Text = CDbl(sum * s).ToString("C")
                                                 rpt.lblGesamtbetrag.Text = CDbl(sum + (sum * s)).ToString("C")
                                                 If sum < 0 Then rpt.Label2.Text = "Rechnungskorrektur Nr."
                                             End Sub

        'PaperKind = System.Drawing.Printing.PaperKind.Custom
        ' Me.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.Custom
        If showDok Then ' Wird angezeigt, nicht gedruckt
            Dim print As New GrapeCity.ActiveReports.Viewer.Win.Viewer
            print.Text = "Beleg"
            Dim printForm As New frmPrintLayout
            AddHandler print.LoadCompleted, Sub()
                                                If BELEG.DruckDatumUhrzeit Is Nothing Then
                                                    BELEG.DruckDatumUhrzeit = Now
                                                    BELEG.SAVE()
                                                End If
                                            End Sub
            printForm.Viewer.LoadDocument(rpt)

            printForm.Viewer.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            printForm.Show()
            printForm.BringToFront()
        Else
            ' print.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            '   print.LoadDocument(rpt)


            If printername <> "" Then
                rpt.Document.Printer.PrinterName = printername
            Else
                Dim p As New PrintDialog
                If p.ShowDialog() = DialogResult.OK Then
                    printername = p.PrinterSettings.PrinterName
                Else
                    rpt.Dispose()
                End If
            End If

            rpt.Run(False)
            rpt.Document.Printer.PrinterSettings.Copies = 1

            If Not rpt.Document.Print(False, False) Then
                MsgBox("Problem beim Drucken.")
            End If
            If BELEG.DruckDatumUhrzeit Is Nothing Then
                BELEG.DruckDatumUhrzeit = Now
                BELEG.SAVE()
            End If
            rpt.Dispose()

        End If

        Return True
        '   Me.Cursor = Cursors.Default
    End Function


    Public Shared Function printKundenBelegLG(BELEG As EABeleg, KASSE As cRKSV_Kasse, PERSONAL As cPersonal, printername As String, Art As String) As Boolean

        'Dim print As New frmPrintLayout
        Dim print As New GrapeCity.ActiveReports.Viewer.Win.Viewer
        print.Text = "Beleg"
        Dim rpt As New rptLeihgeldBeleg
        rpt.lblRgNr.Text = BELEG.rksv_BelegId '"12345 / TR"
        rpt.lblRgDatum.Text = BELEG.BelegDat.ToString("dd.MM.yyyy") ' HH:mm")
        ' rpt.lblKdNr.Text = IIf(BELEG.KundenNr > 0, BELEG.KundenNr, "")
        rpt.lblFrachtf.Text = BELEG.Ordnungsbegriff


        Dim firenname = (If(BELEG.Name1, "") & If(BELEG.Name2, "")).Trim

        Dim adr1 = BELEG.Straße
        Dim adr2 = (BELEG.LandKz & " " & BELEG.PLZ & " " & BELEG.Ort).Trim
        If adr1.Trim <> "" Then rpt.lblFrachtf.Text &= vbNewLine & adr1
        If adr2.Trim <> "" Then rpt.lblFrachtf.Text &= vbNewLine & adr2

        rpt.lblFirma.Text = If(BELEG.KundenNr > 0, BELEG.KundenNr & " - ", "") & If(firenname <> "", firenname, BELEG.Ordnungsbegriff) & If(adr1 <> "", vbNewLine & adr1, "") & If(adr2 <> "", vbNewLine & adr2, "")
        rpt.txtFrachtfuhrer.Text = If(BELEG.FrachtführerKundenNr > 0, BELEG.FrachtführerKundenNr & " - ", "") & BELEG.Frachtführer

        rpt.lblUID.Text = (BELEG.UstIdKz & " " & BELEG.UstIdNr).Trim
        ' rpt.lblKdNr.Text = IIf(BELEG.KundenNr > 0, BELEG.KundenNr, "")
        rpt.Label24.Text = "Auszahlungsbetrag"


        If PERSONAL.isLeihgeldkasse AndAlso BELEG.Niederlassung = "SUA" Then
            Dim fontAtilla As New Font("Arial", 12, FontStyle.Bold)

            rpt.lblFahrer.Font = fontAtilla
            rpt.txtFrachtfuhrer.Font = fontAtilla
            rpt.lblLKWKz.Font = fontAtilla
            rpt.lblPassnummer.Font = fontAtilla
            rpt.Label12.Font = fontAtilla
            rpt.Label15.Font = fontAtilla
            rpt.Label14.Font = fontAtilla
            rpt.Label7.Font = fontAtilla


        End If



        rpt.lblFahrer.Text = BELEG.Fahrer
        rpt.lblFahrer2.Text = BELEG.Fahrer
        rpt.lblLKWKz.Text = BELEG.LKW_Kennzeichen
        rpt.lblPassnummer.Text = BELEG.Passnummer
        '  If BELEG.LKW_Kennzeichen = "" Then rpt.lblKennzeichenUeberschrift.Text = "" ' = False
        '  If BELEG.Fahrer = "" Then rpt.lblFahrerUeberschrift.Text = "" '= False
        rpt.lblTextSteuern.Text = SQL.getValueTxtBySql("SELECT TOP 1 isnull(Beschreibung,'< keine Steuerberechnung >')  FROM [tblSteuersätze] WHERE Nr='" & BELEG.Steuerschlüssel & "'", "FMZOLL")
        Dim steuersatz = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & BELEG.Steuerschlüssel & "' ", "FMZOLL")

        rpt.lblSachbearbeiter.Text = PERSONAL.Name
        rpt.lblSachbearbeiter2.Text = PERSONAL.Name
        rpt.lblKbNr.Text = "( " & PERSONAL.KassenbuchNr & " )"
        rpt.Label25.Visible = (BELEG.DruckDatumUhrzeit IsNot Nothing) 'KOPIE

        rpt.lblBetragSum.Text = ""
        rpt.lblGesamtbetrag.Text = ""
        rpt.lblBetragSteuern.Text = ""
        rpt.lblPosNr.Text = IIf(BELEG.FilialenNr > 0, BELEG.FilialenNr & " / ", "") & BELEG.AbfertigungsNr

        If BELEG.storniert Then
            rpt.Label25.Text = "**** STORNO ****"
            rpt.Label25.Visible = True
            rpt.lblStorno.Visible = True
            rpt.lblStorno.Text = "STORNORECHNUNG" & vbNewLine & BELEG.Stornogrund

        End If

        If Art = "LG" Then
        ElseIf Art = "A" Then

        End If

        If KASSE IsNot Nothing Then
            Select Case KASSE.rksv_bez
                Case "VERAG-SUB-KASSE-ZOLL"
                    'Default Werte:
                    'rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2 'Standart
                    rpt.lblFirma_Name.Text = "VERAG Spedition AG"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 100" & vbNewLine & "UID: ATU53187000 "
                Case "VERAG-CUSTOMSSERVICE-KASSE-ZOLL"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo_med
                    rpt.lblFirma_Name.Text = "VERAG Customs Service GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU68374109 "
                    rpt.Label1.Text = "Wir bestätigen, den o.g. Betrag von der Firma VERAG Customs Service GmbH erhalten zu haben."
                Case "ATILLA-SUB-KASSE-ZOLL"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.Atilla_big_med
                    rpt.lblFirma_Name.Text = "ATILLA Spedition GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU63158647 "
                    rpt.Label1.Text = "Wir bestätigen, den o.g. Betrag von der Firma ATILLA Spedition GmbH erhalten zu haben."
                Case "VERAG-GMBH-KASSE-ZOLL"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.Verag_Spedition_GMBH_Logo_med
                    rpt.lblFirma_Name.Text = "VERAG Spedition GmbH"
                    rpt.lblFirma_Details.Text = "D 94152 Neuhaus am Inn  |  Hartham 6" & vbNewLine & "UID: DE813570890 "
                Case "KASSE-VERWALTUNG"
                    'Default Werte:
                    '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                    rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                    rpt.lblFirma_Details.Text = " *** nur intern ***"
                Case "IMEX-KASSE-VERWALTUNG"
                    rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                    rpt.lblFirma_Details.Text = " *** nur intern ***"
                    rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                    rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
                Case "TEST-KASSE"
                    'Default Werte:
                    rpt.lblFirma_Name.Text = "TEST-KASSE"
                    rpt.lblFirma_Details.Text = " *** nur intern ***"

                    Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                        Case "IMEX"
                            rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                            rpt.Label1.Text = "Wir bestätigen, den o.g. Betrag von der Firma IMEX Customs Service GmbH erhalten zu haben."
                        Case "ATILLA"
                            rpt.picVERAG.Image = My.Resources.Atilla_big_med
                            rpt.Label1.Text = "Wir bestätigen, den o.g. Betrag von der Firma ATILLA Spedition GmbH erhalten zu haben."
                    End Select

                Case "IMEX-KASSE-SUB"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                    rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
                    rpt.Label1.Text = "Wir bestätigen, den o.g. Betrag von der Firma IMEX Customs Service GmbH erhalten zu haben."
                Case "FRONT-OFFICE-SUB-KASSE"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.FrontOfficeSUB
                    rpt.lblFirma_Name.Text = "Front-Office Suben eG"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU74813856 "
                    rpt.Label1.Text = "Wir bestätigen, den o.g. Betrag von der Firma Front-Office Suben eG erhalten zu haben."
            End Select


            If KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv Then

                If BELEG.rksv_qr Is Nothing OrElse BELEG.rksv_qr = "" Then
                    If KASSE.rksv_KassaGuid <> "KASSE_01" Then
                        MsgBox("Fehler: QR-Code wurde nicht richtig erstellt!")
                    End If
                Else
                    Dim bmpBytes As Byte() = Convert.FromBase64String(BELEG.rksv_qr)
                    Dim MS As New System.IO.MemoryStream(bmpBytes)
                    Dim QR_Image = Image.FromStream(MS)
                    rpt.QR.Image = QR_Image
                End If

            End If
        End If
        '     rpt.DataSource = cProgramFunctions.dgridViewTods(dgvBelegPos)

        Dim dt As New DataTable
        dt.Columns.Add("clmnAnzahl", GetType(String))
        dt.Columns.Add("clmnBeschreibung", GetType(String))
        dt.Columns.Add("clmnBetrag", GetType(String))
        dt.Columns.Add("clmnPreis", GetType(String))

        For Each p In BELEG.POS
            dt.Rows.Add(p.Anzahl, p.Leistungsbeschreibung, p.Betrag, p.Preis)
        Next

        rpt.DataSource = dt 'cProgramFunctions.dgridViewTods(dgvBelegPos)
        Dim sum As Double = 0
        'Dim cnt As Integer = 0
        AddHandler rpt.Detail.Format, Sub()
                                          rpt.lblLeistungsNr.Text = rpt.Fields.Item("clmnAnzahl").Value()
                                          rpt.lblLeistun.Text = rpt.Fields.Item("clmnBeschreibung").Value()
                                          rpt.lblBetrag.Text = CDbl(rpt.Fields.Item("clmnBetrag").Value()).ToString("C")
                                          rpt.lblEinzelpreis.Text = CDbl(rpt.Fields.Item("clmnPreis").Value()).ToString("C")
                                          sum += rpt.Fields.Item("clmnBetrag").Value()
                                      End Sub
        AddHandler rpt.ReportFooter1.Format, Sub()
                                                 rpt.lblBetragSum.Text = CDbl(sum).ToString("C")
                                                 Dim s As Double = IIf(IsNumeric(steuersatz), steuersatz, 0)
                                                 rpt.lblBetragSteuern.Text = CDbl(sum * s).ToString("C")
                                                 rpt.lblGesamtbetrag.Text = CDbl(sum + (sum * s)).ToString("C")

                                             End Sub

        rpt.Run(False)

        If printername <> "" Then
            rpt.Document.Printer.PrinterName = printername
        Else
            Dim p As New PrintDialog
            If p.ShowDialog() = DialogResult.OK Then
                printername = p.PrinterSettings.PrinterName
            Else
                rpt.Dispose()
            End If
        End If

        If Not rpt.Document.Print(False, False) Then
            MsgBox("Problem beim Drucken.")
        End If
        If BELEG.DruckDatumUhrzeit Is Nothing Then
            BELEG.DruckDatumUhrzeit = Now
            BELEG.SAVE()
        End If
        rpt.Dispose()

        If False Then

            AddHandler print.LoadCompleted, Sub()
                                                '  MsgBox("b" & printername)
                                                ' MsgBox(cboPrinter.SelectedItem.ToString)
                                                ' If cboPrinter.SelectedItem.ToString <> "" Then print.Document.Printer.PrinterName = cboPrinter.SelectedItem.ToString
                                                If printername <> "" Then
                                                    print.Document.Printer.PrinterName = printername
                                                Else
                                                    Dim p As New PrintDialog
                                                    If p.ShowDialog() = DialogResult.OK Then
                                                        printername = p.PrinterSettings.PrinterName
                                                    Else
                                                        print.Dispose()
                                                        Exit Sub
                                                    End If
                                                End If
                                                If printername = "" Then print.Dispose() : Exit Sub
                                                print.Document.Printer.PrinterName = printername
                                                If Not print.Print(False, False) Then
                                                    MsgBox("Problem beim Drucken.")
                                                End If
                                                If BELEG.DruckDatumUhrzeit Is Nothing Then
                                                    BELEG.DruckDatumUhrzeit = Now
                                                    BELEG.SAVE()
                                                End If
                                                print.Dispose()
                                                '   print.Close()
                                            End Sub

        End If
        Return True

        '   Me.Cursor = Cursors.Default
    End Function


    Public Shared Function printNULLBeleg(KASSE As cRKSV_Kasse, PERSONAL As cPersonal, AUTODRUCK As Boolean, Firma As String) As Boolean
        Try

            If PERSONAL Is Nothing Then
                Dim FMZOLL_SQL As New FMZOLL_SQL
                PERSONAL = FMZOLL_SQL.getPersonalById(274)
            End If

            Dim ib = ""
            '  If Not AUTODRUCK Then ib = InputBox("Passwort:")
            '  If AUTODRUCK Or (ib = "verag#2" Or ib = "supervisor") Then
            '  Dim PERSONAL As SDL.cPersonal = Nothing
            '  Dim frmSecureLoginKassenbuch As New SDL.frmSecureLoginKassenbuch
            ' If frmSecureLoginKassenbuch.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
            'PERSONAL = frmSecureLoginKassenbuch.PERSONAL
            '

            Dim TESTBUCHUNG = False
            Dim oldBelegZaehler = KASSE.rksv_BelegIdZaehler
            Dim summe As Double = 0
            Dim RKSV_Beleg_Id = KASSE.INCREASE_BELEG_UMSATZ(If(TESTBUCHUNG, 0, summe))
            If RKSV_Beleg_Id < 0 Then
                'Exit Function
                Return False
            End If

            Dim BELEG As New EABeleg(PERSONAL.Mandant, PERSONAL.Niederlassung, PERSONAL.ID)
            '  Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ(BELEG.BelegDat))

            BELEG.Ordnungsbegriff = "*** NULL-BELEG ***"
            BELEG.Beleg_TYP = "0"
            BELEG.Belegart = "0"
            BELEG.Name1 = "*** NULL-BELEG ***"
            BELEG.Steuerschlüssel = 3510
            BELEG.BelegNr = cRKSV.getNewBelegNr(BELEG, Firma) 'GJ.INCREASE_BELEG() 'Vergabe der Belegnummer '
            ' Beleg noch nicht gespeichert.... BELEG.DEL_POS_List()' Positionen löschen, da BelegNr Neu vergeben
            For Each p In BELEG.POS
                p.BelegNr = BELEG.BelegNr
            Next
            BELEG.gebucht = True
            BELEG.SAVE()


            '  QR_Image = Nothing
            Dim QR_CodeString As String = ""
            Dim LastJWS As String = ""

            If KASSE.rksv_aktiv Then ' WENN für die Kasse die RKSV gilt
                Dim answer = ""

                If Not cRKSV.insertRKSV(KASSE, KASSE.rksv_CompanyGUID, KASSE.rksv_Umsatzzaehler, BELEG.BelegDat, BELEG.Steuerschlüssel, RKSV_Beleg_Id, 0, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service
                    If Not TESTBUCHUNG Then
                        KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summe * -1)
                        cRKSV.DELETE(BELEG, KASSE.rksv_firma)
                    End If
                    MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical)
                    ' Me.Cursor = Cursors.Default
                    'BELEG = cRKSV.STORNO(BELEG, "Programmfehler")
                    ' MsgBox("Programmfehler bei der digitalen Signatur.")

                    Return False
                End If
                KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString)
            End If

            If KASSE.rksvDE_aktiv Then ' WENN für die Kasse die DEUTSCHLAND gilt
                Dim answer = ""

                '*Nullbelg-POS*
                Dim POS As New EABelegPositionen
                POS.Abfertigungsart = 10 '"Sonstiges"
                POS.Mandant = BELEG.Mandant
                POS.Niederlassung = BELEG.Niederlassung
                POS.Benutzer = BELEG.Benutzer
                POS.BelegDat = BELEG.BelegDat
                POS.BelegNr = BELEG.BelegNr
                POS.PreislistenPos = -1
                POS.LeistungsNr = 499
                POS.LeistungsBez = "NULLBELEG"
                POS.Leistungsbeschreibung = "NULLBELEG"
                POS.PreislistenNr = -1
                POS.PreistabellenNr = -1
                POS.Preis = 0
                POS.Anzahl = 1
                POS.Anzahlmultiplikator = 1
                POS.Betrag = 0
                POS.Preisbindung = 0
                '  POS.AbfertigungsNr = 000
                BELEG.POS.Add(POS)

                If Not cRKSV_DE.insertRKSV_DE(PERSONAL, BELEG, KASSE, RKSV_Beleg_Id, 0, QR_CodeString, LastJWS, TESTBUCHUNG, answer) Then 'Digitale Signierung und Erfassung in die RKSV-Datenbank mittels ITG-Service
                    If Not TESTBUCHUNG Then
                        KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summe * -1)
                        cRKSV.DELETE(BELEG, KASSE.rksv_firma)
                    End If
                    MsgBox("Programmfehler bei der digitalen Signatur." & vbNewLine & vbNewLine & answer, MsgBoxStyle.Critical)
                    ' Me.Cursor = Cursors.Default
                    'BELEG = cRKSV.STORNO(BELEG, "Programmfehler")
                    ' MsgBox("Programmfehler bei der digitalen Signatur.")

                    Return False
                End If
                KASSE.SET_LAST_QR_JWS(LastJWS, QR_CodeString)

                'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
                If KASSE.rksv_KassaGuid = "KASSE_01" Then
                    BELEG.rksv_jws = Nothing
                    BELEG.rksv_qr = Nothing
                End If
                'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

            End If

            'RKSV-Daten beim Beleg ergänzen:
            BELEG.rksv_jws = LastJWS
            BELEG.rksv_qr = QR_CodeString
            BELEG.rksv_BelegId = RKSV_Beleg_Id
            BELEG.rksv_id = KASSE.rksv_id
            BELEG.rksv_umsatz = summe
            BELEG.rksv_aktiv = (KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv)
            BELEG.SAVE()


            'printBeleg(BELEG, KASSE, PERSONAL, cboPrinter.SelectedItem.ToString) 'Beleg drucken


            If AUTODRUCK Then
                Dim pName = ""
                For Each sPrinter As String In System.Drawing.Printing.PrinterSettings.InstalledPrinters
                    If sPrinter = "AUTODRUCK_MAIL" Then pName = sPrinter : Exit For
                Next
                If pName = "" Then
                    Dim oPS As New System.Drawing.Printing.PrinterSettings
                    pName = oPS.PrinterName
                End If
                cRKSV.printKundenBeleg(BELEG, KASSE, PERSONAL, pName, False) 'Beleg drucken
            Else
                cRKSV.printKundenBeleg(BELEG, KASSE, PERSONAL, "", False) 'Beleg drucken
            End If

            Return True
            ' End If

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

    End Function


    Public Shared Function getCardSerialInReader(kasse_id As Integer, reader As String)
        Try
            Dim KASSE As New cRKSV_Kasse(kasse_id)
            Dim client As RKSVWcfClient = New RKSVWcfClient()
            client.Endpoint.Address = New System.ServiceModel.EndpointAddress(getRKSVLink(KASSE))
            client.Open()
            '   svcRKSV.DBUserCredentials m_credentials = new svcRKSV.DBUserCredentials();
            Dim credentials As New SDL.RKSVServer.DBUserCredentials

            credentials.Database = "RKSVWcfDB"
            credentials.Server = "AVISO\SQLEXPRESS"

            credentials.Username = "Admin"
            credentials.Password = "verag#2"
            ' credentials.CashboxID = kasse '"VERAG-SUB-KASSE-ZOLL"
            '    credentials.CompanyGUID = CompanyGUID ' "9119d9ae-f549-4a0f-a50f-0500ec7ca059"



            Return client.GetCardInReader(reader)
        Catch ex As Exception
            MsgBox("ERROR " & ex.Message & ex.StackTrace)
        End Try
        Return ""
    End Function


    Public Shared Function printFremdBeleg(BELEG As EABeleg, KASSE As cRKSV_Kasse, PERSONAL As cPersonal, KBEntry As cKassenbuch, KBEntryGB As cKassenbuch, printername As String) As Boolean
        Dim print As New GrapeCity.ActiveReports.Viewer.Win.Viewer
        print.Text = "Beleg"
        Dim rpt As New rptEABeleg
        'rpt.lblRgNr.Text = BELEG.rksv_BelegId '"12345 / TR"

        ' Dim QR As String = ""

        If (KASSE.rksv_aktiv Or KASSE.rksvDE_aktiv) And BELEG.rksv_BelegId > 0 Then
            If BELEG.rksv_qr Is Nothing OrElse BELEG.rksv_qr = "" Then
                If KASSE.rksv_KassaGuid <> "KASSE_01" Then
                    MsgBox("Fehler: QR-Code wurde nicht richtig erstellt!")
                End If
            Else
                Dim bmpBytes As Byte() = Convert.FromBase64String(BELEG.rksv_qr)
                Dim MS As New System.IO.MemoryStream(bmpBytes)
                Dim QR_Image = Image.FromStream(MS)
                rpt.QR.Image = QR_Image
            End If

        End If
        '  Dim bmpBytes As Byte() = Convert.FromBase64String(QR)
        '   Dim MS As New System.IO.MemoryStream(bmpBytes)
        '    Dim QR_Image = Image.FromStream(MS)
        '     rpt.QR.Image = QR_Image

        rpt.Label25.Visible = (BELEG.DruckDatumUhrzeit IsNot Nothing) 'KOPIE
        rpt.lblBuchungsdatum.Text = CDate(BELEG.BelegDat).ToShortDateString
        rpt.lblUhrzeit.Text = "" 'Now.ToShortTimeString
        rpt.lblBuchungstext.Text = KBEntry.Buchungstext 'cboKonto.Text
        rpt.lblBelegdatum.Text = CDate(KBEntry.BelegDat).ToShortDateString
        rpt.lblReferenz.Text = KBEntry.Referenz 'txtReferenz.Text
        rpt.lblKonto.Text = KBEntryGB.Konto 'cboKonto._value
        rpt.lblBetrag.Text = CDbl(BELEG.rksv_umsatz).ToString("C2")

        rpt.lblSachbearbeiter.Text = PERSONAL.Name
        rpt.lblKontoSB.Text = PERSONAL.KassenbuchNr
        rpt.lblRgNr.Text = BELEG.rksv_BelegId
        If BELEG.Belegart = 1 Then
            'Einnahme
            rpt.lblTitel.Text = "KASSE - EINGANG"
        Else
            rpt.lblTitel.Text = "KASSE - AUSGANG"
        End If

        If BELEG.storniert Then
            rpt.Label25.Text = "** STORNO **"
            rpt.Label25.Visible = True
            rpt.lblStorno.Visible = True
            rpt.lblStorno.Text = "STORNO" & vbNewLine & BELEG.Stornogrund

        End If
        If KASSE IsNot Nothing Then
            Select Case KASSE.rksv_bez
                Case "VERAG-SUB-KASSE-ZOLL"
                    'Default Werte:
                    'rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2 'Standart
                    rpt.lblFirma_Name.Text = "VERAG Spedition AG"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 100" & vbNewLine & "UID: ATU53187000 "
                Case "VERAG-CUSTOMSSERVICE-KASSE-ZOLL"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo_med
                    rpt.lblFirma_Name.Text = "VERAG Customs Service GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU68374109 "
                Case "ATILLA-SUB-KASSE-ZOLL"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.Atilla_big_med
                    rpt.lblFirma_Name.Text = "ATILLA Spedition GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU63158647 "
                Case "VERAG-GMBH-KASSE-ZOLL"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.Verag_Spedition_GMBH_Logo_med
                    rpt.lblFirma_Name.Text = "VERAG Spedition GmbH"
                    rpt.lblFirma_Details.Text = "D 94152 Neuhaus am Inn  |  Hartham 6" & vbNewLine & "UID: DE813570890 "
                Case "KASSE-VERWALTUNG"
                    'Default Werte:
                    '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                    rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                    rpt.lblFirma_Details.Text = " *** nur intern ***"
                Case "IMEX-KASSE-VERWALTUNG"
                    rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                    rpt.lblFirma_Details.Text = " *** nur intern ***"
                    rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                    rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
                Case "TEST-KASSE"
                    'Default Werte:
                    '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                    If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "IMEX" Then rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                    If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then rpt.picVERAG.Image = My.Resources.Atilla_big_med

                    rpt.lblFirma_Name.Text = "TEST-KASSE"
                    rpt.lblFirma_Details.Text = " *** nur intern ***"
                Case "IMEX-KASSE-SUB"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                    rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
                Case "FRONT-OFFICE-SUB-KASSE"
                    'Default Werte:
                    rpt.picVERAG.Image = My.Resources.FrontOfficeSUB
                    rpt.lblFirma_Name.Text = "Front-Office Suben eG"
                    rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU74813856 "
            End Select
        End If

        rpt.Run(False)

        If printername <> "" Then
            rpt.Document.Printer.PrinterName = printername
        Else
            Dim p As New PrintDialog
            If p.ShowDialog() = DialogResult.OK Then
                printername = p.PrinterSettings.PrinterName
            Else
                rpt.Dispose()
            End If
        End If

        If Not rpt.Document.Print(False, False) Then
            MsgBox("Problem beim Drucken.")
        End If
        If BELEG.DruckDatumUhrzeit Is Nothing Then
            BELEG.DruckDatumUhrzeit = Now
            BELEG.SAVE()
        End If
        rpt.Dispose()

        If False Then


            print.ViewType = GrapeCity.Viewer.Common.Model.ViewType.Continuous
            print.LoadDocument(rpt)
            'print = FormWindowState.Minimized
            'print.Visible = False
            ' print.Show()


            AddHandler print.LoadCompleted, Sub()
                                                If printername <> "" Then
                                                    print.Document.Printer.PrinterName = printername
                                                Else
                                                    Dim p As New PrintDialog
                                                    If p.ShowDialog() = DialogResult.OK Then
                                                        printername = p.PrinterSettings.PrinterName
                                                    Else
                                                        print.Dispose()
                                                        Exit Sub
                                                    End If
                                                End If
                                                If printername = "" Then print.Dispose() : Exit Sub
                                                print.Document.Printer.PrinterName = printername

                                                If Not print.Print(False, False) Then
                                                    MsgBox("Problem beim Drucken.")
                                                End If
                                                If BELEG.DruckDatumUhrzeit Is Nothing Then
                                                    BELEG.DruckDatumUhrzeit = Now
                                                    BELEG.SAVE()
                                                End If
                                                print.Dispose()
                                                '   print.Close()
                                            End Sub
        End If

        Return True

        '   Me.Cursor = Cursors.Default
    End Function


    Public Shared Sub printAESKey(KASSE As cRKSV_Kasse, printername As String)
        Dim print As New GrapeCity.ActiveReports.Viewer.Win.Viewer
        print.Text = "AES-Key"
        Dim rpt As New rptAESKey
        rpt.lblKASSE.Text = KASSE.rksv_bez
        rpt.lblDatum.Text = Now.ToString("dd.MM.yyyy") ' HH:mm")
        rpt.txtAES.Text = KASSE.rksv_AesKey ' HH:mm")

        Select Case KASSE.rksv_bez
            Case "VERAG-SUB-KASSE-ZOLL"
                'Default Werte:
                'rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2 'Standart
                rpt.lblFirma_Name.Text = "VERAG Spedition AG"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 100" & vbNewLine & "UID: ATU53187000 "
            Case "VERAG-CUSTOMSSERVICE-KASSE-ZOLL"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.Verag_Customs_Service_GMBH_Logo_med
                rpt.lblFirma_Name.Text = "VERAG Customs Service GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU68374109 "
            Case "ATILLA-SUB-KASSE-ZOLL"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.Atilla_big_med
                rpt.lblFirma_Name.Text = "ATILLA Spedition GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU63158647 "
            Case "VERAG-GMBH-KASSE-ZOLL"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.Verag_Spedition_GMBH_Logo_med
                rpt.lblFirma_Name.Text = "VERAG Spedition GmbH"
                rpt.lblFirma_Details.Text = "D 94152 Neuhaus am Inn  |  Hartham 6" & vbNewLine & "UID: DE813570890 "
            Case "KASSE-VERWALTUNG"
                'Default Werte:
                '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                rpt.lblFirma_Name.Text = "KASSE VERWALTUNG / BUCHHALTUNG"
                rpt.lblFirma_Details.Text = " *** nur intern ***"
            Case "IMEX-KASSE-VERWALTUNG"
                rpt.lblFirma_Name.Text = "KASSE VERWALTUNG"
                rpt.lblFirma_Details.Text = " *** nur intern ***"
                rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
            Case "TEST-KASSE"
                'Default Werte:
                '    rpt.picVERAG.Image = My.Resources.Verag_AG_Logo2
                If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "IMEX" Then rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then rpt.picVERAG.Image = My.Resources.Atilla_big_med

                rpt.lblFirma_Name.Text = "TEST-KASSE"
                rpt.lblFirma_Details.Text = " *** nur intern ***"
            Case "IMEX-KASSE-SUB"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.IMEX_LOGO_simple
                rpt.lblFirma_Name.Text = "IMEX Customs Service GmbH"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 15" & vbNewLine & "UID: ATU68490714 "
            Case "FRONT-OFFICE-SUB-KASSE"
                'Default Werte:
                rpt.picVERAG.Image = My.Resources.FrontOfficeSUB
                rpt.lblFirma_Name.Text = "Front-Office Suben eG"
                rpt.lblFirma_Details.Text = "A 4975 Suben  |  Suben 14" & vbNewLine & "UID: ATU74813856 "
        End Select

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


        AddHandler print.LoadCompleted, Sub()
                                            '  MsgBox("b" & printername)
                                            ' MsgBox(cboPrinter.SelectedItem.ToString)
                                            ' If cboPrinter.SelectedItem.ToString <> "" Then print.Document.Printer.PrinterName = cboPrinter.SelectedItem.ToString
                                            If printername <> "" Then
                                                print.Document.Printer.PrinterName = printername
                                            Else
                                                Dim p As New PrintDialog
                                                If p.ShowDialog() = DialogResult.OK Then
                                                    printername = p.PrinterSettings.PrinterName
                                                Else
                                                    print.Dispose()
                                                    Exit Sub
                                                End If
                                            End If
                                            If printername = "" Then print.Dispose() : Exit Sub
                                            print.Document.Printer.PrinterName = printername
                                            If Not print.Print(False, False) Then
                                                MsgBox("Problem beim Drucken.")
                                            End If
                                            print.Dispose()

                                        End Sub



    End Sub


    Shared Function GetGrenzstelle(avisoid) As String
        Try
            If avisoid IsNot Nothing AndAlso CInt(avisoid) > 0 Then
                Dim AVISO = (New VERAG_PROG_ALLGEMEIN.cAvisoDAL).LesenAviso(avisoid, "")

                If VERAG_PROG_ALLGEMEIN.cAllgemein.PARAMS.GET_PARAMETER_VALUE_BOOL("RPT_SND_Grenzstelle") Then
                    If AVISO.Zollstelle IsNot Nothing AndAlso AVISO.Zollstelle <> "" Then
                        Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
                        'Return "Grenze: " & SQL.getValueTxtBySql("SELECT basncd_dstnr +' - ' + [basncd_name]  FROM basncd WHERE basncd_dstnr='" & AVISO.Zollstelle & "' ", "ATLAS")
                        Return "Grenze: " & SQL.getValueTxtBySql("SELECT Code +' - ' + [Description] FROM tbl_DY_ZollDE_C0141_Zollstellen WHERE Code='" & AVISO.Zollstelle & "' AND  ((StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE())) ", "FMZOLL")

                    Else
                        Return "Grenze: " & AVISO.Grenzstelle
                    End If
                End If
            End If
        Catch ex As Exception
            Return ""
        End Try
        Return ""
    End Function
    Public Shared Function insertToSpedBuch(PERSONAL As cPersonal, PERSONAL_LG As cPersonal, BELEG As EABeleg, Optional AvisoID As Object = Nothing, Optional SendungsID As Object = Nothing, Optional barBetrag As Double = 0.0, Optional barBelegId As Integer = 0) As Boolean


        'Zuerst schaun, ob Einträge in der Tabelle tblEABelegposition vorhanden
        Dim dt As DataTable = SQL.loadDgvBySql("SELECT isnull(Abfertigungsart,10) as Abfertigungsart, Sum(isnull([Anzahl],isnull([TW1],0))*Anzahlmultiplikator) AS Abfertigungsanzahl, Sum(Betrag) AS Barzahlungsbetrag" &
                " FROM tblEABelegposition" &
                " WHERE Mandant = '" & BELEG.Mandant & "'" &
                " And Niederlassung = '" & BELEG.Niederlassung & "'" &
                " And Benutzer = " & BELEG.Benutzer & "" &
                " And BelegDat = '" & BELEG.BelegDat.ToShortDateString & "' " &
                " And BelegNr = " & BELEG.BelegNr & "" &
                " GROUP BY Abfertigungsart ", "FMZOLL")
        If dt Is Nothing OrElse dt.Rows.Count = 0 Then
            MsgBox("Fehler beim Eintrag ins Speditionsbuch!")
            Return False
        End If

        'Dann alte Einträge aus Spedbuch löschen
        SQL.doSQL("DELETE FROM Speditionsbuch WHERE FilialenNr=" & BELEG.FilialenNr & " AND AbfertigungsNr=" & BELEG.AbfertigungsNr & " ", "FMZOLL")

        Dim UnterNr As Integer = 0
        For Each r In dt.Rows
            Dim SPED As New VERAG_PROG_ALLGEMEIN.cSpeditionsbuch
            SPED.FilialenNr = BELEG.FilialenNr
            SPED.AbfertigungsNr = BELEG.AbfertigungsNr
            SPED.UnterNr = UnterNr
            SPED.Abfertigungsdatum = BELEG.BelegDat.ToShortDateString

            If PERSONAL.BLC = "R" Then
                SPED.ErfassungsNr = BELEG.Mandant & "/" & BELEG.Niederlassung & "/" & PERSONAL.Name & "/" & BELEG.BelegDat.ToShortDateString & "/" & BELEG.rksv_BelegId 'Benutzer.Column(3)
            End If
            SPED.Bar = True
            SPED.AvisUhrzeit = Now.ToShortTimeString
            SPED.Sachbearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME

            If PERSONAL_LG IsNot Nothing Then
                SPED.Personalnummer = PERSONAL_LG.ID
            Else
                SPED.Personalnummer = PERSONAL.ID
            End If
            SPED.Vermerk = BELEG.Fahrer

            Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
                Case "IMEX" : SPED.Bemerkungen = GetGrenzstelle(AvisoID)
            End Select

            SPED.LKW_Kennzeichen = BELEG.LKW_Kennzeichen
            SPED.Abfertigungsart = r("Abfertigungsart")

            SPED.KdAuftragsNr = BELEG.Auftraggeber_KdAuftragsnummer

            ' SPED.Abfertigungsart = Nz(r("Abfertigungsart"), 10) ' wenn Abfertigungsart Null dann 10 (Sonstiges)
            SPED.Abfertigungsanzahl = r("Abfertigungsanzahl")
            '  MsgBox(SQL.getValueTxtBySql("SELECT isnull(EpSbSgutKompl,0) FROM [Abfertigungsarten] WHERE [Abfertigungsart]=" & SPED.Abfertigungsart, "FMZOLL"))
            Dim varEpSbSgutKompl As Boolean = SQL.getValueTxtBySql("SELECT isnull(EpSbSgutKompl,0) FROM [Abfertigungsarten] WHERE [Abfertigungsart]=" & SPED.Abfertigungsart, "FMZOLL")
            'DLookup("[EpSbSgutKompl]", "Abfertigungsarten", "[Abfertigungsart] = " & !Abfertigungsart)

            If CBool(varEpSbSgutKompl) Then
                If BELEG.SgutKompl Is Nothing OrElse BELEG.SgutKompl = "" Then
                    If (MsgBox("Handelt es sich um Sammelgut?", vbYesNo, "Eingabeprüfung Sgut/Kompl")) = vbYes Then
                        SPED.SgutKompl = "S"
                    Else
                        SPED.SgutKompl = "K"
                    End If
                Else
                    SPED.SgutKompl = BELEG.SgutKompl
                End If
            Else
                SPED.SgutKompl = Nothing
            End If

            SPED.Zollsystem = "A"
            SPED.VermittlerKundenNr = If(BELEG.KundenNr > 0, BELEG.KundenNr, Nothing)
            SPED.Vermittler = BELEG.Ordnungsbegriff
            SPED.FrachtführerKundenNr = If(BELEG.FrachtführerKundenNr > 0, BELEG.FrachtführerKundenNr, Nothing)
            SPED.Frachtführer = BELEG.Frachtführer
            Dim AD = New VERAG_PROG_ALLGEMEIN.cAvisoDAL
            If AvisoID IsNot Nothing Then
                Dim aviso_tmp As VERAG_PROG_ALLGEMEIN.cAviso = AD.LesenAviso(AvisoID, "")
                If aviso_tmp.Grenzstelle IsNot Nothing AndAlso aviso_tmp.Grenzstelle <> "" Then SPED.Grenzstelle = aviso_tmp.Grenzstelle
            End If

            SPED.AvisoID = AvisoID
            If SendungsID IsNot Nothing Then SPED.SendungID = SendungsID
            Dim anz = SPED.Abfertigungsanzahl
            If SPED.Abfertigungsart Then
                SPED.AnzahlZA = IIf(SPED.Abfertigungsart = 1, anz, "0")
                SPED.AnzahlZAFremd = IIf(SPED.Abfertigungsart = 2, anz, "0")
                SPED.AnzahlZnV = IIf(SPED.Abfertigungsart = 3, anz, "0")
                SPED.AnzahlZnVFremd = IIf(SPED.Abfertigungsart = 4, anz, "0")
                SPED.AnzahlT1 = IIf(SPED.Abfertigungsart = 5, anz, "0")
                SPED.AnzahlT2 = IIf(SPED.Abfertigungsart = 6, anz, "0")
                SPED.AnzahlAE = IIf(SPED.Abfertigungsart = 7, anz, "0")
                SPED.AnzahlCarnetTIR = IIf(SPED.Abfertigungsart = 8, anz, "0")
                SPED.AnzahlBarvorlagen = IIf(SPED.Abfertigungsart = 9, anz, "0")
                SPED.AnzahlSonstiges = IIf(SPED.Abfertigungsart = 10, anz, "0")
                SPED.AnzahlGrenzgebühren = IIf(SPED.Abfertigungsart = 11, anz, "0")
            End If

            Select Case BELEG.Belegart
                Case 1  ' Einnahme
                    If PERSONAL.BLC = "R" Then
                        SPED.Barzahlungsbetrag = r("Barzahlungsbetrag")
                    Else
                        SPED.Barzahlungsbetrag = 0.0
                    End If
                Case 2  ' Ausgabe
                    SPED.Barzahlungsbetrag = barBetrag
                    If PERSONAL.BLC = "R" Then
                        SPED.ErfassungsNr = SPED.ErfassungsNr & "/" & FormatCurrency(r("Barzahlungsbetrag"))
                    End If
            End Select
            ' .Update()
            '  rst2.MoveNext()
            ' intUnterNr = intUnterNr + 1

            SPED.SAVE()

            UnterNr += 1
        Next
        Return True
    End Function

    Public Shared Function SpedBuchExists(BELEG As EABeleg) As Boolean
        Return (CInt(SQL.getValueTxtBySql("SELECT count(*) FROM Speditionsbuch WHERE FilialenNr=" & BELEG.FilialenNr & " AND AbfertigungsNr=" & BELEG.AbfertigungsNr & " ", "FMZOLL")) > 0)
    End Function
    Public Shared Function SpedBuchExists(FilialenNr As Integer, AbfertigungsNr As Integer) As Boolean
        Return (CInt(SQL.getValueTxtBySql("SELECT count(*) FROM Speditionsbuch WHERE FilialenNr=" & FilialenNr & " AND AbfertigungsNr=" & AbfertigungsNr & " ", "FMZOLL")) > 0)
    End Function

    Public Shared Function getNewBelegNr(BELEG As EABeleg, Firma As String) As Integer
        Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma))
        Return GJ.INCREASE_BELEG()
    End Function
    Public Shared Function getNewJournalNr(BELEG As EABeleg, Firma As String) As Integer
        Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma))
        Return GJ.INCREASE_JOURNAL()
    End Function

    Public Shared Function insertKB(PERSONAL As cPersonal, BELEG As EABeleg, RKSV_id As Integer, RKSV_Beleg_Id As Integer, RKSV_aktiv As Integer, ByRef JournalNr As Integer, Firma As String, POSFIBU As Integer, ByRef BelegNrFIBU As String, Optional Finanzwege As String = "Bar", Optional BelegSofortInFIBUverbuchten As Boolean = False)
        Try
            If BELEG.POS.Count = 0 Then
                MsgBox("Keine Positionen gefunden")
                cRKSV.STORNO(BELEG, "Programmfehler: Keine Beleg-Pos. gefunden.", Firma)
                Return False
            End If
            ' Belegnr!!!!!!!!!!!!!!!!!!!!!!!!!!!!

            '   Dim GJ = New cGeschaeftsjahr(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ(BELEG.BelegDat))

            BELEG.BelegNr = getNewBelegNr(BELEG, Firma) ' GJ.INCREASE_BELEG() 'Vergabe der Belegnummer'
            ' Beleg noch nicht gespeichert.... BELEG.DEL_POS_List()' Positionen löschen, da BelegNr Neu vergeben

            For Each p In BELEG.POS
                p.BelegNr = BELEG.BelegNr
            Next
            BELEG.SAVE()
            'BELEG.SAVE_POS_List()
            Dim KBEntry_List As New List(Of cKassenbuch)
            Dim KBEntryGB_List As New List(Of cKassenbuch)
            Dim KBEntryST_List As New List(Of cKassenbuch)

            If BELEG.POS.Count > 0 Then
                ' Dim tb As DataRow = tbKBEintrag.Rows(0)
                If Not BELEG.gebucht Then 'CBool(tbKBEintrag.Rows(0)("gebucht")) Then 'wenn nicht bereits gebucht
                    Dim dtBetraege = SQL.loadDgvBySql(" SELECT  isnull(Sum(tblEABelegposition.Betrag),0) AS Nettobetrag,  " &
                                                      "       isnull(Sum(CASE WHEN [Steuerpflichtig]=1 THEN [Betrag] ELSE 0 END),0) AS SteuerpflichtigerBetrag, " &
                                                      "       isnull(Sum(cast((CASE WHEN [Steuerpflichtig]=1 THEN [Betrag] ELSE 0 END)* [Steuersatz] as decimal(8,2))),0) AS SteuerBetrag, " &
                                                      "       isnull(Sum(tblEABelegposition.Betrag+cast((CASE WHEN [Steuerpflichtig]=1 THEN [Betrag] ELSE 0 END)* [Steuersatz] as decimal(8,2))),0) AS Bruttobetrag " &
                                                    " FROM tblEABelegnummer INNER JOIN tblSteuersätze ON tblEABelegnummer.Steuerschlüssel = tblSteuersätze.Nr INNER JOIN tblEABelegposition INNER JOIN Leistungen ON tblEABelegposition.LeistungsNr = Leistungen.LeistungsNr ON tblEABelegnummer.Mandant = tblEABelegposition.Mandant AND tblEABelegnummer.Niederlassung = tblEABelegposition.Niederlassung AND tblEABelegnummer.Benutzer = tblEABelegposition.Benutzer AND tblEABelegnummer.BelegDat = tblEABelegposition.BelegDat AND tblEABelegnummer.BelegNr = tblEABelegposition.BelegNr " &
                                                   "  WHERE tblEABelegposition.Mandant='" & BELEG.Mandant & "' AND tblEABelegposition.Niederlassung='" & BELEG.Niederlassung & "' AND tblEABelegposition.Benutzer='" & BELEG.Benutzer & "' AND tblEABelegposition.BelegDat='" & BELEG.BelegDat.ToShortDateString & "' AND tblEABelegposition.BelegNr='" & BELEG.BelegNr & "'", "FMZOLL")

                    If dtBetraege.Rows.Count = 0 Then
                        MsgBox("ERROR: Beleg - Eintrag nicht gefunden. Abbruch!")
                        cRKSV.STORNO(BELEG, "Programmfehler: Beleg - Eintrag nicht gefunden.", Firma)

                        Return False
                    End If

                    Dim Bruttobetrag As Double = dtBetraege.Rows(0)("Bruttobetrag")
                    Dim Nettobetrag As Double = dtBetraege.Rows(0)("Nettobetrag")
                    Dim SteuerBetrag As Double = dtBetraege.Rows(0)("SteuerBetrag")

                    '################
                    ' EINTRAG: Kassenbuch
                    '################
                    Dim KBEntry As New cKassenbuch(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma), JournalNr)
                    KBEntry.JournalNr = getNewJournalNr(BELEG, Firma) ' GJ.INCREASE_JOURNAL() 'Vergabe der Journalnummer'
                    '    KBEntry.JournalNr = fktJournalNr(rst1!Mandant, rst1!Niederlassung, rst1!Benutzer, rst1!BelegDat)
                    KBEntry.Konto = PERSONAL.KassenbuchNr
                    If BELEG.FilialenNr = -1 Or BELEG.AbfertigungsNr = -1 Then
                        If If(BELEG.LKW_Id, -1) > 0 Then
                            KBEntry.Buchungstext = Trim("LKW-Id: " & BELEG.LKW_Id)
                        Else
                            KBEntry.Buchungstext = "-"
                        End If
                    Else
                        KBEntry.Buchungstext = Trim("Pos. " & BELEG.FilialenNr & "/" & Format(BELEG.AbfertigungsNr, "00000000"))
                    End If

                    KBEntry.Buchungsdatum = Now.ToShortDateString
                    KBEntry.BelegDat = BELEG.BelegDat.ToShortDateString
                    KBEntry.BelegNr = BELEG.BelegNr
                    KBEntry.Belegart = BELEG.Belegart
                    If BELEG.Belegart = 1 Then
                        KBEntry.Soll = Bruttobetrag
                    ElseIf BELEG.Belegart = 2 Then
                        KBEntry.Haben = Bruttobetrag
                    End If
                    KBEntry.rksv_id = RKSV_id
                    KBEntry.rksv_aktiv = RKSV_aktiv
                    KBEntry.rksv_BelegId = RKSV_Beleg_Id

                    KBEntry.Belegverbuchung = True
                    KBEntry.gebucht = True
                    KBEntry.Finanzwege = Finanzwege
                    KBEntry.durchfuehrender_Benutzer = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID

                    If Not KBEntry.INSERT() Then
                        Return False
                    Else
                        KBEntry_List.Add(KBEntry)
                    End If

                    '################
                    ' EINTRAG: Gegenbuchung
                    '################

                    Dim curSteuerbetrag As Double = 0
                    For Each p In BELEG.POS
                        Dim dtBetraegeGB = SQL.loadDgvBySql(" SELECT " & getGl_account(KBEntry.rksv_id) & " AS Gegenkonto, isnull(tblEABelegposition.Betrag,0) AS Nettobetrag, " &
                                                                " isnull((cast((CASE WHEN [Steuerpflichtig]=1 THEN [Betrag] ELSE 0 END)* [Steuersatz] as decimal(8,2))),0)  AS Steuerbetrag " &
                                                            " FROM tblSteuersätze INNER JOIN tblEABelegnummer ON tblSteuersätze.Nr = tblEABelegnummer.Steuerschlüssel INNER JOIN tblEABelegposition INNER JOIN Leistungen ON tblEABelegposition.LeistungsNr = Leistungen.LeistungsNr ON tblEABelegnummer.Mandant = tblEABelegposition.Mandant AND tblEABelegnummer.Niederlassung = tblEABelegposition.Niederlassung AND tblEABelegnummer.Benutzer = tblEABelegposition.Benutzer AND tblEABelegnummer.BelegDat = tblEABelegposition.BelegDat AND tblEABelegnummer.BelegNr = tblEABelegposition.BelegNr " &
                                                            " WHERE tblEABelegposition.Mandant='" & BELEG.Mandant & "' AND tblEABelegposition.Niederlassung='" & BELEG.Niederlassung & "' AND tblEABelegposition.Benutzer='" & BELEG.Benutzer & "' AND tblEABelegposition.BelegDat='" & BELEG.BelegDat.ToShortDateString & "' AND tblEABelegposition.BelegNr='" & BELEG.BelegNr & "' AND tblEABelegposition.LeistungsNr=" & p.LeistungsNr & " AND tblEABelegposition.PreislistenPos='" & p.PreislistenPos & "' " &
                                                            " AND tblEABelegposition.FilialenNr='" & p.FilialenNr & "' AND tblEABelegposition.AbfertigungsNr='" & p.AbfertigungsNr & "'", "FMZOLL")
                        If dtBetraegeGB.Rows.Count = 0 Then
                            MsgBox("ERROR: Beleg-Position - Eintrag nicht gefunden. Abbruch!")
                            cRKSV.STORNO(BELEG, "Programmfehler: Beleg - Eintrag nicht gefunden.", Firma)

                            Return False
                        End If
                        If Not IsNumeric(dtBetraegeGB.Rows(0)("Gegenkonto")) OrElse dtBetraegeGB.Rows(0)("Gegenkonto") <= 0 Then
                            MsgBox("ERROR: Gegenkonto nicht vorhanden. Abbruch!")
                            cRKSV.STORNO(BELEG, "Programmfehler: Gegenkonto nicht vorhanden.", Firma)
                            Return False
                        End If

                        Dim KBEntryGB As New cKassenbuch(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma), JournalNr)
                        KBEntryGB.JournalNr = getNewJournalNr(BELEG, Firma) 'GJ.INCREASE_JOURNAL() 'Vergabe der Journalnummer'
                        KBEntryGB.Konto = dtBetraegeGB.Rows(0)("Gegenkonto")
                        KBEntryGB.Buchungstext = p.LeistungsBez
                        KBEntryGB.Buchungsdatum = Now.ToShortDateString
                        KBEntryGB.BelegDat = p.BelegDat.ToShortDateString
                        KBEntryGB.Steuer = IIf(IsNumeric(BELEG.Steuerschlüssel) AndAlso BELEG.Steuerschlüssel > 0, BELEG.Steuerschlüssel, 0)
                        KBEntryGB.BelegNr = BELEG.BelegNr
                        KBEntryGB.Belegart = BELEG.Belegart
                        If BELEG.Belegart = 1 Then
                            KBEntryGB.Haben = dtBetraegeGB.Rows(0)("Nettobetrag")
                        ElseIf BELEG.Belegart = 2 Then
                            KBEntryGB.Soll = dtBetraegeGB.Rows(0)("Nettobetrag")
                        End If

                        KBEntryGB.Steuerbetrag = dtBetraegeGB.Rows(0)("SteuerBetrag")
                        curSteuerbetrag = curSteuerbetrag + dtBetraegeGB.Rows(0)("SteuerBetrag")
                        KBEntryGB.rksv_id = RKSV_id
                        KBEntryGB.rksv_aktiv = RKSV_aktiv
                        KBEntryGB.rksv_BelegId = RKSV_Beleg_Id

                        KBEntryGB.Belegverbuchung = True
                        KBEntryGB.gebucht = True
                        KBEntryGB.Finanzwege = Finanzwege
                        KBEntryGB.durchfuehrender_Benutzer = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID

                        If Not KBEntryGB.INSERT() Then
                            Return False
                        Else
                            KBEntryGB_List.Add(KBEntryGB)
                        End If
                    Next

                    '################
                    ' EINTRAG: Steuerbuchung
                    '################

                    If IsNumeric(BELEG.Steuerschlüssel) AndAlso BELEG.Steuerschlüssel > 0 And SteuerBetrag - curSteuerbetrag <> 0 Then
                        Dim KBEntryST As New cKassenbuch(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma), JournalNr)

                        KBEntryST.JournalNr = getNewJournalNr(BELEG, Firma) 'GJ.INCREASE_JOURNAL() 'Vergabe der Journalnummer'
                        KBEntryST.Konto = 8490
                        KBEntryST.Buchungstext = "Rundungsdifferenz in Steuer"
                        KBEntryST.Buchungsdatum = Now.ToShortDateString
                        KBEntryST.BelegDat = BELEG.BelegDat.ToShortDateString
                        KBEntryST.Steuer = IIf(IsNumeric(BELEG.Steuerschlüssel) AndAlso BELEG.Steuerschlüssel > 0, BELEG.Steuerschlüssel, 0)
                        KBEntryST.BelegNr = BELEG.BelegNr
                        KBEntryST.Belegart = BELEG.Belegart
                        If KBEntryST.Belegart = 1 Then
                            KBEntryST.Haben = SteuerBetrag - curSteuerbetrag
                        ElseIf KBEntryST.Belegart = 2 Then
                            KBEntryST.Soll = SteuerBetrag - curSteuerbetrag
                        End If
                        KBEntryST.rksv_id = RKSV_id
                        KBEntryST.rksv_aktiv = RKSV_aktiv
                        KBEntryST.rksv_BelegId = RKSV_Beleg_Id

                        KBEntryST.Belegverbuchung = True
                        KBEntryST.gebucht = True
                        KBEntryST.durchfuehrender_Benutzer = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID

                        If Not KBEntryST.INSERT() Then
                            Return False
                        Else
                            KBEntryST_List.Add(KBEntryST)
                        End If

                    End If


                    '################
                    ' EINTRAG: Umbuchung bei EC-Zahlung
                    '################
                    If Finanzwege = "EC" Then
                        Dim BelegNrEC = -1

                        For i = 0 To 1

                            Dim KBEntryEC As New cKassenbuch(BELEG.Mandant, BELEG.Niederlassung, BELEG.Benutzer, cRKSV.getGJ_FIRMA(BELEG.BelegDat, Firma), JournalNr)
                            KBEntryEC.JournalNr = getNewJournalNr(BELEG, Firma)
                            If i = 0 Then

                                KBEntryEC.Konto = POSFIBU
                                BelegNrEC = getNewBelegNr(BELEG, Firma) '& KBEntryEC.Belegart 'zur Generierung von eigenem Buchungssatz
                            Else
                                KBEntryEC.Konto = PERSONAL.KassenbuchNr
                            End If

                            Dim Buchungstext As String = "Umb.BK / KASSA"
                            If BELEG.ECZahlungsNr IsNot Nothing AndAlso BELEG.ECZahlungsNr <> "" Then
                                Buchungstext &= " " & BELEG.ECZahlungsNr
                            End If

                            KBEntryEC.Buchungstext = Buchungstext

                            KBEntryEC.Buchungsdatum = Now.ToShortDateString
                            KBEntryEC.BelegDat = BELEG.BelegDat.ToShortDateString
                            KBEntryEC.Belegart = 3
                            KBEntryEC.BelegNr = BelegNrEC
                            If BELEG.Belegart = 1 Then
                                If i = 0 Then
                                    KBEntryEC.Soll = Bruttobetrag
                                Else
                                    KBEntryEC.Haben = Bruttobetrag
                                End If

                            ElseIf BELEG.Belegart = 2 Then
                                If i = 0 Then
                                    KBEntryEC.Haben = Bruttobetrag
                                Else
                                    KBEntryEC.Soll = Bruttobetrag
                                End If

                            End If
                            KBEntryEC.rksv_id = RKSV_id
                            KBEntryEC.rksv_aktiv = RKSV_aktiv
                            KBEntryEC.rksv_BelegId = RKSV_Beleg_Id

                            KBEntryEC.Belegverbuchung = True
                            KBEntryEC.gebucht = True
                            KBEntryEC.Finanzwege = Finanzwege
                            KBEntryEC.durchfuehrender_Benutzer = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID

                            If Not KBEntryEC.INSERT() Then
                                Return False
                            End If

                        Next
                    End If

                    '################
                    ' DIREKTVERBUCHUNG SYSKA -> ev. Fehleranfällig, weil hier direkt in eine Fremddatenbank geschrieben wird ohne Plausibilitätsprüfen bzw. Kenntnisse der internen Prüfungsstrukturen!!!!! 
                    '################

                    If BelegSofortInFIBUverbuchten AndAlso (BELEG.Beleg_TYP = "L" Or BELEG.Beleg_TYP = "K") Then
                        CreateSyskaBuchung(RKSV_id, BELEG, KBEntry_List, KBEntryGB_List, KBEntryST_List, IIf(BELEG.Beleg_TYP = "L", "AUSZAHLUNG", "EINZAHLUNG"), BelegNrFIBU)
                    Else

                    End If

                    BELEG.gebucht = True
                    BELEG.SAVE()

                End If
            End If

            Return True

        Catch ex As Exception
            MsgBox("ERROR: " & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
            cRKSV.STORNO(BELEG, "Programmfehler!", Firma)

            Return False
        End Try
    End Function


    Public Shared Function getGl_account(rksv_id)
        If rksv_id = 1 Then Return "Leistungen.Gl_account" ' VERAG-Kasse bei IMEX
        Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
            Case "IMEX" : Return "Leistungen.IMEX_Gl_account"
            Case Else : Return "Leistungen.Gl_account"
        End Select
    End Function
    Private Shared Sub periodenBuchungen(periode As Integer, konto As Integer, Mandant As String, Jahr As Integer, Sollsumme As Double, HabenSumme As Double)

        If periode > 0 AndAlso periode < 13 Then

            Dim periodenSoll_SQL As String = "SELECT [FIBU2].dbo.fibu_periodensaldo.dec_soll_" & periode & " From [FIBU2].dbo.fibu_periodensaldo Where [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_periodensaldo.si_jahr = " & Jahr & " And [FIBU2].dbo.fibu_periodensaldo.i_konto = " & konto
            Dim periodenHaben_SQL As String = "SELECT [FIBU2].dbo.fibu_periodensaldo.dec_haben_" & periode & " From [FIBU2].dbo.fibu_periodensaldo Where [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_periodensaldo.si_jahr = " & Jahr & " And [FIBU2].dbo.fibu_periodensaldo.i_konto = " & konto

            Dim periodenSoll = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList(periodenSoll_SQL, "FIBU")
            Dim periodenHaben = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList(periodenHaben_SQL, "FIBU")

            Dim periodenSoll_DBl As Double = 0
            Dim periodenHaben_DBl As Double = 0

            If periodenSoll <> "" AndAlso IsNumeric(periodenSoll) Then
                periodenSoll_DBl = CDbl(periodenSoll)
            End If

            If periodenHaben <> "" AndAlso IsNumeric(periodenHaben) Then
                periodenHaben_DBl = CDbl(periodenHaben)
            End If

            periodenSoll_DBl += Sollsumme
            periodenHaben_DBl += HabenSumme

            Dim SQL_Update = "UPDATE [FIBU2].dbo.fibu_periodensaldo SET 
            [FIBU2].dbo.fibu_periodensaldo.dec_soll_" & periode & " = " & periodenSoll_DBl & ", 
            [FIBU2].dbo.fibu_periodensaldo.dec_haben_" & periode & " = " & periodenHaben_DBl & ", 
            [FIBU2].dbo.fibu_periodensaldo.eur_soll_" & periode & " = " & periodenSoll_DBl & ", 
            [FIBU2].dbo.fibu_periodensaldo.eur_haben_" & periode & " = " & periodenHaben_DBl & " 
            WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = " & Mandant & "
            And [FIBU2].dbo.fibu_periodensaldo.si_jahr = " & Jahr & " 
            And [FIBU2].dbo.fibu_periodensaldo.i_konto = " & konto

            Dim updated As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Update, "FIBU")

            If konto = 2000 Then
                Dim SQL_Update_2000 = "UPDATE [FIBU2].dbo.fibu_periodensaldodk SET  
            [FIBU2].dbo.fibu_periodensaldodk.dec_soll_" & periode & " = " & periodenSoll_DBl & ", 
            [FIBU2].dbo.fibu_periodensaldodk.dec_haben_" & periode & " = " & periodenHaben_DBl & ", 
            [FIBU2].dbo.fibu_periodensaldodk.eur_soll_" & periode & " = " & periodenSoll_DBl & ", 
            [FIBU2].dbo.fibu_periodensaldodk.eur_haben_" & periode & " = " & periodenHaben_DBl & " 
            WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = " & Mandant & "
            And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = " & Jahr & " 
            And [FIBU2].dbo.fibu_periodensaldodk.i_konto = " & konto

                Dim updated_2000 As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Update_2000, "FIBU")

            End If

        End If

    End Sub

    Private Shared Sub getDEBDaten(ByRef Mandant As String, ByRef DebKonto As Integer, ByRef c_sprache As String, ByRef c_ustidnr As String, ByRef c_zahlziel As String, ByRef si_tage As Integer, ByRef dec_skonto As Integer, ByRef si_ntage As Integer, ByRef SkontoDatum As Date, ByRef Nettodatum As Date)

        Dim dtKontoinfo As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT isnull(c_sprache,'DE') as c_sprache ,isnull(c_ustidnr, '') as c_ustidnr , isnull(c_zahlziel, '0') as c_zahlziel FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_konto = " & DebKonto & " And [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant, "FIBU")

        If dtKontoinfo.Rows.Count = 1 Then
            c_sprache = IIf(IsDBNull(dtKontoinfo.Rows(0).Item("c_sprache")), "DE", dtKontoinfo.Rows(0).Item("c_sprache"))
            c_ustidnr = IIf(IsDBNull(dtKontoinfo.Rows(0).Item("c_ustidnr")), "", dtKontoinfo.Rows(0).Item("c_ustidnr"))
            c_zahlziel = IIf(IsDBNull(dtKontoinfo.Rows(0).Item("c_zahlziel")), "", dtKontoinfo.Rows(0).Item("c_zahlziel"))
        End If

        Dim dt_skontoInfo As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("Select isnull(si_tage,0) as si_tage , isnull(dec_skonto, 0) as dec_skonto , isnull(si_ntage, 0) as si_ntage  FROM [FIBU2].dbo.fibu_zahlziel WHERE [FIBU2].dbo.fibu_zahlziel.i_firm_refid = " & Mandant & "  And [FIBU2].dbo.fibu_zahlziel.c_zahlziel = '" & c_zahlziel & "'", "FIBU")

        If dt_skontoInfo.Rows.Count = 1 Then
            si_tage = IIf(IsDBNull(dt_skontoInfo.Rows(0).Item("si_tage")), 0, CInt(dt_skontoInfo.Rows(0).Item("si_tage")))
            dec_skonto = IIf(IsDBNull(dt_skontoInfo.Rows(0).Item("dec_skonto")), 0, CInt(dt_skontoInfo.Rows(0).Item("dec_skonto")))
            si_ntage = IIf(IsDBNull(dt_skontoInfo.Rows(0).Item("si_ntage")), 0, CInt(dt_skontoInfo.Rows(0).Item("si_ntage")))
        End If

        SkontoDatum = SkontoDatum.AddDays(si_tage) 'SET @Skontodatum = DATEADD(DAY, @Skontotage, @gDatumKurz) 
        Nettodatum = Nettodatum.AddDays(si_ntage) 'SET @Nettodatum = DATEADD(DAY, @Nettotage, @gDatumKurz) 

    End Sub






    Private Shared Function checkifgebucht(mandant As Integer, belegnrtext As String, PosText As String) As Boolean

        Dim sql = "SELECT COUNT(fbz.i_beleg_refid) " &
          "FROM [FIBU2].dbo.fibu_belegzeile AS fbz " &
          "WHERE fbz.i_firm_refid = " & mandant &
          " AND fbz.c_urbelegid = '" & belegnrtext & "'" &
          " AND fbz.c_buchtext LIKE '%" & PosText.Replace("'", "''") & "%'"

        Dim cntTxt = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList(sql, "FIBU", , "0")

        Dim cnt As Integer = 0
        If Integer.TryParse(cntTxt, cnt) AndAlso cnt >= 3 Then
            Return True
        Else
            Return False
        End If

    End Function

    Private Shared Function checkifSaldo(mandant As Integer, Jahr As Integer, kontoNr As Integer) As Boolean


        Dim sql = "Select COUNT([FIBU2].dbo.fibu_periodensaldo.i_konto) FROM [FIBU2].dbo.fibu_periodensaldo WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = " & mandant & " And [FIBU2].dbo.fibu_periodensaldo.si_jahr = " & Jahr & "  And [FIBU2].dbo.fibu_periodensaldo.i_konto = " & kontoNr & ""

        Dim cntTxt = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList(sql, "FIBU", , "0")

        Dim cnt As Integer = 0
        If Integer.TryParse(cntTxt, cnt) AndAlso cnt > 0 Then
            Return True
        Else
            Return False
        End If

    End Function


    Public Shared Property DefaultMandant As Integer = IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, 9, 7)
    Public Shared Property DefaultKassenkonto As Integer = 2700

    Public Shared Function CreateSyskaBuchung(RKSV_id As Integer, beleg As EABeleg, KBEntry_list As List(Of cKassenbuch), KBEntryGB_list As List(Of cKassenbuch), KBEntryST_list As List(Of cKassenbuch), typ As String, ByRef BelegUID As String) As Boolean


        If beleg Is Nothing Then Throw New ArgumentNullException(NameOf(beleg))
        If Not (beleg.Beleg_TYP = "L" Or beleg.Beleg_TYP = "K") Then
            Return False
        End If

        If DefaultMandant = 9 Then
            MsgBox("ACHTUNG, Daten werden in Mandant " & DefaultMandant & " eingespielt -> " & IIf(DefaultMandant = 9, "TEST-MANDANT!", "PRODUKTIV-MANDANT!"))
        End If

        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL()

        Dim mandant = DefaultMandant
        Dim kassenkonto = DefaultKassenkonto
        Dim bestandskonto As Integer = 0

        Dim jahr As Integer = Now.Year
        Dim periode As Integer = Now.Month
        Dim rel_periode As Integer = Now.Month - 1

        If rel_periode <= 0 Then
            rel_periode += 12
        End If

        If rel_periode > periode Then
            'jahr -= 1 warum nochmals???????
        End If

        Dim betrag As Decimal = SumBelegPositionen(beleg)

        If betrag = 0 Then Return False


        Dim ForderungktoTxt As String = sql.getValueTxtBySqlVarList("SELECT i_fordkto FROM [FIBU2].dbo.fibu_konto WHERE i_konto = " & SafeIntToSql(beleg.KundenNr) & " AND i_firm_refid = " & SafeIntToSql(mandant), "FIBU",, "2000")
        Dim forderungskonto As Integer = SafeCIntDef(ForderungktoTxt, 2000)
        Dim dtKonten As DataTable = BuildVerbuchungskonten(KBEntryGB_list, beleg, kassenkonto, forderungskonto, bestandskonto)

        ' 5) build booking text (and trim to 48 chars with remainder stored separately)
        Dim buchungstextFull As String = (If(betrag < 0, "STORNO ", "")) & SafeString(beleg.FilialenNr) & "/" & SafeString(beleg.AbfertigungsNr) & "_" & SafeString(beleg.LKW_Kennzeichen) & "_" & SafeString(beleg.Frachtführer) & "_" & SafeString(beleg.Fahrer) & "_" & SafeString(beleg.Passnummer)
        Dim buchungstext As String
        Dim buchungstextBemerkung As String
        SplitBuchungstext(buchungstextFull, 48, buchungstext, buchungstextBemerkung)

        ' 6) create Belegnummer / Protokoll / Stapel logic (keine Duplikate)
        Dim stapelRefId As Integer = GetStapelRefId(sql, mandant)
        Dim lfdNr As Integer = GetNextStapelLfdNr(sql, stapelRefId, mandant)
        Dim protokollId As String = BuildProtokollId(stapelRefId, lfdNr, jahr, periode)

        ' 7) create Belegkopf
        Dim i_beleg_refid As Integer = CInt(sql.getValueTxtBySqlVarList(
            "SELECT i_nummer_refid + 1 FROM [FIBU2].dbo.fibu_nummern WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND c_nummernart LIKE 'Buchungsnummer'",
            "FIBU",, "0"))

        If String.IsNullOrWhiteSpace(i_beleg_refid) Then
            Throw New InvalidOperationException("Kann keine Belegnummer erzeugen.")
        End If

        If betrag <> 0 Then
            sql.doSQL("UPDATE [FIBU2].dbo.fibu_nummern SET i_nummer_refid = " & SafeIntToSql(i_beleg_refid) & " WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND c_nummernart LIKE 'Buchungsnummer'", "FIBU")
        End If

        'eigene Ermittlung der Belegnummer erforderlich!!!!!

        Dim FIBU_YEAR = jahr
        Dim BelegNrUID = "BR"
        'If periode = 1 Then FIBU_YEAR = FIBU_YEAR - 1
        BelegNrUID &= FIBU_YEAR.ToString.Substring(2, 2)
        BelegNrUID &= i_beleg_refid.ToString("D5")
        BelegUID = BelegNrUID

        'insert perioden-salden!!


        For Each Konten In dtKonten.Rows

            Dim kontoNr As Integer = CInt(Konten("Konto"))

            If Not checkifSaldo(mandant, FIBU_YEAR, kontoNr) Then
                Dim aktellerSaldo As String = sql.getValueTxtBySqlVarList("Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & SafeIntToSql(mandant) & " And [FIBU2].dbo.fibu_konto.i_konto = " & kontoNr & " ", "FIBU",, "0")
                If aktellerSaldo <> "" AndAlso IsNumeric(aktellerSaldo) Then
                    InsertFibuPeriodensaldo(sql, mandant, jahr, kontoNr, CDbl(aktellerSaldo))
                End If
            End If

        Next



        InsertBelegskopf_new(sql, mandant, jahr, periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), 1, buchungstext, CType(betrag, Double), "EUR", Now(), VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME, protokollId, BelegNrUID)

        ' 8) insert belegzeilen depending on type
        Dim zsZeilenNr As Integer = 0

        If typ = "EINZAHLUNG" Then
            If betrag <> 0 Then
                ' 1) Kassa (Soll)
                zsZeilenNr += 1
                Dim buchungsbetrag1 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, kassenkonto, "Soll", buchungsbetrag1)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag1, Double), "EUR", zsZeilenNr, "KO", kassenkonto, beleg.KundenNr, "S", BelegNrUID)

                ' 2) Debitor (Haben)
                zsZeilenNr += 1
                Dim buchungsbetrag2 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, beleg.KundenNr, "Haben", buchungsbetrag2)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag2, Double), "EUR", zsZeilenNr, "DE", beleg.KundenNr, kassenkonto, "H", BelegNrUID)

                ' 3) Forderung (Haben)
                zsZeilenNr += 1
                Dim buchungsbetrag3 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, forderungskonto, "Haben", buchungsbetrag3)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag3, Double), "EUR", zsZeilenNr, "DB", forderungskonto, kassenkonto, "H", BelegNrUID)
            End If
        ElseIf typ = "AUSZAHLUNG" Then
            If betrag <> 0 Then
                ' sequence for Auszahlung - signs and accounts handled via buchungsbetrag variables
                ' 1) Bestandskonto (Soll) = -betrag (outflow)
                zsZeilenNr += 1
                Dim buchungsbetrag1 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, bestandskonto, "Soll", buchungsbetrag1)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag1, Double), "EUR", zsZeilenNr, "KO", bestandskonto, 0, "S", BelegNrUID)

                ' 2) Kassa (Haben) = +betrag (cash out)
                zsZeilenNr += 1
                Dim buchungsbetrag2 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, kassenkonto, "Haben", buchungsbetrag2)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag2, Double), "EUR", zsZeilenNr, "KO", kassenkonto, 0, "H", BelegNrUID)

                ' 3) Debitor (Soll)
                zsZeilenNr += 1
                Dim buchungsbetrag3 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, beleg.KundenNr, "Soll", buchungsbetrag3)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag3, Double), "EUR", zsZeilenNr, "DE", beleg.KundenNr, 0, "S", BelegNrUID)

                ' 4) Forderung (Soll)
                zsZeilenNr += 1
                Dim buchungsbetrag4 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, forderungskonto, "Soll", buchungsbetrag4)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag4, Double), "EUR", zsZeilenNr, "DB", forderungskonto, 0, "S", BelegNrUID)

                ' 5) Bestandskonto (Haben)
                zsZeilenNr += 1
                Dim buchungsbetrag5 As Decimal = betrag
                UpdateDtKontenAmount(dtKonten, bestandskonto, "Haben", buchungsbetrag5)
                InsertBelegszeile_new(sql, mandant, jahr, periode, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), SafeString(beleg.Belegart),
                                  buchungstext, CType(buchungsbetrag5, Double), "EUR", zsZeilenNr, "KO", bestandskonto, 0, "H", BelegNrUID)
            End If
        End If

        ' 9) Salden aktualisieren und Periodenbuchungen
        Dim si_tage As Integer = 0
        Dim dec_skonto As Integer = 0
        Dim si_ntage As Integer = 0
        Dim c_sprache As String = ""
        Dim c_ustidnr As String = ""
        Dim c_zahlziel As String = ""

        getDEBDaten(mandant.ToString(), beleg.KundenNr, c_sprache, c_ustidnr, c_zahlziel, si_tage, dec_skonto, si_ntage, Nothing, Nothing)

        Dim opvorgangsbetrag As Decimal = 0
        Saldenaktualisierung_new(sql, typ, CType(betrag, Double), beleg, 0, 0, mandant.ToString(), 0, forderungskonto, kassenkonto, 0, opvorgangsbetrag)

        For Each kontoRow As DataRow In dtKonten.Rows
            Dim sollVal As Decimal = If(IsDBNull(kontoRow("Soll")), 0D, CDec(kontoRow("Soll")))
            Dim habenVal As Decimal = If(IsDBNull(kontoRow("Haben")), 0D, CDec(kontoRow("Haben")))
            If sollVal <> 0D OrElse habenVal <> 0D Then
                periodenBuchungen(periode, CInt(kontoRow("Konto")), mandant.ToString(), jahr, CDbl(sollVal), CDbl(habenVal))
            End If
        Next

        ' 10) Offene Posten (nur einmal!)
        Dim OP_KZ As String = "g"
        Select Case typ
            Case "AUSZAHLUNG" : OP_KZ = "r"
            Case "EINZAHLUNG" : OP_KZ = "g"
        End Select


        createOP_new(mandant, CDbl(betrag), SafeString(beleg.BelegNr), beleg.BelegDat.ToShortDateString, SafeString(beleg.BelegNr), buchungstext, CDbl(betrag), "EUR", beleg.KundenNr, forderungskonto, i_beleg_refid, OP_KZ, c_sprache, c_zahlziel, CStr(dec_skonto), beleg.BelegDat.ToShortDateString, beleg.BelegDat.ToShortDateString, c_ustidnr, BelegNrUID)

        createOPVorgang_new(mandant, typ, CDbl(betrag), jahr, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, buchungstext, beleg.KundenNr, CDbl(opvorgangsbetrag), i_beleg_refid, Now.ToString(), kassenkonto, VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME, 1, OP_KZ)

        If typ = "AUSZAHLUNG" Then 'die zweite op_vorgang_deb Zeile insertieren
            createOPVorgang_new(mandant, typ, CDbl(betrag), jahr, rel_periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, buchungstext, beleg.KundenNr, CDbl(opvorgangsbetrag), i_beleg_refid, Now.ToString(), kassenkonto, VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME, 5)
        End If

        Dim gebucht = checkifgebucht_new(mandant, SafeString(BelegNrUID), buchungstext)
        If gebucht Then
            MsgBox("FIBU - GEBUCHT!")
        Else
            MsgBox("FIBU - NICHT GEBUCHT!")
        End If

        Return gebucht
    End Function

    Private Shared Function SumBelegPositionen(beleg As EABeleg) As Decimal
        Dim sum As Decimal = 0D
        If beleg?.POS Is Nothing Then Return 0D
        For Each p In beleg.POS
            ' careful numeric conversion
            sum += CDec(p.Betrag)
        Next
        Return sum
    End Function

    Private Shared Function BuildVerbuchungskonten(entries As List(Of cKassenbuch), beleg As EABeleg, kassenkonto As Integer, forderungkto As Integer, ByRef bestandskonto As Integer) As DataTable
        Dim dt As New DataTable
        dt.Columns.Add("Nr", GetType(Integer))
        dt.Columns.Add("Konto", GetType(Integer))
        dt.Columns.Add("Soll", GetType(Decimal))
        dt.Columns.Add("Haben", GetType(Decimal))
        Dim idx As Integer = 1
        If entries Is Nothing Then Return dt
        For Each r In entries
            ' Debitor (Personenkonto)
            Dim personKto As Integer = If(beleg?.KundenNr > 0, beleg.KundenNr, 0)
            Dim dr1 = dt.NewRow()
            dr1("Nr") = idx : dr1("Konto") = personKto : dr1("Soll") = 0D : dr1("Haben") = 0D : dt.Rows.Add(dr1) : idx += 1
            ' Forderungskonto
            Dim dr2 = dt.NewRow()
            dr2("Nr") = idx : dr2("Konto") = forderungkto : dr2("Soll") = 0D : dr2("Haben") = 0D : dt.Rows.Add(dr2) : idx += 1
            ' Erlöskonto (from entry)
            Dim dr3 = dt.NewRow()
            dr3("Nr") = idx : dr3("Konto") = r.Konto : bestandskonto = r.Konto : dr3("Soll") = CDec(r.Soll) : dr3("Haben") = CDec(r.Haben) : dt.Rows.Add(dr3) : idx += 1
            ' Kassenkonto
            Dim dr4 = dt.NewRow()
            dr4("Nr") = idx : dr4("Konto") = kassenkonto : dr4("Soll") = CDec(r.Haben) : dr4("Haben") = CDec(r.Soll) : dt.Rows.Add(dr4) : idx += 1
        Next
        Return dt
    End Function

    Private Shared Sub SplitBuchungstext(full As String, maxLen As Integer, ByRef main As String, ByRef remainder As String)
        If full Is Nothing Then full = ""
        If full.Length <= maxLen Then
            main = full
            remainder = ""
        Else
            main = full.Substring(0, maxLen)
            remainder = full.Substring(maxLen)
        End If
    End Sub

    Private Shared Function GetStapelRefId(sql As VERAG_PROG_ALLGEMEIN.SQL, mandant As Integer) As String
        Dim v = sql.getValueTxtBySqlVarList("SELECT i_stapel_refid FROM [FIBU2].dbo.fibu_stapelart WHERE c_stapelname Like 'Auszahlungskasse 1' AND i_firm_refid = " & SafeIntToSql(mandant), "FIBU",, "")
        Return If(String.IsNullOrWhiteSpace(v), "0000", v)
    End Function

    Private Shared Function GetNextStapelLfdNr(sql As VERAG_PROG_ALLGEMEIN.SQL, stapelRefId As String, mandant As Integer) As Integer
        If String.IsNullOrWhiteSpace(stapelRefId) OrElse stapelRefId = "0000" Then Return 1
        Dim v = sql.getValueTxtBySqlVarList("SELECT ISNULL(MAX(i_lfdnr),0)+1 FROM [FIBU2].dbo.fibu_stapel WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND i_stapel_refid = " & SafeStringSql(stapelRefId), "FIBU",, "1")
        Return SafeCIntDef(v, 1)
    End Function

    Private Shared Function BuildProtokollId(stapelRefId As Integer, lfd As Integer, jahr As Integer, periode As Integer) As String
        Dim now As DateTime = DateTime.Now
        Dim returnstring As String = ""
        If stapelRefId <> 0 Then returnstring &= "${stapelRefId:0000}-"
        If lfd > 1 Then returnstring &= "${lfd:0000}-"
        returnstring &= now.ToString("dd-MM-yyyy HH:mm:ss")
        Return returnstring
    End Function

    Private Shared Sub UpdateDtKontenAmount(dt As DataTable, konto As Integer, field As String, amount As Decimal)
        If dt Is Nothing Then Return
        Dim rows() As DataRow = dt.Select("Konto = " & konto)
        If rows.Length = 0 Then
            Dim r As DataRow = dt.NewRow()
            r("Nr") = dt.Rows.Count + 1
            r("Konto") = konto
            r("Soll") = 0D
            r("Haben") = 0D
            dt.Rows.Add(r)
            rows = dt.Select("Konto = " & konto)
        End If
        Dim target As DataRow = rows(0)
        If String.Equals(field, "Soll", StringComparison.OrdinalIgnoreCase) Then
            target("Soll") = CDec(target("Soll")) + amount
        Else
            target("Haben") = CDec(target("Haben")) + amount
        End If
    End Sub

    ' --- DB insert helpers (keep existing signatures) ---
    Private Shared Sub InsertBelegskopf_new(sql As VERAG_PROG_ALLGEMEIN.SQL, mandant As Integer, jahr As Integer, periode As Integer, beleg_ref_id As String, datumKurz As String, BelegNr As String, BelegArt As Integer, Buchungstext As String, Belegkopfbetrag As Double, Waehrung As String, creationDate As String, Benutzer As String, ProtokollID As String, c_urbelegid As String)
        Dim safeBT = SafeStringSql(Buchungstext)

        Dim sqlStr = "INSERT INTO [FIBU2].dbo.fibu_belegkopf (i_firm_refid, si_jahr, si_periode, i_beleg_refid, d_beleg, c_urbelegid, si_belegart, c_buchtext, dec_betrag, c_waehrung, dec_fremdbetrag, eur_betrag, i_auftragid, d_gebucht, c_benutzer, i_buchungskreis, i_quelle_modul, c_quelle_maske, si_manipulation, i_stapel_refid, c_protokoll_id) " &
                     "VALUES(" & SafeIntToSql(mandant) & "," & jahr & "," & periode & "," & beleg_ref_id & ",'" & SafeStringSql(datumKurz) & "','" & SafeStringSql(c_urbelegid) & "'," & BelegArt & ",'" & safeBT & "'," & Belegkopfbetrag.ToString().Replace(",", ".") & ",'" & SafeStringSql(Waehrung) & "'," & Belegkopfbetrag.ToString().Replace(",", ".") & "," & Belegkopfbetrag.ToString().Replace(",", ".") & ",0,'" & SafeStringSql(creationDate) & "','" & SafeStringSql(Benutzer) & "',1,21,'Fleximport',0,2,'" & SafeStringSql(ProtokollID) & "');"
        sql.doSQL(sqlStr, "FIBU")
    End Sub

    Private Shared Sub InsertBelegszeile_new(sql As VERAG_PROG_ALLGEMEIN.SQL, mandant As Integer, Jahr As Integer, periode As Integer, rel_periode As Integer, beleg_ref_id As String, datumKurz As String, BelegNr As String, BelegArt As String, Buchungstext As String, Buchungsbetrag As Double, Waehrung As String, ZeilenNr As Integer, ckennsoll2 As String, Sollkonto2 As Integer, Habenkonto2 As Integer, SollhabenKZ As String, c_urbelegid As String)
        Dim safeBT = SafeStringSql(Buchungstext)
        Dim sqlStr = "INSERT INTO [FIBU2].dbo.fibu_belegzeile (i_firm_refid, si_jahr, si_periode, si_rel_periode, i_beleg_refid, i_zeilen_refid, c_kennung, i_konto, c_sollhabenkz, i_steuer_refid, i_gegenkonto, dec_betrag, c_waehrung, dec_fremdbetrag, eur_betrag, d_beleg, d_gebucht, c_urbelegid, si_belegart, c_buchtext, i_buchungskreis) " &
                     "VALUES(" & SafeIntToSql(mandant) & "," & Jahr & "," & periode & "," & rel_periode & "," & beleg_ref_id & "," & ZeilenNr & ",'" & SafeStringSql(ckennsoll2) & "'," & Sollkonto2 & ",'" & SafeStringSql(SollhabenKZ) & "',0," & Habenkonto2 & "," & Buchungsbetrag.ToString().Replace(",", ".") & ",'" & SafeStringSql(Waehrung) & "'," & Buchungsbetrag.ToString().Replace(",", ".") & "," & Buchungsbetrag.ToString().Replace(",", ".") & ",'" & SafeStringSql(datumKurz) & "','" & SafeStringSql(datumKurz) & "','" & SafeStringSql(c_urbelegid) & "','" & SafeStringSql(BelegArt) & "','" & safeBT & "',1);"
        sql.doSQL(sqlStr, "FIBU")
    End Sub

    Private Shared Sub InsertFibuPeriodensaldo(
    sql As VERAG_PROG_ALLGEMEIN.SQL,
    mandant As Integer,
    jahr As Integer,
    konto As Integer,
    decAktuellerSaldo As Double)

        Dim saldo As String = decAktuellerSaldo.ToString().Replace(",", ".")

        Dim sqlStr As String =
        "INSERT INTO [FIBU2].dbo.fibu_periodensaldo (i_firm_refid, si_jahr, i_konto, i_perioden, dec_eroeff, dec_abschluss, dec_soll_1, dec_haben_1, dec_soll_2, dec_haben_2, dec_soll_3, dec_haben_3,dec_soll_4, dec_haben_4, dec_soll_5, dec_haben_5, dec_soll_6, dec_haben_6, dec_soll_7, dec_haben_7, dec_soll_8, dec_haben_8, dec_soll_9, dec_haben_9, " &
        " dec_soll_10, dec_haben_10, dec_soll_11, dec_haben_11, dec_soll_12, dec_haben_12, dec_soll_13, dec_haben_13, eur_eroeff, eur_abschluss, eur_soll_1, eur_haben_1, eur_soll_2, eur_haben_2, eur_soll_3, eur_haben_3, eur_soll_4, eur_haben_4, eur_soll_5, eur_haben_5, eur_soll_6, eur_haben_6, eur_soll_7, eur_haben_7, eur_soll_8, eur_haben_8, eur_soll_9, eur_haben_9, " &
       " eur_soll_10, eur_haben_10, eur_soll_11, eur_haben_11, eur_soll_12, eur_haben_12, eur_soll_13, eur_haben_13, i_buchungskreis) " &
        "VALUES (" &
          SafeIntToSql(mandant) & "," &
        jahr & "," &
        konto & "," &
        "0," &
        saldo & "," &
        String.Join(",", Enumerable.Repeat("0", 27)) & "," &
        saldo & "," &
        String.Join(",", Enumerable.Repeat("0", 27)) & "," &
        "1);"

        sql.doSQL(sqlStr, "FIBU")


        '--------------------------- ZUM VERGLEICH - SQL aus UM ----------------------------------------
        'Set @dec_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr And [FIBU2].dbo.fibu_konto.i_konto = @Schleifenkonto) 
        'If @dec_aktuellersaldo Is NULL SET @dec_aktuellersaldo = 0 

        'INSERT INTO [FIBU2].dbo.fibu_periodensaldo ( 
        '[FIBU2].dbo.fibu_periodensaldo.i_firm_refid, 
        '[FIBU2].dbo.fibu_periodensaldo.si_jahr, 
        '[FIBU2].dbo.fibu_periodensaldo.i_konto, 
        '[FIBU2].dbo.fibu_periodensaldo.i_perioden, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_eroeff, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_abschluss, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_1, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_1, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_2, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_2, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_3, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_3, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_4, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_4, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_5, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_5, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_6, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_6, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_7, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_7, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_8, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_8, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_9, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_9, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_10, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_10, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_11, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_11, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_12, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_12, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_soll_13, 
        '[FIBU2].dbo.fibu_periodensaldo.dec_haben_13, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_eroeff, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_abschluss, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_1, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_1, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_2, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_2, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_3, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_3, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_4, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_4, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_5, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_5, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_6, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_6, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_7, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_7, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_8, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_8, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_9, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_9, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_10, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_10, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_11, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_11, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_12, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_12, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_soll_13, 
        '[FIBU2].dbo.fibu_periodensaldo.eur_haben_13, 
        '[FIBU2].dbo.fibu_periodensaldo.i_buchungskreis) 

        'VALUES ( 
        '@MandantNr, 
        '@Jahr, 
        '@Schleifenkonto, 
        '0, 
        '@dec_aktuellersaldo, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '@dec_aktuellersaldo, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '0, 
        '1) 


    End Sub

    Private Shared Sub createOP_new(mandant As Integer, Betrag As Double, BelegNrText As String, datumKurz As String, BelegNr As String, Buchungstext As String, Buchungsbetrag As Double, Waehrung As String, Personenkonto As Integer, Forderungskonto As Integer, i_op_refid As String, c_op_Typ As Char, Sprache As String, Zahlungsziel As String, Skonto As String, Skontodatum As String, Nettodatum As String, c_ustidnr As String, c_urbelegid As String)

        'Rechnung Betrag Positiv, Gutschrift Betrag negativ!typ
        Dim vorzeichen As Integer = 1
        Select Case c_op_Typ
            Case "r" : vorzeichen = 1
            Case "g" : vorzeichen = -1
        End Select


        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL()
        Dim betragStr = (Betrag * vorzeichen).ToString().Replace(",", ".")
        Dim sqlInsert = "INSERT INTO [FIBU2].dbo.op_debitor (i_firm_refid, i_op_refid, c_urbelegid, i_personenkonto, i_forderungskonto, c_rechnungid, d_rechnung, d_valuta, c_typ, c_sprache, c_waehrung, dec_eigenbrutto, dec_fremdbrutto, eur_bruttobetrag, dec_skf_eigen, dec_skf_fremd, eur_skontierfaehig, dec_eigenzahlung, dec_fremdzahlung, eur_zahlung, c_zahlziel, dec_skonto, d_skonto, dec_skonto2, d_netto, si_mahnstufe, i_mahnlauf_refid, si_exportiert, i_stapel_refid, i_stapel_lfdnr, dec_stpl_ew_betrag, dec_stpl_ew_skonto, dec_stpl_fw_betrag, dec_stpl_fw_skonto, eur_stpl_betrag, eur_stpl_skonto, i_clearing, i_eigene_bank, si_bankeinzug, c_bemerkung, lc_anmerkungen, i_zessionstext, i_buchungskreis, c_ustidnr) " &
                        "VALUES(" & SafeIntToSql(mandant) & "," & i_op_refid & ",'" & SafeStringSql(c_urbelegid) & "'," & Personenkonto & "," & Forderungskonto & ",'" & SafeStringSql(c_urbelegid) & "','" & SafeStringSql(datumKurz) & "','" & SafeStringSql(datumKurz) & "','" & SafeStringSql(CStr(c_op_Typ)) & "','" & SafeStringSql(Sprache) & "','" & SafeStringSql(Waehrung) & "'," & betragStr & "," & betragStr & "," & betragStr & "," & betragStr & "," & betragStr & "," & betragStr & ",0,0,0,'" & SafeStringSql(Zahlungsziel) & "','" & SafeStringSql(Skonto) & "','" & SafeStringSql(Skontodatum) & "',0,'" & SafeStringSql(Nettodatum) & "',0,0,0,0,0,0,0,0,0,0,0,0,0,0,'" & SafeStringSql(Buchungstext) & "','" & SafeStringSql(Buchungstext) & "',0,1,'" & SafeStringSql(c_ustidnr) & "');"
        sql.doSQL(sqlInsert, "FIBU")
    End Sub

    Private Shared Sub createOPVorgang_new(mandant As Integer, TYP As String, Betrag As Double, Jahr As Integer, rel_periode As Integer, beleg_ref_id As String, datumKurz As String, Buchungstext As String, Personenkonto As Integer, opvorgangsbetrag As Double, i_op_refid As String, dt_creation As String, Sachkonto As Integer, Benutzer As String, si_zeilen_refid As Integer, Optional c_op_Typ As Char = "")

        'Rechnung Betrag Positiv, Gutschrift Betrag negativ!

        Dim vorzeichen As Integer = 1
        Select Case c_op_Typ
            Case "r" : vorzeichen = 1
            Case "g" : vorzeichen = -1
        End Select

        opvorgangsbetrag = opvorgangsbetrag * vorzeichen

        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL()
        Dim sqlInsert = "INSERT INTO [FIBU2].dbo.op_vorgang_deb (i_firm_refid, i_personenkonto, i_op_refid, i_beleg_refid, c_vorgang, d_beleg, si_rel_periode, si_jahr, i_steuer_refid, dec_steuerproz, i_nne_az_konto, dec_nettobetrag, dec_steuerbetrag, eur_nettobetrag, eur_steuerbetrag, dec_fremdbetrag, si_skontierfaehig, si_zeilen_refid, c_bemerkung, dt_datum, c_benutzer, i_eg_konto, i_auftrag_refid, dec_naf_steuerbetr, eur_naf_steuerbetr) " &
                         "VALUES(" & SafeIntToSql(mandant) & "," & Personenkonto & "," & i_op_refid & "," & beleg_ref_id & ",'P','" & SafeStringSql(datumKurz) & "'," & rel_periode & "," & Jahr & ",0,0," & Sachkonto & "," & opvorgangsbetrag.ToString().Replace(",", ".") & ",0," & opvorgangsbetrag.ToString().Replace(",", ".") & ",0," & opvorgangsbetrag.ToString().Replace(",", ".") & ",1," & si_zeilen_refid & ",'" & SafeStringSql(Buchungstext) & "','" & SafeStringSql(dt_creation) & "','" & SafeStringSql(Benutzer) & "',0,0,0,0);"
        sql.doSQL(sqlInsert, "FIBU")
    End Sub

    ' --- existing helpers (kept, but ensure they are present in your codebase) ---
    Private Shared Function checkifgebucht_new(mandant As Integer, belegnrtext As String, PosText As String) As Boolean
        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL()
        Dim safeBeleg = SafeStringSql(belegnrtext)
        Dim safePos = SafeStringSql(PosText)
        Dim q = "SELECT COUNT(i_beleg_refid) FROM [FIBU2].dbo.fibu_belegzeile WHERE i_firm_refid = " & SafeIntToSql(mandant) &
                " AND c_urbelegid = '" & safeBeleg & "' AND c_buchtext LIKE '%" & safePos.Replace("'", "''") & "%'"
        Dim cntTxt = sql.getValueTxtBySqlVarList(q, "FIBU",, "0")
        Dim cnt As Integer = 0
        Integer.TryParse(cntTxt, cnt)
        Return cnt >= 3 ' same threshold as original (but consider lowering to 1 or 2)
    End Function

    Private Shared Function SafeString(value As Object) As String
        If value Is Nothing Then Return String.Empty
        Return value.ToString()
    End Function

    Private Shared Function SafeStringSql(value As Object) As String
        Dim s = SafeString(value)
        s = s.Replace("'", "''")
        Return s
    End Function
    Public Shared Function SafeIntToSql(value As String) As String
        If value Is Nothing Then Return "0"

        Dim i As Integer
        If Integer.TryParse(value.ToString(), i) Then
            Return i.ToString()
        Else
            Return "0"
        End If
    End Function

    Public Shared Function SafeIntToSql(value As Integer) As String

        Dim i As Integer
        If Integer.TryParse(value.ToString(), i) Then

            Return i.ToString()
        Else
            Return "0"
        End If
    End Function

    Private Shared Function SafeCIntDef(txt As String, def As Integer) As Integer
        Dim i As Integer = 0
        If Integer.TryParse(txt, i) Then Return i
        Return def
    End Function

    ' ----------------------------
    ' Saldenaktualisierung für Debitoren/Kreditoren/Kassen
    ' ----------------------------
    Public Shared Sub Saldenaktualisierung_new(sql As VERAG_PROG_ALLGEMEIN.SQL, typ As String, betrag As Double, beleg As EABeleg, Optional kontoSoll As Integer = 0, Optional kontoHaben As Integer = 0, Optional mandant As String = "9", Optional jahr As Integer = 0, Optional forderungskto As Integer = 0, Optional kassenkonto As Integer = 0, Optional buchungsnr As Integer = 0, Optional ByRef opvorgangsbetrag As Decimal = 0D)
        ' Berechne Saldo abhängig vom Typ
        Dim sollVal As Double = 0
        Dim habenVal As Double = 0

        Select Case typ.ToUpper()
            Case "EINZAHLUNG"
                sollVal = betrag
                habenVal = 0
            Case "AUSZAHLUNG"
                sollVal = 0
                habenVal = betrag
            Case Else
                sollVal = betrag
                habenVal = 0
        End Select


        'SQL.doSQL("UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & Beleg.BelegDat.ToShortDateString & "', dec_sollsumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", dec_habensumme = " & dec_habensumme.ToString.Replace(",", ".") & " WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & ErloeskontoBeiAuszahlung, "FIBU")

        ' Debitor
        If beleg.KundenNr > 0 Then
            Dim sqlStrDeb As String = "UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & beleg.BelegDat.ToShortDateString & "', dec_sollsumme = dec_sollsumme + " & sollVal.ToString.Replace(",", ".") & ", dec_habensumme = dec_habensumme + " & habenVal.ToString.Replace(",", ".") &
                                      " WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND i_konto = " & beleg.KundenNr & " AND [c_kontoart] = 'DE'"
            sql.doSQL(sqlStrDeb, "FIBU")
        End If

        ' Kassenkonto
        If kassenkonto > 0 Then
            Dim sqlStrKas As String = "UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & beleg.BelegDat.ToShortDateString & "', dec_sollsumme = dec_sollsumme + " & sollVal.ToString.Replace(",", ".") & ", dec_habensumme = dec_habensumme + " & habenVal.ToString.Replace(",", ".") &
                                      " WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND i_konto = " & kassenkonto & " AND [c_kontoart] = 'KO'"
            sql.doSQL(sqlStrKas, "FIBU")
        End If

        ' Forderungskonto
        If forderungskto > 0 Then
            Dim sqlStrF As String = "UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & beleg.BelegDat.ToShortDateString & "', dec_sollsumme = dec_sollsumme + " & sollVal.ToString.Replace(",", ".") & ", dec_habensumme = dec_habensumme + " & habenVal.ToString.Replace(",", ".") &
                                    " WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND i_konto = " & forderungskto & " AND [c_kontoart] = 'KO'"
            sql.doSQL(sqlStrF, "FIBU")
        End If

        ' Optional: OP-Vorgangsbetrag für weitere Verarbeitung zurückgeben
        opvorgangsbetrag = betrag
    End Sub

    ' ----------------------------
    ' Debitorendaten abrufen
    ' ----------------------------
    Public Shared Sub getDEBDaten_new(mandant As String, debitorNr As Integer, ByRef sprache As String, ByRef ustidnr As String, ByRef zahlziel As String, ByRef si_tage As Integer, ByRef dec_skonto As Integer, ByRef si_ntage As Integer, Optional ByRef kontakt As String = Nothing, Optional ByRef email As String = Nothing)
        Dim sql As New VERAG_PROG_ALLGEMEIN.SQL()
        If debitorNr <= 0 Then
            sprache = "D"
            ustidnr = ""
            zahlziel = "30"
            si_tage = 0
            dec_skonto = 0
            si_ntage = 0
            If kontakt IsNot Nothing Then kontakt = ""
            If email IsNot Nothing Then email = ""
            Exit Sub
        End If

        Dim q As String = "SELECT c_sprache, c_ustidnr, c_zahlziel, si_tage, dec_skonto, si_ntage, c_kontakt, c_email FROM [FIBU2].dbo.debitor " &
                          "WHERE i_firm_refid = " & SafeIntToSql(mandant) & " AND i_personenkonto = " & debitorNr
        Dim dt As DataTable = sql.loadDgvBySql(q, "FIBU")

        If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
            Dim row As DataRow = dt.Rows(0)
            sprache = If(IsDBNull(row("c_sprache")), "D", row("c_sprache").ToString())
            ustidnr = If(IsDBNull(row("c_ustidnr")), "", row("c_ustidnr").ToString())
            zahlziel = If(IsDBNull(row("c_zahlziel")), "30", row("c_zahlziel").ToString())
            si_tage = If(IsDBNull(row("si_tage")), 0, CInt(row("si_tage")))
            dec_skonto = If(IsDBNull(row("dec_skonto")), 0, CInt(row("dec_skonto")))
            si_ntage = If(IsDBNull(row("si_ntage")), 0, CInt(row("si_ntage")))
            If kontakt IsNot Nothing Then kontakt = If(IsDBNull(row("c_kontakt")), "", row("c_kontakt").ToString())
            If email IsNot Nothing Then email = If(IsDBNull(row("c_email")), "", row("c_email").ToString())
        Else
            ' Defaults
            sprache = "D"
            ustidnr = ""
            zahlziel = "30"
            si_tage = 0
            dec_skonto = 0
            si_ntage = 0
            If kontakt IsNot Nothing Then kontakt = ""
            If email IsNot Nothing Then email = ""
        End If
    End Sub

End Class



Public Class cRKSV_DE__TEST
    Shared SQL As New SQL

    Shared Function getBelegSting_BAR(summeBRUTTO As Double, steuerSchluessel As Integer) As String


        Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & steuerSchluessel & "' ", "FMZOLL")


        Dim BetragSatzNormal = IIf(steuersatz = 0.19, summeBRUTTO, 0.0)
        Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summeBRUTTO, 0.0)
        Dim BetragSatzNull = IIf(steuersatz = 0, summeBRUTTO, 0.0)


        BetragSatzNormal += IIf(steuersatz = 0.16, summeBRUTTO, 0.0)
        BetragSatzErm1 += IIf(steuersatz = 0.05, summeBRUTTO, 0.0)
        BetragSatzNormal += IIf(steuersatz = 0.2, summeBRUTTO, 0.0) ' Eig Nur AT
        'Dim BetragSatzNormal = IIf(steuersatz = 0.2, summeBRUTTO, 0.0) 'summe
        'Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summeBRUTTO, 0.0)
        'Dim BetragSatzNull = IIf(steuersatz = 0.0, summeBRUTTO, 0.0)

        Dim sum = BetragSatzNormal
        sum += BetragSatzErm1
        sum += BetragSatzNull
        MsgBox("Beleg^" & BetragSatzNormal.ToString("0.00") & "_" & BetragSatzErm1.ToString("0.00") & "_0.00_0.00_" & BetragSatzNull.ToString("0.00") & "^" & sum.ToString("0.00") & ":Bar")
        Return "Beleg^" & BetragSatzNormal.ToString("0.00") & "_" & BetragSatzErm1.ToString("0.00") & "_0.00_0.00_" & BetragSatzNull.ToString("0.00") & "^" & sum.ToString("0.00") & ":Bar"

    End Function


    'Shared Function insertRKSV_DE(ByVal kasse As cRKSV_Kasse, CompanyGUID As String, ByVal umsatzZaehler As Double, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String) As Boolean
    '    MsgBox("123")

    '    Try



    '        ' COM-Objekt anlegen

    '        '   Dim licenseKey As String = kasse.rksv_DE_license '"07.11.2020;MEUCIQDfTvMPWQo4IVvTtuTbU9YHNwJ7EdMbogfGqmAp+rdw4gIgPJoEDE0OCfac/nCOKdksWvOZq+xvkFoYI0HFxJPkldU="
    '        '  Dim TSESerialNumber As String = "77A9D25F044A89E87578A8CD52D2A92564CC09214CC6448465414008D31C1CF1"
    '        Dim m_ksv = New ItgKsV.KsVCom()
    '        'Dim m_ksv As ItgKsV.KsVCom = New ItgKsV.KsVCom()
    '        '  Dim result As Integer = m_ksv.InitialiseLibrary("F:", "SwissbitDemo", "12345", licenseKey)

    '        MsgBox(kasse.rksv_ipAdresse & "  --- " & kasse.rksv_DE_TSE_Serial & "  --- " & kasse.rksv_DE_apiToken & "  --- " & kasse.rksv_DE_user & "  --- " & kasse.rksv_DE_pwd & "  --- " & kasse.rksv_DE_license)

    '        Dim result As Integer = m_ksv.InitialiseLibraryLan(kasse.rksv_ipAdresse, kasse.rksv_DE_TSE_Serial, kasse.rksv_DE_apiToken, kasse.rksv_DE_user, kasse.rksv_DE_pwd, kasse.rksv_DE_license) '--> ClientId/User "Admin" mit KsVCom Demo registriert

    '        If result <> &H0 Then
    '            MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '            Return False
    '        End If



    '        '' Setup bei erstmaliger Verwendung der Swissbit-TSE !!!

    '        'result = m_ksv.SetupTSEForFirstUse("123456", "12345", "98765", "SwissbitDemo")

    '        'If result <> &H0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'Else
    '        '    MessageBox.Show("TSE setup succeeded.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
    '        'End If



    '        ' BeginTransaction: für jede neue Rechnung wird eine Transaktion gestartet

    '        Dim transactionNumber As Long = 0
    '        result = m_ksv.StartTransaction(transactionNumber)

    '        If result <> &H0 Then
    '            MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '            Return False
    '        End If



    '        ' UpdateTransaction: processData bleibt leer

    '        result = m_ksv.UpdateTransaction(transactionNumber, "", "KassenBeleg-V1")

    '        If result <> &H0 Then
    '            MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        End If



    '        ' FinishTransaction: Abschluss einer Rechnung, processData nach vorgegebenem Format

    '        result = m_ksv.FinishTransaction(transactionNumber, getBelegSting_BAR(summeBRUTTO, steuerSchluessel), "KassenBeleg-V1")

    '        If result <> &H0 Then
    '            MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        End If



    '        ' QR-Code und weitere Werte, die auf der Rechnung angedruckt werden müssen

    '        ' QR-Code wird als base64 kodiertes bitmap geliefert

    '        Dim qrCode As String = String.Empty

    '        ' QR-Code Inhalt für die Ablage in der Datenbank, falls eine Rechnung nochmals gedruckt werden muss

    '        Dim qrCodeContent As String = String.Empty
    '        m_ksv.GetLastReceiptQrCode(qrCode)
    '        m_ksv.GetLastReceiptQrCodeContent(qrCodeContent)
    '        Dim sTransactionNumber As String = String.Empty
    '        Dim serialNumber As String = String.Empty
    '        Dim signature As String = String.Empty
    '        Dim sigCounter As String = String.Empty
    '        Dim dtStartTransaction As Date = Date.MinValue
    '        Dim dtFinishTransaction As Date = Date.MinValue
    '        m_ksv.GetLastReceiptValues(sTransactionNumber, serialNumber, signature, dtStartTransaction, dtFinishTransaction, sigCounter)

    '        QR_CodeString = qrCode
    '        LastJWS = signature
    '        '' Anzeige der gestarteten/noch möglichen Transaktionen

    '        'Dim maxTransactions As Integer = 0
    '        'Dim openTransactions As Integer = 0
    '        'm_ksv.GetMaxStartedTransactions(maxTransactions)
    '        'm_ksv.GetStartedTransactions(openTransactions)
    '        'Dim startedTransactions As Integer() = Nothing
    '        'result = m_ksv.GetStartedTransactionNumbers(startedTransactions)

    '        'If result <> &H0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'End If



    '        '' Export der TSE-Daten im TAR-Format

    '        'result = m_ksv.ExportAsTarFile("d:\export.tar")

    '        'If result <> 0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'End If



    '        '' Bibliothek aufräumen, andernfalls wird ein power-cycle der TSE erforderlich um sie wieder einsetzen zu können

    '        ''result = CSharpImpl.__Assign(,, m_ksv.CleanupLibrary())
    '        'result = m_ksv.CleanupLibrary()

    '        'If result <> 0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'End If



    '    Catch ex As Exception
    '        MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
    '    End Try
    '    Return False
    'End Function

End Class


Public Class cRKSV_DE
    Shared SQL As New SQL



    'Shared Function getBelegSting_BAR(summeBRUTTO As Double, steuerSchluessel As Integer) As String


    '    Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & steuerSchluessel & "' ", "FMZOLL")


    '    Dim BetragSatzNormal = IIf(steuersatz = 0.19, summeBRUTTO, 0.0)
    '    Dim BetragSatzErm1 = IIf(steuersatz = 0.1, summeBRUTTO, 0.0)
    '    Dim BetragSatzNull = IIf(steuersatz = 0, summeBRUTTO, 0.0)


    '    BetragSatzNormal += IIf(steuersatz = 0.16, summeBRUTTO, 0.0)
    '    BetragSatzErm1 += IIf(steuersatz = 0.05, summeBRUTTO, 0.0)
    '    BetragSatzNormal += IIf(steuersatz = 0.2, summeBRUTTO, 0.0) ' Eig Nur AT
    '    'Dim BetragSatzNormal = IIf(steuersatz = 0.2, summeBRUTTO, 0.0) 'summe
    '    'Dim BetragSatzErm2 = IIf(steuersatz = 0.13, summeBRUTTO, 0.0)
    '    'Dim BetragSatzNull = IIf(steuersatz = 0.0, summeBRUTTO, 0.0)

    '    Dim sum = BetragSatzNormal
    '    sum += BetragSatzErm1
    '    sum += BetragSatzNull
    '    MsgBox("Beleg^" & BetragSatzNormal.ToString("0.00") & "_" & BetragSatzErm1.ToString("0.00") & "_0.00_0.00_" & BetragSatzNull.ToString("0.00") & "^" & sum.ToString("0.00") & ":Bar")
    '    Return "Beleg^" & BetragSatzNormal.ToString("0.00") & "_" & BetragSatzErm1.ToString("0.00") & "_0.00_0.00_" & BetragSatzNull.ToString("0.00") & "^" & sum.ToString("0.00") & ":Bar"

    'End Function
    Shared Function stornoRKSV_DE(PERSONAL As cPersonal, BELEG As EABeleg, ByVal kasse As cRKSV_Kasse, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String, Optional storno As Integer = 0) As Boolean

        Return insertRKSV_DE(PERSONAL, BELEG, kasse, RKSV_Beleg_Id, summeBRUTTO, QR_CodeString, LastJWS, TEST, answer, 1)

    End Function

    Shared Function getRKSVLink(ByVal kasse As cRKSV_Kasse) As String
        Return kasse.rksv_ipAdresse
        'Return getRKSVLink(kasse.rksv_bez)
    End Function

    Shared Function insertRKSV_DE_ORIG(PERSONAL As cPersonal, BELEG As EABeleg, ByVal kasse As cRKSV_Kasse, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String, Optional storno As Integer = 0) As Boolean

        Try

            Dim cashbox As String = kasse.rksv_KassaGuid '"VERAG_GMBH_KASSE_01" "KASSA 001"
            'Dim endpoint = New System.ServiceModel.EndpointAddress(getRKSVLink(kasse))
            '  Dim m_com As VERAG_PROG_ALLGEMEIN.DSFinVKService.DSFinVKServerClient = New VERAG_PROG_ALLGEMEIN.DSFinVKService.DSFinVKServerClient("DSFinVKService", endpoint) '"http://ymgk028055.verag.ost.dmn:8733/DSFinVKService")

            Dim m_com As DSFinVKServerClient = New DSFinVKServerClient() 'PROBLEM??


            ' Dim [error] = "" 'm_com.InitializeLibrary(tbLicense.Text, "D:\Database\DSFinVK\dsfinvkdb.db3", "Administrator", "test", cashbox)
            Dim [error] = m_com.InitializeLibrary("SQLGUIDE01.verag.ost.dmn", "itg_RKSV_DE", "dsfinvk", "dsfinvk#1337", cashbox)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If


            Dim BON_ID As Integer = 0
            [error] = m_com.GetNextBON_ID(cashbox, BON_ID)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If




            'Rechnung beginnen

            Dim bonkopfBegin As VERAG_PROG_ALLGEMEIN.DSFinVKService.BonKopfBegin = New VERAG_PROG_ALLGEMEIN.DSFinVKService.BonKopfBegin()

            bonkopfBegin.Z_KASSE_ID = cashbox

            bonkopfBegin.BEDIENER_ID = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID 'tbBEDIENER_ID.Text

            bonkopfBegin.BEDIENER_NAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME 'tbBEDIENER_NAME.Text

            bonkopfBegin.BON_ID = BON_ID.ToString()

            bonkopfBegin.BON_NAME = "" 'tbBON_NAME.Text

            bonkopfBegin.BON_NOTIZ = "" 'tbBON_NOTIZ.Text

            bonkopfBegin.BON_NR = BON_ID

            bonkopfBegin.BON_STORNO = storno 'If(cbBON_STORNO.Checked, "1", "0")

            bonkopfBegin.BON_TYP = "Beleg" 'cmbBON_TYP.SelectedItem.ToString()

            bonkopfBegin.KUNDE_ID = "" 'tbKUNDE_ID.Text

            bonkopfBegin.KUNDE_LAND = "" 'tbKUNDE_LAND.Text

            bonkopfBegin.KUNDE_NAME = "" 'tbKUNDE_NAME.Text

            bonkopfBegin.KUNDE_ORT = "" 'tbKUNDE_ORT.Text

            bonkopfBegin.KUNDE_PLZ = "" 'tbKUNDE_PLZ.Text

            bonkopfBegin.KUNDE_STRASSE = "" ' tbKUNDE_STRASSE.Text

            bonkopfBegin.KUNDE_TYP = "" ' tbKUNDE_TYP.Text

            bonkopfBegin.KUNDE_USTID = "" ' tbKUNDE_USTID.Text

            bonkopfBegin.TERMINAL_ID = "" 'tbTERMINAL_ID.Text

            Dim transactionNumber As Integer = 0

            [error] = m_com.BeginReceipt(cashbox, bonkopfBegin, transactionNumber)

            Dim cntZeile = 1
            Dim GES_BRUTTO As Double = 0
            For Each POS In BELEG.POS

                'Bonposition hinzufügen
                Dim position As VERAG_PROG_ALLGEMEIN.DSFinVKService.BonPosition = New VERAG_PROG_ALLGEMEIN.DSFinVKService.BonPosition()

                position.AGENTUR_ID = "" 'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["AGENTUR_ID"].Value)

                position.ARTIKELTEXT = POS.LeistungsBez 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ARTIKELTEXT"].Value)

                position.ART_NR = POS.LeistungsNr ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ART_NR"].Value)

                position.BON_ID = Convert.ToString(BON_ID)

                position.EINHEIT = "Stk." ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["EINHEIT"].Value)

                position.FAKTOR = 1 ' Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["FAKTOR"].Value)

                position.GTIN = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GTIN"].Value)

                position.GUTSCHEIN_NR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GUTSCHEIN_NR"].Value)

                position.GV_NAME = "" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_NAME"].Value)

                position.GV_TYP = "Umsatz" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_TYP"].Value)

                position.INHAUS = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["INHAUS"].Value)

                position.MENGE = POS.Anzahl 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["MENGE"].Value)

                position.POS_TERMINAL_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_TERMINAL_ID"].Value)

                position.POS_ZEILE = cntZeile 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_ZEILE"].Value)

                position.P_STORNO = storno ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["P_STORNO"].Value)

                position.STK_BR = POS.Preis 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["STK_BR"].Value)

                position.WARENGR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR"].Value)

                position.WARENGR_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR_ID"].Value)

                position.Z_KASSE_ID = cashbox 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["Z_KASSE_ID"].Value)

                ' Beträge der Position

                Dim position_vat = New VERAG_PROG_ALLGEMEIN.DSFinVKService.BonPosition_Ust()

                position_vat.BON_ID = position.BON_ID

                position_vat.POS_ZEILE = position.POS_ZEILE

                Dim steuersatzID = 1
                Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT [Steuersatz] FROM [tblSteuersätze] where nr='" & BELEG.Steuerschlüssel & "'", "FMZOLL")
                Select Case steuersatz
                    Case 0.19 : steuersatzID = 1
                    Case 0.07 : steuersatzID = 2
                    Case 0.00 : steuersatzID = 6
                End Select

                position_vat.UST_SCHLUESSEL = steuersatzID 'm_com.GetTaxIds(cashbox,)   'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["UST_SCHLUESSEL"].Value)
                Dim steuerBetrag = POS.Betrag * position_vat.UST_SCHLUESSEL
                position_vat.POS_BRUTTO = POS.Betrag + steuerBetrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_BRUTTO"].Value)

                position_vat.POS_NETTO = POS.Betrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_NETTO"].Value)

                position_vat.POS_UST = steuerBetrag 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_UST"].Value)

                [error] = m_com.AddPositionToReceipt(cashbox, position, position_vat, transactionNumber)
                cntZeile += 1
                GES_BRUTTO += position_vat.POS_BRUTTO

            Next

            'Rechnung abschließen

            Dim bonkopfFinish As VERAG_PROG_ALLGEMEIN.DSFinVKService.BonKopfFinish = New VERAG_PROG_ALLGEMEIN.DSFinVKService.BonKopfFinish()

            bonkopfFinish.Z_KASSE_ID = cashbox

            bonkopfFinish.BON_ID = BON_ID



            If Not Decimal.TryParse(GES_BRUTTO, bonkopfFinish.UMS_BRUTTO) Then
                bonkopfFinish.UMS_BRUTTO = 0.00
            End If


            bonkopfFinish.PROCESS_TYPE = "Kassenbeleg-V1"

            bonkopfFinish.payment_currencies = {"EUR"}

            bonkopfFinish.payment_types = {"Bar"}

            bonkopfFinish.payment_per_currency = {119.0}

            [error] = m_com.FinishReceipt(cashbox, bonkopfFinish, transactionNumber)

            ' Kassenabschluss anlegen über alle noch nicht abgeschlossenen Rechnungen zu dieser Kasse

            ' Error = m_com.CreateCashpointClosing(cashbox)

            '            ' DSFinV-K-Export

            '            Int from = 0

            'Int to = 10

            'Dim ret = m_com.ExportCSVFiles(from, to, tbSelectedFolder.Text, tbZipName.Text, True, True,

            'true, true, true, true, true, true,

            'true, true, true, true,

            'true, true, true, true, true,

            'true, true, true);

            'If (ret == ErrorCode.OK) Then

            '{

            'MessageBox.Show("Die CSV Dateien wurden im Ordner " + tbSelectedFolder.Text + " angelegt und in die Zip-Datei " + tbZipName.Text + " gepackt.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

            '}

            'Else

            '{

            'MessageBox.Show("Beim exportieren der CSV-Dateien ging etwas schief:\r\n" + ret.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

            '}

            Dim transactionNumberRet As String
            Dim serialNumber As String
            Dim signature As String
            Dim transactionStart As Date
            Dim transactionFinish As Date
            Dim sigCounter As String
            m_com.GetLastReceiptValues(cashbox, transactionNumberRet, serialNumber, signature, transactionStart, transactionFinish, sigCounter)


            Dim qrCode As String = String.Empty
            Dim mimeType As String = String.Empty
            m_com.GetLastReceiptQrCode(cashbox, qrCode, mimeType)


            QR_CodeString = qrCode
            LastJWS = signature



        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function

    Shared Function insertRKSV_DE(PERSONAL As cPersonal, BELEG As EABeleg, ByVal kasse As cRKSV_Kasse, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String, Optional storno As Integer = 0) As Boolean

        Try

            ' MsgBox("0: ")
            Dim cashbox As String = kasse.rksv_KassaGuid '"VERAG_GMBH_KASSE_01" "KASSA 001"
            'Dim endpoint = New System.ServiceModel.EndpointAddress(getRKSVLink(kasse))
            '  Dim m_com As VERAG_PROG_ALLGEMEIN.DSFinVKService.DSFinVKServerClient = New VERAG_PROG_ALLGEMEIN.DSFinVKService.DSFinVKServerClient("DSFinVKService", endpoint) '"http://ymgk028055.verag.ost.dmn:8733/DSFinVKService")

            Dim m_com As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.DSFinVKServer() 'PROBLEM??
            m_com.Url = "http://ymgk028055.verag.ost.dmn:8733/DSFinVKService"
            Dim [error] As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.ErrorCode
            Dim InitializeLibraryResultSpecified As Boolean
            '     Dim [error] = "" 'm_com.InitializeLibrary(tbLicense.Text, "D:\Database\DSFinVK\dsfinvkdb.db3", "Administrator", "test", cashbox)
            m_com.InitializeLibrary("SQLGUIDE01.verag.ost.dmn", "itg_RKSV_DE", "dsfinvk", "dsfinvk#1337", cashbox, [error], InitializeLibraryResultSpecified)

            '   MsgBox("1: " & [error])

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                If [error].ToString() <> "CASHBOX_ALREADY_MANAGED" Then '--> CASHBOX_ALREADY_MANAGED --> der Fehler darf auftreten, die Cashbox wird Serverseitig initialisert, hier nur der Versuch, falls das nciht geschehen ist... lt. Jan Mika / AITG
                    MessageBox.Show([error].ToString(), "Error1", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                    Return False
                End If
            End If

            ' MsgBox("2")



            'BelegNr wird von RKSV übernommen
            Dim BON_ID As Integer = 0
            If False Then

                Dim BON_IDSpecified = False
                Dim GetNextBON_IDResultSpecified = False
                m_com.GetNextBON_ID(cashbox, BON_ID, BON_IDSpecified, [error], GetNextBON_IDResultSpecified)
                '  MsgBox("3: " & [error])

                If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                    MessageBox.Show([error].ToString(), "Error2", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                    Return False
                End If
            Else
                '  MsgBox(RKSV_Beleg_Id)
                BON_ID = RKSV_Beleg_Id
            End If


            'Dim BON_NR As Integer = 0
            '[error] = m_com.GetNextBON_NR(cashbox, BON_NR)

            'If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
            '    MessageBox.Show([error].ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
            '    Return False
            'End If
            '  MsgBox("4")


            '-------------------------------------------------------------------------------------
            '--------------------------------- Rechnung beginnen ---------------------------------
            '-------------------------------------------------------------------------------------

            Dim bonkopfBegin As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfBegin = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfBegin()

            bonkopfBegin.Z_KASSE_ID = cashbox

            bonkopfBegin.BEDIENER_ID = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID 'tbBEDIENER_ID.Text

            bonkopfBegin.BEDIENER_NAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME 'tbBEDIENER_NAME.Text

            bonkopfBegin.BON_ID = BON_ID.ToString()

            bonkopfBegin.BON_NAME = "" 'tbBON_NAME.Text

            bonkopfBegin.BON_NOTIZ = "" 'tbBON_NOTIZ.Text

            bonkopfBegin.BON_NR = bonkopfBegin.BON_ID

            bonkopfBegin.BON_STORNO = storno 'If(cbBON_STORNO.Checked, "1", "0")

            bonkopfBegin.BON_TYP = "Beleg" 'cmbBON_TYP.SelectedItem.ToString()

            bonkopfBegin.KUNDE_ID = If(BELEG.KundenNr > 0, BELEG.KundenNr, "") 'tbKUNDE_ID.Text

            bonkopfBegin.KUNDE_LAND = If(BELEG.LandKz, "") 'tbKUNDE_LAND.Text

            bonkopfBegin.KUNDE_NAME = If(BELEG.Frachtführer, "") 'tbKUNDE_NAME.Text

            bonkopfBegin.KUNDE_ORT = If(BELEG.Ort, "") 'tbKUNDE_ORT.Text

            bonkopfBegin.KUNDE_PLZ = If(BELEG.PLZ, "") 'tbKUNDE_PLZ.Text

            bonkopfBegin.KUNDE_STRASSE = If(BELEG.Straße, "") ' tbKUNDE_STRASSE.Text

            bonkopfBegin.KUNDE_TYP = "" ' tbKUNDE_TYP.Text

            bonkopfBegin.KUNDE_USTID = If(BELEG.UstIdKz, "") & If(BELEG.UstIdNr, "") ' tbKUNDE_USTID.Text

            bonkopfBegin.TERMINAL_ID = "" 'tbTERMINAL_ID.Text

            Dim transactionNumber As Integer = 0
            Dim transactionNumberSpecified As Boolean

            Dim BeginReceiptResultSpecified As Boolean
            m_com.BeginReceipt(cashbox, bonkopfBegin, transactionNumber, transactionNumberSpecified, [error], BeginReceiptResultSpecified)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error3", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If

            '    MsgBox("5 ANZ: " & BELEG.POS.Count)
            Dim cntZeile = 1
            Dim GES_BRUTTO As Double = 0
            For Each POS In BELEG.POS

                'Bonposition hinzufügen
                Dim position As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonPosition = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonPosition()

                position.AGENTUR_ID = -1 'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["AGENTUR_ID"].Value)

                position.ARTIKELTEXT = POS.LeistungsBez 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ARTIKELTEXT"].Value)

                position.ART_NR = POS.LeistungsNr ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["ART_NR"].Value)

                position.BON_ID = Convert.ToString(BON_ID)

                position.EINHEIT = "Stk." ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["EINHEIT"].Value)

                position.FAKTOR = 1 ' Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["FAKTOR"].Value)

                position.GTIN = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GTIN"].Value)

                position.GUTSCHEIN_NR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GUTSCHEIN_NR"].Value)

                position.GV_NAME = "" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_NAME"].Value)

                position.GV_TYP = "Umsatz" ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["GV_TYP"].Value)

                position.INHAUS = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["INHAUS"].Value)

                position.MENGE = POS.Anzahl 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["MENGE"].Value)

                position.POS_TERMINAL_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_TERMINAL_ID"].Value)

                position.POS_ZEILE = cntZeile 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_ZEILE"].Value)

                position.P_STORNO = storno ' Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["P_STORNO"].Value)

                position.STK_BR = POS.Preis 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["STK_BR"].Value)

                position.WARENGR = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR"].Value)

                position.WARENGR_ID = "" 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["WARENGR_ID"].Value)

                position.Z_KASSE_ID = cashbox 'Convert.ToString(dgvBonPos.Rows[m_dgvCurrentRow].Cells["Z_KASSE_ID"].Value)

                ' Beträge der Position

                Dim position_vat = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonPosition_Ust()

                position_vat.BON_ID = position.BON_ID

                position_vat.POS_ZEILE = position.POS_ZEILE

                Dim steuersatzID = 1
                Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT [Steuersatz] FROM [tblSteuersätze] where nr='" & BELEG.Steuerschlüssel & "'", "FMZOLL")
                Select Case steuersatz
                    Case 0.19 : steuersatzID = 1
                    Case 0.07 : steuersatzID = 2
                    Case 0.00 : steuersatzID = 6
                End Select
                '  MsgBox(POS.Anzahl)
                '  MsgBox(POS.Betrag)

                position_vat.UST_SCHLUESSEL = steuersatzID 'm_com.GetTaxIds(cashbox,)   'Convert.ToInt32(dgvBonPos.Rows[m_dgvCurrentRow].Cells["UST_SCHLUESSEL"].Value)
                Dim steuerBetrag As Double = POS.Betrag * steuersatz
                position_vat.POS_BRUTTO = Convert.ToDecimal(POS.Betrag + steuerBetrag) 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_BRUTTO"].Value)
                position_vat.POS_NETTO = Convert.ToDecimal(POS.Betrag) 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_NETTO"].Value)

                position_vat.POS_UST = Convert.ToDecimal(steuerBetrag) 'Convert.ToDecimal(dgvBonPos.Rows[m_dgvCurrentRow].Cells["POS_UST"].Value)

                Dim AddPositionToReceiptResultSpecified As Boolean
                m_com.AddPositionToReceipt(cashbox, position, position_vat, transactionNumber, transactionNumberSpecified, [error], AddPositionToReceiptResultSpecified)
                cntZeile += 1
                GES_BRUTTO += position_vat.POS_BRUTTO

            Next
            ' MsgBox("6: " & GES_BRUTTO)

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error4", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If

            'Rechnung abschließen

            Dim bonkopfFinish As VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfFinish = New VERAG_PROG_ALLGEMEIN.RKSV_DE_DSFinVKService.BonKopfFinish()

            bonkopfFinish.Z_KASSE_ID = cashbox

            bonkopfFinish.BON_ID = BON_ID

            Try
                bonkopfFinish.UMS_BRUTTO = Convert.ToDecimal(GES_BRUTTO)
            Catch ex As Exception
                bonkopfFinish.UMS_BRUTTO = 0.00
            End Try

            'If Not Decimal.TryParse(GES_BRUTTO, bonkopfFinish.UMS_BRUTTO) Then
            '    bonkopfFinish.UMS_BRUTTO = 0.00
            'End If


            bonkopfFinish.PROCESS_TYPE = "Kassenbeleg-V1"

            bonkopfFinish.payment_currencies = {"EUR"}

            bonkopfFinish.payment_types = {"Bar"}

            bonkopfFinish.payment_per_currency = {GES_BRUTTO} '{0.0} 'BETRAG"!!!!!!!!!!!!

            ' MsgBox("6,1: ")

            Dim FinishReceiptResult As Boolean = True
            Dim FinishReceiptResultSpecified As Boolean
            m_com.FinishReceipt(cashbox, bonkopfFinish, transactionNumber, FinishReceiptResult, [error], FinishReceiptResultSpecified)
            '   MsgBox("6,2: ")

            If [error] <> VERAG_PROG_ALLGEMEIN.DSFinVKService.ErrorCode.OK Then
                MessageBox.Show([error].ToString(), "Error5", MessageBoxButtons.OK, MessageBoxIcon.[Error])
                Return False
            End If
            ' Kassenabschluss anlegen über alle noch nicht abgeschlossenen Rechnungen zu dieser Kasse

            ' Error = m_com.CreateCashpointClosing(cashbox)

            '            ' DSFinV-K-Export

            '            Int from = 0

            'Int to = 10

            'Dim ret = m_com.ExportCSVFiles(from, to, tbSelectedFolder.Text, tbZipName.Text, True, True,

            'true, true, true, true, true, true,

            'true, true, true, true,

            'true, true, true, true, true,

            'true, true, true);

            'If (ret == ErrorCode.OK) Then

            '{

            'MessageBox.Show("Die CSV Dateien wurden im Ordner " + tbSelectedFolder.Text + " angelegt und in die Zip-Datei " + tbZipName.Text + " gepackt.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

            '}

            'Else

            '{

            'MessageBox.Show("Beim exportieren der CSV-Dateien ging etwas schief:\r\n" + ret.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);

            '}
            ' MsgBox("7")

            Dim transactionNumberRet As String
            Dim serialNumber As String
            Dim signature As String
            Dim transactionStart As Date
            Dim transactionFinish As Date
            Dim sigCounter As String
            Dim transactionStartSpecified As Boolean
            Dim transactionFinishSpecified As Boolean
            Dim GetLastReceiptValuesResultSpecified As Boolean
            '
            m_com.GetLastReceiptValues(cashbox, transactionNumberRet, serialNumber, signature, transactionStart, transactionStartSpecified, transactionFinish, transactionFinishSpecified, sigCounter, [error], GetLastReceiptValuesResultSpecified)

            '   MsgBox("8")

            Dim qrCode As String = String.Empty
            Dim mimeType As String = String.Empty
            Dim GetLastReceiptQrCodeResult As Boolean
            Dim GetLastReceiptQrCodeResultSpecified As Boolean
            m_com.GetLastReceiptQrCode(cashbox, qrCode, mimeType, GetLastReceiptQrCodeResult, GetLastReceiptQrCodeResultSpecified)

            QR_CodeString = qrCode
            LastJWS = signature


            '  MsgBox("9")
            If QR_CodeString.Length > 50 And LastJWS.Length > 50 Then
                Return True
            End If
        Catch ex As Exception
            MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
        End Try
        Return False
    End Function

    'Shared Function insertRKSV_DE(ByVal kasse As cRKSV_Kasse, CompanyGUID As String, ByVal umsatzZaehler As Double, ByVal belegDat As DateTime, ByVal steuerSchluessel As Integer, ByVal RKSV_Beleg_Id As Integer, ByVal summeBRUTTO As Double, ByRef QR_CodeString As String, ByRef LastJWS As String, TEST As Boolean, ByRef answer As String) As Boolean

    '    Try
    '        Dim xCom As New VERAG_PROG_ALLGEMEIN.RKSV_DE.DSFinVKServerClient
    '        Dim ret As Long
    '        Dim bonkopfBegin As New VERAG_PROG_ALLGEMEIN.RKSV_DE.BonKopfBegin
    '        Dim bonkopfFinish As New VERAG_PROG_ALLGEMEIN.RKSV_DE.BonKopfFinish
    '        Dim bonpos As New VERAG_PROG_ALLGEMEIN.RKSV_DE.BonPosition
    '        Dim bonpos_ust As New VERAG_PROG_ALLGEMEIN.RKSV_DE.BonPosition_Ust

    '        Dim transactionNumber As Long
    '        Dim bonId As Long
    '        Dim bonNr As Long
    '        Dim poszeile As Integer

    '        ' zwingend erforderliche Felder:


    '        Dim tbCashbox = kasse.rksv_KassaGuid ' VERAG_GMBH_KASSE_01
    '        bonkopfBegin.Z_KASSE_ID = tbCashbox
    '        bonkopfBegin.BON_ID = bonId
    '        bonkopfBegin.BON_NR = bonId
    '        bonkopfBegin.BON_TYP = "Beleg" 'tbBonTyp
    '        bonkopfBegin.BON_NAME = "" 'tbBonName

    '        bonkopfBegin.BON_STORNO = "0"
    '        bonkopfBegin.BEDIENER_ID = VERAG_PROG_ALLGEMEIN.cAllgemein.USRID 'tbBedienerId
    '        bonkopfBegin.BEDIENER_NAME = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME ' tbBedienerName



    '        Dim tbBonStart = Format(Now(), "yyyy-mm-ddThh:MM:ss")



    '        poszeile = 1



    '    bonkopfBegin.BON_START = tbBonStart

    '    ' optionale Felder:



    '    ' bonkopfBegin.KUNDE_NAME = tbKundeName

    '    ' bonkopfBegin.KUNDE_ID = tbKundeId

    '    ' bonkopfBegin.KUNDE_TYP = tbKundeTyp

    '    ' bonkopfBegin.KUNDE_USTID = tbKundeUstId

    '    ' bonkopfBegin.KUNDE_STRASSE = tbKundeStrasse

    '    ' bonkopfBegin.KUNDE_PLZ = tbKundePlz

    '    ' bonkopfBegin.KUNDE_ORT = tbKundeOrt

    '    ' bonkopfBegin.KUNDE_LAND = tbKundeLand



    '    ret = xCom.BeginReceipt(tbCashbox, bonkopfBegin, transactionNumber)

    '    If ret <> 0 Then

    '        MsgBox("Es ist ein Fehler aufgetreten! ErrorCode = " + Str$(ret))

    '    Else

    '        tbTransNr = transactionNumber

    '    End If






    '    Dim qrCode As String = String.Empty

    '        ' QR-Code Inhalt für die Ablage in der Datenbank, falls eine Rechnung nochmals gedruckt werden muss

    '        Dim qrCodeContent As String = String.Empty
    '        m_ksv.GetLastReceiptQrCode(qrCode)
    '        m_ksv.GetLastReceiptQrCodeContent(qrCodeContent)
    '        Dim sTransactionNumber As String = String.Empty
    '        Dim serialNumber As String = String.Empty
    '        Dim signature As String = String.Empty
    '        Dim sigCounter As String = String.Empty
    '        Dim dtStartTransaction As Date = Date.MinValue
    '        Dim dtFinishTransaction As Date = Date.MinValue
    '        m_ksv.GetLastReceiptValues(sTransactionNumber, serialNumber, signature, dtStartTransaction, dtFinishTransaction, sigCounter)

    '        QR_CodeString = qrCode
    '        LastJWS = signature
    '        '' Anzeige der gestarteten/noch möglichen Transaktionen

    '        'Dim maxTransactions As Integer = 0
    '        'Dim openTransactions As Integer = 0
    '        'm_ksv.GetMaxStartedTransactions(maxTransactions)
    '        'm_ksv.GetStartedTransactions(openTransactions)
    '        'Dim startedTransactions As Integer() = Nothing
    '        'result = m_ksv.GetStartedTransactionNumbers(startedTransactions)

    '        'If result <> &H0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'End If



    '        '' Export der TSE-Daten im TAR-Format

    '        'result = m_ksv.ExportAsTarFile("d:\export.tar")

    '        'If result <> 0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'End If



    '        '' Bibliothek aufräumen, andernfalls wird ein power-cycle der TSE erforderlich um sie wieder einsetzen zu können

    '        ''result = CSharpImpl.__Assign(,, m_ksv.CleanupLibrary())
    '        'result = m_ksv.CleanupLibrary()

    '        'If result <> 0 Then
    '        '    MessageBox.Show(m_ksv.StringifyErrorCode(result), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    '        'End If



    '    Catch ex As Exception
    '        MsgBox("Es ist ein Fehler bei der Signatur aufgetreten (insertRKSV): " & vbNewLine & ex.Message & ex.StackTrace)
    '    End Try
    '    Return False
    'End Function




    '################## ------- -------  ------- ################## 
    '################## ------- -------  ------- ################## 
    '################## ------- BUCHUNGEN------- ################## 
    '################## ------- -------  ------- ################## 
    '################## ------- -------  ------- ################## 

    '################## ------- DEFAULTWERTE------- ################## 

    'Declare @Kundensuchnr INTEGER 
    'Declare @Kundennr INTEGER 
    'Declare @belegdatum DATETIME 
    'Declare @belegnr INTEGER 
    'Declare @MandantNr INTEGER 
    'Declare @StapelAZK INTEGER 
    'Declare @Zaehler1 INTEGER 
    'Declare @ZSBuchnr INTEGER 
    'Declare @ZSzeilenr INTEGER 
    'Declare @Sollkonto INTEGER 
    'Declare @Habenkonto INTEGER 
    'Declare @ckennsoll VARCHAR(2)
    '    Declare @ckennhab VARCHAR(2)
    '    Declare @steuerproz FLOAT 
    'Declare @Jahr INTEGER 
    'Declare @Periode INTEGER 
    'Declare @Zeilenrefid INTEGER 
    'Declare @Kennung VARCHAR(2)
    '    Declare @Konto INTEGER 
    'Declare @SollHaben VARCHAR(1)
    '    Declare @Steuersatz FLOAT 
    'Declare @Steuerbetrag FLOAT 
    'Declare @Gegenkonto INTEGER 
    'Declare @Waehrung VARCHAR(5)
    '    Declare @Belegart INTEGER 
    'Declare @kkennung INTEGER 
    'Declare @kkennungsoll INTEGER 
    'Declare @kkennunghab INTEGER 
    'Declare @Splitart INTEGER 
    'Declare @Buchungsbelegkreis VARCHAR(5)
    '    Declare @Buchungstext_orig VARCHAR(255)
    '    Declare @Buchungstext VARCHAR(49)
    '    Declare @BuchungstextBemerkung VARCHAR(29)
    '    Declare @Firmenname VARCHAR(50)
    '    Declare @Ort VARCHAR(50)
    '    Declare @belegnrtext VARCHAR(24)
    '    Declare @Kontonummer VARCHAR(8)
    '    Declare @DB_Kontosoll INTEGER 
    'Declare @i_buchungskreis INTEGER 
    'Declare @i_bank_flags INTEGER 
    'Declare @i_quelle_modul INTEGER 
    'Declare @c_quelle_maske VARCHAR(50)
    '    Declare @si_manipulation INTEGER 
    'Declare @dt_creation DATETIME 
    'Declare @c_protokoll_id VARCHAR(100)
    '    Declare @C_Jahr VARCHAR(4)
    '    Declare @C_Periode VARCHAR(4)
    '    Declare @Tag INTEGER 
    'Declare @C_Tag VARCHAR(4)
    '    Declare @Stunde INTEGER 
    'Declare @C_Stunde VARCHAR(4)
    '    Declare @Minute INTEGER 
    'Declare @C_Minute VARCHAR(4)
    '    Declare @Sekunde INTEGER 
    'Declare @C_Sekunde VARCHAR(4)
    '    Declare @Monat INTEGER 
    'Declare @C_Monat VARCHAR(4)
    '    Declare @Anno INTEGER 
    'Declare @C_Anno VARCHAR(4)
    '    Declare @pruef INTEGER 
    'Declare @skf_soll INTEGER 
    'Declare @skf_haben INTEGER 
    'Declare @B_Bruttobetrag FLOAT 
    'Declare @dec_steuerproz FLOAT 
    'Declare @Benutzer VARCHAR(30)
    '    Declare @Systembenutzer INTEGER 
    'Declare @Barverkaufsrechnung BIT 
    'Declare @P_Bruttobetrag FLOAT 
    'Declare @P_Nettobetrag FLOAT 
    'Declare @Einzahlungsbetrag FLOAT 
    'Declare @Auszahlungsbetrag FLOAT 
    'Declare @Sollkonto2 INTEGER 
    'Declare @Habenkonto2 INTEGER 
    'Declare @ckennsoll2 VARCHAR(2)
    '    Declare @ckennhab2 VARCHAR(2)
    '    Declare @kkennungsoll2 INTEGER 
    'Declare @kkennunghab2 INTEGER 
    'Declare @Ben_Pos_Nr INTEGER 
    'Declare @Ben_Jahr INTEGER 
    'Declare @Position INTEGER 
    'Declare @Ganzer_Pos_Nr_Text VARCHAR(20)
    '    Declare @Bel_Jahr_Text VARCHAR(20)
    '    Declare @Bel_Jahr INTEGER 
    'Declare @Bel_Pos_Nr_Text VARCHAR(20)
    '    Declare @Bel_Pos_Nr INTEGER 
    'Declare @RechnungErstellen_B VARCHAR(24)
    '    Declare @Kassakonto VARCHAR(8)
    '    Declare @Kassanr INTEGER 
    'Declare @Rechnungsstatus BIT 
    'Declare @Zahlungsmittelbetraege FLOAT 
    'Declare @Korrekturbetrag FLOAT 
    'Declare @Waehrungsnr INTEGER 
    'Declare @Umrechnungsfaktor FLOAT 
    'Declare @LKW VARCHAR(50)
    '    Declare @Fahrer VARCHAR(50)
    '    Declare @Passnummer VARCHAR(50)
    '    Declare @Buchungsbetrag_B VARCHAR(50)
    '    Declare @Buchungsbetrag_P VARCHAR(50)
    '    Declare @belegdatumdavor DATETIME 
    'Declare @belegnrdavor INTEGER 
    'Declare @Bestandskonto VARCHAR(8)
    '    Declare @Erlöskonto VARCHAR(8)
    '    Declare @dec_steuerproz2 FLOAT 
    'Declare @LKW_B VARCHAR(50)
    '    Declare @Fahrer_B VARCHAR(50)
    '    Declare @Passnummer_B VARCHAR(50)
    '    Declare @AusbezahltAnFirma_B VARCHAR(50)
    '    Declare @AusbezahltAnFirma VARCHAR(50)
    '    Declare @Buchungsweg INTEGER 
    'Declare @i_beleg_refid INTEGER 
    'Declare @Positionszaehler INTEGER 
    'Declare @Belegkopfbetrag FLOAT 
    'Declare @relPeriode INTEGER 
    'Declare @c_sollhabenkz VARCHAR(1)
    '    Declare @i_fordkto INTEGER 
    'Declare @dec_aktuellersaldo FLOAT 
    'Declare @dec_sollsumme FLOAT 
    'Declare @dec_habensumme FLOAT 
    'Declare @eur_aktuellersaldo FLOAT 
    'Declare @updatekonto INTEGER 
    'Declare @i_op_refid INTEGER 
    'Declare @i_personenkonto INTEGER 
    'Declare @c_op_Typ VARCHAR(1)
    '    Declare @c_sprache VARCHAR(30)
    '    Declare @c_zahlziel VARCHAR(24)
    '    Declare @Skontotage INTEGER 
    'Declare @Nettotage INTEGER 
    'Declare @Skontodatum DATETIME 
    'Declare @Nettodatum DATETIME 
    'Declare @Skonto FLOAT 
    'Declare @c_ustidnr VARCHAR(50)
    '    Declare @opvorgangsbetrag FLOAT 
    'Declare @i_Sachkonto INTEGER 
    'Declare @gDatumKurz DATETIME 
    'Declare @BestandskontoInt INTEGER 
    'Declare @ErlöskontoInt INTEGER 
    'Declare @Kontenzähler INTEGER 
    'Declare @Schleifennr INTEGER 
    'Declare @aktuellersaldoDE FLOAT 
    'Declare @aktuellersaldoDB FLOAT 
    'Declare @aktuellersaldoBK FLOAT 
    'Declare @aktuellersaldoEK FLOAT 
    'Declare @Schleifenkonto INTEGER 
    'Declare @periodensoll FLOAT 
    'Declare @periodenhaben FLOAT 
    'Declare @Anmerkung VARCHAR(255)
    '    Declare @Einzelpreis FLOAT 


    'Set @belegdatum = @Datum@ 
    'Set @Jahr = (DATEPART(YEAR, @belegdatum) - 2000) 
    'Set @Monat = (DATEPART(MONTH, @belegdatum) - 1) 
    'Set @Tag = (DATEPART(DAY, @belegdatum) - 1) 
    'Set @gDatumKurz = '01.01.2000' 
    'Set @gDatumKurz = DATEADD(YEAR, @Jahr, @gDatumKurz) 
    'Set @gDatumKurz = DATEADD(MONTH, @Monat, @gDatumKurz) 
    'Set @gDatumKurz = DATEADD(DAY, @Tag, @gDatumKurz) 
    'Set @Anmerkung = '' 

    'Set @belegnr = @Nr@ 
    'Set @belegnrtext = ISNULL(@Rechnungsnr@, '') 
    'Set @Barverkaufsrechnung = ISNULL(@Barverkauf@, 0) 
    'Set @B_Bruttobetrag = ISNULL(@Bruttobetrag@, 0) 
    'Set @Buchungsbetrag_B = @B_Bruttobetrag 
    'Set @Kundennr = ISNULL(@Kunde@, 0) 

    'Set @Ben_Pos_Nr = (Select OWNFIELD_Positionsnr FROM Benutzer) 
    'Set @Ben_Jahr = (Select OWNFIELD_Jahr FROM Benutzer) 
    'Set @Buchungsweg = (Select ISNULL(OWNFIELD_Buchungsweg, 2) FROM Benutzer) 
    'Set @Rechnungsstatus = 1 

    'Set @Kassanr = (Select MIN(Nr) FROM Barverkauf_Kassen) 
    'Set @Kassakonto = (Select Bestandskonto FROM Barverkauf_Kassen WHERE Nr = @Kassanr) 
    'If ISNULL(@Kassakonto, '') = '' SET @Kassakonto = '2700' 

    '################## ------- RECHUNGSPOS------- ################## -> UNNÖTIG


    '    Declare PositionenRec CURSOR FOR ()

    '    Select Case
    'Rechnungspositionen.Position, 
    'Rechnungspositionen.Positionstyp, 
    'ISNULL(Rechnungspositionen.Bruttobetrag, 0), 
    'ISNULL(Rechnungspositionen.Einzelpreis, 0) 

    'FROM Rechnungspositionen INNER JOIN Rechnung 
    'On (Rechnungspositionen.Datum = Rechnung.Datum 
    'And Rechnungspositionen.Rechnungsnr = Rechnung.Nr) 

    'WHERE Rechnungspositionen.Datum = @belegdatum 
    'And Rechnungspositionen.Rechnungsnr = @belegnr 
    'And Rechnung.Barverkauf = 1 


    'OPEN PositionenRec
    'FETCH NEXT FROM PositionenRec INTO 
    '@Position, 
    '@Zaehler1, 
    '@P_Bruttobetrag, 
    '@Einzelpreis 

    'While @@FETCH_STATUS = 0 
    'BEGIN /* 03 */ 

    'If ((@Zaehler1 <> 1) Or (@P_Bruttobetrag = 0) Or (@Einzelpreis = 0)) 
    'BEGIN /* diese Position ist zu löschen */ 

    'DELETE FROM Rechnungspositionen 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Position = @Position 

    'UPDATE Rechnungspositionen Set Position = @Position 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Position = (@Position + 1) 

    'End /* diese Position ist zu löschen */ 

    'FETCH NEXT FROM PositionenRec INTO 
    '@Position, 
    '@Zaehler1, 
    '@P_Bruttobetrag, 
    '@Einzelpreis 

    'End /* 03 */ 
    'CLOSE PositionenRec 
    'DEALLOCATE PositionenRec


    '    Set @Position = (Select MIN(Position) FROM Rechnungspositionen 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Positionstyp = 1) 
    'If @Position Is NULL SET @Position = 0 
    'If @Position > 0 
    'BEGIN /* Positionsnummernberechnung nur bei vorhandenen Positionen */ 

    'Set @Ganzer_Pos_Nr_Text = (Select OWNFIELD_Pos_Nr_P FROM Rechnungspositionen 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Position = @Position) 

    'Set @Bel_Jahr_Text = SUBSTRING(@Ganzer_Pos_Nr_Text, 6, 2) 
    'Set @Bel_Jahr = ISNULL(CAST(@Bel_Jahr_Text As Integer), 0) 
    'Set @Bel_Pos_Nr_Text = SUBSTRING(@Ganzer_Pos_Nr_Text, 8, 5) 
    'Set @Bel_Pos_Nr = ISNULL(CAST(@Bel_Pos_Nr_Text As Integer), 0) 

    'If (@Ben_Jahr + 1) = @Bel_Jahr 
    'BEGIN /* Jahressprung */ 
    'Set @Ganzer_Pos_Nr_Text = ('4806/' + @Bel_Jahr_Text + '00001/00') 
    'Set @Bel_Pos_Nr = 1 
    'UPDATE Rechnungspositionen Set OWNFIELD_Pos_Nr_P = @Ganzer_Pos_Nr_Text 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr 
    'End /* Jahressprung */ 

    'UPDATE Benutzer Set OWNFIELD_Positionsnr = @Bel_Pos_Nr 
    'UPDATE Benutzer Set OWNFIELD_Jahr = @Bel_Jahr 

    'End /* Positionsnummernberechnung nur bei vorhandenen Positionen */ 


    'If @Kundennr = 0 
    'BEGIN /* Allgemeinen Kunden zuordnen */ 
    'Set @Kundennr = (Select MAX(Nr) FROM Kunden 
    'WHERE Kurzbez Like ('999999')) 

    'UPDATE Rechnung Set 
    'Kunde = @Kundennr 
    'WHERE Datum = @belegdatum And Nr = @belegnr 
    'End /* Allgemeinen Kunden zuordnen */ 


    'Set @Einzahlungsbetrag = (Select ISNULL(OWNFIELD_Einzahlung_P, 0) 
    'FROM Rechnungspositionen 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Position = @Position) 

    'Set @Auszahlungsbetrag = (Select ISNULL(OWNFIELD_Auszahlung_P, 0) 
    'FROM Rechnungspositionen 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Position = @Position) 

    'If @Einzahlungsbetrag < 0 SET @Anmerkung = (@Anmerkung + ' Stornobuchung ') 
    'If @Auszahlungsbetrag < 0 SET @Anmerkung = (@Anmerkung + ' Stornobuchung ')


    'UPDATE Rechnung Set 
    'RabattEingabeAbsolut = 0, 
    'Anmerkung = @Anmerkung, 
    'OWNFIELD_Einzahlung_B = @Einzahlungsbetrag, 
    'OWNFIELD_Auszahlung_B = @Auszahlungsbetrag, 
    'OWNFIELD_Pos_Nr_B = @Ganzer_Pos_Nr_Text, 
    'OWNFIELD_RechnungsnrText = @belegnrtext 
    'WHERE Datum = @belegdatum And Nr = @belegnr 



    'Set @Kundensuchnr = (Select ISNULL(OWNFIELD_Kundensuchnr, 0) FROM Kunden 
    'WHERE Nr = @Kundennr) 
    'If @Kundensuchnr > 0 
    'BEGIN /* nur löschen wenn eine Kundensuchnr vorhanden ist */ 
    'DELETE FROM Kunden 
    'WHERE Nr <> @Kundennr And ISNULL(OWNFIELD_Kundensuchnr, 0) = @Kundensuchnr 
    'End /* nur löschen wenn eine Kundensuchnr vorhanden ist */ 

    'Set @Zaehler1 = (Select COUNT(Position) FROM Rechnungspositionen 
    'WHERE Datum = @belegdatum And Rechnungsnr = @belegnr And Positionstyp = 1) 
    'If ((@Barverkaufsrechnung = 1) And (ISNULL(@Zaehler1, 0) > 0)) 
    'BEGIN /* nur Barverkaufsrechnungen mit Positionen in den Fibustapel insertieren */ 

    'Set @Systembenutzer = @Aktueller_Systembenutzer@ 
    'Set @Benutzer = (Select SUBSTRING(Bezeichnung, 1, 30) FROM Systembenutzer 
    'WHERE Nr = @Systembenutzer) 

    'Set @dt_creation = Getdate() 
    'Set @Anno = (DATEPART(YEAR, @dt_creation)) 
    'Set @C_Anno = CAST(@Anno As VARCHAR(4)) 
    'Set @Monat = (DATEPART(MONTH, @dt_creation)) 
    'Set @C_Monat = CAST(@Monat As VARCHAR(4)) 
    'Set @Tag = (DATEPART(DAY, @dt_creation)) 
    'Set @C_Tag = CAST(@Tag As VARCHAR(4)) 
    'Set @Stunde = (DATEPART(HOUR, @dt_creation)) 
    'Set @C_Stunde = CAST(@Stunde As VARCHAR(4)) 
    'Set @Minute = (DATEPART(MINUTE, @dt_creation)) 
    'Set @C_Minute = CAST(@Minute As VARCHAR(4)) 
    'Set @Sekunde = (DATEPART(SECOND, @dt_creation)) 
    'Set @C_Sekunde = CAST(@Sekunde As VARCHAR(4)) 

    'Set @Buchungsbelegkreis = 'KE' 
    'If @Auszahlungsbetrag <> 0 SET @Buchungsbelegkreis = 'KA' 

    'Set @Firmenname = ISNULL(@Firmenname@, '') 
    'Set @Ort = ISNULL(@Ort@, '') 
    'Set @Buchungstext_orig = (@Buchungsbelegkreis + '_' + @Ganzer_Pos_Nr_Text) 
    'Set @Buchungstext = SUBSTRING(@Buchungstext_orig, 4, 48) 
    'Set @Waehrung = @Waehrung@ 

    'Set @Jahr = (DATEPART(YEAR, @belegdatum)) 
    'Set @Periode = (DATEPART(MONTH, @belegdatum)) 


    '################## ------- BUCHUNGSDATEN------- ################## 

    'Set @Kontonummer = (Select Kontonummer FROM Kunden WHERE Nr = @Kundennr) 
    'Set @Habenkonto = CAST(@Kontonummer As Integer) 
    'Set @Sollkonto = 0 

    'Set @MandantNr = (Select OWNFIELD_REWE_Mandantennr FROM Benutzer) 
    'If ISNULL(@MandantNr, 0) = 0
    'BEGIN /* Mandantennr 7 setzen */ 
    'Set @MandantNr = 7 
    'UPDATE Benutzer Set OWNFIELD_REWE_Mandantennr = 7 
    'End /* Mandantennr 7 setzen */ 


    'Set @relPeriode = (Select ISNULL(OWNFIELD_RelPeriode, 2) FROM Benutzer) 

    'Set @relPeriode = (@Periode - @relPeriode + 1) 
    'If @relPeriode <= 0 SET @relPeriode = (@relPeriode + 12) 
    'If @relPeriode > @Periode SET @Jahr = (@Jahr - 1) 


    'Set @i_personenkonto = @Habenkonto /* die ersten 2 Kontovoraussetzungen schaffen */ 

    'Set @i_fordkto = (Select [FIBU2].dbo.fibu_konto.i_fordkto FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @i_personenkonto 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'If ISNULL(@i_fordkto, 0) = 0 Set @i_fordkto = 2000 

    'DELETE FROM OWNTABLE_Verbuchungskonten 

    'INSERT INTO OWNTABLE_Verbuchungskonten ( 
    'OWNFIELD_Nr, 
    'OWNFIELD_Konto, 
    'OWNFIELD_Soll, 
    'OWNFIELD_Haben) 
    'VALUES ( 
    '1, 
    '@i_personenkonto, 
    '0, 
    '0) 

    'INSERT INTO OWNTABLE_Verbuchungskonten ( 
    'OWNFIELD_Nr, 
    'OWNFIELD_Konto, 
    'OWNFIELD_Soll, 
    'OWNFIELD_Haben) 
    'VALUES ( 
    '2, 
    '@i_fordkto, 
    '0, 
    '0) 

    'Set @Kontenzähler = 2 


    'Set @ckennsoll = (Select [FIBU2].dbo.fibu_konto.c_kontoart FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'If @ckennsoll Is NULL SET @ckennsoll = 'LE' 

    'Set @kkennungsoll = (Select [FIBU2].dbo.fibu_konto.i_kennung FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'If @kkennungsoll Is NULL SET @kkennungsoll = 0 

    'Set @ckennhab = (Select [FIBU2].dbo.fibu_konto.c_kontoart FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Habenkonto 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'Set @ckennhab = 'LE' 

    'Set @kkennunghab = (Select [FIBU2].dbo.fibu_konto.i_kennung FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Habenkonto 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'Set @kkennunghab = 0 

    'Set @pruef = 0 
    'Set @ZSzeilenr = 0 
    'Set @Belegart = 1 
    'Set @Splitart = 0 

    'Set @StapelAZK = (Select [FIBU2].dbo.fibu_stapelart.i_stapel_refid 
    'FROM [FIBU2].dbo.fibu_stapelart 
    'WHERE [FIBU2].dbo.fibu_stapelart.c_stapelname Like 'Auszahlungskasse 1' 
    'And [FIBU2].dbo.fibu_stapelart.i_firm_refid = @MandantNr) 

    'Set @Zaehler1 = (Select COUNT([FIBU2].dbo.fibu_stapel.i_lfdnr) FROM [FIBU2].dbo.fibu_stapel 
    'WHERE ISNULL([FIBU2].dbo.fibu_stapel.si_pruef, 0) > 0) 
    'If ISNULL(@Zaehler1, 0) > 0
    'BEGIN /* der Stapel Auszahlungskasse 1 wird gerade geprüft oder gebucht */ 

    'Set @StapelAZK = (Select [FIBU2].dbo.fibu_stapelart.i_stapel_refid 
    'FROM [FIBU2].dbo.fibu_stapelart 
    'WHERE [FIBU2].dbo.fibu_stapelart.c_stapelname Like 'Auszahlungskasse 2' 
    'And [FIBU2].dbo.fibu_stapelart.i_firm_refid = @MandantNr) 

    'End /* der Stapel Auszahlungskasse 1 wird gerade geprüft oder gebucht */ 


    'Set @ZSBuchnr = (Select MAX([FIBU2].dbo.fibu_stapel.i_lfdnr)+1 
    'FROM [FIBU2].dbo.fibu_stapel 
    'WHERE [FIBU2].dbo.fibu_stapel.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_stapel.i_stapel_refid = @StapelAZK) 
    'If ((@ZSBuchnr Is NULL) Or (@ZSBuchnr = 0)) SET @ZSBuchnr = 1 


    'Set @c_protokoll_id = (CAST(@StapelAZK As VARCHAR(4)) + '-' 
    '+ CAST(@ZSBuchnr AS VARCHAR(4)) + '-' 
    '+ @C_Anno + '-' 
    '+ REPLICATE('0', 2-LEN(@C_Monat)) + @C_Monat + '-' 
    '+ REPLICATE('0', 2-LEN(@C_Tag)) + @C_Tag + ' ' 
    '+ REPLICATE('0', 2-LEN(@C_Stunde)) + @C_Stunde + ':' 
    '+ REPLICATE('0', 2-LEN(@C_Minute)) + @C_Minute + ':' 
    '+ REPLICATE('0', 2-LEN(@C_Sekunde)) + @C_Sekunde) 



    'Declare lc_ProjekteRec CURSOR FOR ()

    '    Select Case
    'Rechnungspositionen.Position, 
    'Rechnungspositionen.Nettobetrag, 
    'Rechnungspositionen.Bruttobetrag, 
    'ISNULL(Rechnungspositionen.USt, 0), 
    'ISNULL(Rechnungspositionen.OWNFIELD_LKW_P, ''), 
    'ISNULL(Rechnungspositionen.OWNFIELD_Fahrer_P, ''), 
    'ISNULL(Rechnungspositionen.OWNFIELD_Passnummer_P, ''), 
    'ISNULL(Rechnungspositionen.OWNFIELD_AusbezahltAnFirma_P, ''), 
    'ISNULL(Artikel.Erloeskonto_Inland, ''), 
    'ISNULL(Artikel.OWNFIELD_Bestandskonto, ''), 
    'ISNULL(Rechnung.OWNFIELD_LKW_B, ''), 
    'ISNULL(Rechnung.OWNFIELD_Fahrer_B, ''), 
    'ISNULL(Rechnung.OWNFIELD_Passnummer_B, ''), 
    'ISNULL(Rechnung.OWNFIELD_AusbezahltAnFirma_B, ''), 
    'Rechnung.Waehrungsnr, 
    'Rechnung.Umrechnungsfaktor 

    'FROM Rechnungspositionen INNER JOIN Rechnung 
    'On (Rechnungspositionen.Datum = Rechnung.Datum 
    'And Rechnungspositionen.Rechnungsnr = Rechnung.Nr) 
    'INNER JOIN Artikel On (Rechnungspositionen.Artikelnr = Artikel.Nr) 

    'WHERE Rechnungspositionen.Datum = @belegdatum 
    'And Rechnungspositionen.Rechnungsnr = @belegnr 
    'And Rechnungspositionen.Positionstyp = 1 
    'And Rechnung.Barverkauf = 1 

    'OPEN lc_ProjekteRec
    'FETCH NEXT FROM lc_ProjekteRec INTO 
    '@Positionszaehler, 
    '@P_Nettobetrag, 
    '@P_Bruttobetrag, 
    '@dec_steuerproz, 
    '@LKW, 
    '@Fahrer, 
    '@Passnummer, 
    '@AusbezahltAnFirma, 
    '@Erlöskonto, 
    '@Bestandskonto, 
    '@LKW_B, 
    '@Fahrer_B, 
    '@Passnummer_B, 
    '@AusbezahltAnFirma_B, 
    '@Waehrungsnr, 
    '@Umrechnungsfaktor 

    'While @@FETCH_STATUS = 0 


    '################## ------- BUCHUNGEN------- ################## 

    'BEGIN /* 03 */ 

    'Set @BestandskontoInt = CAST(@Bestandskonto As Integer) 
    'Set @ErlöskontoInt = CAST(@Erlöskonto As Integer) 

    'Set @Kontenzähler = (@Kontenzähler + 1) 

    'INSERT INTO OWNTABLE_Verbuchungskonten ( 
    'OWNFIELD_Nr, 
    'OWNFIELD_Konto, 
    'OWNFIELD_Soll, 
    'OWNFIELD_Haben) 
    'VALUES ( 
    '@Kontenzähler, 
    '@BestandskontoInt, 
    '0, 
    '0) 

    'Set @Kontenzähler = (@Kontenzähler + 1) 

    'INSERT INTO OWNTABLE_Verbuchungskonten ( 
    'OWNFIELD_Nr, 
    'OWNFIELD_Konto, 
    'OWNFIELD_Soll, 
    'OWNFIELD_Haben) 
    'VALUES ( 
    '@Kontenzähler, 
    '@ErlöskontoInt, 
    '0, 
    '0) 


    'Declare Schleifen1rec CURSOR FOR ()

    '    Select Case OWNFIELD_Nr, OWNFIELD_Konto 
    'FROM OWNTABLE_Verbuchungskonten 

    'OPEN Schleifen1rec
    'FETCH NEXT FROM Schleifen1rec INTO 
    '@Schleifennr, 
    '@Schleifenkonto 

    'While @@FETCH_STATUS = 0 
    'BEGIN /* 03 */ 

    'Set @Zaehler1 = (Select COUNT([FIBU2].dbo.fibu_periodensaldo.i_konto) 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'If ISNULL(@Zaehler1, 0) = 0
    'BEGIN /* noch keine EB vorhanden */ 

    'Set @dec_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @Schleifenkonto) 
    'If @dec_aktuellersaldo Is NULL SET @dec_aktuellersaldo = 0 

    'INSERT INTO [FIBU2].dbo.fibu_periodensaldo ( 
    '[FIBU2].dbo.fibu_periodensaldo.i_firm_refid, 
    '[FIBU2].dbo.fibu_periodensaldo.si_jahr, 
    '[FIBU2].dbo.fibu_periodensaldo.i_konto, 
    '[FIBU2].dbo.fibu_periodensaldo.i_perioden, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_eroeff, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_abschluss, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_1, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_1, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_2, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_2, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_3, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_3, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_4, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_4, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_5, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_5, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_6, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_6, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_7, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_7, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_8, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_8, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_9, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_9, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_10, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_10, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_11, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_11, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_12, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_12, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_13, 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_13, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_eroeff, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_abschluss, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_1, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_1, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_2, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_2, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_3, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_3, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_4, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_4, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_5, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_5, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_6, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_6, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_7, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_7, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_8, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_8, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_9, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_9, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_10, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_10, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_11, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_11, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_12, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_12, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_13, 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_13, 
    '[FIBU2].dbo.fibu_periodensaldo.i_buchungskreis) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Schleifenkonto, 
    '0, 
    '@dec_aktuellersaldo, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '@dec_aktuellersaldo, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '1) 

    'End /* noch keine EB vorhanden */ 

    'FETCH NEXT FROM Schleifen1rec INTO 
    '@Schleifennr, 
    '@Schleifenkonto 

    'End /* 03 */ 
    'CLOSE Schleifen1rec 
    'DEALLOCATE Schleifen1rec


    '################## ------- END BUCHUNGEN------- ################## 



    '    If ((@LKW <> '') OR (@Fahrer <> '') OR (@Passnummer <> '') OR (@AusbezahltAnFirma <> '')) 
    'BEGIN /* nur Rechnungsupdate bei solchen Einträgen auf Positionsebene */ 
    'If @LKW_B = '' SET @LKW_B = @LKW 
    'If @Fahrer_B = '' SET @Fahrer_B = @Fahrer 
    'If @Passnummer_B = '' SET @Passnummer_B = @Passnummer 
    'If @AusbezahltAnFirma_B = '' SET @AusbezahltAnFirma_B = @AusbezahltAnFirma 

    'UPDATE Rechnung Set 
    'OWNFIELD_LKW_B = @LKW_B, 
    'OWNFIELD_Fahrer_B = @Fahrer_B, 
    'OWNFIELD_Passnummer_B = @Passnummer_B, 
    'OWNFIELD_AusbezahltAnFirma_B = @AusbezahltAnFirma_B 
    'WHERE Datum = @belegdatum And Nr = @belegnr 
    'End /* nur Rechnungsupdate bei solchen Einträgen auf Positionsebene */ 

    'Set @Buchungstext_orig = 
    '(@Buchungstext_orig + '_' + @LKW_B + '_' + @AusbezahltAnFirma_B + '_' + @Fahrer_B + '_' 
    '+ @Passnummer_B) 
    'Set @Buchungstext = SUBSTRING(@Buchungstext_orig, 4, 48) 
    'Set @BuchungstextBemerkung = SUBSTRING(@Buchungstext_orig, 49, 28) 


    'Set @ZSzeilenr = (@ZSzeilenr + 1) /* Erster Datensatz der ersten Buchungszeile */ 
    'Set @Buchungsbetrag_P = @P_Bruttobetrag 

    'If @Einzahlungsbetrag <> 0 /* bei Einzahlung und Bestandskonto im Soll */ 
    'Set @Sollkonto2 = CAST(@Bestandskonto As Integer) 
    'Set @Habenkonto2 = 0 /* gilt für den ersten Datensatz der ersten Buchungszeile pro Artikel */ 
    'Set @dec_steuerproz2 = 0 
    'Set @Rechnungsstatus = 0 
    'Set @Belegkopfbetrag = @B_Bruttobetrag 

    'Set @ckennsoll2 = (Select [FIBU2].dbo.fibu_konto.c_kontoart FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'If @ckennsoll2 Is NULL SET @ckennsoll2 = 'LE' 
    'Set @ckennsoll2 = 'KO' 

    'Set @kkennungsoll2 = (Select [FIBU2].dbo.fibu_konto.i_kennung FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'If @kkennungsoll2 Is NULL SET @kkennungsoll2 = 0 
    'Set @kkennungsoll2 = 0 

    'Set @ckennhab2 = (Select [FIBU2].dbo.fibu_konto.c_kontoart FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Habenkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'Set @ckennhab2 = 'LE' 

    'Set @kkennunghab2 = (Select [FIBU2].dbo.fibu_konto.i_kennung FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Habenkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 
    'Set @kkennunghab2 = 0 


    'If @Auszahlungsbetrag <> 0 /* Umkehrung von Soll und Habenkonto und Betragsvorzeichenwechsel */ 
    'BEGIN /* Auszahlung  und Gutschrift */ 
    'Set @Sollkonto2 = CAST(@Erlöskonto As Integer) 
    'Set @Habenkonto2 = 0 
    'Set @ckennhab2 = 'LE' 
    'Set @ckennsoll2 = 'KO' 
    'Set @kkennunghab2 = 0 
    'Set @kkennungsoll2 = 0 
    'Set @Buchungsbetrag_B = @B_Bruttobetrag * (-1) 
    'Set @Buchungsbetrag_P = @P_Bruttobetrag * (-1) 
    'Set @dec_steuerproz2 = @dec_steuerproz 
    'Set @Belegkopfbetrag = @B_Bruttobetrag * (-2) 
    'End /* Auszahlung  und Gutschrift */ 


    '################## ------- STAPELBUCHUNGEN------- ################## 

    'If @Buchungsweg = 2 
    'BEGIN /* Buchung in den Stapel */ 

    'INSERT INTO [FIBU2].dbo.fibu_stapel (
    '[FIBU2].dbo.fibu_stapel.i_firm_refid, 
    '[FIBU2].dbo.fibu_stapel.i_stapel_refid, 
    '[FIBU2].dbo.fibu_stapel.i_lfdnr, 
    '[FIBU2].dbo.fibu_stapel.si_zeilenr, 
    '[FIBU2].dbo.fibu_stapel.si_belegart, 
    '[FIBU2].dbo.fibu_stapel.si_splitart, 
    '[FIBU2].dbo.fibu_stapel.d_beleg, 
    '[FIBU2].dbo.fibu_stapel.d_valuta, 
    '[FIBU2].dbo.fibu_stapel.c_urbelegid, 
    '[FIBU2].dbo.fibu_stapel.c_op_beleg, 
    '[FIBU2].dbo.fibu_stapel.c_buchtext, 
    '[FIBU2].dbo.fibu_stapel.si_jahr, 
    '[FIBU2].dbo.fibu_stapel.si_periode, 
    '[FIBU2].dbo.fibu_stapel.i_sollkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_habenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.i_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.dec_betrag, 
    '[FIBU2].dbo.fibu_stapel.c_waehrung, 
    '[FIBU2].dbo.fibu_stapel.dec_eigenbetrag, 
    '[FIBU2].dbo.fibu_stapel.eur_betrag, 
    '[FIBU2].dbo.fibu_stapel.i_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.i_steuerart_refid, 
    '[FIBU2].dbo.fibu_stapel.i_steuer_refid, 
    '[FIBU2].dbo.fibu_stapel.i_eg_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_stapel.dec_steuer, 
    '[FIBU2].dbo.fibu_stapel.dec_eigensteuer, 
    '[FIBU2].dbo.fibu_stapel.eur_steuerbetrag, 
    '[FIBU2].dbo.fibu_stapel.dec_steuerproz, 
    '[FIBU2].dbo.fibu_stapel.i_auftragid, 
    '[FIBU2].dbo.fibu_stapel.i_koart_refid, 
    '[FIBU2].dbo.fibu_stapel.si_pruef, 
    '[FIBU2].dbo.fibu_stapel.c_bemerk, 
    '[FIBU2].dbo.fibu_stapel.i_buchungskreis, 
    '[FIBU2].dbo.fibu_stapel.i_bank_flags, 
    '[FIBU2].dbo.fibu_stapel.i_quelle_modul, 
    '[FIBU2].dbo.fibu_stapel.c_quelle_maske, 
    '[FIBU2].dbo.fibu_stapel.si_manipulation, 
    '[FIBU2].dbo.fibu_stapel.dt_creation, 
    '[FIBU2].dbo.fibu_stapel.c_protokoll_id) 

    'VALUES (
    '@MandantNr, 
    '@StapelAZK, 
    '@ZSBuchnr, 
    '@ZSzeilenr, 
    '@Belegart, 
    '@Splitart, 
    '@belegdatum, 
    '@belegdatum, 
    '@belegnrtext, 
    '@belegnrtext, 
    '@Buchungstext, 
    '@Jahr, 
    '@Periode, 
    '@Sollkonto2, 
    '@ckennsoll2, 
    '@kkennungsoll2, 
    '@Habenkonto2, 
    '@ckennhab2, 
    '@kkennunghab2, 
    '@Buchungsbetrag_P, 
    '@Waehrung, 
    '0, 
    '@Buchungsbetrag_P, 
    '0, 
    '0, 
    '0, 
    '0, 
    ''K', 
    '0, 
    '0, 
    '0,
    '@dec_steuerproz2, 
    '0, 
    '0, 
    '@pruef, 
    '@BuchungstextBemerkung, 
    '1, 
    '0, 
    '21,
    ''FlexImport', 
    '0, 
    '@dt_creation, 
    '@c_protokoll_id) 

    'End /* Buchung In den Stapel */ 

    '################## ------- END STAPELBUCHUNGEN------- ################## 


    '################## ------- BUCHUNGEN------- ################## 

    'If @Buchungsweg = 3 
    'BEGIN /* Direktverbuchung */ 


    'Set @i_beleg_refid = (Select [FIBU2].dbo.fibu_nummern.i_nummer_refid + 1 
    'FROM [FIBU2].dbo.fibu_nummern 
    'WHERE [FIBU2].dbo.fibu_nummern.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_nummern.c_nummernart Like 'Buchungsnummer') 

    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* einfache Buchung */ 
    'UPDATE [FIBU2].dbo.fibu_nummern Set 
    '[FIBU2].dbo.fibu_nummern.i_nummer_refid = @i_beleg_refid 
    'WHERE [FIBU2].dbo.fibu_nummern.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_nummern.c_nummernart Like 'Buchungsnummer' 

    'Set @i_op_refid = @i_beleg_refid 
    'Set @c_op_Typ = 'g' 
    'End /* einfache Buchung */ 

    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* doppelte Buchung mit doppeltem Nummernzählersprung */ 
    'UPDATE [FIBU2].dbo.fibu_nummern Set 
    '[FIBU2].dbo.fibu_nummern.i_nummer_refid = (@i_beleg_refid + 1) 
    'WHERE [FIBU2].dbo.fibu_nummern.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_nummern.c_nummernart Like 'Buchungsnummer' 

    'Set @i_op_refid = (@i_beleg_refid + 1) 
    'Set @c_op_Typ = 'r' 
    'End /* doppelte Buchung mit doppeltem Nummernzählersprung */ 


    'If @Positionszaehler = 1 
    'BEGIN /* Belegkopfinsert nur einmal pro Beleg */ 

    'INSERT INTO [FIBU2].dbo.fibu_belegkopf ( 
    '[FIBU2].dbo.fibu_belegkopf.i_firm_refid, 
    '[FIBU2].dbo.fibu_belegkopf.si_jahr, 
    '[FIBU2].dbo.fibu_belegkopf.si_periode, 
    '[FIBU2].dbo.fibu_belegkopf.i_beleg_refid, 
    '[FIBU2].dbo.fibu_belegkopf.d_beleg, 
    '[FIBU2].dbo.fibu_belegkopf.c_urbelegid, 
    '[FIBU2].dbo.fibu_belegkopf.si_belegart, 
    '[FIBU2].dbo.fibu_belegkopf.c_buchtext, 
    '[FIBU2].dbo.fibu_belegkopf.dec_betrag, 
    '[FIBU2].dbo.fibu_belegkopf.c_waehrung, 
    '[FIBU2].dbo.fibu_belegkopf.dec_fremdbetrag, 
    '[FIBU2].dbo.fibu_belegkopf.eur_betrag, 
    '[FIBU2].dbo.fibu_belegkopf.i_auftragid, 
    '[FIBU2].dbo.fibu_belegkopf.d_gebucht, 
    '[FIBU2].dbo.fibu_belegkopf.c_benutzer, 
    '[FIBU2].dbo.fibu_belegkopf.i_buchungskreis, 
    '[FIBU2].dbo.fibu_belegkopf.i_quelle_modul, 
    '[FIBU2].dbo.fibu_belegkopf.c_quelle_maske, 
    '[FIBU2].dbo.fibu_belegkopf.si_manipulation, 
    '[FIBU2].dbo.fibu_belegkopf.i_stapel_refid, 
    '[FIBU2].dbo.fibu_belegkopf.c_protokoll_id) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Periode, 
    '@i_beleg_refid, 
    '@gDatumKurz, 
    '@belegnrtext, 
    '@Belegart, 
    '@Buchungstext, 
    '@Belegkopfbetrag, 
    '@Waehrung, 
    '@Belegkopfbetrag, 
    '@Belegkopfbetrag, 
    '0, 
    '@dt_creation, 
    '@Benutzer, 
    '1, 
    '21, 
    ''Fleximport', 
    '0, 
    '2, 
    '@c_protokoll_id) 

    'End /* Belegkopfinsert nur einmal pro Beleg */ 


    'Set @ckennsoll2 = 'KO' /* erste Buchungszeile */ 
    'Set @c_sollhabenkz = 'S' 

    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* Einzahlung */ 
    'Set @Sollkonto2 = CAST(@Bestandskonto As Integer) 
    'Set @Habenkonto2 = CAST(@Kontonummer As Integer) 

    'Set @dec_sollsumme = (Select OWNFIELD_Soll FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Soll = (@dec_sollsumme + @P_Bruttobetrag) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 
    'End /* Einzahlung */ 


    'Else BEGIN /* Auszahlung */ 
    'Set @Sollkonto2 = CAST(@Erlöskonto As Integer) 
    'Set @Habenkonto2 = 0 

    'Set @dec_sollsumme = (Select OWNFIELD_Soll FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Soll = (@dec_sollsumme + @P_Bruttobetrag * (-1)) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 
    'End /* Auszahlung */ 


    'INSERT INTO [FIBU2].dbo.fibu_belegzeile ( 
    '[FIBU2].dbo.fibu_belegzeile.i_firm_refid, 
    '[FIBU2].dbo.fibu_belegzeile.si_jahr, 
    '[FIBU2].dbo.fibu_belegzeile.si_periode, 
    '[FIBU2].dbo.fibu_belegzeile.si_rel_periode, 
    '[FIBU2].dbo.fibu_belegzeile.i_beleg_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_zeilen_refid, 
    '[FIBU2].dbo.fibu_belegzeile.c_kennung, 
    '[FIBU2].dbo.fibu_belegzeile.i_konto, 
    '[FIBU2].dbo.fibu_belegzeile.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_belegzeile.i_steuer_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_gegenkonto, 
    '[FIBU2].dbo.fibu_belegzeile.dec_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.c_waehrung, 
    '[FIBU2].dbo.fibu_belegzeile.dec_fremdbetrag, 
    '[FIBU2].dbo.fibu_belegzeile.eur_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.d_beleg, 
    '[FIBU2].dbo.fibu_belegzeile.d_gebucht, 
    '[FIBU2].dbo.fibu_belegzeile.c_urbelegid, 
    '[FIBU2].dbo.fibu_belegzeile.si_belegart, 
    '[FIBU2].dbo.fibu_belegzeile.c_buchtext, 
    '[FIBU2].dbo.fibu_belegzeile.i_buchungskreis) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Periode, 
    '@relPeriode, 
    '@i_beleg_refid, 
    '@ZSzeilenr, 
    '@ckennsoll2, 
    '@Sollkonto2, 
    '@c_sollhabenkz, 
    '0, 
    '@Habenkonto2, 
    '@Buchungsbetrag_P, 
    '@Waehrung, 
    '@Buchungsbetrag_P, 
    '@Buchungsbetrag_P, 
    '@gDatumKurz, 
    '@gDatumKurz, 
    '@belegnrtext, 
    '@Belegart, 
    '@Buchungstext, 
    '1) 

    'End /* Direktverbuchung */ 

    '################## ------- END BUCHUNGEN------- ################## 


    '################## ------- STAPELBUCHUNGEN------- ################## 


    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* bei Auszahlung die zweite Datenzeile zur ersten Bestandskontobuchung */ 


    'Set @ZSzeilenr = (@ZSzeilenr + 1) /* für die zweite Buchungszeile */ 


    'If @Buchungsweg = 2 
    'BEGIN /* Stapelverbuchung */ 


    'Set @Sollkonto2 = 0 
    'Set @Habenkonto2 = CAST(@Bestandskonto As Integer) 
    'Set @ckennhab2 = 'KO' 
    'Set @ckennsoll2 = 'LE' 
    'Set @kkennunghab2 = 0 
    'Set @kkennungsoll2 = 0 
    'Set @dec_steuerproz2 = 0 


    'INSERT INTO [FIBU2].dbo.fibu_stapel (
    '[FIBU2].dbo.fibu_stapel.i_firm_refid, 
    '[FIBU2].dbo.fibu_stapel.i_stapel_refid, 
    '[FIBU2].dbo.fibu_stapel.i_lfdnr, 
    '[FIBU2].dbo.fibu_stapel.si_zeilenr, 
    '[FIBU2].dbo.fibu_stapel.si_belegart, 
    '[FIBU2].dbo.fibu_stapel.si_splitart, 
    '[FIBU2].dbo.fibu_stapel.d_beleg, 
    '[FIBU2].dbo.fibu_stapel.d_valuta, 
    '[FIBU2].dbo.fibu_stapel.c_urbelegid, 
    '[FIBU2].dbo.fibu_stapel.c_op_beleg, 
    '[FIBU2].dbo.fibu_stapel.c_buchtext, 
    '[FIBU2].dbo.fibu_stapel.si_jahr, 
    '[FIBU2].dbo.fibu_stapel.si_periode, 
    '[FIBU2].dbo.fibu_stapel.i_sollkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_habenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.i_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.dec_betrag, 
    '[FIBU2].dbo.fibu_stapel.c_waehrung, 
    '[FIBU2].dbo.fibu_stapel.dec_eigenbetrag, 
    '[FIBU2].dbo.fibu_stapel.eur_betrag, 
    '[FIBU2].dbo.fibu_stapel.i_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.i_steuerart_refid, 
    '[FIBU2].dbo.fibu_stapel.i_steuer_refid, 
    '[FIBU2].dbo.fibu_stapel.i_eg_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_stapel.dec_steuer, 
    '[FIBU2].dbo.fibu_stapel.dec_eigensteuer, 
    '[FIBU2].dbo.fibu_stapel.eur_steuerbetrag, 
    '[FIBU2].dbo.fibu_stapel.dec_steuerproz, 
    '[FIBU2].dbo.fibu_stapel.i_auftragid, 
    '[FIBU2].dbo.fibu_stapel.i_koart_refid, 
    '[FIBU2].dbo.fibu_stapel.si_pruef, 
    '[FIBU2].dbo.fibu_stapel.c_bemerk, 
    '[FIBU2].dbo.fibu_stapel.i_buchungskreis, 
    '[FIBU2].dbo.fibu_stapel.i_bank_flags, 
    '[FIBU2].dbo.fibu_stapel.i_quelle_modul, 
    '[FIBU2].dbo.fibu_stapel.c_quelle_maske, 
    '[FIBU2].dbo.fibu_stapel.si_manipulation, 
    '[FIBU2].dbo.fibu_stapel.dt_creation, 
    '[FIBU2].dbo.fibu_stapel.c_protokoll_id) 

    'VALUES (
    '@MandantNr, 
    '@StapelAZK, 
    '@ZSBuchnr, 
    '@ZSzeilenr, 
    '@Belegart, 
    '@Splitart, 
    '@belegdatum, 
    '@belegdatum, 
    '@belegnrtext, 
    '@belegnrtext, 
    '@Buchungstext, 
    '@Jahr, 
    '@Periode, 
    '@Sollkonto2, 
    '@ckennsoll2, 
    '@kkennungsoll2, 
    '@Habenkonto2, 
    '@ckennhab2, 
    '@kkennunghab2, 
    '@Buchungsbetrag_P, 
    '@Waehrung, 
    '0, 
    '@Buchungsbetrag_P, 
    '0, 
    '0, 
    '0, 
    '0, 
    ''K', 
    '0, 
    '0, 
    '0,
    '@dec_steuerproz2, 
    '0, 
    '0, 
    '@pruef, 
    '@BuchungstextBemerkung, 
    '1, 
    '0, 
    '21,
    ''FlexImport', 
    '0, 
    '@dt_creation, 
    '@c_protokoll_id) 

    'End /* Stapelverbuchung */ 

    '################## -------END STAPELBUCHUNGEN------- ################## 


    'If @Buchungsweg = 3 
    'BEGIN /* Direktverbuchung der zweiten Datenzeile */ 

    'Set @Sollkonto2 = CAST(@Bestandskonto As Integer) 
    'Set @Habenkonto2 = 0 

    'Set @ckennsoll2 = 'KO' 
    'Set @c_sollhabenkz = 'H' 


    'Set @dec_habensumme = (Select OWNFIELD_Haben FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Haben = (@dec_habensumme + @P_Bruttobetrag * (-1)) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 


    'INSERT INTO [FIBU2].dbo.fibu_belegzeile ( 
    '[FIBU2].dbo.fibu_belegzeile.i_firm_refid, 
    '[FIBU2].dbo.fibu_belegzeile.si_jahr, 
    '[FIBU2].dbo.fibu_belegzeile.si_periode, 
    '[FIBU2].dbo.fibu_belegzeile.si_rel_periode, 
    '[FIBU2].dbo.fibu_belegzeile.i_beleg_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_zeilen_refid, 
    '[FIBU2].dbo.fibu_belegzeile.c_kennung, 
    '[FIBU2].dbo.fibu_belegzeile.i_konto, 
    '[FIBU2].dbo.fibu_belegzeile.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_belegzeile.i_steuer_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_gegenkonto, 
    '[FIBU2].dbo.fibu_belegzeile.dec_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.c_waehrung, 
    '[FIBU2].dbo.fibu_belegzeile.dec_fremdbetrag, 
    '[FIBU2].dbo.fibu_belegzeile.eur_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.d_beleg, 
    '[FIBU2].dbo.fibu_belegzeile.d_gebucht, 
    '[FIBU2].dbo.fibu_belegzeile.c_urbelegid, 
    '[FIBU2].dbo.fibu_belegzeile.si_belegart, 
    '[FIBU2].dbo.fibu_belegzeile.c_buchtext, 
    '[FIBU2].dbo.fibu_belegzeile.i_buchungskreis) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Periode, 
    '@relPeriode, 
    '@i_beleg_refid, 
    '@ZSzeilenr, 
    '@ckennsoll2, 
    '@Sollkonto2, 
    '@c_sollhabenkz, 
    '0, 
    '@Habenkonto2, 
    '@Buchungsbetrag_P, 
    '@Waehrung, 
    '@Buchungsbetrag_P, 
    '@Buchungsbetrag_P, 
    '@gDatumKurz, 
    '@gDatumKurz, 
    '@belegnrtext, 
    '@Belegart, 
    '@Buchungstext, 
    '1) 

    'End /* Direktverbuchung der zweiten Datenzeile */ 

    'End /* bei Auszahlung die zweite Datenzeile zur Bestandskontobuchung */ 


    'FETCH NEXT FROM lc_ProjekteRec INTO 
    '@Positionszaehler, 
    '@P_Nettobetrag, 
    '@P_Bruttobetrag, 
    '@dec_steuerproz, 
    '@LKW, 
    '@Fahrer, 
    '@Passnummer, 
    '@AusbezahltAnFirma, 
    '@Erlöskonto, 
    '@Bestandskonto, 
    '@LKW_B, 
    '@Fahrer_B, 
    '@Passnummer_B, 
    '@AusbezahltAnFirma_B, 
    '@Waehrungsnr, 
    '@Umrechnungsfaktor 

    'End /* 03 */ 
    'CLOSE lc_ProjekteRec 
    'DEALLOCATE lc_ProjekteRec



    '    Set @ZSzeilenr = (@ZSzeilenr + 1) 



    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* Auszahlung  und erster Datensatz der zweiten Buchungszeile */ 

    'Set @Sollkonto = CAST(@Kontonummer As Integer) 
    'Set @Habenkonto = 0 
    'Set @ckennhab = 'LE' 
    'Set @ckennsoll = 'DE' 
    'Set @kkennunghab = 0 
    'Set @kkennungsoll = 0 
    'Set @dec_steuerproz2 = NULL 

    'End /* Auszahlung  und erster Datensatz der zweiten Buchungszeile */ 


    'Else BEGIN /* zweiter Datensatz der ersten Buchungszeile */ 

    'Set @Sollkonto = 0 
    'Set @Habenkonto = CAST(@Kontonummer As Integer) 
    'Set @ckennhab = 'DE' 
    'Set @ckennsoll = 'LE' 
    'Set @kkennunghab = 0 
    'Set @kkennungsoll = 0 
    'Set @dec_steuerproz2 = NULL 

    'End /* zweiter Datensatz der ersten Buchungszeile */ 




    'If @Buchungsweg = 2 
    'BEGIN /* Stapelverbuchung */ 

    'INSERT INTO [FIBU2].dbo.fibu_stapel (
    '[FIBU2].dbo.fibu_stapel.i_firm_refid, 
    '[FIBU2].dbo.fibu_stapel.i_stapel_refid, 
    '[FIBU2].dbo.fibu_stapel.i_lfdnr, 
    '[FIBU2].dbo.fibu_stapel.si_zeilenr, 
    '[FIBU2].dbo.fibu_stapel.si_belegart, 
    '[FIBU2].dbo.fibu_stapel.si_splitart, 
    '[FIBU2].dbo.fibu_stapel.d_beleg, 
    '[FIBU2].dbo.fibu_stapel.d_valuta, 
    '[FIBU2].dbo.fibu_stapel.c_urbelegid, 
    '[FIBU2].dbo.fibu_stapel.c_op_beleg, 
    '[FIBU2].dbo.fibu_stapel.c_buchtext, 
    '[FIBU2].dbo.fibu_stapel.si_jahr, 
    '[FIBU2].dbo.fibu_stapel.si_periode, 
    '[FIBU2].dbo.fibu_stapel.i_sollkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_habenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.i_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.dec_betrag, 
    '[FIBU2].dbo.fibu_stapel.c_waehrung, 
    '[FIBU2].dbo.fibu_stapel.dec_eigenbetrag, 
    '[FIBU2].dbo.fibu_stapel.eur_betrag, 
    '[FIBU2].dbo.fibu_stapel.i_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.i_steuerart_refid, 
    '[FIBU2].dbo.fibu_stapel.i_steuer_refid, 
    '[FIBU2].dbo.fibu_stapel.i_eg_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_stapel.dec_steuer, 
    '[FIBU2].dbo.fibu_stapel.dec_eigensteuer, 
    '[FIBU2].dbo.fibu_stapel.eur_steuerbetrag, 
    '[FIBU2].dbo.fibu_stapel.dec_steuerproz, 
    '[FIBU2].dbo.fibu_stapel.i_auftragid, 
    '[FIBU2].dbo.fibu_stapel.i_koart_refid, 
    '[FIBU2].dbo.fibu_stapel.si_pruef, 
    '[FIBU2].dbo.fibu_stapel.c_bemerk, 
    '[FIBU2].dbo.fibu_stapel.i_buchungskreis, 
    '[FIBU2].dbo.fibu_stapel.i_bank_flags, 
    '[FIBU2].dbo.fibu_stapel.i_quelle_modul, 
    '[FIBU2].dbo.fibu_stapel.c_quelle_maske, 
    '[FIBU2].dbo.fibu_stapel.si_manipulation, 
    '[FIBU2].dbo.fibu_stapel.dt_creation, 
    '[FIBU2].dbo.fibu_stapel.c_protokoll_id) 

    'VALUES (
    '@MandantNr, 
    '@StapelAZK, 
    '@ZSBuchnr, 
    '@ZSzeilenr, 
    '@Belegart, 
    '@Splitart, 
    '@belegdatum, 
    '@belegdatum, 
    '@belegnrtext, 
    '@belegnrtext, 
    '@Buchungstext, 
    '@Jahr, 
    '@Periode, 
    '@Sollkonto, 
    '@ckennsoll, 
    '@kkennungsoll, 
    '@Habenkonto, 
    '@ckennhab, 
    '@kkennunghab, 
    '@Buchungsbetrag_B, 
    '@Waehrung, 
    '0, 
    '@Buchungsbetrag_B, 
    '0, 
    '0, 
    '0, 
    '0, 
    ''K', 
    '0, 
    '0, 
    '0,
    '@dec_steuerproz2, 
    '0, 
    '0, 
    '@pruef, 
    '@BuchungstextBemerkung, 
    '1, 
    '0, 
    '21,
    ''FlexImport', 
    '0, 
    '@dt_creation, 
    '@c_protokoll_id) 

    'End /* Stapelverbuchung */ 


    'If @Buchungsweg = 3 
    'BEGIN /* Direktverbuchung der Kundenbuchung */ 

    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* zweite Buchungszeile */ 
    'Set @Sollkonto2 = CAST(@Kontonummer As Integer) 
    'Set @Habenkonto2 = CAST(@Bestandskonto As Integer) 
    'Set @ckennsoll2 = 'DE' 
    'Set @c_sollhabenkz = 'H' 

    'Set @dec_habensumme = (Select OWNFIELD_Haben FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Haben = (@dec_habensumme + @B_Bruttobetrag) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 
    'End /* zweite Buchungszeile */ 

    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* dritte Buchungszeile */ 
    'Set @Sollkonto2 = CAST(@Kontonummer As Integer) 
    'Set @Habenkonto2 = 0 
    'Set @ckennsoll2 = 'DE' 
    'Set @c_sollhabenkz = 'S' 

    'Set @dec_sollsumme = (Select OWNFIELD_Soll FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Soll = (@dec_sollsumme + @B_Bruttobetrag * (-1)) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 
    'End /* dritte Buchungszeile */ 


    'INSERT INTO [FIBU2].dbo.fibu_belegzeile ( 
    '[FIBU2].dbo.fibu_belegzeile.i_firm_refid, 
    '[FIBU2].dbo.fibu_belegzeile.si_jahr, 
    '[FIBU2].dbo.fibu_belegzeile.si_periode, 
    '[FIBU2].dbo.fibu_belegzeile.si_rel_periode, 
    '[FIBU2].dbo.fibu_belegzeile.i_beleg_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_zeilen_refid, 
    '[FIBU2].dbo.fibu_belegzeile.c_kennung, 
    '[FIBU2].dbo.fibu_belegzeile.i_konto, 
    '[FIBU2].dbo.fibu_belegzeile.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_belegzeile.i_steuer_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_gegenkonto, 
    '[FIBU2].dbo.fibu_belegzeile.dec_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.c_waehrung, 
    '[FIBU2].dbo.fibu_belegzeile.dec_fremdbetrag, 
    '[FIBU2].dbo.fibu_belegzeile.eur_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.d_beleg, 
    '[FIBU2].dbo.fibu_belegzeile.d_gebucht, 
    '[FIBU2].dbo.fibu_belegzeile.c_urbelegid, 
    '[FIBU2].dbo.fibu_belegzeile.si_belegart, 
    '[FIBU2].dbo.fibu_belegzeile.c_buchtext, 
    '[FIBU2].dbo.fibu_belegzeile.i_buchungskreis) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Periode, 
    '@relPeriode, 
    '@i_beleg_refid, 
    '@ZSzeilenr, 
    '@ckennsoll2, 
    '@Sollkonto2, 
    '@c_sollhabenkz, 
    '0, 
    '@Habenkonto2, 
    '@Buchungsbetrag_B, 
    '@Waehrung, 
    '@Buchungsbetrag_B, 
    '@Buchungsbetrag_B, 
    '@gDatumKurz, 
    '@gDatumKurz, 
    '@belegnrtext, 
    '@Belegart, 
    '@Buchungstext, 
    '1) 


    'End /* Direktverbuchung der Kundenbuchung */ 


    'Set @ZSzeilenr = (@ZSzeilenr + 1) 


    'If ((@Auszahlungsbetrag <> 0) And (@Buchungsweg = 2)) 
    'BEGIN /* Auszahlung  und zweiter Datensatz der zweiten Stapel Buchungszeile */ 

    'Set @Sollkonto = 0 
    'Set @Habenkonto = CAST(@Erlöskonto As Integer) 
    'Set @ckennhab = 'KO' 
    'Set @ckennsoll = 'LE' 
    'Set @kkennunghab = 0 
    'Set @kkennungsoll = 0 
    'Set @dec_steuerproz2 = @dec_steuerproz 


    'INSERT INTO [FIBU2].dbo.fibu_stapel (
    '[FIBU2].dbo.fibu_stapel.i_firm_refid, 
    '[FIBU2].dbo.fibu_stapel.i_stapel_refid, 
    '[FIBU2].dbo.fibu_stapel.i_lfdnr, 
    '[FIBU2].dbo.fibu_stapel.si_zeilenr, 
    '[FIBU2].dbo.fibu_stapel.si_belegart, 
    '[FIBU2].dbo.fibu_stapel.si_splitart, 
    '[FIBU2].dbo.fibu_stapel.d_beleg, 
    '[FIBU2].dbo.fibu_stapel.d_valuta, 
    '[FIBU2].dbo.fibu_stapel.c_urbelegid, 
    '[FIBU2].dbo.fibu_stapel.c_op_beleg, 
    '[FIBU2].dbo.fibu_stapel.c_buchtext, 
    '[FIBU2].dbo.fibu_stapel.si_jahr, 
    '[FIBU2].dbo.fibu_stapel.si_periode, 
    '[FIBU2].dbo.fibu_stapel.i_sollkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_kennungsoll, 
    '[FIBU2].dbo.fibu_stapel.i_habenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.i_kennunghaben, 
    '[FIBU2].dbo.fibu_stapel.dec_betrag, 
    '[FIBU2].dbo.fibu_stapel.c_waehrung, 
    '[FIBU2].dbo.fibu_stapel.dec_eigenbetrag, 
    '[FIBU2].dbo.fibu_stapel.eur_betrag, 
    '[FIBU2].dbo.fibu_stapel.i_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.i_steuerart_refid, 
    '[FIBU2].dbo.fibu_stapel.i_steuer_refid, 
    '[FIBU2].dbo.fibu_stapel.i_eg_gegenkonto, 
    '[FIBU2].dbo.fibu_stapel.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_stapel.dec_steuer, 
    '[FIBU2].dbo.fibu_stapel.dec_eigensteuer, 
    '[FIBU2].dbo.fibu_stapel.eur_steuerbetrag, 
    '[FIBU2].dbo.fibu_stapel.dec_steuerproz, 
    '[FIBU2].dbo.fibu_stapel.i_auftragid, 
    '[FIBU2].dbo.fibu_stapel.i_koart_refid, 
    '[FIBU2].dbo.fibu_stapel.si_pruef, 
    '[FIBU2].dbo.fibu_stapel.c_bemerk, 
    '[FIBU2].dbo.fibu_stapel.i_buchungskreis, 
    '[FIBU2].dbo.fibu_stapel.i_bank_flags, 
    '[FIBU2].dbo.fibu_stapel.i_quelle_modul, 
    '[FIBU2].dbo.fibu_stapel.c_quelle_maske, 
    '[FIBU2].dbo.fibu_stapel.si_manipulation, 
    '[FIBU2].dbo.fibu_stapel.dt_creation, 
    '[FIBU2].dbo.fibu_stapel.c_protokoll_id) 

    'VALUES (
    '@MandantNr, 
    '@StapelAZK, 
    '@ZSBuchnr, 
    '@ZSzeilenr, 
    '@Belegart, 
    '@Splitart, 
    '@belegdatum, 
    '@belegdatum, 
    '@belegnrtext, 
    '@belegnrtext, 
    '@Buchungstext, 
    '@Jahr, 
    '@Periode, 
    '@Sollkonto, 
    '@ckennsoll, 
    '@kkennungsoll, 
    '@Habenkonto, 
    '@ckennhab, 
    '@kkennunghab, 
    '@Buchungsbetrag_B, 
    '@Waehrung, 
    '0, 
    '@Buchungsbetrag_B, 
    '0, 
    '0, 
    '0, 
    '0, 
    ''K', 
    '0, 
    '0, 
    '0,
    '@dec_steuerproz2, 
    '0, 
    '0, 
    '@pruef, 
    '@BuchungstextBemerkung, 
    '1, 
    '0, 
    '21,
    ''FlexImport', 
    '0, 
    '@dt_creation, 
    '@c_protokoll_id) 


    'End /* Auszahlung  und zweiter Datensatz der zweiten Stapel Buchungszeile */ 



    'If @Buchungsweg = 3 
    'BEGIN /* Direktverbuchung der Sammelkundenbuchung */ 

    'Set @c_sprache = (Select [FIBU2].dbo.fibu_konto.c_sprache FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 

    'Set @c_ustidnr = (Select [FIBU2].dbo.fibu_konto.c_ustidnr FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 

    'Set @c_zahlziel = (Select [FIBU2].dbo.fibu_konto.c_zahlziel FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_konto = @Sollkonto2 
    'And [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr) 

    'Set @Skontotage = (Select [FIBU2].dbo.fibu_zahlziel.si_tage FROM [FIBU2].dbo.fibu_zahlziel 
    'WHERE [FIBU2].dbo.fibu_zahlziel.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_zahlziel.c_zahlziel Like @c_zahlziel) 
    'If @Skontotage Is NULL SET @Skontotage = 0 

    'Set @Skonto = (Select [FIBU2].dbo.fibu_zahlziel.dec_skonto FROM [FIBU2].dbo.fibu_zahlziel 
    'WHERE [FIBU2].dbo.fibu_zahlziel.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_zahlziel.c_zahlziel Like @c_zahlziel) 
    'If @Skonto Is NULL SET @Skonto = 0 

    'Set @Nettotage = (Select [FIBU2].dbo.fibu_zahlziel.si_ntage FROM [FIBU2].dbo.fibu_zahlziel 
    'WHERE [FIBU2].dbo.fibu_zahlziel.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_zahlziel.c_zahlziel Like @c_zahlziel) 
    'If @Nettotage Is NULL SET @Nettotage = 0 

    'Set @Skontodatum = DATEADD(DAY, @Skontotage, @gDatumKurz) 
    'Set @Nettodatum = DATEADD(DAY, @Nettotage, @gDatumKurz) 


    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* dritte Buchungszeile */ 
    'Set @Sollkonto2 = @i_fordkto 
    'Set @Habenkonto2 = CAST(@Bestandskonto As Integer) 
    'Set @ckennsoll2 = 'DB' 
    'Set @c_sollhabenkz = 'H' 

    'Set @dec_habensumme = (Select OWNFIELD_Haben FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Haben = (@dec_habensumme + @B_Bruttobetrag) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 
    'End /* dritte Buchungszeile */ 

    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* vierte Buchungszeile */ 
    'Set @Sollkonto2 = @i_fordkto 
    'Set @Habenkonto2 = 0 
    'Set @ckennsoll2 = 'DB' 
    'Set @c_sollhabenkz = 'S' 

    'Set @dec_sollsumme = (Select OWNFIELD_Soll FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Soll = (@dec_sollsumme + @B_Bruttobetrag * (-1)) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 
    'End /* vierte Buchungszeile */ 


    'INSERT INTO [FIBU2].dbo.fibu_belegzeile ( 
    '[FIBU2].dbo.fibu_belegzeile.i_firm_refid, 
    '[FIBU2].dbo.fibu_belegzeile.si_jahr, 
    '[FIBU2].dbo.fibu_belegzeile.si_periode, 
    '[FIBU2].dbo.fibu_belegzeile.si_rel_periode, 
    '[FIBU2].dbo.fibu_belegzeile.i_beleg_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_zeilen_refid, 
    '[FIBU2].dbo.fibu_belegzeile.c_kennung, 
    '[FIBU2].dbo.fibu_belegzeile.i_konto, 
    '[FIBU2].dbo.fibu_belegzeile.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_belegzeile.i_steuer_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_gegenkonto, 
    '[FIBU2].dbo.fibu_belegzeile.dec_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.c_waehrung, 
    '[FIBU2].dbo.fibu_belegzeile.dec_fremdbetrag, 
    '[FIBU2].dbo.fibu_belegzeile.eur_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.d_beleg, 
    '[FIBU2].dbo.fibu_belegzeile.d_gebucht, 
    '[FIBU2].dbo.fibu_belegzeile.c_urbelegid, 
    '[FIBU2].dbo.fibu_belegzeile.si_belegart, 
    '[FIBU2].dbo.fibu_belegzeile.c_buchtext, 
    '[FIBU2].dbo.fibu_belegzeile.i_buchungskreis) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Periode, 
    '@relPeriode, 
    '@i_beleg_refid, 
    '@ZSzeilenr, 
    '@ckennsoll2, 
    '@Sollkonto2, 
    '@c_sollhabenkz, 
    '0, 
    '@Habenkonto2, 
    '@Buchungsbetrag_B, 
    '@Waehrung, 
    '@Buchungsbetrag_B, 
    '@Buchungsbetrag_B, 
    '@gDatumKurz, 
    '@gDatumKurz, 
    '@belegnrtext, 
    '@Belegart, 
    '@Buchungstext, 
    '1) 

    'End /* Direktverbuchung der Sammelkundenbuchung */ 



    'Set @ZSzeilenr = (@ZSzeilenr + 1) 


    'If ((@Buchungsweg = 3) And (@Auszahlungsbetrag <> 0)) 
    'BEGIN /* fünfte Buchungszeile bei Auszahlung und Direktverbuchung */ 

    'Set @Sollkonto2 = CAST(@Erlöskonto As Integer) 
    'Set @Habenkonto2 = 0 
    'Set @ckennsoll2 = 'KO' 
    'Set @c_sollhabenkz = 'H' 

    'Set @dec_habensumme = (Select OWNFIELD_Haben FROM OWNTABLE_Verbuchungskonten 
    'WHERE OWNFIELD_Konto = @Sollkonto2) 

    'UPDATE OWNTABLE_Verbuchungskonten Set 
    'OWNFIELD_Haben = (@dec_habensumme + @B_Bruttobetrag * (-1)) 
    'WHERE OWNFIELD_Konto = @Sollkonto2 


    'INSERT INTO [FIBU2].dbo.fibu_belegzeile ( 
    '[FIBU2].dbo.fibu_belegzeile.i_firm_refid, 
    '[FIBU2].dbo.fibu_belegzeile.si_jahr, 
    '[FIBU2].dbo.fibu_belegzeile.si_periode, 
    '[FIBU2].dbo.fibu_belegzeile.si_rel_periode, 
    '[FIBU2].dbo.fibu_belegzeile.i_beleg_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_zeilen_refid, 
    '[FIBU2].dbo.fibu_belegzeile.c_kennung, 
    '[FIBU2].dbo.fibu_belegzeile.i_konto, 
    '[FIBU2].dbo.fibu_belegzeile.c_sollhabenkz, 
    '[FIBU2].dbo.fibu_belegzeile.i_steuer_refid, 
    '[FIBU2].dbo.fibu_belegzeile.i_gegenkonto, 
    '[FIBU2].dbo.fibu_belegzeile.dec_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.c_waehrung, 
    '[FIBU2].dbo.fibu_belegzeile.dec_fremdbetrag, 
    '[FIBU2].dbo.fibu_belegzeile.eur_betrag, 
    '[FIBU2].dbo.fibu_belegzeile.d_beleg, 
    '[FIBU2].dbo.fibu_belegzeile.d_gebucht, 
    '[FIBU2].dbo.fibu_belegzeile.c_urbelegid, 
    '[FIBU2].dbo.fibu_belegzeile.si_belegart, 
    '[FIBU2].dbo.fibu_belegzeile.c_buchtext, 
    '[FIBU2].dbo.fibu_belegzeile.i_buchungskreis) 

    'VALUES ( 
    '@MandantNr, 
    '@Jahr, 
    '@Periode, 
    '@relPeriode, 
    '@i_beleg_refid, 
    '@ZSzeilenr, 
    '@ckennsoll2, 
    '@Sollkonto2, 
    '@c_sollhabenkz, 
    '0, 
    '@Habenkonto2, 
    '@Buchungsbetrag_B, 
    '@Waehrung, 
    '@Buchungsbetrag_B, 
    '@Buchungsbetrag_B, 
    '@gDatumKurz, 
    '@gDatumKurz, 
    '@belegnrtext, 
    '@Belegart, 
    '@Buchungstext, 
    '1) 

    'End /* fünfte Buchungszeile bei Auszahlung und Direktverbuchung */ 



    'If @Buchungsweg = 3 
    'BEGIN /* Fortsetzung bei Direktverbuchung */ 


    'Set @updatekonto = @i_fordkto 

    'Set @dec_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_sollsumme = (Select [FIBU2].dbo.fibu_konto.dec_sollsumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_habensumme = (Select [FIBU2].dbo.fibu_konto.dec_habensumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @eur_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.eur_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* Einzahlung */ 
    'Set @dec_aktuellersaldo = (@dec_aktuellersaldo - @B_Bruttobetrag) 
    'Set @dec_sollsumme = (@dec_sollsumme - 0) 
    'Set @dec_habensumme = (@dec_habensumme + @B_Bruttobetrag) 
    'Set @eur_aktuellersaldo = (@eur_aktuellersaldo - @B_Bruttobetrag) 
    'End /* Einzahlung */ 
    'Else BEGIN /* Auszahlung */ 
    'Set @dec_aktuellersaldo = (@dec_aktuellersaldo - @B_Bruttobetrag) 
    'Set @dec_sollsumme = (@dec_sollsumme - @B_Bruttobetrag) 
    'Set @dec_habensumme = (@dec_habensumme + 0) 
    'Set @eur_aktuellersaldo = (@eur_aktuellersaldo - @B_Bruttobetrag) 
    'End /* Auszahlung */ 

    'UPDATE [FIBU2].dbo.fibu_konto Set 
    'd_lebudat = @gDatumKurz, 
    'dec_aktuellersaldo = @dec_aktuellersaldo, 
    'dec_sollsumme = @dec_sollsumme, 
    'dec_habensumme = @dec_habensumme, 
    'eur_aktuellersaldo = @eur_aktuellersaldo 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto 



    'Set @updatekonto = CAST(@Bestandskonto As Integer) 
    'Set @i_Sachkonto = @updatekonto 

    'Set @dec_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_sollsumme = (Select [FIBU2].dbo.fibu_konto.dec_sollsumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_habensumme = (Select [FIBU2].dbo.fibu_konto.dec_habensumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @eur_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.eur_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* Einzahlung */ 
    'Set @dec_aktuellersaldo = (@dec_aktuellersaldo + @B_Bruttobetrag) 
    'Set @dec_sollsumme = (@dec_sollsumme + @B_Bruttobetrag) 
    'Set @dec_habensumme = (@dec_habensumme + 0) 
    'Set @eur_aktuellersaldo = (@eur_aktuellersaldo + @B_Bruttobetrag) 
    'End /* Einzahlung */ 
    'Else BEGIN /* Auszahlung */ 
    'Set @dec_aktuellersaldo = (@dec_aktuellersaldo + @B_Bruttobetrag) 
    'Set @dec_sollsumme = (@dec_sollsumme - 0) 
    'Set @dec_habensumme = (@dec_habensumme - @B_Bruttobetrag) 
    'Set @eur_aktuellersaldo = (@eur_aktuellersaldo + @B_Bruttobetrag) 
    'End /* Auszahlung */ 

    'UPDATE [FIBU2].dbo.fibu_konto Set 
    'd_lebudat = @gDatumKurz, 
    'dec_aktuellersaldo = @dec_aktuellersaldo, 
    'dec_sollsumme = @dec_sollsumme, 
    'dec_habensumme = @dec_habensumme, 
    'eur_aktuellersaldo = @eur_aktuellersaldo 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto 



    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* Erlöskonto bei Auszahlung */ 

    'Set @updatekonto = CAST(@Erlöskonto As Integer) 
    'Set @i_Sachkonto = @updatekonto 

    'Set @dec_sollsumme = (Select [FIBU2].dbo.fibu_konto.dec_sollsumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_habensumme = (Select [FIBU2].dbo.fibu_konto.dec_habensumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_sollsumme = (@dec_sollsumme - @B_Bruttobetrag) 
    'Set @dec_habensumme = (@dec_habensumme - @B_Bruttobetrag) 

    'UPDATE [FIBU2].dbo.fibu_konto Set 
    'd_lebudat = @gDatumKurz, 
    'dec_sollsumme = @dec_sollsumme, 
    'dec_habensumme = @dec_habensumme 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto 

    'End /* Erlöskonto bei Auszahlung */ 



    'Set @updatekonto = CAST(@Kontonummer As Integer) 

    'Set @dec_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_sollsumme = (Select [FIBU2].dbo.fibu_konto.dec_sollsumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @dec_habensumme = (Select [FIBU2].dbo.fibu_konto.dec_habensumme 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'Set @eur_aktuellersaldo = (Select [FIBU2].dbo.fibu_konto.eur_aktuellersaldo 
    'FROM [FIBU2].dbo.fibu_konto 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto) 

    'If @Einzahlungsbetrag <> 0 
    'BEGIN /* Einzahlung */ 
    'Set @dec_aktuellersaldo = (@dec_aktuellersaldo - @B_Bruttobetrag) 
    'Set @dec_sollsumme = (@dec_sollsumme + 0) 
    'Set @dec_habensumme = (@dec_habensumme + @B_Bruttobetrag) 
    'Set @eur_aktuellersaldo = (@eur_aktuellersaldo - @B_Bruttobetrag) 
    'Set @opvorgangsbetrag = @B_Bruttobetrag * (-1) 
    'End /* Einzahlung */ 
    'Else BEGIN /* Auszahlung */ 
    'Set @dec_aktuellersaldo = (@dec_aktuellersaldo - @B_Bruttobetrag) 
    'Set @dec_sollsumme = (@dec_sollsumme - @B_Bruttobetrag) 
    'Set @dec_habensumme = (@dec_habensumme - 0) 
    'Set @eur_aktuellersaldo = (@eur_aktuellersaldo - @B_Bruttobetrag) 
    'Set @opvorgangsbetrag = @B_Bruttobetrag * (-1) / CAST(2 As FLOAT) 
    'End /* Auszahlung */ 

    'UPDATE [FIBU2].dbo.fibu_konto Set 
    'd_lebudat = @gDatumKurz, 
    'dec_aktuellersaldo = @dec_aktuellersaldo, 
    'dec_sollsumme = @dec_sollsumme, 
    'dec_habensumme = @dec_habensumme, 
    'eur_aktuellersaldo = @eur_aktuellersaldo 
    'WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_konto.i_konto = @updatekonto 



    'Declare Schleifen2rec CURSOR FOR ()

    '    Select Case
    'OWNFIELD_Nr, 
    'OWNFIELD_Konto, 
    'ISNULL(OWNFIELD_Soll, 0), 
    'ISNULL(OWNFIELD_Haben, 0) 

    'FROM OWNTABLE_Verbuchungskonten
    'WHERE ((ISNULL(OWNFIELD_Soll, 0) <> 0) Or (ISNULL(OWNFIELD_Haben, 0) <> 0)) 

    'OPEN Schleifen2rec
    'FETCH NEXT FROM Schleifen2rec INTO 
    '@Schleifennr, 
    '@Schleifenkonto, 
    '@dec_sollsumme, 
    '@dec_habensumme 

    'While @@FETCH_STATUS = 0 
    'BEGIN /* 03 */ 

    'If @Periode = 1 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_1 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_1 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_1 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_1 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_1 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_1 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_1 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_1 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_1 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_1 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 2 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_2 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_2 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_2 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_2 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_2 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_2 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_2 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_2 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_2 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_2 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 3 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_3 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_3 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_3 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_3 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_3 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_3 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_3 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_3 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_3 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_3 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 4 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_4 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_4 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_4 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_4 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_4 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_4 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_4 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_4 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_4 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_4 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 5 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_5 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_5 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_5 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_5 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_5 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_5 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_5 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_5 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_5 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_5 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 6 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_6 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_6 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_6 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_6 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_6 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_6 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_6 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_6 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_6 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_6 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 7 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_7 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_7 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_7 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_7 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_7 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_7 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_7 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_7 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_7 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_7 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 8 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_8 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_8 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_8 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_8 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_8 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_8 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_8 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_8 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_8 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_8 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 9 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_9 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_9 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_9 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_9 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_9 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_9 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_9 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_9 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_9 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_9 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 10 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_10 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_10 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_10 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_10 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_10 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_10 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_10 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_10 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_10 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_10 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 11 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_11 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_11 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_11 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_11 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_11 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_11 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_11 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_11 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_11 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_11 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    '    If @Periode = 12 
    'BEGIN 
    'Set @periodensoll = (Select [FIBU2].dbo.fibu_periodensaldo.dec_soll_12 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'Set @periodenhaben = (Select [FIBU2].dbo.fibu_periodensaldo.dec_haben_12 
    'FROM [FIBU2].dbo.fibu_periodensaldo 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto) 

    'UPDATE [FIBU2].dbo.fibu_periodensaldo Set 
    '[FIBU2].dbo.fibu_periodensaldo.dec_soll_12 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.dec_haben_12 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_soll_12 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldo.eur_haben_12 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldo.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldo.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldo.i_konto = @Schleifenkonto 

    'If @Schleifenkonto = 2000 
    'BEGIN /* Debitorendurchbuchungskonto */ 
    'UPDATE [FIBU2].dbo.fibu_periodensaldodk Set 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_soll_12 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.dec_haben_12 = (@periodenhaben + @dec_habensumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_soll_12 = (@periodensoll + @dec_sollsumme), 
    '[FIBU2].dbo.fibu_periodensaldodk.eur_haben_12 = (@periodenhaben + @dec_habensumme) 
    'WHERE [FIBU2].dbo.fibu_periodensaldodk.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_periodensaldodk.si_jahr = @Jahr 
    'And [FIBU2].dbo.fibu_periodensaldodk.i_konto = @Schleifenkonto 
    'End /* Debitorendurchbuchungskonto */ 

    'End


    'FETCH NEXT FROM Schleifen2rec INTO 
    '@Schleifennr, 
    '@Schleifenkonto, 
    '@dec_sollsumme, 
    '@dec_habensumme 

    'End /* 03 */ 
    'CLOSE Schleifen2rec 
    'DEALLOCATE Schleifen2rec 



    'INSERT INTO [FIBU2].dbo.op_debitor ( 
    '[FIBU2].dbo.op_debitor.i_firm_refid, 
    '[FIBU2].dbo.op_debitor.i_op_refid, 
    '[FIBU2].dbo.op_debitor.c_urbelegid, 
    '[FIBU2].dbo.op_debitor.i_personenkonto, 
    '[FIBU2].dbo.op_debitor.i_forderungskonto, 
    '[FIBU2].dbo.op_debitor.c_rechnungid, 
    '[FIBU2].dbo.op_debitor.d_rechnung, 
    '[FIBU2].dbo.op_debitor.d_valuta, 
    '[FIBU2].dbo.op_debitor.c_typ, 
    '[FIBU2].dbo.op_debitor.c_sprache, 
    '[FIBU2].dbo.op_debitor.c_waehrung, 
    '[FIBU2].dbo.op_debitor.dec_eigenbrutto, 
    '[FIBU2].dbo.op_debitor.dec_fremdbrutto, 
    '[FIBU2].dbo.op_debitor.eur_bruttobetrag, 
    '[FIBU2].dbo.op_debitor.dec_skf_eigen, 
    '[FIBU2].dbo.op_debitor.dec_skf_fremd, 
    '[FIBU2].dbo.op_debitor.eur_skontierfaehig, 
    '[FIBU2].dbo.op_debitor.dec_eigenzahlung, 
    '[FIBU2].dbo.op_debitor.dec_fremdzahlung, 
    '[FIBU2].dbo.op_debitor.eur_zahlung, 
    '[FIBU2].dbo.op_debitor.c_zahlziel, 
    '[FIBU2].dbo.op_debitor.dec_skonto, 
    '[FIBU2].dbo.op_debitor.d_skonto, 
    '[FIBU2].dbo.op_debitor.dec_skonto2, 
    '[FIBU2].dbo.op_debitor.d_netto, 
    '[FIBU2].dbo.op_debitor.si_mahnstufe, 
    '[FIBU2].dbo.op_debitor.i_mahnlauf_refid, 
    '[FIBU2].dbo.op_debitor.si_exportiert, 
    '[FIBU2].dbo.op_debitor.i_stapel_refid, 
    '[FIBU2].dbo.op_debitor.i_stapel_lfdnr, 
    '[FIBU2].dbo.op_debitor.dec_stpl_ew_betrag, 
    '[FIBU2].dbo.op_debitor.dec_stpl_ew_skonto, 
    '[FIBU2].dbo.op_debitor.dec_stpl_fw_betrag, 
    '[FIBU2].dbo.op_debitor.dec_stpl_fw_skonto, 
    '[FIBU2].dbo.op_debitor.eur_stpl_betrag, 
    '[FIBU2].dbo.op_debitor.eur_stpl_skonto, 
    '[FIBU2].dbo.op_debitor.i_clearing, 
    '[FIBU2].dbo.op_debitor.i_eigene_bank, 
    '[FIBU2].dbo.op_debitor.si_bankeinzug, 
    '[FIBU2].dbo.op_debitor.c_bemerkung, 
    '[FIBU2].dbo.op_debitor.lc_anmerkungen, 
    '[FIBU2].dbo.op_debitor.i_zessionstext, 
    '[FIBU2].dbo.op_debitor.i_buchungskreis, 
    '[FIBU2].dbo.op_debitor.c_ustidnr) 

    'VALUES ( 
    '@MandantNr, 
    '@i_op_refid, 
    '@belegnrtext, 
    '@i_personenkonto, 
    '@i_fordkto, 
    '@belegnrtext, 
    '@gDatumKurz, 
    '@gDatumKurz, 
    '@c_op_Typ, 
    '@c_sprache, 
    '@Waehrung, 
    '@B_Bruttobetrag * (-1), 
    '@B_Bruttobetrag * (-1), 
    '@B_Bruttobetrag * (-1), 
    '@B_Bruttobetrag * (-1), 
    '@B_Bruttobetrag * (-1), 
    '@B_Bruttobetrag * (-1), 
    '0, 
    '0, 
    '0, 
    '@c_zahlziel, 
    '@Skonto, 
    '@Skontodatum, 
    '0, 
    '@Nettodatum, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '0, 
    '@Buchungstext, 
    '@Buchungstext_orig, 
    '0, 
    '1, 
    '@c_ustidnr) 



    'INSERT INTO [FIBU2].dbo.op_vorgang_deb ( 
    '[FIBU2].dbo.op_vorgang_deb.i_firm_refid, 
    '[FIBU2].dbo.op_vorgang_deb.i_personenkonto, 
    '[FIBU2].dbo.op_vorgang_deb.i_op_refid, 
    '[FIBU2].dbo.op_vorgang_deb.i_beleg_refid, 
    '[FIBU2].dbo.op_vorgang_deb.c_vorgang, 
    '[FIBU2].dbo.op_vorgang_deb.d_beleg, 
    '[FIBU2].dbo.op_vorgang_deb.si_rel_periode, 
    '[FIBU2].dbo.op_vorgang_deb.si_jahr, 
    '[FIBU2].dbo.op_vorgang_deb.i_steuer_refid, 
    '[FIBU2].dbo.op_vorgang_deb.dec_steuerproz, 
    '[FIBU2].dbo.op_vorgang_deb.i_nne_az_konto, 
    '[FIBU2].dbo.op_vorgang_deb.dec_nettobetrag, 
    '[FIBU2].dbo.op_vorgang_deb.dec_steuerbetrag, 
    '[FIBU2].dbo.op_vorgang_deb.eur_nettobetrag, 
    '[FIBU2].dbo.op_vorgang_deb.eur_steuerbetrag, 
    '[FIBU2].dbo.op_vorgang_deb.dec_fremdbetrag, 
    '[FIBU2].dbo.op_vorgang_deb.si_skontierfaehig, 
    '[FIBU2].dbo.op_vorgang_deb.si_zeilen_refid, 
    '[FIBU2].dbo.op_vorgang_deb.c_bemerkung, 
    '[FIBU2].dbo.op_vorgang_deb.dt_datum, 
    '[FIBU2].dbo.op_vorgang_deb.c_benutzer, 
    '[FIBU2].dbo.op_vorgang_deb.i_eg_konto, 
    '[FIBU2].dbo.op_vorgang_deb.i_auftrag_refid, 
    '[FIBU2].dbo.op_vorgang_deb.dec_naf_steuerbetr, 
    '[FIBU2].dbo.op_vorgang_deb.eur_naf_steuerbetr) 

    'VALUES ( 
    '@MandantNr, 
    '@i_personenkonto, 
    '@i_op_refid, 
    '@i_beleg_refid, 
    ''P', 
    '@gDatumKurz, 
    '@relPeriode, 
    '@Jahr, 
    '0, 
    '0, 
    '@i_Sachkonto, 
    '@opvorgangsbetrag, 
    '0, 
    '@opvorgangsbetrag, 
    '0, 
    '@opvorgangsbetrag, 
    '1, 
    '1, /* Zeilennummer */ 
    '@Buchungstext, 
    '@dt_creation, 
    '@Benutzer, 
    '0, 
    '0, 
    '0, 
    '0) 



    'If @Auszahlungsbetrag <> 0 
    'BEGIN /* die zweite op_vorgang_deb Zeile insertieren */ 

    'INSERT INTO [FIBU2].dbo.op_vorgang_deb ( 
    '[FIBU2].dbo.op_vorgang_deb.i_firm_refid, 
    '[FIBU2].dbo.op_vorgang_deb.i_personenkonto, 
    '[FIBU2].dbo.op_vorgang_deb.i_op_refid, 
    '[FIBU2].dbo.op_vorgang_deb.i_beleg_refid, 
    '[FIBU2].dbo.op_vorgang_deb.c_vorgang, 
    '[FIBU2].dbo.op_vorgang_deb.d_beleg, 
    '[FIBU2].dbo.op_vorgang_deb.si_rel_periode, 
    '[FIBU2].dbo.op_vorgang_deb.si_jahr, 
    '[FIBU2].dbo.op_vorgang_deb.i_steuer_refid, 
    '[FIBU2].dbo.op_vorgang_deb.dec_steuerproz, 
    '[FIBU2].dbo.op_vorgang_deb.i_nne_az_konto, 
    '[FIBU2].dbo.op_vorgang_deb.dec_nettobetrag, 
    '[FIBU2].dbo.op_vorgang_deb.dec_steuerbetrag, 
    '[FIBU2].dbo.op_vorgang_deb.eur_nettobetrag, 
    '[FIBU2].dbo.op_vorgang_deb.eur_steuerbetrag, 
    '[FIBU2].dbo.op_vorgang_deb.dec_fremdbetrag, 
    '[FIBU2].dbo.op_vorgang_deb.si_skontierfaehig, 
    '[FIBU2].dbo.op_vorgang_deb.si_zeilen_refid, 
    '[FIBU2].dbo.op_vorgang_deb.c_bemerkung, 
    '[FIBU2].dbo.op_vorgang_deb.dt_datum, 
    '[FIBU2].dbo.op_vorgang_deb.c_benutzer, 
    '[FIBU2].dbo.op_vorgang_deb.i_eg_konto, 
    '[FIBU2].dbo.op_vorgang_deb.i_auftrag_refid, 
    '[FIBU2].dbo.op_vorgang_deb.dec_naf_steuerbetr, 
    '[FIBU2].dbo.op_vorgang_deb.eur_naf_steuerbetr) 

    'VALUES ( 
    '@MandantNr, 
    '@i_personenkonto, 
    '@i_op_refid, 
    '@i_beleg_refid, 
    ''P', 
    '@gDatumKurz, 
    '@relPeriode, 
    '@Jahr, 
    '0, 
    '0, 
    '@i_Sachkonto, 
    '@opvorgangsbetrag, 
    '0, 
    '@opvorgangsbetrag, 
    '0, 
    '@opvorgangsbetrag, 
    '1, 
    '5, /* Zeilennummer */ 
    '@Buchungstext, 
    '@dt_creation, 
    '@Benutzer, 
    '0, 
    '0, 
    '0, 
    '0) 

    'End /* die zweite op_vorgang_deb Zeile insertieren */ 


    'End /* Fortsetzung bei Direktverbuchung */ 



    'Set @Zahlungsmittelbetraege = (Select SUM(Betrag) FROM Rechnung_Zahlungsmittel 
    'WHERE Datum = @belegdatum And Nr = @belegnr) 
    'If ISNULL(@Zahlungsmittelbetraege, 0) <> @B_Bruttobetrag 
    'BEGIN /* Zahlungsmittelkorrektur wegen Programmfehler erforderlich */ 

    'Set @Zaehler1 = (Select COUNT(Datum) FROM Rechnung_Zahlungsmittel 
    'WHERE Datum = @belegdatum And Nr = @belegnr) 
    'If ISNULL(@Zaehler1, 0) > 0
    'BEGIN /* es sind zutreffende Zahlungsmitteldatensätze vorhanden */ 

    'Set @Korrekturbetrag = @B_Bruttobetrag / CAST(@Zaehler1 As FLOAT) 

    'UPDATE Rechnung_Zahlungsmittel Set 
    'Betrag = @Korrekturbetrag 
    'WHERE Datum = @belegdatum And Nr = @belegnr 

    'End /* es sind zutreffende Zahlungsmitteldatensätze vorhanden */ 


    'Else BEGIN /* ein Zahlungsmitteldatensatz fehlt */ 

    'INSERT INTO Rechnung_Zahlungsmittel ( 
    'Datum, 
    'Nr, 
    'Waehrungsnr, 
    'TYP, 
    'Waehrung, 
    'Umrechnungsfaktor, 
    'Betrag, 
    'Satz, 
    'Gedruckt) 

    'VALUES ( 
    '@belegdatum, 
    '@belegnr, 
    '@Waehrungsnr, 
    '18, 
    '@Waehrung, 
    '@Umrechnungsfaktor, 
    '@B_Bruttobetrag, 
    ''', 
    '0) 

    'End /* ein Zahlungsmitteldatensatz fehlt */ 

    'End /* Zahlungsmittelkorrektur wegen Programmfehler erforderlich */ 


    'If @Buchungsweg > 1 
    'BEGIN 

    'Set @Zaehler1 = (Select COUNT([FIBU2].dbo.fibu_belegzeile.i_beleg_refid) 
    'FROM [FIBU2].dbo.fibu_belegzeile 
    'WHERE [FIBU2].dbo.fibu_belegzeile.i_firm_refid = @MandantNr 
    'And [FIBU2].dbo.fibu_belegzeile.c_urbelegid Like @belegnrtext 
    'And [FIBU2].dbo.fibu_belegzeile.c_buchtext Like ('%' + @Ganzer_Pos_Nr_Text + '%')) 

    'If ISNULL(@Zaehler1, 0) >= 3
    'BEGIN /* Buchung ist vorhanden */ 
    'UPDATE Rechnung Set Gebucht = 1 WHERE Datum = @belegdatum And Nr = @belegnr 
    'End /* Buchung ist vorhanden */ 

    'End


    '    End /* nur Barverkaufsrechnungen mit Positionen In den Fibustapel insertieren */ 



    'Set @belegdatumdavor = (Select MAX(Datum) FROM Rechnung 
    'WHERE Datum <> @belegdatum) 

    'Set @belegnrdavor = (Select MAX(Nr) FROM Rechnung 
    'WHERE Datum = @belegdatumdavor) 

    'Set @Waehrungsnr = (Select Waehrungsnr FROM Rechnung 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @Waehrung = (Select Waehrung FROM Rechnung 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @Umrechnungsfaktor = (Select Umrechnungsfaktor FROM Rechnung 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @B_Bruttobetrag = (Select Bruttobetrag FROM Rechnung 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 


    'Set @Zahlungsmittelbetraege = (Select SUM(Betrag) FROM Rechnung_Zahlungsmittel 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 
    'If ISNULL(@Zahlungsmittelbetraege, 0) <> @B_Bruttobetrag 
    'BEGIN /* Zahlungsmittelkorrektur wegen Programmfehler erforderlich */ 

    'Set @Zaehler1 = (Select COUNT(Datum) FROM Rechnung_Zahlungsmittel 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 
    'If ISNULL(@Zaehler1, 0) > 0
    'BEGIN /* es sind zutreffende Zahlungsmitteldatensätze vorhanden */ 

    'Set @Korrekturbetrag = @B_Bruttobetrag / CAST(@Zaehler1 As FLOAT) 

    'UPDATE Rechnung_Zahlungsmittel Set 
    'Betrag = @Korrekturbetrag 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor 

    'End /* es sind zutreffende Zahlungsmitteldatensätze vorhanden */ 


    'Else BEGIN /* ein Zahlungsmitteldatensatz fehlt */ 

    'INSERT INTO Rechnung_Zahlungsmittel ( 
    'Datum, 
    'Nr, 
    'Waehrungsnr, 
    'TYP, 
    'Waehrung, 
    'Umrechnungsfaktor, 
    'Betrag, 
    'Satz, 
    'Gedruckt) 

    'VALUES ( 
    '@belegdatumdavor, 
    '@belegnrdavor, 
    '@Waehrungsnr, 
    '18, 
    '@Waehrung, 
    '@Umrechnungsfaktor, 
    '@B_Bruttobetrag, 
    ''', 
    '0) 

    'End /* ein Zahlungsmitteldatensatz fehlt */ 

    'End /* Zahlungsmittelkorrektur wegen Programmfehler erforderlich */ 



    'Set @belegdatumdavor = (Select MAX(Datum) FROM Gutschrift) 

    'Set @belegnrdavor = (Select MAX(Nr) FROM Gutschrift 
    'WHERE Datum = @belegdatumdavor) 

    'Set @Waehrungsnr = (Select Waehrungsnr FROM Gutschrift 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @Waehrung = (Select Waehrung FROM Gutschrift 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @Umrechnungsfaktor = (Select Umrechnungsfaktor FROM Gutschrift 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @B_Bruttobetrag = (Select Bruttobetrag FROM Gutschrift 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 

    'Set @Zahlungsmittelbetraege = (Select SUM(Betrag) FROM Gutschrift_Zahlungsmittel 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 
    'If ISNULL(@Zahlungsmittelbetraege, 0) <> @B_Bruttobetrag * (-1) 
    'BEGIN /* Zahlungsmittelkorrektur wegen Programmfehler erforderlich */ 

    'Set @Zaehler1 = (Select COUNT(Datum) FROM Gutschrift_Zahlungsmittel 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor) 
    'If ISNULL(@Zaehler1, 0) > 0
    'BEGIN /* es sind zutreffende Zahlungsmitteldatensätze vorhanden */ 

    'Set @Korrekturbetrag = @B_Bruttobetrag * (-1) / CAST(@Zaehler1 As FLOAT) 

    'UPDATE Gutschrift_Zahlungsmittel Set 
    'Betrag = @Korrekturbetrag 
    'WHERE Datum = @belegdatumdavor And Nr = @belegnrdavor 

    'End /* es sind zutreffende Zahlungsmitteldatensätze vorhanden */ 


    'Else BEGIN /* ein Zahlungsmitteldatensatz fehlt */ 

    'INSERT INTO Gutschrift_Zahlungsmittel ( 
    'Datum, 
    'Nr, 
    'Waehrungsnr, 
    'TYP, 
    'Waehrung, 
    'Umrechnungsfaktor, 
    'Betrag, 
    'Satz, 
    'Gedruckt) 

    'VALUES ( 
    '@belegdatumdavor, 
    '@belegnrdavor, 
    '@Waehrungsnr, 
    '18, 
    '@Waehrung, 
    '@Umrechnungsfaktor, 
    '@B_Bruttobetrag * (-1), 
    ''', 
    '0) 


    'End /* ein Zahlungsmitteldatensatz fehlt */ 

    'End /* Zahlungsmittelkorrektur wegen Programmfehler erforderlich */ 





    '################## ------- -------  ------- ################## 
    '################## ------- -------  ------- ################## 
    '################## ------- BUCHUNGEN------- ################## 
    '################## ------- -------  ------- ################## 
    '################## ------- -------  ------- ################## 


End Class