Exemple #1
0
        /// <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);
            }
        }
Exemple #2
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);
            }
        }
Exemple #3
0
        /// <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);
            }
        }
Exemple #4
0
        /// <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);
            }
        }