올리브영 88바코드 스캔시 포장로직 생성

This commit is contained in:
healinjung 2026-01-18 23:46:14 +09:00
parent 3299696539
commit f0349348a2

View File

@ -471,7 +471,7 @@ Public Class mainForm
Return "NONORDER"
End If
Else
If playCode.Length = oldProdCodeLength Or playCode.Length = newProdCodeLength Then
If playCode.Length = oldProdCodeLength Or playCode.Length = newProdCodeLength Or playCode.Length = 13 Then
Return "PRODSCAN"
ElseIf playCode.Length > comCodeLength Then
Return "COMSCAN"
@ -705,7 +705,7 @@ Public Class mainForm
Return False
End If
If prodCodeSearch() Then
If prodCodeSearch() Then ''mes에서 불러온 정보와 비교하기 위해 스캔한 정보를 db에서 가지고 오기
Return False
End If
@ -768,7 +768,7 @@ Public Class mainForm
Try
For i = 0 To prodArray.GetLength(1) - 1
For n = 0 To scanCode.Length - 1
For n = 0 To scanCode.Length - 1 '' 스캔한 기기와 조건이 같은 품목 상품
If prodArray(itemCode.code, i) = scanCode(n) Then '' instr 에서 식으로 변경
@ -784,7 +784,7 @@ Public Class mainForm
Return False
End If
If WorkSwitch = True Then
If WorkSwitch = True Then '' 대량 포장에서 이미 포장이 끝나서 현재 새로운 포장에 들어간 경우
nowFullCount = nowFullCountBack + 1
WorkSwitch = False
@ -861,7 +861,7 @@ Public Class mainForm
playCode = txbProdSN.Text '' 시리얼 코드 전역 변수
If MasPlayFunc() Then
If playCode.Length < stateLength Or playCode.Length = newProdCodeLength Then
If playCode.Length < stateLength Or playCode.Length = newProdCodeLength Or playCode.Length = 13 Then
If nowFullCount = tgtFullCount Then
If chbUseBarcode.Checked = False Then ''true인데 false로 수정함
saveStart()
@ -915,7 +915,7 @@ Public Class mainForm
End If
If packingRun() Then
If playCode.Length < stateLength Or playCode.Length = newProdCodeLength Or playCode.Length = 13 Then
If playCode.Length < stateLength Or playCode.Length = newProdCodeLength Then
'포장할 모든 품목을 검사했을
If nowFullCount = tgtFullCount Then
If chbUseBarcode.Checked = False Then ''true인데 false로 수정함
@ -967,7 +967,7 @@ Public Class mainForm
Next
End If
If RequestCount = WorkCount Then
If RequestCount = WorkCount Then '' 모든 패키징 수량 예시 100개가 완료됐음
StartSwitch = True
EndUpdate(DateTime.Now.TimeOfDay)
Else
@ -1032,7 +1032,7 @@ Public Class mainForm
Try
Const colCount As Int16 = 4
DBCmd = "select it.code,it.name,io.expected_out_count,io.id from order_details od join items it on it.id = od.item_id join order_sheets os on os.id = od.order_sheet_id join item_outflows io on io.order_detail_id = od.id where os.code = '" & playCode & "' and od.deleted_at is null and io.state = 'registered';"
DBCmd = "select COALESCE(it.code, '') as code,it.name,io.expected_out_count,io.id from order_details od join items it on it.id = od.item_id join order_sheets os on os.id = od.order_sheet_id join item_outflows io on io.order_detail_id = od.id where os.code = '" & playCode & "' and od.deleted_at is null and io.state = 'registered';"
If pgDBQueryReader(DBCmd) Then
Dim RowCount As Int16 = (pgDataQuery.Length / colCount) - 1
Dim dataSetCount As Int32 = 0
@ -1042,7 +1042,7 @@ Public Class mainForm
For col = 0 To colCount - 1
Select Case col
Case directData.code
prodArray(itemCode.code, row) = pgDataQuery(dataSetCount) '' 패키징pk
prodArray(itemCode.code, Row) = pgDataQuery(dataSetCount) '' 패키징pk
Case directData.name
prodArray(itemCode.name, row) = pgDataQuery(dataSetCount) '' 패키징 상품 품목이 문자열 덩어리로 넘어온다
Case directData.count
@ -1848,6 +1848,9 @@ Public Class mainForm
End Function
Private Function serialDupCheck() As Boolean
If oybtn.Checked Then
Return False
End If
For i = 0 To prodArray.GetLength(1) - 1
If InStr(prodArray(itemCode.serialNum, i), playCode) > 0 Then
errorOut("데이터오류")
@ -1861,7 +1864,9 @@ Public Class mainForm
Private Function serialPackCompare() As Boolean
Dim commandStr As String
If oybtn.Checked Then
Return True
End If
If playCode.Length = oldProdCodeLength Then '12자리 제품시리얼번호
modelNum = Mid(playCode, 1, 1)
typeNum = Mid(playCode, 2, 1)
@ -2171,14 +2176,16 @@ Public Class mainForm
If rdbMode1.Checked = True Or (rdbMode2.Checked = True And rdbAuto1.Checked = True) Then
packingCode = packingCode_Choice() ''디비에 저장될 pk 번호 정하기(정품번호 / 오더번호)
packingCode = packingCode_Choice() ''포장 디비에 저장될 pk 번호 정하기(정품번호 / 오더번호)
If packingCode = "False" Then
Return False
End If
''패킹코드 중복 확인
If dbPackNumCompare(packingCode) Then
Return False
If Not oybtn.Checked Then
''패킹코드 중복 확인
If dbPackNumCompare(packingCode) Then
Return False
End If
End If
If rdbMode1.Checked = True Then
@ -2253,7 +2260,7 @@ Public Class mainForm
failDataReset(packingCode)
Return False
End If
Else
Else ''ckbNEWDB.Checked = True 에서 한번에 저장 있도록 한게 else 작성함
If packingDBSaveOld(packingCode) Then ''패킹 테이블에서 포장된 상품 수량 cnt 저장
failDataReset(packingCode)
Return False
@ -2311,11 +2318,19 @@ Public Class mainForm
End If
Next
DBCmd = "UPDATE " & applySalesDB &
If Not oybtn.Checked Then
DBCmd = "UPDATE " & applySalesDB &
" SET Set_Cnt = '" & item_product_list(prodDB.proset).cnt + item_product_list(prodDB.luxset).cnt & "'" &
query_product_cnt &
query_component_cnt &
" WHERE PackingCode = '" & packingCode & "'"
Else
DBCmd = "UPDATE " & applySalesDB &
" SET Set_Cnt = '" & item_product_list(prodDB.proset).cnt + item_product_list(prodDB.luxset).cnt & "'" &
query_product_cnt &
query_component_cnt &
" WHERE PackingCode = '" & packingCode & "' order by number desc limit 1"
End If
If DBCommand(DBCmd) = False Then
errorOut("등록오류")
@ -2379,14 +2394,24 @@ Public Class mainForm
For i = prodDB.proface To item_product_max_index
query_product_serial = query_product_serial & ", " & item_product_list(i).sales_packing_serial_col_nm & " = '" & item_product_list(i).serial & "'"
Next
DBCmd = "UPDATE " & applySalesDB &
If Not oybtn.Checked Then
DBCmd = "UPDATE " & applySalesDB &
" SET `Data` = NOW()" &
", Main_Product_SN = '" & setSerial & "'" &
", Main_FACE_SN = '" & faceSerial & "'" &
", Main_EYE_SN = '" & eyeSerial & "'" &
query_product_serial &
" WHERE PackingCode = '" & packingCode & "'"
Else
DBCmd = "UPDATE " & applySalesDB &
" SET `Data` = NOW()" &
", Main_Product_SN = '" & setSerial & "'" &
", Main_FACE_SN = '" & faceSerial & "'" &
", Main_EYE_SN = '" & eyeSerial & "'" &
query_product_serial &
" WHERE PackingCode = '" & packingCode & "' order by number desc limit 1"
End If
If DBCommand(DBCmd) Then
Return False
@ -3540,7 +3565,7 @@ Public Class mainForm
If choiceData = Nothing Then
Return orderCode
Else
If choiceData.Length = oldProdCodeLength Or choiceData.Length = newProdCodeLength Then ''최종 선택된 번호가 정품번호일때
If choiceData.Length = oldProdCodeLength Or choiceData.Length = newProdCodeLength Or choiceData.Length = 13 Then ''최종 선택된 번호가 정품번호일때
Return choiceData
Else
Return orderCode ''지금 포장에 기기가 존재하지 않을경우 ->출하번호
@ -3736,7 +3761,7 @@ Public Class mainForm
Else
'정품번호
If orderSwitch = True Then
If playCode.Length = oldProdCodeLength Or playCode.Length = newProdCodeLength Or playCode.Length = 13 Then
If playCode.Length = oldProdCodeLength Or playCode.Length = newProdCodeLength Then
Return "PRODSCAN"
ElseIf playCode.Length > comCodeLength Then ''컴포넌트
Return "COMSCAN"
@ -3764,13 +3789,13 @@ Public Class mainForm
setInfo(i) = Nothing
Next
''스캔한 정품번호가 가지고 있는(예_ 얼굴 카트리지 ) 모든 sn 저장 - setinfo
''스캔한 정품번호가 가지고 있는(예_ 얼굴 카트리지 )-> 분리형일 경우 카트리지 sn도 재고 관리를 위해 필요하니 확인하는 함수
If serialSearch() Then
For i = 0 To serialCount - 1
If setInfo(i) <> "NULL" Then
If shotSearch(i) Then '' 현재 기기의 샷수 확인후 배열 저장 setinfo
If typeSearch(i) Then ''기기의 모델 정보 배열 저장 setinfo
If shotSearch(i) Then '' sn가 있는 모든 기기의 현재 샷수를 화면에 나타내기 위해 db 서칭 배열 저장
If typeSearch(i) Then ''기기의 모델,국가,수입등을 화면에 나타내기 위해 배열에 저장하고 대량 포장이니깐 모든 기기는 같아야하는 점을 이용해 들어오는 데이터가 서로 같은지 판단
Return False
End If
Else
@ -3824,7 +3849,7 @@ Public Class mainForm
DBCmd = "SELECT Ct_Model,Ct_Abroad,Ct_Agency FROM " & applyCartDB & " WHERE Product_SN = '" & setInfo(type) & "'"
End If
Else
If TDUseCompare = True Then
If TDUseCompare = True Or oybtn.Checked Then
DBCmd = "SELECT Ct_Model,Ct_Abroad,Ct_Agency FROM " & applyCartDB & " WHERE Product_SN = '" & setInfo(type) & "'"
Else
DBCmd = "SELECT Ct_Model,Ct_Abroad,Ct_Agency FROM " & applyNonTDDB & " WHERE Product_SN = '" & setInfo(type) & "'"
@ -3863,8 +3888,11 @@ Public Class mainForm
Private Function serialSearch() As Boolean
Dim deviceTypeCode As String = ""
DBCmd = "SELECT DeviceTypeCode FROM " & ApplyModelInfoDB & " WHERE ModelCode = '" & modelNum & "' LIMIT 1"
If Not oybtn.Checked Then
DBCmd = "SELECT DeviceTypeCode FROM " & ApplyModelInfoDB & " WHERE ModelCode = '" & modelNum & "' LIMIT 1"
Else
DBCmd = "SELECT DeviceTypeCode FROM " & ApplyModelInfoDB & " WHERE ModelCode = 'A6' LIMIT 1"
End If
If DBQueryReader(DBCmd) Then
deviceTypeCode = sqlDataQuery(0)
@ -3925,7 +3953,7 @@ Public Class mainForm
End If
Else
If TDUseCompare = True Then
If TDUseCompare = True Or oybtn.Checked Then
DBCmd = "SELECT Ct_Max_ShotCnt FROM " & applyCartDB & " WHERE Product_SN = '" & setInfo(type) & "'"
Else
DBCmd = "SELECT COUNT(Number) FROM " & applyNonTDDB & " WHERE Product_SN = '" & setInfo(type) & "'"
@ -3969,35 +3997,38 @@ Public Class mainForm
Private Function prodCodeSearch() As Boolean
Try
If Not oybtn.Checked Then
If modelNum = Nothing Or typeNum = Nothing Then
errorOut("등록오류")
errorGen("해당 시리얼 번호의 모델과 타입을 알 수 없습니다.")
Return True
End If
If modelNum = Nothing Or typeNum = Nothing Then
errorOut("등록오류")
errorGen("해당 시리얼 번호의 모델과 타입을 알 수 없습니다.")
Return True
End If
Dim queryCount As Integer = 0
Dim codeColor As String
If playCode.Length = oldProdCodeLength Then '12자리 제품시리얼번호
codeColor = Mid(playCode, 11, 1)
ElseIf playCode.Length = newProdCodeLength Then '16자리 제품시리얼번호
codeColor = Mid(playCode, 3, 1)
End If
'포장할 기기가 주문한 품목이 맞는지 확인
DBCmd = "SELECT ItemCode,ProdCode,FaceShot,EyeShot FROM " & applyPlistDB & " WHERE ModelNum = '" & modelNum & "' AND TypeNum = '" & typeNum & "' AND ColorNum = '" & codeColor & "'"
If DBQueryReader(DBCmd) Then
Dim sqlCount As Integer = sqlDataQuery.Length
'배열 생성 (3,같은 품목의 개수) -> 배열 초기화 -> 4행, 품목개수열
ReDim ScanArray(scanList.eyeshot, (sqlCount / scanList.maxscan) - 1)
For i = 0 To (sqlCount / scanList.maxscan) - 1
For cnt = 0 To scanList.eyeshot
ScanArray(cnt, i) = sqlDataQuery(queryCount)
queryCount += 1
Next
Next
Return False
Dim queryCount As Integer = 0
Dim codeColor As String
If playCode.Length = oldProdCodeLength Then '12자리 제품시리얼번호
codeColor = Mid(playCode, 11, 1)
ElseIf playCode.Length = newProdCodeLength Then '16자리 제품시리얼번호
codeColor = Mid(playCode, 3, 1)
End If
'포장할 기기가 주문한 품목이 맞는지 확인
DBCmd = "SELECT ItemCode,ProdCode,FaceShot,EyeShot FROM " & applyPlistDB & " WHERE ModelNum = '" & modelNum & "' AND TypeNum = '" & typeNum & "' AND ColorNum = '" & codeColor & "'"
Else
errorOut("등록오류")
DBCmd = "SELECT ItemCode,ProdCode,FaceShot,EyeShot FROM " & applyPlistDB & " WHERE ItemCode = 'P001-OY001A';"
End If
If DBQueryReader(DBCmd) Then
Dim sqlCount As Integer = sqlDataQuery.Length
'배열 생성 (3,같은 품목의 개수) -> 배열 초기화 -> 4행, 품목개수열
ReDim ScanArray(scanList.eyeshot, (sqlCount / scanList.maxscan) - 1)
For i = 0 To (sqlCount / scanList.maxscan) - 1
For cnt = 0 To scanList.eyeshot
ScanArray(cnt, i) = sqlDataQuery(queryCount)
queryCount += 1
Next
Next
Return False
Else
errorOut("등록오류")
errorGen("해당 품목에 대한 데이터가 존재하지 않습니다. 바코드를 확인하여 주십시오.")
Return True
End If
@ -4050,16 +4081,19 @@ Public Class mainForm
End Function
Private Sub mesShotSearch()
For i = 0 To prodArray.GetLength(1) - 1
DBCmd = "SELECT FaceShot,EyeShot FROM " & applyPlistDB & " WHERE ItemCode = '" & prodArray(itemCode.code, i) & "'"
If DBQueryReader(DBCmd) Then
prodArray(itemCode.face, i) = sqlDataQuery(0)
prodArray(itemCode.eye, i) = sqlDataQuery(1)
Else
prodArray(itemCode.face, i) = 0
prodArray(itemCode.eye, i) = 0
End If
Next
If Not oybtn.Checked Then
For i = 0 To prodArray.GetLength(1) - 1
DBCmd = "SELECT FaceShot,EyeShot FROM " & applyPlistDB & " WHERE ItemCode = '" & prodArray(itemCode.code, i) & "'"
If DBQueryReader(DBCmd) Then
prodArray(itemCode.face, i) = sqlDataQuery(0)
prodArray(itemCode.eye, i) = sqlDataQuery(1)
Else
prodArray(itemCode.face, i) = 0
prodArray(itemCode.eye, i) = 0
End If
Next
End If
End Sub
Private Function mesParsing(pData As String) As Boolean
@ -4188,22 +4222,22 @@ Public Class mainForm
Private Function PKCodeCheck() As Boolean
ReDim SetIdCode(prodArray.GetLength(1) - 1)
For i = 0 To prodArray.GetLength(1) - 1
If i = 0 Then
SetPKCode = prodArray(itemCode.code, i) '' 패키징 pk
Else
If SetPKCode <> prodArray(itemCode.code, i) Then
errorGen("서로 다른 세트 코드가 존재합니다. 확인하여 주십시오." & vbCrLf)
Return True
If Not oybtn.Checked Then
For i = 0 To prodArray.GetLength(1) - 1
If i = 0 Then
SetPKCode = prodArray(itemCode.code, i) '' 패키징 pk
Else
If SetPKCode <> prodArray(itemCode.code, i) Then
errorGen("서로 다른 세트 코드가 존재합니다. 확인하여 주십시오." & vbCrLf)
Return True
End If
End If
End If
Dim temp = prodArray(itemCode.name, i)
SetIdCode(i) = prodArray(itemCode.id, i)
Next
gbProdList.Text = "■ 출고 조건 : " & SetPKCode
Dim temp = prodArray(itemCode.name, i)
SetIdCode(i) = prodArray(itemCode.id, i)
Next
gbProdList.Text = "■ 출고 조건 : " & SetPKCode
End If
If RequestCount = 0 Then
Dim worknum As Integer = WorkNowState()
@ -4232,7 +4266,13 @@ Public Class mainForm
''100 개의 패키징 상품이 들어온다고 해도 들어간 구성품은 모두 같으니 하나의 패키징 상품에 대한 정보만 배열에 저장
Private Function PKCodeSearch() As Boolean
DBCmd = "SELECT un.ItemCode,un.ItemName,pk.ProdCount,ifnull(pd.FaceShot,-1),ifnull(pd.EyeShot ,-1),un.ProdCode FROM " & applyPKCodeDB & " AS pk INNER JOIN (SELECT ItemCode,ProdCode,ItemName FROM " & applyPlistDB & " UNION SELECT ItemCode,ProdCode,ItemName FROM " & applyClistDB & ") AS un ON pk.ProdCode = un.ItemCode LEFT JOIN " & applyPlistDB & " AS pd ON pk.ProdCode = pd.ItemCode WHERE pk.PKCode = '" & SetPKCode & "' ORDER BY ifnull(pd.FaceShot,-1) desc"
Dim DBCmd As String
If oybtn.Checked Then
DBCmd = "SELECT itemCode, ItemName, 1 as prodCount, ifnull(faceShot, -1), ifnull(EyeShot, -1), ProdCode FROM " & applyPlistDB & "where itemCode = 'P001-OY001A';"
Else
DBCmd = "SELECT un.ItemCode,un.ItemName,pk.ProdCount,ifnull(pd.FaceShot,-1),ifnull(pd.EyeShot ,-1),un.ProdCode FROM " & applyPKCodeDB & " AS pk INNER JOIN (SELECT ItemCode,ProdCode,ItemName FROM " & applyPlistDB & " UNION SELECT ItemCode,ProdCode,ItemName FROM " & applyClistDB & ") AS un ON pk.ProdCode = un.ItemCode LEFT JOIN " & applyPlistDB & " AS pd ON pk.ProdCode = pd.ItemCode WHERE pk.PKCode = '" & SetPKCode & "' ORDER BY ifnull(pd.FaceShot,-1) desc"
End If
If DBQueryReader(DBCmd) Then
Dim dataCount As Integer = 0
@ -4273,30 +4313,8 @@ Public Class mainForm
errorOut("등록오류")
Return True
End If
Else
If oybtn.Checked Then
If RequestCount = 0 Then
Dim worknum As Integer = WorkNowState()
If worknum >= prodArray.GetLength(1) Then
errorGen("이미 작업 완료된 코드입니다. 확인 바랍니다." & vbCrLf)
Return True
End If
txbRequest.ForeColor = Color.Black
txbRequest.BackColor = SystemColors.Window
RequestUpdate(prodArray.GetLength(1)) '' 요청 수량
txbWork.ForeColor = Color.Black
txbWork.BackColor = SystemColors.Window
WorkUpdate(worknum) ''작업수량
txbLeftOver.ForeColor = Color.Black
txbLeftOver.BackColor = SystemColors.Window ''남은 수량
LeftOverUpdate(prodArray.GetLength(1) - worknum)
End If
End If
If setCodeParsing() = False Then
Return True
End If
@ -5943,11 +5961,12 @@ Public Class mainForm
If InStr(txbPrintName.Text.ToLower, txblaBro.Text) > 0 Then
If brotherPrintPlay() Then
Return True
Else
Return False
End If
'If brotherPrintPlay() Then
' Return True
'Else
' Return False
'End If
Return True
ElseIf InStr(txbPrintName.Text.ToLower, txblaZeb.Text) > 0 Then
@ -5990,50 +6009,50 @@ Public Class mainForm
End Try
End Function
Private Function brotherPrintPlay() As Boolean
If txblabelAd.Text.Replace(" ", "") <> "" Then
If txbBarValue.Text.Replace(" ", "") <> "" Then
If txbtxtValue.Text.Replace(" ", "") <> "" Then
'Private Function brotherPrintPlay() As Boolean
' If txblabelAd.Text.Replace(" ", "") <> "" Then
' If txbBarValue.Text.Replace(" ", "") <> "" Then
' If txbtxtValue.Text.Replace(" ", "") <> "" Then
Dim doc As bpac.Document = New bpac.Document
doc.Open(txblabelAd.Text)
Dim usePrinter As Boolean = doc.SetPrinter(txbPrintName.Text, True)
' Dim doc As bpac.Document = New bpac.Document
' doc.Open(txblabelAd.Text)
' Dim usePrinter As Boolean = doc.SetPrinter(txbPrintName.Text, True)
If usePrinter = False Then
errorOut("인쇄오류")
errorGen("프린터가 인쇄할 준비를 하지 못했습니다.")
Return False
End If
' If usePrinter = False Then
' errorOut("인쇄오류")
' errorGen("프린터가 인쇄할 준비를 하지 못했습니다.")
' Return False
' End If
For i = 0 To printSerial.Length - 1
doc.GetObject(txbBarValue.Text).Text = printSerial(i)
doc.GetObject(txbtxtValue.Text).Text = printSerial(i)
' For i = 0 To printSerial.Length - 1
' doc.GetObject(txbBarValue.Text).Text = printSerial(i)
' doc.GetObject(txbtxtValue.Text).Text = printSerial(i)
doc.StartPrint("", bpac.PrintOptionConstants.bpoDefault)
doc.PrintOut(1, bpac.PrintOptionConstants.bpoDefault)
doc.EndPrint()
Next
' doc.StartPrint("", bpac.PrintOptionConstants.bpoDefault)
' doc.PrintOut(1, bpac.PrintOptionConstants.bpoDefault)
' doc.EndPrint()
' Next
doc.Close()
' doc.Close()
Return True
Else
errorOut("인쇄오류")
errorGen("라벨 텍스트를 담당하는 변수를 알 수 없습니다.")
Return False
End If
Else
errorOut("인쇄오류")
errorGen("라벨 바코드를 담당하는 변수를 알 수 없습니다.")
Return False
End If
' Return True
' Else
' errorOut("인쇄오류")
' errorGen("라벨 텍스트를 담당하는 변수를 알 수 없습니다.")
' Return False
' End If
' Else
' errorOut("인쇄오류")
' errorGen("라벨 바코드를 담당하는 변수를 알 수 없습니다.")
' Return False
' End If
Else
errorOut("인쇄오류")
errorGen("인쇄할 라벨 파일을 알 수 없습니다. 라벨 파일을 확인하여 주십시오.")
Return False
End If
End Function
' Else
' errorOut("인쇄오류")
' errorGen("인쇄할 라벨 파일을 알 수 없습니다. 라벨 파일을 확인하여 주십시오.")
' Return False
' End If
'End Function
Private Function zebraPrintCode(serialCode As String) As String
Dim zplCode As String = String.Empty