Anlage des Repos
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
@@ -0,0 +1,18 @@
|
||||
Packtisch 3.0.0.6
|
||||
|
||||
Features und Korrekturen
|
||||
========================
|
||||
- Lagerkorrekturen
|
||||
- Performance beim Scannen erhöht
|
||||
|
||||
Umfang
|
||||
======
|
||||
Skripte
|
||||
- GetWinLineDocDeliveryNoteByUnsplittedProducts.vbs
|
||||
- GetWinLineStockedAmount.vbs
|
||||
- ArticleExists.vbm
|
||||
|
||||
CTK
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
' AddDebugLine(Message: String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Fügt der DEBUG_MESSAGE eine neue Zeile hinzu
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 20.08.2020 / XX
|
||||
' Version Date / Editor: 20.08.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub AddDebugLine(Message)
|
||||
DEBUG_MESSAGE = DEBUG_MESSAGE & Message & vbNewLine
|
||||
End Sub
|
||||
@@ -0,0 +1,19 @@
|
||||
' AddTwoDimArrayRow(arr: Array)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Fügt an ein zweidimensionales Array eine Zeile an.
|
||||
' Wichtig: Die Spalten müssen die erste Dimension sein!
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 18.02.2021 / JJ
|
||||
' Version Date / Editor: 18.02.2021 / JJ
|
||||
' Version Number: 3.0.0.0
|
||||
|
||||
Sub AddTwoDimArrayRow(Byref arr)
|
||||
ReDim Preserve arr(UBound(arr, 1), UBound(arr, 2) + 1)
|
||||
End Sub
|
||||
@@ -0,0 +1,49 @@
|
||||
' ConvertFromSecureString(Ciphertext : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Gibt den entschlüsselten String zurück
|
||||
'
|
||||
' Source: https://gist.github.com/albert1205/c8430b5bfa505f9308e4fa789b9b1d7f
|
||||
'
|
||||
' Returns: ConvertFromSecureString : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 26.08.2020 / XX
|
||||
' Version Date / Editor: 26.08.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Public Function ConvertFromSecureString(Ciphertext)
|
||||
|
||||
Const offset = 10
|
||||
Const minAsc = 33
|
||||
Const maxAsc = 126
|
||||
|
||||
If Len(Ciphertext) < 5 Then
|
||||
Decrypt = ""
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
Dim Plaintext
|
||||
Ciphertext = Mid(Ciphertext,3,Len(Ciphertext)-4)
|
||||
For i=2 To Len(Ciphertext) Step 2
|
||||
oldAsc = Asc(Mid(Ciphertext,i,1)) + offset
|
||||
If oldAsc > maxAsc Then
|
||||
oldAsc = oldAsc - maxAsc + minAsc - 1
|
||||
End If
|
||||
Plaintext = Plaintext & Chr(oldAsc)
|
||||
' MsgBox Asc(Mid(Ciphertext,i,1)) & " -> " & oldAsc
|
||||
Next
|
||||
ConvertFromSecureString = Plaintext
|
||||
|
||||
End Function
|
||||
|
||||
Private Sub DecryptTool()
|
||||
|
||||
Ciphertext = InputBox("Bitte den zu entschluesselnden String eingeben:", "Eingabe erfolderlich","")
|
||||
Plaintext = ConvertFromSecureString(Ciphertext)
|
||||
InputBox "Ihre Eingabe lautete: " & Ciphertext & vbNewLine & vbNewLine & "Entschluesselt, sieht der String wie folgt aus:","Erledigt!",Plaintext
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,55 @@
|
||||
' ConvertToSecureString(Plaintext : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Verschlüsselt einen String
|
||||
'
|
||||
' Source: https://gist.github.com/albert1205/c8430b5bfa505f9308e4fa789b9b1d7f
|
||||
'
|
||||
' Returns: ConvertToSecureString : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 26.08.2020 / XX
|
||||
' Version Date / Editor: 26.08.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Public Function ConvertToSecureString(Plaintext)
|
||||
|
||||
Const offset = 10
|
||||
Const minAsc = 33
|
||||
Const maxAsc = 126
|
||||
|
||||
Dim Ciphertext
|
||||
Randomize
|
||||
Ciphertext = Ciphertext & Chr(Int((maxAsc-minAsc+1)*Rnd+minAsc))
|
||||
Ciphertext = Ciphertext & Chr(Int((maxAsc-minAsc+1)*Rnd+minAsc))
|
||||
For i=1 To Len(Plaintext)*2
|
||||
If i mod 2 = 0 Then
|
||||
newAsc = Asc(Mid(Plaintext,i/2,1)) - offset
|
||||
If newAsc < minAsc Then
|
||||
newAsc = newAsc + maxAsc - minAsc + 1
|
||||
End If
|
||||
Ciphertext = Ciphertext & Chr(newAsc)
|
||||
' MsgBox Asc(Mid(Plaintext,i/2,1)) & " -> " & newAsc
|
||||
Else
|
||||
Ciphertext = Ciphertext & Chr(Int((maxAsc-minAsc+1)*Rnd+minAsc))
|
||||
' MsgBox "Rnd:" & Chr(Int((maxAsc-minAsc+1)*Rnd+minAsc))
|
||||
End If
|
||||
Next
|
||||
Ciphertext = Ciphertext & Chr(Int((maxAsc-minAsc+1)*Rnd+minAsc))
|
||||
Ciphertext = Ciphertext & Chr(Int((maxAsc-minAsc+1)*Rnd+minAsc))
|
||||
ConvertToSecureString = Ciphertext
|
||||
|
||||
End Function
|
||||
|
||||
Private Sub EncryptTool()
|
||||
|
||||
Plaintext = InputBox("Bitte den zu verschluesselnden String eingeben:","Eingabe erfolderlich","")
|
||||
Ciphertext = ConvertToSecureString(Plaintext)
|
||||
InputBox "Ihre Eingabe lautete: " & Plaintext & vbNewLine & vbNewLine & "Verschluesselt, sieht der String wie folgt aus:","Erledigt!",Ciphertext
|
||||
|
||||
End Sub
|
||||
|
||||
Call EncryptTool
|
||||
@@ -0,0 +1,18 @@
|
||||
' GetLeftPad(Value)
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: GetLeftPad : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 10.08.2020 / MK
|
||||
' Version Date / Editor: 10.08.2020 / MK
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetLeftPad(Value)
|
||||
GetLeftPad = Right("0" & Value, 2)
|
||||
End Function
|
||||
@@ -0,0 +1,80 @@
|
||||
' GetWinLineDocDeliveryNoteByUnsplittedProducts(ProductNumber : String, WinLineMandatorNr : String, WinLineYear : Int)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Dieses Modul fndet die Eingangsbelege zu einer ProductNumber
|
||||
'
|
||||
' Returns: SQL-Results
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 15.09.2020 / JJ
|
||||
' Version Date / Editor: 05.10.2021 / MP/JJ
|
||||
' Version Number: 3.0.0.6
|
||||
|
||||
Function GetWinLineDocDeliveryNoteByUnsplittedProducts(ProductNumber, WinLineMandatorNr, WinLineYear)
|
||||
|
||||
Dim Conn, Result
|
||||
|
||||
Set Conn = CWLStart.CurrentCompany.Connection
|
||||
|
||||
If (ProductNumber <> "") and (WinLineMandatorNr <> "") and (WinLineYear <> "") Then
|
||||
|
||||
'c999 = DeliveryNr
|
||||
'c998 = InvoiceNr
|
||||
'c997 = KeyValue
|
||||
'c996 = KeyValue
|
||||
'MESOPRIM = MESOPRIM
|
||||
'c995 = Amount / Pos
|
||||
'c994 = Amount / overall
|
||||
|
||||
SQL = ""
|
||||
SQL = SQL & "SELECT t025.c045 as [c999], t025.c055 as [c998], T026.C000 as [c997], T025.C000 as [c996], T024.MESOPRIM, t026.c006 as [c995], "
|
||||
|
||||
SQL = SQL & "( "
|
||||
SQL = SQL & "SELECT sum(t026.c006) "
|
||||
SQL = SQL & "FROM T026 WITH (NOLOCK), T025 WITH (NOLOCK), T024 WITH (NOLOCK) "
|
||||
SQL = SQL & "WHERE T026.MESOCOMP = '"& WinLineMandatorNr &"' AND T025.MESOCOMP = '"& WinLineMandatorNr &"' AND T024.MESOYEAR = '"& WinLineCurrentYear &"' AND T024.MESOCOMP = '"& WinLineMandatorNr &"' "
|
||||
SQL = SQL & "AND (T025.C021 = T026.C044 AND T025.C022 = T026.C045 AND T025.C137 = 3 AND T026.C042 = N'1' AND T026.C055 < 10 AND T026.C074 < 10 AND T025.C186 = 0 AND T026.C003 = T024.C002 "
|
||||
SQL = SQL & "AND (T025.C025 = N'D' OR T025.C025 =N'*' OR T025.C026 = N'D' OR T025.C026 =N'*') "
|
||||
SQL = SQL & "AND (T026.C039 = N'D' OR T026.C039 =N'*' OR T026.C040 = N'D' OR T026.C040 =N'*') "
|
||||
SQL = SQL & "AND T026.C006 <> 0.0 AND T026.C109 <= 0 AND T026.C003 >= '"& ProductNumber &"' AND T026.C003 <= '"& ProductNumber &"') "
|
||||
SQL = SQL & ") as [c994] " ' Summe aller gefundenen gelieferten Mengen
|
||||
|
||||
SQL = SQL & "FROM T026 WITH (NOLOCK), T025 WITH (NOLOCK), T024 WITH (NOLOCK) "
|
||||
SQL = SQL & "WHERE T026.MESOCOMP = '"& WinLineMandatorNr &"' AND T025.MESOCOMP = '"& WinLineMandatorNr &"' AND T024.MESOYEAR = '"& WinLineCurrentYear &"' AND T024.MESOCOMP = '"& WinLineMandatorNr &"' "
|
||||
SQL = SQL & "AND (T025.C021 = T026.C044 AND T025.C022 = T026.C045 AND T025.C137 = 3 AND T026.C042 = N'1' AND T026.C055 < 10 AND T026.C074 < 10 AND T025.C186 = 0 AND T026.C003 = T024.C002 "
|
||||
SQL = SQL & "AND (T025.C025 = N'D' OR T025.C025 =N'*' OR T025.C026 = N'D' OR T025.C026 =N'*') "
|
||||
SQL = SQL & "AND (T026.C039 = N'D' OR T026.C039 =N'*' OR T026.C040 = N'D' OR T026.C040 =N'*') "
|
||||
SQL = SQL & "AND T026.C006 <> 0.0 AND T026.C109 <= 0 AND T026.C003 >= '"& ProductNumber &"' AND T026.C003 <= '"& ProductNumber &"' ) "
|
||||
SQL = SQL & "ORDER BY T026.C003 ASC, T026.C025, T026.C044, T026.C045 "
|
||||
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Querying for unsplitted delivery notes.. " & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result
|
||||
AddDebugLine "Result Rows: " & Result.RowCount
|
||||
AddDebugLine "SQL (Part 1): " & Mid(SQL, 1, 750)
|
||||
AddDebugLine "SQL (Part 2): " & Mid(SQL, 750)
|
||||
|
||||
ShowDebugBox "GetWinLineInternalProductNumber"
|
||||
End If
|
||||
|
||||
'Use the set order, because we want to return an object!
|
||||
Set GetWinLineDocDeliveryNoteByUnsplittedProducts = Result
|
||||
|
||||
Else
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Invalid argument call!" & vbNewline
|
||||
|
||||
ShowDebugBox "GetWinLineInternalProductNumber"
|
||||
End If
|
||||
|
||||
GetWinLineDocDeliveryNoteByUnsplittedProducts = 0
|
||||
|
||||
End If
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,281 @@
|
||||
' GetWinLineDocInfoByAccountAndRunningNr(DocAccountAndRunningNr : String, PostingType : String, WinLineDocType : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: GetWinLineDocInfoByAccountAndRunningNr : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 08.01.2021 / XX
|
||||
' Version Date / Editor: 08.01.2021 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetWinLineDocInfoByAccountAndRunningNr(DocAccountAndRunningNr, PostingType, WinLineDocType)
|
||||
|
||||
On Error Resume Next
|
||||
|
||||
'Set SQL Table and Query for DocHead. Default: "T025"
|
||||
SQLTable_DocHead = "[T025]"
|
||||
SQLQuery_DocHead = "c000 = '" & DocAccountAndRunningNr & "'" & SQLQuery_OrderWhere
|
||||
|
||||
'Set SQL Table and Query for DocMid. Default: "T026"
|
||||
SQLTable_DocMid = "[T026]"
|
||||
|
||||
SQLQuery_DocMid_MengeGeliefert = ""
|
||||
SQLQuery_DocMid_MengeGeliefert = SQLQuery_DocMid_MengeGeliefert & "SELECT SUM(c006) as [MengeGeliefert] "
|
||||
SQLQuery_DocMid_MengeGeliefert = SQLQuery_DocMid_MengeGeliefert & "FROM " & SQLTable_DocMid & "(NOLOCK) "
|
||||
SQLQuery_DocMid_MengeGeliefert = SQLQuery_DocMid_MengeGeliefert & "WHERE [c000] LIKE '" & DocAccountAndRunningNr & "-%'" & SQLQuery_OrderWhere
|
||||
|
||||
SQLQuery_DocMid_Rueckstandsmenge = ""
|
||||
SQLQuery_DocMid_Rueckstandsmenge = SQLQuery_DocMid_Rueckstandsmenge & "SELECT SUM(c099) as [RueckstandsMenge] "
|
||||
SQLQuery_DocMid_Rueckstandsmenge = SQLQuery_DocMid_Rueckstandsmenge & "FROM " & SQLTable_DocMid & "(NOLOCK) "
|
||||
SQLQuery_DocMid_Rueckstandsmenge = SQLQuery_DocMid_Rueckstandsmenge & "WHERE [c000] LIKE '" & DocAccountAndRunningNr & "-%'" & SQLQuery_OrderWhere
|
||||
|
||||
IF (SQLTable_DocHead <> "") and (SQLQuery_DocHead <> "") and (PostingType <> "") and (WinLineDocType <> "") Then
|
||||
|
||||
Set SQLResult_DocHead = CWLStart.CurrentCompany.SearchRecord (SQLTable_DocHead, SQLQuery_DocHead)
|
||||
|
||||
If Err.Number <> 0 Then
|
||||
MSGBOX "Error Code: "& Err.Number & vbCrlf & _
|
||||
"Error Description: "& Err.Description,,"ERROR: Function GetWinLineDocInfoByAccountAndRunningNr Getting DocHead from DB Table "& SQLTable_DocHead
|
||||
Err.Clear
|
||||
Else
|
||||
|
||||
'If no line results
|
||||
If SQLResult_DocHead.RowCount = -1 Then
|
||||
|
||||
If DebugMode = "Enabled" Then
|
||||
MSGBOX "No Rows found, SQL: "& SQLQuery_DocHead,,"DEBUG - Info: Function GetWinLineDocInfoByAccountAndRunningNrDocHead from Database table "& SQLTable_DocHead
|
||||
End If
|
||||
|
||||
Elseif SQLResult_DocHead.RowCount = 1 Then
|
||||
|
||||
If DebugMode = "Enabled" Then
|
||||
MSGBOX "One Row found, SQL: "& SQLQuery_DocHead,,"DEBUG - Info: Function GetWinLineDocInfoByAccountAndRunningNrDocHead from Database table "& SQLTable_DocHead
|
||||
End If
|
||||
|
||||
'Unique Key
|
||||
DocAccountAndRunningNr = SQLResult_DocHead.value(0)
|
||||
|
||||
'Laufnumemr
|
||||
DocRunningNr = SQLResult_DocHead.value(21)
|
||||
|
||||
'Druckstatus Angebot / Anfrage
|
||||
DocPrintState1 = SQLResult_DocHead.value(22)
|
||||
|
||||
'Druckstatus Auftrag / Bestellung
|
||||
DocPrintState2 = SQLResult_DocHead.value(23)
|
||||
|
||||
'Druckstatus Lieferschein
|
||||
DocPrintState3 = SQLResult_DocHead.value(24)
|
||||
|
||||
'Druckstatus Rechnung
|
||||
DocPrintState4 = SQLResult_DocHead.value(25)
|
||||
|
||||
'Number of the Offer ("Angebot")
|
||||
DocOfferNr = SQLResult_DocHead.value(41)
|
||||
|
||||
'Number of the Order ("Angebot")
|
||||
DocOrderNr = SQLResult_DocHead.value(42)
|
||||
|
||||
'Number of delivery note ("Lieferschein")
|
||||
DocDeliveryNoteNr = SQLResult_DocHead.value(43)
|
||||
|
||||
'Number of the Invoice ("Rechung")
|
||||
DocInvoiceNr = SQLResult_DocHead.value(52)
|
||||
|
||||
'When the doc ("Beleg") was created
|
||||
DocCreated = SQLResult_DocHead.value(56)
|
||||
|
||||
'When the doc ("Beleg") was last changed
|
||||
DocLastChange = SQLResult_DocHead.value(57)
|
||||
|
||||
'The ten "Belegkopfnotizen"
|
||||
DocHeadText1 = SQLResult_DocHead.value(59)
|
||||
DocHeadText2 = SQLResult_DocHead.value(60)
|
||||
DocHeadText3 = SQLResult_DocHead.value(61)
|
||||
DocHeadText4 = SQLResult_DocHead.value(62)
|
||||
DocHeadText5 = SQLResult_DocHead.value(63)
|
||||
DocHeadText6 = SQLResult_DocHead.value(64)
|
||||
DocHeadText7 = SQLResult_DocHead.value(65)
|
||||
DocHeadText8 = SQLResult_DocHead.value(66)
|
||||
DocHeadText9 = SQLResult_DocHead.value(67)
|
||||
DocHeadText10 = SQLResult_DocHead.value(68)
|
||||
|
||||
'The current type (1= Anfrage/Angebot; 2= Auftrag/Bestellung; 3= Lieferschein; 4=Rechnung)
|
||||
DocType = SQLResult_DocHead.value(134)
|
||||
DocComment = SQLResult_DocHead.value(163)
|
||||
|
||||
'msgbox SQLQuery_DocMid_MengeGeliefert
|
||||
'msgbox SQLQuery_DocMid_RueckstandsMenge
|
||||
|
||||
Set SQLResult_DocMid_MengeGeliefert = CWLStart.CurrentCompany.Connection.Select(SQLQuery_DocMid_MengeGeliefert)
|
||||
'msgbox SQLResult_DocMid_MengeGeliefert.value("MengeGeliefert")
|
||||
|
||||
Set SQLResult_DocMid_RueckstandsMenge = CWLStart.CurrentCompany.Connection.Select(SQLQuery_DocMid_RueckstandsMenge)
|
||||
'msgbox SQLResult_DocMid_RueckstandsMenge.value("RueckstandsMenge")
|
||||
IF DebugMode = "Enabled" THEN
|
||||
|
||||
End if
|
||||
DocBackOrder = SQLResult_DocMid_RueckstandsMenge.value("RueckstandsMenge")
|
||||
|
||||
'msgbox SQLResult_DocMid_Rueckstandsmenge.value("RueckstandsMenge")
|
||||
|
||||
IF (PostingType = 1) Then
|
||||
|
||||
'If doc = "Angebot" or "Angebots-storno"
|
||||
IF (WinLineDocType = 1) or (WinLineDocType = 11) then
|
||||
|
||||
DocNr = DocOfferNr
|
||||
|
||||
IF (WinLineDocType = 1) then
|
||||
|
||||
WinLineDocType = "Angebot (debitorisch)"
|
||||
|
||||
ElseIF (WinLineDocType = 11) then
|
||||
|
||||
WinLineDocType = "Angebot-Storno (debitorisch)"
|
||||
|
||||
End If
|
||||
|
||||
'If doc = "Auftrag" or "Auftrag-storno"
|
||||
ElseIf (WinLineDocType = 2) or (WinLineDocType = 12) then
|
||||
|
||||
DocNr = DocOrderNr
|
||||
|
||||
IF (WinLineDocType = 2) then
|
||||
|
||||
WinLineDocType = "Auftrag (debitorisch)"
|
||||
|
||||
ElseIF (WinLineDocType = 12) then
|
||||
|
||||
WinLineDocType = "Auftrag-Storno (debitorisch)"
|
||||
|
||||
End If
|
||||
|
||||
'If doc = "Lieferschein" or "Lieferschein-storno" or "Teillieferschein"
|
||||
ElseIf (WinLineDocType = 3) or (WinLineDocType = 13) or (WinLineDocType = -3) then
|
||||
|
||||
DocNr = DocDeliveryNoteNr
|
||||
|
||||
IF (DocBackOrder = 0) and (DocPrintState3 <> "L") then
|
||||
|
||||
WinLineDocType = "Lieferschein (debitorisch)"
|
||||
|
||||
ElseIF (DocBackOrder = 0) and (DocPrintState3 = "L") then
|
||||
|
||||
WinLineDocType = "Lieferschein-Storno (debitorisch)"
|
||||
|
||||
ElseIF (DocBackOrder <> 0) and (DocPrintState3 <> "L") then
|
||||
|
||||
WinLineDocType = "Teillieferschein (debitorisch)"
|
||||
|
||||
ElseIF (DocBackOrder <> 0) and (DocPrintState3 = "L") then
|
||||
|
||||
'Über die DB Werte ist eine Unterscheidung zwischen Lieferschein und Teillieferschein Storno nicht möglich!
|
||||
WinLineDocType = "Teillieferschein-Storno (debitorisch)"
|
||||
|
||||
End If
|
||||
|
||||
'If doc = "Rechnung" or "Rechnungs-storno"
|
||||
ElseIf (WinLineDocType = 4) or (WinLineDocType = 14) then
|
||||
|
||||
DocNr = DocInvoiceNr
|
||||
|
||||
IF (WinLineDocType = 4) and (DocPrintState4 <> "L") then
|
||||
|
||||
WinLineDocType = "Rechnung (debitorisch)"
|
||||
|
||||
ElseIF (WinLineDocType = 4) and (DocPrintState4 = "L") then
|
||||
|
||||
WinLineDocType = "Rechnung-Storno (debitorisch)"
|
||||
|
||||
ElseIF (WinLineDocType = 14) and (DocPrintState4 = "L") then
|
||||
|
||||
WinLineDocType = "Rechnung-Storno (debitorisch)"
|
||||
|
||||
End If
|
||||
|
||||
Else
|
||||
|
||||
IF DebugMode = "Enabled" THEN
|
||||
MSGBOX "WinLineDocType is not configured!" & vbCrLf & _
|
||||
"WinLineDocType: " & WinLineDocType, , "DEBUG - Info: Export Metadata"
|
||||
END IF
|
||||
|
||||
End if
|
||||
|
||||
ElseIf (PostingType = 2) Then
|
||||
|
||||
'not implement
|
||||
|
||||
End if
|
||||
|
||||
'Array for the function to return
|
||||
DIM DocInfo(250)
|
||||
|
||||
'Items like T25 c000 to c188
|
||||
DocInfo(59) = DocCreated
|
||||
DocInfo(60) = DocLastChange
|
||||
|
||||
DocInfo(63) = DocHeadText1
|
||||
DocInfo(64) = DocHeadText2
|
||||
DocInfo(65) = DocHeadText3
|
||||
DocInfo(66) = DocHeadText4
|
||||
DocInfo(67) = DocHeadText5
|
||||
DocInfo(68) = DocHeadText6
|
||||
DocInfo(69) = DocHeadText7
|
||||
DocInfo(70) = DocHeadText8
|
||||
DocInfo(71) = DocHeadText9
|
||||
DocInfo(72) = DocHeadText10
|
||||
|
||||
DocInfo(139) = DocType
|
||||
DocInfo(165) = DocComment
|
||||
|
||||
'Items beyond T25
|
||||
DocInfo(200) = WinLineDocType
|
||||
DocInfo(201) = DocNr
|
||||
|
||||
IF DebugMode = "Enabled" THEN
|
||||
|
||||
CRLF = chr(13)&chr(10)
|
||||
msg = "Parameter:" & CRLF
|
||||
|
||||
For i = 0 To Ubound(DocInfo)
|
||||
|
||||
If (DocInfo(i) <> "") then
|
||||
msg = msg & i & ".: " & DocInfo(i) & CRLF
|
||||
end if
|
||||
Next
|
||||
|
||||
msgbox msg ,, "Macro Name: " & CWLMacro.MName
|
||||
|
||||
End if
|
||||
|
||||
GetWinLineDocInfoByAccountAndRunningNr = DocInfo
|
||||
|
||||
Else
|
||||
|
||||
If DebugMode = "Enabled" Then
|
||||
MSGBOX "To many Rows found, SQL: "& SQLQuery_DocHead,,"DEBUG - Info: Function GetWinLineDocInfoByAccountAndRunningNr DocHead from Database table "& SQLTable_DocHead
|
||||
End If
|
||||
|
||||
GetWinLineDocInfoByAccountAndRunningNr = ""
|
||||
|
||||
End If
|
||||
|
||||
End If
|
||||
Else
|
||||
|
||||
If DebugMode = "Enabled" Then
|
||||
MSGBOX "Missing Parameter values, SQL: "& SQLQuery_DocHead,,"DEBUG - Info: Function GetWinLineDocInfoByAccountAndRunningNrDocHead from Database table " & SQLTable_DocHead
|
||||
End If
|
||||
|
||||
GetWinLineDocInfoByAccountAndRunningNr = ""
|
||||
|
||||
End If
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,103 @@
|
||||
' GetWinLineDocUniqueIdentifier(GetWinLineDocUniqueIdentifierParams)
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: NAME : TYP
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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.12.2020 / MK
|
||||
' Version Date / Editor: 01.12.2020 / MK
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetWinLineDocUniqueIdentifier(GetWinLineDocUniqueIdentifierParams)
|
||||
|
||||
'SYNOPSIS
|
||||
'Function will load external - additional - VBS Modules into current Script.
|
||||
|
||||
'DESCRIPTION
|
||||
'By working with Modules, this Function is necessary to load external Module Functions into the current VB-Script.
|
||||
'Call parameter must be an array, because VB-Script functions cannot handle optional Parameters.
|
||||
'In develepment and Test Enviroment it is possible, to work with distributed Folders with different Modules. Therefor the Parameter
|
||||
'"GetWinLineDocUniqueIdentifierParams(1)" (which is the ModuleOverrideSourcePath) and the preset Variable "ModuleDefaultSourcePath" are made for.
|
||||
'After a successful Import of a Module, Function will return True, otherwise a False.
|
||||
|
||||
'REQUIREMENT General
|
||||
'VBS must be enabled
|
||||
|
||||
'REQUIREMENT Assembly
|
||||
'<NONE>
|
||||
|
||||
'REQUIREMENT Variables
|
||||
'FSOModule, Module, ModuleCode
|
||||
|
||||
'REQUIREMENT Variables preSet
|
||||
'<NONE>
|
||||
|
||||
'REQUIREMENT Functions
|
||||
'<NONE>
|
||||
|
||||
'VERSION
|
||||
'Number: 1.0.0.0 / Date: 01.12.2020
|
||||
|
||||
'PARAMETER GetWinLineDocUniqueIdentifierParams(0) = WorkingMode
|
||||
'Give the
|
||||
|
||||
'PARAMETER GetWinLineDocUniqueIdentifierParams(1) = DocAccountAndRunningNr
|
||||
'Optional Parameter.
|
||||
|
||||
'PARAMETER GetWinLineDocUniqueIdentifierParams(2) = DocAccountNr
|
||||
'Optional Parameter.
|
||||
|
||||
'PARAMETER GetWinLineDocUniqueIdentifierParams(3) = DocRunningNr
|
||||
'Optional Parameter.
|
||||
|
||||
'EXAMPLE
|
||||
'Dim GetWinLineDocUniqueIdentifierParams
|
||||
'Redim GetWinLineDocUniqueIdentifierParams(0)
|
||||
'GetWinLineDocUniqueIdentifierParams(0) = Module
|
||||
'LoadVBSModule(GetWinLineDocUniqueIdentifierParams)
|
||||
|
||||
'EXAMPLE
|
||||
'Dim GetWinLineDocUniqueIdentifierParams
|
||||
'Redim GetWinLineDocUniqueIdentifierParams(1)
|
||||
'GetWinLineDocUniqueIdentifierParams(0) = Module
|
||||
'GetWinLineDocUniqueIdentifierParams(1) = "D:\ScriptFiles\Modules"
|
||||
'LoadVBSModule(GetWinLineDocUniqueIdentifierParams)
|
||||
|
||||
On Error Resume Next
|
||||
|
||||
If VarType(GetWinLineDocUniqueIdentifierParams) > 8000 Then
|
||||
|
||||
WorkingMode = GetWinLineDocUniqueIdentifierParams(0)
|
||||
DocAccountAndRunningNr = GetWinLineDocUniqueIdentifierParams(1)
|
||||
DocAccountNr = GetWinLineDocUniqueIdentifierParams(2)
|
||||
DocRunningNr = GetWinLineDocUniqueIdentifierParams(3)
|
||||
|
||||
IF (WorkingMode = "interactive") or (WorkingMode = "interaktive") Then
|
||||
|
||||
GetWinLineDocUniqueIdentifier = DocAccountAndRunningNr
|
||||
|
||||
Else
|
||||
|
||||
GetWinLineDocUniqueIdentifier = DocAccountAndRunningNr
|
||||
|
||||
End If
|
||||
|
||||
|
||||
'If no array was used by calling this function
|
||||
Else
|
||||
|
||||
If (DEBUG_ON = True) Or (DebugMode = "Enabled") Then
|
||||
MSGBOX "The used Parameter is not an Array!" & vbCrlf & _
|
||||
"",,"DEBUG Info: Parameter is not an Array - GetWinLineDocUniqueIdentifierParams"
|
||||
End If
|
||||
|
||||
GetWinLineDocUniqueIdentifier = ""
|
||||
|
||||
End if
|
||||
|
||||
End Function 'GetWinLineDocUniqueIdentifier
|
||||
@@ -0,0 +1,49 @@
|
||||
' GetWinLineInternalProductNumber(ProductNumber : String, SerialNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Holt die interne ProductNumber (c002) aus der Artikelview, wenn es eine
|
||||
' Seriennummer gibt, ansonsten passt der Wert aus dem Parameter
|
||||
'
|
||||
' Returns: Interne Artikelnummer
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 10.08.2020 / MK
|
||||
' Version Date / Editor: 26.04.2021 / MP
|
||||
' Version Number: 3.0.0.3
|
||||
|
||||
Function GetWinLineInternalProductNumber(ProductNumber, SerialNumber)
|
||||
Set Conn = CWLStart.CurrentCompany.Connection
|
||||
Err.Clear
|
||||
|
||||
If SerialNumber = "" Then
|
||||
GetWinLineInternalProductNumber = ProductNumber
|
||||
Else
|
||||
SQL = "SELECT [c002] FROM [v021] (NOLOCK) WHERE [c011] = '"& ProductNumber &"' AND [c068] = '"& SerialNumber &"' AND (c038 IS NULL) " & SQLQuery_BasicWhere
|
||||
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Querying for Internal Article Number.. " & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result
|
||||
AddDebugLine "Result Rows: " & Result.RowCount
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "GetWinLineInternalProductNumber"
|
||||
End If
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
Msgbox "Fehler bei Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - GetWinLineInternalProductNumber"
|
||||
Exit Function
|
||||
Else
|
||||
Msgbox "Abfrage lieferte keine Ergebnisse.", vbExclamation, DEFAULT_TITLE & " - GetWinLineInternalProductNumber"
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
GetWinLineInternalProductNumber = Result.Value("c002")
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,60 @@
|
||||
' GetWinLineOriginalLineNumber(OrderNumber : String, ArticleNumber : String, IsSerialNumberArticle : Int)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Ermittelt die originale Zeilennummer einer belegposition
|
||||
'
|
||||
' 18.02.21 - Wird im Packtisch 3.0 nicht mehr verwendet
|
||||
'
|
||||
' Returns: GetWinLineOriginalLineNumber : 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: 18.08.2020 / MK
|
||||
' Version Date / Editor: 26.04.2021 / MP
|
||||
' Version Number: 3.0.0.3
|
||||
|
||||
Function GetWinLineOriginalLineNumber(OrderNumber, ArticleNumber, IsSerialNumberArticle)
|
||||
Set Conn = CWLStart.CurrentCompany.Connection
|
||||
|
||||
Err.Clear
|
||||
|
||||
If IsSerialNumberArticle = 1 Then
|
||||
SQL = "SELECT TOP 1 c078 FROM t026 (NOLOCK) "
|
||||
SQL = SQL & "WHERE c067 = '"& OrderNumber &"' AND c003 = '"& ArticleNumber &"' "
|
||||
SQL = SQL & SQLQuery_OrderWhere
|
||||
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Querying for Original Line Number.. " & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result
|
||||
AddDebugLine "Result Rows: " & Result.RowCount
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "GetWinLineOriginalLineNumber"
|
||||
End If
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
Msgbox "Fehler bei Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - GetWinLineOriginalLineNumber"
|
||||
Exit Function
|
||||
Else
|
||||
Msgbox "Abfrage lieferte keine Ergebnisse.", vbExclamation, DEFAULT_TITLE & " - GetWinLineOriginalLineNumber"
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
GetWinLineOriginalLineNumber = Result.Value("c078")
|
||||
Else
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Setting Original Line Number to 0.."
|
||||
|
||||
ShowDebugBox "GetWinLineOriginalLineNumber"
|
||||
End If
|
||||
|
||||
|
||||
GetWinLineOriginalLineNumber = "0"
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,48 @@
|
||||
' GetWinLineProductInfoByProductNumber(ProductNumber : String, WinLineMandatorNr : String, WinLineYear : Int)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Läd den passenden Datensatz aus v021 zur übergebenen Artikelnummer
|
||||
'
|
||||
' Returns: GetWinLineProductInfoByProductNumber : WinLineProductInfo-Objekt
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 23.09.2020 / JJ
|
||||
' Version Date / Editor: 23.09.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetWinLineProductInfoByProductNumber(ProductNumber, WinLineMandatorNr, WinLineYear)
|
||||
|
||||
On Error Resume Next
|
||||
|
||||
If (ProductNumber <> "") Then
|
||||
|
||||
SQLTable_WinLineProductInfo = "V021"
|
||||
SQLQuery_WinLineProductInfo = "c011 = '"& ProductNumber &"' and c002 = c011 and MESOCOMP = '"& WinLineMandatorNr &"' AND MESOYEAR = '"& WinLineCurrentYear &"'"
|
||||
|
||||
Set SQLResult_WinLineProductInfo = CWLStart.CurrentCompany.SearchRecord (SQLTable_WinLineProductInfo, SQLQuery_WinLineProductInfo)
|
||||
|
||||
If (DEBUG_ON = True) or (DebugMode = "Enabled" ) Then
|
||||
AddDebugLine "Querying for Article Number.. " & vbNewline
|
||||
AddDebugLine "Result Columns: " & SQLResult_WinLineProductInfo
|
||||
AddDebugLine "Result Rows: " & SQLResult_WinLineProductInfo.RowCount
|
||||
AddDebugLine "SQL: " & SQLQuery_WinLineProductInfo
|
||||
|
||||
ShowDebugBox "GetWinLineInternalProductNumber"
|
||||
End If
|
||||
|
||||
If (SQLResult_WinLineProductInfo.RowCount = -1) or (SQLResult_WinLineProductInfo.RowCount = 0) Then
|
||||
|
||||
GetWinLineProductInfoByProductNumber = 0
|
||||
|
||||
Elseif (SQLResult_WinLineProductInfo.RowCount >= 1) Then
|
||||
|
||||
Set GetWinLineProductInfoByProductNumber = SQLResult_WinLineProductInfo
|
||||
|
||||
End if
|
||||
|
||||
End if
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,36 @@
|
||||
' GetWinLineStockedAmount(ProductNumber : String, IncludeSalesDocuments : Boolean)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Lagerstand des Artikels prüfen
|
||||
'
|
||||
' Returns: NAME : TYP
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 22.01.2021 / XX
|
||||
' Version Date / Editor: 13.12.2021 / MP
|
||||
' Version Number: 3.0.0.6
|
||||
|
||||
Function GetWinLineStockedAmount(ProductNumber, IncludeSalesDocuments)
|
||||
|
||||
SQL = ""
|
||||
SQL = SQL & "SELECT "
|
||||
SQL = SQL & " (SELECT C008 - C009 from [v021] (NOLOCK) where (c002 = '__ARTICLENUMBER__') " & SQLQuery_BasicWhere & ") - "
|
||||
|
||||
If IncludeSalesDocuments = True Or IncludeSalesDocuments = "True" Or IncludeSalesDocuments = 1 Then
|
||||
' Include Products from sales documents
|
||||
SQL = SQL & " ISNULL((SELECT SUM(C035) AS [MengeVerkauf] FROM [t014] (NOLOCK) where c000 = '__ARTICLENUMBER__' "& SQLQuery_BasicWhere &"), 0) "
|
||||
Else
|
||||
' Skip Products from sales documents
|
||||
SQL = SQL & " (SELECT 0) "
|
||||
End If
|
||||
|
||||
SQL = SQL & "AS c000"
|
||||
|
||||
SQL = Replace(SQL, "__ARTICLENUMBER__", ProductNumber)
|
||||
Set Result = CWLStart.CurrentCompany.Connection.Select(SQL)
|
||||
|
||||
GetWinLineStockedAmount = Result.Value("c000")
|
||||
End Function
|
||||
@@ -0,0 +1,75 @@
|
||||
' 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: 07.01.2021 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetWinLineStorageLocation(ProductNumber, ProductSerialNumber, IsSerialNumberArticle)
|
||||
Set Conn = CWLStart.CurrentCompany.Connection
|
||||
|
||||
' Get 'Lagerortstruktur' for Product
|
||||
SQL = "SELECT c178 FROM [V021] (NOLOCK) WHERE c010 = '"& ProductNumber &"'"
|
||||
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
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 & "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
|
||||
@@ -0,0 +1,74 @@
|
||||
' GetWinLineUserData(UserID: Int)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Holt anhand der UserID Loginname, Namen und Durchwahl
|
||||
' aus der Systemtabelle CWLSYSTEM.T002SRV
|
||||
'
|
||||
' Aus den Daten wird ein String aufgebaut, der dann in Meldungen
|
||||
' verwendet werden kann.
|
||||
'
|
||||
' Returns: GetWinLineUserData : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 26.04.2021 / MP
|
||||
' Version Date / Editor: 26.04.2021 / MP
|
||||
' Version Number: 3.0.0.3
|
||||
|
||||
Function GetWinLineUserData(UserID)
|
||||
|
||||
Err.Clear
|
||||
GetWinLineUserData = ""
|
||||
|
||||
If Len(UserID) <= 0 Then
|
||||
If DEBUG_ON = True Then
|
||||
Msgbox "Parameter UserID ist leer!", vbExclamation, DEFAULT_TITLE & " - GetWinLineUserData"
|
||||
End If
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
Set Conn = CWLCompany.GetSystemConnection(cwlSystemServerSRV)
|
||||
|
||||
SQL = "SELECT TOP 1 c001, c026, c028 FROM T002SRV (NOLOCK) "
|
||||
SQL = SQL & "WHERE c000 = " & UserID
|
||||
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Querying for Original Line Number.. " & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result
|
||||
AddDebugLine "Result Rows: " & Result.RowCount
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "GetWinLineUserData"
|
||||
End If
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
Msgbox "Fehler bei Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - GetWinLineUserData"
|
||||
Exit Function
|
||||
Else
|
||||
Msgbox "Abfrage lieferte keine Ergebnisse.", vbExclamation, DEFAULT_TITLE & " - GetWinLineUserData"
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
ResultString = ""
|
||||
|
||||
If Len(Result.Value("c026")) > 0 Then
|
||||
' Name des Benutzers
|
||||
ResultString = Result.Value("c026")
|
||||
Else
|
||||
' Loginname des Benutzers, muss immer belegt sein.
|
||||
ResultString = Result.Value("c001")
|
||||
End If
|
||||
|
||||
If Len(Result.Value("c026")) > 0 Then
|
||||
' Durchwahl ergänzen, wenn vorhanden
|
||||
ResultString = ResultString & " (" & Result.Value("c028") & ")"
|
||||
End If
|
||||
|
||||
GetWinLineUserData = ResultString
|
||||
End Function
|
||||
@@ -0,0 +1,29 @@
|
||||
' GetWindowsEnvironment(EnvName: String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' URL: https://skriptwiki.ffsf.de/doku.php/umgebungsvariablen
|
||||
'
|
||||
' Mögliche Werte für EnvName sind hier zu finden:
|
||||
' http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0328.htm
|
||||
'
|
||||
' Returns: GetWindowsEnvironment : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 23.03.2021 / MP
|
||||
' Version Date / Editor: 23.03.2021 / MP
|
||||
' Version Number: 3.0.0.0
|
||||
|
||||
Function GetWindowsEnvironment(EnvName)
|
||||
If (Len(EnvName) <= 0) Then
|
||||
GetWindowsEnvironment = ""
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
Set WshShell = CreateObject("WScript.Shell")
|
||||
Set oEnv = WshShell.Environment("Process")
|
||||
GetWindowsEnvironment = oEnv(EnvName)
|
||||
Set oEnv = Nothing
|
||||
End Function
|
||||
@@ -0,0 +1,237 @@
|
||||
' 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 & " (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
|
||||
@@ -0,0 +1,82 @@
|
||||
' CheckArticleGroupIsRelevant(ArticleGroup : Integer)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Prüft, ob die übergebene Artikelgruppe am Packtisch bearbeitet/gescannt
|
||||
' werden kann (true), oder ob es sich um eine "nicht-relevante" Artikelgruppe
|
||||
' handelt (false), zb Versandkosten, die auf nicht sichtbar geschaltet wird.
|
||||
'
|
||||
' Geprüft wird gegen die Variable EXCLUDED_ARTICLEGROUPS, die im Fensterscript
|
||||
' konfiguriert werden kann.
|
||||
' Die Variable kann entweder genau einen Wert, einen unteren/oberen Grenzwert
|
||||
' oder eine Liste von Werten enthalten.
|
||||
' Erlaubte Beispiele:
|
||||
' - Genau ein Wert: "100"
|
||||
' - Grenzwert bis/ab dem dies gilt: "100-" / "100+"
|
||||
' - Array von verschiedenen Werten: "100, 101, 102"
|
||||
'
|
||||
' Wenn keine Artikelgruppe als nicht-relevant definiert wurde oder die zu
|
||||
' prüfende Artikelgruppe ist leer oder kleiner 1, wird True zurückgegeben.
|
||||
'
|
||||
' Returns: CheckArticlegroupIsRelevant : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 24.06.2021 / MP
|
||||
' Version Date / Editor: 28.06.2021 / MP
|
||||
' Version Number: 3.0.0.4
|
||||
|
||||
Function CheckArticleGroupIsRelevant(ArticleGroup)
|
||||
CheckArticleGroupIsRelevant = True
|
||||
|
||||
' Wenn die Variable leer ist, sind alle Artikelgruppen relevant
|
||||
If Len(EXCLUDED_ARTICLEGROUPS) <= 0 Then
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
' Ohne Wert geht gar nichts, auch Negative Werte sind sinnlos
|
||||
If Len(ArticleGroup) <= 0 Or ArticleGroup < 0 Then
|
||||
CheckArticleGroupIsRelevant = False
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
' Wenn EXCLUDED_ARTICLEGROUPS ein Komma enthält, muss ein Array
|
||||
' aus den Elementen erzeugt werden.
|
||||
posKomma = InStr(EXCLUDED_ARTICLEGROUPS, ",")
|
||||
|
||||
If posKomma > 0 Then
|
||||
exValueArray = Split(EXCLUDED_ARTICLEGROUPS, ",")
|
||||
|
||||
For Each exValue in exValueArray
|
||||
If Cint(exValue) = ArticleGroup Then
|
||||
CheckArticleGroupIsRelevant = False
|
||||
Exit Function
|
||||
End If
|
||||
Next
|
||||
Else
|
||||
posPlus = InStr(EXCLUDED_ARTICLEGROUPS, "+")
|
||||
posMinus = InStr(EXCLUDED_ARTICLEGROUPS, "-")
|
||||
If posPlus > 0 Then
|
||||
' + enthalten, die Variable enthält ein unteres Limit
|
||||
limit = CInt(Mid(EXCLUDED_ARTICLEGROUPS, 1, posPlus-1))
|
||||
|
||||
If ArticleGroup >= limit Then
|
||||
CheckArticleGroupIsRelevant = False
|
||||
End If
|
||||
ElseIf posMinus > 0 Then
|
||||
' - enthalten, die Variable enthält ein oberes Limit
|
||||
limit = CInt(Mid(EXCLUDED_ARTICLEGROUPS, 1, posMinus-1))
|
||||
|
||||
If ArticleGroup <= limit Then
|
||||
CheckArticleGroupIsRelevant = False
|
||||
End If
|
||||
Else
|
||||
' Die Variable enthält genau eine Artikelgruppe
|
||||
If ArticleGroup = CInt(EXCLUDED_ARTICLEGROUPS) Then
|
||||
CheckArticleGroupIsRelevant = False
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,65 @@
|
||||
' CheckMacroArticlesComplete()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Prüft, ob die im Auftrag enthaltenen Macro-Artikel
|
||||
' vollständig sind, und vermerkt die Infos im
|
||||
' MACRO_ARTICLE_LIST-Array
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 08.03.2021 / MP
|
||||
' Version Date / Editor: 08.03.2021 / MP
|
||||
' Version Number: 3.0.0.0
|
||||
|
||||
Sub CheckMacroArticlesComplete()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount: Do
|
||||
MacroFlag = Cint(Grid.GetCellValue(GridIndex, COLUMN_MACRO_FLAG))
|
||||
|
||||
If MacroFlag = 1 Then
|
||||
LineNumber = Cint(Grid.GetCellValue(GridIndex, COLUMN_LINE_NUMBER))
|
||||
MacroArticleListIndex = -1
|
||||
|
||||
For MacroArrayIndex = 0 To UBound(MACRO_ARTICLE_LIST)
|
||||
If MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex) = LineNumber Then
|
||||
MacroArticleListIndex = MacroArrayIndex
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
|
||||
For InnerGridIndex = GridIndex + 1 To Grid.LineCount: Do
|
||||
InnerMacroFlag = Cint(Grid.GetCellValue(InnerGridIndex, COLUMN_MACRO_FLAG))
|
||||
|
||||
If InnerMacroFlag = 2 Then
|
||||
AmountTotal = Cint(Grid.GetCellValue(InnerGridIndex, COLUMN_TOTAL))
|
||||
AmountScanned = Cint(Grid.GetCellValue(InnerGridIndex, COLUMN_SCANNED))
|
||||
|
||||
If AmountTotal <> AmountScanned Then
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_GRID_LINE_INDEX, MacroArticleListIndex) = GridIndex
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArticleListIndex) = False
|
||||
' An der Stelle des unvollständigen Artikels weiter prüfen
|
||||
GridIndex = InnerGridIndex
|
||||
' Aus Makroartikel aussteigen, weil unvollständig
|
||||
Exit For
|
||||
End If
|
||||
Else
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_GRID_LINE_INDEX, MacroArticleListIndex) = GridIndex
|
||||
|
||||
' An der Stelle des unvollständigen Artikels weiter prüfen
|
||||
GridIndex = InnerGridIndex
|
||||
' Aus Makroartikel aussteigen, weil vollständig
|
||||
Exit For
|
||||
End If
|
||||
Loop While False: Next
|
||||
Else
|
||||
' Nächsten Artikel bearbeiten
|
||||
Exit Do
|
||||
End If
|
||||
Loop While False: Next
|
||||
End Sub
|
||||
@@ -0,0 +1,51 @@
|
||||
' CheckOrderIsLocked(OrderNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Prüft, ob der Auftrag gesperrt ist.
|
||||
' Wenn der Auftrag gesperrt ist, wird der Anwender informiert,
|
||||
' wer die Sperre hält, und ob man es erneut versuchen möchte,
|
||||
' oder Abbrechen will. Das Verhalten orientiert sich an der
|
||||
' Vorlage, wie die Winline auf solche Sperrren reagiert.
|
||||
'
|
||||
' Returns: CheckOrderIsLocked : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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.04.2021 / MP
|
||||
' Version Date / Editor: 07.04.2021 / MP
|
||||
' Version Number: 3.0.0.2
|
||||
|
||||
Function CheckOrderIsLocked(OrderNumber)
|
||||
|
||||
CheckOrderIsLocked = False
|
||||
|
||||
If Len(OrderNumber) <= 0 Then
|
||||
' Ohne Auftrag geht gar nichts
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
Dim ContinueFlag : ContinueFlag = True
|
||||
|
||||
Do
|
||||
UserId = IsOrderLocked(OrderNumber)
|
||||
If UserId > 0 Then
|
||||
CheckOrderIsLocked = True ' Rückgabewert
|
||||
|
||||
QuestionText = "Der Auftrag [" & OrderNumber & "] wird von Benutzr [" & GetWinLineUserData(UserID) & "] bearbeitet! " & vbNewLine & vbNewLine
|
||||
Answer = MsgBox(QuestionText & "Wollen Sie abbrechen?", vbYesno + vbQuestion, DEFAULT_TITLE & " - CheckOrderIsLocked")
|
||||
If Answer = vbYes Then
|
||||
ContinueFlag = False ' Abbrechen
|
||||
Else
|
||||
ContinueFlag = True ' Weiter prüfen
|
||||
End If
|
||||
Else
|
||||
CheckOrderIsLocked = False ' Rückgabewert
|
||||
|
||||
ContinueFlag = False
|
||||
End If
|
||||
|
||||
Loop While ContinueFlag = true
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,300 @@
|
||||
' CompleteOrder()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Schließt die Prüfung ab und erstellt einen Lieferschein
|
||||
'
|
||||
' Returns: CompleteOrder : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 17.08.2021 / JJ/MP
|
||||
' Version Number: 3.0.0.5
|
||||
|
||||
Function CompleteOrder()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Conn = CWLStart.CurrentCompany.Connection
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
If MACRO_ARTICLE_COUNTER > 0 Then
|
||||
Dim MacroArticleReseted : MacroArticleReseted = False
|
||||
|
||||
CheckMacroArticlesComplete()
|
||||
|
||||
For MacroArrayIndex = 0 To Ubound(MACRO_ARTICLE_LIST, 2)
|
||||
If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArrayIndex) = False) AND _
|
||||
(MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_SCAN_FLAG, MacroArrayIndex) = True) Then
|
||||
questionText = "Der Package-Artikel [" & MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_NUMBER, MacroArrayIndex) & "] ist unvollständig!" & vbNewLine & vbNewLine
|
||||
Answer = MsgBox(questionText & "Soll das gesamte Package zurückgesetzt werden?", vbYesno + vbQuestion, DEFAULT_TITLE)
|
||||
If Answer = vbYes Then
|
||||
ResetValuesByMacroLineNumber MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex)
|
||||
MacroArticleReseted = True
|
||||
Else
|
||||
CompletedPackages = Cint(InputBox("Wieviele Package-Artikel von insgesamt [" & MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_REMAINING, MacroArrayIndex) & "] werden damit ausgeliefert?", "Anzahl fertige Packages", "0"))
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex) = CompletedPackages
|
||||
|
||||
End If
|
||||
End If
|
||||
|
||||
If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArrayIndex) = True) Then
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex) = MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_REMAINING, MacroArrayIndex)
|
||||
End If
|
||||
Next
|
||||
|
||||
If MacroArticleReseted = True Then
|
||||
Answer = MsgBox("Einer oder mehrere Package-Artikel wurden zurückgesetzt. Soll die Lieferscheinerstellung abgebrochen werden?", vbYesno + vbQuestion, DEFAULT_TITLE)
|
||||
If Answer = vbYes Then
|
||||
CompleteOrder = False
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
' Übertrage Macro-Daten zurück ins Grid
|
||||
TransferMacroData()
|
||||
End If
|
||||
|
||||
' Übertrage die Grid-Daten zurück in die Order-Datenstruktur
|
||||
TransferGridData()
|
||||
|
||||
' Eine letzte Möglichkeit die Auftragsdaten zu tunen
|
||||
UpdateOrderDataBeforeDelNote()
|
||||
|
||||
Dim OrderId, AccountSQL, MandatorId, RunningNumber
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Completing order.. " & vbNewline
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
|
||||
OrderId = mywin.Controls.Item(ORDER_INPUT).ScreenContents
|
||||
AccountSQL = "SELECT DISTINCT c021 FROM t025 (NOLOCK) WHERE c044 = '" & OrderId & "' " & SQLQuery_OrderWhere
|
||||
|
||||
Set AccountResult = Connection.Select(AccountSQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Querying for CustomerAccountId.. " & vbNewline
|
||||
AddDebugLine "Result Columns: " & AccountResult
|
||||
AddDebugLine "Result Rows: " & AccountResult.RowCount
|
||||
AddDebugLine "SQL: " & AccountSQL
|
||||
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
|
||||
MandatorId = AccountResult.Value("c021")
|
||||
RunningNumber = RUNNING_NUMBER_PREFIX & OrderId
|
||||
BelegKey = Cstr(DateDiff("s", "01/01/1970 00:00:00", Now))
|
||||
|
||||
' ===================== KOPFDATEN =====================
|
||||
|
||||
Dim Request, URL, XML
|
||||
Dim NowObject : NowObject = Now
|
||||
Dim DateString : DateString = Year(NowObject) & "-" & GetLeftPad(Month(NowObject)) & "-" & GetLeftPad(Day(NowObject))
|
||||
Dim TimeString : TimeString = GetLeftPad(Hour(NowObject)) & ":" & GetLeftPad(Minute(NowObject)) & ":" & GetLeftPad(Second(NowObject))
|
||||
Dim UserNumber : UserNumber = Cwlstart.Currentuser.Number
|
||||
Dim ComputerName : ComputerName = GetWindowsEnvironment("COMPUTERNAME")
|
||||
|
||||
' === WEB SERVICES =======================
|
||||
XML = ""
|
||||
XML = XML & "<?xml version=""1.0"" encoding=""UTF-8""?>"
|
||||
XML = XML & "<MESOWebService TemplateType=""__TYPE__"" Template=""__VORLAGE__"" option=""__OPTION__"" printVoucher=""__PRINT__"">"
|
||||
|
||||
XML = XML & "<__VORLAGE__T025>"
|
||||
XML = XML & "<BELEGKEY>" & BelegKey & "</BELEGKEY>"
|
||||
XML = XML & "<Kontonummer>" & MandatorId & "</Kontonummer>"
|
||||
XML = XML & "<Laufnummer>" & RunningNumber & "</Laufnummer>"
|
||||
XML = XML & "<Auftragsnummer>" & OrderId & "</Auftragsnummer>"
|
||||
XML = XML & "<Datum_Lieferschein>" & DateString & "</Datum_Lieferschein>"
|
||||
|
||||
If USE_ADDITIONAL_DBFIELDS = True Then
|
||||
XML = XML & "<BenutzerNummerPacktisch>" & UserNumber & "</BenutzerNummerPacktisch>"
|
||||
XML = XML & "<ErstellDatumPacktisch>" & DateString & " " & TimeString & "</ErstellDatumPacktisch>"
|
||||
XML = XML & "<ComputerNamePacktisch>" & ComputerName & "</ComputerNamePacktisch>"
|
||||
XML = XML & "<VersionPacktisch>" & PACKTISCH_VERSION & "</VersionPacktisch>"
|
||||
End If
|
||||
|
||||
XML = XML & "</__VORLAGE__T025>"
|
||||
|
||||
' === EXIM TABELLE =======================
|
||||
HeadSQL = "INSERT INTO " & SQLDB_for_EXIM & "." & SQLHeadTB_for_EXIM & " "
|
||||
HeadSQL = HeadSQL & "(BELEGKEY, Kontonummer, Laufnummer, Auftragsnummer, Belegdatum) "
|
||||
HeadSQL = HeadSQL & "VALUES("& BelegKey &", '"& MandatorId &"', '"& RunningNumber &"', '"& OrderId &"', GETDATE())"
|
||||
|
||||
HeadResult = Conn.ExecuteSQL(HeadSQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Inserting Head Data" & vbNewline
|
||||
AddDebugLine "Result: " & HeadResult
|
||||
AddDebugLine "SQL: " & HeadSQL
|
||||
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
|
||||
' ===================== ENDE KOPFDATEN =====================
|
||||
|
||||
' ============================ MITTEDATEN ============================
|
||||
|
||||
Dim ArticleNumber, AmountScanned, SerialNumber, StorageLocation, LineNumber
|
||||
|
||||
For OrderArrayIndex = 0 To Ubound(ORDER_ARTICLE_DATA, 2): Do
|
||||
IsSerialNumberArticle = Cint(ORDER_ARTICLE_DATA(INDEX_IS_SERIAL_NUMBER, OrderArrayIndex))
|
||||
ArticleNumber = ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex)
|
||||
SerialNumber = ORDER_ARTICLE_DATA(INDEX_SERIAL_NUMBER, OrderArrayIndex)
|
||||
AmountScanned = CInt(ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex))
|
||||
LineNumber = CInt(ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex))
|
||||
DataType = CInt(ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex))
|
||||
VKPreisEinzel = Replace(ORDER_ARTICLE_DATA(INDEX_PRICE_VK_EINZEL, OrderArrayIndex), ",", ".")
|
||||
IsOpen = ORDER_ARTICLE_DATA(INDEX_IS_OPEN, OrderArrayIndex)
|
||||
|
||||
' Sonderfall Artikel mit negativen Mengen
|
||||
If (ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) - ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex)) < 0 Then
|
||||
AmountScanned = ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex)
|
||||
IsOpen = True
|
||||
End If
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Processing Article: " & ArticleNumber
|
||||
AddDebugLine "SerialNumber: " & SerialNumber
|
||||
AddDebugLine "LineNumber: " & LineNumber
|
||||
AddDebugLine "DataType: " & DataType
|
||||
AddDebugLine "IsOpen: " & IsOpen
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
|
||||
' Text-Artikel werden nicht übergeben
|
||||
If DataType = 3 Then
|
||||
Exit Do
|
||||
End If
|
||||
|
||||
If PRINT_DOCUMENT_AFTER_COMPLETION = True Then
|
||||
StorageLocation = GetWinLineStorageLocation(ArticleNumber, SerialNumber, IsSerialNumberArticle)
|
||||
InternalArticleNumber = GetWinLineInternalProductNumber(ArticleNumber, SerialNumber)
|
||||
Else
|
||||
StorageLocation = 0
|
||||
InternalArticleNumber = 0
|
||||
End If
|
||||
|
||||
' === EXIM TABELLE =======================
|
||||
MidSQL = "INSERT INTO " & SQLDB_for_EXIM & "." & SQLMiddleTB_for_EXIM & " "
|
||||
MidSQL = MidSQL & "(BELEGKEY, Artikelnummer, Hauptartikelnummer, Zeilennummer, Datentyp, Mengegeliefert, ChargeIdentnummer, Lagerort, Einzelpreis) "
|
||||
MidSQL = MidSQL & "VALUES (" & BelegKey & ", '" & ArticleNumber & "', '" & ArticleNumber & "', "
|
||||
|
||||
If IsSerialNumberArticle = 1 Then
|
||||
MidSQL = MidSQL & LineNumber
|
||||
Else
|
||||
MidSQL = MidSQL & " NULL"
|
||||
End If
|
||||
|
||||
MidSQL = MidSQL & ", '1', " & AmountScanned & ", '" & SerialNumber & "', " & StorageLocation& ", " & VKPreisEinzel & ")"
|
||||
|
||||
MidResult = Conn.ExecuteSQL(MidSQL)
|
||||
|
||||
' === WEB SERVICES =======================
|
||||
|
||||
MidXML = ""
|
||||
|
||||
' Abgeschlossene Belegzeilen werden nicht an den WebSerivce übergeben
|
||||
If IsOpen = True Then
|
||||
MidXML = MidXML & "<__VORLAGE__T026>"
|
||||
MidXML = MidXML & "<BELEGKEY>" & BelegKey & "</BELEGKEY>"
|
||||
MidXML = MidXML & "<Artikelnummer>" & InternalArticleNumber & "</Artikelnummer>"
|
||||
MidXML = MidXML & "<Hauptartikelnummer>" & ArticleNumber & "</Hauptartikelnummer>"
|
||||
MidXML = MidXML & "<Zeilennummer>" & LineNumber & "</Zeilennummer>"
|
||||
MidXML = MidXML & "<Datentyp>" & "1" & "</Datentyp>"
|
||||
MidXML = MidXML & "<Mengegeliefert>" & AmountScanned & "</Mengegeliefert>"
|
||||
MidXML = MidXML & "<ChargeIdentnummer>" & SerialNumber & "</ChargeIdentnummer>"
|
||||
MidXML = MidXML & "<Lagerort>" & StorageLocation & "</Lagerort>"
|
||||
MidXML = MidXML & "<Einzelpreis>" & VKPreisEinzel & "</Einzelpreis>"
|
||||
MidXML = MidXML & "</__VORLAGE__T026>"
|
||||
|
||||
End If
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Inserting Middle Data" & vbNewline
|
||||
AddDebugLine "For Article " & ArticleNumber
|
||||
AddDebugLine "And Amount " & AmountScanned
|
||||
AddDebugLine "Result: " & MidResult & vbNewline
|
||||
AddDebugLine "SQL: " & MidSQL & vbNewline
|
||||
AddDebugLine "XML: " & MidXML
|
||||
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
|
||||
XML = XML & MidXML
|
||||
Loop While False: Next
|
||||
|
||||
XML = XML & "</MESOWebService>"
|
||||
XML = Replace(XML, "__VORLAGE__", WEB_VORLAGE)
|
||||
XML = Replace(XML, "__TYPE__", WEB_TYPE)
|
||||
|
||||
XML = Replace(XML, "__PRINT__", WEB_PRINT)
|
||||
XML = Replace(XML, "__OPTION__", WEB_OPTION)
|
||||
|
||||
URL = "http://__SERVER__/ewlservice/import?User=__USER__&Password=__PASSWORD__&Company=__COMPANY__&Type=30&Vorlage=__VORLAGE__&Actioncode=__ACTIONCODE__&byref=0&Data=__DATA__"
|
||||
URL = Replace(URL, "__SERVER__", WEB_SERVER)
|
||||
URL = Replace(URL, "__USER__", WEB_USER)
|
||||
URL = Replace(URL, "__PASSWORD__", WEB_PASS)
|
||||
URL = Replace(URL, "__COMPANY__", WEB_COMPANY)
|
||||
URL = Replace(URL, "__VORLAGE__", WEB_VORLAGE)
|
||||
URL = Replace(URL, "__ACTIONCODE__", WEB_ACTIONCODE)
|
||||
URL = Replace(URL, "__DATA__", XML)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Sending Request to WebServices.."
|
||||
AddDebugLine "URL: " & URL
|
||||
|
||||
AddDebugLine "WEB_PRINT: " & WEB_PRINT
|
||||
AddDebugLine "WEB_OPTION: " & WEB_OPTION
|
||||
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
|
||||
' ======================= ENDE MITTEDATEN =======================
|
||||
|
||||
If PRINT_DOCUMENT_AFTER_COMPLETION = True Then
|
||||
|
||||
' ===================== HTTP REQUEST =====================
|
||||
Set Request = CreateObject("MSXML2.XMLHTTP")
|
||||
Request.Open "POST", URL, False
|
||||
Request.Send
|
||||
Response = Request.ResponseText
|
||||
Status = Request.Status
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Response from WebServices!"
|
||||
AddDebugLine "Status: " & Status
|
||||
AddDebugLine "Body: " & Response
|
||||
|
||||
ShowDebugBox "CompleteOrder"
|
||||
End If
|
||||
' =================== ENDE HTTP REQUEST ==================
|
||||
|
||||
Error = False
|
||||
Message = ""
|
||||
|
||||
If Status = 200 Then
|
||||
If TestIsWebserviceResponseSuccessful(Response) = True Then
|
||||
Message = "Lieferschein wurde übertragen!"
|
||||
Else
|
||||
Error = True
|
||||
Message = "Lieferschein wurde nicht übertragen! Fehlerdetails: " & vbNewline & vbNewline & Response
|
||||
End If
|
||||
Else
|
||||
Error = True
|
||||
Message = "Fehler beim Zugriff auf Webservices aufgetreten!" & vbNewline & vbNewline & "Status: " & Status
|
||||
End If
|
||||
|
||||
If Error = False Then
|
||||
MsgBox Message, vbInformation, DEFAULT_TITLE
|
||||
|
||||
CompleteOrder = True
|
||||
Else
|
||||
MsgBox Message, vbExclamation, DEFAULT_TITLE & " - Fehler bei Abschluss"
|
||||
|
||||
CompleteOrder = False
|
||||
End If
|
||||
Else
|
||||
CompleteOrder = True
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,35 @@
|
||||
' CountRowsForArticle(ArticleNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Gibt die Anzahl der Zeilen zu einer Artikelnummer zurück
|
||||
'
|
||||
' Returns: CountRowsForArticle : 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: 25.09.2020 / JJ
|
||||
' Version Date / Editor: 25.09.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function CountRowsForArticle(ArticleNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
Dim Count : Count = 0
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Counting rows for Article: " & ArticleNumber
|
||||
ShowDebugBox "CountRowsForArticle"
|
||||
End If
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount
|
||||
CurrentArticleNumber = Grid.GetCellValue(GridIndex, COLUMN_ARTICLENUMBER)
|
||||
|
||||
If ArticleNumber = CurrentArticleNumber Then
|
||||
Count = Count + 1
|
||||
End If
|
||||
Next
|
||||
|
||||
CountRowsForArticle = Count
|
||||
End Function
|
||||
@@ -0,0 +1,392 @@
|
||||
' DuplicateArticles (ArticleNumber : String, MacroFlag : Int, ChargeFlag : Int)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Funktionen zur Behandlung mehrfach vorkommender
|
||||
' Artikelnummern. Daten werden im Array DUPL_ARTICLE_LIST
|
||||
' gespeichert und verwaltet.
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 15.04.2021 / MP
|
||||
' Version Date / Editor: 15.04.2021 / MP
|
||||
' Version Number: 3.0.0.2
|
||||
|
||||
Const ARTICLE_IS_NOT_IN_DUPLICATES_LIST = -199
|
||||
Const GRIDLINE_INDEX_IS_NOT_CHOOSEABLE = -198
|
||||
Const NO_GRIDLINE_INDEX_CHOSEN = -197
|
||||
CONST USE_ORIGINAL_ROW = -196
|
||||
|
||||
' Legt für jeden scannbaren Artikel einen Satz in der Duplikate-Struktur an
|
||||
' und zählt wie oft dieser Artikel vorkommt.
|
||||
' Für Artikel innerhalb eines Macros wird zusätzlich ein eigener Zähler hochgesetzt.
|
||||
Sub AddArticleNumberToDuplList(ArticleNumber, MacroFlag, ChargeFlag)
|
||||
|
||||
DuplArrayIndex = ExistArticleInDuplList(ArticleNumber)
|
||||
|
||||
If DuplArrayIndex = ARTICLE_IS_NOT_IN_DUPLICATES_LIST Then
|
||||
' Lege neue Zeile an
|
||||
AddTwoDimArrayRow DUPL_ARTICLE_LIST
|
||||
DuplArrayIndex = UBound(DUPL_ARTICLE_LIST, 2)
|
||||
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_ARTICLE_NUMBER, DuplArrayIndex) = ArticleNumber
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_CHARGE_FLAG, DuplArrayIndex) = ChargeFlag
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex) = 1
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex) = 0
|
||||
|
||||
If (MacroFlag = 2) Then
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex) = 1
|
||||
End If
|
||||
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_GRID_LINE_INDEXE, DuplArrayIndex) = ""
|
||||
Else
|
||||
' Erhöhe Wert in bestehender Zeile
|
||||
currentValue = DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex)
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex) = currentValue + 1
|
||||
|
||||
If (MacroFlag = 2) Then
|
||||
currentMacroValue = DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex)
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex) = currentMacroValue + 1
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' Reduziert die Zähler für den Artikel, wenn eine Zeile vollständig gescannt wurde.
|
||||
' Für Macro-Unterteile wird zusätzlich der MacroCounter reduziert
|
||||
Sub ReduceCounterInDuplList(ArticleNumber, MacroFlag)
|
||||
|
||||
DuplArrayIndex = ExistArticleInDuplList(ArticleNumber)
|
||||
|
||||
If DuplArrayIndex >= 0 Then
|
||||
' Vermindert Wert für den Artikel
|
||||
currentValue = DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex)
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex) = currentValue - 1
|
||||
|
||||
If (MacroFlag = 2) Then
|
||||
currentMacroValue = DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex)
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex) = currentMacroValue - 1
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
' Reduziert die Zähler im Sub-Macro-Artikel-Token, wenn eine Zeile vollständig gescannt wurde.
|
||||
' benötigt die ZeilenNummer des Macro Artikels
|
||||
Sub ReduceSubMacroCounterInDuplList(ArticleNumber, MacroLineNumber)
|
||||
|
||||
DuplArrayIndex = ExistArticleInDuplList(ArticleNumber)
|
||||
|
||||
If DuplArrayIndex >= 0 Then
|
||||
|
||||
TestToken = "#" & MacroLineNumber & ","
|
||||
CurrentMacroLineNumbers = DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_LINE_NUMBERS, DuplArrayIndex)
|
||||
|
||||
If Len(CurrentMacroLineNumbers) > 0 And InStr(CurrentMacroLineNumbers, TestToken) > 0 Then
|
||||
'Counter reduzieren!
|
||||
TempMacroLineNumbers = ""
|
||||
SplittedTokens = Split(CurrentMacroLineNumbers)
|
||||
For Each Token In SplittedTokens
|
||||
If (InStr(Token, TestToken) > 0) Then
|
||||
'Treffer, Counter auslesen, erhöhen und zurückschreiben
|
||||
TempToken = Split(Token, ",")
|
||||
TokenLen = Len(TempToken(1))-1
|
||||
NewCount = CInt(Left(TempToken(1), TokenLen)) - 1
|
||||
If NewCount > 0 Then
|
||||
TempMacroLineNumbers = TempMacroLineNumbers & " " & TestToken & NewCount & "#"
|
||||
End If
|
||||
Else
|
||||
' Kein Treffer, Token wieder zurückschreiben
|
||||
TempMacroLineNumbers = TempMacroLineNumbers & " " & Token
|
||||
End If
|
||||
Next
|
||||
|
||||
CurrentMacroLineNumbers = TempMacroLineNumbers
|
||||
End If
|
||||
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_LINE_NUMBERS, DuplArrayIndex) = CurrentMacroLineNumbers
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
' Ergänzt die GridLine-Indexe für Artikel, die mehrfach vorkommen
|
||||
' Bedingung: Der Artikel muss bereits in der Duplicate-Struktur
|
||||
' enthalten sein, und einen Counter > 1 haben.
|
||||
Sub AddGridLineIndexToDuplicateArticles(ArticleNumber, GridLineIndex)
|
||||
|
||||
DuplArrayIndex = ExistArticleInDuplList(ArticleNumber)
|
||||
|
||||
If DuplArrayIndex >= 0 Then
|
||||
DuplCount = DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex)
|
||||
|
||||
If DuplCount > 1 Then
|
||||
CurrentGridLineIndexe = DUPL_ARTICLE_LIST(COLUMN_DUPL_GRID_LINE_INDEXE, DuplArrayIndex)
|
||||
|
||||
If Len(CurrentGridLineIndexe) > 0 Then
|
||||
CurrentGridLineIndexe = CurrentGridLineIndexe & " " & FormatNumber(GridLineIndex, 0)
|
||||
Else
|
||||
CurrentGridLineIndexe = FormatNumber(GridLineIndex, 0)
|
||||
End If
|
||||
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_GRID_LINE_INDEXE, DuplArrayIndex) = CurrentGridLineIndexe
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
' Ergänzt die LineNumber der Macro-Hauptartikel für Macro-Sub-Artikel
|
||||
' Gesammelt werden Tokens in der Form #LN,1#, wenn sie noch nicht vorkommen.
|
||||
' Der Counter wird hochgezählt, um das Vorkommen des Artikels in verschiedenen Macros abzufangen
|
||||
' Bedingung: Der Artikel muss bereits in der Duplicate-Struktur
|
||||
' enthalten sein, und einen Counter > 1 haben.
|
||||
Sub AddMacroLineNumberTokensToDuplicateArticles(ArticleNumber, MacroLineNumber)
|
||||
|
||||
DuplArrayIndex = ExistArticleInDuplList(ArticleNumber)
|
||||
|
||||
If DuplArrayIndex >= 0 Then
|
||||
DuplCount = DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex)
|
||||
|
||||
If DuplCount > 1 Then
|
||||
TestToken = "#" & MacroLineNumber & ","
|
||||
CurrentMacroLineNumbers = DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_LINE_NUMBERS, DuplArrayIndex)
|
||||
|
||||
If Len(CurrentMacroLineNumbers) <= 0 Then
|
||||
CurrentMacroLineNumbers = TestToken & "1#"
|
||||
ElseIf InStr(CurrentMacroLineNumbers, TestToken) = 0 Then
|
||||
CurrentMacroLineNumbers = CurrentMacroLineNumbers & " " & TestToken & "1#"
|
||||
Else
|
||||
'Counter erhöhen!
|
||||
TempMacroLineNumbers = ""
|
||||
SplittedTokens = Split(CurrentMacroLineNumbers)
|
||||
For Each Token In SplittedTokens
|
||||
If (InStr(Token, TestToken) > 0) Then
|
||||
'Treffer, Counter auslesen, erhöhen und zurückschreiben
|
||||
TempToken = Split(Token, ",")
|
||||
TokenLen = Len(TempToken(1))-1
|
||||
NewCount = CInt(Left(TempToken(1), TokenLen)) + 1
|
||||
TempMacroLineNumbers = TempMacroLineNumbers & " " & TestToken & NewCount & "#"
|
||||
Else
|
||||
' Kein Treffer, Token wieder zurückschreiben
|
||||
TempMacroLineNumbers = TempMacroLineNumbers & " " & Token
|
||||
End If
|
||||
Next
|
||||
|
||||
CurrentMacroLineNumbers = TempMacroLineNumbers
|
||||
End If
|
||||
|
||||
DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_LINE_NUMBERS, DuplArrayIndex) = CurrentMacroLineNumbers
|
||||
End If
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
' Prüfe, ob eine Artikelnummer bereits in dem Array enthalten ist
|
||||
' oder nicht
|
||||
' Rueckgabewert: Index des Artikels im Array, wenn bereits vorhande, sonst -1 falls nicht vorhanden
|
||||
Function ExistArticleInDuplList(ArticleNumber)
|
||||
|
||||
ExistArticleInDuplList = ARTICLE_IS_NOT_IN_DUPLICATES_LIST
|
||||
|
||||
If (UBound(DUPL_ARTICLE_LIST, 2) > -1) Then
|
||||
For DuplArrayIndex = 0 To UBound(DUPL_ARTICLE_LIST, 2)
|
||||
If (DUPL_ARTICLE_LIST(COLUMN_DUPL_ARTICLE_NUMBER, DuplArrayIndex) = ArticleNumber) Then
|
||||
ExistArticleInDuplList = DuplArrayIndex
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
|
||||
End Function
|
||||
|
||||
' Zählt die MacroLineNumber-Tokens für den Artikel, und gibt
|
||||
' die Anzahl zurück
|
||||
Function GetMacroLineNumberCount(DuplArrayIndex)
|
||||
|
||||
Count = 0
|
||||
SplittetTokens = Split(Trim(DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_LINE_NUMBERS, DuplArrayIndex)))
|
||||
|
||||
For Each Element In SplittetTokens
|
||||
Count = Count + 1
|
||||
Next
|
||||
|
||||
GetMacroLineNumberCount = Count
|
||||
End Function
|
||||
|
||||
' Die Funktion gibt die Anzahl der Vorkommen des Artikels zurück.
|
||||
' Für Macro-Sub-Artikel wird noch der Macro-Counter ausgewertet
|
||||
Function GetCountInDuplList(ArticleNumber)
|
||||
|
||||
GetCountInDuplList = 0
|
||||
|
||||
For DuplArrayIndex = 0 To UBound(DUPL_ARTICLE_LIST, 2)
|
||||
If (DUPL_ARTICLE_LIST(COLUMN_DUPL_ARTICLE_NUMBER, DuplArrayIndex) = ArticleNumber) Then
|
||||
' COLUMN_DUPL_ROW_COUNT enthält die Gesamtzahl der Vorkommen
|
||||
DuplCounter = DUPL_ARTICLE_LIST(COLUMN_DUPL_ROW_COUNT, DuplArrayIndex)
|
||||
|
||||
If (DuplCounter > 1) Then
|
||||
' Wenn mehr als 1 Zeile übrig ist und es ein SN-Artikel ist, müssen wir genauer prüfen,
|
||||
' ob wir die Auswahlbox anzeigen sollen.
|
||||
ChargeFlag = DUPL_ARTICLE_LIST(COLUMN_DUPL_CHARGE_FLAG, DuplArrayIndex)
|
||||
If (ChargeFlag = 2) Then
|
||||
' Gibt es noch SN-Artikel in Makros? und in wievielen unterschiedlichen Macros?
|
||||
macroRowCounter = cint(DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex)) ' Anzahl Artikel innerhalb von Macros
|
||||
macroLineCounter = cint(GetMacroLineNumberCount(DuplArrayIndex)) ' Anzahl unterschiedlicher Macros
|
||||
|
||||
' Die Abfragebox muss kommen, wenn
|
||||
' a) SN-Artikel in mehreren unterschiedlichen Macros vorkommen
|
||||
' b) SN-Artikel innerhalb und ausserhalb von Macros vorkommen
|
||||
' --> Wir geben die komplette Menge DuplCounter zurück!
|
||||
' Die Box darf nicht kommen, wenn
|
||||
' c) wenn SN-Artikel nur ausserhalb von Macros vorkommen
|
||||
' d) SN-Artikel nur noch in einem Bereich auftauchen,
|
||||
' --> Wir geben 1 als DuplCounter zurück!
|
||||
|
||||
If (macroLineCounter = 0 OR _
|
||||
(macroLineCounter = 1 AND DuplCounter = macroRowCounter)) Then
|
||||
DuplCounter = 1
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
GetCountInDuplList = DuplCounter
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
End Function
|
||||
|
||||
' Funktion, die die gewählte Auswahl der InputBox auswertet
|
||||
' Rückgabewert: gewählte Zeilennummer oder Fehler
|
||||
Function ChooseGridLineIndexFromDuplicates(ArticleNumber)
|
||||
NoValidIndexSelected = True
|
||||
ChooseGridLineIndexFromDuplicates = -1
|
||||
|
||||
Do
|
||||
RetValue = ShowDuplicateInputBox(ArticleNumber)
|
||||
If RetValue = ARTICLE_IS_NOT_IN_DUPLICATES_LIST Then
|
||||
' Der Artikel kommt nicht im Array vor. Abbruch.
|
||||
NoValidIndexSelected = False
|
||||
ChooseGridLineIndexFromDuplicates = -1
|
||||
ElseIf RetValue = USE_ORIGINAL_ROW Then
|
||||
' Verwende einfach die schon gefundene Zeile
|
||||
NoValidIndexSelected = False
|
||||
ChooseGridLineIndexFromDuplicates = USE_ORIGINAL_ROW
|
||||
ElseIf RetValue = NO_GRIDLINE_INDEX_CHOSEN Then
|
||||
' Leere Auswahl oder Abbruch - OK
|
||||
Answer = MsgBox("Wollen Sie die Scanergebnisse für Artikel [" & ArticleNumber & "] wirklich verwerfen?", vbYesno + vbQuestion, DEFAULT_TITLE)
|
||||
If Answer = vbYes Then
|
||||
NoValidIndexSelected = False
|
||||
ChooseGridLineIndexFromDuplicates = -1
|
||||
End If
|
||||
ElseIf RetValue > 0 Then
|
||||
' Gültiger Wert wurde ausgewählt
|
||||
NoValidIndexSelected = False
|
||||
ChooseGridLineIndexFromDuplicates = RetValue
|
||||
Else
|
||||
' Falsche Auswahl - Erneut die InputBox anzeigen.
|
||||
MsgBox "Die gewählte Zeile steht nicht zur Auswahl. Bitte wählen Sie erneut.", vbOKOnly + vbExclamation, DEFAULT_TITLE
|
||||
End If
|
||||
|
||||
Loop While NoValidIndexSelected
|
||||
|
||||
End Function
|
||||
|
||||
' Die Funktion zeigt eine InputBox mit den Informationen über
|
||||
' doppelte Artikel.
|
||||
' Rückgabewert: GridLineIndex der Position die bebucht werden soll
|
||||
Function ShowDuplicateInputBox(ArticleNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
Set amountBox = mywin.Controls.Item(AMOUNT_INPUT)
|
||||
ScannedAmount = Cint(amountBox.Contents)
|
||||
|
||||
DuplArrayIndex = ExistArticleInDuplList(ArticleNumber)
|
||||
If (DuplArrayIndex < 0) Then
|
||||
ShowDuplicateInputBox = ARTICLE_IS_NOT_IN_DUPLICATES_LIST
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
ChargeFlag = DUPL_ARTICLE_LIST(COLUMN_DUPL_CHARGE_FLAG, DuplArrayIndex)
|
||||
If ChargeFlag = 2 Then
|
||||
' Anzeige für SN-Artikel macht nur Sinn, wenn Macro-Artikel involviert sind.
|
||||
If DUPL_ARTICLE_LIST(COLUMN_DUPL_MACRO_ROW_COUNT, DuplArrayIndex) <= 0 Then
|
||||
ShowDuplicateInputBox = USE_ORIGINAL_ROW
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
Dim ChooseableTokens : ChooseableTokens = "" 'Enthält die erlaubten Werte für die Auswahl
|
||||
Dim AlreadyUsedAreasTokens : AlreadyUsedAreasTokens = "" ' #0# = Normaler Artikel, sonst MacroLineIndex
|
||||
Dim InputTitle : InputTitle = DEFAULT_TITLE & " - Auswahl einer Zeilennummer"
|
||||
Dim InputDefault : InputDefault = "" ' Hier machen wir bewusst nichts!
|
||||
|
||||
InputPrompt = "Der Artikel [" & ArticleNumber & "] kommt mehrfach im Auftrag vor: " & vbNewLine & vbNewLine
|
||||
|
||||
SplittetValues = Split(DUPL_ARTICLE_LIST(COLUMN_DUPL_GRID_LINE_INDEXE, DuplArrayIndex))
|
||||
For Each GridLineIndex In SplittetValues : Do
|
||||
|
||||
Total = Cint(Grid.GetCellValue(Cint(GridLineIndex), COLUMN_TOTAL))
|
||||
Scanned = Cint(Grid.GetCellValue(Cint(GridLineIndex), COLUMN_SCANNED))
|
||||
Amount = Total - Scanned
|
||||
|
||||
If (Amount > 0) Then
|
||||
MacroFlag = Cint(Grid.GetCellValue(Cint(GridLineIndex), COLUMN_MACRO_FLAG))
|
||||
If (ChargeFlag = 0) Then
|
||||
' Normale Artikel
|
||||
ChooseableTokens = ChooseableTokens & " #" & GridLineIndex & "# "
|
||||
InputPrompt = InputPrompt & "Zeile " & GridLineIndex & vbTab & " - Menge " & Amount
|
||||
|
||||
If MacroFlag = 2 Then
|
||||
InputPrompt = InputPrompt & " (Package)"
|
||||
End If
|
||||
|
||||
InputPrompt = InputPrompt & vbNewLine
|
||||
Else
|
||||
' SN-Artikel / Späte Ausprägungen
|
||||
' Hier muss entschieden werden, ob ein Satz überhaupt angezeigt werden soll
|
||||
MacroLineNumberToken = "#" & Grid.GetCellValue(Cint(GridLineIndex), COLUMN_MACRO_LINE_NUMBER) & "#"
|
||||
|
||||
If (InStr(AlreadyUsedAreasTokens, MacroLineNumberToken) = 0) Then
|
||||
AlreadyUsedAreasTokens = AlreadyUsedAreasTokens & " " & MacroLineNumberToken
|
||||
ChooseableTokens = ChooseableTokens & " #" & GridLineIndex & "# "
|
||||
|
||||
InputPrompt = InputPrompt & "Zeile " & GridLineIndex & vbTab & " - Menge " & Amount
|
||||
|
||||
If MacroFlag = 2 Then
|
||||
InputPrompt = InputPrompt & " (Package)"
|
||||
End If
|
||||
|
||||
InputPrompt = InputPrompt & vbNewLine
|
||||
Else
|
||||
Exit Do
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Loop While False: Next
|
||||
|
||||
InputPrompt = InputPrompt & vbNewLine & "Auf welche Zeile soll die gescannte Menge [" & ScannedAmount & "] gebucht werden?"
|
||||
|
||||
inputBoxValue = InputBox(InputPrompt, InputTitle, InputDefault)
|
||||
|
||||
Select Case True
|
||||
Case IsEmpty(inputBoxValue)
|
||||
' Abbruchbutton der InputBox geklickt
|
||||
ShowDuplicateInputBox = NO_GRIDLINE_INDEX_CHOSEN
|
||||
Case "" = Trim(inputBoxValue)
|
||||
' Kein Wert eingegeben und OK geklickt
|
||||
ShowDuplicateInputBox = NO_GRIDLINE_INDEX_CHOSEN
|
||||
Case Else
|
||||
' Wert eingegeben und OK geklickt
|
||||
testToken = "#" & inputBoxValue & "#"
|
||||
If (InStr(ChooseableTokens, testToken) > 0) Then
|
||||
' Alles Rotscha in Kambodscha!
|
||||
ShowDuplicateInputBox = inputBoxValue
|
||||
Else
|
||||
' Ungültiger Wert
|
||||
ShowDuplicateInputBox = GRIDLINE_INDEX_IS_NOT_CHOOSEABLE
|
||||
End If
|
||||
End Select
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,48 @@
|
||||
' GetArticleNumberFromSecondaryIndentifier(Identifier : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Gibt die Artikelnummer für Spät-Auspräge-Artikel zurück
|
||||
'
|
||||
' Returns: GetArticleNumberFromSecondaryIndentifier : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 23.10.2020 / JJ
|
||||
' Version Date / Editor: 23.11.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetArticleNumberFromSecondaryIndentifier(Identifier)
|
||||
SQL = ""
|
||||
' EAN-Code / Alternative Artikelnummer 1 / Alternative Artikelnummer 2 / Artikelnummer / S/N
|
||||
SQL = SQL & "("
|
||||
SQL = SQL & "(C002 = '" & Identifier & "') Or "
|
||||
SQL = SQL & "(C068 = '" & Identifier & "') Or "
|
||||
SQL = SQL & "(C075 = '" & Identifier & "') Or "
|
||||
SQL = SQL & "(C114 = '" & Identifier & "') Or "
|
||||
SQL = SQL & "(C115 = '" & Identifier & "')"
|
||||
SQL = SQL & ") "
|
||||
' Nur Nach Hauptartikel/Ausprägungs(kind)artikel suchen
|
||||
' SQL = SQL & "And C014 IN (0, 2)"
|
||||
|
||||
' Nach Mandant und Wirtschaftsjahr filtern
|
||||
SQL = SQL & SQLQuery_BasicWhere
|
||||
|
||||
Set Result = CWLStart.CurrentCompany.SearchRecord(TABLE_21, SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Searching for SerialNumber-Regex by ArticleNumber " & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result
|
||||
AddDebugLine "Result Rows: " & Result.RowCount
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "GetArticleNumberFromSecondaryIndentifier"
|
||||
End If
|
||||
|
||||
If Result.RowCount > 0 Then
|
||||
GetArticleNumberFromSecondaryIndentifier = Result.Value("c010")
|
||||
Else
|
||||
GetArticleNumberFromSecondaryIndentifier = ""
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,37 @@
|
||||
' GetNextFreeArticleRow(ArticleNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Gibt den Grid Index der nächsten freien Zeile für das Scan-Ergebnis zurück
|
||||
'
|
||||
' Returns: GetNextFreeArticleRow : 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: 30.09.2020 / JJ
|
||||
' Version Date / Editor: 30.09.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function GetNextFreeArticleRow(ArticleNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
Dim NextFreeRow : NextFreeRow = -1
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Getting next free row for Article: " & ArticleNumber
|
||||
ShowDebugBox "GetNextFreeArticleRow"
|
||||
End If
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount
|
||||
CurrentArticleNumber = Grid.GetCellValue(GridIndex, COLUMN_ARTICLENUMBER)
|
||||
CurrentSerialNumber = Grid.GetCellValue(GridIndex, COLUMN_SERIALNUMBER)
|
||||
|
||||
If UCase(ArticleNumber) = UCase(CurrentArticleNumber) And Len(CurrentSerialNumber) = 0 Then
|
||||
NextFreeRow = GridIndex
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
|
||||
GetNextFreeArticleRow = NextFreeRow
|
||||
End Function
|
||||
@@ -0,0 +1,68 @@
|
||||
' IsOrderAvailable(OrderNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Überprüft, ob Auftrag noch (teilweise) offen ist
|
||||
'
|
||||
' Returns: OrderAvailable: Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 26.04.2021 / MP
|
||||
' Version Number: 3.0.0.3
|
||||
|
||||
Function IsOrderAvailable(OrderNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
Err.Clear
|
||||
IsOrderAvailable = False
|
||||
|
||||
'Set SQL Table and Query for DocHead. Default: "T025"
|
||||
'c023 - c026 = Druckstufen; c098 = Freigabeflag Angebot; c139 = Belegstufe;
|
||||
'c035 = Belegart
|
||||
'--> Query is not complete, will be build in the script later this time!
|
||||
SQL = ""
|
||||
SQL = SQL & "(c044 = '" & OrderNumber & "') "
|
||||
SQL = SQL & "AND (c024 = '*' AND c025 != '*' AND c026 != '*') " ' Auftrag gedruckt, LS/Rech noch nicht gedruckt.
|
||||
SQL = SQL & "AND (c025 IN ('M', 'A', 'S')) " ' Druckstatus Lieferschein
|
||||
SQL = SQL & "AND (c115 < 900) " ' Flag Freigabekontrolle Auftrag
|
||||
SQL = SQL & "AND (c139 = 2) " ' Belegstufe 2 = Auftrag
|
||||
SQL = SQL & SQLQuery_OrderWhere
|
||||
|
||||
Set Result = CWLStart.CurrentCompany.SearchRecord(TABLE_25, SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
MsgBox "SQL: ... FROM " & TABLE_25 & " WHERE " & SQL, vbOkonly, DEBUG_TITLE
|
||||
|
||||
AddDebugLine "Checking For Order by OrderId.." & vbNewline & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result & vbNewline
|
||||
AddDebugLine "Result Rows: " & Result.RowCount & vbNewline
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "IsOrderAvailable"
|
||||
End If
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
Msgbox "Fehler bei SQL-Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - IsOrderAvailable"
|
||||
Exit Function
|
||||
Else
|
||||
Message = "Der Auftrag [" & OrderNumber & "] wurde nicht geladen aus einem der folgenden Gründe:" & vbNewLine & vbNewLine
|
||||
Message = Message & "- Auftrag existiert nicht" & vbNewLine
|
||||
Message = Message & "- Auftrag ist durch Fibu gesperrt" & vbNewLine
|
||||
Message = Message & "- Auftrag wurde bereits erledigt" & vbNewLine
|
||||
Message = Message & "- Beleg ist kein Auftrag"
|
||||
|
||||
MsgBox Message, vbExclamation, DEFAULT_TITLE
|
||||
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
If Result.RowCount > 0 Then
|
||||
IsOrderAvailable = True
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,38 @@
|
||||
' IsOrderComplete()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Überprüft, ob alle Zeilen vollständig gescannt wurden
|
||||
'
|
||||
' Returns: OrderComplete: Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 25.09.2020 / JJ
|
||||
' Version Date / Editor: 01.04.2020 / MP
|
||||
' Version Number: 3.0.0.2
|
||||
|
||||
Function IsOrderComplete()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
IsOrderComplete = True
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount: Do
|
||||
Total = Cint(Grid.GetCellValue(GridIndex, COLUMN_TOTAL))
|
||||
Scanned = Cint(Grid.GetCellValue(GridIndex, COLUMN_SCANNED))
|
||||
MacroFlag = Cint(Grid.GetCellValue(GridIndex, COLUMN_MACRO_FLAG))
|
||||
|
||||
If MacroFlag = 1 Then
|
||||
' Continue weil Makro-Haupt-Artikel nicht geprüft werden
|
||||
' Sonstige Artikel, wie z.B. Versandkosten, werden bereits als komplett ins Grid geladen
|
||||
Exit Do
|
||||
End If
|
||||
|
||||
If Scanned < Total Then
|
||||
IsOrderComplete = False
|
||||
Exit For
|
||||
End If
|
||||
Loop While False: Next
|
||||
End Function
|
||||
@@ -0,0 +1,86 @@
|
||||
' IsOrderLocked(OrderNumber : Int)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Gibt die UserID des Benutzers zurück, der den Auftrag sperrt.
|
||||
' Wenn der Auftrag nicht gesperrt ist, wird 0 zurückgegeben.
|
||||
'
|
||||
' Returns: IsOrderLocked: 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: 26.04.2021 / MP
|
||||
' Version Date / Editor: 26.04.2021 / MP
|
||||
' Version Number: 3.0.0.3
|
||||
|
||||
' Hole die interne Belegnummer
|
||||
' t025.c021 = Kontonummer und t025.c022 = Laufende Nummer
|
||||
Function GetInternalOrderNumber(OrderNumber)
|
||||
GetInternalOrderNumber = ""
|
||||
|
||||
Err.Clear
|
||||
|
||||
If Len(OrderNumber) > 0 Then
|
||||
Set Conn = CWLStart.Connection
|
||||
|
||||
Dim SQL : SQL = ""
|
||||
SQL = SQL & " SELECT TOP 1 c021, c022"
|
||||
SQL = SQL & " FROM t025 (NOLOCK) "
|
||||
SQL = SQL & " WHERE c044 = '"& OrderNumber & "'"
|
||||
SQL = SQL & SQLQuery_OrderWhere
|
||||
SQL = SQL & " ORDER BY c022"
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
MsgBox "Fehler bei SQL-Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - GetInternalOrderNumber"
|
||||
Exit Function
|
||||
Else
|
||||
Message = "Den Auftrag [" & OrderNumber & "] gibt es nicht in der Datenbank"
|
||||
MsgBox Message, vbExclamation, DEFAULT_TITLE
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
GetInternalOrderNumber = result.Value("c021") & result.Value("c022")
|
||||
End If
|
||||
End Function
|
||||
|
||||
Function IsOrderLocked(OrderNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
Err.Clear
|
||||
|
||||
IsOrderLocked = 0
|
||||
InternalOrderNumber = GetInternalOrderNumber(OrderNumber)
|
||||
|
||||
SQL = ""
|
||||
SQL = SQL & " c001 = 'E" & InternalOrderNumber & "' "
|
||||
SQL = SQL & SQLQuery_BasicWhere
|
||||
|
||||
Set Result = CWLStart.CurrentCompany.SearchRecord(TABLE_499, SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
MsgBox "SQL: ... FROM " & TABLE_499 & " WHERE " & SQL, vbOkonly, DEBUG_TITLE
|
||||
|
||||
AddDebugLine "Checking For Order by internal OrderId [" & InternalOrderNumber & "]:"& vbNewline & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result & vbNewline
|
||||
AddDebugLine "Result Rows: " & Result.RowCount & vbNewline
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "IsOrderLocked"
|
||||
End If
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
Msgbox "Fehler bei Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - IsOrderLocked"
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
If Result.RowCount > 0 Then
|
||||
IsOrderLocked = Result.Value("C002")
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,459 @@
|
||||
' LoadOrder(OrderNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Sucht Belegzeilen zur angegebenen Belegnummer
|
||||
' - Filtert Artikel der konf. Artikelgruppe (EXCLUDED_ARTICLEGROUPS) aus
|
||||
' - Lädt Ergebnisse in eine Tabelle auf dem Formular
|
||||
' - Erzeugt N Zeilen für Seriennummer-Artikel der Menge N
|
||||
'
|
||||
' Returns: LoadOrder : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 20.07.2021 / MP
|
||||
' Version Number: 3.0.0.5
|
||||
|
||||
Function GetSQL(OrderNumber)
|
||||
Dim SQL : SQL = ""
|
||||
|
||||
SQL = SQL & " SELECT t2.*, t3.c037 c2137, t3.c079 c2179, t3." & ART_REGEX_FLDBEZ & " c21222"
|
||||
SQL = SQL & " FROM t025 t (NOLOCK)"
|
||||
SQL = SQL & " JOIN t026 t2 (NOLOCK) ON t.c021 = t2.c044 AND t.c022 = t2.c045"
|
||||
SQL = SQL & " LEFT OUTER JOIN v021 t3 (NOLOCK) ON t2.c003 = t3.c002 AND t2.mesoyear = t3.mesoyear"
|
||||
SQL = SQL & " WHERE t.c044 = '"& OrderNumber &"' AND t.c045 IS NULL"
|
||||
SQL = SQL & " AND (t2.c099 = 0)"
|
||||
'SQL = SQL & " AND (t2.c005 - t2.c016) > 0 AND (t2.c099 = 0)" --> wegen späten Ausprägungen brauchen wir alle Zeilen
|
||||
|
||||
' Nach Mandant und Wirtschaftsjahr filtern
|
||||
OrderWhere = SQLQuery_OrderWhere
|
||||
OrderWhere = Replace(OrderWhere, "mesocomp", "t2.mesocomp")
|
||||
OrderWhere = Replace(OrderWhere, "mesoyear", "t2.mesoyear")
|
||||
SQL = SQL & OrderWhere
|
||||
|
||||
' Nach Zeilennummer sortieren
|
||||
SQL = SQL & " ORDER BY t2.c000"
|
||||
|
||||
GetSQL = SQL
|
||||
End Function
|
||||
|
||||
Function GetMacroArticleCount(MacroName)
|
||||
|
||||
Dim CountResult : CountResult = 0
|
||||
|
||||
If Len(MacroName) > 0 Then
|
||||
Set Conn = CWLStart.Connection
|
||||
|
||||
Dim SQL : SQL = ""
|
||||
|
||||
SQL = SQL & " SELECT count(*) c001"
|
||||
SQL = SQL & " FROM t326 (NOLOCK) "
|
||||
SQL = SQL & " WHERE c002 like '"& MacroName &"%'"
|
||||
SQL = SQL & SQLQuery_BasicWhere
|
||||
|
||||
Set Result = Conn.Select(SQL)
|
||||
|
||||
CountResult = result.Value("c001")
|
||||
End If
|
||||
|
||||
GetMacroArticleCount = CountResult
|
||||
End Function
|
||||
|
||||
Function FillOrderArticleData(OrderNumber)
|
||||
Set Conn = CWLStart.Connection
|
||||
Err.Clear
|
||||
|
||||
SQL = GetSQL(OrderNumber)
|
||||
Set Result = Conn.Select(SQL)
|
||||
Set CountResult = Result
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
MsgBox "SQL:" & SQL, vbOkonly, DEBUG_TITLE
|
||||
|
||||
AddDebugLine "Searching For Order by OrderId (Mid Table).." & vbNewline & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result & vbNewline
|
||||
AddDebugLine "Result Rows: " & Result.RowCount & vbNewline
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "LoadOrder"
|
||||
End If
|
||||
|
||||
If Result < 0 Then
|
||||
If err <> 0 Then
|
||||
Msgbox "Fehler bei Abfrage:" & vbNewline & err.description, vbExclamation, DEFAULT_TITLE & " - LoadOrder"
|
||||
Exit Function
|
||||
Else
|
||||
Msgbox "Abfrage lieferte keine Ergebnisse.", vbExclamation, DEFAULT_TITLE & " - LoadOrder"
|
||||
Exit Function
|
||||
End If
|
||||
End If
|
||||
|
||||
' Belegung globaler Variablen für späteren Gebrauch
|
||||
ORDER_ACCOUNT_NUMBER = Result.Value("c044")
|
||||
ORDER_RUNNING_NUMBER = Result.Value("c045")
|
||||
|
||||
' Makro-Gruppenwechsel
|
||||
Dim macroSubArticleCounter : macroSubArticleCounter = 0
|
||||
Dim macroFlagForSNArticles : macroFlagForSNArticles = 0
|
||||
Dim macroName : macroName = ""
|
||||
Dim macroLineNumber : macroLineNumber = 0
|
||||
Dim macroMaxLineNumber : macroMaxLineNumber = 0 ' Größte Zeilennummer eines Macros
|
||||
Dim IsLateShape : IsLateShape = 0
|
||||
|
||||
OrderArrayIndex = 0
|
||||
MacroArrayIndex = 0
|
||||
|
||||
' Doppelte Do Schleife, um ein "Continue While" zu ermöglichen
|
||||
Do: Do
|
||||
macroFlagForSNArticles = 0
|
||||
|
||||
AddTwoDimArrayRow ORDER_ARTICLE_DATA
|
||||
|
||||
ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex) = result.Value("c078")
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex) = result.Value("c003")
|
||||
ORDER_ARTICLE_DATA(INDEX_MAIN_ARTICLE_NUMBER, OrderArrayIndex) = result.Value("c011")
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex) = result.Value("c012")
|
||||
ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex) = result.Value("c042")
|
||||
ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex) = result.Value("c2137")
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_TYPE, OrderArrayIndex) = result.Value("c2179")
|
||||
ORDER_ARTICLE_DATA(INDEX_DESCRIPTION, OrderArrayIndex) = result.Value("c004")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) = result.Value("c005")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex) = result.Value("c016")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_REMAINING, OrderArrayIndex) = result.Value("c099")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_SERIAL_NUMBER, OrderArrayIndex) = ""
|
||||
ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex) = result.Value("c055")
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_SERIAL_NUMBER, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_REGEX, OrderArrayIndex) = result.Value("c21222")
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_LATE_SHAPE, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = False
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_LINE_NUMBER, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_PRICE_VK_EINZEL, OrderArrayIndex) = result.Value("c007")
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_OPEN, OrderArrayIndex) = False
|
||||
|
||||
' Alle Belegzeilen, die schon geliefert wurden, werden von der Restlichen Logik nicht berührt
|
||||
If (ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) - ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex)) <= 0 Then
|
||||
|
||||
' Vorzeitiger Abbruch, trotzdem den Zähler erhöhen
|
||||
OrderArrayIndex = OrderArrayIndex + 1
|
||||
Exit Do
|
||||
Else
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_OPEN, OrderArrayIndex) = True
|
||||
End If
|
||||
|
||||
If (Len(ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex)) > 0) Then
|
||||
' Hier haben wir den Makro-Hauptartikel gefunden
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex) = 1
|
||||
|
||||
AddTwoDimArrayRow MACRO_ARTICLE_LIST
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex) = ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex)
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_NUMBER, MacroArrayIndex) = ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex)
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_DESCRIPTION, MacroArrayIndex) = ORDER_ARTICLE_DATA(INDEX_DESCRIPTION, OrderArrayIndex)
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_REMAINING, MacroArrayIndex) = ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) - ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex)
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex) = 0
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArrayIndex) = True 'Wird umgesetzt, falls unvollständig
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_GRID_LINE_INDEX, MacroArrayIndex) = 0
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_SCAN_FLAG, MacroArrayIndex) = False
|
||||
MacroArrayIndex = MacroArrayIndex + 1
|
||||
|
||||
macroLineNumber = ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex)
|
||||
macroName = ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex)
|
||||
macroSubArticleCounter = GetMacroArticleCount(ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex)) ' Problematisch bei Teillieferungen
|
||||
macroMaxLineNumber = macroLineNumber + macroSubArticleCounter
|
||||
End If
|
||||
|
||||
If (ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex) = 0 And _
|
||||
macroSubArticleCounter > 0 And _
|
||||
ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex) <= macroMaxLineNumber) Then
|
||||
|
||||
' Dies muss ein Sub-Makro-Hauptartikel sein
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex) = 2
|
||||
' Makro Name für Sub-Makro-Artikel speichern
|
||||
ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex) = macroName
|
||||
' Makro Zeilennummer für Sub-Makro-Artikel speichern
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_LINE_NUMBER, OrderArrayIndex) = macroLineNumber
|
||||
|
||||
' Nachfolgende S/N Artikel bekommen das gleiche Flag
|
||||
macroFlagForSNArticles = ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex)
|
||||
|
||||
macroSubArticleCounter = macroSubArticleCounter - 1
|
||||
ElseIf (macroSubArticleCounter = 0 OR _
|
||||
ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex) > macroMaxLineNumber) Then
|
||||
macroLineNumber = 0
|
||||
macroMaxLineNumber = 0
|
||||
End if
|
||||
|
||||
If CheckArticleGroupIsRelevant(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex)) = False Then
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) - ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex)
|
||||
End If
|
||||
|
||||
' Alle Nicht-Artikel (z.B Texte) immer mit Menge 0
|
||||
If ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex) <> 1 Then
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) = 0
|
||||
End If
|
||||
|
||||
' Sichtbar Ja / Nein?
|
||||
If (ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex) = 1 And _
|
||||
ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex) <> 12 And _
|
||||
CheckArticleGroupIsRelevant(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex)) = True) Then
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = True
|
||||
End If
|
||||
|
||||
' Wenn Option Alle Artikel Sichtbar aktiv ist
|
||||
If (OPTION_ALL_ARTICLES > 0 And _
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = False) Then
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = True
|
||||
End If
|
||||
|
||||
If (ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex) = 2) Then
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_SERIAL_NUMBER, OrderArrayIndex) = 1
|
||||
End If
|
||||
|
||||
If (Len(ORDER_ARTICLE_DATA(INDEX_ARTICLE_REGEX, OrderArrayIndex)) > 0) Then
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_LATE_SHAPE, OrderArrayIndex) = 1
|
||||
IsLateShape = 1
|
||||
Else
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_LATE_SHAPE, OrderArrayIndex) = 0
|
||||
IsLateShape = 0
|
||||
End If
|
||||
|
||||
If (Len(Result.Value("c067")) > 0) Then
|
||||
' Belegung hier, weil Text-Artikel keine Belegnummer enthalten
|
||||
ORDER_DOCUMENT_NUMBER = Result.Value("c067")
|
||||
End If
|
||||
|
||||
' Duplikate scanbarer Artikel ermitteln
|
||||
If (ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex) = 1 And _
|
||||
ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex) <> 12 And _
|
||||
CheckArticleGroupIsRelevant(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex)) = True And _
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex) <> 1) Then
|
||||
|
||||
AddArticleNumberToDuplList ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex), _
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex), _
|
||||
ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex)
|
||||
End If
|
||||
|
||||
Dim AmountOrdered, AmountDelivered, ChargeFlag
|
||||
ChargeFlag = CInt(result.Value("c055"))
|
||||
AmountOrdered = CInt(result.Value("c005"))
|
||||
AmountDelivered = CInt(result.Value("c016"))
|
||||
Amount = AmountOrdered - AmountDelivered
|
||||
|
||||
If ChargeFlag = 2 Then
|
||||
|
||||
' Amount wird um 1 reduziert, da für den Artikel bereits
|
||||
' eine Zeile aus der Schleife oben existiert
|
||||
For Index = 1 To Amount - 1
|
||||
|
||||
AddTwoDimArrayRow ORDER_ARTICLE_DATA
|
||||
OrderArrayIndex = OrderArrayIndex + 1
|
||||
|
||||
ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex) = result.Value("c078")
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex) = result.Value("c003")
|
||||
ORDER_ARTICLE_DATA(INDEX_MAIN_ARTICLE_NUMBER, OrderArrayIndex) = result.Value("c011")
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex) = result.Value("c012")
|
||||
ORDER_ARTICLE_DATA(INDEX_DATA_TYPE, OrderArrayIndex) = result.Value("c042")
|
||||
ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex) = macroName
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_TYPE, OrderArrayIndex) = result.Value("c2179")
|
||||
ORDER_ARTICLE_DATA(INDEX_DESCRIPTION, OrderArrayIndex) = result.Value("c004")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex) = result.Value("c005")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex) = result.Value("c016")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_REMAINING, OrderArrayIndex) = result.Value("c099")
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = 0
|
||||
ORDER_ARTICLE_DATA(INDEX_SERIAL_NUMBER, OrderArrayIndex) = ""
|
||||
ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex) = result.Value("c055")
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_SERIAL_NUMBER, OrderArrayIndex) = 1
|
||||
ORDER_ARTICLE_DATA(INDEX_ARTICLE_REGEX, OrderArrayIndex) = result.Value("c21222")
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_LATE_SHAPE, OrderArrayIndex) = IsLateShape
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = True
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex) = macroFlagForSNArticles
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_LINE_NUMBER, OrderArrayIndex) = macroLineNumber
|
||||
ORDER_ARTICLE_DATA(INDEX_PRICE_VK_EINZEL, OrderArrayIndex) = result.Value("c007")
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_OPEN, OrderArrayIndex) = True
|
||||
|
||||
' Wir benötigen die korrekte Anzahl der Zeilen eines Artikels
|
||||
AddArticleNumberToDuplList ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex), _
|
||||
ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex), _
|
||||
ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex)
|
||||
Next
|
||||
End If
|
||||
|
||||
OrderArrayIndex = OrderArrayIndex + 1
|
||||
|
||||
' Doppelte Do Schleife, um ein "Continue While" zu ermöglichen
|
||||
Loop While False: Loop While Result.NextRecord = True
|
||||
|
||||
' Enthält die Anzahl der Macro-Hauptartikel
|
||||
MACRO_ARTICLE_COUNTER = MacroArrayIndex
|
||||
|
||||
FillOrderArticleData = OrderArrayIndex
|
||||
End Function
|
||||
|
||||
Function LoadOrder(OrderNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
ASK_FOR_DELNOTE = False
|
||||
|
||||
If (FillOrderArticleData(OrderNumber) <= 0) Then
|
||||
LoadOrder = False
|
||||
Exit Function
|
||||
ElseIf (ExistVisibleRows() = False) Then
|
||||
' Es gibt keine sichtbaren Zeilen, d.h. es gibt auch nix zu scannen.
|
||||
' Da aber ein Lieferschein erzeugt werden kann, zeigen wir jetzt alles an,
|
||||
' und fragen nach dem Laden ob der letzte LS direkt erstellt werden soll
|
||||
ShowAllArticles()
|
||||
ASK_FOR_DELNOTE = True
|
||||
End If
|
||||
|
||||
Grid.InitUserGrid
|
||||
Grid.Header
|
||||
Grid.Clear(1002)
|
||||
Grid.IsRedraw = False
|
||||
|
||||
' Zähler für Grid
|
||||
' Wird immer hoch gezählt bei Grid.AddLine
|
||||
GridLineCounter = 1
|
||||
|
||||
' Zähler für Datenstruktur
|
||||
' Wird in JEDEM Durchlauf hochgezählt
|
||||
OrderArrayIndex = 0
|
||||
|
||||
Do
|
||||
' Speicher für benutzerdefinierte Felder im Grid
|
||||
' (495,0) - Menge Gesamt
|
||||
' (495,1) - Menge Gescannt
|
||||
' (495,2) - Seriennummer
|
||||
' (495,3) - Artikelnummer
|
||||
' (495,4) - Bezeichnung
|
||||
' (495,5) - Seriennummer Ja/Nein
|
||||
' (495,6) - Spät Ausprägung Ja/Nein
|
||||
' (495,7) - Interne Zeilennumemr
|
||||
|
||||
Dim AmountOrdered, AmountDelivered
|
||||
AmountOrdered = Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex))
|
||||
AmountDelivered = Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex))
|
||||
ProductGroup = Cint(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex))
|
||||
Amount = AmountOrdered - AmountDelivered
|
||||
SalesMacro = ORDER_ARTICLE_DATA(INDEX_SALES_MACRO, OrderArrayIndex)
|
||||
ArticleType = ORDER_ARTICLE_DATA(INDEX_ARTICLE_TYPE, OrderArrayIndex)
|
||||
ChargeFlag = Cint(ORDER_ARTICLE_DATA(INDEX_CHARGE_FLAG, OrderArrayIndex))
|
||||
IsLateShape = Cint(ORDER_ARTICLE_DATA(INDEX_IS_LATE_SHAPE, OrderArrayIndex))
|
||||
ArticleNumber = ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex)
|
||||
Description = ORDER_ARTICLE_DATA(INDEX_DESCRIPTION, OrderArrayIndex)
|
||||
IsVisible = ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex)
|
||||
LineNumber = CInt(ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex))
|
||||
IsSerialNumber = CInt(ORDER_ARTICLE_DATA(INDEX_IS_SERIAL_NUMBER, OrderArrayIndex))
|
||||
MacroFlag = CInt(ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex))
|
||||
MacroLineNumber = CInt(ORDER_ARTICLE_DATA(INDEX_MACRO_LINE_NUMBER, OrderArrayIndex))
|
||||
|
||||
If (IsVisible = True) Then
|
||||
|
||||
If ChargeFlag = 2 Then
|
||||
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,0) = 1
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,1) = 0
|
||||
ResetableFlag = 1
|
||||
|
||||
If MacroFlag = 2 Then
|
||||
LineColor = COLOR_PACKAGE_RED
|
||||
|
||||
AddMacroLineNumberTokensToDuplicateArticles ArticleNumber, MacroLineNumber
|
||||
Else
|
||||
LineColor = COLOR_RED
|
||||
End If
|
||||
|
||||
' GridLine Index der Duplikate-Struktur hinzufügen
|
||||
AddGridLineIndexToDuplicateArticles ArticleNumber, GridLineCounter
|
||||
|
||||
ElseIf (CheckArticleGroupIsRelevant(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex)) = False) OR AmountOrdered = 0 Then
|
||||
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,0) = Amount
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,1) = Amount
|
||||
|
||||
ResetableFlag = 0
|
||||
|
||||
If MacroFlag = 2 Then
|
||||
LineColor = COLOR_PACKAGE_GREEN
|
||||
Else
|
||||
LineColor = COLOR_GREEN
|
||||
End If
|
||||
|
||||
ElseIf MacroFlag = 1 Then
|
||||
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,0) = Amount
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,1) = 0
|
||||
ResetableFlag = 0
|
||||
LineColor = COLOR_BLUE
|
||||
|
||||
Else
|
||||
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,0) = Amount
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,1) = 0
|
||||
ResetableFlag = 1
|
||||
|
||||
If MacroFlag = 2 Then
|
||||
LineColor = COLOR_PACKAGE_RED
|
||||
|
||||
AddMacroLineNumberTokensToDuplicateArticles ArticleNumber, MacroLineNumber
|
||||
Else
|
||||
LineColor = COLOR_RED
|
||||
End If
|
||||
|
||||
' GridLine Index der Duplikate-Struktur hinzufügen
|
||||
AddGridLineIndexToDuplicateArticles ArticleNumber, GridLineCounter
|
||||
|
||||
End If
|
||||
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,2) = ""
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,3) = ArticleNumber
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,4) = Description
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,5) = IsSerialNumber
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,6) = IsLateShape
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,7) = LineNumber
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,8) = GridLineCounter
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,9) = ResetableFlag
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,10) = MacroFlag
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(495,11) = MacroLineNumber
|
||||
|
||||
' Neue Grid-Zeile schreiben
|
||||
Grid.AddLine
|
||||
|
||||
' Zeilenfarbe mit ROT vorbelegen
|
||||
Grid.SetLineColor GridLineCounter, LineColor
|
||||
|
||||
GridLineCounter = GridLineCounter + 1
|
||||
End If
|
||||
|
||||
OrderArrayIndex = OrderArrayIndex + 1
|
||||
Loop While OrderArrayIndex < (UBound(ORDER_ARTICLE_DATA, 2) + 1)
|
||||
|
||||
LoadOrder = True
|
||||
Grid.IsRedraw = True
|
||||
End Function
|
||||
|
||||
|
||||
' Schaltet alle nicht sichtbaren Felder auf sichtbar um
|
||||
Sub ShowAllArticles
|
||||
For OrderArrayIndex = 0 to UBound(ORDER_ARTICLE_DATA, 2)
|
||||
If (ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = False And ORDER_ARTICLE_DATA(INDEX_IS_OPEN, OrderArrayIndex) = True) Then
|
||||
ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = True
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
' Gibt True zurück, wenn es min. 1 sichtbare Zeile gibt
|
||||
Function ExistVisibleRows
|
||||
ExistVisibleRows = False
|
||||
|
||||
For OrderArrayIndex = 0 to UBound(ORDER_ARTICLE_DATA, 2)
|
||||
If (ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = True) Then
|
||||
ExistVisibleRows = True
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
|
||||
End Function
|
||||
@@ -0,0 +1,112 @@
|
||||
' ResetValuesByLineIndex(LineIndex : INT)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Setzt die Werte in einer bestimmten Zeile auf ihre
|
||||
' Ausgangswerte zurück.
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 15.03.2021 / MP
|
||||
' Version Date / Editor: 15.03.2021 / MP
|
||||
' Version Number: 3.0.0.1
|
||||
|
||||
Sub ResetValues(GridLineIndexToReset)
|
||||
Set myWin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = myWin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount
|
||||
If GridIndex = GridLineIndexToReset Then
|
||||
Grid.SetCellValue GridIndex, COLUMN_SCANNED, 0
|
||||
Grid.SetCellValue GridIndex, COLUMN_SERIALNUMBER, ""
|
||||
|
||||
If (Grid.GetCellValue(GridIndex, COLUMN_MACRO_FLAG) = 2) Then
|
||||
Grid.SetLineColor GridIndex, COLOR_PACKAGE_RED
|
||||
Else
|
||||
Grid.SetLineColor GridIndex, COLOR_RED
|
||||
End If
|
||||
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Sub ResetValuesByMacroLineNumber(MacroArticleLineNumber)
|
||||
Set myWin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = myWin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount
|
||||
|
||||
MacroLineNumber = Cint(Grid.GetCellValue(GridIndex, COLUMN_MACRO_LINE_NUMBER))
|
||||
|
||||
If MacroLineNumber = MacroArticleLineNumber Then
|
||||
Grid.SetCellValue GridIndex, COLUMN_SCANNED, 0
|
||||
Grid.SetCellValue GridIndex, COLUMN_SERIALNUMBER, ""
|
||||
Grid.SetLineColor GridIndex, COLOR_PACKAGE_RED
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Sub ResetValuesByLineIndex(LineIndex)
|
||||
Set myWin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = myWin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
If (Grid.LineCount <= 0) Then
|
||||
MsgBox "Bitte scannen Sie zuerst eine Auftragsnummer!", vbOKOnly + vbInformation, DEFAULT_TITLE
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim LineIndexToReset : LineIndexToReset = 0
|
||||
|
||||
If (LineIndex = -1) Then
|
||||
InputBoxHeaderText = "Zeile zurücksetzen"
|
||||
|
||||
If (Grid.LineCount = 1) Then
|
||||
InputBoxText = "Zeilennummer:"
|
||||
InputBoxDefault = "1"
|
||||
Else
|
||||
InputBoxText = "Zeilennummer (Zeile [1 - " & Grid.LineCount & "]):"
|
||||
InputBoxDefault = "0"
|
||||
End If
|
||||
|
||||
LineIndexInputBox = InputBox(InputBoxText, InputBoxHeaderText, InputBoxDefault)
|
||||
|
||||
Select Case True
|
||||
Case IsEmpty(LineIndexInputBox)
|
||||
' Abbruch der Box
|
||||
Exit Sub
|
||||
Case "" = Trim(LineIndexInputBox)
|
||||
' Kein Wert eingegeben = Abbruch
|
||||
Exit Sub
|
||||
Case Else
|
||||
' Wert eingegeben und OK geklickt
|
||||
If Len(LineIndexInputBox) > 0 Then
|
||||
LineIndexToReset = Cint(LineIndexInputBox)
|
||||
Else
|
||||
LineIndexToReset = 0
|
||||
End If
|
||||
End Select
|
||||
Else
|
||||
LineIndexToReset = LineIndex
|
||||
End If
|
||||
|
||||
If (LineIndexToReset <= 0 OR LineIndexToReset > Grid.LineCount) Then
|
||||
MsgBox "Keine gültige Zeile ausgewählt!", vbOKOnly + vbInformation, DEFAULT_TITLE
|
||||
|
||||
ElseIf (Grid.GetCellValue(LineIndexToReset, COLUMN_RESETABLE_FLAG) = 0) Then
|
||||
MsgBox "Die Zeile [" & LineIndexToReset & "] ist nicht änderbar!", vbOKOnly + vbInformation, DEFAULT_TITLE
|
||||
|
||||
ElseIf (LineIndexToReset > 0 And LineIndexToReset <= Grid.LineCount) Then
|
||||
Answer = MsgBox("Sollen die Werte in Zeile [" & LineIndexToReset & "] zurückgesetzt werden?", vbYesno + vbQuestion, DEFAULT_TITLE)
|
||||
If Answer = vbYes Then
|
||||
ResetValues LineIndexToReset
|
||||
CURRENT_GRID_LINE_INDEX = 0
|
||||
End If
|
||||
Else
|
||||
MsgBox "Diese Zeilennummer gibt es nicht!"
|
||||
End If
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,30 @@
|
||||
' SerialNumberExists(SerialNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Prüft, ob die übergebene Seriennummer bereits gescannt wurde
|
||||
'
|
||||
' Returns: SerialNumberExists : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 25.09.2020 / JJ
|
||||
' Version Date / Editor: 25.09.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function SerialNumberExists(SerialNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
SerialNumberExists = False
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount
|
||||
CurrentSerialNumber = Grid.GetCellValue(GridIndex, COLUMN_SERIALNUMBER)
|
||||
|
||||
If SerialNumber = CurrentSerialNumber Then
|
||||
SerialNumberExists = True
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
End Function
|
||||
@@ -0,0 +1,27 @@
|
||||
' SetAmount(Amount: Integer)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Setzt eingegebene Menge in das Mengenfeld ein
|
||||
' - Überschreibt Menge beim ersten Eintrag, danach
|
||||
' wird die Zahl angehängt
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 25.09.2020 / JJ
|
||||
' Version Date / Editor: 25.09.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub SetAmount(Amount)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set amountBox = mywin.Controls.Item(AMOUNT_INPUT)
|
||||
|
||||
If amountBox.Contents = AMOUNT_PLACEHOLDER Then
|
||||
amountBox.Contents = Cstr(Amount)
|
||||
Else
|
||||
amountBox.Contents = amountBox.Contents & Cstr(Amount)
|
||||
End If
|
||||
End Sub
|
||||
@@ -0,0 +1,32 @@
|
||||
' SetDebugMode()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Zeigt je nach DEBUG-Mode die nicht sichtbaren Spalten
|
||||
' im Grid an oder nicht, je nach DEBUG_ON-Einstellung.
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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.04.2021 / MP
|
||||
' Version Date / Editor: 01.04.2021 / MP
|
||||
' Version Number: 3.0.0.2
|
||||
|
||||
Sub SetDebugMode()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
' Unsichtbare Spalten anzeigen im DEBUG-Modus
|
||||
Dim invisibleColWidth : invisibleColWidth = 0
|
||||
If DEBUG_ON = True Then
|
||||
invisibleColWidth = 5
|
||||
End If
|
||||
|
||||
Grid.SetColumnWidth COLUMN_LINE_NUMBER, invisibleColWidth
|
||||
Grid.SetColumnWidth COLUMN_RESETABLE_FLAG, invisibleColWidth
|
||||
Grid.SetColumnWidth COLUMN_MACRO_FLAG, invisibleColWidth
|
||||
Grid.SetColumnWidth COLUMN_MACRO_LINE_NUMBER, invisibleColWidth
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,87 @@
|
||||
' SetupWindow()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Definiert die Spalten des Grids und initialisiert Felder
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 30.03.2021 / MP
|
||||
' Version Number: 3.0.0.1
|
||||
|
||||
Sub SetupWindow()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
' Speicher für benutzerdefinierte Felder
|
||||
' (495,0) - Menge Gesamt
|
||||
' (495,1) - Menge Gescannt
|
||||
' (495,2) - Seriennummer
|
||||
' (495,3) - Artikelnummer
|
||||
' (495,4) - Bezeichnung
|
||||
' (495,5) - Chargen-/Identflag
|
||||
' (495,6) - Spät ausgeprägt bzw. Regex vorhanden
|
||||
' (495,7) - Interne Zeilennummer aus Auftrag
|
||||
' (495,8) - Sichtbare Zeilennummer im Grid
|
||||
' (495,9) - Zeile darf resettet werden (J/N)
|
||||
' (495,10) - Makro Flag (0 - Default / 1 = Macro-Artikel / 2 = Sub-Macro-Artikel)
|
||||
' (495,11) - Makro Index, Zeilennummer des übergeordneten Makro-Artikels
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 0, "2", 10
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 1, "2", 10
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 2, "1", 20
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 3, "1", 20
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 4, "1", 60
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 5, "2", 3
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 6, "2", 3
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 7, "2", 3
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 8, "2", 4
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 9, "2", 3
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 10, "2", 3
|
||||
CWLCurrentWindow.ActiveWindow.Vars.CreateVar 495, 11, "2", 3
|
||||
|
||||
Grid.InitUserGrid
|
||||
Grid.IsRedraw = False
|
||||
Grid.Header
|
||||
|
||||
If COLUMNS_CREATED = False Then
|
||||
COLUMN_GRID_LINE_INDEX = Grid.AddColumn("#", "T22,Zeilenindex", "z", "V", 0, 495, 8, 4, sizeflag+hideflag)
|
||||
COLUMN_ARTICLENUMBER = Grid.AddColumn("Artikelnummer", "T21,Artikelnummer", "l", "V", 0, 495, 3, 15, sizeflag+hideflag)
|
||||
COLUMN_DESCRIPTION = Grid.AddColumn("Bezeichnung", "T21,Bezeichnung", "l", "V", 0, 495, 4, 37, sizeflag+hideflag)
|
||||
COLUMN_TOTAL = Grid.AddColumn("Gesamt", "T22,Gesamt", "z", "V", 0, 495, 0, 10, sizeflag+hideflag)
|
||||
COLUMN_SCANNED = Grid.AddColumn("Gescannt", "T22,Gescannt", "z", "V", 0, 495, 1, 10, sizeflag+hideflag)
|
||||
COLUMN_SERIALNUMBER = Grid.AddColumn("Seriennummer", "T21,Seriennummer", "l", "V", 0, 495, 2, 20, sizeflag+hideflag)
|
||||
COLUMN_CHARGE_FLAG = Grid.AddColumn("S/N?", "T17,Seriennummer", "l", "V", 0, 495, 5, 6, sizeflag+hideflag)
|
||||
COLUMN_LATE_SHAPE = Grid.AddColumn("Auspr?", "T17,Spaetausgepr.", "l", "V", 0, 495, 6, 6, sizeflag+hideflag)
|
||||
COLUMN_LINE_NUMBER = Grid.AddColumn("LN", "T22,Zeilennummer", "r", "V", 0, 495, 7, 0, 0) ' nicht sichtbar
|
||||
COLUMN_RESETABLE_FLAG = Grid.AddColumn("RF", "T22,ResetableFlag", "r", "V", 0, 495, 9, 0, 0) ' nicht sichtbar
|
||||
COLUMN_MACRO_FLAG = Grid.AddColumn("MF", "T22,MacroFlag", "r", "V", 0, 495, 10, 0, 0) ' nicht sichtbar
|
||||
COLUMN_MACRO_LINE_NUMBER = Grid.AddColumn("MLN", "T22,MacroZeilenr", "r", "V", 0, 495, 11, 0, 0) ' nicht sichtbar
|
||||
COLUMNS_CREATED = True
|
||||
End If
|
||||
|
||||
Grid.IsRedraw = True
|
||||
|
||||
Set amountBox = mywin.Controls.Item(AMOUNT_INPUT)
|
||||
amountBox.Contents = AMOUNT_PLACEHOLDER
|
||||
|
||||
Set articleBox = mywin.Controls.Item(ARTICLE_INPUT)
|
||||
articleBox.Contents = ""
|
||||
|
||||
' Merker für Resetbutton
|
||||
CURRENT_GRID_LINE_INDEX = 0
|
||||
PRINT_DOCUMENT_AFTER_COMPLETION = True
|
||||
|
||||
SetLabelText TEXT_CONFIG_INFO, 495, 71, ""
|
||||
|
||||
' Arrays reinitialisieren
|
||||
Redim ORDER_ARTICLE_DATA(MAX_ORDER_COLUMN_COUNT, -1)
|
||||
Redim MACRO_ARTICLE_LIST(MAX_MACRO_COLUMN_COUNT, -1)
|
||||
Redim DUPL_ARTICLE_LIST(MAX_DUPL_COLUMN_COUNT, -1)
|
||||
|
||||
MacroCommands.MSetFieldFocus WINDOW_ID, ORDER_INPUT
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,62 @@
|
||||
' TestArticleHasSerialNumberRegex(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: TestArticleHasSerialNumberRegex : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 25.09.2020 / JJ
|
||||
' Version Date / Editor: 20.07.2021 / MP
|
||||
' Version Number: 3.0.0.5
|
||||
|
||||
Function TestArticleHasSerialNumberRegex(Identifier)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Testing for Regex in Identifier: " & Identifier
|
||||
|
||||
ShowDebugBox "TestArticleHasSerialNumberRegex"
|
||||
End If
|
||||
|
||||
SQL = ""
|
||||
' Artikelnummer / EAN-Code / Alternative Artikelnummer
|
||||
SQL = SQL & "((C002 = '" & Identifier & "') Or (C075 = '" & Identifier & "') Or (C114 = '" & Identifier & "')) AND "
|
||||
' Serienummer-Regex (Default: C222) muss vorhanden sein
|
||||
SQL = SQL & "(" & ART_REGEX_FLDBEZ & " IS NOT NULL) AND "
|
||||
' Artikel darf nicht inaktiv sein
|
||||
SQL = SQL & "(c038 IS NULL) "
|
||||
' Nach Mandant und Wirtschaftsjahr filtern
|
||||
SQL = SQL & SQLQuery_BasicWhere
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "TestArticleHasSerialNumberRegex"
|
||||
End If
|
||||
|
||||
Set Result = CWLStart.CurrentCompany.SearchRecord(TABLE_21, SQL)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Searching for SerialNumber-Regex by ArticleNumber " & vbNewline
|
||||
AddDebugLine "Result Columns: " & Result
|
||||
AddDebugLine "Result Rows: " & Result.RowCount
|
||||
AddDebugLine "SQL: " & SQL
|
||||
|
||||
ShowDebugBox "TestArticleHasSerialNumberRegex"
|
||||
End If
|
||||
|
||||
If Result.RowCount > 0 Then
|
||||
TestArticleHasSerialNumberRegex = True
|
||||
Else
|
||||
TestArticleHasSerialNumberRegex = False
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
' TestHasFreeArticleRow(ArticleNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Sucht die nächste freie Zeile für eine gescannte Seriennummer
|
||||
'
|
||||
' Returns: TestHasFreeArticleRow : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 25.09.2020 / JJ
|
||||
' Version Date / Editor: 25.09.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function TestHasFreeArticleRow(ArticleNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
Dim NextFreeRow : NextFreeRow = False
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Getting next free row for Article: " & ArticleNumber
|
||||
ShowDebugBox "TestHasFreeArticleRow"
|
||||
End If
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount
|
||||
CurrentArticleNumber = Grid.GetCellValue(GridIndex, COLUMN_ARTICLENUMBER)
|
||||
CurrentSerialNumber = Grid.GetCellValue(GridIndex, COLUMN_SERIALNUMBER)
|
||||
|
||||
If UCase(ArticleNumber) = UCase(CurrentArticleNumber) And Len(CurrentSerialNumber) = 0 Then
|
||||
NextFreeRow = True
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
|
||||
TestHasFreeArticleRow = NextFreeRow
|
||||
End Function
|
||||
@@ -0,0 +1,43 @@
|
||||
' TestIsWebserviceResponseSuccessful(XmlString : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Prüft, ob im WebService Result, ein Success enthalten ist
|
||||
'
|
||||
' Returns: TestIsWebserviceResponseSuccessful : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 23.10.2020 / JJ
|
||||
' Version Date / Editor: 23.10.2020 / JJ
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function TestIsWebserviceResponseSuccessful(XmlString)
|
||||
' Check if XmlString is actually a xml string
|
||||
If InStr(XmlString, "<?xml") = 1 Then
|
||||
Set Doc = CreateObject("MSXML2.DOMDocument")
|
||||
Doc.loadXML(XmlString)
|
||||
|
||||
Set Nodes = Doc.SelectNodes("MESOWebServiceResult/ResultDetails")
|
||||
Set OverallSuccess = Doc.SelectSingleNode("MESOWebServiceResult/OverallSuccess")
|
||||
|
||||
If OverallSuccess.Text = "true" Then
|
||||
Dim IsSuccess : IsSuccess = True
|
||||
|
||||
For Each Node in Nodes
|
||||
Set Success = Node.SelectSingleNode("Success")
|
||||
|
||||
If Success.Text <> "true" Then
|
||||
IsSuccess = False
|
||||
End If
|
||||
Next
|
||||
|
||||
TestIsWebserviceResponseSuccessful = IsSuccess
|
||||
Else
|
||||
TestIsWebserviceResponseSuccessful = False
|
||||
End If
|
||||
Else
|
||||
TestIsWebserviceResponseSuccessful = False
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,65 @@
|
||||
' TransferGridData()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Überführt die Gescannten Daten aus dem Grid in die Datenstruktur
|
||||
'
|
||||
' Returns: TransferGridData: Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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.2021 / JJ
|
||||
' Version Date / Editor: 25.03.2021 / MP
|
||||
' Version Number: 3.0.0.1
|
||||
|
||||
Function TransferGridData()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount: Do
|
||||
Total = Cint(Grid.GetCellValue(GridIndex, COLUMN_TOTAL))
|
||||
Scanned = Cint(Grid.GetCellValue(GridIndex, COLUMN_SCANNED))
|
||||
ChargeFlag = Cint(Grid.GetCellValue(GridIndex, COLUMN_CHARGE_FLAG)) ' Checkbox-Werte = 0 oder 1
|
||||
' Zeilennummer aus Auftrag
|
||||
LineNumber = Cint(Grid.GetCellValue(GridIndex, COLUMN_LINE_NUMBER))
|
||||
SerialNumber = Grid.GetCellValue(GridIndex, COLUMN_SERIALNUMBER)
|
||||
MacroFlag = Grid.GetCellValue(GridIndex, COLUMN_MACRO_FLAG)
|
||||
|
||||
If Scanned = 0 Then
|
||||
Exit Do
|
||||
End If
|
||||
|
||||
For OrderArrayIndex = 0 To Ubound(ORDER_ARTICLE_DATA, 2)
|
||||
If ORDER_ARTICLE_DATA(INDEX_IS_VISIBLE, OrderArrayIndex) = True Then
|
||||
If ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex) = LineNumber Then
|
||||
|
||||
If MacroFlag = 1 Then
|
||||
For MacroArrayIndex = 0 To UBound(MACRO_ARTICLE_LIST)
|
||||
If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex) = LineNumber) Then
|
||||
If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_COMPLETE, MacroArrayIndex) = True) Then
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_REMAINING, MacroArrayIndex)
|
||||
Else
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex)
|
||||
End If
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
|
||||
ElseIf ChargeFlag = 1 And Len(ORDER_ARTICLE_DATA(INDEX_SERIAL_NUMBER, OrderArrayIndex)) = 0 Then
|
||||
ORDER_ARTICLE_DATA(INDEX_SERIAL_NUMBER, OrderArrayIndex) = SerialNumber
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = Scanned
|
||||
|
||||
Exit For
|
||||
ElseIf ChargeFlag = 0 Then
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = Scanned
|
||||
|
||||
Exit For
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
Loop While False: Next
|
||||
|
||||
TransferGridData = True
|
||||
End Function
|
||||
@@ -0,0 +1,42 @@
|
||||
' TransferMacroData()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Überführt die Daten aus dem Macro-Array zurück ins Grid
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 08.03.2021 / MP
|
||||
' Version Date / Editor: 08.03.2021 / MP
|
||||
' Version Number: 3.0.0.0
|
||||
|
||||
Sub TransferMacroData()
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
|
||||
For GridIndex = 1 To Grid.LineCount: Do
|
||||
MacroFlag = Cint(Grid.GetCellValue(GridIndex, COLUMN_MACRO_FLAG))
|
||||
|
||||
If MacroFlag = 1 Then
|
||||
LineNumber = Cint(Grid.GetCellValue(GridIndex, COLUMN_LINE_NUMBER))
|
||||
|
||||
For MacroArrayIndex = 0 To UBound(MACRO_ARTICLE_LIST, 2)
|
||||
' Wenn die Menge in COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED > 0 ist,
|
||||
' dann muss dieser Wert ins Grid zurück geschrieben werden.
|
||||
If (MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex) = LineNumber) And _
|
||||
(MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex) > 0) Then
|
||||
Grid.SetCellValue GridIndex, COLUMN_SCANNED, MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_AMOUNT_COMPLETED, MacroArrayIndex)
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
Else
|
||||
' Continue
|
||||
Exit Do
|
||||
End If
|
||||
|
||||
Loop While False: Next
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,97 @@
|
||||
' UpdateArticleRow(RowNumber: Integer)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Trägt die gescannte Menge eines Artikel in das Grid ein
|
||||
' - Ändert die Farbe, abhängig von Gesamtmenge und Gescannte Menge
|
||||
' - Überprüft, ob der Artikel in der Gescannten Menge auf Lager liegt
|
||||
'
|
||||
' Returns: UpdateArticleRow : Boolean
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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.2021 / JJ
|
||||
' Version Date / Editor: 25.03.2021 / MP
|
||||
' Version Number: 3.0.0.1
|
||||
|
||||
' Aktualisiert den Wert COLUMN_MACRO_ARTICLE_SCAN_FLAG für den aktuellen
|
||||
' MacroIndex
|
||||
Sub UpdateMacroArticleRow(MacroArticleLineNumber)
|
||||
For MacroArrayIndex = 0 To UBound(MACRO_ARTICLE_LIST): Do
|
||||
If MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_LINE_NUMBER, MacroArrayIndex) = MacroArticleLineNumber Then
|
||||
MACRO_ARTICLE_LIST(COLUMN_MACRO_ARTICLE_SCAN_FLAG, MacroArrayIndex) = True
|
||||
Exit For
|
||||
End If
|
||||
Loop While False: Next
|
||||
End Sub
|
||||
|
||||
Function UpdateArticleRow(RowNumber)
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set Grid = mywin.Controls.Item(GRID_ID).Grid
|
||||
Set amountBox = mywin.Controls.Item(AMOUNT_INPUT)
|
||||
|
||||
' Bereits gescannte, Gesamt und Anzahl zu Scannen auslesen
|
||||
ArticleNumber = Grid.GetCellValue(RowNumber, COLUMN_ARTICLENUMBER)
|
||||
Total = Cint(Grid.GetCellValue(RowNumber, COLUMN_TOTAL))
|
||||
Scanned = Cint(Grid.GetCellValue(RowNumber, COLUMN_SCANNED))
|
||||
ScannedAmount = Cint(amountBox.Contents)
|
||||
MacroFlag = Cint(Grid.GetCellValue(RowNumber, COLUMN_MACRO_FLAG))
|
||||
MacroArticleLineNumber = Cint(Grid.GetCellValue(RowNumber, COLUMN_MACRO_LINE_NUMBER))
|
||||
|
||||
' Standard Rückgabewert setzen
|
||||
UpdateArticleRow = True
|
||||
|
||||
' Aktuellen Lagerstand abfragen
|
||||
StockedAmount = GetWinLineStockedAmount(ArticleNumber, False)
|
||||
|
||||
' Neue bereits gescannte berechnen
|
||||
NewScanned = Scanned + ScannedAmount
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Total " & Total
|
||||
AddDebugLine "Scanned: " & Scanned
|
||||
AddDebugLine "NewScanned: " & NewScanned
|
||||
AddDebugLine "StockedAmount: " & StockedAmount
|
||||
|
||||
ShowDebugBox "UpdateArticleRow"
|
||||
End If
|
||||
|
||||
' Zeilenfarbe anpassen:
|
||||
' GRÜN: Komplett gescannt
|
||||
' GELB: Teilweise gescannt
|
||||
If NewScanned > StockedAmount Then
|
||||
Message = ""
|
||||
Message = Message & "Der Artikel ist nur in der Menge " & StockedAmount & " vorhanden." & vbNewline
|
||||
Message = Message & "Der Scan wird abgebrochen!"
|
||||
Msgbox Message, vbExclamation, DEFAULT_TITLE
|
||||
|
||||
Elseif NewScanned = Total Then
|
||||
If MacroFlag = 2 Then
|
||||
Grid.SetLineColor RowNumber, COLOR_PACKAGE_GREEN
|
||||
UpdateMacroArticleRow(MacroArticleLineNumber)
|
||||
ReduceSubMacroCounterInDuplList ArticleNumber, MacroArticleLineNumber
|
||||
Else
|
||||
Grid.SetLineColor RowNumber, COLOR_GREEN
|
||||
End If
|
||||
Grid.SetCellValue RowNumber, COLUMN_SCANNED, NewScanned
|
||||
|
||||
ReduceCounterInDuplList ArticleNumber, MacroFlag
|
||||
|
||||
Elseif NewScanned < Total Then
|
||||
If MacroFlag = 2 Then
|
||||
Grid.SetLineColor RowNumber, COLOR_PACKAGE_YELLOW
|
||||
UpdateMacroArticleRow(MacroArticleLineNumber)
|
||||
Else
|
||||
Grid.SetLineColor RowNumber, COLOR_YELLOW
|
||||
End If
|
||||
Grid.SetCellValue RowNumber, COLUMN_SCANNED, NewScanned
|
||||
Else
|
||||
Message = ""
|
||||
Message = Message & "Die eingegebene Menge überschreitet die Gesamtanzahl oder" & vbNewline
|
||||
Message = Message & "der Artikel wurde bereits vollständig gescannt!"
|
||||
Msgbox Message, vbExclamation, DEFAULT_TITLE
|
||||
|
||||
UpdateArticleRow = False
|
||||
End If
|
||||
End Function
|
||||
@@ -0,0 +1,51 @@
|
||||
' UpdateDeliveryNote(OrderNumber: String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Füllt zusätzliche Felder in der Tabelle t025 (Belegkopf)
|
||||
' - User ID (FLD_BENUTZERNUMMER_PACKTISCH)
|
||||
' - Datum und Uhrzeit der LS-Erzeugung (FLD_ERSTELLDATUM_PACKTISCH)
|
||||
' - Name des Computers an dem der Packtisch läuft (FLD_COMPUTERNAME_PACKTISCH)
|
||||
' - Packtischversion (FLD_VERSION_PACKTISCH)
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 26.04.2021 / MP
|
||||
' Version Date / Editor: 23.06.2021 / MP
|
||||
' Version Number: 3.0.0.4
|
||||
|
||||
Sub UpdateDeliveryNote(OrderNumber)
|
||||
Err.Clear
|
||||
|
||||
If USE_ADDITIONAL_DBFIELDS = False Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
Dim SQL : SQL = ""
|
||||
Dim NowObject : NowObject = Now
|
||||
Dim UserNumber : UserNumber = CWLStart.CurrentUser.Number
|
||||
Dim DateString : DateString = Year(NowObject) & "-" & GetLeftPad(Month(NowObject)) & "-" & GetLeftPad(Day(NowObject))
|
||||
Dim TimeString : TimeString = GetLeftPad(Hour(NowObject)) & ":" & GetLeftPad(Minute(NowObject)) & ":" & GetLeftPad(Second(NowObject))
|
||||
Dim ComputerName : ComputerName = GetWindowsEnvironment("COMPUTERNAME")
|
||||
|
||||
SQL = SQL & " UPDATE t025 SET "
|
||||
SQL = SQL & FLD_BENUTZERNUMMER_PACKTISCH & " = " & UserNumber & ", "
|
||||
SQL = SQL & FLD_ERSTELLDATUM_PACKTISCH & " = '" & DateString & " " & TimeString & "', "
|
||||
SQL = SQL & FLD_COMPUTERNAME_PACKTISCH & " = '" & ComputerName & "', "
|
||||
SQL = SQL & FLD_VERSION_PACKTISCH & " = '" & PACKTISCH_VERSION & "' "
|
||||
SQL = SQL & " WHERE c000 = (SELECT TOP 1 c000 FROM t025 WHERE c029 IS NOT NULL AND c044 = '" & OrderNumber & "' " & SQLQuery_OrderWhere & " ORDER BY ts DESC) " & SQLQuery_OrderWhere
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "SQL: " & SQL
|
||||
ShowDebugBox "UpdateDeliveryNote"
|
||||
End If
|
||||
|
||||
CWLStart.Connection.ExecuteSQL(SQL)
|
||||
|
||||
If err <> 0 Then
|
||||
MsgBox "Fehler beim Updaten des Lieferscheins: " & err.number & " - " & err.description
|
||||
End If
|
||||
End Sub
|
||||
@@ -0,0 +1,73 @@
|
||||
' UpdateOrderDataBeforeDelNote()
|
||||
' ----------------------------------------------------------------------------
|
||||
' Vor der Erstellung des Lieferscheins, können hier noch
|
||||
' Werte in der Datenstruktur korrigiert werden.
|
||||
'
|
||||
' Beispiel: Versandkosten in Package-Artikeln
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 08.03.2021 / JJ
|
||||
' Version Date / Editor: 24.06.2021 / MP
|
||||
' Version Number: 3.0.0.4
|
||||
|
||||
Sub UpdateOrderDataBeforeDelNote()
|
||||
|
||||
Dim MacroAmountFaktor
|
||||
Dim MacroComplete
|
||||
Dim MacroAmountScanned
|
||||
|
||||
For OrderArrayIndex = 0 To Ubound(ORDER_ARTICLE_DATA, 2)
|
||||
|
||||
If DEBUG_ON = True Then
|
||||
AddDebugLine "Current ORDER_ARTICLE_DATA values for Index: " & OrderArrayIndex
|
||||
AddDebugLine "LineNumber: " & vbTab & ORDER_ARTICLE_DATA(INDEX_LINE_NUMBER, OrderArrayIndex)
|
||||
AddDebugLine "ArticleNumber: " & vbTab & ORDER_ARTICLE_DATA(INDEX_ARTICLE_NUMBER, OrderArrayIndex)
|
||||
AddDebugLine "MacroFlag: " & vbTab & ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex)
|
||||
AddDebugLine "ProductGroup: " & vbTab & ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex)
|
||||
AddDebugLine "AmountOrdered: " & vbTab & ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex)
|
||||
AddDebugLine "AmountDelivered: " & vbTab & ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex)
|
||||
AddDebugLine "AmountScanned: " & vbTab & ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex)
|
||||
|
||||
ShowDebugBox "UpdateOrderDataBeforeDelNote"
|
||||
End If
|
||||
|
||||
MacroFlag = CInt(ORDER_ARTICLE_DATA(INDEX_MACRO_FLAG, OrderArrayIndex))
|
||||
|
||||
' Wenn Macro-Artikel nur zum Teil ausgeliefert werden,
|
||||
' müssen die Anteile Nicht-scannbarer Artikel entsprechend reduziert werden.
|
||||
If MacroFlag = 1 Then
|
||||
|
||||
MacroAmount = Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex)) - Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex))
|
||||
MacroAmountScannend = Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex))
|
||||
|
||||
If MacroAmount > MacroAmountScannend Then
|
||||
MacroComplete = False
|
||||
If MacroAmount > 0 Then
|
||||
MacroAmountFaktor = MacroAmountScannend / MacroAmount
|
||||
End If
|
||||
Else
|
||||
MacroComplete = True
|
||||
MacroAmountFaktor = 1
|
||||
End If
|
||||
|
||||
ElseIf MacroFlag = 2 And MacroComplete = False Then
|
||||
ProductGroup = Cint(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex))
|
||||
|
||||
' Wir müssen nur etwas tun, wenn ein Faktor < 1 (=100%) ermittelt wurde,
|
||||
' da die Artikel der ProductGroup aus den EXCLUDED_ARTICLEGROUPS ja bereits vollständig initialisiert werden.
|
||||
If CheckArticleGroupIsRelevant(ORDER_ARTICLE_DATA(INDEX_ARTICLE_GROUP, OrderArrayIndex)) = False And MacroAmountFaktor < 1 Then
|
||||
ProductAmount = Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_ORDERED, OrderArrayIndex)) - Cint(ORDER_ARTICLE_DATA(INDEX_AMOUNT_DELIVERED, OrderArrayIndex))
|
||||
ProductAmount = Round(ProductAmount * MacroAmountFaktor)
|
||||
ORDER_ARTICLE_DATA(INDEX_AMOUNT_SCANNED, OrderArrayIndex) = ProductAmount
|
||||
End If
|
||||
End If
|
||||
|
||||
Next
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,32 @@
|
||||
' prettyXml(sDirty : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Source: https://stackoverflow.com/questions/25067839/format-xml-string-in-vbscript
|
||||
'
|
||||
' Returns: prettyXml : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 30.09.2020 / XX
|
||||
' Version Date / Editor: 30.09.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function prettyXml(ByVal sDirty)
|
||||
' Put whitespace between tags. (Required for XSL transformation.)
|
||||
sDirty = Replace(sDirty, "><", ">" & vbCrLf & "<")
|
||||
' Create an XSL stylesheet for transformation.
|
||||
Dim objXSL : Set objXSL = WScript.CreateObject("Msxml2.DOMDocument")
|
||||
objXSL.loadXML "<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & _
|
||||
"<xsl:output method=""xml"" indent=""yes""/>" & _
|
||||
"<xsl:template match=""/"">" & _
|
||||
"<xsl:copy-of select="".""/>" & _
|
||||
"</xsl:template>" & _
|
||||
"</xsl:stylesheet>"
|
||||
' Transform the XML.
|
||||
Dim objXML : Set objXML = WScript.CreateObject("Msxml2.DOMDocument")
|
||||
objXML.loadXml sDirty
|
||||
objXML.transformNode objXSL
|
||||
prettyXml = objXML.xml
|
||||
End Function
|
||||
@@ -0,0 +1,52 @@
|
||||
' RemoveDuplicatesFromArray(arrItems : Array)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Entfernt doppelte Einträge aus Ein-Dimensionalen Arrays
|
||||
'
|
||||
' Source: https://devblogs.microsoft.com/scripting/how-can-i-delete-duplicate-items-from-an-array/
|
||||
'
|
||||
' Returns: RemoveDuplicatesFromArray : Array
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 10.08.2020 / MK
|
||||
' Version Date / Editor: 10.08.2020 / MK
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function RemoveDuplicatesFromArray(arrItems)
|
||||
|
||||
If (Ubound(arrItems) >= 0) Then
|
||||
|
||||
If (DEBUG_ON = True) Or (DebugMode = "Enabled") Then
|
||||
MSGBOX "Array count: " & (Ubound(arrItems)+1),,"DEBUG - Info: BEFORE deduplication!"
|
||||
End If
|
||||
|
||||
Set objDictionary = CreateObject("Scripting.Dictionary")
|
||||
|
||||
For Each strItem in arrItems
|
||||
If Not objDictionary.Exists(strItem) Then
|
||||
objDictionary.Add strItem, strItem
|
||||
End If
|
||||
Next
|
||||
|
||||
intItems = objDictionary.Count - 1
|
||||
|
||||
ReDim arrItems(intItems)
|
||||
|
||||
i = 0
|
||||
|
||||
For Each strKey in objDictionary.Keys
|
||||
arrItems(i) = strKey
|
||||
i = i + 1
|
||||
Next
|
||||
|
||||
If (DEBUG_ON = True) Or (DebugMode = "Enabled") Then
|
||||
MSGBOX "Array count: " & (Ubound(arrItems)+1),,"DEBUG - Info: AFTER deduplication!"
|
||||
End If
|
||||
|
||||
End If
|
||||
|
||||
RemoveDuplicatesFromArray = arrItems
|
||||
End Function
|
||||
@@ -0,0 +1,35 @@
|
||||
' SendHTTPRequest(URL : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: SendHTTPRequest : String
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 10.08.2020 / MK
|
||||
' Version Date / Editor: 10.08.2020 / MK
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Function SendHTTPRequest(URL)
|
||||
|
||||
'Create the array for the return values of this function
|
||||
Dim HTTPRequest(1)
|
||||
|
||||
Set Request = CreateObject("MSXML2.XMLHTTP")
|
||||
Request.Open "POST", URL, False
|
||||
Request.Send
|
||||
HTTPRequest(0) = Request.ResponseText
|
||||
HTTPRequest(1) = Request.Status
|
||||
|
||||
If (DEBUG_ON = True) Or (DebugMode = "Enabled") Then
|
||||
AddDebugLine "Response from WebServices!"
|
||||
AddDebugLine "Status: " & HTTPRequest(1)
|
||||
AddDebugLine "Body: " & HTTPRequest(0)
|
||||
ShowDebugBox "WebServices"
|
||||
End If
|
||||
|
||||
SendHTTPRequest = HTTPRequest
|
||||
End Function
|
||||
@@ -0,0 +1,24 @@
|
||||
' SetLabelText(LabelItemID : Short, View: Long, Var: Long, Value: String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Setzt den Text eines Labels im aktuellen Fenster
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 24.02.2021 / MP
|
||||
' Version Number: 3.0.0.0
|
||||
|
||||
Sub SetLabelText(LabelItemID, View, Var, Value)
|
||||
|
||||
Set mywin = CWLStart.CurrentModule.Windows.Item(WINDOW_ID)
|
||||
Set labelBox = mywin.Controls.Item(LabelItemID)
|
||||
|
||||
CWLCurrentWindow.ActiveWindow.Vars.Value(View, Var) = Value
|
||||
labelBox.Refresh
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,9 @@
|
||||
Sub ShowWinLineDocForEditing
|
||||
|
||||
'Version Date 22.09.2020
|
||||
|
||||
'Call "Beleg" Window
|
||||
|
||||
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,19 @@
|
||||
' ShowDebugBox(Title : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' Zeigt die DEBUG-MsgBox an
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 10.08.2020 / XX
|
||||
' Version Date / Editor: 10.08.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub ShowDebugBox(Title)
|
||||
MsgBox DEBUG_MESSAGE, vbOkonly, DEBUG_TITLE & " - " & Title
|
||||
DEBUG_MESSAGE = ""
|
||||
End Sub
|
||||
@@ -0,0 +1,29 @@
|
||||
' ShowWinLineDocForEditing
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 22.09.2020 / XX
|
||||
' Version Date / Editor: 22.09.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub ShowWinLineDocForEditing
|
||||
|
||||
'Call "Beleg" Window
|
||||
MChangeGridCell 774, 125, 458753
|
||||
MGridLeftClick 774, 125, 1, 7
|
||||
MChangeGridCell 774, 125, 458753
|
||||
MChangeGridCell 774, 125, 327682
|
||||
MGridLeftClick 774, 125, 2, 5
|
||||
MChangeGridCell 774, 125, 458753
|
||||
MGridLeftClick 774, 125, 1, 7
|
||||
MPushButton 774, 134, 0
|
||||
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,46 @@
|
||||
' ShowWinLineDocOverview(DocNumber : String, AccountNumber : String, RunningNumber : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 22.09.2020 / XX
|
||||
' Version Date / Editor: 22.09.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub ShowWinLineDocOverview(DocNumber, AccountNumber, RunningNumber)
|
||||
'Call "Beleg" Window
|
||||
MApplication 2
|
||||
MWindow 774, false
|
||||
MTreeExpand 774, 102, 321566992, 100
|
||||
MTreeSelChange 774, 102, 321566992, 1001
|
||||
MActivateWindow 774
|
||||
|
||||
IF (DocNumber <> "") and (AccountNumber <> "") and (RunningNumber <> "") Then
|
||||
|
||||
'Set time periode (12 = alle Jahre)
|
||||
MSetFieldValue 774, 105, "12"
|
||||
|
||||
'Set area (1 = Verkauf/Einkauf)
|
||||
MSetFieldValue 774, 107, "1"
|
||||
|
||||
'Set Account number (Kundennummern)
|
||||
MSetFieldValue 774, 115, AccountNumber
|
||||
|
||||
'Set doc number (Belegnummer)
|
||||
MSetFieldValue 774, 117, DocNumber
|
||||
|
||||
'Set Running Nr (Laufnummer)
|
||||
MSetFieldValue 774, 191, RunningNumber
|
||||
|
||||
'Click the ok Button
|
||||
MPushButton 774, 98, 0
|
||||
|
||||
End If
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,35 @@
|
||||
' ShowWinLineMandatorAndWinLineYear(WinLineMandatorNr : String, WinLineYear : String)
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 22.09.2020 / XX
|
||||
' Version Date / Editor: 22.09.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub ShowWinLineMandatorAndWinLineYear(WinLineMandatorNr, WinLineYear)
|
||||
|
||||
'Close all Windows
|
||||
MPushButton 774, 99, 0
|
||||
IF (WinLineMandatorNr <> "") and (WinLineYear <> "") Then
|
||||
|
||||
Dim Year
|
||||
|
||||
Year = (WinLineYear / 12) + 1900
|
||||
|
||||
'Close all Windows
|
||||
'MActivateWindow 85
|
||||
'MPushButton 85, 99, 0
|
||||
MActivateWindow 774
|
||||
MPushButton 774, 99, 0
|
||||
|
||||
|
||||
End If
|
||||
|
||||
End Sub
|
||||
@@ -0,0 +1,27 @@
|
||||
' ShowWinLineProgramMacros
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 23.09.2020 / XX
|
||||
' Version Date / Editor: 23.09.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub ShowWinLineProgramMacros
|
||||
If (DEBUG_ON = True) Or (DebugMode = "Enabled") Then
|
||||
'Return to Macro Window
|
||||
MApplication 2
|
||||
MApplication 0
|
||||
MWindow 45, False
|
||||
MSetFieldFocus 45, 100
|
||||
MSetFieldFocus 45, -1
|
||||
MActivateWindow 45
|
||||
MSetFieldValue 45, 121, CWLMacro.MName
|
||||
End If
|
||||
End Sub
|
||||
@@ -0,0 +1,27 @@
|
||||
' SwitchWinLineGoToMacros
|
||||
' ----------------------------------------------------------------------------
|
||||
' KURZBESCHREIBUNG
|
||||
'
|
||||
' Returns: -
|
||||
' ----------------------------------------------------------------------------
|
||||
' 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: 25.08.2020 / XX
|
||||
' Version Date / Editor: 25.08.2020 / XX
|
||||
' Version Number: 1.0.0.0
|
||||
|
||||
Sub SwitchWinLineGoToMacros
|
||||
If (DEBUG_ON = True) Or (DebugMode = "Enabled") Then
|
||||
'Return to Macro Window
|
||||
MApplication 2
|
||||
MApplication 0
|
||||
MWindow 45, False
|
||||
MSetFieldFocus 45, 100
|
||||
MSetFieldFocus 45, -1
|
||||
MActivateWindow 45
|
||||
MSetFieldValue 45, 121, CWLMacro.MName
|
||||
End If
|
||||
End Sub
|
||||
@@ -0,0 +1,148 @@
|
||||
/****** Object: UserDefinedFunction [dbo].[FNDD_GET_ALL_MACROSUBARTICLE] Script Date: 08.06.2021 13:03:32 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
|
||||
-- =================================================================
|
||||
-- FNDD_GET_ALL_MACROSUBARTICLE
|
||||
-- =================================================================
|
||||
-- Die Funktion läd für einen Makro-Artikel alle im VK-Makro enthaltenen
|
||||
-- Makro-Sub-Artikel inklusive Menge und dem Bundlepreis.
|
||||
--
|
||||
-- Die Funktion soll aus einem Web-Shop aufgerufen werden können.
|
||||
--
|
||||
-- Returns: Tabelle mit den Spalten
|
||||
-- LaufendeNummer INT Wert aus t326.c009 Expl: 1
|
||||
-- MakroSubArtikelnummer VARCHAR(30) Wert aus t326.c006 Expl: 'GT0674001'
|
||||
-- MakroMenge INT Berechneter Wert aus Aktion, Wert und Expl: 1
|
||||
-- Bestellter Menge
|
||||
-- MakroPreis FLOAT Der Bundlepreis für diesen Sub-Artikel Expl: 123.45
|
||||
--
|
||||
-- Hinweise:
|
||||
-- - Wenn der Preis = -999.00 ist, dann wurde kein Bundlepreis gefunden
|
||||
-- - Wenn die Menge = 0 ist, dann konnte keine menge berchnet werden, z.B. weil es sich um einen Textbaustein handelt!
|
||||
--
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2021 by Digital Data GmbH
|
||||
--
|
||||
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
||||
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
|
||||
-- =================================================================
|
||||
-- Creation Date / Author: 26.05.2021 / MP
|
||||
-- Version Date / Editor: 27.05.2021 / MP
|
||||
-- Version Number: 1.0.0.1
|
||||
-- =================================================================
|
||||
-- History:
|
||||
-- 01.01.202X / XX - DESCRIPTION
|
||||
|
||||
CREATE FUNCTION [dbo].[FNDD_GET_ALL_MACROSUBARTICLE]
|
||||
(
|
||||
-- Add the parameters for the function here
|
||||
@WinLineYear INT -- Mandatory Parameter, for the WinLine Year (yyyy) Expl: 1440 (= 2020)
|
||||
,@WinLineMandator VARCHAR(4) -- Mandatory Parameter, for the WinLine Mandator (~~~~) Expl: '500M'
|
||||
,@MakroArtikelnummer VARCHAR(30) -- Hauptartikelnummer des Makro-Artikels (T026.C003) Expl: 'XX1000001'
|
||||
,@BestellteMenge INT -- Die bestellte Menge, als Basis für die Anzahl der Sub-Artikel Expl: 1
|
||||
)
|
||||
RETURNS @Table TABLE
|
||||
(
|
||||
-- Add the column definitions for the TABLE variable here
|
||||
LaufendeNummer INT
|
||||
,MakroSubArtikelnummer VARCHAR(30) NOT NULL DEFAULT ''
|
||||
,MakroMenge INT NOT NULL DEFAULT 0
|
||||
,MakroPreis FLOAT NOT NULL DEFAULT 0.00
|
||||
)
|
||||
AS
|
||||
BEGIN
|
||||
DECLARE
|
||||
@LaufendeNummer INT
|
||||
,@MakroSubArtikelnummer VARCHAR(30)
|
||||
,@MakroMenge INT
|
||||
,@MakroPreis FLOAT
|
||||
,@MakroWert INT
|
||||
,@MakroAktion INT
|
||||
,@VKMakroName VARCHAR(20)
|
||||
,@LastMengeKonstante INT
|
||||
|
||||
SELECT DISTINCT
|
||||
@VKMakroName = t.c037
|
||||
FROM v021 t
|
||||
WHERE t.c002 = @MakroArtikelnummer
|
||||
AND t.mesocomp = @WinLineMandator
|
||||
AND t.mesoyear = @WinLineYear
|
||||
|
||||
IF Len(@VKMakroName) <= 0
|
||||
BEGIN
|
||||
-- Kein VKMakroName definiert, dann gibt es auch keine Sub-Artikel
|
||||
RETURN
|
||||
END
|
||||
|
||||
DECLARE cursMacroSubArticles CURSOR FOR
|
||||
SELECT
|
||||
t.c009 -- Zeile
|
||||
,t.c006 -- Artikelnummer
|
||||
,t.c008 -- Wert
|
||||
,t.c007 -- Aktion
|
||||
FROM t326 t
|
||||
WHERE t.c002 like @VKMakroName + '%'
|
||||
AND t.mesocomp = @WinLineMandator
|
||||
AND t.mesoyear = @WinLineYear
|
||||
OPEN cursMacroSubArticles
|
||||
FETCH NEXT FROM cursMacroSubArticles INTO @LaufendeNummer, @MakroSubArtikelnummer, @MakroWert, @MakroAktion
|
||||
WHILE @@FETCH_STATUS = 0
|
||||
BEGIN
|
||||
-- Hole MakroPreis über die Skalarfunktion FNDD_GET_MACROSUBARTICLE_PRICE
|
||||
Select @MakroPreis = [dbo].[FNDD_GET_MACROSUBARTICLE_PRICE] (@WinLineYear, @WinLineMandator, @MakroArtikelnummer, @MakroSubArtikelnummer)
|
||||
|
||||
-- Berechne die MakroMenge anhand der Aktion, des Wert und der bestellten Menge
|
||||
IF @MakroAktion = 1
|
||||
BEGIN
|
||||
-- Mengeneingabe
|
||||
SET @MakroMenge = @BestellteMenge
|
||||
SET @LastMengeKonstante = @BestellteMenge
|
||||
END
|
||||
ELSE IF @MakroAktion = 2
|
||||
BEGIN
|
||||
-- Mengenkonstante
|
||||
SET @MakroMenge = @MakroWert
|
||||
SET @LastMengeKonstante = @MakroWert
|
||||
END
|
||||
ELSE IF @MakroAktion = 3
|
||||
BEGIN
|
||||
-- Mengenmutliplikation
|
||||
SET @MakroMenge = @BestellteMenge * @MakroWert
|
||||
END
|
||||
ELSE IF @MakroAktion = 4
|
||||
BEGIN
|
||||
-- Mengenaddition = Addition des Werts zur letzten Konstante
|
||||
SET @MakroMenge = @LastMengeKonstante + @MakroWert
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
SET @MakroMenge = 0
|
||||
END
|
||||
|
||||
|
||||
INSERT INTO @Table (
|
||||
LaufendeNummer
|
||||
,MakroSubArtikelnummer
|
||||
,MakroMenge
|
||||
,MakroPreis
|
||||
) VALUES (
|
||||
@LaufendeNummer
|
||||
,@MakroSubArtikelnummer
|
||||
,@MakroMenge
|
||||
,@MakroPreis
|
||||
)
|
||||
FETCH NEXT FROM cursMacroSubArticles INTO @LaufendeNummer, @MakroSubArtikelnummer, @MakroWert, @MakroAktion
|
||||
END
|
||||
CLOSE cursMacroSubArticles
|
||||
DEALLOCATE cursMacroSubArticles
|
||||
|
||||
RETURN
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
|
||||
/****** Object: UserDefinedFunction [dbo].[FNDD_GET_MACROSUBARTICLE_PRICE] Script Date: 08.06.2021 13:04:22 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
|
||||
-- FNDD_GET_MACROSUBARTICLE_PRICE
|
||||
-- =================================================================
|
||||
-- Die Funktion ermittelt für Makro-Sub-Artikel den Bundlepreis für
|
||||
-- einen definierten Makro-Artikel.
|
||||
-- Voraussetzung ist, dass es eine "Bundlepreisliste" gibt, und dass
|
||||
-- es für diese Preisliste und den Makroartikel einen speziellen Preis
|
||||
-- gibt.
|
||||
-- Wurde kein solcher Preis gefunden, gibt die Funktion -999 zurück.
|
||||
--
|
||||
-- Returns: Bundlepreis : FLOAT
|
||||
-- =================================================================
|
||||
-- Copyright (c) 2021 by Digital Data GmbH
|
||||
--
|
||||
-- Digital Data GmbH • Ludwig-Rinn-Strasse 16 • D-35452 Heuchelheim
|
||||
-- Tel.: 0641/202360 • E-Mail: info-flow@digitaldata.works
|
||||
-- =================================================================
|
||||
-- Creation Date / Author: 26.05.2021 / MP
|
||||
-- Version Date / Editor: 10.08.2021 / MP/VF
|
||||
-- Version Number: 1.0.0.2
|
||||
-- =================================================================
|
||||
-- History:
|
||||
-- 10.08.2021 / MP/VF - Rückgabewert auf Float geändert
|
||||
-- 08.06.2021 / MP - Bundlepreisliste aus dem Mandantenstamm ziehen
|
||||
|
||||
ALTER FUNCTION [dbo].[FNDD_GET_MACROSUBARTICLE_PRICE]
|
||||
(
|
||||
-- Parameters for this function
|
||||
@WinLineYear INT -- Mandatory Parameter, for the WinLine Year (yyyy) Expl: 1440 (= 2020)
|
||||
,@WinLineMandator VARCHAR(4) -- Mandatory Parameter, for the WinLine Mandator (~~~~) Expl: '500M'
|
||||
,@MakroArtikelnummer VARCHAR(30) -- Hauptartikelnummer des Makro-Artikels (T026.C003) Expl: 'XX1000001'
|
||||
,@MakroSubArtikelnummer VARCHAR(30) -- Hauptartikelnummer (T026.C003) Expl: 'AC0101001'
|
||||
)
|
||||
RETURNS FLOAT
|
||||
AS
|
||||
BEGIN
|
||||
-- Declare the return variable here
|
||||
DECLARE
|
||||
@RESULT FLOAT
|
||||
,@T044_PREISLISTENR INT
|
||||
,@T043_PREIS FLOAT
|
||||
|
||||
-- 1. Finde die Nummer der Bundlepreisliste in den Zusatzfeldern im Mandantenstamm
|
||||
SELECT TOP 1
|
||||
@T044_PREISLISTENR = t.c014
|
||||
FROM t057 t
|
||||
WHERE t.c031 = '001' -- Zusatzfelder aus dem Mandantenstamm
|
||||
AND t.mesocomp = @WinLineMandator
|
||||
AND t.mesoyear = @WinLineYear
|
||||
|
||||
-- 2. Finde einen Preis in der Preisliste für den Artikel (t043)
|
||||
IF (@T044_PREISLISTENR > 0)
|
||||
BEGIN
|
||||
SELECT TOP 1
|
||||
@RESULT = t.c013
|
||||
FROM T043 t WITH(NOLOCK)
|
||||
WHERE t.c000 = @MakroSubArtikelnummer
|
||||
AND t.c002 = @T044_PREISLISTENR
|
||||
AND t.c014 LIKE @MakroArtikelnummer
|
||||
AND t.mesocomp = @WinLineMandator
|
||||
AND t.mesoyear = @WinLineYear
|
||||
END
|
||||
|
||||
-- Failsafe
|
||||
SET @RESULT = ISNULL(@RESULT, -999)
|
||||
|
||||
RETURN @RESULT
|
||||
END
|
||||
GO
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
|
||||
/****** Object: Table [dbo].[IM_Beleg_PacktischLieferschein_VK_Kopf] Script Date: 17.06.2021 14:03:08 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[IM_Beleg_PacktischLieferschein_VK_Kopf](
|
||||
[BELEGKEY] [int] NULL,
|
||||
[Kontonummer] [nvarchar](20) NULL,
|
||||
[Laufnummer] [nvarchar](20) NULL,
|
||||
[Auftragsnummer] [nvarchar](20) NULL,
|
||||
[Belegdatum] [datetime] NULL,
|
||||
[ts] [timestamp] NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
/****** Object: Table [dbo].[IM_Beleg_PacktischLieferschein_VK_Mitte] Script Date: 17.06.2021 14:03:57 ******/
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
CREATE TABLE [dbo].[IM_Beleg_PacktischLieferschein_VK_Mitte](
|
||||
[BELEGKEY] [int] NULL,
|
||||
[Artikelnummer] [nvarchar](30) NULL,
|
||||
[Hauptartikelnummer] [nvarchar](30) NULL,
|
||||
[Zeilennummer] [int] NULL,
|
||||
[Datentyp] [nvarchar](1) NULL,
|
||||
[Mengegeliefert] [float] NULL,
|
||||
[ChargeIdentnummer] [nvarchar](30) NULL,
|
||||
[Auspr1] [nvarchar](30) NULL,
|
||||
[Auspr2] [nvarchar](30) NULL,
|
||||
[Lagerort] [int] NULL,
|
||||
[ts] [timestamp] NULL,
|
||||
[Einzelpreis] [float] NULL
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
ALTER TABLE [dbo].[IM_Beleg_PacktischLieferschein_VK_Mitte] ADD CONSTRAINT [DF_IM_Beleg_PacktischLieferschein_VK_Mitte_Einzelpreis] DEFAULT ((0.00)) FOR [Einzelpreis]
|
||||
GO
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user