using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Project.Dialog { public partial class fLoaderInfo : Form { string PrintPos = ""; public fLoaderInfo(List errlist) { InitializeComponent(); Pub.flag.set(eFlag.WAIT_LOADERINFO, true, "_LOAD"); this.FormClosed += FLoaderInfo_FormClosed; this.lstErrmsg.Items.Clear(); if (errlist != null) { foreach (var item in errlist) AddErrorMessage(item); } } void AddErrorMessage(string msg) { if (this.lstErrmsg.InvokeRequired) { this.lstErrmsg.BeginInvoke(new Action(() => { //동일한 태그를 가진 항목이 존재하는가? if (lstErrmsg.FindString(msg) < 0) lstErrmsg.Items.Add(string.Format("{0}", msg)); })); } else { //동일한 태그를 가진 항목이 존재하는가? if (lstErrmsg.FindString(msg) < 0) lstErrmsg.Items.Add(string.Format("{0}", msg)); } } private void FLoaderInfo_FormClosed(object sender, FormClosedEventArgs e) { //이미지해제 210329 if (this.iv1.Image != null) { this.iv1.Image.Dispose(); this.iv1.Image = null; } Pub.flag.set(eFlag.WAIT_LOADERINFO, false, "_CLOSE"); //사용자가 정보를 정확히 입력하지 않고 닫았다 if (Pub.Result.ItemData[1].VisionData.Confirm == false) { if (Pub.sm.Step == StateMachine.eSMStep.RUN) { Pub.Result.SetResultMessage(eResult.OPERATION, eECode.CAM_NOBARCODEL, eNextStep.pause, 1); } } } private void fLoaderInfo_Load(object sender, EventArgs e) { //현재 바코드가 읽었단 자료를 모두 표시한다. this.tbRID.Text = Pub.Result.ItemData[1].VisionData.RID; this.tbRID.Tag = Pub.Result.ItemData[1].VisionData.RID0; //if (Pub.Result.JobType == "13" ) //{ // if (Pub.Result.ItemData[1].VisionData.SID.StartsWith("103")) // { // tbSID.Text = Pub.Result.ItemData[1].VisionData.SID; // } // else // { // var msg = $"13작업이나 입력된 SID가 103이 아니여서 적용하지 않습니다. sid:{Pub.Result.ItemData[1].VisionData.SID}"; // Pub.AddSystemLog(Application.ProductVersion, "LoaderInfo", msg); // Pub.log.AddAT(msg); // } //} //else { tbSID.Text = Pub.Result.ItemData[1].VisionData.SID; } lbSID0.Text = Pub.Result.ItemData[1].VisionData.SID0; tbVLOT.Text = Pub.Result.ItemData[1].VisionData.VLOT; if (lbSID0.Text.isEmpty() == false) lbSID0.Tag = lbSID0.Text; //수량메뉴얼입력칸 if (Pub.Result.Option_QtyUpdateM) { if (Pub.Result.ItemData[1].VisionData.QTYRQ == true) { //수동입력이나 바코드에서 RQ값이 들어있는 상태이니 그것을 사용한다. //lock (Pub.Result.ItemData[1].VisionData.barcodelist) { var rqBcd = Pub.Result.ItemData[1].VisionData.barcodelist.Where(t => t.Data.StartsWith("RQ")).FirstOrDefault(); if (rqBcd != null) { var newqty = rqBcd.Data.Substring(2).Trim(); Pub.log.Add($"수량업데이트 {tbQTY.Text}->{newqty}"); tbQTY.Text = newqty; } else { Pub.log.AddAT("RQ가 설정되어있었으나 해당 값이 코드 목록에 없어 수량을 채우지 않습니다"); } } } else { //수량을 직접입력하는 경우이므로 수량값을 지워버린다. Pub.log.Add($"수량업데이트 {tbQTY.Text}-> (직접입력으로인한삭제)"); tbQTY.Text = string.Empty; } } else { Pub.log.Add($"수량업데이트 {tbQTY.Text}->{Pub.Result.ItemData[1].VisionData.QTY}"); tbQTY.Text = Pub.Result.ItemData[1].VisionData.QTY; } lbQTY0.Text = Pub.Result.ItemData[1].VisionData.QTY0; tbDate.Text = Pub.Result.ItemData[1].VisionData.MFGDATE; tbVName.Text = Pub.Result.ItemData[1].VisionData.VNAME; tbpartno.Text = Pub.Result.ItemData[1].VisionData.PARTNO; TbCustCode.Text = Pub.Result.ItemData[1].VisionData.temp_custcode; //210317 tbCustName.Text = Pub.Result.ItemData[1].VisionData.temp_custname; //라벨위치 정보표시 - 210127 DisplayLabelPos(Pub.Result.ItemData[1].VisionData.LabelPositionData); //프린트정보표시 this.PrintPos = Pub.Result.ItemData[1].VisionData.PrintPositionData; DisplayPrintPos(Pub.Result.ItemData[1].VisionData.PrintPositionData); //이미지표시 210121 this.iv1.Shapes.Clear(); if (Pub.Result.ItemData[1].VisionData.image != null) { //이미지복사해서사용 210329 var keyImage = Pub.Result.ItemData[1].VisionData.image.Clone(); this.iv1.Image = keyImage; } this.lvbcdList.Items.Clear(); //키엔스로부터 읽은 바코드 목록을 표시한다(우측) func_displaybcdlist(); if (iv1.Image != null) iv1.ZoomFit(); selectInput(this.tbRID); //자동판단데이터 확인; (101-103d우선처리) //이제 모든 sid변환은 1,3컬럼만 사용한다, 22-01-04 if (Pub.Result.JobType2 == "13" && tbSID.Text.StartsWith("10")) func_sidconv(true); //릴아이디가 없는 경우 자동 생성해준다. Boolean updaterid = false; var custCode = TbCustCode.Text; if (Pub.Result.Option_NewReelID) { if (tbRID.Text.isEmpty()) { if (custCode.isEmpty() == false) updaterid = true; else Pub.log.AddAT("릴 아이디를 생성해야하는데 커스터머 코드가 없습니다."); } else if (custCode.isEmpty() == false) { //릴id는 있는데. customer 코드값이 다르면 다시 만들어줘야한다. if (tbRID.Text.StartsWith("RC" + custCode) == false) { Pub.log.Add("릴 ID의 cust 코드가 달라 다시 생성합니다"); updaterid = true; } } } if (updaterid) { var YY = DateTime.Now.Year.ToString().Substring(2); var MM = DateTime.Now.Month.ToString("X"); var datestr = YY + MM; var newsn = AmkorReelID.GetNextSNbyYM(datestr); var data = "R"; data += "C"; data += custCode.Trim(); data += "4"; data += "A"; data += YY; data += MM; data += newsn; if (data.Length == 15) { this.tbRID.Text = data; Pub.log.Add("기초자료가 있어 릴 id를 자동 생성했음" + data); } else { Util.MsgE("릴 ID생성했지만 15자리가 아님 프로그램 오류(" + data + ")"); } } //자동완료이며, 사용자 확인이 off된상태, 수량입력도 false 된 상태여야함 if (Pub.Result.Option_AutoConf && Pub.Result.Option_Confirm1 == false && Pub.Result.Option_QtyUpdateM == false && Pub.Result.JobFirst == false) { //자료가 모두 있는지 확인한다. tmAutoConfirm.Start(); } } void func_displaybcdlist() { var angok = Pub.Result.ItemData[1].VisionData.BaseAngle(out string msg, out Class.KeyenceBarcodeData bcd); lock (Pub.Result.ItemData[1].VisionData.barcodelist) { var no = 1; lvbcdList.Items.Clear(); //기존꺼 삭제 foreach (var item in Pub.Result.ItemData[1].VisionData.barcodelist) { var lv = this.lvbcdList.Items.Add(item.Angle.ToString("N1")); lv.SubItems.Add(item.Data); //lv.SubItems.Add(item.CenterPX.X.ToString()); //lv.SubItems.Add(item.CenterPX.Y.ToString()); var c = new StdLabelPrint.CAmkorSTDBarcode(item.Data); if (c.isValid) lv.ForeColor = Color.Blue; else lv.ForeColor = Color.Black; if (item.sym == "1") lv.BackColor = Color.Gold; else if (item.sym == "2") lv.BackColor = Color.Lime; else lv.BackColor = Color.WhiteSmoke; //회전에 사용할 데이터라면 체크를 해준다. if (angok && bcd.Data == item.Data) { if (this.lvbcdList.CheckedItems.Count == 0) lv.Checked = true; } else lv.Checked = false; //vertext 표시 var vt = item.vertex; if (vt.Length == 4) { Color lcolor = no % 2 == 0 ? Color.Tomato : Color.Lime; iv1.AddShapeLine(vt[0], vt[1], lcolor); iv1.AddShapeLine(vt[1], vt[2], lcolor); iv1.AddShapeLine(vt[2], vt[3], lcolor); iv1.AddShapeLine(vt[3], vt[0], lcolor); iv1.AddShapeText(vt[0], no.ToString(), Color.Black); //210312 } //가장우측상단에 번호를 표시한다. no += 1; } } } private void button1_Click(object sender, EventArgs e) { } private void label6_Click(object sender, EventArgs e) { } string TagStr = string.Empty; void selectInput(Control c) { TagStr = string.Empty; if (c is TextBox) { var tb = c as TextBox; TagStr = tb.Tag.ToString(); } else if (c is Label) { var lb = c as Label; TagStr = lb.Tag.ToString(); } //동일태그를 가진 textbox 의 배경색을 업데이트한다 foreach (Control tb in groupBox2.Controls) { if (tb is TextBox) { if (tb.Tag.ToString() == TagStr) { tb.BackColor = Color.SkyBlue; } else tb.BackColor = SystemColors.Control; } } } private void button2_Click(object sender, EventArgs e) { //if (this.listView1.FocusedItem == null) //{ // Util.MsgE("입력할 바코드 값을 먼저 선택하세요"); // return; //} if (this.TagStr.isEmpty()) { Util.MsgE("데이터를 입력할 칸을 먼저 클릭 하세요"); return; } var lvitem = this.lvbcdList.FocusedItem; if (lvitem == null) return; var lvValue = lvitem.SubItems[1].Text.Trim(); if (lvValue.isEmpty()) { Util.MsgE("선택한 자료에 값이 없습니다\n\n다른 자료를 선택하세요"); return; } //선택자료가 ; 으로 분류가능하면 추가로 팝업 if (lvValue.Split(';').Length > 1) { var ff = new Dialog.fSelectDataList(lvValue.Split(';')); if (ff.ShowDialog() == DialogResult.OK) { lvValue = ff.SelectedValue; } else return; } else if (lvValue.Split(',').Length > 1) { var ff = new Dialog.fSelectDataList(lvValue.Split(',')); if (ff.ShowDialog() == DialogResult.OK) { lvValue = ff.SelectedValue; } else return; } if (TagStr == "RID" || TagStr == "ID") { tbRID.Text = lvValue; } else if (TagStr == "SID") { tbSID.Text = lvValue; //sid값을 적용했다면 프린트 위치도 확인한.다. if (this.PrintPos.isEmpty() || this.PrintPos == "5" && lvValue.isEmpty() == false) { try { using (var db = new EEEntities()) { var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == lvValue).FirstOrDefault(); if (dr != null) //자료가잇는 경우에만 적용 { this.PrintPos = dr.PrintPosition; this.DisplayPrintPos(this.PrintPos); } } } catch (Exception ex) { Util.MsgE("SID:" + lvValue + " 의 인쇄위치값 불러오기 실패\n" + ex.Message); } } } else if (TagStr == "VLOT") { tbVLOT.Text = lvValue; } else if (TagStr == "QTY") { Pub.log.Add($"수량업데이트 {tbQTY.Text}->{lvValue}"); tbQTY.Text = lvValue; } else if (TagStr == "MFGDATE") { tbDate.Text = lvValue; } else if (TagStr == "SUPPLY") { tbVName.Text = lvValue; } else if (TagStr == "PARTNO") { tbpartno.Text = lvValue; } } private void button3_Click(object sender, EventArgs e) { CancleAutoConfirm(); //Pub.Result.JobEndTime //sid를 변경했다면 원본값은 sid0에 넣는다 func_sidconv(false); } void CancleAutoConfirm() { if (Pub.Result.Option_AutoConf) { btOK.Text = "◆ 입력 완료 ◆"; tmAutoConfirm.Stop(); } } void func_sidconv(Boolean auto) { var sid = tbSID.Text.Trim(); var jobtype = Pub.Result.JobType2; if (jobtype == "13") { if (auto) { //데이터베이스에서 조회한다. try { using (var db = new EEEntities()) { var dr = db.Component_Reel_SIDConv.Where(t => t.SIDFrom == sid && string.IsNullOrEmpty(t.SIDTo) == false); if (dr.Any() == true) //변환테이블자료가 있다. { if (dr.Count() == 1) { //원본에 값이 없는경우에만 생성한다 if(lbSID0.Text.isEmpty()) { lbSID0.Tag = tbSID.Text; //변환정보가 있으니 현재 정보를 원본의 값에 넣는다 lbSID0.Text = tbSID.Text; //원본값 } tbSID.Text = dr.First().SIDTo; //변환된 값을 현재 값에 넣는다. Pub.log.Add(string.Format("다음 SID 자동변환 {0}->{1},작업:{2}", dr.First().SIDFrom, dr.First().SIDTo, jobtype)); } else Pub.log.AddE(string.Format("SID 자동변환실패 {0}, 발견 SID변환정보 수량:{1}", dr.First().SIDFrom, dr.Count())); } else Pub.log.Add(string.Format("SID자동변경실패 변환자료 없음 sid:{0},작업:{1}", sid, jobtype)); } } catch (Exception ex) { Pub.log.AddE("SID변환작업실패 메세지:" + ex.Message); } } else { var f = new Dialog.fNewSID(sid); if (f.ShowDialog() != DialogResult.OK) return; if (lbSID0.Tag == null || lbSID0.Tag.ToString().isEmpty()) //기존에 변환된 정보가 있는가? { //원본값 백업 lbSID0.Tag = tbSID.Text; lbSID0.Text = tbSID.Text; //from & to Pub.Result.LastSIDFrom = tbSID.Text.Trim(); Pub.Result.LastSIDTo = f.NewSID.Trim(); Pub.log.Add($"sid수동선택으로 인해 마지막 기록을 입력합니다 from={Pub.Result.LastSIDFrom},to={Pub.Result.LastSIDTo}"); } Pub.Result.LastSIDCnt = f.FindSIDCount; tbSID.Text = f.NewSID; } UpdateSID(auto); makenewId(); } else { Util.MsgE("sid변환작업 불가 :작업형태가 일치하지 않습니다 값=" + Pub.Result.JobType2); } } void makenewId() { //ID가 잘못되었다. if (Pub.Result.Option_NewReelID && CheckRID() == false) { //릴 아이디가 잘못되었다면 새로 갱신한다 var yy = DateTime.Now.ToString("yy"); var m = DateTime.Now.Month.ToString("X"); if (TbCustCode.Text.isEmpty()) { Pub.log.AddAT("Customer 값이 없어 reelid를 새로 생성하지 못했습니다"); } else { var newrid = AmkorReelID.MakeReelID(TbCustCode.Text, yy + m); Pub.log.Add($"RID값을 자동 변경 했습니다 {tbRID.Text} -> {newrid}"); //if(tbRID.Text.isEmpty()==false) tbri tbRID.Text = newrid; } } } void UpdateSID(Boolean auto = false) { //고칠게 없다. if (TbCustCode.Text.isEmpty() == false && tbpartno.Text.isEmpty() == false && this.PrintPos.isEmpty() == false) { return; } //sid 가 변경되었으나 해당 sid 인쇄위치 및 customer / part no 값을 확인 합니다. using (var db = new EEEntities()) { var sid = this.tbSID.Text.Trim(); var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == sid).FirstOrDefault(); if (dr == null) return; var msg = "SID 변경으로 인해 다음 자료를 입력할까요?"; Boolean bupdate = false; if (dr.CustCode.isEmpty() == false && dr.CustCode != TbCustCode.Text) { msg += "\nCustomer Code : " + dr.CustCode; msg += "\nCustomer Name : " + dr.CustName; bupdate = true; } if (dr.PartNo.isEmpty() == false && dr.PartNo != tbpartno.Text)// tbpartno.Text.isEmpty()) { msg += "\nPart No : " + dr.PartNo; bupdate = true; } if (dr.PrintPosition.isEmpty() == false) { msg += "\nPrint Position : " + dr.PrintPosition; bupdate = true; } if (bupdate == false) { //Util.MsgE("변경 가능한 자료가 없습니다"); return; } //화면에 표시 --자동화면일떄에는 묻지않고 적용한다 if (auto == false && Util.MsgQ(msg) != DialogResult.Yes) return; if (dr.CustCode.isEmpty() == false && TbCustCode.Text != dr.CustCode) { TbCustCode.Text = dr.CustCode; tbCustName.Text = dr.CustName; } if (dr.PartNo.isEmpty() == false && tbpartno.Text != dr.PartNo) { this.tbpartno.Text = dr.PartNo; } if (dr.PrintPosition.isEmpty() == false) { this.PrintPos = dr.PrintPosition; DisplayPrintPos(this.PrintPos); } //이 SID의 최근 MFGDate 와 Qty 를 추가 체크한다 210326 if (tbDate.Text.isEmpty() || tbQTY.Text.isEmpty()) { func_CheckDateQty(); } } } Boolean func_CheckDateQty() { Boolean bwarn = false; using (var db2 = new EEEntities()) { var sid = this.tbSID.Text.Trim(); if (sid.isEmpty()) return false; //sid가 없다. //최근 6시간안에서 동일한 데이터를 찾아서 제안 해준다 var sd = DateTime.Now.AddHours(-1); var preData = db2.Component_Reel_Result.AsNoTracking().Where(t => t.JTYPE == Pub.Result.JobType2 && t.SID == sid && string.IsNullOrEmpty(t.QR) == false && t.STIME >= sd).OrderByDescending(t => t.wdate).FirstOrDefault(); //기존자료가 없다면 취소 if (preData == null) return false; var amkorid = new StdLabelPrint.CAmkorSTDBarcode(preData.QR); if (preData.VNAME != tbVName.Text) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},mfgdata={1}", sid, amkorid.MFGDate)); tbVName.Text = preData.VNAME; bwarn = true; //if (func_existbcddata(amkorid.MFGDate) == false) { AddErrorMessage("V.Name 이전 기록으로 업데이트"); Pub.log.Add("'V.Name' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } } if (amkorid.MFGDate.isEmpty() == false && tbDate.Text.isEmpty()) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},mfgdata={1}", sid, amkorid.MFGDate)); tbDate.Text = amkorid.MFGDate; bwarn = true; if (func_existbcddata(amkorid.MFGDate) == false) { AddErrorMessage("MFG 이전 기록으로 업데이트"); Pub.log.Add("'MFG Date' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } } if (amkorid.QTY > 0 && tbQTY.Text.isEmpty()) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 Pub.log.Add($"수량업데이트 {tbQTY.Text}->{amkorid.QTY}"); tbQTY.Text = amkorid.QTY.ToString(); //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},qty={1}", sid, amkorid.QTY)); bwarn = true; if (func_existbcddata(amkorid.QTY.ToString()) == false) { AddErrorMessage("QTY 이전 기록으로 업데이트"); Pub.log.Add("'Qty' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } } if (amkorid.PARTNO.isEmpty() == false && tbpartno.Text.isEmpty()) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 tbpartno.Text = amkorid.PARTNO; bwarn = true; //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},PARTNO={1}", sid, amkorid.PARTNO)); if (func_existbcddata(amkorid.PARTNO) == false) { AddErrorMessage("PartNo 이전 기록으로 업데이트"); Pub.log.Add("'Part No' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } } //Customer if (amkorid.RID.Length > 10 && amkorid.RID.Substring(2, 4) != TbCustCode.Text.Trim()) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 TbCustCode.Text = amkorid.RID.Substring(2, 4); bwarn = true; //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},VLOT={1}", sid, amkorid.VLOT)); if (func_existbcddata(TbCustCode.Text) == false) { AddErrorMessage("Customer Code 이전 기록으로 업데이트"); Pub.log.Add("'Customer Code' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } button6.PerformClick(); } if (amkorid.VLOT.isEmpty() == false && tbVLOT.Text.isEmpty()) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 tbVLOT.Text = amkorid.VLOT; bwarn = true; //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},VLOT={1}", sid, amkorid.VLOT)); if (func_existbcddata(amkorid.VLOT) == false) { AddErrorMessage("VLOT 이전 기록으로 업데이트"); Pub.log.Add("'Vender LOT' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } } if (amkorid.VENDERNAME.isEmpty() == false && tbVName.Text.isEmpty()) { //해당 mfgdae 가 바코드목록에 잇다면 바로 적용 //업다면 적용하고 적용 메세지 표시한다 tbVName.Text = amkorid.VENDERNAME; bwarn = true; //Pub.log.Add(string.Format("이전결과에서 값 업데이트 sid:{0},VENDERNAME={1}", sid, amkorid.VENDERNAME)); if (func_existbcddata(amkorid.VENDERNAME) == false) { AddErrorMessage("VNAME 이전 기록으로 업데이트"); Pub.log.Add("'Vender Name' 값을 이전 기록을 통해서 입력했습니다\n" + "이전 작업시간 : " + ((DateTime)(preData.wdate)).ToString("yyyy-MM-dd HH:mm:ss") + "\n" + "SID : " + preData.SID + "\n" + "MFG Date : " + amkorid.MFGDate + "\n" + "Part No : " + amkorid.PARTNO + "\n" + "Vender Lot : " + amkorid.VLOT + "\n" + "Vender Name : " + amkorid.VENDERNAME + "\n" + "QTY : " + amkorid.QTY.ToString(), true); } } } return bwarn; } /// /// 키엔스 바코드 목록에서 해당 데이터가 있는지 체크합니다 /// /// /// Boolean func_existbcddata(string data) { var lv = lvbcdList.FindItemWithText(data); return lv != null; } private void btReqQty_Click(object sender, EventArgs e) { var msg = string.Empty; var rid = tbRID.Text.Trim(); if (rid.isEmpty()) { Util.MsgE("Reel ID 가 필요 합니다"); return; } if (Pub.setting.OnlineMode == false) { Util.MsgE("오프라인 모드라 사용할 수 없습니다"); return; } var cnt = (Amkor.RestfulService.get_stock_count(rid, out msg)); if (cnt > 0) { var oldCnt = int.Parse(tbQTY.Text.Replace(",", "")); var newCnt = (int)cnt; if (oldCnt == newCnt) { //수량이 동일하니 처리하지 않는다 } else { //숫자가 달라지면? if (Util.MsgQ(string.Format("수량을 변경하시겠습니까?\n현재:{0}\n서버:{1}", tbQTY.Text, newCnt)) == DialogResult.Yes) { Pub.log.Add($"수량업데이트 {tbQTY.Text}->{newCnt}"); tbQTY.Text = newCnt.ToString(); } } } else { Util.MsgE("서버수량 확인 실패\n\n" + msg); } } private void tbSupply_TextChanged(object sender, EventArgs e) { } private void label13_Click(object sender, EventArgs e) { //라벨위치 //라벨위치느느 클릭해서 고칠필요 없다 } private void label22_Click(object sender, EventArgs e) { //부착위치 var lb = sender as Label; PrintPos = lb.Tag.ToString(); DisplayPrintPos(PrintPos); } void DisplayPrintPos(string v) { var lbs = new Label[] { pb7, pb8, pb9, pb4, pb6, pb1, pb2, pb3 }; foreach (Label item in lbs) if (item.Tag.ToString() == v) item.BackColor = Color.Blue; else item.BackColor = Color.FromArgb(64, 64, 64); } //라벨은 여러 위치에서 발견될 수 있다 void DisplayLabelPos(byte[] labelpos) { var lbs = new Label[] { lbl1, lbl2, lbl3, lbl4, lbl6, lbl7, lbl8, lbl9 }; for (int i = 0; i < labelpos.Length; i++) lbs[i].BackColor = labelpos[i] > 0 ? Color.Blue : Color.FromArgb(64, 64, 64); } private void btNewID_Click(object sender, EventArgs e) { var id = TbCustCode.Text; // string.Empty; if (id.Length != 4) { Util.MsgE($"올바른 고객번호를 입력하세요\n" + $"고객번호는 4자리여야 합니다\n" + $"값 : {id}\n" + $"길이 : {id.Length}"); return; } //if (tbRID.Text.Length > 4) id = tbRID.Text.Substring(0, 4); var f = new Dialog.fNewReelID(id); if (f.ShowDialog() != DialogResult.OK) return; this.tbRID.Text = f.NewID; if (f.tbCustCode.Text.Trim() != "" && f.tbCustCode.Text.Trim() != this.TbCustCode.Text.Trim()) this.TbCustCode.Text = f.tbCustCode.Text.Trim(); } private void tbDate_Click(object sender, EventArgs e) { selectInput(sender as TextBox); } private void button4_Click(object sender, EventArgs e) { DateTime dt = DateTime.Now; var dtstr = this.tbDate.Text.Trim().Replace("-", "").Replace("/", ""); if (dtstr.Length == 8) { dt = new DateTime( int.Parse(dtstr.Substring(0, 4)), int.Parse(dtstr.Substring(4, 2)), int.Parse(dtstr.Substring(6, 2))); } var f = new Dialog.fSelectDay(dt); if (f.ShowDialog() == DialogResult.OK) { this.tbDate.Text = f.dt.ToShortDateString(); } } private void groupBox2_Enter(object sender, EventArgs e) { } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { //클릭하면 입력창을 띄운다 Util.TouchKeyShow(tbRID, "Input REEL ID"); } private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(tbSID, "INPUT SID"); } private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(tbVLOT, "INPUT VENDER LOT"); } private void linkLabel4_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(tbQTY, "INPUT QTY"); } private void linkLabel5_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(tbDate, "INPUT MFG DATE"); } private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(tbVName, "INPUT SUPPLY NAME"); } private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { //tbpartno Util.TouchKeyShow(tbpartno, "INPUT CUSTOMER PART NO."); } private void button5_Click(object sender, EventArgs e) { //파트번호자동입력(sid 를 가지고 테이블에서 찾는다) if (tbSID.Text.isEmpty()) { Util.MsgE("SID값이 필요 합니다", true); return; } var sid = tbSID.Text.Trim(); using (var db = new EEEntities()) { var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == sid).FirstOrDefault(); if (dr == null) { Util.MsgE("해당 SID로 등록된 정보가 없습니다"); return; } //파트번호가 잇어야 한다. if (dr.PartNo != null || dr.PartNo.isEmpty()) { Util.MsgE("해당 SID에 Part No 의 값이 입력되지 않았습니다"); return; } var partno = dr.PartNo.Trim(); if (tbpartno.Text.isEmpty()) tbpartno.Text = partno; else { var dlg = Util.MsgQ(string.Format("Part NO 값을 변경 할까요?\n" + "기존 : " + tbpartno.Text + "\n" + "신규 : " + partno)); if (dlg == DialogResult.Yes) tbpartno.Text = dr.PartNo; } } } private void button6_Click(object sender, EventArgs e) { using (var db = new EEEntities()) { ////서플라이코드가 있다면 그 코드값으로 가져온다 //var custCode = TbCustCode.Text.Trim(); //if (custCode.isEmpty() == false) //{ // var drCustCode = db.Component_Reel_SIDConv.Where(t => t.cust == custCode).FirstOrDefault(); // if (drCustCode != null && drCustCode.manu.isEmpty() == false) // { // Pub.log.Add(string.Format("서플라이네임을 가져옴 값={0},코드={1}", drCustCode.manu, custCode)); // tbVName.Text = drCustCode.manu; // return; // } //} var sid = tbSID.Text.Trim(); if (sid.isEmpty()) { Util.MsgE("SID값이 필요 합니다", true); return; } var dr = db.Component_Reel_SIDInfo.AsNoTracking().Where(t => t.SID == sid).FirstOrDefault(); if (dr == null || dr.CustCode.isEmpty()) { Util.MsgE("해당 SID로 등록된 정보가 없습니다"); return; } //찾은데이터에서 값을 확인한다. //Util.MsgI(string.Format("Customer/Vender 정보가 업데이트 되었습니다\n" + // "Customer : {0}\n" + // "Customer Name : {1}\n" + // "Vender Name : {2}", dr.CustCode, dr.CustName, dr.VenderName)); //벤더네임은 vlot값을 가지고 한다. 210504 var vlot = this.tbVLOT.Text.Trim(); if (vlot.isEmpty() == false) { var dr2 = db.Component_Reel_Result.AsNoTracking().Where(t => t.VLOT == vlot).OrderByDescending(t => t.wdate).FirstOrDefault(); if (dr2 != null) { tbVName.Text = dr2.VNAME; } } TbCustCode.Text = dr.CustCode; tbCustName.Text = dr.CustName; } } private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(TbCustCode, "INPUT SUPPLY CODE"); } private void button7_Click(object sender, EventArgs e) { //진수석님 데이터에서 찾아본다. var custcode = TbCustCode.Text.Trim(); var partno = tbpartno.Text.Trim(); if (partno.isEmpty()) { Util.MsgE("SID 를 찾기 위해서는 다음 정보가 필요 합니다\n" + "1. Part No"); return; } //각 상황에 따라 다르다. using (var db = new EEEntities()) { var amksid = string.Empty; if (custcode.isEmpty() == false && partno.isEmpty() == false) { var dr = db.Component_Reel_SIDInfo.Where(t => t.CustCode == custcode && t.PartNo == partno && string.IsNullOrEmpty(t.SID) == false).FirstOrDefault(); if (dr != null && dr.SID.isEmpty() == false) { amksid = dr.SID; } else { Util.MsgE("등록된 Customer Code /Part No 에 해당되는 SID를 확인할 수 없습니다\n" + "Customer Code : " + custcode + "\n" + "Part No : " + partno); return; } } else if (custcode.isEmpty() == false) { var drow = db.Component_Reel_SIDInfo.Where(t => t.CustCode == custcode && string.IsNullOrEmpty(t.SID) == false).ToList(); if (drow == null || drow.Count < 1) { Util.MsgE("등록된 Customer Code 에 해당되는 SID를 확인할 수 없습니다\nCustomer : " + custcode); return; } var f = new fSelectDataList(drow.Select(t => t.SID).ToArray()); if (f.ShowDialog() == DialogResult.OK) { amksid = f.SelectedValue; } else { Util.MsgE("사용자 선택이 취소 되었습니다"); return; } } else if (partno.isEmpty() == false) { var drow = db.Component_Reel_SIDInfo.Where(t => t.PartNo == partno && string.IsNullOrEmpty(t.SID) == false).ToList(); if (drow == null || drow.Count < 1) { Util.MsgE("등록된 Part No 에 해당되는 SID를 확인할 수 없습니다\n" + "Part No : " + partno); return; } var sidarr = drow.Select(t => t.SID).ToList(); var lst = new List(); foreach (var item in sidarr) { var m101 = string.Empty; var m103 = item.Trim(); var m106 = string.Empty; lst.Add(m101 + ";" + m103 + ";" + m106); } var f = new Dialog.fSelectSID(lst); if (f.ShowDialog() == DialogResult.OK) { var returndata = f.Value.Split(';'); amksid = returndata[1].Trim(); } else { Util.MsgE("사용자 선택이 취소 되었습니다"); return; } } if (amksid.isEmpty() == false) { Pub.log.Add(string.Format("amkor SId찾기 code={0},part={1},sid={2}", custcode, partno, amksid)); tbSID.Text = amksid; UpdateSID(); makenewId(); } else { Pub.log.Add(string.Format("검색된 SID가 없어 sid찾기가 실패 했습니다\n" + "Cust:{0}\n" + "PartNo:{1}", custcode, partno)); } } } private void button8_Click(object sender, EventArgs e) { //중복검사 var rid = tbRID.Text.Trim(); if (rid.isEmpty()) { Util.MsgE("Reel Id 값이 없습니다"); return; } if (Pub.setting.OnlineMode == false) { Util.MsgE("오프라인 모드라 사용할 수 없습니다"); return; } var result = Amkor.RestfulService.get_existed_matl_by_id(rid); if (result.Complete == false) { Util.MsgE(result.Message); } else { if (result.Result == true) { Util.MsgE($"해당 ID는 중복된 ID 입니다\n값:{rid}"); return; } else { Util.MsgI($"해당 ID는 중복되지 않았습니다\n{rid}"); } } } private void button9_Click(object sender, EventArgs e) { var f = new Dialog.fSelectCustInfo(); if (f.ShowDialog() == DialogResult.OK) { this.tbCustName.Text = f.CustName; this.TbCustCode.Text = f.CustCode; Pub.log.Add(string.Format("사용자가 Customer 를 직접 선택함 {0}:{1}", tbCustName.Text, TbCustCode.Text)); } } Boolean CheckRID() { var rid = tbRID.Text.Trim(); if (rid.Length < 10) return false; var cut = TbCustCode.Text.Trim(); if (rid.Substring(2, 4) != cut) { return false; } else return true; } Boolean autoconf = false; Boolean warn = false; Boolean samesidwarn = false; private void btOK_Click(object sender, EventArgs e) { //manu 목록에 없다면 추가 해준다. var manuName = tbVName.Text.Trim().ToLower(); if (manuName.isEmpty() == false) { lock (Pub.Result.dsList) { if (Pub.Result.dsList.Supply.Where(t => t.TITLE.ToLower() == manuName).Any() == false) { //기존 manu 목록에 없으니 추가한다. var newdr = Pub.Result.dsList.Supply.NewSupplyRow(); newdr.TITLE = tbVName.Text.Trim(); Pub.Result.dsList.Supply.AddSupplyRow(newdr); Pub.Result.SaveListDB(); } } } //회전용데이터가 여러개 있다면 처리하지 않는다. if (this.lvbcdList.CheckedItems.Count != 1) { Pub.AddSystemLog(Application.ProductVersion, "MAIN", $"회전 기준데이터가 {this.lvbcdList.CheckedItems.Count}건 입니다"); Util.MsgE("회전 기준데이터는 1개만 선택되어야 합니다"); return; } if (this.lvbcdList.CheckedItems.Count == 1) { var bcddata = lvbcdList.CheckedItems[0].SubItems[1].Text; lock (Pub.Result.ItemData[1].VisionData.barcodelist) { foreach (var item in Pub.Result.ItemData[1].VisionData.barcodelist) { if (item.Data == bcddata) { Pub.log.Add(string.Format("회전 기준 바코드값 {0}", item.Data)); item.UserActive = true; } else item.UserActive = false; } } } //마지막에 작업한 데이터와 비교 ?? 220104 if (tbSID.Text == Pub.Result.LastSIDTo && tbVName.Text != Pub.Result.LastVName) { Pub.Result.LastVName = tbVName.Text; Pub.log.Add($"Vname 값을 저장하여 연속작업시 사용합니다 sid:{tbSID.Text},vname:{tbVName.Text}"); } if (tbSID.Text.isEmpty()) { Util.MsgE("SID 가 입력되지 않았습니다"); tbSID.Focus(); return; } if (tbVLOT.Text.isEmpty()) { Util.MsgE("VLOT 가 입력되지 않았습니다"); tbVLOT.Focus(); return; } if (tbQTY.Text.isEmpty()) { Util.MsgE("QTY 가 입력되지 않았습니다"); tbQTY.Focus(); return; } if (tbDate.Text.isEmpty()) { Util.MsgE("MFG-DATE 가 입력되지 않았습니다"); tbDate.Focus(); return; } if (tbRID.Text.isEmpty()) { Util.MsgE("REEL ID 가 입력되지 않았습니다"); tbRID.Focus(); return; } //파트넘버 필수로 필요한 - 최준호s if (this.tbpartno.Text.isEmpty()) { Util.MsgE("PART No 가 입력되지 않았습니다"); tbpartno.Focus(); return; } if (this.PrintPos.isEmpty()) { Util.MsgE("프린트 부착 위치가 지정되지 않았습니다"); return; } if (Pub.Result.Option_vname && this.tbVName.Text.isEmpty()) { Util.MsgE("Vender Name 이 입력되지 않았습니다"); return; } //현재 작업모드와 SID가 일치하는지 확인한다. var sidNew = this.tbSID.Text.Trim(); var sidOld = this.lbSID0.Text.Trim();//.Tag == null ? string.Empty : lbSID0.Text; if (Pub.Result.Option_NewReelID && tbRID.Text.Length != 15) { Util.MsgE("신규 릴ID 생성모드 입니다.\n현재 릴ID는 15자리 가 아닙니다.\n릴ID를 확인하세요."); return; } if (CheckRID() == false) { Pub.AddSystemLog(Application.ProductVersion, "MAIN", $"Reel ID 의 Customer Code 값이 현재 값과 일치하지 않습니다(RID:{tbRID.Text}/CUST:{TbCustCode.Text})"); Util.MsgE("Reel ID 의 Customer Code 값이 현재 값과 일치하지 않습니다"); return; } //SID별 부착위치를 결정시켜준다 - 210202 try { if (Pub.setting.OnlineMode) { using (var db = new EEEntities()) { var drPrnPos = db.Component_Reel_SIDInfo.Where(t => t.SID == sidNew).FirstOrDefault(); if (drPrnPos == null) { var newdrpos = new Component_Reel_SIDInfo() { SID = sidNew, PrintPosition = this.PrintPos, Remark = string.Empty }; db.Component_Reel_SIDInfo.Add(newdrpos); db.SaveChanges(); Pub.log.Add(string.Format("SId별 프린트 위치 정보 추가 sid:{0},위치:{1}", tbSID.Text, this.PrintPos)); } else if (drPrnPos.PrintPosition != this.PrintPos) { //기존에있는경우 내용이 다르면 업데이트한다 drPrnPos.PrintPosition = this.PrintPos; db.SaveChanges(); Pub.log.Add(string.Format("SId별 프린트 위치 정보 추가 sid:{0},위치:{1}", tbSID.Text, this.PrintPos)); } } } } catch (Exception ex) { Pub.log.AddE(string.Format("sid별 프린트 위치 정보 추가 실패 sid:{0},메세지:{1}", tbSID.Text, ex.Message)); } //sid lot 이름 검증 //var sid = this.tbSID.Text.Trim(); var lot = this.tbVLOT.Text.Trim(); if (warn == false && autoconf == true) { if (Pub.setting.OnlineMode) using (var db = new EEEntities()) { var predata = db.Component_Reel_Result.AsNoTracking().Where(t => t.SID == sidNew).OrderByDescending(t => t.wdate).FirstOrDefault(); if (predata != null && predata.VLOT != lot) { Util.MsgE("이전 LOT 값이 일치 하지 않습니다. 자동 확인이 취소 됩니다"); warn = true; return; } } } //변환테이블의 데이터를 확인하고 업데이트한다. if (Pub.setting.OnlineMode) using (var db = new EEEntities()) { //파트번호 업데이트 bool dataUpdate = false; var drsidInfo = db.Component_Reel_SIDInfo.Where(t => t.SID == sidNew).FirstOrDefault(); if (drsidInfo.PartNo.isEmpty() && tbpartno.Text.isEmpty() == false && drsidInfo.PartNo != tbpartno.Text) { if (Util.MsgQ("다음 SID의 PART NO를 기록할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" + "SID:" + sidNew + "\nPARTNO:" + tbpartno.Text) == DialogResult.Yes) { drsidInfo.PartNo = this.tbpartno.Text.Trim(); dataUpdate = true; } } if (drsidInfo.CustCode.isEmpty() && TbCustCode.Text.isEmpty() == false && drsidInfo.CustCode != TbCustCode.Text) { if (Util.MsgQ("다음 SID의 Customer Code 를 기록할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" + "SID:" + sidNew + "\n" + "CUST:" + TbCustCode.Text) == DialogResult.Yes) { drsidInfo.CustCode = this.TbCustCode.Text.Trim(); dataUpdate = true; } } //커스터머이름도 저장한다. 220108 if (drsidInfo.CustName.isEmpty() && tbCustName.Text.isEmpty() == false && drsidInfo.CustName != tbCustName.Text) { if (Util.MsgQ("다음 SID의 Customer Name 을 기록할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" + "SID:" + sidNew + "\n" + "Cust Name:" + tbCustName.Text) == DialogResult.Yes) { drsidInfo.CustName = this.tbCustName.Text.Trim(); dataUpdate = true; } } //SID변환테이블 -220104 if (Pub.Result.JobType2 == "13" && sidOld != sidNew && sidOld.isEmpty() == false && sidNew.isEmpty() == false) { var drConvData = db.Component_Reel_SIDConv.Where(t => t.SIDFrom == sidOld && t.SIDTo == sidNew).Any(); if (drConvData == false) { if (Util.MsgQ("다음 변환된 SID 정보를 저장할까요?\n기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다\n" + "SID 원본 :" + sidOld + "\n" + "SID 대상:" + sidNew) == DialogResult.Yes) { //자료가 없다면 추가하고 //var olist = db.Component_Reel_SIDConv.Where(t => t.M101 == lbSID0.Text).ToList(); //if (olist.Count < 1) //{ try { var newdr = new Component_Reel_SIDConv(); newdr.SIDFrom = sidOld; newdr.SIDTo = sidNew; newdr.Remark = "Auto Gen"; //newdr.M106 = string.Empty; //newdr.M108 = string.Empty; db.Component_Reel_SIDConv.Add(newdr); db.SaveChanges(); } catch (Exception ex) { Util.MsgE("SID변환 정보를 서버에 저장하지 못했습니다"); Pub.log.Add("sid변환정보 저장 실패 : " + ex.Message); } //} //else //{ // //있긴이삳. // foreach (var item in olist) // item.M103 = sid; // db.SaveChanges(); //} //있다면 업데이트 해준다. } } } //벤더는 SID에 종속되지 않는다 //if (drConv.VenderName.isEmpty() && tbVName.Text.isEmpty() == false && drConv.VenderName != tbVName.Text) //{ // if (Util.MsgQ("다음 SID의 Vender Name 를 기록할까요? 기록을 진행하면 이후 작업에는 묻지 않고 진행 됩니다") == DialogResult.Yes) // { // drConv.VenderName = this.tbVName.Text.Trim(); // dataUpdate = true; // } //} if (dataUpdate) { Pub.log.Add("Customer / Partno 의 SId연결 정보를 업데이트 합니다"); db.SaveChanges(); } } //값을 설정해주고 빠져나간다 Pub.Result.ItemData[1].VisionData.SID = tbSID.Text.Trim(); Pub.Result.ItemData[1].VisionData.SID0 = lbSID0.Text.Trim(); Pub.Result.ItemData[1].VisionData.VLOT = tbVLOT.Text.Trim(); Pub.Result.ItemData[1].VisionData.QTY = tbQTY.Text.Trim(); Pub.Result.ItemData[1].VisionData.MFGDATE = tbDate.Text.Trim(); Pub.Result.ItemData[1].VisionData.VNAME = tbVName.Text.Trim(); Pub.Result.ItemData[1].VisionData.SetRID(tbRID.Text.Trim(), "USER CONFIRM");//.RID = tbRID.Text.Trim(); if (tbRID.Tag == null || tbRID.Text.isEmpty()) Pub.Result.ItemData[1].VisionData.RID0 = string.Empty; else Pub.Result.ItemData[1].VisionData.RID0 = tbRID.Text.Trim();// tbRID.Tag.ToString(); //210429 Pub.Result.ItemData[1].VisionData.PARTNO = tbpartno.Text.Trim(); if (this.autoconf) Pub.Result.ItemData[1].VisionData.ConfirmAuto = true; Pub.Result.ItemData[1].VisionData.ConfirmUser = true; //사용자가확인했다! Pub.Result.ItemData[1].VisionData.PrintPositionData = this.PrintPos; Pub.Result.ItemData[1].VisionData.PrintPositionCheck = true; //사용자가 확인했다. this.DisplayLabelPos(Pub.Result.ItemData[1].VisionData.LabelPositionData); this.PrintPos = Pub.Result.ItemData[1].VisionData.PrintPositionData; this.DisplayPrintPos(Pub.Result.ItemData[1].VisionData.PrintPositionData); this.Close(); } private void label26_Click(object sender, EventArgs e) { var sid = this.tbSID.Text.Trim(); if (sid.isEmpty()) return; var dlg = Util.MsgQ("SID 에서 인쇄 위치를 검색 할까요?"); if (dlg != DialogResult.Yes) return; using (var db = new EEEntities()) { var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == sid).FirstOrDefault(); if (dr == null || dr.PrintPosition.isEmpty()) { Util.MsgE("입력된 SID에 저장된 인쇄 위치가 없습니다\n" + "SID:" + sid); return; } this.PrintPos = dr.PrintPosition; DisplayPrintPos(this.PrintPos); } } private void button1_Click_1(object sender, EventArgs e) { //데이터베이스 결과에서 자료를 추가한다. List result = new List(); using (var db = new EEEntities()) { //1.sid sid를 먼저 검색한다. 이것이 확률이 제일 높음 if (this.tbSID.Text.isEmpty() == false) { var list = db.Component_Reel_Result.AsNoTracking(). OrderByDescending(t => t.wdate). Where(t => t.SID == tbSID.Text.Trim()).Take(5).ToList(); if (list != null && list.Count > 0) result.AddRange(list); } //2.파트번호 if (result.Count == 0 && this.tbpartno.Text.isEmpty() == false) { var list = db.Component_Reel_Result.AsNoTracking(). OrderByDescending(t => t.wdate). Where(t => t.QR.Contains(";" + tbpartno.Text)).Take(5).ToList(); if (list != null && list.Count > 0) result.AddRange(list); } //3.벤더LOT if (result.Count == 0 && this.tbVLOT.Text.isEmpty() == false) { var list = db.Component_Reel_Result.AsNoTracking(). OrderByDescending(t => t.wdate). Where(t => t.QR.Contains(";" + tbVLOT.Text + ";")).Take(5).ToList(); if (list != null && list.Count > 0) result.AddRange(list); } //4.벤더이름 if (result.Count == 0 && this.tbVName.Text.isEmpty() == false) { var list = db.Component_Reel_Result.AsNoTracking(). OrderByDescending(t => t.wdate). Where(t => t.QR.Contains(";" + tbVName.Text + ";")).Take(5).ToList(); if (list != null && list.Count > 0) result.AddRange(list); } } //customer code if (result.Count < 1) { Util.MsgE("검색된 결과가 없습니다\n검색 아이템\n" + "1.SID\n" + "2.LOT\n" + "3.PARTNO\n"); return; } var f = new fSelectResult(result); if (f.ShowDialog() != DialogResult.OK) return; //값이 없는 것만 처리한다. string msg = string.Empty; var qr = f.SelectedValue.QR; var amk = new StdLabelPrint.CAmkorSTDBarcode(qr); if (this.tbSID.Text.isEmpty() && amk.SID.isEmpty() == false) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("SID:{0}=>{1}", tbSID.Text, amk.SID); tbSID.Text = amk.SID; } if (this.tbpartno.Text.isEmpty() && amk.PARTNO.isEmpty() == false) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("Part No:{0}=>{1}", tbpartno.Text, amk.PARTNO); tbpartno.Text = amk.PARTNO; } if (this.tbVLOT.Text.isEmpty() && amk.VLOT.isEmpty() == false) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("Vender LOT:{0}=>{1}", tbVLOT.Text, amk.VLOT); tbVLOT.Text = amk.VLOT; } if (this.tbVName.Text.isEmpty() && f.SelectedValue.VNAME.isEmpty() == false) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("Vender Name:{0}=>{1}", tbVName.Text, f.SelectedValue.VNAME); tbVName.Text = f.SelectedValue.VNAME; } if (this.tbDate.Text.isEmpty() && amk.MFGDate.isEmpty() == false) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("MFG Date:{0}=>{1}", tbDate.Text, amk.MFGDate); tbDate.Text = amk.MFGDate; } if (Pub.Result.Option_QtyUpdateM == false && this.tbQTY.Text.isEmpty() && amk.QTY != 0) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("QTY:{0}=>{1}", tbQTY.Text, amk.QTY); Pub.log.Add($"수량업데이트 {tbQTY.Text}->{amk.QTY}"); tbQTY.Text = amk.QTY.ToString(); } var custcode = amk.RID.Substring(2, 4); if (this.TbCustCode.Text.isEmpty() && custcode.isEmpty() == false) { msg += (msg.isEmpty() ? "" : "\n") + string.Format("QTY:{0}=>{1}", TbCustCode.Text, custcode); TbCustCode.Text = custcode;// amk.QTY.ToString(); } if (msg.isEmpty() == false) { Util.MsgI("다음 정보가 변경 되었습니다\n" + msg, true); } } private void label2_Click_1(object sender, EventArgs e) { var sid = this.tbSID.Text.Trim(); if (sid.isEmpty()) return; using (var db = new EEEntities()) { var dr = db.Component_Reel_SIDInfo.Where(t => t.SID == sid).FirstOrDefault(); if (dr == null || dr.PrintPosition.isEmpty()) { Util.MsgE("입력된 SID에 저장된 인쇄 위치가 없습니다\n" + "SID:" + sid); return; } this.PrintPos = dr.PrintPosition; } DisplayPrintPos(this.PrintPos); } private void button3_Click_1(object sender, EventArgs e) { var sid = this.tbSID.Text.Trim(); if (sid.isEmpty()) { Util.MsgE("SID 값이 필요합니다"); return; } func_CheckDateQty(); } DateTime stime = DateTime.Now; private void tmAutoConfirm_Tick(object sender, EventArgs e) { var ts = DateTime.Now - stime; btOK.Text = string.Format("{0:N0}/{1:N0} 초후 자동 완료", ts.TotalSeconds, Pub.setting.Timeout_AutoConfirm); if (ts.TotalSeconds >= Pub.setting.Timeout_AutoConfirm) { tmAutoConfirm.Stop(); autoconf = true; btOK.PerformClick(); } } private void 회전기준바코드로설정ToolStripMenuItem_Click(object sender, EventArgs e) { if (lvbcdList.FocusedItem == null) { Util.MsgE("포커스를 받은 항목이 없습니다"); return; } var dataindex = lvbcdList.FocusedItem.Index; foreach (ListViewItem item in this.lvbcdList.Items) { if (item.Index == dataindex) item.Checked = true; else item.Checked = false; } } private void button4_Click_1(object sender, EventArgs e) { if (tbpartno.Text.isEmpty()) tbpartno.Text = "N/A"; else { var dlg = Util.MsgQ("현재 Part No 값을 N/A로 변경 할까요?"); if (dlg == DialogResult.Yes) tbpartno.Text = "N/A"; } } private void linkLabel9_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Util.TouchKeyShow(this.tbCustName, "INPUT CUST NAME"); } private void button5_Click_1(object sender, EventArgs e) { var a = 1; var b = 0; var c = a / b; } } }