Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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
            }
        }