' GetWinLineStorageLocation(ProductNumber : String, ProductSerialNumber : String, IsSerialNumberArticle : Int) ' ---------------------------------------------------------------------------- ' KURZBESCHREIBUNG ' ' Returns: GetWinLineStorageLocation : 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: 07.01.2021 / XX ' Version Date / Editor: 10.08.2023 / JJ ' Version Number: 1.1.0.1 ' ' 23.06.2023: Lagerortstruktur-SQL erweitert/korrigiert Function GetWinLineStorageLocation(ProductNumber, ProductSerialNumber, IsSerialNumberArticle) Set Conn = CWLStart.CurrentCompany.Connection If IsSerialNumberArticle = 1 Then ' Get 'Lagerortstruktur' for SN Product SQL = "SELECT TOP 1 c178 FROM [V021] (NOLOCK) WHERE c011 = '"& ProductNumber &"' AND c068 = '" & ProductSerialNumber & "' AND mesocomp = '" & MandatorNr & "' AND mesoyear = " & WinLineCurrentYear & " ORDER BY c029 DESC " Else ' Get 'Lagerortstruktur' for Non-SN Product SQL = "SELECT TOP 1 c178 FROM [V021] (NOLOCK) WHERE c011 = '"& ProductNumber &"' AND mesocomp = '" & MandatorNr & "' AND mesoyear = " & WinLineCurrentYear End If If DEBUG_ON = True Then AddDebugLine "SQL Lagerortstruktur: " AddDebugLine SQL ShowDebugBox "GetWinLineStorageLocation" End If Set Result = Conn.Select(SQL) If Result = -1 Then GetWinLineStorageLocation = 0 Exit Function End If If Result.Value("c178") = 0 Then GetWinLineStorageLocation = 0 Exit Function End If If IsSerialNumberArticle = 1 Then Identifier = GetWinLineInternalProductNumber(ProductNumber, ProductSerialNumber) Else Identifier = ProductNumber End If SQL = "" SQL = SQL & "SELECT TOP 1 T335.c000 " SQL = SQL & "FROM [T024] (NOLOCK), [T335] (NOLOCK), [T299] (NOLOCK) " SQL = SQL & "OUTER APPLY (SELECT C000, C001, C003, C031 FROM T335 (NOLOCK) WHERE C000 = T299.C001 AND T335.MESOCOMP = '" & MandatorNr & "' AND (T335.MESOYEAR = " & WinLineCurrentYear & " OR T335.MESOYEAR = " & WinLineCurrentYear - 12 & ")) L1 " SQL = SQL & "OUTER APPLY (SELECT C000, C001, C003, C031 FROM T335 (NOLOCK) WHERE C000 = T299.C002 AND T335.MESOCOMP = '" & MandatorNr & "' AND (T335.MESOYEAR = " & WinLineCurrentYear & " OR T335.MESOYEAR = " & WinLineCurrentYear - 12 & ")) L2 " SQL = SQL & "OUTER APPLY (SELECT C000, C001, C003, C031 FROM T335 (NOLOCK) WHERE C000 = T299.C003 AND T335.MESOCOMP = '" & MandatorNr & "' AND (T335.MESOYEAR = " & WinLineCurrentYear & " OR T335.MESOYEAR = " & WinLineCurrentYear - 12 & ")) L3 " SQL = SQL & "OUTER APPLY (SELECT C000, C001, C003, C031 FROM T335 (NOLOCK) WHERE C000 = T299.C004 AND T335.MESOCOMP = '" & MandatorNr & "' AND (T335.MESOYEAR = " & WinLineCurrentYear & " OR T335.MESOYEAR = " & WinLineCurrentYear - 12 & ")) L4 " SQL = SQL & "OUTER APPLY (SELECT C000, C001, C003, C031 FROM T335 (NOLOCK) WHERE C000 = T299.C005 AND T335.MESOCOMP = '" & MandatorNr & "' AND (T335.MESOYEAR = " & WinLineCurrentYear & " OR T335.MESOYEAR = " & WinLineCurrentYear - 12 & ")) L5 " SQL = SQL & "WHERE T299.C000 = '"& Identifier &"' AND T299.C000 = T024.C002 AND T299.MESOCOMP = '" & MandatorNr & "' AND (T299.MESOYEAR = " & WinLineCurrentYear & " OR T299.MESOYEAR = " & WinLineCurrentYear - 12 & ") AND T024.MESOCOMP = '" & MandatorNr & "' " SQL = SQL & "AND (T024.MESOYEAR = " & WinLineCurrentYear & " OR T024.MESOYEAR = " & WinLineCurrentYear - 12 & ")AND T335.MESOCOMP = '" & MandatorNr & "' AND (T335.MESOYEAR = " & WinLineCurrentYear & " OR T335.MESOYEAR = " & WinLineCurrentYear - 12 & ") AND (T299.C001 = T335.C020 AND T299.C002 = T335.C021 " SQL = SQL & "AND T299.C003 = T335.C022 AND T299.C004 = T335.C023 AND T299.C005 = T335.C024 AND T299.C006 = T335.C025) " SQL = SQL & "AND T335.c031 = 1 " ' Nur als verfügbare Lagerorte berücksichtigen SQL = SQL & "ORDER BY T335.c000 DESC, T299.C001 ,T299.C002 ,T299.C003 ,T299.C004 ,T299.C005 ,T299.C006" If DEBUG_ON = True Then AddDebugLine "SQL Part 1: " & Mid(SQL, 1, 750) ShowDebugBox "GetWinLineStorageLocation" AddDebugLine "SQL Part 2: " & Mid(SQL, 750) ShowDebugBox "GetWinLineStorageLocation" End If Set Result = Conn.Select(SQL) If DEBUG_ON = True Then AddDebugLine "Querying storage location... " & vbNewline AddDebugLine "ArticleNumber: " & ProductNumber AddDebugLine "SerialNumber: " & ProductSerialNumber AddDebugLine "IsSerialNumber Article: " & IsSerialNumberArticle AddDebugLine "Result Columns: " & Result AddDebugLine "Result Rows: " & Result.RowCount AddDebugLine "SQL: " & SQL ShowDebugBox "GetWinLineStorageLocation" End If If Result = -1 Then GetWinLineStorageLocation = 0 Else GetWinLineStorageLocation = Result.Value("c000") End If End Function