/// <summary> /// 輸入機台/序號 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ttbEquipOrCompLot_TextChanged(object sender, EventArgs e) { try { //清除資料 _QCTable.Rows.Clear(); string currentState = "Wait" + _QCType; string equipmentName = ""; //檢查是否有輸入機台/序號 ttbEquipOrCompLot.Must(lblEquipOrCompLot); #region 檢查輸入的內容在MES_QC_INSP_OBJ.ITEM1是否有符合的資料,如果沒有,則檢查機台 var QCDataObjList = QCInspectionObjectInfoEx.GetDataListByComponentLot(ttbEquipOrCompLot.Text); if (QCDataObjList.Count == 0) { var QCInspectionDataList = QCInspectionInfoEx.GetDataListByEquip(ttbEquipOrCompLot.Text, _QCType); if (QCInspectionDataList.Count == 0) { //找不到檢驗資料!! throw new Exception(RuleMessage.Error.C00038()); } else { //取得檢驗機台名稱 equipmentName = QCInspectionDataList[0].EquipmentName; } #region 取得檢驗清單 //string currentState = "WaitPPK"; QCInspectionDataList.ForEach(qcData => { //只有狀態為WaitPPK才可以加入清單 if (qcData.Status == currentState) { //取得檢驗明細 var QCInspectionObjList = QCInspectionObjectInfo.GetInspectionObjects(qcData); QCInspectionObjList.ForEach(qcObjData => { var row = _QCTable.NewRow(); row["Equipment"] = qcData.EquipmentName; row["Device"] = qcData.DeviceName; row["SN"] = qcObjData.ItemName1; row["Status"] = qcData.PassFlag == "Y" ? "PASS" : GetUIResource("WaitQC"); row["QCINSPSID"] = qcData.ID; _QCTable.Rows.Add(row); }); } }); #endregion } else { //取得檢驗主檔 var QCInspectionData = InfoCenter.GetBySID <QCInspectionInfo>(QCDataObjList[0].QC_INSP_SID).ChangeTo <QCInspectionInfoEx>(); //確認檢驗主檔狀態是否為WaitPPK if (QCInspectionData.Status != currentState) { //序號:{0} 檢驗主檔狀態為{1},不可以執行 throw new Exception(RuleMessage.Error.C10100(ttbEquipOrCompLot.Text, QCInspectionData.Status)); } //取得檢驗機台名稱 equipmentName = QCInspectionData.EquipmentName; //取得檢驗資料 var row = _QCTable.NewRow(); row["Equipment"] = QCInspectionData.EquipmentName; row["Device"] = QCInspectionData.DeviceName; row["SN"] = QCDataObjList[0].ItemName1; row["Status"] = QCInspectionData.PassFlag == "Y" ? "PASS" : GetUIResource("WaitQC"); row["QCINSPSID"] = QCInspectionData.ID; _QCTable.Rows.Add(row); } #endregion #region 檢查機台是否存在 _EquipData = EquipmentInfo.GetEquipmentByName(equipmentName); if (_EquipData == null) { //請輸入正確的機台/序號! throw new Exception(RuleMessage.Error.C10066()); } #endregion if (_QCTable.Rows.Count == 0) { //機台:{0},查無任何檢驗資料。 throw new Exception(RuleMessage.Error.C10053(equipmentName)); } //顯示檢驗清單 gvQC.SetDataSource(_QCTable, true); btnOK.Enabled = true; //設置初始勾選狀態 CheckBox ckbSelectAll = gvQC.HeaderRow.FindControl("ckbSelectAll") as CheckBox; ckbSelectAll.Checked = true; ckbSelectAll_CheckedChanged(null, EventArgs.Empty); } catch (Exception ex) { ClearField(); AjaxFocus(ttbEquipOrCompLot); HandleError(ex); } }
/// <summary> /// 切換料號 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ddlDevice_SelectedIndexChanged(object sender, EventArgs e) { try { #region 清除資料 ddlFileName.Items.Clear(); ddlPPKReasonCode.Items.Clear(); _CSTWIPCMMList = new List <CSTWIPCMMInfo>(); _QCInspectionObjDataList.Clear(); gvQC.SetDataSource(_QCInspectionObjDataList, true); _CSTWIPCMMDataList = new List <CSTWIPCMMDataInfo>(); gvInspectionData.SetDataSource(_CSTWIPCMMDataList, true); btnOK.Enabled = false; #endregion //確認是否有選擇料號 if (ddlDevice.SelectedItem.Text.IsNullOrTrimEmpty() == false) { //取得料號名稱 string deviceName = ddlDevice.SelectedItem.Text; //清除檢驗清單 _QCInspectionObjDataList.Clear(); List <QCInspectionObjectInfoEx> QCInspectionObjDataListTemp = new List <QCInspectionObjectInfoEx>(); _QCInspectionDataList.ForEach(QCData => { //符合所選的料號才可以加入序號清單 if (QCData.DeviceName == deviceName) { var selectDataList = QCInspectionObjectInfoEx.GetDataListByQCInspectionSID(QCData.QC_INSP_SID); QCInspectionObjDataListTemp.AddRange(selectDataList); } }); //以SID排序 _QCInspectionObjDataList = QCInspectionObjDataListTemp.OrderBy(p => p.ID).ToList(); #region 檢驗資料 //確認料號資料是否在在 _DeviceVersionData = DeviceVersionInfo.GetActiveDeviceVersion(deviceName).ChangeTo <DeviceVersionInfoEx>(); if (_DeviceVersionData == null) { //[00030]{0}:{1}不存在! throw new Exception(TextMessage.Error.T00030(lblDevice.Text, deviceName)); } //清除資料 _CSTWIPCMMList.Clear(); if (_DeviceVersionData.ProdType == CustomizeFunction.ProdType.S.ToCimesString()) { _QCInspectionObjDataList.ForEach(data => { //以機台名稱檢查是否有檢驗結果資料 var CSTWIPCMMListByEquipment = CSTWIPCMMInfo.GetDataListByEquipmantAndFileIDAndDevice(ttbEquip.Text, data.ItemName1, data.ItemName2, data.ItemName3, deviceName); //以OP1機台名稱檢查是否有檢驗結果資料 var CSTWIPCMMListBySEquipment = CSTWIPCMMInfo.GetDataListByEquipmantAndFileIDAndDevice(data.ItemName5, data.ItemName1, data.ItemName2, data.ItemName3, deviceName); //將二組資料合併,去除重覆資料 CSTWIPCMMListBySEquipment.ForEach(WIPCMMdata => { if (CSTWIPCMMListByEquipment.Contains(WIPCMMdata) == false) { CSTWIPCMMListByEquipment.Add(WIPCMMdata); } }); if (CSTWIPCMMListByEquipment.Count == 0) { //PPK 檢驗工件未到齊,無法執行 PPK 判定! throw new Exception(RuleMessage.Error.C10118()); } //再將找到的資料合併,去除重覆資料 CSTWIPCMMListByEquipment.ForEach(WIPCMMdata => { //將[QC_INSP_SID]寫到每一筆檢驗機台資料 WIPCMMdata.QCInspectionSID = data.QC_INSP_SID; if (_CSTWIPCMMList.Contains(WIPCMMdata) == false) { _CSTWIPCMMList.Add(WIPCMMdata); } }); }); } else { //以機台名稱檢查是否有檢驗結果資料 var CSTWIPCMMListByEquipment = CSTWIPCMMInfo.GetDataListByEquipmantAndDevice(ttbEquip.Text, deviceName); if (CSTWIPCMMListByEquipment.Count == 0) { //PPK 檢驗工件未到齊,無法執行 PPK 判定! throw new Exception(RuleMessage.Error.C10118()); } _QCInspectionObjDataList.ForEach(data => { //以OP1機台名稱檢查是否有檢驗結果資料 var CSTWIPCMMListBySEquipment = CSTWIPCMMInfo.GetDataListByEquipmantAndDevice(data.ItemName5, deviceName); //將二組資料合併,去除重覆資料 CSTWIPCMMListBySEquipment.ForEach(WIPCMMdata => { if (CSTWIPCMMListByEquipment.Contains(WIPCMMdata) == false) { CSTWIPCMMListByEquipment.Add(WIPCMMdata); } }); }); //重新依據[FILEID], [SN], [SEQUENCE]執行排序 _CSTWIPCMMList = CSTWIPCMMListByEquipment.OrderBy(data => data.FileID).ThenBy(data => data["SN"]).ToList(); #region 確認檢驗結果主檔筆數是否與檢驗單明細筆數相同 List <NoSNData> NoSNDataList = new List <NoSNData>(); _CSTWIPCMMList.ForEach(data => { NoSNData tempNoSNData = new NoSNData(); tempNoSNData.SN = data["SN"].ToCimesString(); tempNoSNData.FileID = data.FileID; if (NoSNDataList.Contains(tempNoSNData) == false) { NoSNDataList.Add(tempNoSNData); } }); //比對檢驗結果主檔筆數是否與檢驗單明細筆數相同 if (NoSNDataList.Count != _QCInspectionObjDataList.Count) { //檢驗結果主檔筆數({0})與檢驗單明細筆數({1})不相同 throw new Exception(RuleMessage.Error.C10112(NoSNDataList.Count().ToString(), _QCInspectionObjDataList.Count.ToString())); } #endregion for (int i = 0; i < NoSNDataList.Count; i++) { string QCInspectionSID = _QCInspectionObjDataList[i].QC_INSP_OBJ_SID; _CSTWIPCMMList.ForEach(data => { if (data.FileID == NoSNDataList[i].FileID && data["SN"].ToCimesString() == NoSNDataList[i].SN) { //將[QC_INSP_SID]寫到每一筆檢驗機台資料 data.QCInspectionSID = QCInspectionSID; } }); } } //加入機台檢驗檔名稱 _CSTWIPCMMList.ForEach(WIPCMMdata => { ddlFileName.Items.Add(new ListItem(WIPCMMdata["FILENAME"].ToString(), WIPCMMdata.ID)); }); if (ddlFileName.Items.Count > 0) { ddlFileName.Items.Insert(0, ""); } gvQC.SetDataSource(_QCInspectionObjDataList, true); #endregion #region 設置原因碼 //清除原因碼資料 ddlPPKReasonCode.Items.Clear(); rdbNG.Enabled = false; rdbOK.Enabled = false; rdbNG.Enabled = true; rdbOK.Enabled = true; //取得原因碼清單 List <BusinessReason> reason = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, "ALL", "Default", ReasonMode.Category); if (reason.Count > 0) { ddlPPKReasonCode.DataSource = reason; ddlPPKReasonCode.DataTextField = "ReasonDescription"; ddlPPKReasonCode.DataValueField = "ReasonCategorySID"; ddlPPKReasonCode.DataBind(); if (ddlPPKReasonCode.Items.Count != 1) { ddlPPKReasonCode.Items.Insert(0, ""); } else { ddlPPKReasonCode.SelectedIndex = 0; } } else { //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員! throw new Exception(TextMessage.Error.T00641(ProgramRight, "ALL")); } #endregion btnOK.Enabled = true; } } catch (Exception ex) { //清除資料 ddlFileName.Items.Clear(); ddlPPKReasonCode.Items.Clear(); _CSTWIPCMMList = new List <CSTWIPCMMInfo>(); _QCInspectionObjDataList.Clear(); gvQC.SetDataSource(_QCInspectionObjDataList, true); _CSTWIPCMMDataList = new List <CSTWIPCMMDataInfo>(); gvInspectionData.SetDataSource(_CSTWIPCMMDataList, true); btnOK.Enabled = false; AjaxFocus(ddlDevice); HandleError(ex); } }
/// <summary> /// 輸入機台/序號 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ttbEquipOrCompLot_TextChanged(object sender, EventArgs e) { try { //清除資料 _QCTable.Rows.Clear(); string equipmentName = ""; //檢查是否有輸入機台/序號 ttbEquipOrCompLot.Must(lblEquipOrCompLot); #region 檢查輸入的內容在MES_QC_INSP_OBJ.ITEM1是否有符合的資料,如果沒有,則檢查機台 var QCDataObjList = QCInspectionObjectInfoEx.GetDataListByComponentLot(ttbEquipOrCompLot.Text); if (QCDataObjList.Count == 0) { var QCDataList = QCInspectionInfoEx.GetDataListByEquip(ttbEquipOrCompLot.Text, _QCType); if (QCDataList.Count == 0) { //找不到檢驗資料!! throw new Exception(RuleMessage.Error.C00038()); } else { //取得檢驗機台名稱 equipmentName = QCDataList[0].EquipmentName; } } else { //取得檢驗機台名稱 equipmentName = InfoCenter.GetBySID <QCInspectionInfo>(QCDataObjList[0].QC_INSP_SID).EquipmentName; } #endregion #region 檢查機台是否存在 _EquipData = EquipmentInfo.GetEquipmentByName(equipmentName); if (_EquipData == null) { //請輸入正確的機台/序號! throw new Exception(RuleMessage.Error.C10066()); } #endregion #region 檢查機台狀態是否為WaitReceiveFAI/WaitReceivePPK string currentState = "WaitReceive" + _QCType; //如果傳入參數是FAI,則必須檢查機台狀態 if (_QCType == CustomizeFunction.QCType.FAI.ToCimesString()) { if (_EquipData.CurrentState != currentState) { //[00902]機台狀態不是{0},不可使用{1}規則! throw new Exception(TextMessage.Error.T00902(currentState, _ProgramInformationBlock.ProgramRight)); } } #endregion #region 顯示檢驗清單 //取得檢驗主檔 var qcInspectionDataList = QCInspectionInfoEx.GetDataListByEquip(equipmentName, _QCType); if (qcInspectionDataList.Count == 0) { //機台:{0},查無任何檢驗資料。 throw new Exception(RuleMessage.Error.C10053(equipmentName)); } qcInspectionDataList.ForEach(qcData => { //只有狀態為WaitReceivePPK/WaitReceiveFAI/WaitReceivePQC才可以加入清單 if (qcData.Status == currentState) { //取得檢驗明細 var QCInspectionObjList = QCInspectionObjectInfo.GetInspectionObjects(qcData); QCInspectionObjList.ForEach(qcObjData => { var row = _QCTable.NewRow(); row["Equipment"] = qcData.EquipmentName; row["Device"] = qcData.DeviceName; row["SN"] = qcObjData.ItemName1; row["Status"] = qcData.PassFlag == "Y" ? "PASS" : GetUIResource("WaitQC"); row["QCINSPSID"] = qcData.ID; _QCTable.Rows.Add(row); }); } }); if (_QCTable.Rows.Count == 0) { //機台:{0},查無任何檢驗資料。 throw new Exception(RuleMessage.Error.C10053(equipmentName)); } gvQC.SetDataSource(_QCTable, true); #endregion btnOK.Enabled = true; btnReject.Enabled = true; } catch (Exception ex) { ClearField(); AjaxFocus(ttbEquipOrCompLot); HandleError(ex); } }
/// <summary> /// 輸入機台/序號 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ttbEquipOrCompLot_TextChanged(object sender, EventArgs e) { try { QCInspectionInfoEx QCInspectionData = new QCInspectionInfoEx(); //檢查是否有輸入機台/序號 ttbEquipOrCompLot.Must(lblEquipOrCompLot); #region 檢查輸入的內容在MES_QC_INSP_OBJ.ITEM1是否有符合的資料,如果沒有,則檢查機台 var QCDataObjList = QCInspectionObjectInfoEx.GetDataListByComponentLot(ttbEquipOrCompLot.Text); if (QCDataObjList.Count == 0) { var QCDataList = QCInspectionInfoEx.GetDataListByEquip(ttbEquipOrCompLot.Text, CustomizeFunction.QCType.PPK.ToCimesString()); if (QCDataList.Count == 0) { //請輸入正確的機台/序號! throw new Exception(RuleMessage.Error.C10066()); } //取得檢驗主檔資訊 QCInspectionData = QCDataList[0]; } else { //取得檢驗主檔資訊 QCInspectionData = InfoCenter.GetBySID <QCInspectionInfo>(QCDataObjList[0].QC_INSP_SID).ChangeTo <QCInspectionInfoEx>(); } //檢查機台資料及狀態 CheckEquipCurrentState(QCInspectionData.EquipmentName); #endregion #region 查詢相同的BatchID的檢驗主檔清單 _QCInspectionDataList = QCInspectionInfoEx.GetDataListByBatchID(QCInspectionData.BatchID); if (_QCInspectionDataList.Count == 0) { //檢驗單號:{0} 查無相同的BatchID throw new Exception(RuleMessage.Error.C10110(QCInspectionData.InspectionNo)); } #endregion //設置機台名稱 ttbEquip.Text = QCInspectionData.EquipmentName; //取得不重複的料號清單 var deviceList = _QCInspectionDataList.FindAll(p => p.Status == CustomizeFunction.QCStatus.PPK.ToCimesString()).Select(p => p.DeviceName).Distinct().ToList(); //var deviceList = _QCInspectionDataList.Select(p => p.DeviceName).Distinct().ToList(); #region 設置料號資料(DropDownList) //清除資料 ddlDevice.Items.Clear(); //加入清單 foreach (var deviceName in deviceList) { ddlDevice.Items.Add(new ListItem(deviceName, deviceName)); } if (ddlDevice.Items.Count != 1) { ddlDevice.Items.Insert(0, ""); } else { ddlDevice.SelectedIndex = 0; ddlDevice_SelectedIndexChanged(null, EventArgs.Empty); } #endregion } catch (Exception ex) { ClearField(); AjaxFocus(ttbEquipOrCompLot); HandleError(ex); } }