示例#1
0
        /// <summary>
        /// 確定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                if (_CSTMMSIqcInfoData == null)
                {
                    // [00060]{0}沒有資料可顯示!
                    throw new Exception(TextMessage.Error.T00060(""));
                }
                if (ttbNewQuantity.Text.IsNullOrTrimEmpty())
                {
                    // [00060]{0}沒有資料可顯示!
                    throw new Exception(TextMessage.Error.T00060(lblNewQuantity.Text));
                }
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    var CSTMMSIqcInfoLogData = _CSTMMSIqcInfoData.Fill <CSTMMSIqcInfoLog>();
                    CSTMMSIqcInfoLogData.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                    _CSTMMSIqcInfoData.Quantity = ttbNewQuantity.Text.ToDecimal();
                    _CSTMMSIqcInfoData.UpdateToDB();
                    cts.Complete();
                }

                ClearField();
                AjaxFocus(ttbIQCRunID);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#2
0
        protected void gvToolList_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                CurrentToolData = AllTools[gvToolList.Rows[e.RowIndex].DataItemIndex];

                if (CurrentToolData.ActiveFlag == "T")      //ActiveFlag的判斷,若曾經啟用過則不可刪除
                {
                    throw new Exception(TextMessage.Error.T00714());
                }

                using (CimesTransactionScope cts = CimesTransactionScope.Create())
                {
                    CurrentToolData.DeleteFromDB();
                    AttributeAttributeInfo.DeleteByObjectSIDAndDataClass(CurrentToolData.ID, "ToolAttribute", this.User.Identity.Name, DBCenter.GetSystemTime());
                    LogCenter.LogToDB(CurrentToolData, LogCenter.LogIndicator.Create(ActionType.Remove, User.Identity.Name, DBCenter.GetSystemTime()));
                    cts.Complete();
                }
                CurrentToolData = null;
                gvToolList.ResetCloneDataSource();
                QueryAllTool();
                //BindGridView();
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#3
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                if (_ProcessLot == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00826(lblBoxNo.Text));
                }

                // 定義交易戳記
                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    // 將轉為子單元的批號還原,例如可使用於拆包
                    WIPTxn.Default.ConvertToLot(_ProcessLot, _ComponentList, txnStamp);
                    cts.Complete();
                }
                // 返回定義的預設網頁
                ReturnToPortal();
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#4
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //確認模具是否有輸入
                ttbToolName.Must(lblToolName);

                using (var cts = CimesTransactionScope.Create())
                {
                    //變更模具上的儲位為Warehouse
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "Location", "Warehouse", txnStamp);

                    cts.Complete();
                }

                ClearField();

                AjaxFocus(ttbToolName);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#5
0
        /// <summary>
        /// 刪除檢驗資料
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvToolReport_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                int index = gvToolReport.Rows[e.RowIndex].DataItemIndex;

                var removeData = _ToolReports[index];

                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                using (var cts = CimesTransactionScope.Create())
                {
                    removeData.DeleteFromDB();

                    LogCenter.LogToDB(removeData, LogCenter.LogIndicator.Create(ActionType.Remove, txnStamp.UserID, txnStamp.RecordTime));

                    cts.Complete();
                }

                //重新取得資料
                GetToolReport(_CurrentToolName);
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#6
0
        protected void gvQuery_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                int iIndex = gvQuery.Rows[e.RowIndex].DataItemIndex;


                //避免新增未按下儲存就按其他資料的編輯
                string SID, Tag;
                if (ToolTypeList[iIndex].ActiveFlag == "T")     //ActiveFlag的判斷,若曾經啟用過則不可刪除
                {
                    removeListAddandDeletRow();
                    gvQuery.SetDataSource(ToolTypeList);
                    gvQuery.DataBind();
                    throw new Exception(TextMessage.Error.T00714());
                }
                else
                {
                    //  Delete Data
                    SID = ToolTypeList[iIndex].ID;
                    //避免若新增模式時,按下刪除的button,不作動作
                    if (SID.Length == 0)
                    {
                        return;
                    }

                    using (CimesTransactionScope cts = CimesTransactionScope.Create())
                    {
                        if (ToolTypeList[iIndex].DeleteFromDB() == 0)
                        {
                            throw new Exception(TextMessage.Error.T00710(""));
                        }

                        AttributeAttributeInfo.DeleteByObjectSIDAndDataClass(SID, "ToolTypeAttribute", this.User.Identity.Name, DBCenter.GetSystemTime());

                        cts.Complete();
                    }
                    _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00349(ToolTypeList[iIndex].Type));

                    ToolTypeList.RemoveAt(iIndex);

                    removeListAddandDeletRow();
                    gvQuery.SetDataSource(ToolTypeList);

                    gvQuery.EditItemIndex = -1;
                    if (gvQuery.CurrentPageIndex > ((ToolTypeList.Count - 1) / gvQuery.PageSize))
                    {
                        gvQuery.CurrentPageIndex = (ToolTypeList.Count - 1) / gvQuery.PageSize;
                    }
                    gvQuery.DataBind();
                    DisableSubControl();
                    uscAttributeSetupGrid.ClearField();
                }
            }
            catch (Exception ex)
            {
                HandleError(ex, CurrentUpdatePanel, string.Empty, MessageShowOptions.OnLabel);
            }
        }
示例#7
0
        private void InsertToolType(int rowIndex)
        {
            int         index     = gvQuery.Rows[rowIndex].DataItemIndex;
            ArrayList   SaveList  = new ArrayList();
            string      sToolType = ((TextBox)gvQuery.Rows[rowIndex].FindControl("ttbType")).Text;
            RadioButton rbtEnable = (RadioButton)gvQuery.Rows[rowIndex].FindControl("rbEnable");
            TextBox     ttbDescr  = (TextBox)gvQuery.Rows[rowIndex].FindControl("ttbDescription");

            //檢查是否有相同名稱存在的資料
            sql = "SELECT 1 FROM MES_TOOL_TYPE WHERE TYPE = #[STRING]";
            DataView dvCheck = DBCenter.GetDataTable(sql, sToolType).DefaultView;// Query.DoQuery(sql);

            if (dvCheck != null && dvCheck.Count > 0)
            {
                throw new Exception(TextMessage.Error.T00710(sToolType));
            }

            uscAttributeSetupGrid.ValidateCheck();
            //新增資料庫
            ToolTypeInfo toolTypeData = InfoCenter.Create <ToolTypeInfo>();

            toolTypeData.Type          = sToolType;
            toolTypeData.Description   = ttbDescr.Text;
            toolTypeData["TOOLCLASS"]  = "CUTTER";
            toolTypeData["UPDATETIME"] = DBCenter.GetSystemTime();
            toolTypeData["USERID"]     = this.User.Identity.Name;
            if (rbtEnable.Checked == true)
            {
                toolTypeData.Status     = "Enable";
                toolTypeData.ActiveFlag = "T";
            }
            else
            {
                toolTypeData.Status     = "Disable";
                toolTypeData.ActiveFlag = "F";
            }

            //儲存系統屬性
            _SystemAttribute.SaveSystemAttribute(toolTypeData);
            TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, this.ApplicationName);

            using (CimesTransactionScope cts = CimesTransactionScope.Create())
            {
                toolTypeData.InsertToDB();
                uscAttributeSetupGrid.ExcuteTransaction(toolTypeData.ID);

                //儲存刀壽
                SaveToolLife(sToolType, txnStamp.UserID, txnStamp.RecordTime);

                //儲存刀具圖檔
                SaveToolPicture(sToolType, txnStamp.UserID, txnStamp.RecordTime);

                cts.Complete();
            }

            _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00695(sToolType));
            ToolTypeList[index] = toolTypeData;
        }
示例#8
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                EquipmentInfo equipmentData = EquipmentInfo.GetEquipmentByName(mEQP.EquipmentName);

                if (mEQP.Tag != equipmentData.Tag)
                {
                    throw new RuleCimesException(TextMessage.Error.T00747(""));
                }

                string             EqpID          = ciEquipment.Must(lblEquipment);
                string             Reason         = csReason.Must(lblReasonCode).Value;
                EquipmentStateInfo equipmentState = EquipmentStateInfo.GetEquipmentStateByState(ddlNewState.Must(lblNewState).Text);

                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, this.ApplicationName);
                var rcData   = csReason.GetBusinessReason().CategoryReason;
                txnStamp.CategoryReasonCode = rcData;
                txnStamp.Description        = ttbDesc.Text.Trim();

                #region 檢查是否有設定機台變更狀態警報,若有,則發送警報
                //使用Function取得ALM設定,可彈性使用
                //取得機台狀態警報設定,預設是抓取系統資料設定[EquipStateAlarm]
                AlarmTypeInfo AlarmType = RuleExtendManager.GetEquipmentChangeStateAlarm(equipmentData, ddlNewState.Must(lblNewState).Text);
                string        ALMsg     = @"[Subject:{0}][Content:{1}:{2};   {3}:{4};   {5}:{6};   {7}:{8};   {9}:{10}]";
                if (AlarmType != null)
                {
                    // "[Content:TEST][Subject:TEST]"
                    ALMsg = string.Format(ALMsg, ProgramInformationBlock1.Caption, lblEquipment.Text, mEQP.EquipmentName, lblOldState.Text, mEQP.CurrentState, lblNewState.Text, equipmentState.State, lblReasonCode.Text, rcData.Reason, lblDescription.Text, txnStamp.Description);
                }
                #endregion

                using (var cts = CimesTransactionScope.Create())
                {
                    EMSTransaction.ChangeState(equipmentData, equipmentState, txnStamp);
                    RuleExtendManager.EquipmentTxnEnd(equipmentData);
                    cts.Complete();
                }

                #region 發送警報
                if (AlarmType != null)
                {
                    AlarmService WebServiceALM = new AlarmService();

                    string url = "http://" + Request.Url.Host + Request.ApplicationPath + "/ALM/Services/AlarmService.asmx";

                    WebServiceALM.Url = url;
                    string ReturnMsg = WebServiceALM.LaunchAlarm(AlarmType.GroupRights, AlarmType.TYPE, ALMsg, txnStamp.RecordTime, "UI", User.Identity.Name);
                }
                #endregion

                Response.Redirect(ciMes.Security.UserSetting.GetPreviousListPage(this), false);
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#9
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //確認是否輸入刀具零組件
                ttbToolName.Must(lblToolName);

                //確認是否選擇報廢原因
                ddlReason.Must(lblReason);

                using (var cts = CimesTransactionScope.Create())
                {
                    var newStateInfo = ToolStateInfo.GetToolStateByState("SCRAP");
                    if (newStateInfo == null)
                    {
                        //刀具零組件狀態: {0}不存在,請至配件狀態維護新增此狀態!!
                        throw new Exception(RuleMessage.Error.C10149("SCRAP"));
                    }

                    //因刀具報表需求,所以在報廢時要將使用次數記錄在UDC07
                    var toolLifeList = CSTToolLifeInfo.GetToolLifeByToolNmae(_ToolData.ToolName);
                    var toolLifeData = toolLifeList.Find(p => p.Head == _ToolData.Head);
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "USERDEFINECOL07", toolLifeData.UseCount.ToCimesString(), txnStamp);

                    //變更刀具 GROUPID
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "GROUPID", "", txnStamp);

                    //變更IDENTITY為報廢品
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "IDENTITY", "報廢品", txnStamp);

                    //變更狀態為SCRAP
                    TMSTransaction.ChangeToolState(_ToolData, newStateInfo, txnStamp);

                    //註記原因碼
                    var reasonCategory = InfoCenter.GetBySID <ReasonCategoryInfo>(ddlReason.SelectedValue);
                    txnStamp.CategoryReasonCode = reasonCategory;
                    txnStamp.Description        = "";

                    //備註
                    TMSTransaction.AddToolComment(_ToolData, txnStamp);

                    cts.Complete();
                }

                ClearField();

                AjaxFocus(ttbToolName);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#10
0
        protected void btnTempSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (_DeviceName.IsNullOrEmpty())
                {
                    throw new RuleCimesException(TextMessage.Error.T00826(lblDeviceName.Text));
                }

                if (_PackingList.Count == 0 && _RelativePackingList.Count == 0)
                {
                    throw new RuleCimesException(TextMessage.Error.T00826(lblWorkpiece.Text));
                }

                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    //刪除舊的資料
                    if (!_BatchID.IsNullOrEmpty())
                    {
                        DBCenter.ExecuteParse("DELETE CST_WIP_PACK_TEMP WHERE BATCHID = #[STRING]", _BatchID);
                    }
                    //產生新的批次ID
                    _BatchID = DBCenter.GetSystemID();
                    _PackingList.ForEach(p =>
                    {
                        var tempInfo         = InfoCenter.Create <CSTWIPPackTempInfo>();
                        tempInfo.DeviceName  = _DeviceName;
                        tempInfo.ComponentID = p.ComponentID;
                        tempInfo.SIDE        = "L";
                        tempInfo.BatchID     = _BatchID;
                        tempInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                    });
                    _RelativePackingList.ForEach(p =>
                    {
                        var tempInfo         = InfoCenter.Create <CSTWIPPackTempInfo>();
                        tempInfo.DeviceName  = _RelativeDeviceName;
                        tempInfo.ComponentID = p.ComponentID;
                        tempInfo.SIDE        = "R";
                        tempInfo.BatchID     = _BatchID;
                        tempInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                    });
                    //工時
                    _UserWorkTimeList.ForEach(p => {
                        p.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                    });
                    _UserWorkTimeList.Clear();
                    cts.Complete();
                }

                ProgramInformationBlock1.ShowMessage(TextMessage.Hint.T00057(GetUIResource("TempSave")));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#11
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                var reasonCategory = ReasonCategoryInfo.GetReasonCategoryByCategoryNameAndReason("CustomizeReason", "ManualMerge");
                if (reasonCategory == null)
                {
                    //[00030]{0}:{1}不存在!
                    throw new CimesException(TextMessage.Error.T00030(GetUIResource("ReasonCode"), "CustomizeReason- ManualMerge"));
                }

                var baseLot = _LotDatas.Find(p => p.Status == "WaitMerge");
                // 定義交易戳記
                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    //拆批
                    var split          = SplitLotInfo.CreateSplitLotByLotAndQuantity(baseLot.Lot, baseLot.WorkOrderLot, 0, 0, reasonCategory, "");
                    var splitIndicator = WIPTxn.SplitIndicator.Create();
                    WIPTxn.Default.SplitLot(baseLot, split, splitIndicator, txnStamp);

                    //再取一次批號資訊
                    var newLot = LotInfo.GetLotByLot(split.Lot);
                    //併批與子單元
                    List <MergeLotInfo> mergeLotList = new List <MergeLotInfo>();
                    _LotDatas.ForEach(mergelot =>
                    {
                        var lstCompData = mergelot.GetLotAllComponents();
                        var mergeLot    = MergeLotInfo.GetMergeLotByLotAndQuantity(mergelot.Lot, lstCompData, reasonCategory, "");
                        mergeLotList.Add(mergeLot);
                    });
                    WIPTransaction.MergeLot(newLot, mergeLotList, txnStamp);
                    //再取一次批號資訊
                    var newMergeLot = LotInfo.GetLotByLot(split.Lot);

                    //將批號狀態變更為wait
                    WIPTransaction.ModifyLotSystemAttribute(newMergeLot, "STATUS", LotDefaultStatus.Wait.ToCimesString(), txnStamp);
                    //將COMPLOT、PROCESS_EQUIP欄位清空,因為這個時間點這個欄位已經沒意義了
                    WIPTransaction.ModifyLotSystemAttribute(newMergeLot, "COMPLOT", string.Empty, txnStamp);
                    WIPTransaction.ModifyLotSystemAttribute(newMergeLot, "PROCESS_EQUIP", string.Empty, txnStamp);

                    //Dispatch到下一站
                    WIPTransaction.DispatchLot(newMergeLot, txnStamp);
                    cts.Complete();
                }

                ClearField();
                ttbWorkOrderLot.Text = "";
                AjaxFocus(ttbWorkOrderLot);
                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#12
0
        protected void btnCopy_Click(object sender, EventArgs e)
        {
            try
            {
                //取得登入者資訊
                var recordTime = DBCenter.GetSystemTime();
                var userID     = User.Identity.Name;

                //確認目標料號及機台編號是否已經存在資料
                var toolDevices = CSTToolDeviceInfo.GetDataListByDeviceAndEquipmantName(ddlDevice.SelectedItem.Value, ddlEquipment.SelectedItem.Value);
                if (toolDevices.Count > 0)
                {
                    //料號({0})及機台({1}) 資料已存在,不可執行複製動作!
                    throw new Exception(RuleMessage.Error.C10117(ddlDevice.SelectedItem.Value, ddlEquipment.SelectedItem.Value));
                }

                using (var cts = CimesTransactionScope.Create())
                {
                    //新增一筆CST_TOOL_DEVICE資料
                    var toolDevice = InfoCenter.Create <CSTToolDeviceInfo>();
                    toolDevice.DeviceName    = ddlDevice.SelectedItem.Value;
                    toolDevice.EquipmentName = ddlEquipment.SelectedItem.Value;
                    toolDevice.Tag           = 1;

                    toolDevice.InsertToDB(userID, recordTime);
                    LogCenter.LogToDB(toolDevice, LogCenter.LogIndicator.Create(ActionType.Add, userID, recordTime));

                    //複製CST_TOOL_DEVICE_DETAIL資料
                    _ToolDeviceDetails.ForEach(toolDeviceDetail =>
                    {
                        var newToolDeviceDetail           = InfoCenter.Create <CSTToolDeviceDetailInfo>();
                        newToolDeviceDetail.EquipmentName = toolDevice.EquipmentName;
                        newToolDeviceDetail.Quantity      = toolDeviceDetail.Quantity;
                        newToolDeviceDetail.DeviceName    = toolDevice.DeviceName;
                        newToolDeviceDetail.ToolType      = toolDeviceDetail.ToolType;
                        newToolDeviceDetail.ToolDeviceSID = toolDevice.ToolDeviceSID;

                        newToolDeviceDetail.InsertToDB();

                        LogCenter.LogToDB(newToolDeviceDetail, LogCenter.LogIndicator.Create(ActionType.Add, userID, recordTime));
                    });

                    cts.Complete();
                }

                //INF-00002:{0}儲存成功!
                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00083(""), MessageShowOptions.OnLabel);

                LoadControlDefault();
            }
            catch (Exception E)
            {
                HandleError(E);
            }
        }
示例#13
0
        /// <summary>
        /// 確定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //檢查機台/序號是否有輸入
                ttbEquipOrCompLot.Must(lblEquipOrCompLot);

                using (var cts = CimesTransactionScope.Create())
                {
                    string equipmentState = "Wait" + _QCType;

                    #region 更新機台狀態為WaitFAI
                    //只有FAI需要變更機台狀態,如果QCType參數為PPK或PQC,則不需更新機台狀態
                    if (_QCType.Equals(CustomizeFunction.QCType.FAI.ToCimesString()))
                    {
                        //取得機台狀態資料
                        var newStateInfo = EquipmentStateInfo.GetEquipmentStateByState(equipmentState);
                        if (newStateInfo == null)
                        {
                            //C00028 無機台狀態{0}的設定資料!
                            throw new CimesException(RuleMessage.Error.C00028(equipmentState));
                        }

                        //更新機台狀態
                        EMSTransaction.ChangeState(_EquipData, newStateInfo, txnStamp);
                    }
                    #endregion

                    #region 更新單號狀態為WaitFAI/WaitPPK
                    foreach (DataRow dr in _QCTable.Rows)
                    {
                        var qcInspectionData = InfoCenter.GetBySID <QCInspectionInfo>(dr["QCINSPSID"].ToString()).ChangeTo <QCInspectionInfoEx>();

                        qcInspectionData.Status      = equipmentState;
                        qcInspectionData.ReceiveTime = txnStamp.RecordTime;
                        qcInspectionData.ReceiveUser = txnStamp.UserID;
                        qcInspectionData.UpdateToDB(txnStamp.UserID, txnStamp.RecordTime);
                    }
                    #endregion

                    cts.Complete();
                }

                ClearField();
                AjaxFocus(ttbEquipOrCompLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#14
0
        /// <summary>
        /// 確定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //檢查機台是否有輸入
                ttbEquipOrCompLot.Must(lblEquipOrCompLot);

                //確認是否有勾選資料
                if (SelectedData() == false)
                {
                    // [00816]請至少選取一個{0}!
                    throw new Exception(TextMessage.Error.T00816(GetUIResource("SN")));
                }

                using (var cts = CimesTransactionScope.Create())
                {
                    #region 更新單號狀態為PPK

                    for (int i = 0; i < gvQC.Rows.Count; i++)
                    {
                        var thisCheckBox = (CheckBox)gvQC.Rows[i].FindControl("ckbSelect");

                        //只有勾選的資料才要更新單號狀態
                        if (thisCheckBox.Checked)
                        {
                            DataRow dr = _QCTable.Rows[i];
                            var     qcInspectionData = InfoCenter.GetBySID <QCInspectionInfo>(dr["QCINSPSID"].ToString()).ChangeTo <QCInspectionInfoEx>();

                            qcInspectionData.Status    = _QCType;
                            qcInspectionData.StartTime = DBCenter.GetSystemTime();
                            qcInspectionData.StartUser = txnStamp.UserID;
                            qcInspectionData.UpdateToDB(txnStamp.UserID, txnStamp.RecordTime);
                        }
                    }

                    #endregion

                    cts.Complete();
                }

                ClearField();
                AjaxFocus(ttbEquipOrCompLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#15
0
        /// <summary>
        /// 退回
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnReject_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //檢查機台/序號是否有輸入
                ttbEquipOrCompLot.Must(lblEquipOrCompLot);

                string status = "ToBeSent" + _QCType;

                using (var cts = CimesTransactionScope.Create())
                {
                    #region 更新單號狀態為ToBeSentFAI及設置PASSFLAG = N
                    foreach (DataRow dr in _QCTable.Rows)
                    {
                        var qcInspectionData = InfoCenter.GetBySID <QCInspectionInfo>(dr["QCINSPSID"].ToString()).ChangeTo <QCInspectionInfoEx>();

                        qcInspectionData.Status       = status;
                        qcInspectionData.PassFlag     = "N";
                        qcInspectionData.QCRejectTime = txnStamp.RecordTime;
                        qcInspectionData.QCRejectUser = txnStamp.UserID;
                        qcInspectionData.UpdateToDB(txnStamp.UserID, txnStamp.RecordTime);
                    }
                    #endregion

                    #region 更新機台狀態
                    //取得機台狀態資料
                    var newStateInfo = EquipmentStateInfo.GetEquipmentStateByState(status);
                    if (newStateInfo == null)
                    {
                        //C00028 無機台狀態{0}的設定資料!
                        throw new CimesException(RuleMessage.Error.C00028(status));
                    }

                    //更新機台狀態
                    EMSTransaction.ChangeState(_EquipData, newStateInfo, txnStamp);
                    #endregion

                    cts.Complete();
                }

                ClearField();
                AjaxFocus(ttbEquipOrCompLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#16
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                if (_ProcessLot == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00826(lblUnPackingInventoryLot.Text));
                }

                // 定義交易戳記
                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    // 將入庫批取消完工
                    WIPTransaction.UndoFinish(_ProcessLot, txnStamp);
                    var unPackingLot = LotInfo.GetLotByLot(ttbBoxNo.Text.Trim());
                    // 取得拆包Component
                    var lstUnPackingComp = unPackingLot.GetLotAllComponents();
                    // 將轉為子單元的批號還原,例如可使用於拆包
                    var txn = WIPTxn.Default.ConvertToLot(unPackingLot, lstUnPackingComp, txnStamp);
                    txn.LotList.ForEach(lot => {
                        //寫入WMSMaster & Detail
                        var wmsMaster = CSTWMSMastInfo.GetMaterialLotDataByMaterialLot(lot["INVLOT"].ToString());
                        if (wmsMaster == null)
                        {
                            wmsMaster            = InfoCenter.Create <CSTWMSMastInfo>();
                            wmsMaster.Lot        = lot["INVLOT"].ToString();
                            wmsMaster.DeviceName = lot.DeviceName;
                            wmsMaster.RuleName   = txnStamp.RuleName;
                            wmsMaster.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                        }
                        //理論上只會有一個Comp
                        lot.GetLotAllComponents().ForEach(comp => {
                            var wmsDetail         = InfoCenter.Create <CSTWMSDetailInfo>();
                            wmsDetail.Lot         = lot["INVLOT"].ToString();
                            wmsDetail.ComponentID = comp.ComponentID;
                            wmsDetail.Quantity    = comp.ComponentQuantity;
                            wmsDetail.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                        });
                        WIPTransaction.TerminateLot(lot, txnStamp);
                    });

                    cts.Complete();
                }
                // 返回定義的預設網頁
                ReturnToPortal();
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#17
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //確認是否輸入刀具零組件
                ttbToolName.Must(lblToolName);

                //確認是否有選擇變更回廠日
                var date = ttbDate.MustDate(lblDate);

                //取得系統時間
                var sysDate = Convert.ToDateTime(DBCenter.GetSystemDateTime().ToString("yyyy/MM/dd"));

                //確認預定回廠日是否大於等於當天日期
                if (date < sysDate)
                {
                    //變更回廠日必須大於等於{0} !
                    throw new Exception(RuleMessage.Error.C10170(sysDate.ToString("yyyy/MM/dd")));
                }

                using (var cts = CimesTransactionScope.Create())
                {
                    #region 更新[CST_TOOL_REPAIR]的預計回廠日
                    _ToolRepairData.EstimateDateOfReturn = ttbDate.Text;
                    _ToolRepairData.UpdateToDB(txnStamp.UserID, txnStamp.RecordTime);

                    //新增一筆[CST_TOOL_REPAIR_LOG]
                    LogCenter.LogToDB(_ToolRepairData, LogCenter.LogIndicator.Create(ActionType.Set, txnStamp.UserID, txnStamp.RecordTime));

                    #endregion

                    //預定回廠日
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "USERDEFINECOL04", ttbDate.Text, txnStamp);

                    cts.Complete();
                }

                ClearField();

                AjaxFocus(ttbToolName);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#18
0
        private void UpdateToolType(int rowIndex)
        {
            int         index     = gvQuery.Rows[rowIndex].DataItemIndex;
            string      sToolType = ((TextBox)gvQuery.Rows[rowIndex].FindControl("ttbType")).Text;
            RadioButton rbtEnable = (RadioButton)gvQuery.Rows[rowIndex].FindControl("rbEnable");
            TextBox     ttbDescr  = (TextBox)gvQuery.Rows[rowIndex].FindControl("ttbDescription");

            uscAttributeSetupGrid.ValidateCheck();

            var toolTypeData = (ToolTypeInfo)ToolTypeList[index].DeepCopy();

            toolTypeData.Description   = ttbDescr.Text;
            toolTypeData["UPDATETIME"] = DBCenter.GetSystemTime();
            toolTypeData["USERID"]     = Page.User.Identity.Name;
            if (rbtEnable.Checked == true)
            {
                toolTypeData.Status     = "Enable";
                toolTypeData.ActiveFlag = "T";
            }
            else
            {
                toolTypeData.Status = "Disable";
            }

            //儲存系統屬性
            _SystemAttribute.SaveSystemAttribute(toolTypeData);
            TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, this.ApplicationName);

            using (CimesTransactionScope cts = CimesTransactionScope.Create())
            {
                if (toolTypeData.UpdateToDB() == 0)
                {
                    throw new Exception(TextMessage.Error.T00747(""));
                }

                uscAttributeSetupGrid.ExcuteTransaction(toolTypeData.ID, toolTypeData.UserID, toolTypeData.UpdateTime);

                //處理刀壽
                SaveToolLife(sToolType, txnStamp.UserID, txnStamp.RecordTime);

                //儲存刀具圖檔
                SaveToolPicture(sToolType, txnStamp.UserID, txnStamp.RecordTime);

                cts.Complete();
            }

            _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00083(sToolType));
            ToolTypeList[index] = toolTypeData;
        }
示例#19
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                using (var cts = CimesTransactionScope.Create())
                {
                    if (_SelectLotDatas.Count > 0)
                    {
                        _SelectLotDatas.ForEach(lot =>
                        {
                            //將勾選的入庫資料塞到ERP TEMP表 To do...

                            //將入庫單號回寫到INVNO
                            WIPTransaction.ModifyLotSystemAttribute(lot, "INVNO", ttbScrapNo.Text, txnStamp);

                            //將勾選的批號結批
                            WIPTransaction.TerminateLot(lot, txnStamp);
                        });

                        #region 更新命名規則
                        if (_ExecuteNamingSQLList != null && _ExecuteNamingSQLList.Count > 0)
                        {
                            DBCenter.ExecuteSQL(_ExecuteNamingSQLList);
                        }
                        #endregion

                        cts.Complete();
                    }
                    else
                    {
                        //[00816]請至少選取一個{0}!
                        throw new Exception(TextMessage.Error.T00816(GetUIResource("WorkpieceLot")));
                    }
                }

                ClearField();

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#20
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //確認模具是否有輸入
                ttbToolName.Must(lblToolName);

                //確認機台是否有輸入
                ttbEquip.Must(lblEquip);

                using (var cts = CimesTransactionScope.Create())
                {
                    //配件上機台
                    TMSTxn.Default.AddToolToEquipment(new List <ToolInfo>()
                    {
                        _ToolData
                    }, _EquipData, txnStamp);

                    var newStateInfo = ToolStateInfo.GetToolStateByState("USED");
                    if (newStateInfo == null)
                    {
                        // 模治具狀態:{0}不存在!!
                        throw new Exception(RuleMessage.Error.C10032("USED"));
                    }

                    //變更配件狀態為USED
                    TMSTransaction.ChangeToolState(_ToolData, newStateInfo, txnStamp);

                    cts.Complete();
                }

                ClearField();

                AjaxFocus(ttbToolName);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#21
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //確認模具是否有輸入
                ttbToolName.Must(lblToolName);

                using (var cts = CimesTransactionScope.Create())
                {
                    #region 變更配件狀態為IDLE
                    var newStateInfo = ToolStateInfo.GetToolStateByState("IDLE");
                    if (newStateInfo == null)
                    {
                        // 模具狀態:{0}不存在!!
                        throw new Exception(RuleMessage.Error.C10027("IDLE"));
                    }

                    TMSTransaction.ChangeToolState(_ToolData, newStateInfo, txnStamp);
                    #endregion

                    //將配件上的鉗修次數重置成0 (MES_TOOL_MAST. USERDEFINECOL01)
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "USERDEFINECOL01", "0", txnStamp);

                    //將配件上的降模次數重置成0 (MES_TOOL_MAST. USERDEFINECOL02)
                    TMSTransaction.ModifyToolSystemAttribute(_ToolData, "USERDEFINECOL02", "0", txnStamp);

                    cts.Complete();
                }

                ClearField();

                AjaxFocus(ttbToolName);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#22
0
        /// <summary>
        /// 系統事件 : btnPrint Click時觸發
        /// 將產生的ReportDocument 匯出成為PDF格式的檔案
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnPrint_Click(object sender, EventArgs e)
        {
            try
            {
                if (toolData == null)
                {
                    throw new Exception(TextMessage.Error.T00060(""));
                }
                _dsReport.Tables.Clear();

                // 取得Report資料
                _dsReport = GetRunCardDataSource(toolData);
                _dsReport.AcceptChanges();

                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    var printLotInfo = InfoCenter.Create <CSTToolLabelPrintLogInfo>();
                    printLotInfo.ToolName = toolData.ToolName;
                    printLotInfo.RuleName = ProgramRight;
                    printLotInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                    cts.Complete();
                }

                if (_dsReport.Tables.Count > 0)
                {
                    string sPrintProgram    = "/CustomizeRule/ToolRule/T022View.aspx";
                    string sHost            = Request.Url.Host;
                    string sApplicationPath = Request.ApplicationPath;
                    string ReportPath       = "http://" + sHost + sApplicationPath + sPrintProgram;
                    Session["T022View"] = _dsReport;
                    //開啟查詢工單頁面
                    string openPrintWindow = "window.open('" + ReportPath + "','pop','resizable: yes; status: no; scrollbars:no; menubar:no;toolbar:no;location:no;dialogLeft:10px;dialogTop:10px;dialogHeight:10px;dialogWidth:10px',false);";
                    ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), Guid.NewGuid().ToString(), openPrintWindow, true);
                }
            }
            catch (Exception E)
            {
                HandleError(E);
            }
        }
示例#23
0
        protected void gvQuery_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                int dataIndex = gvQuery.Rows[e.RowIndex].DataItemIndex;

                //取得登入者資訊
                var recordTime = DBCenter.GetSystemTime();
                var userID     = User.Identity.Name;

                using (CimesTransactionScope cts = CimesTransactionScope.Create())
                {
                    //刪除主檔資料
                    _ToolDevices[dataIndex].DeleteFromDB();

                    LogCenter.LogToDB(_ToolDevices[dataIndex], LogCenter.LogIndicator.Create(ActionType.Remove, userID, recordTime));

                    //取得明細資料
                    var toolDeviceDetails = CSTToolDeviceDetailInfo.GetDataListByToolDeviceSID(_ToolDevices[dataIndex].ToolDeviceSID);
                    toolDeviceDetails.ForEach(toolDeviceDetail =>
                    {
                        //刪除明細資料
                        toolDeviceDetail.DeleteFromDB();

                        LogCenter.LogToDB(toolDeviceDetail, LogCenter.LogIndicator.Create(ActionType.Remove, userID, recordTime));
                    });

                    cts.Complete();
                }

                QueryData();
            }
            catch (Exception E)
            {
                HandleError(E);
            }
        }
示例#24
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                // 子單元不存在拋錯
                if (_ComponentInfo == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00045(GetUIResource("Component")));
                }
                // 批號不存在拋錯
                if (ProcessLotData == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00045(GetUIResource("Lot")));
                }
                //  批號狀態必須為Wait
                if (ProcessLotData.Status != "Wait")
                {
                    throw new RuleCimesException(TextMessage.Error.T00424());
                }
                // 原因碼
                ddlDefectReason.Must(lblDefectReason);

                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    //取得原因碼資訊
                    var reasonData = InfoCenter.GetBySID <ReasonCategoryInfo>(ddlDefectReason.SelectedValue);

                    //取得不良子批批號名稱
                    var splitLotNaming = GetNamingRule("SplitLot", txnStamp.UserID, ProcessLotData);

                    //批號拆子批
                    var splitLot = SplitLotInfo.CreateSplitLotByLotAndQuantity(ProcessLotData.Lot, splitLotNaming.First[0], new List <ComponentInfo>()
                    {
                        _ComponentInfo
                    }, reasonData, reasonData.Description);
                    WIPTxn.Default.SplitLot(ProcessLotData, splitLot, WIPTxn.SplitIndicator.Create(), txnStamp);

                    if (splitLotNaming.Second != null && splitLotNaming.Second.Count != 0)
                    {
                        DBCenter.ExecuteSQL(splitLotNaming.Second);
                    }

                    //註記不良
                    var compDefect = ComponentDefectObject.Create(_ComponentInfo, _ComponentInfo.ComponentQuantity, 0, reasonData, ttbDefectDesc.Text.Trim());
                    WIPTransaction.DefectComponent(splitLot, new List <ComponentDefectObject>()
                    {
                        compDefect
                    }, WIPTransaction.DefectIndicator.Create(), txnStamp);

                    #region 送至待判工作站

                    //取得目前批號的流程線上版本
                    RouteVersionInfo RouteVersion = RouteVersionInfo.GetRouteActiveVersion(ProcessLotData.RouteName);

                    //以目前工作站名稱去查詢在所有流程中的序號
                    var routeOperation = RouteOperationInfo.GetRouteAllOperations(RouteVersion).Find(p => p.OperationName == _JudgeOperationName);

                    //以目前工作站名稱去查詢在所有流程中的序號
                    var reasonCategory = ReasonCategoryInfo.GetReasonCategoryByCategoryNameAndReason("Common", "OTHER");

                    var modifyAttrList = new List <ModifyLotAttributeInfo>();

                    //將批號的UDC01註記不良批
                    modifyAttrList.Add(ModifyLotAttributeInfo.CreateLotSystemAttributeInfo("USERDEFINECOL01", "Y"));

                    //將批號的UDC02註記工作站序號
                    modifyAttrList.Add(ModifyLotAttributeInfo.CreateLotSystemAttributeInfo("USERDEFINECOL02", splitLot.OperationSequence));

                    //將批號的UDC03註記工作站名稱
                    modifyAttrList.Add(ModifyLotAttributeInfo.CreateLotSystemAttributeInfo("USERDEFINECOL03", splitLot.OperationName));

                    WIPTransaction.ModifyLotMultipleAttribute(splitLot, modifyAttrList, txnStamp);

                    WIPTransaction.ReassignOperation(splitLot, routeOperation, reasonCategory, reasonCategory.Description, txnStamp);

                    #endregion

                    cts.Complete();
                }

                LoadDefaultControl();
                ClearField();
                ttbWOLot.Text = "";
                AjaxFocus(ttbWOLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#25
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                // 子單元不存在拋錯
                if (ComponentInfo == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00045(GetUIResource("Component")));
                }
                // 批號不存在拋錯
                if (ProcessLotData == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00045(GetUIResource("Lot")));
                }
                // 定義交易戳記
                var txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    bool inSpec = true;
                    if (_CenterHoleFlag != "N")
                    {
                        gvComponentEDC.Rows.LoopDo <GridViewRow>((p, i) => {
                            // 取得TextBox Control
                            var ttbEDC = p.FindControl("ttbEDC") as TextBox;
                            if (ttbEDC.Text.IsNullOrEmpty())
                            {
                                throw new RuleCimesException(TextMessage.Error.T00043(GetUIResource("CenterHoleData")));
                            }
                            // 是否符合規格判斷
                            var measureVal = ttbEDC.Text.ToDecimal();
                            if (measureVal > SAICenterHole.Remark02.ToDecimal())
                            {
                                inSpec = false;
                            }

                            if (measureVal < SAICenterHole.Remark03.ToDecimal())
                            {
                                inSpec = false;
                            }
                            // 將量測資料記錄到客製表
                            var edcCompInfo              = InfoCenter.Create <CSTEDCComponentInfo>();
                            edcCompInfo.ComponentID      = ComponentInfo.ComponentID;
                            edcCompInfo.Data             = measureVal;
                            edcCompInfo.UpSpecification  = SAICenterHole.Remark02.ToDecimal();
                            edcCompInfo.LowSpecification = SAICenterHole.Remark03.ToDecimal();
                            edcCompInfo.INSPEC           = inSpec == true ? "OK" : "NG";
                            edcCompInfo.Lot              = ProcessLotData.Lot;
                            edcCompInfo["LINKSID"]       = txnStamp.LinkSID;
                            edcCompInfo["PARAMETER"]     = "SC" + (i + 1).ToString();
                            edcCompInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                        });
                    }

                    if (!ttbTemperature.Text.IsNullOrEmpty())
                    {
                        // 溫度必須是數值
                        ttbTemperature.MustDecimal(lblTemperature);
                        // 將量測資料記錄到客製表
                        var edcCompInfo = InfoCenter.Create <CSTEDCComponentInfo>();
                        edcCompInfo.ComponentID  = ComponentInfo.ComponentID;
                        edcCompInfo.Data         = ttbTemperature.Text.ToDecimal();
                        edcCompInfo.Lot          = ProcessLotData.Lot;
                        edcCompInfo["LINKSID"]   = txnStamp.LinkSID;
                        edcCompInfo["PARAMETER"] = "Temperature";
                        edcCompInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                    }

                    var lstCompAttr = new List <ModifyAttributeInfo>();
                    // 紀錄子單元量測時間
                    lstCompAttr.Add(ModifyAttributeInfo.CreateSystemAttributeInfo("CENTER_HOLE_TIME", txnStamp.RecordTime));
                    lstCompAttr.Add(ModifyAttributeInfo.CreateSystemAttributeInfo("DMC", ttbWorkpiece.Text.Trim()));
                    if (inSpec)
                    {
                        // 修改子單元系統屬性
                        lstCompAttr.Add(ModifyAttributeInfo.CreateSystemAttributeInfo("CENTER_HOLE_FLAG", "OK"));
                        WIPTransaction.ModifyLotComponentMultipleAttribute(ProcessLotData, ComponentInfo, lstCompAttr, txnStamp);
                    }
                    else
                    {
                        // 修改子單元系統屬性
                        lstCompAttr.Add(ModifyAttributeInfo.CreateSystemAttributeInfo("CENTER_HOLE_FLAG", "NG"));
                        WIPTransaction.ModifyLotComponentMultipleAttribute(ProcessLotData, ComponentInfo, lstCompAttr, txnStamp);

                        #region 若不在規格範圍內則拆批至待判站點
                        var                  lstSourceLot         = new List <LotInfo>();
                        List <SqlAgent>      splitLotArchiSQLList = new List <SqlAgent>();
                        List <ComponentInfo> lsComponentDatas     = new List <ComponentInfo>();
                        lsComponentDatas.Add(ComponentInfo);

                        var generator = NamingIDGenerator.GetRule("SplitLot");
                        if (generator == null)
                        {
                            //WRN-00411,找不到可產生的序號,請至命名規則維護設定,規則名稱:{0}!!!
                            throw new Exception(TextMessage.Error.T00437("SplitLot"));
                        }
                        var serialData = generator.GenerateNextIDs(1, ProcessLotData, new string[] { }, User.Identity.Name);
                        splitLotArchiSQLList = serialData.Second;
                        var splitLotID = serialData.First[0];

                        var          reasonCategoryInfo = ReasonCategoryInfo.GetReasonCategoryByCategoryNameAndReason("Common", "OTHER");
                        SplitLotInfo splitLotData       = SplitLotInfo.CreateSplitLotByLotAndQuantity(ProcessLotData.Lot, splitLotID, lsComponentDatas, reasonCategoryInfo, "EDC");

                        WIPTxn.SplitIndicator splitInd = WIPTxn.SplitIndicator.Create();
                        WIPTxn.Default.SplitLot(ProcessLotData, splitLotData, splitInd, txnStamp);

                        //若子單元為自動產生,更新序號至DB
                        if (splitLotArchiSQLList != null && splitLotArchiSQLList.Count > 0)
                        {
                            DBCenter.ExecuteSQL(splitLotArchiSQLList);
                        }
                        #endregion

                        var splitLotInfo = LotInfo.GetLotByLot(splitLotID);

                        // 新增Defect
                        List <ComponentDefectObject> lstCompDefectObj = new List <ComponentDefectObject>();
                        var reason = ReasonCategoryInfo.GetReasonCategoryByCategoryNameAndReason("CustomizeReason", "MeasureNG_MES");
                        lstCompDefectObj.Add(ComponentDefectObject.Create(ComponentInfo, 1, 0, reason, "CENTER_HOLE_FLAG:NG"));
                        WIPTransaction.DefectComponent(splitLotInfo, lstCompDefectObj, WIPTransaction.DefectIndicator.Create(), txnStamp);

                        #region ReassignOperation
                        // 取得待判站點設定
                        var saiJudgeOperation = WpcExClassItemInfo.GetExClassItemInfo("SAIJudgeOperation", splitLotInfo["PROCESS"].ToString());
                        if (saiJudgeOperation.Count == 0)
                        {
                            throw new RuleCimesException(TextMessage.Error.T00555("SAIJudgeOperation", splitLotInfo["PROCESS"].ToString()));
                        }
                        var reassignOperationInfo = RouteOperationInfo.GetLotAllRouteOperations(splitLotInfo).Find(oper => oper.OperationName == saiJudgeOperation[0].Remark02);
                        if (reassignOperationInfo == null)
                        {
                            throw new RuleCimesException(RuleMessage.Error.C10050());
                        }

                        var lstLotAttr = new List <ModifyLotAttributeInfo>();
                        // 修改批號系統屬性
                        lstLotAttr.Add(ModifyLotAttributeInfo.CreateLotSystemAttributeInfo("USERDEFINECOL01", "Y"));
                        lstLotAttr.Add(ModifyLotAttributeInfo.CreateLotSystemAttributeInfo("USERDEFINECOL02", splitLotInfo.OperationSequence));
                        lstLotAttr.Add(ModifyLotAttributeInfo.CreateLotSystemAttributeInfo("USERDEFINECOL03", splitLotInfo.OperationName));
                        WIPTransaction.ModifyLotMultipleAttribute(splitLotInfo, lstLotAttr, txnStamp);
                        WIPTransaction.ReassignOperation(splitLotInfo, reassignOperationInfo, reasonCategoryInfo, "EDCSplitReassignOperation", txnStamp);
                        WIPTransaction.ResetLotRule(splitLotInfo, txnStamp);
                        #endregion
                    }
                    cts.Complete();
                }

                ClearUI();
                AjaxFocus(ttbWorkpiece);
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#26
0
        /// <summary>
        /// 確定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //檢查維修原因是否有選擇
                ddlRepairReasonCode.Must(lblJudgeReason);

                #region 檢查維修結果是否有選擇
                if (rdbOK.Checked == false && rdbNG.Checked == false)
                {
                    throw new Exception(TextMessage.Error.T00841(lblRepairResult.Text));
                }
                #endregion

                using (var cts = CimesTransactionScope.Create())
                {
                    //選取的原因碼
                    var reasonCategory = InfoCenter.GetBySID <ReasonCategoryInfo>(ddlRepairReasonCode.SelectedValue);

                    #region 紀錄維修結束 To do...
                    List <WIPRepairFinishInfo> repairFinishDatas = new List <WIPRepairFinishInfo>();

                    var repairData = WIPRepairInfo.GetRepairByLotAndReason(_LotData.Lot, _DefectJudgementData.Reason);

                    var repairFinishData = WIPRepairFinishInfo.CreateInfo(repairData);

                    repairFinishData.ActionCategory   = reasonCategory.Category;
                    repairFinishData.ActionReasonCode = reasonCategory.Reason;
                    repairFinishData.ActionReasonSID  = reasonCategory.ReasonSID;
                    repairFinishData.Result           = rdbOK.Checked ? "OK" : "NG";
                    repairFinishDatas.Add(repairFinishData);

                    var issueOperation = OperationInfo.GetOperationByName(_LotData.OperationName);

                    WIPTransaction.RepairEnd(_LotData, repairFinishDatas, issueOperation, txnStamp);

                    #endregion

                    #region 2017/10/26 跟詩涵確認,無論維修結果如何,一律送回待判站由品保決定處理結果

                    /*
                     #region OK:依照批號的UDC02(工作站序號)+UDC03(工作站名稱)找出預設流程的下一站點,將批號跳站至該站
                     *
                     * if (rdbOK.Checked)
                     * {
                     *  //取得流程線上版本 取得目前Lot的所有流程(所有工作站)
                     *  RouteVersionInfo RouteVersion = RouteVersionInfo.GetRouteActiveVersion(_LotData.RouteName);
                     *
                     *  //以此工作站名稱去查詢在流程中的序號
                     *  var routeOperation = RouteOperationInfo.GetRouteAllOperations(RouteVersion).Find(p => p.OperationName == _LotData.UserDefineColumn03);
                     *
                     *  var lastOperationSeq = string.Format("{0:000}", (Convert.ToDecimal(routeOperation.OperationSequence) + 1));
                     *
                     *  //下一個工作站 用LOT和流程中下一站的序號去查出下一個工作站資訊
                     *  var NextRouteOperation = RouteOperationInfo.GetRouteOperationByLotSequence(_LotData, lastOperationSeq);
                     *
                     *  if (NextRouteOperation == null)
                     *  {
                     *      //批號:{0}已無下個工作站點,請確認[流程設定]
                     *      throw new Exception(RuleMessage.Error.C10008(_LotData.Lot));
                     *  }
                     *
                     *  //將批號的UDC02清空
                     *  WIPTransaction.ModifyLotSystemAttribute(_LotData, "USERDEFINECOL02", "", txnStamp);
                     *
                     *  //將批號的UDC03清空
                     *  WIPTransaction.ModifyLotSystemAttribute(_LotData, "USERDEFINECOL03", "", txnStamp);
                     *
                     *  //執行出站
                     *  WIPTransaction.CheckOut(_LotData, txnStamp);
                     *
                     *  WIPTransaction.ReassignOperation(_LotData, NextRouteOperation, reasonCategory, ttbRepairDescr.Text, txnStamp);
                     * }
                     #endregion
                     *
                     #region NG:送到下一站
                     * if (rdbNG.Checked)
                     * {
                     *  //執行出站
                     *  WIPTransaction.CheckOut(_LotData, txnStamp);
                     *
                     *  WIPTransaction.DispatchLot(_LotData, txnStamp);
                     * }
                     #endregion
                     *
                     */
                    #endregion

                    //執行出站
                    WIPTransaction.CheckOut(_LotData, txnStamp);

                    WIPTransaction.DispatchLot(_LotData, txnStamp);


                    cts.Complete();
                }

                ClearField();
                AjaxFocus(ttbLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#27
0
        /// <summary>
        /// 確定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                #region 確認選擇結果,如果是選擇NG,確認是否有選擇原因碼
                string result = "";
                if (rdbOK.Checked)
                {
                    result = "OK";
                }
                else if (rdbNG.Checked)
                {
                    result = "NG";

                    //確認是否有選擇原因碼
                    ddlFAIReasonCode.Must(lblFAIReasonCode);
                }
                else if (rdbPASS.Checked)
                {
                    result = "PASS";
                }
                else if (rdbCLOSE.Checked)
                {
                    result = "CLOSE";

                    //確認是否有選擇原因碼
                    ddlFAIReasonCode.Must(lblFAIReasonCode);
                }
                #endregion

                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                using (var cts = CimesTransactionScope.Create())
                {
                    #region 更新檢驗主檔[MES_QC_INSP]
                    //取得檢驗主檔資料
                    var QCInsepctionData = InfoCenter.GetBySID <QCInspectionInfo>(_SelectedQCData.QCInspectionSID).ChangeTo <QCInspectionInfoEx>();

                    //原因碼
                    ReasonCategoryInfo reason = null;

                    //有選擇原因碼才更新[NG_Category]及[NG_Reason]
                    if (string.IsNullOrEmpty(ddlFAIReasonCode.SelectedValue) == false)
                    {
                        reason = InfoCenter.GetBySID <ReasonCategoryInfo>(ddlFAIReasonCode.SelectedValue);
                        QCInsepctionData.NG_Category = reason.Category;
                        QCInsepctionData.NG_Reason   = reason.Reason;
                    }

                    //如果判定結果為結單的話,則必須把結單時間及人員資料寫回資料庫
                    if (result == "CLOSE")
                    {
                        QCInsepctionData.FINISHTIME = txnStamp.RecordTime;
                        QCInsepctionData.FINISHUSER = txnStamp.UserID;
                    }

                    QCInsepctionData.NG_Description = ttbDescr.Text;
                    QCInsepctionData.Result         = result;
                    QCInsepctionData.Status         = "Finished";

                    QCInsepctionData.UpdateToDB(txnStamp.UserID, txnStamp.RecordTime);

                    #endregion

                    #region 更新機台檢驗主檔[CST_WIP_CMM]

                    if (_CSTWIPCMMList != null)
                    {
                        //更新檢驗主檔的QCInspectionSID欄位
                        _CSTWIPCMMList.ForEach(data =>
                        {
                            data.QCInspectionSID = QCInsepctionData.ID;
                            data.UpdateToDB();
                        });
                    }

                    #endregion

                    #region 更新機台資訊

                    //取得相同BatchID的檢驗資料
                    var QCDataList = QCInspectionInfoEx.GetDataListByBatchID(_SelectedQCData.BatchID);

                    //相同BatchID都已完成檢驗旗標
                    bool isAllFinish = true;

                    QCDataList.ForEach(p =>
                    {
                        if (!(p.Status == "Finished"))
                        {
                            isAllFinish = false;
                        }
                    });

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

                    //更新機台屬性[FAICOUNT]
                    CustomizeFunction.UpdateFAI(_SelectedQCData.EquipmentName, lot.Lot, (rdbNG.Checked) ? true : false, txnStamp);

                    //如果相同的BatchID都檢驗完成或選擇結果為NG時,則更新狀態為IDLE及更新FAICOUNT
                    if (isAllFinish)
                    {
                        //取得機台狀態資料
                        var newStateInfo = EquipmentStateInfo.GetEquipmentStateByState("IDLE");

                        var equipData = EquipmentInfo.GetEquipmentByName(_SelectedQCData.EquipmentName);

                        //更新機台狀態
                        EMSTransaction.ChangeState(equipData, newStateInfo, txnStamp);
                    }
                    #endregion

                    //如果判定結果選擇為NG,則必須拆批送待判
                    if (rdbNG.Checked)
                    {
                        //判定NG直接拆批及送待判工作站
                        CustomizeFunction.SplitDefectLot(_SelectedQCData.ComponentLot, ttbDescr.Text, reason, txnStamp);
                    }

                    cts.Complete();
                }

                ClearField();
                AjaxFocus(ttbLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#28
0
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                ttbEquipmentName.Must(lblEquipment);
                ttbDevice1.Must(lblDevice1);

                //料號1一定要有資料
                if (_DeviceInfo1 == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00826(lblDevice1.Text));
                }

                //一定要輸入一種料號
                if (_dtVerifiy1 == null)
                {
                    throw new RuleCimesException(TextMessage.Error.T00826(lblDevice1.Text));
                }

                //若有輸入料號1則需驗證應領數量與領用數量是否相同
                if (_dtVerifiy1 != null)
                {
                    _dtVerifiy1.Rows.LoopDo <DataRow>((p, i) =>
                    {
                        if (p["NEEDQTY"].ToDecimal() != p["EQPTOOLCOUNT"].ToDecimal())
                        {
                            throw new RuleCimesException(RuleMessage.Error.C10141(_EquipmentInfo.EquipmentName, _DeviceInfo1.DeviceName, p["TOOLTYPE"].ToString(), p["NEEDQTY"].ToString()));
                        }
                    });
                }

                //若有輸入料號2則需驗證應領數量與領用數量是否相同
                if (_dtVerifiy2 != null)
                {
                    _dtVerifiy2.Rows.LoopDo <DataRow>((p, i) =>
                    {
                        if (p["NEEDQTY"].ToDecimal() != p["EQPTOOLCOUNT"].ToDecimal())
                        {
                            throw new RuleCimesException(RuleMessage.Error.C10141(_EquipmentInfo.EquipmentName, _DeviceInfo1.DeviceName, p["TOOLTYPE"].ToString(), p["NEEDQTY"].ToString()));
                        }
                    });
                }

                string           sReleaseID = DBCenter.GetSystemID();
                TransactionStamp txnStamp   = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);
                using (var cts = CimesTransactionScope.Create())
                {
                    //先將舊的資料刪除
                    var lstEqpToolRelease = CSTEquipmentToolReleaseInfo.GetDataByEquipment(_EquipmentInfo.EquipmentName);
                    lstEqpToolRelease.ForEach(p => {
                        p.DeleteFromDB();
                        LogCenter.LogToDB(p, LogCenter.LogIndicator.Create(ActionType.Remove, txnStamp.UserID, txnStamp.RecordTime));
                    });

                    var lstEqpTool = EquipToolInfo.GetByEquipmentName(_EquipmentInfo.EquipmentName);
                    lstEqpTool.ForEach(p => {
                        //取得配件資訊
                        var toolInfo = ToolInfo.GetToolByName(p.ToolName);
                        //新增至CST_EQP_TOOL_RELEASE的Info物件
                        var eqpToolReleaseInfo           = InfoCenter.Create <CSTEquipmentToolReleaseInfo>();
                        eqpToolReleaseInfo.EquipmentName = _EquipmentInfo.EquipmentName;
                        eqpToolReleaseInfo.ToolName      = toolInfo.ToolName;
                        eqpToolReleaseInfo.HEAD          = toolInfo["HEAD"].ToString();
                        eqpToolReleaseInfo.RELEASEID     = sReleaseID;
                        eqpToolReleaseInfo["OPERATION"]  = toolInfo.UserDefineColumn08;
                        eqpToolReleaseInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                        LogCenter.LogToDB(eqpToolReleaseInfo, LogCenter.LogIndicator.Create(ActionType.Add, txnStamp.UserID, txnStamp.RecordTime));
                        //異動Tool的RELEASEID欄位
                        TMSTransaction.ModifyToolSystemAttribute(toolInfo, "RELEASEID", sReleaseID, txnStamp);
                    });

                    //先將舊的資料刪除
                    var lstEqpDeviceRelease = CSTEquipmentDeviceReleaseInfo.GetDataByEquipment(_EquipmentInfo.EquipmentName);
                    lstEqpDeviceRelease.ForEach(p => {
                        p.DeleteFromDB();
                        LogCenter.LogToDB(p, LogCenter.LogIndicator.Create(ActionType.Remove, txnStamp.UserID, txnStamp.RecordTime));
                    });

                    if (_dtVerifiy1 != null)
                    {
                        //新增至CST_EQP_DEVICE_RELEASE的Info物件
                        var eqpDeviceReleaseInfo = InfoCenter.Create <CSTEquipmentDeviceReleaseInfo>();
                        eqpDeviceReleaseInfo.EquipmentName = _EquipmentInfo.EquipmentName;
                        eqpDeviceReleaseInfo.DeviceName    = _DeviceInfo1.DeviceName;
                        eqpDeviceReleaseInfo.RELEASEID     = sReleaseID;
                        eqpDeviceReleaseInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                        LogCenter.LogToDB(eqpDeviceReleaseInfo, LogCenter.LogIndicator.Create(ActionType.Add, txnStamp.UserID, txnStamp.RecordTime));
                    }

                    if (_dtVerifiy2 != null)
                    {
                        //新增至CST_EQP_DEVICE_RELEASE的Info物件
                        var eqpDeviceReleaseInfo = InfoCenter.Create <CSTEquipmentDeviceReleaseInfo>();
                        eqpDeviceReleaseInfo.EquipmentName = _EquipmentInfo.EquipmentName;
                        eqpDeviceReleaseInfo.DeviceName    = _DeviceInfo2.DeviceName;
                        eqpDeviceReleaseInfo.RELEASEID     = sReleaseID;
                        eqpDeviceReleaseInfo.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                        LogCenter.LogToDB(eqpDeviceReleaseInfo, LogCenter.LogIndicator.Create(ActionType.Add, txnStamp.UserID, txnStamp.RecordTime));
                    }
                    cts.Complete();
                }

                ((ProgramInformationBlock)ProgramInformationBlock1).ShowMessage(TextMessage.Hint.T00057(GetUIResource("ToolVerifiy")));
                ClearField();
                AjaxFocus(ttbEquipmentName);
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#29
0
        /// <summary>
        /// 確認
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                using (var cts = CimesTransactionScope.Create())
                {
                    if (_SelectLotDatas.Count > 0)
                    {
                        string sLotInString = "";
                        // 組出where in字串
                        _SelectLotDatas.ForEach(p =>
                        {
                            sLotInString += "'" + p.Lot + "',";
                        });
                        sLotInString = sLotInString.EndsWith(",") ? sLotInString.Substring(0, sLotInString.Length - 1) : sLotInString;

                        var    dtInvData = DBCenter.GetDataTable(@"SELECT WO,INVLOT,SUM(QUANTITY) QUANTITY,DEVICE,FACTORY FROM MES_WIP_LOT  WHERE LOT IN(" + sLotInString + ") GROUP BY WO,INVLOT,DEVICE,FACTORY ORDER BY WO");
                        string headerSID = "";
                        string date      = txnStamp.RecordTime.Substring(0, 10).Replace("/", "");
                        string time      = txnStamp.RecordTime.Substring(11).Replace(":", "");
                        string preWo     = string.Empty;
                        int    seq       = 1;
                        // SAI倉位對應表
                        var lstSAIWarehouse = WpcExClassItemInfo.GetInfoByClass("SAIWarehouse");

                        dtInvData.Rows.LoopDo <DataRow>((p, i) =>
                        {
                            string currentWO = p["WO"].ToString();
                            string device    = p["DEVICE"].ToString();
                            string factory   = p["FACTORY"].ToString();
                            string invLot    = p["INVLOT"].ToString();
                            string qty       = p["QUANTITY"].ToString();
                            if (preWo != currentWO)
                            {
                                seq       = 1;
                                headerSID = DBCenter.GetSystemID();
                                DBCenter.ExecuteParse(@"INSERT INTO PPFHK (SID, WDATE, WTIME, BUDAT, AUFNR, FLAG) 
                                    VALUES (#[STRING], #[STRING], #[STRING], #[STRING], #[STRING],'N')", headerSID, date, time, date, currentWO);
                            }
                            //寫入PPFHP
                            //WERKS:Factory
                            //LGORT:入庫倉位
                            //CHARG:INVLOT
                            //MATNR:Device
                            var lstDetail     = _SelectLotDatas.FindAll(select => select.InventoryLot == invLot);
                            var warehouseInfo = lstSAIWarehouse.Find(wpcItem => wpcItem.Remark01 == lstDetail[0].Process && wpcItem.Remark03 == "DEFECT");
                            if (warehouseInfo == null)
                            {
                                //T00555:查無資料,請至系統資料維護新增類別{0}、項目{1}!
                                throw new CimesException(TextMessage.Error.T00555("SAIWarehouse", lstDetail[0].Process + "Remark03:DEFECT"));
                            }
                            DBCenter.ExecuteParse(@"INSERT INTO PPFHP (SID, SEQNR, WDATE, WTIME, MATNR, WERKS, LGORT, CHARG, MENGE, MEINS, FLAG)
                                VALUES (#[STRING], #[DECIMAL], #[STRING], #[STRING], #[STRING], #[STRING], #[STRING], #[STRING], #[STRING], #[STRING], 'N')", headerSID, seq, date, time, device, factory, warehouseInfo.Remark02, invLot, qty, lstDetail[0].Unit);

                            int detailseq = 1;
                            lstDetail.ForEach(lot => {
                                var defectInfo      = CSTWIPDefectJudgementInfo.GetDataByLot(lot.Lot);
                                var reasonGroupInfo = WIPReasonGroupInfoEx.GetReasonGroupByCategory(defectInfo["REASONCATEGORY"].ToString());
                                var reasonGroup     = reasonGroupInfo == null ? "" : reasonGroupInfo.REASONGROUP;
                                //寫入PPBCH
                                DBCenter.ExecuteParse(@"INSERT INTO PPBCH (SID, MATNR, WERKS, CHARG, SEQNO, WDATE, WTIME, CLASS, ATINN, ATWRT, FLAG)
                                    Values (#[STRING], #[STRING], #[STRING], #[STRING], #[DECIMAL], #[STRING], #[STRING], #[STRING], #[STRING], #[STRING], 'N')", headerSID, device, factory, invLot, detailseq, date, time, reasonGroup, defectInfo["REASONCATEGORY"].ToString(), defectInfo.Reason);
                                detailseq += 1;
                            });

                            seq  += 1;
                            preWo = currentWO;
                        });

                        _SelectLotDatas.ForEach(lot =>
                        {
                            //寫入WMSMaster & Detail
                            var wmsMaster = CSTWMSMastInfo.GetMaterialLotDataByMaterialLot(lot.InventoryLot);
                            if (wmsMaster == null)
                            {
                                wmsMaster            = InfoCenter.Create <CSTWMSMastInfo>();
                                wmsMaster.Lot        = lot.InventoryLot;
                                wmsMaster.DeviceName = lot.DeviceName;
                                wmsMaster.RuleName   = txnStamp.RuleName;
                                wmsMaster.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                            }
                            //理論上只會有一個Comp
                            lot.GetLotAllComponents().ForEach(comp => {
                                var wmsDetail         = InfoCenter.Create <CSTWMSDetailInfo>();
                                wmsDetail.Lot         = lot.InventoryLot;
                                wmsDetail.ComponentID = comp.ComponentID;
                                wmsDetail.Quantity    = comp.ComponentQuantity;
                                wmsDetail.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);
                            });

                            //將入庫單號回寫到批號身上
                            WIPTransaction.ModifyLotSystemAttribute(lot, "INVNO", ttbDefectNo.Text, txnStamp);

                            //將勾選的批號結批
                            WIPTransaction.TerminateLot(lot, txnStamp);
                        });

                        #region 更新命名規則
                        if (_ExecuteNamingSQLList != null && _ExecuteNamingSQLList.Count > 0)
                        {
                            DBCenter.ExecuteSQL(_ExecuteNamingSQLList);
                        }
                        #endregion

                        cts.Complete();
                    }
                    else
                    {
                        //[00816]請至少選取一個{0}!
                        throw new Exception(TextMessage.Error.T00816(GetUIResource("WorkpieceLot")));
                    }
                }

                ClearField();

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }
示例#30
0
        /// <summary>
        /// 確定
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnOK_Click(object sender, EventArgs e)
        {
            try
            {
                TransactionStamp txnStamp = new TransactionStamp(User.Identity.Name, ProgramRight, ProgramRight, ApplicationName);

                //確認是否有選擇送待判原因
                ddlJudgeDefect.Must(lblJudgeDefect);

                #region 檢查判定結果是否有選擇
                if (rdbGoods.Checked == false && rdbRepair.Checked == false && rdbDefectInv.Checked == false && rdbScrapInv.Checked == false)
                {
                    throw new Exception(TextMessage.Error.T00841(lblJudgeResult.Text));
                }
                #endregion

                //檢查判定原因是否有選擇
                ddlJudgeReason.Must(lblJudgeReason);

                using (var cts = CimesTransactionScope.Create())
                {
                    #region 依照選擇的判定結果,對批號進行不同的處置

                    //選取的判定結果
                    string result = "";

                    //選取的原因碼
                    var reasonCategory = InfoCenter.GetBySID <ReasonCategoryInfo>(ddlJudgeReason.SelectedValue);

                    #region 良品:依照批號的UDC02(工作站序號)+UDC03(工作站名稱)找出預設流程的下一站點,將批號跳站至該站
                    if (rdbGoods.Checked)
                    {
                        result = "Good";

                        //取得流程線上版本 取得目前Lot的所有流程(所有工作站)
                        RouteVersionInfo RouteVersion = RouteVersionInfo.GetRouteActiveVersion(_LotData.RouteName);

                        //取得設定包裝工作站名稱
                        var packingOperation = WpcExClassItemInfo.GetExtendItemListByClassAndRemarks("SAIPackingOperation");
                        if (packingOperation.Count == 0)
                        {
                            //T00555:查無資料,請至系統資料維護新增類別{0}、項目{1}!
                            throw new CimesException(TextMessage.Error.T00555("SAIPackingOperation", ""));
                        }

                        var reassignOperation = packingOperation[0];

                        //如果送待判站之前記錄的是包裝站,則直接跳至包裝站,反之,跳至下一站
                        if (reassignOperation.Remark01 == _LotData.UserDefineColumn03)
                        {
                            //取得包裝站名稱
                            string qcOperationName = reassignOperation.Remark01;

                            //取得包裝工作站資訊
                            var operation = OperationInfo.GetOperationByName(qcOperationName);
                            if (operation == null)
                            {
                                //T00171, 工作站:{0}不存在!!
                                throw new CimesException(TextMessage.Error.T00171(qcOperationName));
                            }
                            //根據指定的流程名稱、流程版本、工作站名稱, 找出第一個符合的流程工作站,新的站點包裝
                            var newOperation = RouteOperationInfo.GetRouteOperationByOperationName(_LotData.RouteName, _LotData.RouteVersion, qcOperationName);

                            //將批號的UDC02清空
                            WIPTransaction.ModifyLotSystemAttribute(_LotData, "USERDEFINECOL02", "", txnStamp);

                            //將批號的UDC03清空
                            WIPTransaction.ModifyLotSystemAttribute(_LotData, "USERDEFINECOL03", "", txnStamp);

                            //變更至指定工作站
                            WIPTransaction.ReassignOperation(_LotData, newOperation, reasonCategory, ttbJudgeDescr.Text, txnStamp);
                        }
                        else
                        {
                            //以此工作站名稱去查詢在流程中的序號
                            var routeOperation = RouteOperationInfo.GetRouteAllOperations(RouteVersion).Find(p => p.OperationName == _LotData.UserDefineColumn03);

                            var lastOperationSeq = string.Format("{0:000}", (Convert.ToDecimal(routeOperation.OperationSequence) + 1));

                            //下一個工作站 用LOT和流程中下一站的序號去查出下一個工作站資訊
                            var NextRouteOperation = RouteOperationInfo.GetRouteOperationByLotSequence(_LotData, lastOperationSeq);

                            if (NextRouteOperation == null)
                            {
                                //批號:{0}已無下個工作站點,請確認[流程設定]
                                throw new Exception(RuleMessage.Error.C10008(_LotData.Lot));
                            }

                            //將批號的UDC02清空
                            WIPTransaction.ModifyLotSystemAttribute(_LotData, "USERDEFINECOL02", "", txnStamp);

                            //將批號的UDC03清空
                            WIPTransaction.ModifyLotSystemAttribute(_LotData, "USERDEFINECOL03", "", txnStamp);

                            WIPTransaction.ReassignOperation(_LotData, NextRouteOperation, reasonCategory, ttbJudgeDescr.Text, txnStamp);
                        }
                    }
                    #endregion

                    #region 維修:紀錄維修及將批號派送至下一規則
                    if (rdbRepair.Checked)
                    {
                        result = "Repair";

                        List <WIPRepairInfo> repairDatas = new List <WIPRepairInfo>();

                        var componentData = ComponentInfoEx.GetDataByCurrentLot(_LotData.Lot)[0];
                        var repairData    = WIPRepairInfo.CreateInfo(_LotData, componentData, componentData.ComponentQuantity, reasonCategory, _LotData.OperationName, _LotData.ResourceName, string.Empty, string.Empty);
                        repairDatas.Add(repairData);

                        var issueOperation = OperationInfo.GetOperationByName(_LotData.OperationName);

                        WIPTransaction.RepairAdd(_LotData, repairDatas, issueOperation, txnStamp);
                        WIPTransaction.DispatchLot(_LotData, txnStamp);
                    }
                    #endregion

                    #region  良品入庫:將批號狀態變更為DefectInv
                    if (rdbDefectInv.Checked)
                    {
                        result = "DefectInv";
                        WIPTransaction.ModifyLotSystemAttribute(_LotData, "STATUS", "DefectInv", txnStamp);
                    }
                    #endregion

                    #region 報廢品入庫:將批號狀態變更為ScrapInv
                    if (rdbScrapInv.Checked)
                    {
                        result = "ScrapInv";
                        WIPTransaction.ModifyLotSystemAttribute(_LotData, "STATUS", "ScrapInv", txnStamp);
                    }
                    #endregion

                    #endregion

                    #region 將判定結果紀錄在CST_WIP_DEFECT_JUDGEMENT,Result:良品(Goods)、維修(Repair)、不良品入庫(DefectInv)、報廢入庫(ScrapInv)

                    var insertData = InfoCenter.Create <CSTWIPDefectJudgementInfo>();

                    insertData.WIPDefectSID      = _LotDefectData.DefectSID;
                    insertData["REASONCATEGORY"] = reasonCategory.Category;
                    insertData["LOT"]            = _LotData.Lot;
                    insertData.Reason            = reasonCategory.Reason;
                    insertData.Result            = result;
                    insertData.Description       = ttbJudgeDescr.Text;
                    insertData.LinkSID           = WIPHistoryInfo.GetLotFirstHistory(_LotData.Lot).LinkSID;

                    insertData.InsertToDB(txnStamp.UserID, txnStamp.RecordTime);

                    #endregion

                    cts.Complete();
                }

                ttbLot.Text = "";

                ClearField();
                AjaxFocus(ttbLot);

                _ProgramInformationBlock.ShowMessage(TextMessage.Hint.T00614(""));
            }
            catch (Exception ex)
            {
                HandleError(ex);
            }
        }