Imports System.IO Imports System.IO.Ports Imports System.Text Imports System.Threading Imports System.Math Public Class MainForm Private Const TDMaxLength As Int16 = 10 Private Const TDMinLength As Int16 = 9 Private Const InputCntVal As Int16 = 10 Private Const LimitWhile As Int16 = 5 Private TDSNHead1 As String = "DIT" Private TDSNHead2 As String = "J" Private DBCmd As String Private tmpCmdMessage As String Private rxMessage, cmdMessage As String Private ThreadStop As Boolean = False Private SerialNum As String Private NowDate As String Private NowTime As String Private OptionChange As Boolean = False Private IDName As String = String.Empty Private ModelCode As String Private TypeCode As String Private ColorCode As String Private ClassCode As String Private ProdCode As String Private TDUseCompare As Boolean = False Private RegNumber() As Integer Private InputCnt As Int16 Private TrayData(0, 0) As Integer Private Enum TrayDataList NumData State maxList End Enum Private Enum SearchList TestStep Power Depth Serial InputDate Frequency TestDate Capacitor_FW Grede maxList End Enum Private TDData(SearchList.maxList - 1) As String Private TDDataTxb(SearchList.maxList - 1) As TextBox Private Enum ModeList Prod_Input TDRecycle End Enum Private NowMode As Int16 Private Enum SaveList Info Config Print MaxSave End Enum Private SaveName(SaveList.MaxSave) As String Private Enum CountList Total Success Fail maxCount End Enum Private CountSelect(CountList.maxCount - 1) As Integer Private ErrorData As Boolean = False Private Enum ClassList Domestic_Set Domestic_AS Domestic_shop OverSeas_Set OverSeas_AS Experience MaxClass End Enum Private ClassNumber(ClassList.MaxClass - 1) As Int16 Private Sub SetInputCnt() InputCnt = InputCntVal ScanTimer.Enabled = True End Sub Private Delegate Sub SerialDelegate() Private SerialDelegateFunc As SerialDelegate Private Runthread As Thread = New Thread(AddressOf ThreadPlay) Private ThreadSwitch As Boolean = True Private Sub ScanTimer_Tick(sender As Object, e As EventArgs) Handles ScanTimer.Tick If InputCnt Then InputCnt -= 1 Else ScanTimer.Enabled = False If txbPVSN.Text.Replace(" ", "") <> "" Or chbAutoMeasure.Checked Then Select Case NowMode Case ModeList.Prod_Input If InStr(txbPVSN.Text, "[START]") > 0 Or txbPVSN.Text.Length = 12 Then btnEnter_Click(sender, e) End If Case ModeList.TDRecycle If InStr(txbPVSN.Text, TDSNHead1) > 0 Or InStr(txbPVSN.Text, TDSNHead2) > 0 Then btnEnter_Click(sender, e) End If Case Else MsgBox("잘못된 접근입니다.", vbCritical) End Select txbPVSN.Focus() Else btnEnter.Focus() End If txbPVSN.Refresh() btnEnter.Refresh() End If End Sub Private Sub txbPVSN_TextChanged(sender As Object, e As EventArgs) Handles txbPVSN.TextChanged Dim TmpStr As String If txbPVSN.Enabled = True Then If InputCnt = 0 And chbUseBarcode.Checked = True Then TmpStr = txbPVSN.Text If (Len(TmpStr) > 1) Then TmpStr = Mid(TmpStr, Len(TmpStr), 1) txbPVSN.Clear() txbPVSN.AppendText(TmpStr) End If SetInputCnt() End If End If End Sub Private Sub DataSetting() Select Case NowMode Case ModeList.Prod_Input TDDataTxb(SearchList.TestStep) = txbTDStep TDDataTxb(SearchList.Frequency) = txbTDFreq TDDataTxb(SearchList.Grede) = txbTDGrade TDDataTxb(SearchList.Serial) = txbTDNum TDDataTxb(SearchList.InputDate) = txbTDIDate TDDataTxb(SearchList.Depth) = txbTDDepth TDDataTxb(SearchList.TestDate) = txbReTest TDDataTxb(SearchList.Power) = txbTDPower TDDataTxb(SearchList.Capacitor_FW) = txbPDVersion ''제외 Case ModeList.TDRecycle TDDataTxb(SearchList.TestStep) = txbReOrder TDDataTxb(SearchList.Capacitor_FW) = txbReCValue TDDataTxb(SearchList.Frequency) = txbReFreq TDDataTxb(SearchList.Grede) = txbReGrade TDDataTxb(SearchList.Serial) = txbReSerial TDDataTxb(SearchList.InputDate) = txbReInput TDDataTxb(SearchList.Depth) = txbReMotor TDDataTxb(SearchList.TestDate) = txbReTest TDDataTxb(SearchList.Power) = txbRePower End Select End Sub Private Sub DefaultSetting() PrintUseCkb(PrintList.BoxCode) = ckbBoxPnt PrintUseCkb(PrintList.Warranty) = ckbWarPnt PrintUseCkb(PrintList.ProdLabel) = ckbProdPnt PrintUseTxb(PrintList.BoxCode) = txbPtBox_Name PrintUseTxb(PrintList.Warranty) = txbPtWar_Name PrintUseTxb(PrintList.ProdLabel) = txbPtProd_Name PrintUseZip(PrintList.BoxCode) = txbPtBox_Label PrintUseZip(PrintList.Warranty) = txbPtWar_Label PrintUseZip(PrintList.ProdLabel) = txbPtProd_Label SaveName(SaveList.Info) = "InfoList" SaveName(SaveList.Config) = "Config" SaveName(SaveList.Print) = "Print" ClassNumber(ClassList.Domestic_Set) = "1" ClassNumber(ClassList.Domestic_AS) = "2" ClassNumber(ClassList.Domestic_shop) = "3" ClassNumber(ClassList.OverSeas_Set) = "5" ClassNumber(ClassList.OverSeas_AS) = "6" ClassNumber(ClassList.Experience) = "7" End Sub Private Sub RegCboSetting() ModelCboSetting() ClassCboSetting() cboClear() End Sub Private Sub ClassCboSetting() cboRegClass.Items.Clear() cboRegClass.Items.Add("국내-세트") cboRegClass.Items.Add("국내-A/S") cboRegClass.Items.Add("국내-샵용") cboRegClass.Items.Add("해외-세트") cboRegClass.Items.Add("해외-A/S") cboRegClass.Items.Add("체험단") End Sub Private Sub ModelCboSetting() cboRegModel.Items.Clear() cboRegModel.Items.Add("MAXIMUM") cboRegModel.Items.Add("ALTO") cboRegModel.Items.Add("EFFECT") cboRegModel.Items.Add("MAXIMUM ALPHA") End Sub Private Sub cboRegModel_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRegModel.SelectedIndexChanged If cboRegModel.SelectedIndex > -1 Then cboRegType.Items.Clear() Select Case cboRegModel.SelectedItem Case "MAXIMUM" cboRegType.Items.Add("V1") cboRegType.Items.Add("V2") Case "ALTO" cboRegType.Items.Add("SET") Case "EFFECT" cboRegType.Items.Add("V2") cboRegType.Items.Add("V3") Case "MAXIMUM ALPHA" cboRegType.Items.Add("SET") Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select cboRegType.SelectedIndex = -1 cboRegType.Text = "SELECT!" pnRegType.Enabled = True End If End Sub Private Sub cboRegType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboRegType.SelectedIndexChanged If cboRegType.SelectedIndex > -1 Then cboRegColor.Items.Clear() Select Case cboRegModel.SelectedItem Case "MAXIMUM" Select Case cboRegType.SelectedItem Case "V1" cboRegColor.Items.Add("White") cboRegColor.Items.Add("Pink") cboRegColor.Items.Add("Mint") cboRegColor.Items.Add("Purple") cboRegColor.Items.Add("Yellow") cboRegColor.Items.Add("Black_Gold") Case "V2" cboRegColor.Items.Add("White") cboRegColor.Items.Add("Shine_Mint") cboRegColor.Items.Add("Black_Black") cboRegColor.Items.Add("Peach") cboRegColor.Items.Add("Purple") cboRegColor.Items.Add("Black_Gold") cboRegColor.Items.Add("Pink") cboRegColor.Items.Add("Yellow") Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select Case "ALTO" Select Case cboRegType.SelectedItem Case "SET" cboRegColor.Items.Add("White") cboRegColor.Items.Add("Purple") cboRegColor.Items.Add("Black_Gold") Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select Case "EFFECT" Select Case cboRegType.SelectedItem Case "V2" cboRegColor.Items.Add("White_Brown") cboRegColor.Items.Add("White_Pink") cboRegColor.Items.Add("White_Sky") Case "V3" cboRegColor.Items.Add("LineFrends_Brown") cboRegColor.Items.Add("LineFrends_Sally") Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select Case "MAXIMUM ALPHA" Select Case cboRegType.SelectedItem Case "SET" cboRegColor.Items.Add("Ruby_Red") cboRegColor.Items.Add("Topaz_Orange") cboRegColor.Items.Add("Emerald_Green") cboRegColor.Items.Add("Sappaire_Blue") cboRegColor.Items.Add("Topaz_Brown") cboRegColor.Items.Add("Sitrin_Gold") Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select cboRegColor.SelectedIndex = -1 cboRegColor.Text = "SELECT!" pnRegColor.Enabled = True End If End Sub Private Function ColorSet(cboSelect As Integer) As Boolean Select Case dgvDataSet.Rows(cboSelect).Cells(1).Value Case "MAXIMUM" ModelCode = "3" TDUseCompare = True Select Case dgvDataSet.Rows(cboSelect).Cells(2).Value Case "V1" TypeCode = "0" Select Case dgvDataSet.Rows(cboSelect).Cells(5).Value Case "White" ColorCode = "0" Case "Pink" ColorCode = "3" Case "Yellow" ColorCode = "5" Case "Mint" ColorCode = "7" Case "Purple" ColorCode = "8" Case "Black_Gold" ColorCode = "9" Case Else Return True End Select Case "V2" TypeCode = "1" Select Case dgvDataSet.Rows(cboSelect).Cells(5).Value Case "White" ColorCode = "0" Case "Shine_Mint" ColorCode = "2" Case "Black_Black" ColorCode = "4" Case "Peach" ColorCode = "6" Case "Purple" ColorCode = "8" Case "Black_Gold" ColorCode = "9" Case "Pink" ColorCode = "3" Case "Yellow" ColorCode = "5" Case Else Return True End Select Case Else Return True End Select Case "ALTO" ModelCode = "5" TDUseCompare = False Select Case dgvDataSet.Rows(cboSelect).Cells(2).Value Case "SET" TypeCode = "0" Select Case dgvDataSet.Rows(cboSelect).Cells(5).Value Case "White" ColorCode = "0" Case "Purple" ColorCode = "8" Case "Black_Gold" ColorCode = "9" Case Else Return True End Select End Select Case "EFFECT" ModelCode = "6" TDUseCompare = True Select Case dgvDataSet.Rows(cboSelect).Cells(2).Value Case "V2" TypeCode = "0" 'SET 였을 때 0 으로 고정 Select Case dgvDataSet.Rows(cboSelect).Cells(5).Value Case "White_Pink" ColorCode = "1" Case "White_Sky" ColorCode = "2" Case "White_Brown" ColorCode = "3" Case Else Return True End Select Case "V3" TypeCode = "3" 'V3 혼란스럽지 않게 3으로 고정 Select Case dgvDataSet.Rows(cboSelect).Cells(5).Value Case "LineFrends_Brown" ColorCode = "4" Case "LineFrends_Sally" ColorCode = "5" Case Else Return True End Select End Select Case "MAXIMUM ALPHA" ModelCode = "7" TDUseCompare = True Select Case dgvDataSet.Rows(cboSelect).Cells(2).Value Case "SET" TypeCode = "0" Select Case dgvDataSet.Rows(cboSelect).Cells(5).Value Case "Ruby_Red" ColorCode = "1" Case "Topaz_Orange" ColorCode = "2" Case "Emerald_Green" ColorCode = "3" Case "Sapphire_Blue" ColorCode = "4" Case "Topaz_Brown" ColorCode = "5" Case "Stirin_Gold" ColorCode = "6" Case Else Return True End Select End Select Case Else TDUseCompare = False Return True End Select Return False End Function Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load FormSetting() DefaultSetting() ModeEnable() DataSetting() ComboBoxSetting() txtManufactureDate.ReadOnly = True txtManufactureDate.BackColor = Color.Lavender UpdateDateTextBox() For i = SaveList.Info To SaveList.MaxSave - 1 OptionLoad(i) Next Print_Activate() RegCboSetting() StartCountSetting() NowRegCheck() txbPVSN.Focus() End Sub Private Sub ComboBoxSetting() ' 년도 콤보박스 (예: 2020~2030) For i As Integer = 2020 To 2030 cmbYear.Items.Add(i.ToString()) Next ' 월 콤보박스 (1~12) For i As Integer = 1 To 12 cmbMonth.Items.Add(i.ToString("00")) Next ' 일 콤보박스 (1~31) For i As Integer = 1 To 31 cmbDay.Items.Add(i.ToString("00")) Next ' 기본값 설정 (오늘 날짜) cmbYear.Text = DateTime.Now.Year.ToString() cmbMonth.Text = DateTime.Now.Month.ToString("00") cmbDay.Text = DateTime.Now.Day.ToString("00") End Sub Private Sub UpdateDateTextBox() If cmbYear.Text <> "" And cmbMonth.Text <> "" And cmbDay.Text <> "" Then txtManufactureDate.Text = cmbYear.Text & "-" & cmbMonth.Text.PadLeft(2, "0"c) & "-" & cmbDay.Text.PadLeft(2, "0"c) Else txtManufactureDate.Text = "" End If End Sub Private Sub cmbYear_SelectedIndexChanged() Handles cmbYear.SelectedIndexChanged UpdateDateTextBox() End Sub Private Sub cmbMonth_SelectedIndexChanged() Handles cmbMonth.SelectedIndexChanged UpdateDateTextBox() End Sub Private Sub cmbDay_SelectedIndexChanged() Handles cmbDay.SelectedIndexChanged UpdateDateTextBox() End Sub Private Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing If UserLogOut() Then End Else e.Cancel = True End If End Sub Private Function UserLogOut() As Boolean DBCmd = "UPDATE " & LoginDB & " SET NowState = '0' WHERE UserID = '" & IDName & "'" If DBCommand(DBCmd) Then Return True Else Return False End If End Function Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click If Runthread.IsAlive = True Then Runthread.Abort() End If If UserLogOut() Then End Else MsgBox("LogOut Fail!", vbCritical) End If End Sub Private Sub FormSetting() Const ProgramName As String = "Product Program Ver_" Const VersionNum As String = "1.1.6" Me.Text = ProgramName & VersionNum Me.Size = New Size(1920, 1050) Me.WindowState = FormWindowState.Maximized IDName = LoginForm.UserInfo.UserID dgvPrinter.DefaultCellStyle.Font = New Font("함초롱바탕", 12) NowTimer.Enabled = True End Sub Private Sub ModeEnable() rdbCSearch.Enabled = False rdbPD1.Enabled = False rdbPD2.Enabled = True rdbCheck.Enabled = False rdbManager.Enabled = False rdbRecycle.Enabled = True End Sub Private Sub ConfigSetting() chbUseBarcode.Location = New Point(45, 20) chbAutoMeasure.Location = New Point(45, 50) ckbPrintUse.Location = New Point(200, 20) ckbAutoFunc.Location = New Point(200, 50) If rdbRecycle.Checked = True Then ckbAutoFunc.Text = "자동삭제" ckbAutoFunc.Checked = True Else ckbAutoFunc.Text = "자동생성" ckbAutoFunc.Checked = True End If End Sub Private Sub chbUseBarcode_CheckedChanged(sender As Object, e As EventArgs) Handles chbUseBarcode.CheckedChanged If chbUseBarcode.Checked = True Then chbAutoMeasure.Checked = True chbAutoMeasure.Enabled = True lbPVSN.Location = New Point(265, 28) txbPVSN.Location = New Point(760, 25) btnEnter.Enabled = False btnEnter.Visible = False Else chbAutoMeasure.Checked = False chbAutoMeasure.Enabled = False lbPVSN.Location = New Point(155, 28) txbPVSN.Location = New Point(650, 25) btnEnter.Enabled = True btnEnter.Visible = True End If txbPVSN.Focus() End Sub Private Sub rdbRecycle_CheckedChanged(sender As Object, e As EventArgs) Handles rdbRecycle.CheckedChanged If rdbRecycle.Checked = True Then NowMode = ModeList.TDRecycle OptionSave(SaveList.Config) ModeChange() End If End Sub Private Sub rdbPD2_CheckedChanged(sender As Object, e As EventArgs) Handles rdbPD2.CheckedChanged If rdbPD2.Checked = True Then NowMode = ModeList.Prod_Input OptionSave(SaveList.Config) ModeChange() End If End Sub Private Sub ModeChange() TimerFalse() ConfigSetting() gbSerial.Enabled = False lbState.Visible = False pnMaxInput.Enabled = False pnMaxInput.Visible = False pnRecycle.Enabled = False pnRecycle.Visible = False Select Case NowMode Case ModeList.Prod_Input pnMaxInput.Enabled = True pnMaxInput.Visible = True gbSerial.Enabled = True lbState.Visible = True Case ModeList.TDRecycle pnRecycle.Enabled = True pnRecycle.Visible = True Case Else MsgBox("알 수 없는 동작 모드입니다. 관리자에게 문의해주세요.", vbCritical) End Select DataReset() End Sub Private Sub StartCountSetting() NowDate = Format(Now, "yyyy-MM-dd") If TodayCountCreate() Then MsgBox("수량 카운터를 생성하는 도중 오류가 발생하였습니다.", vbCritical) Exit Sub End If If cboPDInfo.SelectedIndex = -1 Then ModelCode = 3 End If If TodayCountLoad() Then MsgBox("수량 카운터를 불러오는 도중 오류가 발생하였습니다.", vbCritical) Exit Sub End If CountSetting() End Sub Private Sub NowTimer_Tick(sender As Object, e As EventArgs) Handles NowTimer.Tick lblTime.Text = Now End Sub Private Sub cmdSerial_Click(sender As Object, e As EventArgs) Handles cmdSerial.Click TimerFalse() If cmdSerial.Text = "스캔" Then cboComPort.Text = "SELECT!" LoadComportName() cmdSerial.Text = "연결" Else PortSerial.Close() If PortSerial.IsOpen = True Then PortSerial.Close() SerialStateOFF() End If Dim PortName As String = cboComPort.SelectedItem If OpenSerial(PortName) = False Then SerialStateOFF() Else OptionSave(SaveList.Config) End If cmdSerial.Text = "스캔" End If txbPVSN.Focus() End Sub Private Sub SerialStateOn() txbState.BackColor = Color.Green lbState.BackColor = Color.Green lbState.Text = "ON" lbState.Location = New Point(389, 40) End Sub Private Sub SerialStateOFF() txbState.BackColor = Color.Red lbState.BackColor = Color.Red lbState.Text = "OFF" lbState.Location = New Point(385, 40) End Sub Private Sub LoadComportName() Dim PortName() As String Dim i As Integer Try cboComPort.Items.Clear() PortName = SerialPort.GetPortNames For i = 1 To PortName.Length cboComPort.Items.Add(PortName(i - 1)) Next i cboComPort.Text = "PRESS!" Catch ex As Exception MsgBox("Port Load ERROR !!" & vbCrLf & ex.Message, vbCritical) End Try End Sub Private Function OpenSerial(SerialName As String) As Boolean Try If SerialName <> "" Then If PortSerial.IsOpen = False Then With PortSerial .PortName = SerialName .BaudRate = 230400 .DataBits = 8 .Parity = IO.Ports.Parity.None .StopBits = IO.Ports.StopBits.One .Handshake = IO.Ports.Handshake.None End With PortSerial.Open() SerialStateOn() End If Return True Else MsgBox("시리얼포트를 설정해주세요!" & vbCrLf & "", vbCritical, "DUALSONIC T/D Selecter Tester Manager") Return False End If Catch ex As Exception MsgBox("COM 포트 연결 ERROR !!" & vbCrLf & ex.Message, vbCritical) Return False End Try End Function Private Sub btnEnter_Click(sender As Object, e As EventArgs) Handles btnEnter.Click Dim SearchData As String = txbPVSN.Text If SearchData.Replace(" ", "") = "" Then MsgBox("검색할 TD 번호를 입력하여 주십시오.", vbExclamation) GoTo FailFunc End If Select Case NowMode Case ModeList.Prod_Input TimerFalse() ProdInputFunc(sender, e, SearchData) Case ModeList.TDRecycle TDRecycleFunc(sender, e, SearchData) Case Else MsgBox("잘못된 루트입니다.", vbCritical) End Select Exit Sub FailFunc: txbPVSN.BackColor = Color.Red txbPVSN.Text = String.Empty txbPVSN.Focus() End Sub Private Function SerialUseCheck() As Boolean If txbNowNum.Text = "" Or txbNowNum.Text = "0" Or txbNowNum.Text = String.Empty Then MsgBox("시리얼 번호를 불러올 수 없습니다.", vbCritical) Return True Else ProdCode = txbNowNum.Text End If Dim FrontSerial As String = Mid(ProdCode, 1, 3) Dim BackSerial As String = Mid(ProdCode, 4, 3) SerialNum = ModelCode & TypeCode & Format(Now, "yyMM") & BackSerial & FrontSerial If DBSerialCheck() Then Return False Else MsgBox("생성 할 시리얼 번호 " & SerialNum & "은 이미 존재 합니다.", vbCritical) Return True End If End Function 'Private Function SerialUseCheck() As Boolean ' Const ReGen As Int16 = 5 ' Dim SearchData As String = ClassCode & ColorCode ' RichTextBox1.AppendText("SearchData :" & SearchData & vbCrLf) ' Dim rdNum As Random = New Random ' For i = 1 To ReGen ' If SerialCompare(SearchData) Then ' ProdCode = NextSerialCheck(SearchData) ' If ProdCode = "0" Then ' MsgBox("시리얼 번호 확인 중 오류가 발생하였습니다.", vbCritical) ' Return True ' End If ' Else ' ProdCode = SearchData & "0000" ' End If ' ProdCode = Val(ProdCode) + i ' RichTextBox1.AppendText("ProdCode :" & ProdCode & vbCrLf) ' Dim FrontSerial As String = Mid(ProdCode, 1, 3) ' RichTextBox1.AppendText("FrontSerial :" & FrontSerial & vbCrLf) ' Dim BackSerial As String = Mid(ProdCode, 4, 3) ' RichTextBox1.AppendText("BackSerial :" & BackSerial & vbCrLf) ' SerialNum = ModelCode & TypeCode & Format(Now, "yyMM") & BackSerial & FrontSerial ' RichTextBox1.AppendText("SerialNum :" & SerialNum & vbCrLf) ' Dim NumUse As Boolean = False ' For chk = 0 To 2 ' If DBSerialCheck() Then ' NumUse = True ' Else ' NumUse = False ' Exit For ' End If ' Thread.Sleep(rdNum.Next(50, 100)) ' Next ' If NumUse = True Then ' If DBPreemptSet() Then ' Return False ' End If ' End If ' Next ' MsgBox("시리얼 번호를 설정할 수 없습니다.", vbCritical) ' Return True 'End Function 'Private Function DBPreemptSet() As Boolean ' DBCmd = "UPDATE " & ApplyCartDB & " SET Product_SN = '" & SerialNum & "', Ct_SN = '" & ProdCode & "' WHERE PV_SN = '" & TDData(SearchList.Serial) & "'" ' If DBCommand(DBCmd) Then ' Return True ' Else ' Return False ' End If 'End Function Private Function DBSerialCheck() As Boolean If TDUseCompare = True Then DBCmd = "SELECT COUNT(NUMBER) FROM " & ApplyCartDB & " WHERE Product_SN = '" & SerialNum & "'" Else DBCmd = "SELECT COUNT(NUMBER) FROM " & ApplyNonTDDB & " WHERE Product_SN = '" & SerialNum & "'" End If Dim UseCheck As String = DBQueryScalar(DBCmd) If UseCheck = 0 Then Return True Else Return False End If End Function Private Function SerialCompare(FrontCode As String) As Boolean DBCmd = "SELECT COUNT(Ct_SN) FROM " & ApplyCartDB & " WHERE Ct_Manufacture_Year = " & Format(Now, "yy") & " AND Ct_Manufacture_Month = " & Format(Now, "MM") & " AND Ct_SN IS not NULL AND Product_SN LIKE '" & ModelCode & TypeCode & "%' AND Ct_SN LIKE '" & FrontCode & "%'" RichTextBox1.AppendText("DBCmd FULL :" & DBCmd & vbCrLf) Dim SerialUse As Integer = DBQueryScalar(DBCmd) RichTextBox1.AppendText("SerialUse :" & SerialUse & vbCrLf) If SerialUse = 0 Then Return False Else Return True End If End Function 'Private Function NextSerialCheck(FrontCode As String) As String ' Dim UseSerial As String = String.Empty ' Dim NewSerialUse As Boolean = True ' Dim NowNumber As String = String.Empty ' DBCmd = "SELECT b.Ct_SN FROM (SELECT Ct_SN FROM " & ApplyCartDB & " WHERE Ct_Manufacture_Year = " & Format(Now, "yy") & " AND Ct_Manufacture_Month = " & Format(Now, "MM") & " AND Ct_SN IS not NULL AND Product_SN LIKE '" & ModelCode & TypeCode & "%' AND Ct_SN LIKE '" & FrontCode & "%' ORDER BY Ct_SN DESC LIMIT 5) AS b ORDER BY b.Ct_SN ASC LIMIT 5" ' RichTextBox1.AppendText("DBCmd FULL :" & DBCmd & vbCrLf) ' If DBQueryReader(DBCmd) Then ' For i = 0 To sqlDataQuery.Length - 1 ' UseSerial = sqlDataQuery(i) ' If i = 0 Then ' NowNumber = UseSerial ' Else ' Dim CheckData As String = UseSerial - NowNumber ' If CheckData <> 1 Then ' Exit For ' Else ' NowNumber = UseSerial ' End If ' End If ' Next ' Return NowNumber ' Else ' Return "NULL" ' End If 'End Function Private Sub ProdInputFunc(sender As Object, e As EventArgs, SearchData As String) StepReset() ValueReset() If cboPDInfo.SelectedIndex = -1 Then MsgBox("제품 설정을 선택하지 않았습니다. 선택하여 주십시오.", vbExclamation) GoTo FailFunc End If If PortSerial.IsOpen = False Then MsgBox("통신 포트를 설정하지 않았습니다. 연결하여 주십시오.", vbExclamation) GoTo FailFunc End If If ckbAutoFunc.Checked = True Then If SearchData <> "[START]" Then MsgBox("잘못된 시작 코드입니다. 확인하여 주십시오.", vbExclamation) GoTo FailFunc End If TraySerialSetting() Else Const SearchLength As Int16 = 12 If SearchData.Length <> SearchLength Then MsgBox("잘못된 제품 코드입니다. 확인하여 주십시오.", vbExclamation) GoTo FailFunc End If txbPDNum.Text = SearchData SerialNum = SearchData If DBSerialCheck() = False Then If RePrintCheck() Then Print_Activate() Dim RePrForm As RePrintForm = New RePrintForm RePrForm.Visible = False RePrForm.ShowDialog() GoTo RePrintOk End If End If End If RunStateFunc("제품 연결 대기", Color.Orange) ThreadStop = False Runthread = New Thread(AddressOf ThreadPlay) Runthread.IsBackground = True Runthread.Start() Exit Sub RePrintOk: RunStateFunc("재인쇄 완료", Color.Green) Exit Sub FailFunc: RunStateFunc("실 패", Color.Red) End Sub Private Function RePrintCheck() As Boolean If TDUseCompare = True Then DBCmd = "SELECT TestStep FROM " & ApplyCartDB & " WHERE Product_SN = '" & SerialNum & "'" Else DBCmd = "SELECT TestStep FROM " & ApplyNonTDDB & " WHERE Product_SN = '" & SerialNum & "'" End If Dim StepCheck As String = DBQueryScalar(DBCmd) If StepCheck = "False" Then Return False End If If StepCheck = "31" Then Return True End If Return False End Function Private Sub ValueReset() ProdCode = String.Empty SerialNum = String.Empty ThreadSwitch = True ErrorData = False End Sub Private Sub ThreadPlay() Const RunLimitMax As Int16 = 10 Dim RunLimit As Int16 = 0 Dim LimitFail As Boolean = False SerialDelegateFunc = New SerialDelegate(AddressOf ThreadFunc) While ThreadSwitch If ThreadStop = True Then '' 초기화 누를 시 강제 탈출하도록 ThreadSwitch = False Exit While End If If RunLimit = RunLimitMax Then ThreadSwitch = False LimitFail = True Exit While End If Me.Invoke(SerialDelegateFunc) Thread.Sleep(1000) RunLimit += 1 End While If LimitFail = True Then SerialDelegateFunc = New SerialDelegate(AddressOf ThreadStateFunc) Me.Invoke(SerialDelegateFunc) End If End Sub Private Sub ThreadStateFunc() RunStateFunc("시간 초과", Color.Red) End Sub Private Sub ThreadFunc() Select Case NowMode Case ModeList.Prod_Input If IsNumeric(ShotSearch()) Then If ckbOpAlto.Checked = False Then Dim SerialCode As String = TDCodeSearch() If SerialCode = "1" Then MsgBox("제품과의 연결이 올바르지 않습니다. 다시 시도하여 주십시오.", vbCritical) GoTo ComErr ElseIf SerialCode = "0" Then MsgBox("TD 시리얼 번호가 존재하지 않습니다. TD 시리얼 번호를 등록하여 주십시오.", vbCritical) ErrorData = True GoTo DataErr End If If TDExist(SerialCode) Then ErrorData = True GoTo DataErr End If If TDUseCompare = True Then If TDSearch(SerialCode) Then ErrorData = True GoTo DataErr End If For i = SearchList.TestStep To SearchList.maxList - 1 If i = SearchList.TestStep Then TDDataTxb(i).Text = TestStepParsing() If TDDataTxb(i).Text = "NULL" Then TDDataTxb(i).BackColor = Color.Red Else TDDataTxb(i).BackColor = Color.Green End If Else TDDataTxb(i).Text = TDData(i) End If Next Else TDData(SearchList.Serial) = SerialCode DBCmd = "SELECT TestStep FROM " & ApplyNonTDDB & " WHERE PV_SN = '" & TDData(SearchList.Serial) & "'" TDData(SearchList.TestStep) = DBQueryScalar(DBCmd) TDDataTxb(SearchList.TestStep).Text = TestStepParsing() For i = SearchList.TestStep To SearchList.maxList - 1 If i <> SearchList.Serial Then TDDataTxb(i).Text = "확인" Else TDDataTxb(i).Text = TDData(SearchList.Serial) End If Next End If Else TDData(SearchList.Serial) = txbTDNum.Text For i = SearchList.TestStep To SearchList.maxList - 1 If i <> SearchList.Serial Then TDDataTxb(i).Text = "확인" Else TDDataTxb(i).Text = TDData(SearchList.Serial) End If Next End If RunTimer.Enabled = True GoTo FinishFunc End If End Select Exit Sub DataErr: RunStateFunc("데이터 에러", Color.Red) If ErrorData = True Then If TodayCountSet(False) Then RunStateFunc("D 수량 에러", Color.Red) End If End If GoTo FinishFunc ComErr: RunStateFunc("통신 에러", Color.Red) FinishFunc: ThreadSwitch = False End Sub Private Sub RunTimer_Tick(sender As Object, e As EventArgs) Handles RunTimer.Tick Dim ConfigStr As String If ThreadSwitch = False Then RunTimer.Enabled = False If ckbOpAlto.Checked = False Then If txbTDNum.Text.Length = TDMaxLength Then If Not (ModelCode = 6 And (Val(TDData(SearchList.TestStep)) = 21 Or Val(TDData(SearchList.TestStep)) = 25)) Then If Val(TDData(SearchList.TestStep)) <> 23 And Val(TDData(SearchList.TestStep)) <> 27 And Val(TDData(SearchList.TestStep)) <> 30 And Val(TDData(SearchList.TestStep)) <> 32 And Val(TDData(SearchList.TestStep)) <> 41 Then If Val(TDData(SearchList.TestStep)) > 29 Then RunStateFunc("중복 처리", Color.Red) ErrorData = True GoTo FinishFunc Else RunStateFunc("공정 순서 불량", Color.Red) ErrorData = True GoTo FinishFunc End If End If End If If TDUseCompare = True Then ConfigStr = FreqPowerSearch() If ConfigStr = "NULL" Or ConfigStr = "FAIL" Then FreqPowerReg(TDData(SearchList.Frequency), TDData(SearchList.Power)) ConfigStr = FreqPowerSearch() End If If ConfigStr = "NULL" Then ErrorData = True MsgBox("잘못된 주파수가 입력되어 있습니다. 주파수 값을 확인하여 주십시오.", vbExclamation) GoTo DataFail ElseIf ConfigStr = "FAIL" Then MsgBox("주파수를 읽어오지 못했습니다. 연결을 확인하여 주십시오.", vbExclamation) GoTo DataFail End If If FreqCompare(ConfigStr) Then FreqPowerReg(TDData(SearchList.Frequency), TDData(SearchList.Power)) End If If FreqCompare(ConfigStr) Then ErrorData = True GoTo LoadFail End If TDDataTxb(SearchList.Frequency).BackColor = Color.Green TDDataTxb(SearchList.Power).BackColor = Color.Green End If ConfigStr = FirmWareCheck() If ConfigStr = "NULL" Then MsgBox("잘못된 펌웨어가 입력되어 있습니다. 값을 확인하여 주십시오.", vbExclamation) ErrorData = True GoTo LoadFail ElseIf ConfigStr = "FAIL" Then MsgBox("펌웨어를 읽어오지 못했습니다. 연결을 확인하여 주십시오.", vbExclamation) GoTo LoadFail Else txbPDVersion.Text = ConfigStr End If RunStateFunc("정보 입력중", Color.Lime) If ckbAutoFunc.Checked = True Then If SerialUseCheck() Then GoTo LoadFail End If txbPDNum.Text = SerialNum Else SerialNum = txbPDNum.Text Dim FrontSetSerial As String = Mid(SerialNum, 7, 3) Dim BackSetSerial As String = Mid(SerialNum, 10, 3) ProdCode = BackSetSerial & FrontSetSerial End If PrintFunc() If ProdRegData(txbPDCP.Text, txbPDCC.Text, txbPDAgency.Text) Then If ShotReg(0) Then If ShotSearch() = "False" Then If DBProdReg(txbPDCP.Text, txbPDCC.Text, txbPDAgency.Text, 0) Then If TraySuccess() Then If TodayCountSet(True) Then MsgBox("데이터베이스 수량 카운트 도중 오류가 발생하였습니다.", vbCritical) GoTo LoadFail End If RunStateFunc("입력 완료", Color.Green) GoTo FinishFunc Else MsgBox("데이터베이스에 Tray 내용을 등록하는 도중 오류가 발생하였습니다.", vbCritical) GoTo LoadFail End If Else MsgBox("데이터베이스에 등록하는 도중 오류가 발생하였습니다.", vbCritical) GoTo LoadFail End If Else MsgBox("샷 수 정보 확인 실패 !", vbCritical) MsgBox("통신 포트 연결을 확인하세요", vbCritical) GoTo LoadFail End If Else MsgBox("샷 정보 입력 실패 !", vbCritical) GoTo LoadFail End If Else MsgBox("시리얼 정보 입력 실패 !", vbCritical) GoTo LoadFail End If Else txbTDNum.BackColor = Color.Red MsgBox("잘못된 TD 번호가 입력되어 있습니다. TD 번호를 재입력하여 주십시오.", vbExclamation) GoTo FinishFunc End If Else RunStateFunc("정보 입력중", Color.Lime) PrintFunc() If ProdRegData(txbPDCP.Text, txbPDCC.Text, txbPDAgency.Text) Then If DBProdRegAlto(txbPDNum.Text, txbPDCP.Text, txbPDCC.Text, txbPDAgency.Text, 0) Then If TodayCountSet(True) Then MsgBox("데이터베이스 수량 카운트 도중 오류가 발생하였습니다.", vbCritical) GoTo LoadFail End If RunStateFunc("입력 완료", Color.Green) GoTo FinishFunc Else MsgBox("데이터베이스에 등록하는 도중 오류가 발생하였습니다.", vbCritical) GoTo LoadFail End If Else MsgBox("시리얼 정보 입력 실패 !", vbCritical) GoTo LoadFail End If End If GoTo FinishFunc End If Exit Sub DataFail: TDDataTxb(SearchList.Frequency).BackColor = Color.Red TDDataTxb(SearchList.Power).BackColor = Color.Red LoadFail: RunStateFunc("입력 실패", Color.Red) If ErrorData = True Then If TodayCountSet(False) Then If DBProdFailReg() Then RunStateFunc("T 수량 에러", Color.Red) End If End If End If FinishFunc: NowRegCheck() End Sub Private Function TraySuccess() As Boolean Dim TrayOkNg As Boolean = False For i = 0 To TrayData.GetLength(1) - 1 If TrayData(TrayDataList.NumData, i) = txbNowNum.Text Then Dim DBNum As Int16 = i + 1 DBCmd = "UPDATE " & InfoRegStateDB & " SET Tray" & DBNum & "State = '" & Abs(Val(True)) & "' WHERE UserID = '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & Format(Now, "yy") & "' AND CreateMonth = '" & Format(Now, "MM") & "'" If DBCommand(DBCmd) Then Return True End If End If Next Return False End Function Public Sub PrintFunc() If ckbPrintUse.Checked = True Then Dim PrintThread As Thread = New Thread(New ParameterizedThreadStart(AddressOf PrintRun)) PrintThread.IsBackground = True PrintThread.Start(SerialNum) End If End Sub Private Function DBProdReg(Factory As String, Country As String, Agency As String, ShotCount As String) As Boolean Dim DBCheck As String = String.Empty If TDData(SearchList.TestStep) = "41" Then If TDUseCompare = True Then DBCmd = "SELECT PV_SN FROM " & ApplyCartDB & " WHERE Product_SN = '" & SerialNum & "'" Else DBCmd = "SELECT PV_SN FROM " & ApplyNonTDDB & " WHERE Product_SN = '" & SerialNum & "'" End If Dim PVSN As String = DBQueryScalar(DBCmd) If PVSN = "False" Then MsgBox("제품 시리얼 번호에 등록된 TD 시리얼 번호를 검색하는 도중 오류가 발생하였습니다.", vbCritical) Return True End If If PVSN <> TDData(SearchList.Serial) Then MsgBox("제품 시리얼 번호에 등록된 TD 시리얼 번호가 저장된 시리얼 번호와 다릅니다.", vbCritical) Return True End If DBCmd = "UPDATE " & ApplyReturnDB & " SET DataRegDate = '" & Format(Now, "yyyy-MM-dd") & "', DataRegTime = '" & Format(Now, "HH:mm:ss") & "' WHERE Product_SN = '" & SerialNum & "' AND ReturnCount = (SELECT MAX(ReturnCount) FROM " & ApplyReturnDB & " WHERE Product_SN = '" & SerialNum & "')" If DBCommand(DBCmd) = False Then Return True End If End If If TDUseCompare = True Then DBCheck = "UPDATE " & ApplyCartDB & " SET Product_SN = null WHERE PV_SN = '" & txbTDNum.Text & "'" DBCmd = "UPDATE " & ApplyCartDB & " SET TestStep = '31', Product_SN = '" & SerialNum & "', Ct_Manufacture_Name='" & Factory & "', Ct_Manufacture_Year='" & Format(Now, "yy") & "', Ct_Manufacture_Month='" & Format(Now, "MM") & "', Ct_SN='" & ProdCode & "', Ct_Model='" & txbPDModel.Text & "', Ct_Type='" & txbPDType.Text & "', Ct_Abroad='" & Country & "', Ct_Agency='" & Agency & "',Ct_Max_ShotCnt = '" & ShotCount & "', Ct_Remain_ShotCnt = '" & ShotCount & "', P3_DateTime = '" & Format(Now, "yyyy-MM-dd HH:mm:ss") & "', Manufacture_Date ='" & txtManufactureDate.Text & "' WHERE PV_SN = '" & txbTDNum.Text & "'" Else DBCheck = "UPDATE " & ApplyNonTDDB & " SET Product_SN = null WHERE PV_SN = '" & txbTDNum.Text & "'" DBCmd = "UPDATE " & ApplyNonTDDB & " SET TestStep = '31', Product_SN = '" & SerialNum & "', Ct_Manufacture_Name='" & Factory & "', Ct_Manufacture_Year='" & Format(Now, "yy") & "', Ct_Manufacture_Month='" & Format(Now, "MM") & "', Ct_SN='" & ProdCode & "', Ct_Model='" & txbPDModel.Text & "', Ct_Type='" & txbPDType.Text & "', Ct_Abroad='" & Country & "', Ct_Agency='" & Agency & "', P3_DateTime = '" & Format(Now, "yyyy-MM-dd HH:mm:ss") & "', Manufacture_Date ='" & txtManufactureDate.Text & "' WHERE PV_SN = '" & txbTDNum.Text & "'" End If If DBCommand(DBCheck) Then If DBCommand(DBCmd) Then If TDUseCompare = True Then DBCmd = "SELECT TestStep FROM " & ApplyCartDB & " Where Product_SN = '" & SerialNum & "'" Else DBCmd = "SELECT TestStep FROM " & ApplyNonTDDB & " Where Product_SN = '" & SerialNum & "'" End If If DBQueryScalar(DBCmd) = "31" Then Return True End If Else MsgBox("DB Update 도중 오류 발생 !", vbCritical) Return True End If Else MsgBox("DB NULL 변경 오류 발생 !", vbCritical) Return True End If Return False End Function Private Function DBProdRegAlto(ProdSerial As String, Factory As String, Country As String, Agency As String, ShotCount As String) As Boolean Dim DBSerial As String = Mid(ProdSerial, 10, 3) & Mid(ProdSerial, 7, 3) DBCmd = "INSERT INTO " & ApplyNonTDDB & "(TestStep,Product_SN,Ct_Manufacture_Name,Ct_Manufacture_Year,Ct_Manufacture_Month,Ct_SN,Ct_Model,Ct_Type,Ct_Abroad,Ct_Agency,P3_DateTime) VALUES('31','" & ProdSerial & "','" & Factory & "','" & Format(Now, "yy") & "','" & Format(Now, "MM") & "','" & DBSerial & "','" & txbPDModel.Text & "','" & txbPDType.Text & "','" & Country & "','" & Agency & "','" & Format(Now, "yyyy-MM-dd HH:mm:ss") & "')" If DBCommand(DBCmd) Then DBCmd = "SELECT TestStep FROM " & ApplyNonTDDB & " Where Product_SN = '" & ProdSerial & "'" If DBQueryScalar(DBCmd) = "31" Then Return True End If End If Return False End Function Private Function DBProdFailReg() As Boolean DBCmd = "UPDATE " & ApplyCartDB & " SET TestStep = '30',Product_SN = NULL, Ct_SN = null, P3_DateTime = '" & Format(Now, "yyyy-MM-dd HH:mm:ss") & "' WHERE PV_SN = '" & txbTDNum.Text & "'" If DBCommand(DBCmd) Then DBCmd = "SELECT TestStep FROM " & ApplyCartDB & " Where PV_SN = '" & txbTDNum.Text & "'" If DBQueryScalar(DBCmd) = "30" Then Return True End If End If Return False End Function Private Function CreateSerialCompare(SerialNum As String) As Boolean DBCmd = "SELECT COUNT(NUMBER) FROM " & ApplyCartDB & " WHERE Product_SN = '" & SerialNum & "'" Dim CompareData As String = DBQueryScalar(DBCmd) If CompareData > 0 Then Return False End If Return True End Function Private Function SerialNumberSet() As String Const SearchLength As Int16 = 2 Const SerialLength As Int16 = 6 Dim SearchData As String = ClassCode & ColorCode If SearchData.Length <> SearchLength Then MsgBox("잘못된 시리얼번호 타입입니다.", vbCritical) Return "FAIL" End If DBCmd = "SELECT Ct_SN FROM " & ApplyCartDB & " WHERE Ct_Manufacture_Year = " & Format(Now, "yy") & " AND Ct_Manufacture_Month = " & Format(Now, "MM") & " AND Ct_SN IS not NULL AND Ct_SN LIKE '" & SearchData & "%' ORDER BY Ct_SN DESC LIMIT 1" Dim ScalarData = DBQueryScalar(DBCmd) If ScalarData = "False" Then Return "FAIL" End If If ScalarData = "" Or ScalarData.Length <> SerialLength Then ScalarData = SearchData & "0000" End If Return ScalarData End Function Private Function TDStepCheck(TDName As String) As String If TDUseCompare = True Then DBCmd = "SELECT TestStep FROM " & ApplyCartDB & " WHERE PV_SN = '" & TDName & "'" Else DBCmd = "SELECT TestStep FROM " & ApplyNonTDDB & " WHERE PV_SN = '" & TDName & "'" End If Return DBQueryScalar(DBCmd) End Function Private Function ProdRegData(Factory As String, Country As String, Agency As String) As Boolean Const Commander As String = "wrsconf1" Dim retVal As String Dim ProdCode As String = Mid(SerialNum, 1, 2) Dim ProdDate As String = Mid(SerialNum, 3, 4) Dim FrontSetSerial As String = Mid(SerialNum, 7, 3) Dim BackSetSerial As String = Mid(SerialNum, 10, 3) Dim UseSerial As String = ProdDate & BackSetSerial & FrontSetSerial tmpCmdMessage = "[" & Commander & " " & Factory & "," & UseSerial & "," & ProdCode & "," & Country & "," & Agency & "]" + vbCrLf If SendData(tmpCmdMessage) Then Return False End If retVal = PollingReceiveData(2000) If retVal <> Factory.ToLower & "," & UseSerial & "," & ProdCode & "," & Country & "," & Agency Then Return False End If Return True End Function Private Function FirmWareCheck() As String Const Commander As String = "dsfwver" Dim retval As String tmpCmdMessage = "[" & Commander & "]" + vbCrLf If SendData(tmpCmdMessage) Then Return "FAIL" End If retval = PollingReceiveData(1000) If InStr(1, retval, ".") > 0 Then Return retval Else Return "NULL" End If End Function Private Function FreqCompare(FreqData As String) As Boolean If UBound(Split(FreqData, ",")) = 1 Then Dim FreqValue As String = Mid(FreqData, 1, InStr(FreqData, ",") - 1) Dim PowerValue As String = Mid(FreqData, InStr(FreqData, ",") + 1, FreqData.Length) If FreqValue = TDData(SearchList.Frequency) Then If PowerValue = TDData(SearchList.Power) Then Return False End If End If Return True Else MsgBox("잘못된 형식의 주파수 값입니다. 연결을 확인하여 주십시오.", vbExclamation) Return True End If End Function Private Function TDCodeSearch() As String Dim retVal As String tmpCmdMessage = "settdsn" cmdMessage = "[" & tmpCmdMessage & "]" + vbCrLf If SendData(cmdMessage) Then Return "1" End If retVal = PollingReceiveData(500) If retVal.Length = TDMaxLength Then Return retVal Else Return "0" End If End Function Private Function FreqPowerReg(Freq As String, Power As String) As String Const Commander As String = "settdcnf" Dim Retval As String tmpCmdMessage = "[" & Commander & " " & Freq & "," & Power & "]" + vbCrLf If SendData(tmpCmdMessage) Then Return "FAIL" End If Retval = PollingReceiveData(500) If InStr(1, Retval, ",") > 0 Then Return Retval Else Return "NULL" End If End Function Private Function FreqPowerSearch() As String Const Commander As String = "settdcnf" Dim Retval As String tmpCmdMessage = "[" & Commander & "]" + vbCrLf If SendData(tmpCmdMessage) Then Return "FAIL" End If Retval = PollingReceiveData(500) If InStr(1, Retval, ",") > 0 Then Return Retval Else Return "NULL" End If End Function Private Function ShotReg(shot As Integer) As String Const Commander As String = "shotconf" Dim retval As String tmpCmdMessage = "[" & Commander & " " & shot & "]" + vbCrLf If SendData(tmpCmdMessage) Then Return False End If retval = PollingReceiveData(1000) If retval = shot.ToString Then Return True End If Return False End Function Private Function ShotSearch() As String Const Commander As String = "shotconf" Dim RetVal As String = "-1" tmpCmdMessage = "[" & Commander & "]" + vbCrLf If SendData(tmpCmdMessage) Then Return "False" End If RetVal = PollingReceiveData(1500) Return RetVal End Function Private Function PollingReceiveData(RdTimeout As Long) As String Try rxMessage = "" If PortSerial.IsOpen = True Then PortSerial.ReadTimeout = RdTimeout rxMessage = PortSerial.ReadLine() Return ParsingData(False) Else ThreadSwitch = False MsgBox("통신 포트가 열리지 않았습니다.", vbCritical) Return True End If Catch ex As Exception Return Err.Description End Try End Function Private Function ParsingData(CmdInclude As Boolean) As String Dim cmdStr As String Dim cmdVal(0 To 6) As String Dim i As Integer Try cmdStr = "0" If rxMessage <> "" Then cmdMessage = "" If Mid(rxMessage, 1, 1) = "[" Then cmdMessage = Mid(rxMessage, 2, Len(rxMessage)) cmdStr = Mid(cmdMessage, 1, (InStr(rxMessage, " ") - 2)) cmdMessage = Mid(rxMessage, InStr(rxMessage, " ") + 1, Len(cmdMessage)) For i = 1 To 5 If InStr(cmdMessage, ",") <> 0 Then cmdVal(i) = Mid(cmdMessage, 1, InStr(cmdMessage, ",") - 1) cmdMessage = Mid(cmdMessage, InStr(cmdMessage, ",") + 1, Len(cmdMessage)) ElseIf InStr(cmdMessage, "]") <> 0 Then cmdVal(i) = Mid(cmdMessage, 1, InStr(cmdMessage, "]") - 1) Else Exit For End If Next i rxMessage = "" Select Case cmdStr Case "dsfwver" cmdStr = cmdVal(1) Return cmdStr Case "freqconf" cmdStr = cmdVal(1) Return cmdStr Case "settdcnf" cmdStr = (cmdVal(1) & "," & cmdVal(2)) Return cmdStr Case "wrsconf1" cmdStr = cmdVal(1) & "," & cmdVal(2) & "," & cmdVal(3) & "," & cmdVal(4) & "," & cmdVal(5) Return cmdStr Case "settdsn" cmdStr = cmdVal(1) Return cmdStr Case "resetinf" cmdStr = cmdVal(1) Return cmdStr Case "rdsconf1" cmdStr = cmdVal(1) & "," & cmdVal(2) & "," & cmdVal(3) & "," & cmdVal(4) & "," & cmdVal(5) Return cmdStr Case "shotconf" cmdStr = cmdVal(1) Return cmdStr Case "setdepth" cmdStr = cmdVal(1) Return cmdStr Case "setmotor" cmdStr = cmdVal(1) & "," & cmdVal(2) & "," & cmdVal(3) & "," & cmdVal(4) & "," & cmdVal(5) Return cmdStr Case Else Return "Else" rxMessage = "" End Select End If rxMessage = "" Return True Else Return False End If Catch ex As Exception rxMessage = "" Return Err.Description End Try End Function Private Function SendData(SendMessage As String) As Boolean Try If PortSerial.IsOpen = True Then PortSerial.DiscardInBuffer() PortSerial.DiscardOutBuffer() If PortSerial.BytesToRead Then PortSerial.DiscardInBuffer() End If PortSerial.WriteTimeout = -1 PortSerial.WriteLine(SendMessage) Else ThreadSwitch = False MsgBox("통신 포트가 열리지 않았습니다.") Return True End If Catch ex As Exception Return True End Try Return False End Function Private Sub TDRecycleFunc(sender As Object, e As EventArgs, SearchData As String) DataReset() SerialNum = String.Empty If SearchData.Length > TDMaxLength Or SearchData.Length < TDMinLength Then MsgBox("잘못된 TD 번호입니다. 인쇄된 번호를 확인하여 주십시오.", vbExclamation) GoTo FailFunc End If If TDExist(SearchData) Then MsgBox("TD 데이터가 존재하지 않습니다. 확인하여 주십시오.", vbExclamation) GoTo FailFunc End If If TDSearch(SearchData) Then GoTo FailFunc End If For i = SearchList.TestStep To SearchList.maxList - 1 If i = SearchList.TestStep Then TDDataTxb(i).Text = TestStepParsing() If TDDataTxb(i).Text = "NULL" Then TDDataTxb(i).BackColor = Color.Red Else TDDataTxb(i).BackColor = Color.Green End If Else TDDataTxb(i).Text = TDData(i) End If Next SerialNum = SearchData If ckbAutoFunc.Checked = True Then btnReDel_Click(sender, e) Else RunStateFunc("성 공", Color.Green) End If Exit Sub FailFunc: RunStateFunc("실 패", Color.Red) End Sub Private Function TDSearch(SearchData As String) As Boolean Try DBCmd = "SELECT TestStep,Ct_Power,Ct_Motor_Lv,PV_SN,PV_Date,PV_Frequency,QC_Date,QC_Capacitor,QC_Grade FROM " & ApplyCartDB & " WHERE PV_SN = '" & SearchData & "'" If DBQueryReader(DBCmd) Then For i = SearchList.TestStep To SearchList.maxList - 1 TDData(i) = sqlDataQuery(i) Next Else MsgBox("TD 데이터가 존재하지 않습니다.", vbExclamation) Return True End If Return False Catch ex As Exception MsgBox("TD 데이터를 불러오는 도중 오류가 발생하였습니다. :: " & vbCrLf & ex.Message, vbCritical) Return True End Try End Function Private Function TDExist(SearchData As String) As Boolean Try If TDUseCompare = True Then DBCmd = "SELECT COUNT(NUMBER) FROM " & ApplyCartDB & " WHERE PV_SN = '" & SearchData & "'" Else DBCmd = "SELECT COUNT(NUMBER) FROM " & ApplyNonTDDB & " WHERE PV_SN = '" & SearchData & "'" End If Dim DataExist As Int16 = DBQueryScalar(DBCmd) If DataExist = 1 Then Return False Else Return True End If Catch ex As Exception MsgBox("TD 데이터 확인 중 오류가 발생하였습니다. :: " & vbCrLf & ex.Message, vbCritical) Return True End Try End Function Private Sub StepReset() For i = SearchList.TestStep To SearchList.maxList - 1 TDData(i) = String.Empty With TDDataTxb(i) .Text = "대기" .BackColor = Color.White End With Next With txbPDNum .Text = "대기" .Font = New Font("함초롱바탕", 48, FontStyle.Bold) .ForeColor = Color.Black End With End Sub Private Sub DataReset() StepReset() If NowMode = ModeList.Prod_Input Then With txbPDModel .Text = "대기" .BackColor = Color.White .ForeColor = Color.Black End With With txbPDType .Text = "대기" .BackColor = Color.White .ForeColor = Color.Black End With With txbPDCC .Text = "대기" .BackColor = Color.White .ForeColor = Color.Black End With With txbPDAgency .Text = "대기" .BackColor = Color.White .ForeColor = Color.Black End With With txbPDCP .Text = "대기" .BackColor = Color.White .ForeColor = Color.Black End With With txbPDColor .Text = "대기" .BackColor = Color.White .ForeColor = Color.Black End With cboPDInfo.SelectedIndex = -1 cboPDInfo.Text = "SELECT!" End If End Sub Private Function TestStepParsing() As String Select Case TDData(SearchList.TestStep) Case "11" Return "TD 검사 합격" Case "12" Return "TD 검사 불합격" Case "13" Return "TD 검사 재측정 합격" Case "14" Return "TD 검사 재측정 불합격" Case "15" Return "재사용 TD" Case "16" Return "납땜 합격" Case "17" Return "납땜 불합격" Case "18" Return "납땜 재측정 합격" Case "19" Return "납땜 재측정 불합격" Case "21" Return "HIFU 합격" Case "22" Return "HIFU 불합격" Case "23" Return "파형검사 합격" Case "24" Return "파형검사 불합격" Case "25" Return "HIFU 재측정 합격" Case "26" Return "HIFU 재측정 불합격" Case "27" Return "파형검사 재측정 합격" Case "28" Return "파형검사 재측정 불합격" Case "30" Return "정보 입력 불합격" Case "31" Return "양산 합격" Case "32" Return "양산 합격" Case "41" Return "반품 진행" Case Else Return "NULL" End Select End Function Private Sub btnReDel_Click(sender As Object, e As EventArgs) Handles btnReDel.Click NowDate = Format(Now, "yyyy-MM-dd") NowTime = Format(Now, "HH:mm:ss") If SerialNum = String.Empty Then MsgBox("삭제할 데이터가 존재하지 않습니다. TD 데이터를 검색하여 주십시오.", vbExclamation) GoTo FailFunc End If If TestDelete(ApplyHFTestDB) Then MsgBox("삭제 도중 문제가 발생했습니다.", vbCritical) GoTo FailFunc End If If TestDelete(ApplyRFTestDB) Then MsgBox("삭제 도중 문제가 발생했습니다.", vbCritical) GoTo FailFunc End If If DeleteData() Then MsgBox("삭제 도중 문제가 발생했습니다.", vbCritical) GoTo FailFunc End If If TDData(SearchList.TestStep) <> "15" Then If TodayCountSet(True) Then GoTo FailFunc End If End If txbPVSN.Enabled = False txbPVSN.Text = "삭제 성공" txbPVSN.BackColor = Color.Green txbPVSN.Enabled = True txbPVSN.Focus() Exit Sub FailFunc: RunStateFunc("삭제 실패", Color.Red) End Sub Private Function TestDelete(DBTable As String) As Boolean DBCmd = "SELECT COUNT(PV_SN) FROM " & DBTable & " WHERE PV_SN = '" & SerialNum & "'" Dim DBResult As Int16 = DBQueryScalar(DBCmd) If DBResult > 0 Then DBCmd = "DELETE FROM " & DBTable & " WHERE PV_SN = '" & SerialNum & "' " If DBCommand(DBCmd) = False Then Return True End If End If Return False End Function Private Function DeleteData() As String DBCmd = "UPDATE " & ApplyCartDB & " SET TestStep = '15', Product_SN = NULL, Ct_Manufacture_Name = NULL, Ct_Manufacture_Year = NULL, Ct_Manufacture_Month = NULL, Ct_SN = NULL, Ct_Abroad = NULL, Ct_Agency = NULL, Ct_Frequency = NULL, Ct_Max_ShotCnt = NULL, Ct_Remain_ShotCnt = NULL, P0_Date = NULL, P0_Time = NULL, P0_Model = NULL, P0_Type = NULL, P1_Date = NULL, P1_Time = NULL, P1_Model = NULL, P1_CartType = NULL, P1_Frequency = NULL, P3_DateTime = NULL, LastQC_Date = NULL,LastQC_Time = NULL, Delete_Date = '" & NowDate & "', Delete_Time = '" & NowTime & "', Delete_TestStep = '" & TDData(SearchList.TestStep) & "' WHERE PV_SN = '" & SerialNum & "'" If DBCommand(DBCmd) Then Return False Else Return True End If End Function Private Function TodayCountUpdate() As Boolean Select Case NowMode Case ModeList.Prod_Input If ModelCode = 3 Then DBCmd = "UPDATE " & ApplyPD1CntDB & " SET PD1_InfoTotalCnt = '" & CountSelect(CountList.Total) & "', PD1_InfoMaxOk = '" & CountSelect(CountList.Success) & "', PD1_InfoMaxNg = '" & CountSelect(CountList.Fail) & "' WHERE PD1_Date = '" & NowDate & "'" ElseIf ModelCode = 5 Then DBCmd = "UPDATE " & ApplyPD1CntDB & " SET PD1_InfoTotalCnt = '" & CountSelect(CountList.Total) & "', PD1_InfoAltoOk = '" & CountSelect(CountList.Success) & "', PD1_InfoAltoNg = '" & CountSelect(CountList.Fail) & "' WHERE PD1_Date = '" & NowDate & "'" ElseIf ModelCode = 6 Then DBCmd = "UPDATE " & ApplyPD1CntDB & " SET PD1_InfoTotalCnt = '" & CountSelect(CountList.Total) & "', PD1_InfoEffectOk = '" & CountSelect(CountList.Success) & "', PD1_InfoEffectNg = '" & CountSelect(CountList.Fail) & "' WHERE PD1_Date = '" & NowDate & "'" ElseIf ModelCode = 7 Then DBCmd = "UPDATE " & ApplyPD1CntDB & " SET PD1_InfoTotalCnt = '" & CountSelect(CountList.Total) & "', PD1_InfoMaxAlphaOk = '" & CountSelect(CountList.Success) & "', PD1_InfoMaxAlphaNg = '" & CountSelect(CountList.Fail) & "' WHERE PD1_Date = '" & NowDate & "'" Else MsgBox("수량 업데이트, 잘못된 경로입니다.", vbCritical) Return True End If Case ModeList.TDRecycle DBCmd = "UPDATE " & ApplyPD1CntDB & " SET PD1_RecycleCnt = '" & CountSelect(CountList.Total) & "' WHERE PD1_Date = '" & NowDate & "'" Case Else MsgBox("수량 업데이트, 잘못된 경로입니다.", vbCritical) Return True End Select If DBCommand(DBCmd) Then Return False Else Return True End If End Function Private Function TodayCountLoad() As Boolean Select Case NowMode Case ModeList.Prod_Input If ModelCode = "3" Then DBCmd = "SELECT PD1_InfoTotalCnt,PD1_InfoMaxOk,PD1_InfoMaxNg FROM " & ApplyPD1CntDB & " WHERE PD1_Date = '" & NowDate & "'" ElseIf ModelCode = "5" Then DBCmd = "SELECT PD1_InfoTotalCnt,PD1_InfoAltoOk,PD1_InfoAltoNg FROM " & ApplyPD1CntDB & " WHERE PD1_Date = '" & NowDate & "'" ElseIf ModelCode = "6" Then DBCmd = "SELECT PD1_InfoTotalCnt,PD1_InfoEffectOk,PD1_InfoEffectNg FROM " & ApplyPD1CntDB & " WHERE PD1_Date = '" & NowDate & "'" ElseIf ModelCode = "7" Then DBCmd = "SELECT PD1_InfoTotalCnt,PD1_InfoMaxAlphaOk,PD1_InfoMaxAlphaNg FROM " & ApplyPD1CntDB & " WHERE PD1_Date = '" & NowDate & "'" Else MsgBox("수량 카운터 잘못된 경로입니다.", vbCritical) Return True End If Case ModeList.TDRecycle DBCmd = "SELECT PD1_RecycleCnt,'0','0' FROM " & ApplyPD1CntDB & " WHERE PD1_Date = '" & NowDate & "'" Case Else MsgBox("수량 카운터 잘못된 경로입니다.", vbCritical) Return True End Select If DBQueryReader(DBCmd) Then For i = 0 To CountList.maxCount - 1 CountSelect(i) = sqlDataQuery(i) Next Else Return True End If Return False End Function Private Function TodayCountCreate() As Boolean DBCmd = "SELECT COUNT(NUMBER) FROM " & ApplyPD1CntDB & " WHERE PD1_Date = '" & NowDate & "'" If DBQueryScalar(DBCmd) = 0 Then DBCmd = "INSERT INTO " & ApplyPD1CntDB & "(PD1_Date) VALUES('" & NowDate & "')" If DBCommand(DBCmd) = False Then Return True End If End If Return False End Function Private Sub RunStateFunc(OutputText As String, ApplyColor As Color) txbPVSN.Enabled = False txbPVSN.Text = OutputText txbPVSN.BackColor = ApplyColor txbPVSN.Enabled = True txbPVSN.Focus() End Sub Private Sub txbReFreq_GotFocus(sender As Object, e As EventArgs) Handles txbReFreq.GotFocus, txbReSerial.GotFocus, txbReCValue.GotFocus, txbReGrade.GotFocus, txbRePower.GotFocus, txbReMotor.GotFocus, txbReInput.GotFocus, txbReTest.GotFocus, txbReOrder.GotFocus, txbDayCount.GotFocus, txbTDNum.GotFocus, txbTDFreq.GotFocus, txbTDGrade.GotFocus, txbTDPower.GotFocus, txbTDDepth.GotFocus, txbTDIDate.GotFocus, txbTDStep.GotFocus, txbPDNum.GotFocus, txbPDModel.GotFocus, txbPDType.GotFocus, txbPDCC.GotFocus, txbPDAgency.GotFocus, txbPDCP.GotFocus, txbPDVersion.GotFocus, txbAllCount.GotFocus, txbSucCount.GotFocus, txbFailCount.GotFocus txbPVSN.Focus() txbPVSN.Select(txbPVSN.Text.Length, 0) End Sub Private Sub btnOption_Click(sender As Object, e As EventArgs) Handles btnOption.Click, btnOpExit.Click TimerFalse() If pnMain.Visible = True Then pnMain.Visible = False pnMain.Enabled = False pnOption.Visible = True pnOption.Enabled = True pnOption.Location = New Point(0, 0) pnMain.Location = New Point(1920, 0) btnPtRefresh_Click(sender, e) Else If OptionChange = True Then If MsgBox("변경된 설정이 존재합니다. 저장하시겠습니까?", vbOKCancel + vbExclamation) = MsgBoxResult.Ok Then btnOpSave_Click(sender, e) End If End If Print_Activate() pnMain.Visible = True pnMain.Enabled = True pnOption.Visible = False pnOption.Enabled = False pnMain.Location = New Point(0, 0) pnOption.Location = New Point(1920, 0) End If txbPVSN.Focus() End Sub Private Sub LoadExitReset() TimerFalse() ModelCode = String.Empty TypeCode = String.Empty ColorCode = String.Empty ClassCode = String.Empty TDUseCompare = False cboPDInfo.SelectedIndex = -1 cboPDInfo.Text = "SELECT!" With txbPDModel .Text = "대기" .Font = New Font("함초롱바탕", 26) .ForeColor = Color.Black End With With txbPDType .Text = "대기" .Font = New Font("함초롱바탕", 26) .ForeColor = Color.Black End With With txbPDCC .Text = "대기" .Font = New Font("함초롱바탕", 26) .ForeColor = Color.Black End With With txbPDAgency .Text = "대기" .Font = New Font("함초롱바탕", 26) .ForeColor = Color.Black End With With txbPDCP .Text = "대기" .Font = New Font("함초롱바탕", 26) .ForeColor = Color.Black End With With txbPDColor .Text = "대기" .Font = New Font("함초롱바탕", 26) .ForeColor = Color.Black End With With txbPDNum .Text = "대기" .Font = New Font("함초롱바탕", 48) .ForeColor = Color.Black End With End Sub Private Sub cboPDInfo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboPDInfo.SelectedIndexChanged Dim SelectData As String = cboPDInfo.SelectedIndex TimerFalse() If dgvDataSet.Rows(SelectData).Cells(0).Value = "" Or dgvDataSet.Rows(SelectData).Cells(1).Value = "" Or dgvDataSet.Rows(SelectData).Cells(2).Value = "" Or dgvDataSet.Rows(SelectData).Cells(3).Value = "" Or dgvDataSet.Rows(SelectData).Cells(4).Value = "" Then MsgBox("존재하지 않는 데이터가 존재합니다. 설정에서 확인하여 주십시오.", vbCritical) Exit Sub End If If ColorSet(SelectData) Then MsgBox("잘못된 데이터를 불러왔습니다. 설정에서 확인하여 주십시오.", vbCritical) Exit Sub End If ClassCode = dgvDataSet.Rows(SelectData).Cells(6).Value With txbPDModel .Text = dgvDataSet.Rows(SelectData).Cells(1).Value .Font = New Font("함초롱바탕", 26, FontStyle.Bold) .ForeColor = Color.Blue End With With txbPDType .Text = dgvDataSet.Rows(SelectData).Cells(2).Value .Font = New Font("함초롱바탕", 26, FontStyle.Bold) .ForeColor = Color.Blue End With With txbPDCC .Text = dgvDataSet.Rows(SelectData).Cells(3).Value .Font = New Font("함초롱바탕", 26, FontStyle.Bold) .ForeColor = Color.Blue End With With txbPDAgency .Text = dgvDataSet.Rows(SelectData).Cells(4).Value .Font = New Font("함초롱바탕", 26, FontStyle.Bold) .ForeColor = Color.Blue End With With txbPDCP .Text = txbOpCompany.Text .Font = New Font("함초롱바탕", 26, FontStyle.Bold) .ForeColor = Color.Blue End With With txbPDColor .Text = dgvDataSet.Rows(SelectData).Cells(5).Value .Font = New Font("함초롱바탕", 26, FontStyle.Bold) .ForeColor = Color.Blue End With With txbPDNum .Text = ClassCode .Font = New Font("함초롱바탕", 48, FontStyle.Bold) .ForeColor = Color.Black End With txbPVSN.Focus() End Sub Private Sub Print_Activate() For i = PrintList.BoxCode To PrintList.maxPrint - 1 If PrintUseCkb(i).Checked = True Then PrintActive(i) = True Else PrintActive(i) = False End If PrintName(i) = PrintUseTxb(i).Text PrintAddress(i) = PrintUseZip(i).Text Next PrintUseCode(PrintList.BoxCode) = txbPtBox_Val1.Text PrintUseCode(PrintList.ProdLabel) = txbPtProd_Val1.Text PrintUseText(PrintList.BoxCode) = txbPtBox_Val2.Text PrintUseText(PrintList.Warranty) = txbPtWar_Val1.Text PrintUseText(PrintList.ProdLabel) = txbPtProd_Val2.Text PrintUseDate = txbPtProd_Date.Text End Sub Private Sub btnRegReset_Click(sender As Object, e As EventArgs) Handles btnRegReset.Click txbRegName.Text = String.Empty txbRegCountry.Text = String.Empty txbRegAgency.Text = String.Empty cboClear() End Sub Private Sub cboClear() cboRegModel.SelectedIndex = -1 cboRegModel.Text = "SELECT!" cboRegType.SelectedIndex = -1 cboRegType.Text = "SELECT!" cboRegColor.SelectedIndex = -1 cboRegColor.Text = "SELECT!" cboRegClass.SelectedIndex = -1 cboRegClass.Text = "SELECT!" End Sub Private Sub btnRegOK_Click(sender As Object, e As EventArgs) Handles btnRegOK.Click If txbRegName.Text = "" Then MsgBox("구분명을 입력하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) txbRegName.Focus() Else If cboRegModel.SelectedIndex = -1 Then MsgBox("모델명을 선택하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) cboRegModel.Focus() Else If cboRegType.SelectedIndex = -1 Then MsgBox("타입명을 선택하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) cboRegType.Focus() Else If cboRegColor.SelectedIndex = -1 Then MsgBox("색상명을 선택하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) cboRegColor.Focus() Else If cboRegClass.SelectedIndex = -1 Then MsgBox("분류명을 선택하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) cboRegClass.Focus() Else If txbRegCountry.Text = "" Then MsgBox("국가코드를 입력하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) txbRegCountry.Focus() Else If txbRegAgency.Text = "" Then MsgBox("대리점코드를 입력하지 않으셨습니다. 확인하여 주십시오.", vbExclamation) txbRegAgency.Focus() Else dgvDataSet.Rows.Add(txbRegName.Text, cboRegModel.SelectedItem, cboRegType.SelectedItem, txbRegCountry.Text, txbRegAgency.Text, cboRegColor.SelectedItem, ClassNumber(cboRegClass.SelectedIndex)) txbRegName.Text = String.Empty txbRegCountry.Text = String.Empty txbRegAgency.Text = String.Empty OptionChange = True End If End If End If End If End If End If End If End Sub Private Sub txbRegCountry_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txbRegCountry.KeyPress, txbRegAgency.KeyPress If Not Char.IsDigit(e.KeyChar) And Not Char.IsControl(e.KeyChar) Then e.Handled = True End If End Sub Private Sub btnRegDel_Click(sender As Object, e As EventArgs) Handles btnRegDel.Click Dim rowNum As Integer = dgvDataSet.SelectedCells(0).RowIndex dgvDataSet.Rows.RemoveAt(rowNum) OptionChange = True End Sub Private Sub btnRegADel_Click(sender As Object, e As EventArgs) Handles btnRegADel.Click If MsgBox("모든 행을 삭제하시겠습니까?", vbOKCancel + vbExclamation) = MsgBoxResult.Ok Then dgvDataSet.Rows.Clear() OptionChange = True End If End Sub Private Sub btnOpSave_Click(sender As Object, e As EventArgs) Handles btnOpSave.Click For i = SaveList.Info To SaveList.MaxSave - 1 If OptionSave(i) Then OptionLoad(i) End If Next MsgBox("저장완료", vbInformation) OptionChange = False End Sub Private Function OptionSave(SaveType As Int16) As Boolean Try Dim SaveData As String = String.Empty Dim FilePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "\Config" If Dir(FilePath, vbDirectory) = "" Then MkDir(FilePath) End If Dim FileName As String = FilePath & "\" & SaveName(SaveType) & ".ini" Select Case SaveType Case SaveList.Info For i = 0 To dgvDataSet.Rows.Count - 2 Dim RowData As String = dgvDataSet.Rows(i).Cells(0).Value.ToString & "|" & dgvDataSet.Rows(i).Cells(1).Value.ToString & "|" & dgvDataSet.Rows(i).Cells(2).Value.ToString & "|" & dgvDataSet.Rows(i).Cells(3).Value.ToString & "|" & dgvDataSet.Rows(i).Cells(4).Value.ToString & "|" & dgvDataSet.Rows(i).Cells(5).Value.ToString & "|" & dgvDataSet.Rows(i).Cells(6).Value.ToString & "|@" SaveData = SaveData & RowData Next Case SaveList.Config SaveData = txbOpCompany.Text & "|" & nudPtCount.Value & "|" & cboComPort.SelectedItem & "|" & NowMode & "|" & ckbOpAlto.Checked & "|" & nudTray.Value & "|" & nudSerialCheck.Value & "|" Case SaveList.Print SaveData = txbPtBox_Name.Text & "|" & txbPtBox_Label.Text & "|" & txbPtBox_Val1.Text & "|" & txbPtBox_Val2.Text & "|" & txbPtWar_Name.Text & "|" & txbPtWar_Label.Text & "|" & txbPtWar_Val1.Text & "|" & txbPtProd_Name.Text & "|" & txbPtProd_Label.Text & "|" & txbPtProd_Val1.Text & "|" & txbPtProd_Val2.Text & "|" & txbPtProd_Date.Text & "|" Case Else MsgBox("잘못된 저장 데이터입니다.", vbCritical) Return False End Select If File.Exists(FileName) = True Then File.Delete(FileName) End If File.WriteAllText(FileName, SaveData, Encoding.UTF8) Return True Catch ex As Exception MsgBox("저장 도중 오류가 발생하였습니다." & vbCrLf & ex.Message, vbCritical) Return False End Try End Function Private Sub OptionLoad(LoadType As Int16) Try Dim ReadData As String = String.Empty Dim FilePath As String = System.AppDomain.CurrentDomain.BaseDirectory & "\Config" If Dir(FilePath, vbDirectory) = "" Then MkDir(FilePath) End If Dim FileName As String = FilePath & "\" & SaveName(LoadType) & ".ini" If File.Exists(FileName) Then ReadData = File.ReadAllText(FileName, Encoding.UTF8) If ReadData <> "" Then Select Case LoadType Case SaveList.Info dgvDataSet.Rows.Clear() For i = UBound(Split(ReadData, "@")) - 1 To 0 Step -1 Dim MdfData As String = Mid(ReadData, 1, InStr(ReadData, "@") - 1) Dim InfoList(UBound(Split(MdfData, "|")) - 1) ReadData = Mid(ReadData, InStr(ReadData, "@") + 1, ReadData.Length) For cnt = 0 To UBound(Split(MdfData, "|")) - 1 InfoList(cnt) = Mid(MdfData, 1, InStr(MdfData, "|") - 1) MdfData = Mid(MdfData, InStr(MdfData, "|") + 1, MdfData.Length) Next dgvDataSet.Rows.Add(InfoList) Next cboPDInfo.Items.Clear() If dgvDataSet.Rows.Count - 2 <> -1 Then For i = 0 To dgvDataSet.Rows.Count - 2 cboPDInfo.Items.Add(dgvDataSet.Rows(i).Cells(0).Value.ToString) Next LoadExitReset() End If Case SaveList.Config For i = 0 To UBound(Split(ReadData, "|")) - 1 Dim MdfData As String = Mid(ReadData, 1, InStr(ReadData, "|") - 1) ReadData = Mid(ReadData, InStr(ReadData, "|") + 1, ReadData.Length) Select Case i Case 0 txbOpCompany.Text = MdfData Case 1 If IsNumeric(MdfData) Then If MdfData < 4 And MdfData > 0 Then nudPtCount.Value = MdfData Else MsgBox("인쇄 수량 범위와 맞지 않습니다.", vbCritical) End If Else MsgBox("잘못된 인쇄 수량입니다.", vbCritical) End If Case 2 LoadComportName() Dim RunSwitch As Boolean = False For cnt = 0 To cboComPort.Items.Count - 1 cboComPort.SelectedIndex = cnt If MdfData = cboComPort.SelectedItem Then RunSwitch = True OpenSerial(MdfData) Exit For End If Next If RunSwitch = False Then cboComPort.SelectedIndex = -1 cboComPort.Text = "SELECT!" End If Case 3 Select Case MdfData Case ModeList.Prod_Input rdbPD2.Checked = True Case ModeList.TDRecycle rdbRecycle.Checked = True Case Else MsgBox("Mode Load, 잘못된 경로입니다.", vbCritical) End Select Case 4 ckbOpAlto.Checked = MdfData Case 5 If IsNumeric(MdfData) Then If MdfData < 13 And MdfData > 4 Then nudTray.Value = MdfData ReDim RegNumber(nudTray.Value - 1) Else MsgBox("Tray 수량 범위와 맞지 않습니다.", vbCritical) End If Else MsgBox("잘못된 Tray 수량입니다.", vbCritical) End If Case 6 If IsNumeric(MdfData) Then If MdfData < 21 And MdfData > 0 Then nudTray.Value = MdfData Else MsgBox("Serial 확인 횟수에 대한 데이터가 맞지 않습니다.", vbCritical) End If Else MsgBox("잘못된 Serial 확인 횟수입니다.", vbCritical) End If Case Else MsgBox("불필요한 데이터가 존재합니다. 저장 내용을 확인하여 주십시오.", vbCritical) GoTo FailLoad End Select Next Case SaveList.Print For i = 0 To UBound(Split(ReadData, "|")) - 1 Dim MdfData As String = Mid(ReadData, 1, InStr(ReadData, "|") - 1) ReadData = Mid(ReadData, InStr(ReadData, "|") + 1, ReadData.Length) Select Case i Case 0 txbPtBox_Name.Text = MdfData Case 1 txbPtBox_Label.Text = MdfData Case 2 txbPtBox_Val1.Text = MdfData Case 3 txbPtBox_Val2.Text = MdfData Case 4 txbPtWar_Name.Text = MdfData Case 5 txbPtWar_Label.Text = MdfData Case 6 txbPtWar_Val1.Text = MdfData Case 7 txbPtProd_Name.Text = MdfData Case 8 txbPtProd_Label.Text = MdfData Case 9 txbPtProd_Val1.Text = MdfData Case 10 txbPtProd_Val2.Text = MdfData Case 11 txbPtProd_Date.Text = MdfData Case Else MsgBox("불필요한 데이터가 존재합니다. 저장 내용을 확인하여 주십시오.", vbCritical) GoTo FailLoad End Select Next Case Else MsgBox("잘못된 데이터가 존재합니다. 저장 내용을 확인하여 주십시오.", vbCritical) GoTo FailLoad End Select End If End If Exit Sub Catch ex As Exception MsgBox("불러오는 도중 오류가 발생하였습니다." & vbCrLf & ex.Message, vbCritical) GoTo FailLoad End Try FailLoad: End Sub Private Sub rdbAllPnt_CheckedChanged(sender As Object, e As EventArgs) Handles rdbAllPnt.CheckedChanged, rdbEachPnt.CheckedChanged If rdbAllPnt.Checked = True Then gbPrintEach.Enabled = False ckbBoxPnt.Checked = True ckbWarPnt.Checked = True ckbProdPnt.Checked = True Else gbPrintEach.Enabled = True ckbBoxPnt.Checked = False ckbWarPnt.Checked = False ckbProdPnt.Checked = False End If End Sub Private Sub btnPtBox_Ch1_Click(sender As Object, e As EventArgs) Handles btnPtBox_Ch1.Click, btnPtWar_Ch1.Click, btnPtProd_Ch1.Click If dgvPrinter.Rows.Count - 2 = -1 Then MsgBox("연결된 프린터 항목을 알 수 없습니다." & vbCrLf & " 연결을 확인하여 주십시오.", vbCritical) Exit Sub End If Dim SelectRow As DataGridViewRow = dgvPrinter.SelectedRows(0) Dim PrintName As String = SelectRow.Cells(0).Value.ToString Dim NowButton As String = CType(sender, Button).Name Select Case NowButton Case "btnPtBox_Ch1" txbPtBox_Name.Text = PrintName Case "btnPtWar_Ch1" txbPtWar_Name.Text = PrintName Case "btnPtProd_Ch1" txbPtProd_Name.Text = PrintName Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select End Sub Private Sub btnPtBox_Ch2_Click(sender As Object, e As EventArgs) Handles btnPtBox_Ch2.Click, btnPtWar_Ch2.Click, btnPtProd_Ch2.Click Dim FileAddress As String = OpenFile() If FileAddress <> "fail" Then Dim NowButton As String = CType(sender, Button).Name Select Case NowButton Case "btnPtBox_Ch2" txbPtBox_Label.Text = FileAddress Case "btnPtWar_Ch2" txbPtWar_Label.Text = FileAddress Case "btnPtProd_Ch2" txbPtProd_Label.Text = FileAddress Case Else MsgBox("잘못된 경로입니다.", vbCritical) End Select End If End Sub Private Function OpenFile() As String Dim ofd As OpenFileDialog = New OpenFileDialog ofd.Title = "라벨 파일 주소 불러오기" ofd.FileName = "" ofd.Filter = "라벨 파일(*.lbx) | *.lbx" Dim dr As DialogResult = ofd.ShowDialog If dr = DialogResult.OK Then Return ofd.FileName End If Return "fail" End Function Private Function TodayCountSet(OkNg As Boolean) As Boolean If TodayCountCreate() Then MsgBox("수량 카운터를 생성하는 도중 오류가 발생하였습니다.", vbCritical) Return True End If If TodayCountLoad() Then MsgBox("수량 카운터를 불러오는 도중 오류가 발생하였습니다.", vbCritical) Return True End If CountUpdate(OkNg) If TodayCountUpdate() Then MsgBox("수량 카운터를 업데이트하는 도중 오류가 발생하였습니다.", vbCritical) Return True End If CountSetting() Return False End Function Private Sub CountUpdate(OkNg) Select Case NowMode Case ModeList.Prod_Input CountSelect(CountList.Total) += 1 If OkNg = True Then If TDData(SearchList.TestStep) = "30" Then CountSelect(CountList.Fail) -= 1 End If CountSelect(CountList.Success) += 1 Else CountSelect(CountList.Fail) += 1 End If Case ModeList.TDRecycle If OkNg = True Then CountSelect(CountList.Total) += 1 End If Case Else MsgBox("수량 카운터 출력 잘못된 경로입니다.", vbCritical) End Select End Sub Private Sub CountSetting() Select Case NowMode Case ModeList.Prod_Input txbAllCount.Text = CountSelect(CountList.Total) txbSucCount.Text = CountSelect(CountList.Success) txbFailCount.Text = CountSelect(CountList.Fail) Case ModeList.TDRecycle txbDayCount.Text = CountSelect(CountList.Total) Case Else MsgBox("수량 카운터 출력 잘못된 경로입니다.", vbCritical) End Select End Sub Private Sub NowRegCheck() Try Const LimitCheck As Int16 = 5 Const RowCount As Int16 = 3 dgvNowReg.Rows.Clear() DBCmd = "SELECT Product_SN,DATE_FORMAT(P3_DateTime,'%Y-%m-%d') AS d, DATE_FORMAT(P3_DateTime,'%H:%i:%s') AS t FROM " & ApplyCartDB & " WHERE TestStep > '30' ORDER BY P3_DateTime DESC LIMIT " & LimitCheck & "" If DBQueryReader(DBCmd) Then Dim RunCount As Int32 = 0 Dim dgvData(RowCount - 1) As String For i = 0 To sqlDataQuery.Length - 1 dgvData(i Mod RowCount) = sqlDataQuery(RunCount) If i Mod RowCount = RowCount - 1 Then dgvNowReg.Rows.Add(dgvData) End If RunCount += 1 Next End If Catch ex As Exception MsgBox("등록 현황 오류 발생 ! " & vbCrLf & ex.Message) End Try End Sub Private Sub btnPtRefresh_Click(sender As Object, e As EventArgs) Handles btnPtRefresh.Click List_Refreash(dgvPrinter) End Sub Private Sub MainForm_Click(sender As Object, e As EventArgs) Handles MyBase.Click txbPVSN.Focus() End Sub Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click btnReset.Enabled = False TimerFalse() StepReset() ValueReset() txbPDNum.Text = ClassCode txbPVSN.Text = "" txbPVSN.BackColor = Color.White NowRegCheck() StartCountSetting() btnReset.Enabled = True End Sub Private Sub TimerFalse() RunTimer.Enabled = False ThreadStop = True End Sub Private Sub txbPVSN_KeyDown(sender As Object, e As KeyEventArgs) Handles txbPVSN.KeyDown If chbAutoMeasure.Checked = False Then If e.KeyCode = Keys.Return Then btnEnter_Click(sender, New System.EventArgs) End If End If End Sub Private Sub ckbDBServer_CheckedChanged(sender As Object, e As EventArgs) Handles ckbDBServer.CheckedChanged ServerChanger(ckbDBServer.Checked) End Sub Private Sub TraySerialSetting() Dim NewData As Boolean = False Dim NowYear As Int16 = Format(Now, "yy") Dim NowMonth As Int16 = Format(Now, "MM") TrayDataReset() If BeforeTrayData(NowYear, NowMonth) Then If BeforeTrayLoad(NowYear, NowMonth) Then If BeforeTrayState() Then NewData = False Else NewData = True End If Else NewData = True End If Else If NewInfoRegData(NowYear, NowMonth) Then MsgBox("데이터베이스에 데이터를 생성할 수 없습니다.", vbCritical) Exit Sub End If NewData = True End If If NewData = True Then Dim MinResult As String = SerialMaxSearch(NowYear, NowMonth) If MinResult = "0" Then Dim CtMax As String = CtNumMaxSearch(NowYear, NowMonth) If CtMax = "NULL" Then Exit Sub End If If CtMax = "0" Then MinResult = ClassCode & ColorCode & "0000" Else MinResult = CtMax End If End If MinResult = Val(MinResult) + 1 If MAXResultSetting(MinResult, NowYear, NowMonth) Then Exit Sub End If End If TrayNowState() End Sub Private Sub TrayDataReset() txbTrayMax.Text = String.Empty txbTrayMin.Text = String.Empty txbNowNum.Text = String.Empty End Sub Private Function CtNumMaxSearch(NowYear As Int16, NowMonth As Int16) As String If TDUseCompare = True Then DBCmd = "SELECT IFNULL(max(Ct_SN),0) FROM " & ApplyCartDB & " WHERE Ct_Manufacture_Year = '" & NowYear & "' AND Ct_Manufacture_Month = '" & NowMonth & "' AND Ct_SN LIKE '" & ClassCode & ColorCode & "%' AND Ct_Model = '" & txbPDModel.Text & "' AND Ct_SN > 100000 AND (Ct_Type = '" & txbPDType.Text & "' OR Ct_Type = 'SET')" Else DBCmd = "SELECT IFNULL(max(Ct_SN),0) FROM " & ApplyNonTDDB & " WHERE Ct_Manufacture_Year = '" & NowYear & "' AND Ct_Manufacture_Month = '" & NowMonth & "' AND Ct_SN LIKE '" & ClassCode & ColorCode & "%' AND Ct_Model = '" & txbPDModel.Text & "' AND Ct_SN > 100000 AND (Ct_Type = '" & txbPDType.Text & "' OR Ct_Type = 'SET')" End If Dim CtMaxResult As String = DBQueryScalar(DBCmd) If CtMaxResult = "False" Then MsgBox("최대값을 불러올 수 없습니다.", vbCritical) Return "NULL" End If If CtMaxResult = "" Then Return "0" Else Return CtMaxResult End If End Function Private Function NewInfoRegData(NowYear As Int16, NowMonth As Int16) As Boolean DBCmd = "INSERT INTO " & InfoRegStateDB & "(UserID,ModelNum,TypeNum,ColorNum,UsageNum,CreateYear,CreateMonth) VALUES('" & IDName & "','" & ModelCode & "','" & TypeCode & "','" & ColorCode & "','" & ClassCode & "','" & NowYear & "','" & NowMonth & "')" If DBCommand(DBCmd) Then Return False Else Return True End If End Function Private Function MAXResultSetting(MinResult As String, NowYear As Int16, NowMonth As Int16) As Boolean Dim CheckOkNg As Boolean Dim RunCount As Int32 = nudTray.Value - 1 Dim SearchYear As String = Format(Now, "yy") Dim SearchDate As String = Format(Now, "MM") ReDim TrayData(TrayDataList.State, RunCount) If ResetTrayData(NowYear, NowMonth) Then Return True End If For tay = 0 To RunCount CheckOkNg = False 'For chk = 0 To nudSerialCheck.Value - 1 ' DBCmd = "SELECT COUNT(Ct_SN) FROM " & ApplyCartDB & " WHERE Ct_Manufacture_Year = '" & SearchYear & "' AND Ct_Manufacture_Month = '" & SearchDate & "' and Ct_SN = '" & MinResult & "' AND Ct_Model = '" & txbPDModel.Text & "' AND Ct_Type = '" & txbPDType.Text & "'" ' Dim CtCount As String = DBQueryScalar(DBCmd) ' If CtCount = "False" Then ' MsgBox("시리얼 번호를 등록할 수 없습니다.", vbCritical) ' Return True ' End If ' If CtCount > 0 Then ' MinResult += 1 ' Else ' TrayData(TrayDataList.NumData, tay) = MinResult ' TrayData(TrayDataList.State, tay) = "0" ' If TrayDataUpdate(tay) Then ' MsgBox("Tray Data를 입력하는 도중 오류가 발생하였습니다.", vbCritical) ' Return True ' End If ' CheckOkNg = True ' Exit For ' End If 'Next 'If CheckOkNg = False Then ' MsgBox("Serial Number 를 DB에 입력하지 못했습니다.", vbCritical) ' Return True 'End If TrayData(TrayDataList.NumData, tay) = MinResult TrayData(TrayDataList.State, tay) = "0" If TrayDataUpdate(tay, NowYear, NowMonth) Then MsgBox("Tray Data를 입력하는 도중 오류가 발생하였습니다.", vbCritical) Return True End If If tay = RunCount Then If TrayMaxUpdate(tay, NowYear, NowMonth) Then Return False Else MsgBox("Serial Number 를 DB에 입력하지 못했습니다.", vbCritical) Return True End If End If MinResult += 1 Next MsgBox("Data를 전부 다 처리하지 못했습니다.", vbCritical) Return True End Function Private Function TrayMaxUpdate(TrayNumber As Int32, NowYear As Int16, NowMonth As Int16) As Boolean DBCmd = "UPDATE " & InfoRegStateDB & " SET MaxNum = '" & TrayData(TrayDataList.NumData, TrayNumber) & "' WHERE UserID = '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" If DBCommand(DBCmd) Then Return True Else Return False End If End Function Private Function TrayDataUpdate(UpdateData As Int16, NowYear As Int16, NowMonth As Int16) As Boolean Dim DBUpdateCnt As String = UpdateData + 1 Dim UpdateCmd As String = "Tray" & DBUpdateCnt & "Num = '" & TrayData(TrayDataList.NumData, UpdateData) & "', Tray" & DBUpdateCnt & "State = '" & TrayData(TrayDataList.State, UpdateData) & "'" DBCmd = "UPDATE " & InfoRegStateDB & " SET " & UpdateCmd & " WHERE UserID = '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" If DBCommand(DBCmd) Then Return False Else Return True End If End Function Private Function ResetTrayData(NowYear As Int16, NowMonth As Int16) As Boolean DBCmd = "UPDATE " & InfoRegStateDB & " SET MaxNum = 0, Tray1Num = 0, Tray1State = 0, Tray2Num = 0, Tray2State = 0, Tray3Num = 0, Tray3State = 0, Tray4Num = 0, Tray4State = 0, Tray5Num = 0, Tray5State = 0, Tray6Num = 0, Tray6State = 0, Tray7Num = 0, Tray7State = 0, Tray8Num = 0, Tray8State = 0, Tray9Num = 0, Tray9State = 0, Tray10Num = 0, Tray10State = 0, Tray11Num = 0, Tray11State = 0, Tray12Num = 0, Tray12State = 0 WHERE UserID = '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" If DBCommand(DBCmd) Then Return False Else Return True End If End Function Private Function SerialMaxSearch(NowYear As Int16, NowMonth As Int16) As String DBCmd = "SELECT ifnull(max(MaxNum),0) FROM " & InfoRegStateDB & " WHERE ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" Return DBQueryScalar(DBCmd) End Function Private Sub TrayNowState() txbTrayMin.Text = TrayData(TrayDataList.NumData, 0) txbTrayMax.Text = TrayData(TrayDataList.NumData, TrayData.GetLength(1) - 1) For c = 0 To TrayData.GetLength(1) - 1 If TrayData(TrayDataList.State, c) = 0 Then txbNowNum.Text = TrayData(TrayDataList.NumData, c) txbNowNum.BackColor = Color.White txbNowNum.Refresh() Exit Sub End If Next txbNowNum.Text = "완료" txbNowNum.BackColor = Color.Green txbNowNum.Refresh() End Sub Private Function BeforeTrayState() As Boolean For i = 0 To TrayData.GetLength(1) - 1 If TrayData(TrayDataList.NumData, i) = 0 Then Return False '' 시리얼 번호가 0번일 시 신규 생성 End If If TrayData(TrayDataList.State, i) = 0 Then Return True '' 한 개라도 처리 안 한 제품이 있을 시 End If Next Return False '' 모두 처리 했을 경우 End Function Private Function BeforeTrayLoad(NowYear As Int16, NowMonth As Int16) As Boolean BeforeTrayDBCmd(NowYear, NowMonth) If DBQueryReader(DBCmd) Then Dim DataCount As Integer = 0 Dim RowData As Integer = (sqlDataQuery.Length / TrayDataList.maxList) - 1 ReDim TrayData(TrayDataList.State, RowData) For c = 0 To RowData For r = 0 To TrayDataList.State TrayData(r, c) = sqlDataQuery(DataCount) DataCount += 1 Next Next Return True '' 데이터가 있을 경우 Else Return False '' 데이터가 없을 경우 End If End Function Private Sub BeforeTrayDBCmd(NowYear As Int16, NowMonth As Int16) DBCmd = String.Empty For i = nudTray.Value To 1 Step -1 If i = 1 Then DBCmd = "Tray" & i & "Num,Tray" & i & "State" & DBCmd Else DBCmd = ",Tray" & i & "Num,Tray" & i & "State" & DBCmd End If Next DBCmd = "SELECT " & DBCmd & " FROM " & InfoRegStateDB & " WHERE UserID= '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click TraySerialSetting() End Sub Private Sub ckbManager_CheckedChanged(sender As Object, e As EventArgs) Handles ckbManager.CheckedChanged If ckbManager.Checked = True Then RichTextBox1.Visible = True Button1.Visible = True Button2.Visible = True Else RichTextBox1.Visible = False Button1.Visible = False Button2.Visible = False End If End Sub Private Sub ckbAutoFunc_CheckedChanged(sender As Object, e As EventArgs) Handles ckbAutoFunc.CheckedChanged If ckbAutoFunc.Checked = True Then btnTrayEnd.Enabled = True Else btnTrayEnd.Enabled = False End If txbPVSN.Focus() End Sub Private Sub TrayEndUpdate(NowYear As Int16, NowMonth As Int16) DBCmd = String.Empty For i = nudTray.Value To 1 Step -1 If i = 1 Then DBCmd = "Tray" & i & "State = '1'" & DBCmd Else DBCmd = ",Tray" & i & "State = '1'" & DBCmd End If Next DBCmd = "UPDATE " & InfoRegStateDB & " SET " & DBCmd & " WHERE UserID= '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" End Sub Private Sub btnTrayEnd_Click(sender As Object, e As EventArgs) Handles btnTrayEnd.Click Dim NowDate As String = Format(Now, "yy") Dim NowTime As String = Format(Now, "MM") If BeforeTrayData(NowDate, NowTime) Then TrayEndUpdate(NowDate, NowTime) End If End Sub Private Function BeforeTrayData(NowYear As Int16, NowMonth As Int16) As Boolean DBCmd = "SELECT COUNT(UserID) FROM " & InfoRegStateDB & " WHERE UserID= '" & IDName & "' AND ModelNum = '" & ModelCode & "' AND TypeNum = '" & TypeCode & "' AND ColorNum = '" & ColorCode & "' AND UsageNum = '" & ClassCode & "' AND CreateYear = '" & NowYear & "' AND CreateMonth = '" & NowMonth & "'" Dim BeforeData As String = DBQueryScalar(DBCmd) If BeforeData > 0 Then Return True ''있을 경우 Else Return False '' 없을 경우 End If End Function End Class