protected void ttbWOLot_TextChanged(object sender, EventArgs e) { try { /**************************************************************** * 1. 依照工作站點及料號的設定,判斷批號是否可執行中心孔資訊收集。 * 2. 部分料號就算不收中心孔資訊,但需要收集DMC * 3. 若不須收集中心孔,且prodType = 'W',連DMC都不須執行 ****************************************************************/ ttbWorkpiece.ReadOnly = true; ttbTemperature.ReadOnly = true; // 清除資料與使用者介面 ClearField(); string sWOLot = ttbWOLot.Text.Trim(); if (sWOLot.IsNullOrEmpty()) { return; } // 小工單號找批號 //var lotInfo = LotInfoEx.GetLotByWorkOrderLot(sWOLot); ProcessLotData = LotInfoEx.GetLotByLot(sWOLot); if (ProcessLotData == null) { ttbWOLot.Text = ""; AjaxFocus(ttbWOLot); throw new RuleCimesException(TextMessage.Error.T00030(lblWOLot.Text + "(" + sWOLot + ")", GetUIResource("Lot"))); } _ComponentList = ComponentInfo.GetLotAllComponents(ProcessLotData); //取得小工單號的料號版本 var deviceVersionInfo = DeviceVersionInfo.GetLotCurrentDeviceVersion(ProcessLotData).ChangeTo <DeviceVersionInfoEx>(); if (deviceVersionInfo == null) { throw new CimesException(TextMessage.Error.T00537(ProcessLotData.DeviceName)); } if (deviceVersionInfo.ProdType.IsNullOrTrimEmpty()) { ttbWOLot.Text = ""; AjaxFocus(ttbWOLot); throw new RuleCimesException(TextMessage.Error.T00031(GetUIResource("Device"), deviceVersionInfo.DeviceName, "PRODTYPE")); } _ProdType = deviceVersionInfo.ProdType; _CenterHoleFlag = deviceVersionInfo.CenterHoleFlag; //確認執行的工作站是否需要收集中心孔 var operData = OperationInfo.GetOperationByName(ProcessLotData.OperationName).ChangeTo <OperationInfoEx>(); if (operData == null) { throw new CimesException(TextMessage.Error.T00171(ProcessLotData.OperationName)); } if (!operData.CenterHoleFlag.ToBool() && !operData.GetDMC.ToBool()) { AjaxFocus(ttbWOLot); throw new CimesException(RuleMessage.Error.C00042(ProcessLotData.OperationName)); } //若不須收集中心孔,且prodType = 'W',連DMC都不須執行 if (!_CenterHoleFlag.ToBool() && deviceVersionInfo.ProdType == CustomizeFunction.ProdType.W.ToCimesString()) { AjaxFocus(ttbWOLot); throw new CimesException(RuleMessage.Error.C00043(ProcessLotData.DeviceName)); } if (_CenterHoleFlag.ToBool()) { gvComponentEDC.Visible = true; } else { gvComponentEDC.Visible = false; } ttbWorkpiece.ReadOnly = false; AjaxFocus(ttbWorkpiece); } catch (Exception ex) { HandleError(ex); } }
protected void ttbWOLot_TextChanged(object sender, EventArgs e) { try { /*************************************************************************************** * 依照PRODTYP不同,做不同畫面的處置: * S:有序號,一律刷入DMC處理。 * G:僅有鍛造批,選擇要判定的工作站,系統找出該工作站所有的COMPONENT,順排取最後一個 * W:沒有刻字,選擇要判定的工作站,系統找出該工作站所有的COMPONENT,順排取最後一個 * B:有刻字,但序號無意義。 * 在刻字站前因為未刻字所以選擇要判定的工作站,系統找出該工作站所有的COMPONENT,順排取最後一個 * 刻字後,直接刷入DMC處理 **********************************************************/ // 清除資料與使用者介面 ClearField(); LoadDefaultControl(); string sWOLot = ttbWOLot.Text.Trim(); if (sWOLot.IsNullOrEmpty()) { return; } #region 找出料號型態 // 小工單號找批號,此處找批號只是為了找出料號,也順便可以確認線上還有批號可以做送待判這件事 ProcessLotData = LotInfoEx.GetLotByWorkOrderLot(sWOLot); if (ProcessLotData == null) { ProcessLotData = LotInfoEx.GetLotByLot(sWOLot); } if (ProcessLotData == null) { ttbWOLot.Text = ""; AjaxFocus(ttbWOLot); throw new RuleCimesException(TextMessage.Error.T00030(GetUIResource("WOLot"), sWOLot)); } //取得小工單號的料號版本 var deviceVersionInfo = DeviceVersionInfo.GetLotCurrentDeviceVersion(ProcessLotData).ChangeTo <DeviceVersionInfoEx>(); if (deviceVersionInfo == null) { throw new CimesException(TextMessage.Error.T00537(ProcessLotData.DeviceName)); } if (deviceVersionInfo.ProdType.IsNullOrTrimEmpty()) { ttbWOLot.Text = ""; AjaxFocus(ttbWOLot); throw new RuleCimesException(TextMessage.Error.T00031(GetUIResource("Device"), deviceVersionInfo.DeviceName, "PRODTYPE")); } _ProdType = deviceVersionInfo.ProdType; #endregion #region 取得工作站 ddlOperation.Items.Clear(); var lstLotRouteOperation = RouteOperationInfo.GetLotDefaultOperations(ProcessLotData).OrderBy(p => p.OperationSequence).ToList(); lstLotRouteOperation.ForEach(oper => { ddlOperation.Items.Add(new ListItem(oper.OperationName + "[" + oper.OperationSequence + "]", oper.OperationName)); }); ddlOperation.Items.Insert(0, ""); #endregion #region 原因碼選項 ddlDefectReason.Items.Clear(); List <BusinessReason> reason = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, ProcessLotData.OperationName, "Default", ReasonMode.Category); if (reason.Count == 0) { reason = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, "ALL", "Default", ReasonMode.Category); } if (reason.Count > 0) { ddlDefectReason.DataSource = reason; ddlDefectReason.DataTextField = "ReasonDescription"; ddlDefectReason.DataValueField = "ReasonCategorySID"; ddlDefectReason.DataBind(); if (ddlDefectReason.Items.Count != 1) { ddlDefectReason.Items.Insert(0, ""); } else { ddlDefectReason.SelectedIndex = 0; } } else { //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員! throw new Exception(TextMessage.Error.T00641(ProgramRight, ProcessLotData.OperationName)); } #endregion #region 依照PRODTYPE處理介面 ttbDefectDesc.ReadOnly = false; ddlDefectReason.Enabled = true; if (_ProdType == CustomizeFunction.ProdType.S.ToCimesString()) { ddlOperation.Enabled = false; ttbWorkpiece.ReadOnly = false; } if (_ProdType == CustomizeFunction.ProdType.W.ToCimesString() || _ProdType == CustomizeFunction.ProdType.G.ToCimesString()) { ttbWorkpiece.ReadOnly = true; ddlOperation.Enabled = true; } if (_ProdType == CustomizeFunction.ProdType.B.ToCimesString()) { ttbWorkpiece.ReadOnly = false; ddlOperation.Enabled = true; } #endregion #region 找出待判站 //在系統資料維護裡,取得此批號對應製程(CPC/CPF)的待判工作站名稱 List <WpcExClassItemInfo> operationList = WpcExClassItemInfo.GetExtendItemListByClassAndRemarks("SAIJudgeOperation"); WpcExClassItemInfo judgeOperationData = operationList.Find(p => p.Remark01 == ProcessLotData.Process); if (judgeOperationData == null) { //找不到待判站資訊,請至系統資料維護增加資訊,屬性:{0} throw new Exception(RuleMessage.Error.C10014(ProcessLotData.Process)); } //取得待判工作站名稱 _JudgeOperationName = judgeOperationData.Remark02; #endregion if (ttbWorkpiece.Enabled) { AjaxFocus(ttbWorkpiece); } } catch (Exception ex) { HandleError(ex); } }
/// <summary> /// 確認預約工作站是否有開啟物料檢查功能 /// </summary> private void CheckBom(string opeartoinName, EquipmentInfo equipData, LotInfo lotData) { //確認工作站是否有開啟物料檢查功能,如果機台資料為NULL,則直接跳過這個檢查機制 var operationData = OperationInfo.GetOperationByName(opeartoinName).ChangeTo <OperationInfoEx>(); if (operationData.CheckBOM == "Y" && equipData != null) { #region 先比對BOM表的料是否都有上機 //取得客製表[CST_WPC_BOM]工單對應華司料(SORTF = 2)的資料 var WOBomList = CSTWPCWorkOrderBOMInfo.GetDataByWorkOrderAndSORTF(_LotData.WorkOrder, "2"); //取得目前選定的機台上所有的物料資料 var eqpMLotList = EquipmentMaterialLotInfo.GetEquipmentMaterialLotByEquipment(equipData.EquipmentName); //確認目前選定的機台是否已經有上物料 WOBomList.ForEach(WOBom => { bool isFind = false; foreach (var eqpMLot in eqpMLotList) { //取得料編號資料 var materialLotData = MaterialLotInfo.GetMaterialLotByMaterialLot(eqpMLot.MaterialLot); if (WOBom.MATNR == materialLotData.MaterialNO) { //註記有找到對應的物料編號 isFind = true; break; } } if (isFind == false) { //機台:{0} 沒有上物料編號{1}的資料! throw new Exception(RuleMessage.Error.C10145(equipData.EquipmentName, WOBom.MATNR)); } }); #endregion #region 依照料號的孔位設定,確認孔位都有華司資料 var deviceVersion = DeviceVersionInfo.GetLotCurrentDeviceVersion(lotData).ChangeTo <DeviceVersionInfoEx>(); if (deviceVersion.PushLocation.ToString().IsNullOrEmpty()) { //[00031]{0}:{1}的系統屬性:{2} 未設定,請洽IT人員! throw new CimesException(TextMessage.Error.T00031(GetUIResource("Device"), deviceVersion.DeviceName, "PUSH_LOCATION")); } var lstPushLocation = deviceVersion["PUSH_LOCATION"].ToString().Split(','); //先取得機台上的物料批資訊 List <MaterialLotInfo> eqpMaterialLotList = new List <MaterialLotInfo>(); eqpMLotList.ForEach(p => { var mLot = MaterialLotInfo.GetMaterialLotByMaterialLot(p.MaterialLot); eqpMaterialLotList.Add(mLot); }); for (int i = 0; i < lstPushLocation.Length; i++) { var mlotData = eqpMaterialLotList.Find(p => p.Location == lstPushLocation[i]); if (mlotData == null) { throw new CimesException(RuleMessage.Error.C00041(equipData.EquipmentName, lstPushLocation[i])); } } #endregion } }