' 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 ' ' Rückgabewert: ArticleRow: Int ' --------------------------------------------------------- Const ARTICLE_EXISTS_NO_STOCK = -99 Const ARTICLE_EXISTS_NO_SERIALNUMBER = -98 Const ARTICLE_EXISTS_NO_ARTICLE_EAN = -97 Function ArticleExists(Identifier) ArticleExists = 0 CURRENT_SERIALNUMBER = "" Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID) Set Grid = mywin.Controls.Item(GRID_ID).Grid ' ===================== ARTIKEL NUMMER / EAN-CODE ===================== SQL = "" ' Artikelnummer / EAN-Code / Alternative Artikelnummer SQL = SQL & "((C002 = '" & Identifier & "') Or (C075 = '" & Identifier & "') Or (C114 = '" & Identifier & "')) AND " ' Artikel darf nicht inaktiv sein SQL = SQL & "(c038 IS NULL) " ' Nach Mandant und Wirtschaftsjahr filtern SQL = SQL & SQLQuery_BasicWhere Set ResultArtikel = CWLStart.CurrentCompany.SearchRecord(TABLE_21, SQL) If DEBUG_ON = True Then AddDebugLine "Searching for Article by ArticleNo/EAN-Code.. " & vbNewline & vbNewline AddDebugLine "Result Columns: " & ResultArtikel & vbNewline AddDebugLine "Result Rows: " & ResultArtikel.RowCount & vbNewline AddDebugLine "SQL: " & SQL ShowDebugBox "ArticleExists" End If ' ===================== SERIENNUMMER ===================== SQL = "" ' Artikelnummer SQL = SQL & "(C068 = '" & Identifier & "') AND " ' Artikel darf nicht inaktiv sein SQL = SQL & "(c038 IS NULL) " ' Nach Mandant und Wirtschaftsjahr filtern SQL = SQL & SQLQuery_BasicWhere Set ResultSeriennummer = CWLStart.CurrentCompany.SearchRecord(TABLE_21, SQL) If DEBUG_ON = True Then AddDebugLine "Searching for Article by Article serial number " & vbNewline & vbNewline AddDebugLine "Result Columns: " & ResultSeriennummer & vbNewline AddDebugLine "Result Rows: " & ResultSeriennummer.RowCount & vbNewline AddDebugLine "SQL: " & SQL ShowDebugBox "ArticleExists" End If If ResultSeriennummer.RowCount > 0 Then CURRENT_SERIALNUMBER = Identifier Set Result = ResultSeriennummer Else Set Result = ResultArtikel End If '========================================================== If 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") ' Lagerstand des Artikels prüfen SQL = "" SQL = SQL & "SELECT " SQL = SQL & "(SELECT C008 AS [MengeZugang] from [v021] (NOLOCK) where (c011 = '__ARTICLENUMBER__' OR c002 = '__ARTICLENUMBER__') "& SQLQuery_BasicWhere &") - " SQL = SQL & "(SELECT C009 AS [MengeAbgang] from [v021] (NOLOCK) where (c011 = '__ARTICLENUMBER__' OR c002 = '__ARTICLENUMBER__') "& SQLQuery_BasicWhere &") - " SQL = SQL & "ISNULL((SELECT SUM(C035) AS [MengeVerkauf] FROM [t014] (NOLOCK) where c000 = '__ARTICLENUMBER__' "& SQLQuery_BasicWhere &"), 0) AS c000" SQL = Replace(SQL, "__ARTICLENUMBER__", RealArticleNumber) Set Result = CWLStart.CurrentCompany.Connection.Select(SQL) AmountStocked = Result.Value("c000") If DEBUG_ON = True Then AddDebugLine "Checking stock of product: " & RealArticleNumber & " (" & MainArticleNumber & ")" & vbNewline & vbNewline AddDebugLine "Result Columns: " & Result & vbNewline AddDebugLine "Result Rows: " & Result.RowCount & vbNewline AddDebugLine "Stock: " & AmountStocked & vbNewLine AddDebugLine "SQL: " & SQL ShowDebugBox "ArticleExists" End If If AmountStocked > 0 Then If DEBUG_ON = True Then AddDebugLine "Amount stocked: " & AmountStocked ShowDebugBox "ArticleExists" End If ' Vorkommen in Tabelle prüfen For Row = 1 To Grid.LineCount CurrentArticleNumber = Grid.GetCellValue(Row, COLUMN_ARTICLENUMBER) Total = Cint(Grid.GetCellValue(Row, COLUMN_TOTAL)) Scanned = Cint(Grid.GetCellValue(Row, COLUMN_SCANNED)) If CurrentArticleNumber = MainArticleNumber Then If DEBUG_ON = True Then AddDebugLine "CurrentArticleNumber matches MainArticleNumber! (" & CurrentArticleNumber & ")" ShowDebugBox "ArticleExists" End If If Total > Scanned Then If DEBUG_ON = True Then AddDebugLine "Product is not yet scanned completetly and exists in Row " & Row & "!" ShowDebugBox "ArticleExists" End If ArticleExists = Row Exit For End If End If Next Else ArticleExists = ARTICLE_EXISTS_NO_STOCK 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