From 01d623ec2e9c374757da462bc1866cc6decc73ec Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Mon, 17 Nov 2025 16:46:02 +0100 Subject: [PATCH] RKSV-Leihgeldkassa! --- SDL/Classes/cRKSV.vb | 1128 ++++++++++-------------- SDL/kassenbuch/frmBelegNeu.Designer.vb | 66 +- SDL/kassenbuch/frmBelegNeu.vb | 9 +- 3 files changed, 494 insertions(+), 709 deletions(-) diff --git a/SDL/Classes/cRKSV.vb b/SDL/Classes/cRKSV.vb index 550dfb26..25c46ee4 100644 --- a/SDL/Classes/cRKSV.vb +++ b/SDL/Classes/cRKSV.vb @@ -1,4 +1,5 @@ -Imports GrapeCity.ActiveReports +Imports System.Globalization +Imports GrapeCity.ActiveReports Imports GrapeCity.DataVisualization.TypeScript Imports SDL.RKSVServer Imports VERAG_PROG_ALLGEMEIN.DSFinVKService @@ -2371,9 +2372,8 @@ Public Class cRKSV ' DIREKTVERBUCHUNG SYSKA '################ - If BelegSofortInFIBUverbuchten AndAlso BELEG.Beleg_TYP = "L" Then - Dim stapelbuchung As Boolean = False - createSyskaBuchung(RKSV_id, BELEG, stapelbuchung, KBEntry_List, KBEntryGB_List, KBEntryST_List) + 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")) End If BELEG.gebucht = True @@ -2400,472 +2400,6 @@ Public Class cRKSV Case Else : Return "Leistungen.Gl_account" End Select End Function - - - Private Shared Function createSyskaBuchung(RKSV_id As Integer, beleg As EABeleg, Stapelbuchung As Boolean, KBEntry_list As List(Of cKassenbuch), KBEntryGB_list As List(Of cKassenbuch), KBEntryST_list As List(Of cKassenbuch)) As Boolean - - If Not Stapelbuchung Then - - If beleg.Beleg_TYP = "L" Then - - 'INFO -> Leihgeld ist immer 0% MWSt - - Dim VERAG_SQL As New VERAG_PROG_ALLGEMEIN.SQL - - Dim MANDANT As Integer = 9 'ATILLA = 7 ' TEST = 9 - Dim Kassenkonto As Integer = 2700 - Dim BelegBuchungsKreis As String = "KE" - - Dim JAHR As Integer = Now.Year - Dim PERIODE As Integer = Now.Month - Dim BETRAG As Double = 0 - Dim BUCHUNGSBETRAG As Double = 0 - Dim TYP As String = "EINZAHLUNG" - - Dim Kontonummer As Integer = 0 - Dim Sollkonto As Integer = 0 - Dim Habenkonto As Integer = 0 - Dim Personenkonto As Integer = 0 - Dim kontenzaehler As Integer = 0 - - Dim Bestandskonto As Integer = Kassenkonto - Dim Erlöskonto As Integer = 0 - Dim Sachkonto As Integer = 0 - - If beleg.KundenNr > 0 Then - Habenkonto = beleg.KundenNr - Kontonummer = beleg.KundenNr - End If - - Personenkonto = Habenkonto '/* die ersten 2 Kontovoraussetzungen schaffen */ - - Dim dt_Verbuchungskonten As New DataTable - dt_Verbuchungskonten.Columns.Add("Nr", GetType(Integer)) - dt_Verbuchungskonten.Columns.Add("Konto", GetType(Integer)) - dt_Verbuchungskonten.Columns.Add("Soll", GetType(Double)) - dt_Verbuchungskonten.Columns.Add("Haben", GetType(Double)) - - 'ist immer nur 1 POSITION!!!!! - - For Each r In beleg.POS - BETRAG = +r.Betrag - Next - - 'Bestandkonto und Erlöskonto immer fix! - Dim Forderungskonto As String = VERAG_SQL.getValueTxtBySqlVarList("SELECT i_fordkto FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_konto = " & beleg.KundenNr & " AND [FIBU2].dbo.fibu_konto.i_firm_refid = " & MANDANT, "FIBU",, "2000") - - For Each r In KBEntryGB_list - - Dim R1 As DataRow = dt_Verbuchungskonten.NewRow - R1("Nr") = 1 - R1("Konto") = Personenkonto - R1("Soll") = 0 - R1("Haben") = 0 - dt_Verbuchungskonten.Rows.Add(R1) - kontenzaehler += 1 - - Dim R2 As DataRow = dt_Verbuchungskonten.NewRow - R2("Nr") = kontenzaehler - R2("Konto") = Forderungskonto - R2("Soll") = 0 - R2("Haben") = 0 - dt_Verbuchungskonten.Rows.Add(R2) - kontenzaehler += 1 - - Dim R3 As DataRow = dt_Verbuchungskonten.NewRow - R3("Nr") = 1 - R3("Konto") = r.Konto - Erlöskonto = r.Konto - R3("Soll") = r.Soll - R3("Haben") = r.Haben - dt_Verbuchungskonten.Rows.Add(R3) - kontenzaehler += 1 - - Dim R4 As DataRow = dt_Verbuchungskonten.NewRow - R4("Nr") = kontenzaehler - R4("Konto") = Kassenkonto - R4("Soll") = r.Haben - R4("Haben") = r.Soll - dt_Verbuchungskonten.Rows.Add(R4) - kontenzaehler += 1 - - If r.Buchungstext = "AUSZAHLUNG" Then - BelegBuchungsKreis = "KA" - TYP = r.Buchungstext - Else - TYP = r.Buchungstext - BelegBuchungsKreis = "KE" - End If - - Next - - - Dim Buchungstext As String = IIf(BETRAG < 0, "STORNO", "") & BelegBuchungsKreis & "_" & beleg.AbfertigungsNr & "_" & beleg.LKW_Kennzeichen & "_" & beleg.Frachtführer & "_" & beleg.Fahrer & "_" & beleg.Passnummer - Dim BuchungstextBemerkung As String = "" - If Buchungstext IsNot Nothing AndAlso Buchungstext.Length > 48 Then - BuchungstextBemerkung = Buchungstext.Substring(48) - Buchungstext = Buchungstext.Substring(0, 48) - End If - - Dim ckennsoll2 = "" - Dim ckennhab2 = "" - - - Dim ckennsoll = "LE" - Dim kkennungsoll As Integer = 0 - Dim kkennungsoll2 As Integer = 0 - - Dim ckennhab = "LE" - Dim kkennunghab As Integer = 0 - Dim kkennunghab2 As Integer = 0 - - Dim dt_Sollkonto As DataTable = VERAG_SQL.loadDgvBySql("SELECT top(1) isnull([FIBU2].dbo.fibu_konto.c_kontoart,'LE') as c_kontoart, isnull([FIBU2].dbo.fibu_konto.i_kennung,0) as i_kennung FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_konto = " & Sollkonto & " AND [FIBU2].dbo.fibu_konto.i_firm_refid = " & MANDANT, "FIBU") - If dt_Sollkonto.Rows.Count > 0 Then - kkennungsoll = dt_Sollkonto.Rows(0).Item("i_kennung") - ckennsoll = dt_Sollkonto.Rows(0).Item("c_kontoart") - End If - Dim dt_Habenkonto As DataTable = VERAG_SQL.loadDgvBySql("SELECT TOP(1) isnull([FIBU2].dbo.fibu_konto.c_kontoart,'LE') as c_kontoart , isnull([FIBU2].dbo.fibu_konto.i_kennung,0) as i_kennung FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_konto = " & Habenkonto & " AND [FIBU2].dbo.fibu_konto.i_firm_refid = " & MANDANT, "FIBU") - If dt_Habenkonto.Rows.Count > 0 Then - kkennunghab = dt_Habenkonto.Rows(0).Item("i_kennung") - ckennhab = dt_Habenkonto.Rows(0).Item("c_kontoart") - End If - 'STAPEL NICHT UNBEDINGT NOTWENDIG - Dim StapelAZK As String = VERAG_SQL.getValueTxtBySqlVarList("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 = " & MANDANT, "FIBU",, "") - Dim Zaehler1 As String = VERAG_SQL.getValueTxtBySqlVarList("SELECT COUNT([FIBU2].dbo.fibu_stapel.i_lfdnr) FROM [FIBU2].dbo.fibu_stapel WHERE ISNULL([FIBU2].dbo.fibu_stapel.si_pruef, 0) > 0", "FIBU",, "0") - - If CInt(Zaehler1) > 0 Then - StapelAZK = VERAG_SQL.getValueTxtBySqlVarList("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 = " & MANDANT, "FIBU",, "") - End If - Dim ZSBuchnr As String = "" - If StapelAZK <> "" Then ZSBuchnr = VERAG_SQL.getValueTxtBySqlVarList("SELECT MAX([FIBU2].dbo.fibu_stapel.i_lfdnr)+1 FROM [FIBU2].dbo.fibu_stapel WHERE [FIBU2].dbo.fibu_stapel.i_firm_refid = " & MANDANT & " AND [FIBU2].dbo.fibu_stapel.i_stapel_refid = " & StapelAZK, "FIBU",, "0") - Dim ZSBuchnrINT As Integer - If ZSBuchnr = "" Or ZSBuchnr = "0" Then - ZSBuchnrINT = 1 - Else - ZSBuchnrINT = CInt(ZSBuchnr) - End If - - If StapelAZK = "" Then StapelAZK = "0000" - - Dim dt_creation As String = Now.ToString("dd HH:mm:ss") - Dim dt_creationDate As String = Now.ToString - Dim ProtokollID As String = StapelAZK.ToString() & "-" & ZSBuchnrINT.ToString("0000") & "-" & JAHR & "-" & PERIODE.ToString("N2") & "-" & dt_creation - - Dim pruef As Integer = 0 - Dim ZSzeilenr As Integer = 0 - Dim Belegart As Integer = 1 - Dim Splitart As Integer = 0 - - '1. Belegssalden anlegen, falls nicht vorhanden! - erste Schleife (Schleifen1rec) - For Each konto As DataRow In dt_Verbuchungskonten.Rows - erstelleEBSalden(MANDANT, JAHR, konto.Item("Konto")) - Next - - Dim i_beleg_refid As String = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList("SELECT [FIBU2].dbo.fibu_nummern.i_nummer_refid + 1 From [FIBU2].dbo.fibu_nummern Where [FIBU2].dbo.fibu_nummern.i_firm_refid = " & MANDANT & " And [FIBU2].dbo.fibu_nummern.c_nummernart Like 'Buchungsnummer' ", "FIBU",, "0") - Dim Buchungstyp = "g" - Dim i_op_refid = "" - - If i_beleg_refid <> "" AndAlso IsNumeric(i_beleg_refid) Then - - i_op_refid = i_beleg_refid - - If BETRAG <> 0 AndAlso TYP = "EINZAHLUNG" Then - - VERAG_SQL.doSQL("UPDATE [FIBU2].dbo.fibu_nummern SET [FIBU2].dbo.fibu_nummern.i_nummer_refid = " & i_beleg_refid & " WHERE [FIBU2].dbo.fibu_nummern.i_firm_refid = " & MANDANT & " And [FIBU2].dbo.fibu_nummern.c_nummernart Like 'Buchungsnummer'", "FIBU") - - End If - - End If - - insertBelegskopf(MANDANT, JAHR, 1, i_beleg_refid, beleg.BelegDat.ToShortDateString, beleg.BelegNr, Belegart, Buchungstext, BETRAG, "EUR", Now().ToShortTimeString, "AUTO", ProtokollID) - - - Dim SollHabenKZ = "S" - - Dim Sollkonto2 As Integer = 0 - Dim Habenkonto2 As Integer = 0 - - Dim SollSumme As Double = 0 - - Dim dec_sollsumme As Double = 0 - Dim dec_habensumme As Double = 0 - - ZSzeilenr += 1 - - If TYP = "EINZAHLUNG" Then - - If BETRAG <> 0 Then - - Sollkonto2 = Bestandskonto '/* bei Einzahlung und Bestandskonto im Soll */ - Habenkonto2 = Kontonummer '/* gilt für den ersten Datensatz der ersten Buchungszeile pro Artikel */ - ckennhab2 = "LE" - ckennsoll2 = "KO" - kkennunghab2 = 0 - kkennungsoll2 = 0 - - BUCHUNGSBETRAG = BETRAG - - Dim rows() As DataRow = dt_Verbuchungskonten.Select("Konto = '" & sollkonto2 & "'") - If rows.Length > 0 Then - Dim row As DataRow = rows(0) - If Not IsDBNull(row("Soll")) Then - dec_sollsumme = Convert.ToDecimal(row("Soll")) - End If - row("Soll") = dec_sollsumme + BETRAG - End If - - insertBelegszeile(MANDANT, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat, beleg.BelegNr, beleg.Belegart, Buchungstext, BETRAG, "EUR", ZSzeilenr, ckennsoll2, sollkonto2, Habenkonto2, SollHabenKZ) - - End If - - - - ElseIf TYP = "AUSZAHLUNG" Then - - If BETRAG <> 0 Then - '/* Umkehrung von Soll und Habenkonto und Betragsvorzeichenwechsel */ - Sollkonto2 = Erlöskonto - Habenkonto2 = 0 - dec_sollsumme = 0 - - BUCHUNGSBETRAG = BETRAG * (-1) - - Dim rows() As DataRow = dt_Verbuchungskonten.Select("Konto = '" & sollkonto2 & "'") - If rows.Length > 0 Then - Dim row As DataRow = rows(0) - If Not IsDBNull(row("Soll")) Then - dec_sollsumme = Convert.ToDecimal(row("Soll")) - End If - row("Soll") = dec_sollsumme + BETRAG * (-1) - End If - - insertBelegszeile(MANDANT, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat, beleg.BelegNr, beleg.Belegart, Buchungstext, BETRAG, "EUR", ZSzeilenr, ckennsoll2, sollkonto2, Habenkonto2, SollHabenKZ) - - End If - - - End If - - '1. Belegszeile - - If TYP = "AUSZAHLUNG" Then - - If BETRAG <> 0 Then - - 'BEGIN /* bei Auszahlung die zweite Datenzeile zur ersten Bestandskontobuchung */ - - ZSzeilenr += 1 - - sollkonto2 = Bestandskonto - Habenkonto2 = 0 - ckennsoll2 = "KO" - SollHabenKZ = "H" - - - Dim rows() As DataRow = dt_Verbuchungskonten.Select("Konto = '" & sollkonto2 & "'") - If rows.Length > 0 Then - Dim row As DataRow = rows(0) - If Not IsDBNull(row("Haben")) Then - dec_habensumme = Convert.ToDecimal(row("Haben")) - End If - row("Haben") = dec_habensumme + BETRAG * (-1) - End If - End If - - End If - - - '2. Belegszeile - insertBelegszeile(MANDANT, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat, beleg.BelegNr, beleg.Belegart, Buchungstext, BUCHUNGSBETRAG, "EUR", ZSzeilenr, ckennsoll2, Sollkonto2, Habenkonto2, SollHabenKZ) - - - If TYP = "EINZAHLUNG" Then - ZSzeilenr += 1 - If BETRAG > 0 Then - - 'BEGIN /* dritte Buchungszeile */ - sollkonto2 = Forderungskonto - Habenkonto2 = Bestandskonto - ckennsoll2 = "DB" - SollHabenKZ = "H" - - Dim rows() As DataRow = dt_Verbuchungskonten.Select("Konto = '" & sollkonto2 & "'") - If rows.Length > 0 Then - Dim row As DataRow = rows(0) - If Not IsDBNull(row("Soll")) Then - dec_habensumme = Convert.ToDecimal(row("Soll")) - End If - row("Soll") = dec_habensumme + BETRAG - End If - End If - '3. Buchungszeile - NUR BEI EINZAHLUNG - insertBelegszeile(MANDANT, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat, beleg.BelegNr, beleg.Belegart, Buchungstext, BUCHUNGSBETRAG, "EUR", ZSzeilenr, ckennsoll2, Sollkonto2, Habenkonto2, SollHabenKZ) - - Else - - ZSzeilenr += 1 - - If BETRAG > 0 Then - sollkonto2 = Forderungskonto - Habenkonto2 = 0 - ckennsoll2 = "DB" - SollHabenKZ = "S" - - - Dim rows() As DataRow = dt_Verbuchungskonten.Select("Konto = '" & sollkonto2 & "'") - If rows.Length > 0 Then - Dim row As DataRow = rows(0) - If Not IsDBNull(row("Soll")) Then - dec_habensumme = Convert.ToDecimal(row("Soll")) - End If - row("Soll") = dec_habensumme + BETRAG * (-1) - End If - End If - - '4. Buchungszeile - insertBelegszeile(MANDANT, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat, beleg.BelegNr, beleg.Belegart, Buchungstext, BUCHUNGSBETRAG, "EUR", ZSzeilenr, ckennsoll2, Sollkonto2, Habenkonto2, SollHabenKZ) - End If - - ZSzeilenr += 1 - - - If TYP = "AUSZAHLUNG" Then - - If BETRAG > 0 Then - - 'BEGIN /* fünfte Buchungszeile bei Auszahlung und Direktverbuchung */ - - sollkonto2 = Erlöskonto - Habenkonto2 = 0 - ckennsoll2 = "KO" - SollHabenKZ = "H" - - - Dim rows() As DataRow = dt_Verbuchungskonten.Select("Konto = '" & sollkonto2 & "'") - If rows.Length > 0 Then - Dim row As DataRow = rows(0) - If Not IsDBNull(row("Haben")) Then - dec_habensumme = Convert.ToDecimal(row("Haben")) - End If - row("Haben") = dec_habensumme + BETRAG * (-1) - End If - - - '5. Buchungszeile - insertBelegszeile(MANDANT, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat, beleg.BelegNr, beleg.Belegart, Buchungstext, BUCHUNGSBETRAG, "EUR", ZSzeilenr, ckennsoll2, Sollkonto2, Habenkonto2, SollHabenKZ) - - End If - - - End If - - - - Dim SkontoDatum = beleg.BelegDat - Dim Nettodatum = beleg.BelegDat - - 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, Personenkonto, c_sprache, c_ustidnr, c_zahlziel, si_tage, dec_skonto, si_ntage, SkontoDatum, Nettodatum) - - '7/1 Schritt -> Salden-Fortschreibung! - Dim opvorgangsbetrag As Double = 0 - Saldenaktualisierung(VERAG_SQL, TYP, BETRAG, beleg, dec_sollsumme, dec_habensumme, MANDANT, Sollkonto2, Forderungskonto, Bestandskonto, Sachkonto, Erlöskonto, opvorgangsbetrag) - - '7/2 Schritt -> Saldenperiodenbuchungen (Salden-Fortschreibung)! - - For Each konto As DataRow In dt_Verbuchungskonten.Rows 'Schleifen2rec - If Not IsDBNull(konto("Soll")) AndAlso konto("Soll") <> 0 Or Not IsDBNull(konto("Haben")) AndAlso konto("Haben") <> 0 Then - periodenBuchungen(PERIODE, konto("Konto"), MANDANT, JAHR, konto("Soll"), konto("Haben")) - End If - Next - - '8. Schritt -> Offene Posten anlegen - createOP(MANDANT, BETRAG, beleg.BelegNr, beleg.BelegDat.ToShortDateString, beleg.BelegNr, Buchungstext, BUCHUNGSBETRAG, "EUR", Personenkonto, Forderungskonto, i_op_refid, Buchungstyp, c_sprache, c_zahlziel, dec_skonto, SkontoDatum.ToShortDateString, Nettodatum.ToShortDateString, c_ustidnr) - createOPVorgang(MANDANT, TYP, BETRAG, JAHR, PERIODE, i_beleg_refid, beleg.BelegDat.ToShortDateString, Buchungstext, Personenkonto, opvorgangsbetrag, i_op_refid, dt_creationDate, Sachkonto, "AUTO") - - - If checkifgebucht(MANDANT, beleg.BelegNr, Buchungstext) Then - MsgBox("GEBUCHT!") - Else - MsgBox("NICHT GEBUCHT!") - End If - - End If - - End If - - - - - - End Function - - Private Shared Sub erstelleEBSalden(mandant As String, Jahr As Integer, Konto As Integer) - - Dim Zaehler As String = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList("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 = " & Konto, "FIBU",, "0") - Dim aktSAldo As String = (New VERAG_PROG_ALLGEMEIN.SQL).getValueTxtBySqlVarList("Select [FIBU2].dbo.fibu_konto.dec_aktuellersaldo FROM [FIBU2].dbo.fibu_konto WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & mandant & " And [FIBU2].dbo.fibu_konto.i_konto = " & Konto, "FIBU",, "0") - If Zaehler = "" Or Zaehler = "0" Then - - If aktSAldo = "" Then aktSAldo = "0" - aktSAldo = aktSAldo.Replace(",", ".") - - - - '• Für alle dort enthaltenen Konten stellt es sicher, dass es im aktuellen Jahr Periodensalden in fibu_periodensaldo gibt (falls nicht, werden Null-EBs angelegt)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Dim SQL_UPATE 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('" & mandant & "', '" & Jahr & "', '" & Konto & "', 0, " & aktSAldo & ", 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,0, " & aktSAldo & ", 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)" - - - Dim erstellt As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_UPATE, "FIBU") - - End If - - - - End Sub - - Private Shared Sub insertBelegskopf(mandant As Integer, Jahr As Integer, periode As Integer, beleg_ref_id As Integer, datumKurz As String, BelegNr As String, BelegArt As String, Buchungstext As String, Belegkopfbetrag As Double, Waehrung As String, creationDate As String, Benutzer As String, ProtokollID As String) - - - Dim SQL_Insert = "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('" & mandant & "', " & Jahr & ", " & periode & ", " & beleg_ref_id & ", '" & datumKurz & "', '" & BelegNr & "', '" & BelegArt & "', '" & Buchungstext & "', " & Belegkopfbetrag & ", '" & Waehrung & "', " & Belegkopfbetrag & ", " & Belegkopfbetrag & ", 0, '" & creationDate & "', '" & Benutzer & "', 1, 21, 'Fleximport', 0, 2, '" & ProtokollID.Replace(",", ".") & "');" - - Dim inserted As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Insert, "FIBU") - - - End Sub - - Private Shared Sub insertBelegszeile(mandant As Integer, Jahr As Integer, periode As Integer, beleg_ref_id As Integer, 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) - - Dim SQL_Insert = "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('" & mandant & "', " & Jahr & ", " & periode & ", " & periode & ", " & beleg_ref_id & ", " & ZeilenNr & ", '" & ckennsoll2 & "', " & Sollkonto2 & ", '" & SollhabenKZ & "', 0, " & Habenkonto2 & ", " & Buchungsbetrag & ", '" & Waehrung & "', " & Buchungsbetrag & ", " & Buchungsbetrag & ", '" & datumKurz & "', '" & datumKurz & "', '" & BelegNr & "','" & BelegArt & "', '" & Buchungstext & "', 1);" - - Dim inserted As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Insert, "FIBU") - - - End Sub - 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 @@ -2937,234 +2471,466 @@ Public Class cRKSV 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(dec_skonto) 'SET @Skontodatum = DATEADD(DAY, @Skontotage, @gDatumKurz) - Nettodatum = Nettodatum.AddDays(si_tage) 'SET @Nettodatum = DATEADD(DAY, @Nettotage, @gDatumKurz) + 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 Sub Saldenaktualisierung(SQL As VERAG_PROG_ALLGEMEIN.SQL, TYP As String, Betrag As Double, Beleg As EABeleg, dec_sollsumme As Double, dec_habensumme As Double, Mandant As String, Sollkonto2 As Integer, Forderungskonto As Integer, Bestandskonto As Integer, Sachkonto As Integer, ErloeskontoBeiAuszahlung As Integer, opvorgangsbetrag As Double) - Dim dec_aktuellersaldo As Double = 0 - Dim eur_aktuellersaldo As Double = 0 - '----------FORDERUNGSKONTO------------------- - Dim dt_SaldoInfo_Forderungskonto As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT dec_aktuellersaldo,dec_sollsumme,dec_habensumme,eur_aktuellersaldo From [FIBU2].dbo.fibu_konto Where [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Forderungskonto, "FIBU") - If dt_SaldoInfo_Forderungskonto.Rows.Count = 1 Then - dec_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Forderungskonto.Rows(0).Item("dec_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Forderungskonto.Rows(0).Item("dec_aktuellersaldo"))) - eur_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Forderungskonto.Rows(0).Item("eur_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Forderungskonto.Rows(0).Item("eur_aktuellersaldo"))) - dec_sollsumme = IIf(IsDBNull(dt_SaldoInfo_Forderungskonto.Rows(0).Item("dec_sollsumme")), 0, CDbl(dt_SaldoInfo_Forderungskonto.Rows(0).Item("dec_sollsumme"))) - dec_habensumme = IIf(IsDBNull(dt_SaldoInfo_Forderungskonto.Rows(0).Item("dec_habensumme")), 0, CDbl(dt_SaldoInfo_Forderungskonto.Rows(0).Item("dec_habensumme"))) - End If - - If TYP = "EINZAHLUNG" Then - - If Betrag > 0 Then - - dec_aktuellersaldo = (dec_aktuellersaldo - Betrag) - dec_sollsumme = (dec_sollsumme - 0) - dec_habensumme = (dec_habensumme + Betrag) - eur_aktuellersaldo = (eur_aktuellersaldo - Betrag) - - - End If - - ElseIf TYP = "AUSZAHLUNG" Then - - If Betrag > 0 Then - - dec_aktuellersaldo = (dec_aktuellersaldo - Betrag) - dec_sollsumme = (dec_sollsumme - Betrag) - dec_habensumme = (dec_habensumme + 0) - eur_aktuellersaldo = (eur_aktuellersaldo - Betrag) - - End If - - End If - - SQL.doSQL("UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & Beleg.BelegDat.ToShortDateString & "', dec_aktuellersaldo = " & dec_aktuellersaldo.ToString.Replace(",", ".") & ", dec_sollsumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", dec_habensumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", eur_aktuellersaldo = " & eur_aktuellersaldo.ToString.Replace(",", ".") & " WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Forderungskonto, "FIBU") - - - '----------BESTANDSKONTO------------------- - - Dim dt_SaldoInfo_Bestandskonto As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT dec_aktuellersaldo,dec_sollsumme,dec_habensumme,eur_aktuellersaldo From [FIBU2].dbo.fibu_konto Where [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Bestandskonto, "FIBU") - If dt_SaldoInfo_Bestandskonto.Rows.Count = 1 Then - dec_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Bestandskonto.Rows(0).Item("dec_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Bestandskonto.Rows(0).Item("dec_aktuellersaldo"))) - eur_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Bestandskonto.Rows(0).Item("eur_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Bestandskonto.Rows(0).Item("eur_aktuellersaldo"))) - dec_sollsumme = IIf(IsDBNull(dt_SaldoInfo_Bestandskonto.Rows(0).Item("dec_sollsumme")), 0, CDbl(dt_SaldoInfo_Bestandskonto.Rows(0).Item("dec_sollsumme"))) - dec_habensumme = IIf(IsDBNull(dt_SaldoInfo_Bestandskonto.Rows(0).Item("dec_habensumme")), 0, CDbl(dt_SaldoInfo_Bestandskonto.Rows(0).Item("dec_habensumme"))) - End If - - If TYP = "EINZAHLUNG" Then - - If Betrag <> 0 Then - - dec_aktuellersaldo = (dec_aktuellersaldo + Betrag) - dec_sollsumme = (dec_sollsumme + Betrag) - dec_habensumme = (dec_habensumme + 0) - eur_aktuellersaldo = (eur_aktuellersaldo + Betrag) - - End If - - - - - - ElseIf TYP = "AUSZAHLUNG" Then - - If Betrag <> 0 Then - - dec_aktuellersaldo = (dec_aktuellersaldo + Betrag) - dec_sollsumme = (dec_sollsumme - 0) - dec_habensumme = (dec_habensumme - Betrag) - eur_aktuellersaldo = (eur_aktuellersaldo + Betrag) - - - End If - - End If - - SQL.doSQL("UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & Beleg.BelegDat.ToShortDateString & "', dec_aktuellersaldo = " & dec_aktuellersaldo.ToString.Replace(",", ".") & ", dec_sollsumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", dec_habensumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", eur_aktuellersaldo = " & eur_aktuellersaldo.ToString.Replace(",", ".") & " WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Bestandskonto, "FIBU") - - - '----------BESTANDSKONTO------------------- - - Dim dt_SaldoInfo_Sachkonto As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT dec_aktuellersaldo,dec_sollsumme,dec_habensumme,eur_aktuellersaldo From [FIBU2].dbo.fibu_konto Where [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Sachkonto, "FIBU") - If dt_SaldoInfo_Sachkonto.Rows.Count = 1 Then - dec_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Sachkonto.Rows(0).Item("dec_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Sachkonto.Rows(0).Item("dec_aktuellersaldo"))) - eur_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Sachkonto.Rows(0).Item("eur_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Sachkonto.Rows(0).Item("eur_aktuellersaldo"))) - dec_sollsumme = IIf(IsDBNull(dt_SaldoInfo_Sachkonto.Rows(0).Item("dec_sollsumme")), 0, CDbl(dt_SaldoInfo_Sachkonto.Rows(0).Item("dec_sollsumme"))) - dec_habensumme = IIf(IsDBNull(dt_SaldoInfo_Sachkonto.Rows(0).Item("dec_habensumme")), 0, CDbl(dt_SaldoInfo_Sachkonto.Rows(0).Item("dec_habensumme"))) - End If - - - SQL.doSQL("UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & Beleg.BelegDat.ToShortDateString & "', dec_aktuellersaldo = " & dec_aktuellersaldo.ToString.Replace(",", ".") & ", dec_sollsumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", dec_habensumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", eur_aktuellersaldo = " & eur_aktuellersaldo.ToString.Replace(",", ".") & " WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Sachkonto, "FIBU") - - - - If TYP = "AUSZAHLUNG" Then - - If Betrag <> 0 Then - - 'Erlöskonto bei Auszahlung - - Dim dt_SaldoInfo_ErloeskontoBeiAuszahlung As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT dec_aktuellersaldo,dec_sollsumme,dec_habensumme,eur_aktuellersaldo From [FIBU2].dbo.fibu_konto Where [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & ErloeskontoBeiAuszahlung, "FIBU") - If dt_SaldoInfo_ErloeskontoBeiAuszahlung.Rows.Count = 1 Then - dec_sollsumme = IIf(IsDBNull(dt_SaldoInfo_ErloeskontoBeiAuszahlung.Rows(0).Item("dec_sollsumme")), 0, CDbl(dt_SaldoInfo_ErloeskontoBeiAuszahlung.Rows(0).Item("dec_sollsumme"))) - dec_habensumme = IIf(IsDBNull(dt_SaldoInfo_ErloeskontoBeiAuszahlung.Rows(0).Item("dec_habensumme")), 0, CDbl(dt_SaldoInfo_ErloeskontoBeiAuszahlung.Rows(0).Item("dec_habensumme"))) - End If - - dec_sollsumme = (dec_sollsumme - Betrag) - dec_habensumme = (dec_habensumme - Betrag) - - SQL.doSQL("UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & Beleg.BelegDat.ToShortDateString & "', dec_sollsumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", dec_habensumme = " & dec_sollsumme.ToString.Replace(",", ".") & " WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & ErloeskontoBeiAuszahlung, "FIBU") - - End If - - End If - - - - 'SET @updatekonto = CAST(@Kontonummer AS INTEGER) - - Dim dt_SaldoInfo_Kontonummer As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql("SELECT dec_aktuellersaldo,dec_sollsumme,dec_habensumme,eur_aktuellersaldo From [FIBU2].dbo.fibu_konto Where [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Sachkonto, "FIBU") - If dt_SaldoInfo_Kontonummer.Rows.Count = 1 Then - dec_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Kontonummer.Rows(0).Item("dec_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Kontonummer.Rows(0).Item("dec_aktuellersaldo"))) - eur_aktuellersaldo = IIf(IsDBNull(dt_SaldoInfo_Kontonummer.Rows(0).Item("eur_aktuellersaldo")), 0, CDbl(dt_SaldoInfo_Kontonummer.Rows(0).Item("eur_aktuellersaldo"))) - dec_sollsumme = IIf(IsDBNull(dt_SaldoInfo_Kontonummer.Rows(0).Item("dec_sollsumme")), 0, CDbl(dt_SaldoInfo_Kontonummer.Rows(0).Item("dec_sollsumme"))) - dec_habensumme = IIf(IsDBNull(dt_SaldoInfo_Kontonummer.Rows(0).Item("dec_habensumme")), 0, CDbl(dt_SaldoInfo_Kontonummer.Rows(0).Item("dec_habensumme"))) - End If - - - - If TYP = "EINZAHLUNG" Then - - If Betrag <> 0 Then - - - dec_aktuellersaldo = (dec_aktuellersaldo - Betrag) - dec_sollsumme = (dec_sollsumme + 0) - dec_habensumme = (dec_habensumme + Betrag) - eur_aktuellersaldo = (eur_aktuellersaldo - Betrag) - opvorgangsbetrag = Betrag * (-1) - - - End If - - - - - - ElseIf TYP = "AUSZAHLUNG" Then - - If Betrag <> 0 Then - - dec_aktuellersaldo = (dec_aktuellersaldo - Betrag) - dec_sollsumme = (dec_sollsumme - Betrag) - dec_habensumme = (dec_habensumme - 0) - eur_aktuellersaldo = (eur_aktuellersaldo - Betrag) - opvorgangsbetrag = Betrag * (-1) / CDbl(2) - - End If - - End If - - SQL.doSQL("UPDATE [FIBU2].dbo.fibu_konto SET d_lebudat ='" & Beleg.BelegDat.ToShortDateString & "', dec_aktuellersaldo = " & dec_aktuellersaldo.ToString.Replace(",", ".") & ", dec_sollsumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", dec_habensumme = " & dec_sollsumme.ToString.Replace(",", ".") & ", eur_aktuellersaldo = " & eur_aktuellersaldo.ToString.Replace(",", ".") & " WHERE [FIBU2].dbo.fibu_konto.i_firm_refid = " & Mandant & " And [FIBU2].dbo.fibu_konto.i_konto =" & Bestandskonto, "FIBU") - - - End Sub - - Private Shared Sub createOP(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) - - 'OPs - Dim SQL_Insert_DEBITOR = "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(" & mandant & "," & i_op_refid & ", " & BelegNrText & ", " & Personenkonto & ", " & Forderungskonto & ", " & BelegNrText & ", '" & datumKurz & "', '" & datumKurz & "', '" & c_op_Typ & "', '" & Sprache & "', '" & Waehrung & "', " & Betrag * (-1) & ", " & Betrag * (-1) & " , " & Betrag * (-1) & " , " & Betrag * (-1) & " , " & Betrag * (-1) & " , " & Betrag * (-1) & " , 0, 0, 0, '" & Zahlungsziel & "', '" & Skonto & "', '" & Skontodatum & "', 0,'" & Nettodatum & "', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '" & Buchungstext & "', '" & Buchungstext & "', 0, 1, '" & c_ustidnr & "');" - - - Dim insertedDEB As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Insert_DEBITOR, "FIBU") - - - End Sub - - Private Shared Sub createOPVorgang(mandant As Integer, TYP As String, Betrag As Double, Jahr As Integer, periode As Integer, beleg_ref_id As Integer, 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) - - 'OP-Vorgänge - - Dim SQL_Insert_V_DEB = "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 (" & mandant & ", " & Personenkonto & ", " & i_op_refid & ", " & beleg_ref_id & ", 'P', '" & datumKurz & "', " & periode & ", " & Jahr & ", 0, 0, " & Sachkonto & ", " & opvorgangsbetrag & ", 0, " & opvorgangsbetrag & ", 0, " & opvorgangsbetrag & ", 1, 1, '" & Buchungstext & "', '" & dt_creation & "', '" & Benutzer & "', 0, 0, 0, 0);" - - - Dim insertedV_DEB As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Insert_V_DEB, "FIBU") - - - If TYP = "AUSZAHLUNG" Then - - If Betrag <> 0 Then - - 'if auszahlungsbetrag <> 0 THen - Dim SQL_Insert_V_DEB2 = "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 (" & mandant & ", " & Personenkonto & ", " & i_op_refid & ", " & beleg_ref_id & ", 'P', '" & datumKurz & "', " & periode & ", " & Jahr & ", 0, 0, " & Sachkonto & ", " & opvorgangsbetrag & ", 0, " & opvorgangsbetrag & ", 0, " & opvorgangsbetrag & ", 1, 5, '" & Buchungstext & "', '" & dt_creation & "', '" & Benutzer & "', 0, 0, 0, 0);" - - Dim insertedV_DEB2 As Boolean = (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(SQL_Insert_V_DEB2, "FIBU") - - End If - End If - - End Sub Private Shared Function checkifgebucht(mandant As Integer, belegnrtext As String, PosText As String) As Boolean - Dim checkDS As String = "Select Case COUNT(fbz.i_beleg_refid) From [FIBU2].dbo.fibu_belegzeile AS fbz Where fbz.i_firm_refid = " & mandant & " And fbz.c_urbelegid Like '" & belegnrtext & "' And fbz.c_buchtext Like ('%'" & PosText & "'%')" + 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("'", "''") & "%'" - If checkDS <> "" AndAlso IsNumeric(checkDS) AndAlso CInt(checkDS) >= 3 Then + 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 + + + Public Shared Property DefaultMandant As Integer = 9 + 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) 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 + + 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 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 ", "")) & If(typ = "AUSZAHLUNG", "KA", "KE") & "_" & 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 + + ' update nummern table only if we will actually book (betrag<>0) + 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 + + Dim FIBU_YEAR = jahr + Dim BelegNrUID As String = "BR" + If periode = 1 Then FIBU_YEAR = FIBU_YEAR - 1 + BelegNrUID &= FIBU_YEAR.ToString.Substring(2, 2) + BelegNrUID &= i_beleg_refid.ToString("D5") + + 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, 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, 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, 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, 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, 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, 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, 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, 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, periode, SafeIntToSql(i_beleg_refid), beleg.BelegDat.ToShortDateString, buchungstext, beleg.KundenNr, CDbl(opvorgangsbetrag), i_beleg_refid, Now.ToString(), 0, VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME) + + ' 11) single check if gebucht + Dim gebucht = checkifgebucht_new(mandant, SafeString(beleg.BelegNr), buchungstext) + If gebucht Then + ' logging instead of MsgBox in production + ' MsgBox("GEBUCHT!") + Else + ' MsgBox("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 + Return $"{stapelRefId:0000}-{lfd:0000}-{now:yyyy-MM-dd HH:mm:ss}" + 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, 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 & "," & 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 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) + Dim sql As New VERAG_PROG_ALLGEMEIN.SQL() + Dim betragStr = (Betrag * -1).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(BelegNrText) & ",'" & 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, 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) + 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) & "'," & periode & "," & Jahr & ",0,0," & Sachkonto & "," & opvorgangsbetrag.ToString().Replace(",", ".") & ",0," & opvorgangsbetrag.ToString().Replace(",", ".") & ",0," & opvorgangsbetrag.ToString().Replace(",", ".") & ",1,1,'" & 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 diff --git a/SDL/kassenbuch/frmBelegNeu.Designer.vb b/SDL/kassenbuch/frmBelegNeu.Designer.vb index 18936d33..80c2ebcc 100644 --- a/SDL/kassenbuch/frmBelegNeu.Designer.vb +++ b/SDL/kassenbuch/frmBelegNeu.Designer.vb @@ -71,13 +71,13 @@ Partial Class frmBelegNeu Me.btnAusgabebeleg = New System.Windows.Forms.Button() Me.lblErrPos = New System.Windows.Forms.Label() Me.pnlData = New System.Windows.Forms.Panel() + Me.lblErr_Fahrer = New System.Windows.Forms.Label() + Me.lblErr_Pass = New System.Windows.Forms.Label() Me.Label28 = New System.Windows.Forms.Label() Me.lblZahlungsmittel = New System.Windows.Forms.Label() Me.txtzuKassieren = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.Label22 = New System.Windows.Forms.Label() Me.cbxSplittung = New System.Windows.Forms.CheckBox() - Me.lblErr_Fahrer = New System.Windows.Forms.Label() - Me.lblErr_Pass = New System.Windows.Forms.Label() Me.lblErr_LKW = New System.Windows.Forms.Label() Me.btnOfferte = New System.Windows.Forms.Button() Me.Label19 = New System.Windows.Forms.Label() @@ -144,6 +144,7 @@ Partial Class frmBelegNeu Me.DataGridViewTextBoxColumn9 = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.FlowLayoutPanel2 = New System.Windows.Forms.FlowLayoutPanel() Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.cboLeihgeldEinzahlung = New System.Windows.Forms.CheckBox() CType(Me.dgvBelegPos, System.ComponentModel.ISupportInitialize).BeginInit() Me.pnl.SuspendLayout() Me.pnlData.SuspendLayout() @@ -645,6 +646,7 @@ Partial Class frmBelegNeu 'pnlData ' Me.pnlData.BackColor = System.Drawing.Color.FromArgb(CType(CType(244, Byte), Integer), CType(CType(244, Byte), Integer), CType(CType(244, Byte), Integer)) + Me.pnlData.Controls.Add(Me.cboLeihgeldEinzahlung) Me.pnlData.Controls.Add(Me.lblErr_Fahrer) Me.pnlData.Controls.Add(Me.lblErr_Pass) Me.pnlData.Controls.Add(Me.Label28) @@ -690,6 +692,30 @@ Partial Class frmBelegNeu Me.pnlData.Size = New System.Drawing.Size(624, 208) Me.pnlData.TabIndex = 5 ' + 'lblErr_Fahrer + ' + Me.lblErr_Fahrer.AutoSize = True + Me.lblErr_Fahrer.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblErr_Fahrer.ForeColor = System.Drawing.Color.Red + Me.lblErr_Fahrer.Location = New System.Drawing.Point(351, 150) + Me.lblErr_Fahrer.Name = "lblErr_Fahrer" + Me.lblErr_Fahrer.Size = New System.Drawing.Size(90, 13) + Me.lblErr_Fahrer.TabIndex = 43 + Me.lblErr_Fahrer.Text = "Bitte angeben!" + Me.lblErr_Fahrer.Visible = False + ' + 'lblErr_Pass + ' + Me.lblErr_Pass.AutoSize = True + Me.lblErr_Pass.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.lblErr_Pass.ForeColor = System.Drawing.Color.Red + Me.lblErr_Pass.Location = New System.Drawing.Point(351, 196) + Me.lblErr_Pass.Name = "lblErr_Pass" + Me.lblErr_Pass.Size = New System.Drawing.Size(90, 13) + Me.lblErr_Pass.TabIndex = 42 + Me.lblErr_Pass.Text = "Bitte angeben!" + Me.lblErr_Pass.Visible = False + ' 'Label28 ' Me.Label28.AutoSize = True @@ -758,30 +784,6 @@ Partial Class frmBelegNeu Me.cbxSplittung.Text = "Splittung nach Sendung" Me.cbxSplittung.UseVisualStyleBackColor = True ' - 'lblErr_Fahrer - ' - Me.lblErr_Fahrer.AutoSize = True - Me.lblErr_Fahrer.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblErr_Fahrer.ForeColor = System.Drawing.Color.Red - Me.lblErr_Fahrer.Location = New System.Drawing.Point(351, 150) - Me.lblErr_Fahrer.Name = "lblErr_Fahrer" - Me.lblErr_Fahrer.Size = New System.Drawing.Size(90, 13) - Me.lblErr_Fahrer.TabIndex = 43 - Me.lblErr_Fahrer.Text = "Bitte angeben!" - Me.lblErr_Fahrer.Visible = False - ' - 'lblErr_Pass - ' - Me.lblErr_Pass.AutoSize = True - Me.lblErr_Pass.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.lblErr_Pass.ForeColor = System.Drawing.Color.Red - Me.lblErr_Pass.Location = New System.Drawing.Point(351, 196) - Me.lblErr_Pass.Name = "lblErr_Pass" - Me.lblErr_Pass.Size = New System.Drawing.Size(90, 13) - Me.lblErr_Pass.TabIndex = 42 - Me.lblErr_Pass.Text = "Bitte angeben!" - Me.lblErr_Pass.Visible = False - ' 'lblErr_LKW ' Me.lblErr_LKW.AutoSize = True @@ -989,6 +991,7 @@ Partial Class frmBelegNeu Me.cboFrachtf_Sgut._allowedValuesFreiText = Nothing Me.cboFrachtf_Sgut._allowFreiText = False Me.cboFrachtf_Sgut._value = "" + Me.cboFrachtf_Sgut.DropDownWidth = 100 Me.cboFrachtf_Sgut.FormattingEnabled = True Me.cboFrachtf_Sgut.Location = New System.Drawing.Point(302, 163) Me.cboFrachtf_Sgut.MaxLength = 1 @@ -1747,6 +1750,16 @@ Partial Class frmBelegNeu Me.ContextMenuStrip1.Name = "ContextMenuStrip1" Me.ContextMenuStrip1.Size = New System.Drawing.Size(61, 4) ' + 'cboLeihgeldEinzahlung + ' + Me.cboLeihgeldEinzahlung.AutoSize = True + Me.cboLeihgeldEinzahlung.Location = New System.Drawing.Point(9, 185) + Me.cboLeihgeldEinzahlung.Name = "cboLeihgeldEinzahlung" + Me.cboLeihgeldEinzahlung.Size = New System.Drawing.Size(121, 17) + Me.cboLeihgeldEinzahlung.TabIndex = 48 + Me.cboLeihgeldEinzahlung.Text = "Leihgeld Einzahlung" + Me.cboLeihgeldEinzahlung.UseVisualStyleBackColor = True + ' 'frmBelegNeu ' Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) @@ -1895,4 +1908,5 @@ Partial Class frmBelegNeu Friend WithEvents Label28 As Label Friend WithEvents lblZahlungsmittel As Label Friend WithEvents LinkLabel1 As LinkLabel + Friend WithEvents cboLeihgeldEinzahlung As CheckBox End Class diff --git a/SDL/kassenbuch/frmBelegNeu.vb b/SDL/kassenbuch/frmBelegNeu.vb index 90e7adbf..25645b24 100644 --- a/SDL/kassenbuch/frmBelegNeu.vb +++ b/SDL/kassenbuch/frmBelegNeu.vb @@ -1578,8 +1578,13 @@ Public Class frmBelegNeu Me.Cursor = Cursors.WaitCursor + Dim isLeihgeldeinzahlung As Boolean = False + Dim summeNETTO As Double = 0 - For Each p In BELEG.POS : summeNETTO += p.Betrag : Next + For Each p In BELEG.POS + summeNETTO += p.Betrag + If p.LeistungsNr = 111 AndAlso p.LeistungsBez = "Rückzahlung Leihgeld" AndAlso BELEG.POS.Count = 1 Then isLeihgeldeinzahlung = True 'nur bei 1 POS und Leihgeld-Einzahlung! + Next Dim summeBRUTTO = summeNETTO Dim steuersatz As Double = SQL.getValueTxtBySql("SELECT isnull(tblSteuersätze.Steuersatz,0) FROM tblSteuersätze WHERE tblSteuersätze.Nr='" & BELEG.Steuerschlüssel & "' ", "FMZOLL") @@ -1600,7 +1605,7 @@ Public Class frmBelegNeu Dim JournalNr = 0 - If Not cRKSV.insertKB(PERSONAL, BELEG, KASSE.rksv_id, RKSV_Beleg_Id, KASSE.rksv_aktiv, JournalNr, KASSE.rksv_firma, POSFIBU, Zahlungsmittel) Then + If Not cRKSV.insertKB(PERSONAL, BELEG, KASSE.rksv_id, RKSV_Beleg_Id, KASSE.rksv_aktiv, JournalNr, KASSE.rksv_firma, POSFIBU, Zahlungsmittel, isLeihgeldeinzahlung) Then KASSE.DECREASE_BELEG_UMSATZ(oldBelegZaehler, summeBRUTTO * -1) MsgBox("Programmfehler bei Eintrag ins Kassenbuch.") Me.Cursor = Cursors.Default : warnClose = False : Me.Close() : Exit Sub