Offerte, etc.

This commit is contained in:
2026-06-26 16:02:47 +02:00
parent 6350ff0a56
commit 8c22ee27f9
3 changed files with 70 additions and 25 deletions

View File

@@ -318,7 +318,7 @@ Public Class cProgramFunctions
Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr) Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr)
Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr) Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr)
Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr) Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr)
Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr) 'Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr)
End Select End Select
Return False Return False
End Function End Function

View File

@@ -960,10 +960,8 @@ Public Class cStandardofferten
Property BGebMinBetrag As Object = Nothing Property BGebMinBetrag As Object = Nothing
Property BerechnungsartPosInkludiert As Object = Nothing Property BerechnungsartPosInkludiert As Object = Nothing
Property BerechnungsartNr As Object = Nothing Property BerechnungsartNr As Object = Nothing
Property LeistungsBez_EN As Object = Nothing Property LeistungsBez_EN As Object = Nothing
Property LeistungsBez_RO As Object = Nothing Property LeistungsBez_RO As Object = Nothing
Property LeistungsBez_TR As Object = Nothing Property LeistungsBez_TR As Object = Nothing
Public hasEntry = False Public hasEntry = False

View File

@@ -367,24 +367,23 @@ Public Class cProgramFunctions
End Sub End Sub
Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean
Try Try
Dim sql As String = Dim sql As String =
"SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" & tableName & "' AND DATA_TYPE IN ('varchar','nvarchar','char','nchar')" "SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '" & tableName & "'
AND DATA_TYPE IN ('varchar','nvarchar','char','nchar','decimal','numeric','float','real')"
Dim dt As DataTable = Dim dt As DataTable =
(New SQL).loadDgvBySql(sql, conn_art) (New SQL).loadDgvBySql(sql, conn_art)
If dt Is Nothing Then Return False If dt Is Nothing Then Return False
Dim fieldLengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) ' Struktur für Feldinfos
Dim fieldInfo As New Dictionary(Of String, DataRow)(StringComparer.OrdinalIgnoreCase)
For Each r As DataRow In dt.Rows For Each r As DataRow In dt.Rows
fieldInfo(r!COLUMN_NAME.ToString) = r
fieldLengths(r!COLUMN_NAME.ToString) =
CInt(r!CHARACTER_MAXIMUM_LENGTH)
Next Next
Dim errors As New List(Of String) Dim errors As New List(Of String)
@@ -397,41 +396,89 @@ Public Class cProgramFunctions
Dim fieldName As String = p.Text().TrimStart("@"c) Dim fieldName As String = p.Text().TrimStart("@"c)
If Not fieldLengths.ContainsKey(fieldName) Then Continue For If Not fieldInfo.ContainsKey(fieldName) Then Continue For
Dim maxLen As Integer = fieldLengths(fieldName) Dim row As DataRow = fieldInfo(fieldName)
Dim dataType As String = row!DATA_TYPE.ToString.ToLower
' varchar(max) / nvarchar(max) Dim valueObj As Object = p.Value()
If maxLen = -1 Then Continue For Dim valueStr As String = valueObj.ToString
Dim value As String = p.Value().ToString ' -------------------------
' 1) TEXTFELDER
' -------------------------
If dataType.Contains("char") Then
If value.Length > maxLen Then Dim maxLen As Integer = If(IsDBNull(row!CHARACTER_MAXIMUM_LENGTH), -1, CInt(row!CHARACTER_MAXIMUM_LENGTH))
errors.Add(fieldName & " -> " & value.Length & "/" & maxLen) If maxLen = -1 Then Continue For ' varchar(max)
If valueStr.Length > maxLen Then
errors.Add(fieldName & " -> " & valueStr.Length & "/" & maxLen)
End If
End If
' -------------------------
' 2) NUMERISCHE FELDER
' -------------------------
If dataType = "decimal" OrElse dataType = "numeric" OrElse dataType = "float" OrElse dataType = "real" Then
Dim decValue As Decimal
If Not Decimal.TryParse(valueStr, Globalization.NumberStyles.Any,
Globalization.CultureInfo.InvariantCulture, decValue) Then
errors.Add(fieldName & " -> Ungültiger numerischer Wert: " & valueStr)
Continue For
End If
' decimal / numeric prüfen (Precision/Scale)
If dataType = "decimal" OrElse dataType = "numeric" Then
Dim precision As Integer = If(IsDBNull(row!NUMERIC_PRECISION), 0, CInt(row!NUMERIC_PRECISION))
Dim scale As Integer = If(IsDBNull(row!NUMERIC_SCALE), 0, CInt(row!NUMERIC_SCALE))
Dim parts = decValue.ToString(Globalization.CultureInfo.InvariantCulture).Split("."c)
Dim digitsBefore As Integer = parts(0).Replace("-", "").Length
Dim digitsAfter As Integer = If(parts.Length > 1, parts(1).Length, 0)
If digitsBefore + digitsAfter > precision OrElse digitsAfter > scale Then
errors.Add(fieldName & " -> " & decValue &
" überschreitet precision/scale (" & precision & "," & scale & ")")
End If
End If
' float/real -> Catch Overflow ähnlich SQL Server Verhalten
If dataType = "float" OrElse dataType = "real" Then
Try
Dim test As Double = CDbl(decValue)
Catch
errors.Add(fieldName & " -> Float/Real Überlauf: " & valueStr)
End Try
End If
End If End If
Next Next
If errors.Count > 0 Then If errors.Count > 0 Then
Info = "Folgende SQL-Felder sind zu lang:" & vbCrLf & vbCrLf & String.Join(vbCrLf, errors) Info = "Folgende SQL-Felder sind ungültig:" & vbCrLf & vbCrLf &
String.Join(vbCrLf, errors)
If showError Then If showError Then
MsgBox(Info, MsgBoxStyle.Exclamation) MsgBox(Info, MsgBoxStyle.Exclamation)
End If End If
Return False Return False
End If End If
Return True Return True
Catch ex As Exception Catch ex As Exception
MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message) MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message)
Return False
Return False
End Try End Try
End Function End Function