237 lines
7.6 KiB
Plaintext
237 lines
7.6 KiB
Plaintext
' ArticleExists(Identifier: String)
|
|
' ----------------------------------------------------------------------------
|
|
' Findet Artikelnummer anhand von versch. Kriterien
|
|
' - Artikel-Nummer, Alternative Artikel-Nummer, EAN-Code, Seriennummer
|
|
' - Gibt die Zeile im Grid zurück in der Artikel das erste Mal gefunden wurde
|
|
'
|
|
' Returns: ArticleExists: Int
|
|
' ----------------------------------------------------------------------------
|
|
' Copyright (c) 2021 by Digital Data GmbH
|
|
'
|
|
' Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
|
' Tel.: 0641/202360 • E-Mail: info-flow(at)digitaldata.works
|
|
' ----------------------------------------------------------------------------
|
|
' Creation Date / Author: 01.09.2020 / JJ
|
|
' Version Date / Editor: 13.12.2021 / MP
|
|
' Version Number: 3.0.0.6
|
|
|
|
Const ARTICLE_EXISTS_NO_STOCK = -99
|
|
Const ARTICLE_EXISTS_NO_SERIALNUMBER = -98
|
|
Const ARTICLE_EXISTS_NO_ARTICLE_EAN = -97
|
|
Const ARTICLE_EXISTS_NO_REGEX_MATCH = -96
|
|
Const ARTICLE_EXISTS_OVERSCANNED = -95
|
|
|
|
Function ArticleExists(Identifier)
|
|
ArticleExists = 0
|
|
HasError = False
|
|
CURRENT_SERIALNUMBER = ""
|
|
|
|
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
|
Set amountBox = mywin.Controls.Item(AMOUNT_INPUT)
|
|
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
|
|
|
' ===================== SERIENNUMMER =====================
|
|
' Zuerst prüfen wir, ob es ein Seriennummerartikel ist
|
|
Set ResultSeriennummer = GetSeriennummerRow(Identifier)
|
|
|
|
If ResultSeriennummer.RowCount > 0 Then
|
|
SerialNumberString = ResultSeriennummer.Value("C068")
|
|
MainArticleNumber = ResultSeriennummer.Value("C011")
|
|
|
|
SQL = ""
|
|
SQL = SQL & "(C002 = '" & MainArticleNumber & "') "
|
|
' Nach Mandant und Wirtschaftsjahr filtern
|
|
SQL = SQL & SQLQuery_BasicWhere
|
|
|
|
Set ResultMainArticle = CWLStart.CurrentCompany.SearchRecord(TABLE_21, SQL)
|
|
|
|
If ResultMainArticle.RowCount > 0 Then
|
|
' Default: ART_REGEX_FLDBEZ = C222
|
|
SerialNumberPattern = ResultMainArticle.Value(ART_REGEX_FLDBEZ)
|
|
End If
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Preparing Regex Check. " & vbNewline
|
|
AddDebugLine "SerialNumberString: " & SerialNumberString
|
|
AddDebugLine "SerialNumberPattern: " & SerialNumberPattern
|
|
AddDebugLine "MainArticleNumber: " & MainArticleNumber
|
|
|
|
ShowDebugBox "ArticleExists"
|
|
End If
|
|
|
|
If Len(SerialNumberPattern) > 0 And Len(SerialNumberString) > 0 Then
|
|
Set SerialNumberRegex = New Regexp
|
|
With SerialNumberRegex
|
|
.Pattern = SerialNumberPattern
|
|
.IgnoreCase = False
|
|
.Global = False
|
|
End With
|
|
|
|
Set RegexMatch = SerialNumberRegex.Execute(SerialNumberString)
|
|
Set FirstMatch = RegexMatch.Item(0)
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Checked Serialnumber against Regex. (1/2)" & vbNewline
|
|
AddDebugLine "FirstMatch.Length: " & FirstMatch.Length
|
|
AddDebugLine "Len(SerialNumberString): " & Len(SerialNumberString)
|
|
AddDebugLine "FirstMatch.FirstIndex: " & FirstMatch.FirstIndex
|
|
|
|
ShowDebugBox "ArticleExists"
|
|
End If
|
|
|
|
If Not (FirstMatch.Length = Len(SerialNumberString) And FirstMatch.FirstIndex = 0) Then
|
|
ArticleExists = ARTICLE_EXISTS_NO_REGEX_MATCH
|
|
HasError = True
|
|
End If
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Checked Serialnumber against Regex. (2/2)" & vbNewline
|
|
AddDebugLine "Result: " & SerialNumberRegex.Test(SerialNumberString)
|
|
AddDebugLine "Serialnumber: " & SerialNumberString
|
|
AddDebugLine "Regex: " & SerialNumberPattern
|
|
|
|
ShowDebugBox "ArticleExists"
|
|
End If
|
|
End If
|
|
|
|
CURRENT_SERIALNUMBER = Identifier
|
|
Set Result = ResultSeriennummer
|
|
Else
|
|
|
|
' ===================== ARTIKEL NUMMER / EAN-CODE =====================
|
|
' Wenn es kein Ausprägeartikel ist, suchen wir im Artikelstamm
|
|
Set Result = GetArticleRow(Identifier)
|
|
End If
|
|
|
|
'==========================================================
|
|
If HasError = True Then
|
|
' Just skip the rest of the function and return the current error
|
|
Elseif Result.RowCount > 0 Then
|
|
' Wir brauchen die Hauptartikelnummer, weil die Prüfung sonst bei SN-Artikeln fehlschlägt
|
|
MainArticleNumber = Result.Value("C011")
|
|
RealArticleNumber = Result.Value("C002")
|
|
|
|
AmountStocked = GetWinLineStockedAmount(RealArticleNumber, False)
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Checking stock of product: " & RealArticleNumber & " (" & MainArticleNumber & ")" & vbNewline
|
|
AddDebugLine "Result Columns: " & Result
|
|
AddDebugLine "Result Rows: " & Result.RowCount
|
|
AddDebugLine "Stock: " & AmountStocked
|
|
AddDebugLine "SQL: " & SQL
|
|
|
|
ShowDebugBox "ArticleExists"
|
|
End If
|
|
|
|
If AmountStocked > 0 Then
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Amount stocked: " & AmountStocked
|
|
End If
|
|
|
|
' Vorkommen in Tabelle prüfen
|
|
For GridLineIndex = 1 To Grid.LineCount
|
|
CurrentArticleNumber = Grid.GetCellValue(GridLineIndex, COLUMN_ARTICLENUMBER)
|
|
Total = Cint(Grid.GetCellValue(GridLineIndex, COLUMN_TOTAL))
|
|
Scanned = Cint(Grid.GetCellValue(GridLineIndex, COLUMN_SCANNED))
|
|
Amount = CInt(amountBox.ScreenContents)
|
|
|
|
If CurrentArticleNumber = MainArticleNumber Then
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "CurrentArticleNumber matches MainArticleNumber! (" & CurrentArticleNumber & ")"
|
|
End If
|
|
|
|
If Total > Scanned Then
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Product is not yet scanned completely and exists in Row " & GridLineIndex & "!"
|
|
End If
|
|
|
|
If (Total - Scanned) >= Amount Then
|
|
ArticleExists = GridLineIndex
|
|
Exit For
|
|
Else
|
|
If GetCountInDuplList(CurrentArticleNumber) <= 1 Then
|
|
Exit For
|
|
End If
|
|
End If
|
|
Else
|
|
ArticleExists = ARTICLE_EXISTS_OVERSCANNED
|
|
End If
|
|
End If
|
|
Next
|
|
Else
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Amount stocked: 0"
|
|
End If
|
|
|
|
ArticleExists = ARTICLE_EXISTS_NO_STOCK
|
|
End If
|
|
|
|
If DEBUG_ON = True Then
|
|
ShowDebugBox "ArticleExists"
|
|
End If
|
|
Else
|
|
If CURRENT_SERIALNUMBER = "" Then
|
|
ArticleExists = ARTICLE_EXISTS_NO_ARTICLE_EAN
|
|
Else
|
|
ArticleExists = ARTICLE_EXISTS_NO_SERIALNUMBER
|
|
End If
|
|
End If
|
|
|
|
End Function
|
|
|
|
Function GetSeriennummerRow(Identifier)
|
|
Set GetSeriennummerRow = Nothing
|
|
|
|
If Len(Identifier) > 0 Then
|
|
Set Conn = CWLStart.Connection
|
|
|
|
SQL = ""
|
|
SQL = SQL & " SELECT TOP 1 C002, C011, C068 "
|
|
SQL = SQL & " FROM T024 (NOLOCK) "
|
|
SQL = SQL & " WHERE C068 = '" & Identifier & "' "
|
|
SQL = SQL & " AND c038 IS NULL " ' Nur aktive Artikel
|
|
SQL = SQL & SQLQuery_BasicWhere
|
|
|
|
Set GetSeriennummerRow = Conn.Select(SQL)
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Searching for Article by Article serial number " & vbNewline
|
|
AddDebugLine "Result Columns: " & GetSeriennummerRow
|
|
AddDebugLine "Result Rows: " & GetSeriennummerRow.RowCount
|
|
AddDebugLine "SQL: " & SQL
|
|
|
|
ShowDebugBox "ArticleExists - GetSeriennummerRow"
|
|
End If
|
|
End If
|
|
|
|
End Function
|
|
|
|
' Ruft Daten aus der Tabelle t024 ab, für Artikel OHNE Ausprägung
|
|
Function GetArticleRow(Identifier)
|
|
|
|
Set GetArticleRow = Nothing
|
|
|
|
If Len(Identifier) > 0 Then
|
|
Set Conn = CWLStart.Connection
|
|
|
|
SQL = ""
|
|
SQL = SQL & " SELECT TOP 1 C002, C011 "
|
|
SQL = SQL & " FROM T024 (NOLOCK) "
|
|
SQL = SQL & " WHERE (C002 = '" & Identifier & "' OR C075 = '" & Identifier & "' OR C114 = '" & Identifier & "' OR C115 = '" & Identifier & "') "
|
|
SQL = SQL & " AND c038 IS NULL " ' Nur aktive Artikel
|
|
SQL = SQL & SQLQuery_BasicWhere
|
|
|
|
Set GetArticleRow = Conn.Select(SQL)
|
|
|
|
If DEBUG_ON = True Then
|
|
AddDebugLine "Searching for Article by ArticleNo/EAN-Code.. " & vbNewline & vbNewline
|
|
AddDebugLine "Result Columns: " & GetArticleRow & vbNewline
|
|
AddDebugLine "Result Rows: " & GetArticleRow.RowCount & vbNewline
|
|
AddDebugLine "SQL: " & SQL
|
|
|
|
ShowDebugBox "ArticleExists - GetArticleRow"
|
|
End If
|
|
End If
|
|
|
|
End Function |