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 '------------------------------------- LOADANDUPDATE(SpeditionsbuchNr, Buchungsjahr, LfdRechnungsNr, VonRechnungsNr, BisRechnungsNr) '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 Public Sub LOADANDUPDATE(ByVal SpeditionsbuchNr As String, ByVal Buchungsjahr As String, ByRef LfdRechnungsNr As Integer, ByVal VonRechnungsNr As String, ByVal BisRechnungsNr As String) Try Using conn As SqlConnection = cSqlDb.GetNewOpenConnectionFMZOLL() Using cmd As New SqlCommand( "BEGIN TRAN IF EXISTS (SELECT * FROM Rechnungsnummern WITH(updlock,serializable) WHERE [SpeditionsbuchNr]=@SpeditionsbuchNr AND Buchungsjahr=@Buchungsjahr) BEGIN SELECT [LfdRechnungsNr] FROM dbo.Rechnungsnummern WHERE [SpeditionsbuchNr]=@Speditionsbuchnr AND Buchungsjahr=@Buchungsjahr UPDATE dbo.Rechnungsnummern SET LfdRechnungsNr= (SELECT [LfdRechnungsNr] as newNr FROM dbo.Rechnungsnummern WHERE [SpeditionsbuchNr]=@Speditionsbuchnr AND Buchungsjahr=@Buchungsjahr) + 1 WHERE [SpeditionsbuchNr]=@Speditionsbuchnr AND Buchungsjahr=@Buchungsjahr END; else BEGIN INSERT INTO [Rechnungsnummern](SpeditionsbuchNr,[Buchungsjahr],[VonRechnungsNr],[BisRechnungsNr],[LfdRechnungsNr]) OUTPUT @LfdRechnungsNr AS [LfdRechnungsNr] VALUES (@SpeditionsbuchNr, @Buchungsjahr,@VonRechnungsNr,@BisRechnungsNr,@LfdRechnungsNr) END COMMIT TRAN", conn) cmd.Parameters.AddWithValue("@SpeditionsbuchNr", SpeditionsbuchNr) cmd.Parameters.AddWithValue("@Buchungsjahr", Buchungsjahr) cmd.Parameters.AddWithValue("@LfdRechnungsNr", LfdRechnungsNr) cmd.Parameters.AddWithValue("@VonRechnungsNr", VonRechnungsNr) cmd.Parameters.AddWithValue("@BisRechnungsNr", BisRechnungsNr) Dim dr = cmd.ExecuteScalar() 'Dim dr = cmd.ExecuteReader() LfdRechnungsNr = dr End Using End Using 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