Imports System.Data.SqlClient Public Class cRechnungsnummern Property SpeditionsbuchNr As String = "" 'FIRMA! Property Buchungsjahr As String = "" Property VonRechnungsNr As Integer = -1 Property BisRechnungsNr As Integer = -1 Property LfdRechnungsNr As Integer = 0 ' Property upsize_ts As String Dim SQL As New SQL Public Sub New(SpeditionsbuchNr As String, Buchungsjahr As String) Me.SpeditionsbuchNr = SpeditionsbuchNr Me.Buchungsjahr = Buchungsjahr 'Default-Werte: '------------------------------------- Select Case SpeditionsbuchNr Case 1 VonRechnungsNr = Now.ToString("yy") & "100001" BisRechnungsNr = Now.ToString("yy") & "199999" Case 3 VonRechnungsNr = Now.ToString("yy") & "300001" BisRechnungsNr = Now.ToString("yy") & "399999" Case 7 VonRechnungsNr = Now.ToString("yy") & "700001" BisRechnungsNr = Now.ToString("yy") & "799999" Case 11 VonRechnungsNr = Now.ToString("yy") & "900001" BisRechnungsNr = Now.ToString("yy") & "999999" Case 15 VonRechnungsNr = Now.ToString("yy") & "200001" BisRechnungsNr = Now.ToString("yy") & "299999" Case 20 VonRechnungsNr = Now.ToString("yy") & "400001" BisRechnungsNr = Now.ToString("yy") & "499999" Case 17 'FrontOffice VonRechnungsNr = Now.ToString("yy") & "500001" BisRechnungsNr = Now.ToString("yy") & "599999" Case 21 ' UNISPED AT VonRechnungsNr = "7000000" BisRechnungsNr = "7999999" Case 22 ' UNISPED DE VonRechnungsNr = "9000000" BisRechnungsNr = "9999999" Case 23 ' UNISPED Zollservice VonRechnungsNr = "5000000" BisRechnungsNr = "5999999" Case 26 ' VERAG-UNISPED VonRechnungsNr = Now.ToString("yy") & "0000001" BisRechnungsNr = Now.ToString("yy") & "9999999" End Select LfdRechnungsNr = VonRechnungsNr '------------------------------------- 'LOAD(SpeditionsbuchNr, Buchungsjahr) LOAD(SpeditionsbuchNr, Buchungsjahr) End Sub Public Function INCREASE_RGNR() As Integer If LfdRechnungsNr > 0 Then LfdRechnungsNr += 1 Else LfdRechnungsNr = 1 End If SAVE() 'ROWVERSION Return LfdRechnungsNr End Function Public Function DECREASE_RGNR() As Integer If LfdRechnungsNr > 0 Then LfdRechnungsNr -= 1 End If SAVE() Return LfdRechnungsNr End Function Public Function CHECK_RGNR(Optional sleep = False) As Integer ' Prüfung, ob RgNr schon vergeben wurde --> dann +1, bis freie Nr. Dim increased = False If sleep Then System.Threading.Thread.Sleep(200) ' nur, um abzuwarten falls parallel eine Nr vergeben wird While SQL.DLookup("count(*)", "Rechnungsausgang", " RechnungsNr='" & LfdRechnungsNr & "' and Firma_ID='" & SpeditionsbuchNr & "' and Buchungsjahr='" & Buchungsjahr & "' ", "FMZOLL", 0) > 0 LfdRechnungsNr += 1 increased = True System.Threading.Thread.Sleep(50) ' nur, um abzuwarten falls parallel eine Nr vergeben wird End While If increased Then SAVE() Return LfdRechnungsNr End Function Public Shared Function CHECK_RGNR_NEW(aktuelleRechnungsnummer, SpeditionsbuchNr, Buchungsjahr) As Integer ' Prüfung, ob RgNr schon vergeben wurde --> dann +1, bis freie Nr. CHECK_RGNR_NEW = aktuelleRechnungsnummer Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL ' If sleep Then System.Threading.Thread.Sleep(200) ' nur, um abzuwarten falls parallel eine Nr vergeben wird While SQL.DLookup("count(*)", "Rechnungsausgang", " RechnungsNr='" & aktuelleRechnungsnummer & "' and Firma_ID='" & SpeditionsbuchNr & "' and Buchungsjahr='" & Buchungsjahr & "' ", "FMZOLL", 0) > 0 'Wenn eine Doppelvergabe festgestellt wurde --> LfdRgNr aus DB neu ziehen:... Dim RG_NR As New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(SpeditionsbuchNr, Buchungsjahr) aktuelleRechnungsnummer = RG_NR.LfdRechnungsNr ' --> Die in der DB gespeicherte RgNr wird verwendet CHECK_RGNR_NEW = RG_NR.LfdRechnungsNr ' --> Die in der DB gespeicherte RgNr wird verwendet RG_NR.INCREASE_RGNR() ' ..... und gelcih wieder hcoh zählen System.Threading.Thread.Sleep(50) ' nur, um abzuwarten falls parallel eine Nr vergeben wird End While End Function Public Shared Function DECREASE_RGNR_NEW(SpeditionsbuchNr, Buchungsjahr) As Boolean Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Return SQL.doSQL("UPDATE [Rechnungsnummern] SET LfdRechnungsNr=LfdRechnungsNr-1 WHERE SpeditionsbuchNr='" & SpeditionsbuchNr & "' and Buchungsjahr='" & Buchungsjahr & "' ", "FMZOLL", 0) End Function Public Function SAVE() As Boolean 'obj As Object, tablename As String, where As String) As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList() Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM [Rechnungsnummern] WITH(updlock,serializable) WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr) " & " BEGIN " & getUpdateCmd() & " END " & " Else " & " BEGIN " & getInsertCmd() & " END " & " commit tran " 'MsgBox(sqlstr) ' Dim returnBool = SQL.doSQL(sqlstr, "FMZOLL", , list) ' Me.upsize_ts = SQL.DLookup("upsize_ts", "Rechnungsnummern", "SpeditionsbuchNr ='" & Me.SpeditionsbuchNr & "' AND Buchungsjahr='" & Me.Buchungsjahr & "'") ' Return returnBool Return SQL.doSQL(sqlstr, "FMZOLL", , list) End Function Public Sub LOAD(SpeditionsbuchNr As String, Buchungsjahr As String) Try Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL() Using cmd As New SqlCommand("SELECT * FROM Rechnungsnummern WITH(updlock,serializable) WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr ", conn) cmd.Parameters.AddWithValue("@SpeditionsbuchNr", SpeditionsbuchNr) cmd.Parameters.AddWithValue("@Buchungsjahr", Buchungsjahr) Dim dr = cmd.ExecuteReader() If dr.Read Then Me.SpeditionsbuchNr = cSqlDb.checkNullStr(dr.Item("SpeditionsbuchNr")) Me.Buchungsjahr = cSqlDb.checkNullStr(dr.Item("Buchungsjahr")) Me.LfdRechnungsNr = cSqlDb.checkNullStr(dr.Item("LfdRechnungsNr")) Me.VonRechnungsNr = cSqlDb.checkNullInteger(dr.Item("VonRechnungsNr")) Me.BisRechnungsNr = cSqlDb.checkNullInteger(dr.Item("BisRechnungsNr")) ' Me.upsize_ts = dr.Item("upsize_ts") End If dr.Close() End Using End Using 'Return Nothing Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try ' Return Nothing End Sub Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("SpeditionsbuchNr", SpeditionsbuchNr)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("Buchungsjahr", Buchungsjahr)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("LfdRechnungsNr", LfdRechnungsNr)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("VonRechnungsNr", VonRechnungsNr)) list.Add(New VERAG_PROG_ALLGEMEIN.MyListItem2("BisRechnungsNr", BisRechnungsNr)) Return list End Function Public Function getUpdateCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList() Dim str As String = "" For Each i In list str &= "[" & i.Text & "] = @" & i.Text.Replace("-", "").Replace(" ", "") & "," Next str = str.Substring(0, str.Length - 1) 'wg. ',' Return (" UPDATE [Rechnungsnummern] SET " & str & " WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Function getInsertCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.MyListItem2) = getParameterList() Dim str As String = "" Dim values As String = "" For Each i In list str &= "[" & i.Text & "]," values &= "@" & i.Text.Replace("-", "").Replace(" ", "") & "," Next str = str.Substring(0, str.Length - 1) 'wg. ',' values = values.Substring(0, values.Length - 1) 'wg. ',' Return (" INSERT INTO [Rechnungsnummern] (" & str & ") VALUES(" & values & ") ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function End Class