Ejemplo n.º 1
0
        /// <summary>
        /// 初始化下拉式選項(不良原因碼及工件序號)
        /// </summary>
        void InitialDropDownList()
        {
            ddlDefectReason.Items.Clear();
            List <BusinessReason> reason = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(_LotData.CurrentRuleName, _LotData.OperationName, "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(_LotData.CurrentRuleName, _LotData.OperationName));
            }

            ddlComponentId.Items.Clear();
            List <ComponentInfo> components = ComponentInfo.GetLotAllComponents(_LotData);

            if (components.Count > 0)
            {
                ddlComponentId.DataSource     = components;
                ddlComponentId.DataTextField  = "COMPONENTID";
                ddlComponentId.DataValueField = "WIPComponentSID";
                ddlComponentId.DataBind();

                if (ddlComponentId.Items.Count != 1)
                {
                    ddlComponentId.Items.Insert(0, "");
                }
                else
                {
                    ddlComponentId.SelectedIndex = 0;
                    ddlComponentId_SelectedIndexChanged(null, EventArgs.Empty);
                }
            }
        }
Ejemplo n.º 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);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 輸入機加批號
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ttbLot_TextChanged(object sender, EventArgs e)
        {
            try
            {
                #region 驗證批號存在性
                _LotData = LotInfoEx.GetLotByLot(ttbLot.Text);

                if (_LotData == null)
                {
                    //[00030]{0}:{1}不存在!
                    throw new Exception(TextMessage.Error.T00030(lblLot.Text, ttbLot.Text));
                }
                #endregion

                #region 驗證批號狀態,Run的批號
                if (_LotData.Status != LotDefaultStatus.Run.ToString())
                {
                    //狀態為{0},不可執行
                    throw new Exception(RuleMessage.Error.C10003(_LotData.Status));
                }
                #endregion

                #region 驗證currentRule
                if (_LotData.CurrentRuleName != _ProgramInformationBlock.ProgramRight)
                {
                    //該批號作業為XXXX,不為此功能,請遵循作業規範
                    throw new Exception(RuleMessage.Error.C10004(_LotData.CurrentRuleName));
                }
                #endregion

                #region 維修原因碼(DropDownList):依照原因碼工作站設定,帶出原因碼
                ddlRepairReasonCode.Items.Clear();

                List <BusinessReason> reasonList = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(_LotData.CurrentRuleName, _LotData.OperationName, "Default", ReasonMode.Category);

                if (reasonList.Count > 0)
                {
                    ddlRepairReasonCode.DataSource     = reasonList;
                    ddlRepairReasonCode.DataTextField  = "ReasonDescription";
                    ddlRepairReasonCode.DataValueField = "ReasonCategorySID";
                    ddlRepairReasonCode.DataBind();

                    if (ddlRepairReasonCode.Items.Count != 1)
                    {
                        ddlRepairReasonCode.Items.Insert(0, "");
                    }
                    else
                    {
                        ddlRepairReasonCode.SelectedIndex = 0;
                    }
                }
                else
                {
                    //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員!
                    throw new Exception(TextMessage.Error.T00641(ProgramRight, _LotData.OperationName));
                }
                #endregion

                //取得工件序號
                var componentDataList = ComponentInfoEx.GetDataByCurrentLot(_LotData.Lot);
                if (componentDataList.Count > 0)
                {
                    ttbItemSN.Text = componentDataList[0].ComponentID;
                }

                //取得送待判原因
                var lotDefectData = LotDefectInfoEx.GetDataByLotAndComponentID(_LotData.Lot, ttbItemSN.Text);
                if (lotDefectData != null)
                {
                    _DefectJudgementData = CSTWIPDefectJudgementInfo.GetDataByWIPDefectSID(lotDefectData.DefectSID);

                    if (_DefectJudgementData != null)
                    {
                        ttbJudgeReason.Text = _DefectJudgementData.Reason;
                    }
                }

                ttbRepairDescr.Text = "";
                btnOK.Enabled       = true;
            }
            catch (Exception ex)
            {
                ClearField();
                AjaxFocus(ttbLot);
                HandleError(ex);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 切換序號
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlSN_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //清除機台檢驗資料
                _CSTWIPCMMList     = new List <CSTWIPCMMInfo>();
                _CSTWIPCMMDataList = new List <CSTWIPCMMDataInfo>();
                gvInspectionData.SetDataSource(_CSTWIPCMMDataList, true);
                ddlFileName.Items.Clear();

                ddlSN.Must(lblSN);

                if (ddlSN.SelectedIndex != -1)
                {
                    //清除原因碼資料
                    ddlFAIReasonCode.Items.Clear();

                    ttbMaterialLot.Text  = "";
                    ttbWorkOrderLot.Text = "";
                    ttbDescr.Text        = "";

                    rdbPASS.Enabled = false;
                    rdbNG.Enabled   = false;
                    rdbOK.Enabled   = false;

                    int index = -1;

                    for (int i = 0; i < _QCDataList.Count; i++)
                    {
                        string ID = _QCDataList[i].ID;

                        //比對符合選擇機台編號的資料
                        if (ID == ddlSN.SelectedValue)
                        {
                            index = i;
                            break;
                        }
                    }

                    _SelectedQCData = _QCDataList[index];

                    ttbMaterialLot.Text  = _SelectedQCData.MaterialLot;
                    ttbWorkOrderLot.Text = _SelectedQCData.WorkOderLot;

                    if (_SelectedQCData.PassFlag == "N")
                    {
                        //以機台名稱檢查是否有檢驗結果資料
                        _CSTWIPCMMList = CSTWIPCMMInfo.GetDataListByEquipmantAndFileIDAndDevice(_SelectedQCData.EquipmentName, _SelectedQCData.ComponentLot,
                                                                                                _SelectedQCData.WorkOderLot, _SelectedQCData.MaterialLot, _SelectedQCData.DeviceName);

                        //以OP1機台名稱檢查是否有檢驗結果資料
                        var CSTWIPCMMListBySEquipment = CSTWIPCMMInfo.GetDataListByEquipmantAndFileIDAndDevice(_SelectedQCData.SecondEquipmentName, _SelectedQCData.ComponentLot,
                                                                                                               _SelectedQCData.WorkOderLot, _SelectedQCData.MaterialLot, _SelectedQCData.DeviceName);

                        //將二組資料合併,去除重覆資料
                        CSTWIPCMMListBySEquipment.ForEach(data =>
                        {
                            if (_CSTWIPCMMList.Contains(data) == false)
                            {
                                _CSTWIPCMMList.Add(data);
                            }
                        });

                        if (_CSTWIPCMMList.Count == 0)
                        {
                            //序號:{0} 沒有機台檢驗資料可以顯示!
                            throw new Exception(RuleMessage.Error.C10065(ddlSN.SelectedItem.Text));
                        }

                        //加入機台檢驗檔名稱
                        _CSTWIPCMMList.ForEach(data =>
                        {
                            ddlFileName.Items.Add(new ListItem(data["FILENAME"].ToString(), data.ID));
                        });

                        if (ddlFileName.Items.Count > 0)
                        {
                            ddlFileName.Items.Insert(0, "");
                        }
                    }
                    else
                    {
                        rdbPASS.Enabled = true;
                    }

                    //取得Lot資料
                    var lotData = InfoCenter.GetBySID <LotInfo>(_SelectedQCData.ObjectSID);

                    rdbNG.Enabled = true;
                    rdbOK.Enabled = true;

                    #region 設置原因碼

                    List <BusinessReason> reason = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, "ALL", "Default", ReasonMode.Category);
                    if (reason.Count > 0)
                    {
                        ddlFAIReasonCode.DataSource     = reason;
                        ddlFAIReasonCode.DataTextField  = "ReasonDescription";
                        ddlFAIReasonCode.DataValueField = "ReasonCategorySID";
                        ddlFAIReasonCode.DataBind();

                        if (ddlFAIReasonCode.Items.Count != 1)
                        {
                            ddlFAIReasonCode.Items.Insert(0, "");
                        }
                        else
                        {
                            ddlFAIReasonCode.SelectedIndex = 0;
                        }
                    }
                    else
                    {
                        //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員!
                        throw new Exception(TextMessage.Error.T00641(ProgramRight, "ALL"));
                    }
                    #endregion

                    btnOK.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);

                ddlFAIReasonCode.Items.Clear();

                ttbMaterialLot.Text  = "";
                ttbDescr.Text        = "";
                ttbWorkOrderLot.Text = "";

                btnOK.Enabled = false;

                rdbOK.Checked    = true;
                rdbNG.Checked    = false;
                rdbPASS.Checked  = false;
                rdbCLOSE.Checked = false;

                rdbOK.Enabled   = true;
                rdbNG.Enabled   = false;
                rdbPASS.Enabled = false;

                _CSTWIPCMMList     = new List <CSTWIPCMMInfo>();
                _CSTWIPCMMDataList = new List <CSTWIPCMMDataInfo>();
                gvInspectionData.SetDataSource(_CSTWIPCMMDataList, true);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 切換不同的送待判原因
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlJudgeDefect_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                //確認是否有選擇送待判原因
                ddlJudgeDefect.Must(lblJudgeDefect);

                //取得批號資訊
                _LotDefectData = InfoCenter.GetBySID <LotDefectInfo>(ddlJudgeDefect.SelectedValue);
                _LotData       = LotInfoEx.GetLotByLot(_LotDefectData.Lot).ChangeTo <LotInfoEx>();

                #region 判定原因碼(DropDownList):依照原因碼工作站設定,帶出原因碼
                ddlJudgeReason.Items.Clear();

                List <BusinessReason> reasonList = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(_LotData.CurrentRuleName, _LotData.OperationName, "Default", ReasonMode.Category);

                if (reasonList.Count > 0)
                {
                    ddlJudgeReason.DataSource     = reasonList;
                    ddlJudgeReason.DataTextField  = "ReasonDescription";
                    ddlJudgeReason.DataValueField = "ReasonCategorySID";
                    ddlJudgeReason.DataBind();

                    if (ddlJudgeReason.Items.Count != 1)
                    {
                        ddlJudgeReason.Items.Insert(0, "");
                    }
                    else
                    {
                        ddlJudgeReason.SelectedIndex = 0;
                    }
                }
                else
                {
                    //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員!
                    throw new Exception(TextMessage.Error.T00641(ProgramRight, _LotData.OperationName));
                }
                #endregion

                //數量
                ttbQty.Text = _LotData.Quantity.ToString();

                //取得工件序號
                var componentDataList = ComponentInfoEx.GetDataByCurrentLot(_LotData.Lot);
                if (componentDataList.Count > 0)
                {
                    ttbItemSN.Text = componentDataList[0].ComponentID;
                }

                ttbJudgeDescr.Text = "";
                btnOK.Enabled      = true;
                btnPrint.Enabled   = true;
            }
            catch (Exception ex)
            {
                ttbItemSN.Text     = "";
                ttbQty.Text        = "";
                ttbJudgeDescr.Text = "";

                ddlJudgeReason.Items.Clear();

                btnOK.Enabled    = false;
                btnPrint.Enabled = false;

                _LotData       = null;
                _LotDefectData = null;

                HandleError(ex);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 輸入刀具零組件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ttbToolName_TextChanged(object sender, EventArgs e)
        {
            try
            {
                _ToolData = ToolInfo.GetToolByName(ttbToolName.Text.Trim()).ChangeTo <ToolInfoEx>();

                //確認刀具零組件是否存在
                if (_ToolData == null)
                {
                    // [00030]{0}:{1}不存在!
                    throw new Exception(TextMessage.Error.T00030(lblToolName.Text, ttbToolName.Text));
                }

                //確認刀具零組件是否啟用
                if (_ToolData.UsingStatus == UsingStatus.Disable)
                {
                    //刀具零組件:{0}已停用,如需使用,請至"刀具零組件進料作業"啟用!!
                    throw new Exception(RuleMessage.Error.C10128(ttbToolName.Text));
                }

                //確認刀具零組件狀態是否可使用,僅IDLE可執行
                if (_ToolData.CurrentState != "IDLE")
                {
                    //刀具零組件狀態為{0},不可執行此功能!!
                    throw new Exception(RuleMessage.Error.C10129(_ToolData.CurrentState));
                }

                #region  機原因碼(DropDownList):依照原因碼工作站設定,帶出原因碼
                ddlReason.Items.Clear();

                List <BusinessReason> reasonList = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, "ALL", "Default", ReasonMode.Category);

                if (reasonList.Count > 0)
                {
                    ddlReason.DataSource     = reasonList;
                    ddlReason.DataTextField  = "ReasonDescription";
                    ddlReason.DataValueField = "ReasonCategorySID";
                    ddlReason.DataBind();

                    if (ddlReason.Items.Count != 1)
                    {
                        ddlReason.Items.Insert(0, "");
                    }
                    else
                    {
                        ddlReason.SelectedIndex = 0;
                    }
                }
                else
                {
                    //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員!
                    throw new Exception(TextMessage.Error.T00641(ProgramRight, "ALL"));
                }
                #endregion

                btnOK.Enabled = true;
            }
            catch (Exception ex)
            {
                ClearField();
                AjaxFocus(ttbToolName);
                HandleError(ex);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 切換序號
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlSN_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                ddlSN.Must(lblSN);

                if (ddlSN.SelectedIndex != -1)
                {
                    //清除原因碼資料
                    ddlPQCReasonCode.Items.Clear();

                    ttbMaterialLot.Text  = "";
                    ttbWorkOrderLot.Text = "";
                    ttbDescr.Text        = "";

                    rdbNG.Enabled = false;
                    rdbOK.Enabled = false;

                    int index = -1;

                    for (int i = 0; i < _QCDataList.Count; i++)
                    {
                        string ID = _QCDataList[i].ID;

                        //比對符合選擇機台編號的資料
                        if (ID == ddlSN.SelectedValue)
                        {
                            index = i;
                            break;
                        }
                    }

                    _SelectedQCData = _QCDataList[index];

                    ttbMaterialLot.Text  = _SelectedQCData.MaterialLot;
                    ttbWorkOrderLot.Text = _SelectedQCData.WorkOderLot;

                    if (_SelectedQCData.PassFlag == "N")
                    {
                        // 取得中心孔量測設定值
                        var lstSAICenterHolde = WpcExClassItemInfo.GetExClassItemInfo("SAICenterHole", _SelectedQCData.DeviceName);
                        if (lstSAICenterHolde.Count == 0)
                        {
                            lstSAICenterHolde = WpcExClassItemInfo.GetExClassItemInfo("SAICenterHole", "ALL");
                        }
                        // 若找不到中心孔量測需拋錯
                        if (lstSAICenterHolde.Count == 0)
                        {
                            throw new Exception(TextMessage.Error.T00555("SAICenterHole", _SelectedQCData.DeviceName + "," + "ALL"));
                        }

                        _SAICenterHole = lstSAICenterHolde[0];
                        // 設定中心孔量測的DataTable資料
                        DataTable dtEmpty = new DataTable();
                        dtEmpty.Columns.Add("ITEM", typeof(int));
                        dtEmpty.Columns.Add("EDC", typeof(String));

                        for (int i = 0; i < _SAICenterHole.Remark04.ToDecimal(0); i++)
                        {
                            DataRow dr = dtEmpty.NewRow();
                            dr["ITEM"] = i + 1;
                            dtEmpty.Rows.Add(dr);
                        }
                        // 將產生的資料表顯示在畫面上
                        gvComponentEDC.DataSource = dtEmpty;
                        gvComponentEDC.DataBind();
                    }

                    //取得Lot資料
                    var lotData = InfoCenter.GetBySID <LotInfo>(_SelectedQCData.ObjectSID);

                    rdbNG.Enabled = true;
                    rdbOK.Enabled = true;

                    #region 設置原因碼

                    List <BusinessReason> reason = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, "ALL", "Default", ReasonMode.Category);
                    if (reason.Count > 0)
                    {
                        ddlPQCReasonCode.DataSource     = reason;
                        ddlPQCReasonCode.DataTextField  = "ReasonDescription";
                        ddlPQCReasonCode.DataValueField = "ReasonCategorySID";
                        ddlPQCReasonCode.DataBind();

                        if (ddlPQCReasonCode.Items.Count != 1)
                        {
                            ddlPQCReasonCode.Items.Insert(0, "");
                        }
                        else
                        {
                            ddlPQCReasonCode.SelectedIndex = 0;
                        }
                    }
                    else
                    {
                        //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員!
                        throw new Exception(TextMessage.Error.T00641(ProgramRight, "ALL"));
                    }
                    #endregion

                    btnOK.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                HandleError(ex);

                ddlPQCReasonCode.Items.Clear();

                ttbMaterialLot.Text  = "";
                ttbDescr.Text        = "";
                ttbWorkOrderLot.Text = "";

                btnOK.Enabled = false;

                rdbOK.Checked = true;
                rdbNG.Checked = false;

                rdbOK.Enabled = true;
                rdbNG.Enabled = false;

                gvComponentEDC.DataSource = null;
                gvComponentEDC.DataBind();
            }
        }
Ejemplo n.º 8
0
        /// <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);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 輸入模具編號
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ttbToolName_TextChanged(object sender, EventArgs e)
        {
            try
            {
                string equipmentName = "";

                _ToolData = ToolInfo.GetToolByName(ttbToolName.Text);

                #region 驗證模治具號正確性
                if (_ToolData == null)
                {
                    //模治具:{0}不存在,請確認資料正確性
                    throw new Exception(RuleMessage.Error.C10029(ttbToolName.Text));
                }
                #endregion

                #region 驗證模治具啟用狀態
                if (_ToolData.UsingStatus == UsingStatus.Disable)
                {
                    //模治具:{0}已停用,如需使用,請至"配件資料維護"啟用!!
                    throw new Exception(RuleMessage.Error.C10030(ttbToolName.Text));
                }
                #endregion

                #region 驗證模治具是否在別的機台上,如是要報錯
                var equipToolDataList = EquipToolInfo.GetByToolName(_ToolData.ToolName);

                if (equipToolDataList.Count == 0)
                {
                    //模治具:{0}不在機台上,不須下機!!
                    throw new Exception(RuleMessage.Error.C10031(ttbToolName.Text));
                }

                equipmentName = equipToolDataList[0].EquipmentName;
                #endregion

                #region  機原因碼(DropDownList):依照原因碼工作站設定,帶出原因碼
                ddlCheckOutReasonCode.Items.Clear();

                List <BusinessReason> reasonList = ReasonCategoryInfo.GetOperationRuleCategoryReasonsWithReasonDescr(ProgramRight, "ALL", "Default", ReasonMode.Category);

                if (reasonList.Count > 0)
                {
                    ddlCheckOutReasonCode.DataSource     = reasonList;
                    ddlCheckOutReasonCode.DataTextField  = "ReasonDescription";
                    ddlCheckOutReasonCode.DataValueField = "ReasonCategorySID";
                    ddlCheckOutReasonCode.DataBind();

                    if (ddlCheckOutReasonCode.Items.Count != 1)
                    {
                        ddlCheckOutReasonCode.Items.Insert(0, "");
                    }
                    else
                    {
                        ddlCheckOutReasonCode.SelectedIndex = 0;
                    }
                }
                else
                {
                    //[00641]規則:{0} 工作站:{1} 使用的原因碼未設定,請洽IT人員!
                    throw new Exception(TextMessage.Error.T00641(ProgramRight, "ALL"));
                }
                #endregion

                ttbToolDescr.Text = _ToolData.Description;
                ttbToolType.Text  = _ToolData.ToolType;
                ttbEquip.Text     = equipmentName;

                btnOK.Enabled = true;
            }
            catch (Exception ex)
            {
                ClearField();
                AjaxFocus(ttbToolName);
                HandleError(ex);
            }
        }