Exemple #1
0
        public R_TCQS_YIELD_RATE_DETAIL GetDataObject()
        {
            R_TCQS_YIELD_RATE_DETAIL DataObject = new R_TCQS_YIELD_RATE_DETAIL();

            DataObject.ID                     = this.ID;
            DataObject.WORK_DATE              = this.WORK_DATE;
            DataObject.WORK_TIME              = this.WORK_TIME;
            DataObject.PRODUCTION_LINE        = this.PRODUCTION_LINE;
            DataObject.CLASS_NAME             = this.CLASS_NAME;
            DataObject.STATION_NAME           = this.STATION_NAME;
            DataObject.DEVICE_NAME            = this.DEVICE_NAME;
            DataObject.WORKORDERNO            = this.WORKORDERNO;
            DataObject.SKUNO                  = this.SKUNO;
            DataObject.SKU_NAME               = this.SKU_NAME;
            DataObject.SKU_SERIES             = this.SKU_SERIES;
            DataObject.TOTAL_FRESH_BUILD_QTY  = this.TOTAL_FRESH_BUILD_QTY;
            DataObject.TOTAL_FRESH_PASS_QTY   = this.TOTAL_FRESH_PASS_QTY;
            DataObject.TOTAL_FRESH_FAIL_QTY   = this.TOTAL_FRESH_FAIL_QTY;
            DataObject.TOTAL_REWORK_BUILD_QTY = this.TOTAL_REWORK_BUILD_QTY;
            DataObject.TOTAL_REWORK_PASS_QTY  = this.TOTAL_REWORK_PASS_QTY;
            DataObject.TOTAL_REWORK_FAIL_QTY  = this.TOTAL_REWORK_FAIL_QTY;
            DataObject.TCQS_FRESH_BUILD_QTY   = this.TCQS_FRESH_BUILD_QTY;
            DataObject.TCQS_FRESH_PASS_QTY    = this.TCQS_FRESH_PASS_QTY;
            DataObject.TCQS_FRESH_FAIL_QTY    = this.TCQS_FRESH_FAIL_QTY;
            DataObject.TCQS_REWORK_BUILD_QTY  = this.TCQS_REWORK_BUILD_QTY;
            DataObject.TCQS_REWORK_PASS_QTY   = this.TCQS_REWORK_PASS_QTY;
            DataObject.TCQS_REWORK_FAIL_QTY   = this.TCQS_REWORK_FAIL_QTY;
            DataObject.EDIT_EMP               = this.EDIT_EMP;
            DataObject.EDIT_TIME              = this.EDIT_TIME;
            return(DataObject);
        }
Exemple #2
0
        //處理SN狀態/記錄過站記錄/統計良率
        public R_TCQS_YIELD_RATE_DETAIL CheckTCQSTest(string SerialNo, string SkuNo, string WorkorderNo, string Line, string StationName, string DeviceName, string Bu, string PassOrFail, string EmpNo, DateTime DT, OleExec DB)
        {
            DataTable dataTable = new DataTable();
            string    sql = string.Empty;
            string    RepassModel = "", RetestModel = "", Device_Name = "";
            int       PassLimit = 1, RetestLimit = 1; //所有未設定的機種,默認以該參數統計TCQS
            int       PassCount = 0, RetestCount = 0; //臨時表記錄的Pass/Retest測試次數
            int       PassCountFlag   = 0;            //標識是否有過站記錄,在Total統計時以確定Fresh/Rework狀態
            int       RetestCountFlag = 0,            //標識是否有測試記錄,在TCQS統計時以確定Fresh/Rework狀態
                      RepairFlag      = 0;            //標識是否做過站處理
            T_R_WO_BASE   WoTable     = null;
            Row_R_WO_BASE WoRow       = null;

            WoTable = new T_R_WO_BASE(DB, this.DBType);
            WoRow   = WoTable.GetWo(WorkorderNo, DB);
            //初使化R_TCQS_YIELD_RATE_DETAIL
            R_TCQS_YIELD_RATE_DETAIL RTYRD = new R_TCQS_YIELD_RATE_DETAIL()
            {
                WORK_DATE              = DT.ToString("yyyy-MM-dd"),
                WORK_TIME              = DT.ToString("HH"),
                PRODUCTION_LINE        = Line,
                CLASS_NAME             = GetWorkClass(DT.ToString("HH:mm:ss"), DB),
                STATION_NAME           = StationName,
                DEVICE_NAME            = DeviceName,
                WORKORDERNO            = WorkorderNo,
                SKUNO                  = SkuNo,
                SKU_NAME               = WoRow.SKU_NAME,
                SKU_SERIES             = WoRow.SKU_SERIES,
                TOTAL_REWORK_BUILD_QTY = 0,
                TOTAL_REWORK_PASS_QTY  = 0,
                TOTAL_REWORK_FAIL_QTY  = 0,
                TOTAL_FRESH_BUILD_QTY  = 0,
                TOTAL_FRESH_PASS_QTY   = 0,
                TOTAL_FRESH_FAIL_QTY   = 0,
                TCQS_REWORK_BUILD_QTY  = 0,
                TCQS_REWORK_PASS_QTY   = 0,
                TCQS_REWORK_FAIL_QTY   = 0,
                TCQS_FRESH_BUILD_QTY   = 0,
                TCQS_FRESH_PASS_QTY    = 0,
                TCQS_FRESH_FAIL_QTY    = 0,
                EDIT_EMP               = EmpNo,
                EDIT_TIME              = DT
            };


            sql       = $@"Select PASS_LIMIT,RETEST_LIMIT,REPASS_MODEL,RETEST_MODEL from C_MODEL_ATE_SET_T 
                   Where skuno='{SkuNo}' and station_name='{StationName}' ";
            dataTable = DB.ExecSelect(sql).Tables[0];
            //如果有設定則取設定值,否則取默認值
            if (dataTable.Rows.Count > 0)
            {
                PassLimit   = Int32.Parse(dataTable.Rows[0]["PASS_LIMIT"].ToString());
                RetestLimit = Int32.Parse(dataTable.Rows[0]["RETEST_MODEL"].ToString());
                RepassModel = dataTable.Rows[0]["REPASS_MODEL"].ToString();
                RetestModel = dataTable.Rows[0]["RETEST_MODEL"].ToString();
            }
            //獲取臨時表的測試記錄中Pass次數/Fail次數/測試機臺名稱
            sql       = $@"select PASS_COUNT,RETEST_COUNT,DEVICE_NAME from  R_TMP_ATEDATA_T where station_name = '{StationName}' and sn = '{SerialNo}'";
            dataTable = null;
            dataTable = DB.ExecSelect(sql).Tables[0];
            if (dataTable.Rows.Count > 0)
            {
                PassCount   = Int32.Parse(dataTable.Rows[0]["PASS_COUNT"].ToString());
                RetestCount = Int32.Parse(dataTable.Rows[0]["RETEST_COUNT"].ToString());
                Device_Name = dataTable.Rows[0]["DEVICE_NAME"].ToString();
            }
            //獲取產品狀態Fresh or Rework
            sql       = $@"SELECT RESULT_FLAG FROM R_SN_DETAIL WHERE SN = '{SerialNo}' AND STATION_NAME = '{StationName}'";
            dataTable = null;
            dataTable = DB.ExecSelect(sql).Tables[0];
            if (dataTable.Rows.Count > 0)
            {
                //有記錄,代表有測試過,因此TCQS為Rework
                RetestCountFlag = 1;
                foreach (DataRow dr in dataTable.Rows)
                {
                    //有過站記錄,因此總良率為Rework
                    if (dr["RESULT_FLAG"].ToString() == "0" || dr["RESULT_FLAG"].ToString() == "1")
                    {
                        PassCountFlag = 1;
                        break;
                    }
                }
            }

            //統計良率統計數據
            if (PassOrFail == "PASS")//測試結果為PASS
            {
                //如果有Fail記錄
                if (RetestCount > 0)
                {
                    //管控測試PASS次數>1
                    if (PassLimit > 1)
                    {
                        //如果有測試PASS的記錄,則需要判斷是否需切換工站,是否滿足測試次數
                        if (PassCount > 0)
                        {
                            //必須切換測試站
                            if (RepassModel == "0")
                            {
                                if (Device_Name == DeviceName)
                                {
                                    //必須換機臺測試
                                    string errMsg = MESReturnMessage.GetMESReturnMessage("MSGCODE20180526185619");
                                    throw new MESReturnMessage(errMsg);
                                }
                            }
                            else if (RepassModel == "1")   //不允許換機臺測試
                            {
                                if (Device_Name != DeviceName)
                                {
                                    //不允許換機臺測試,必須使用Device_Name機臺測試
                                    string errMsg = MESReturnMessage.GetMESReturnMessage("MSGCODE20180526185620", new string[] { Device_Name });
                                    throw new MESReturnMessage(errMsg);
                                }
                            }
                            //判斷是否滿足PASS測試次數
                            if (PassCount != PassLimit - 1) //不滿足測試次數
                            {
                                RepairFlag = 1;             //不過站,不清臨時表,過站記錄標識為非過站
                            }
                            RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                            RTYRD.TCQS_REWORK_PASS_QTY  = 1;
                        }
                        else  //如果沒有測試PASS的記錄,則直接增加測試PASS次數
                        {
                            RepairFlag = 1;   //不過站,不清臨時表,過站記錄標識為非過站
                            RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                            RTYRD.TCQS_REWORK_PASS_QTY  = 1;
                        }
                    }
                    else  //管控測試PASS次數=1
                    {
                        RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                        RTYRD.TCQS_REWORK_PASS_QTY  = 1;
                    }
                }
                else  //如果臨時表沒有Fail記錄,則需要判斷是否有測試記錄,以確定是Fresh還是Rework
                {
                    //如果有測試記錄,則為Rework
                    if (RetestCountFlag == 1)
                    {
                        RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                        RTYRD.TCQS_REWORK_PASS_QTY  = 1;
                    }
                    else//否則為Fresh
                    {
                        RTYRD.TCQS_FRESH_BUILD_QTY = 1;
                        RTYRD.TCQS_FRESH_PASS_QTY  = 1;
                    }
                }
                //如果做過站處理,則還需要統計總良率
                if (RepairFlag == 0)
                {
                    if (PassCountFlag == 1)//有過站記錄
                    {
                        RTYRD.TOTAL_REWORK_BUILD_QTY = 1;
                        RTYRD.TOTAL_REWORK_PASS_QTY  = 1;
                    }
                    else//沒有過站記錄
                    {
                        RTYRD.TOTAL_FRESH_BUILD_QTY = 1;
                        RTYRD.TOTAL_FRESH_PASS_QTY  = 1;
                    }
                }
            }
            else//測試結果為Fail
            {
                //管控測試重測次數>1
                if (RetestLimit > 1)
                {
                    //有Fail記錄
                    if (RetestCount > 0)
                    {
                        //必須切換測試站
                        if (RepassModel == "0")
                        {
                            if (Device_Name == DeviceName)
                            {
                                //必須換機臺測試
                                string errMsg = MESReturnMessage.GetMESReturnMessage("MSGCODE20180526185619");
                                throw new MESReturnMessage(errMsg);
                            }
                        }
                        else if (RepassModel == "1")  //不允許換機臺測試
                        {
                            if (Device_Name != DeviceName)
                            {
                                //不允許換機臺測試,必須使用Device_Name機臺測試
                                string errMsg = MESReturnMessage.GetMESReturnMessage("MSGCODE20180526185620", new string[] { Device_Name });
                                throw new MESReturnMessage(errMsg);
                            }
                        }
                        //判斷是否滿足重測次數
                        if (RetestCount != RetestLimit - 1) //不滿足測試次數
                        {
                            RepairFlag = 1;                 //不過站,不清臨時表,過站記錄標識為非過站
                        }
                        RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                        RTYRD.TCQS_REWORK_FAIL_QTY  = 1;
                    }
                    else  //允許重測次數>1,且臨時表沒有Fail記錄
                    {
                        RepairFlag = 1;   //不過站,不清臨時表,過站記錄標識為非過站
                        //有測試記錄
                        if (RetestCountFlag == 1)
                        {
                            RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                            RTYRD.TCQS_REWORK_FAIL_QTY  = 1;
                        }
                        else//沒有測試記錄
                        {
                            RTYRD.TCQS_FRESH_BUILD_QTY = 1;
                            RTYRD.TCQS_FRESH_FAIL_QTY  = 1;
                        }
                    }
                }
                else  //管控測試重測次數=1,則需要判斷是否有測試記錄,以確定是Fresh還是Rework
                {
                    //如果有測試記錄,則為Rework
                    if (RetestCountFlag == 1)
                    {
                        RTYRD.TCQS_REWORK_BUILD_QTY = 1;
                        RTYRD.TCQS_REWORK_FAIL_QTY  = 1;
                    }
                    else//否則為Fresh
                    {
                        RTYRD.TCQS_FRESH_BUILD_QTY = 1;
                        RTYRD.TCQS_FRESH_FAIL_QTY  = 1;
                    }
                }
                //如果做過站處理,則還需要統計總良率
                if (RepairFlag == 0)
                {
                    if (PassCountFlag == 1)//有過站記錄
                    {
                        RTYRD.TOTAL_REWORK_BUILD_QTY = 1;
                        RTYRD.TOTAL_REWORK_FAIL_QTY  = 1;
                    }
                    else//沒有過站記錄
                    {
                        RTYRD.TOTAL_FRESH_BUILD_QTY = 1;
                        RTYRD.TOTAL_FRESH_FAIL_QTY  = 1;
                    }
                }
            }
            return(RTYRD);
        }
Exemple #3
0
        /// <summary>
        /// 記錄良率
        /// </summary>
        /// <param name="WorkOrder"></param>
        /// <param name="SerialNo"></param>
        /// <param name="Status"></param>
        /// <param name="Day"></param>
        /// <param name="Time"></param>
        /// <param name="Line"></param>
        /// <param name="Station"></param>
        /// <param name="EmpNo"></param>
        /// <param name="Bu"></param>
        /// <param name="DB"></param>
        /// <returns></returns>
        public string RecordTCQSYieldRate(R_TCQS_YIELD_RATE_DETAIL RTYRD, string SerialNo, string Bu, OleExec DB)
        {
            string    result = string.Empty;
            string    sql    = string.Empty;
            DataTable dt     = new DataTable();
            T_R_TCQS_YIELD_RATE_DETAIL   TRTYRD = null;
            Row_R_TCQS_YIELD_RATE_DETAIL RRTYRD = null;
            T_R_TMP_ATEDATA_T            TRTAT  = null;
            Row_R_TMP_ATEDATA_T          RRTAT  = null;
            T_R_SN_DETAIL   TRSD = null;
            Row_R_SN_DETAIL RRSD = null;

            if (this.DBType == DB_TYPE_ENUM.Oracle)
            {
                //更新R_TCQS_YIELD_RATE_DETAIL
                TRTYRD = new T_R_TCQS_YIELD_RATE_DETAIL(DB, this.DBType);
                RRTYRD = (Row_R_TCQS_YIELD_RATE_DETAIL)TRTYRD.NewRow();
                sql    = $@"Select * From R_TCQS_YIELD_RATE_DETAIL 
                       Where WORK_DATE='{RTYRD.WORK_DATE}' and Work_Time='{RTYRD.WORK_TIME}' and 
                             PRODUCTION_LINE='{RTYRD.PRODUCTION_LINE}' and CLASS_NAME='{RTYRD.CLASS_NAME}' and 
                             STATION_NAME='{RTYRD.STATION_NAME}' and 
                             DEVICE_NAME='{RTYRD.DEVICE_NAME}' and WORKORDERNO='{RTYRD.WORKORDERNO}' ";
                dt     = DB.ExecSelect(sql).Tables[0];
                //如果記錄已經存在
                if (dt.Rows.Count > 0)
                {
                    RRTYRD.loadData(dt.Rows[0]);
                    RRTYRD.TOTAL_FRESH_BUILD_QTY  += RTYRD.TOTAL_FRESH_BUILD_QTY;
                    RRTYRD.TOTAL_FRESH_PASS_QTY   += RTYRD.TOTAL_FRESH_PASS_QTY;
                    RRTYRD.TOTAL_FRESH_FAIL_QTY   += RTYRD.TOTAL_FRESH_FAIL_QTY;
                    RRTYRD.TOTAL_REWORK_BUILD_QTY += RTYRD.TOTAL_REWORK_BUILD_QTY;
                    RRTYRD.TOTAL_REWORK_PASS_QTY  += RTYRD.TOTAL_REWORK_PASS_QTY;
                    RRTYRD.TOTAL_REWORK_FAIL_QTY  += RTYRD.TOTAL_REWORK_FAIL_QTY;
                    RRTYRD.TCQS_FRESH_BUILD_QTY   += RTYRD.TCQS_FRESH_BUILD_QTY;
                    RRTYRD.TCQS_FRESH_PASS_QTY    += RTYRD.TCQS_FRESH_PASS_QTY;
                    RRTYRD.TCQS_FRESH_FAIL_QTY    += RTYRD.TCQS_FRESH_FAIL_QTY;
                    RRTYRD.TCQS_REWORK_BUILD_QTY  += RTYRD.TCQS_REWORK_BUILD_QTY;
                    RRTYRD.TCQS_REWORK_PASS_QTY   += RTYRD.TCQS_REWORK_PASS_QTY;
                    RRTYRD.TCQS_REWORK_FAIL_QTY   += RTYRD.TCQS_REWORK_FAIL_QTY;
                    RRTYRD.EDIT_EMP  = RTYRD.EDIT_EMP;
                    RRTYRD.EDIT_TIME = RTYRD.EDIT_TIME;
                    sql = RRTYRD.GetUpdateString(this.DBType);
                }
                else//記錄不存在,則Insert
                {
                    RRTYRD.ID                     = TRTYRD.GetNewID(Bu, DB);
                    RRTYRD.WORK_DATE              = RTYRD.WORK_DATE;
                    RRTYRD.WORK_TIME              = RTYRD.WORK_TIME;
                    RRTYRD.PRODUCTION_LINE        = RTYRD.PRODUCTION_LINE;
                    RRTYRD.CLASS_NAME             = RTYRD.CLASS_NAME;
                    RRTYRD.STATION_NAME           = RTYRD.STATION_NAME;
                    RRTYRD.DEVICE_NAME            = RTYRD.DEVICE_NAME;
                    RRTYRD.WORKORDERNO            = RTYRD.WORKORDERNO;
                    RRTYRD.SKUNO                  = RTYRD.SKUNO;
                    RRTYRD.SKU_NAME               = RTYRD.SKU_NAME;
                    RRTYRD.SKU_SERIES             = RTYRD.SKU_SERIES;
                    RRTYRD.TOTAL_FRESH_BUILD_QTY  = RTYRD.TOTAL_FRESH_BUILD_QTY;
                    RRTYRD.TOTAL_FRESH_PASS_QTY   = RTYRD.TOTAL_FRESH_PASS_QTY;
                    RRTYRD.TOTAL_FRESH_FAIL_QTY   = RTYRD.TOTAL_FRESH_FAIL_QTY;
                    RRTYRD.TOTAL_REWORK_BUILD_QTY = RTYRD.TOTAL_REWORK_BUILD_QTY;
                    RRTYRD.TOTAL_REWORK_PASS_QTY  = RTYRD.TOTAL_REWORK_PASS_QTY;
                    RRTYRD.TOTAL_REWORK_FAIL_QTY  = RTYRD.TOTAL_REWORK_FAIL_QTY;
                    RRTYRD.TCQS_FRESH_BUILD_QTY   = RTYRD.TCQS_FRESH_BUILD_QTY;
                    RRTYRD.TCQS_FRESH_PASS_QTY    = RTYRD.TCQS_FRESH_PASS_QTY;
                    RRTYRD.TCQS_FRESH_FAIL_QTY    = RTYRD.TCQS_FRESH_FAIL_QTY;
                    RRTYRD.TCQS_REWORK_BUILD_QTY  = RTYRD.TCQS_REWORK_BUILD_QTY;
                    RRTYRD.TCQS_REWORK_PASS_QTY   = RTYRD.TCQS_REWORK_PASS_QTY;
                    RRTYRD.TCQS_REWORK_FAIL_QTY   = RTYRD.TCQS_REWORK_FAIL_QTY;
                    RRTYRD.EDIT_EMP               = RTYRD.EDIT_EMP;
                    RRTYRD.EDIT_TIME              = RTYRD.EDIT_TIME;
                    sql = RRTYRD.GetInsertString(this.DBType);
                }
                try
                {
                    result = DB.ExecSQL(sql);
                    //如果數據更新成功,則返回數據更新的記錄數,如果為Begn...END返回為-1,可被 Int32.Parse 方法轉換成 int
                    if (Int32.Parse(result) < -1)
                    {
                        string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000190", new string[] { "R_TCQS_YIELD_RATE_DETAIL" });
                        throw new MESReturnMessage(errMsg + ":" + result);
                    }
                }catch (Exception ee)//執行SQL異常
                {
                    string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000190", new string[] { "R_TCQS_YIELD_RATE_DETAIL" });
                    throw new MESReturnMessage(errMsg + ":" + ee.Message);
                }
                //更新R_TMP_ATEDATA_T
                if (RTYRD.TOTAL_FRESH_BUILD_QTY + RTYRD.TOTAL_REWORK_BUILD_QTY > 0)//如果是過站處理,則刪除臨時表記錄
                {
                    sql = $@"Delete From R_TMP_ATEDATA_T Where SN='{SerialNo}' and Station_Name='{RTYRD.STATION_NAME}' ";
                }
                else
                {
                    TRTAT = new T_R_TMP_ATEDATA_T(DB, this.DBType);
                    RRTAT = (Row_R_TMP_ATEDATA_T)TRTAT.NewRow();
                    sql   = $@"SELECT * FROM r_tmp_atedata_t
                           WHERE Station_Name = '{RTYRD.STATION_NAME}' AND SN = '{SerialNo}' ";
                    dt    = DB.ExecSelect(sql).Tables[0];
                    //如果記錄已經存在,則Update
                    if (dt.Rows.Count > 0)
                    {
                        RRTAT.loadData(dt.Rows[0]);
                        RRTAT.DEVICE_NAME  = RTYRD.DEVICE_NAME;
                        RRTAT.PASS_COUNT   = RRTAT.PASS_COUNT + RTYRD.TCQS_FRESH_PASS_QTY + RTYRD.TCQS_REWORK_PASS_QTY;
                        RRTAT.RETEST_COUNT = RRTAT.RETEST_COUNT + RTYRD.TCQS_FRESH_FAIL_QTY + RTYRD.TCQS_REWORK_FAIL_QTY;
                        sql = RRTAT.GetUpdateString(this.DBType);
                    }
                    else //記錄不存在則Insert
                    {
                        RRTAT.ID              = TRTAT.GetNewID(Bu, DB);
                        RRTAT.WORKORDERNO     = RTYRD.WORKORDERNO;
                        RRTAT.SKUNO           = RTYRD.SKUNO;
                        RRTAT.SN              = SerialNo;
                        RRTAT.PRODUCTION_LINE = RTYRD.PRODUCTION_LINE;
                        RRTAT.SECTION_NAME    = "1";
                        RRTAT.STATION_NAME    = RTYRD.STATION_NAME;
                        RRTAT.DEVICE_NAME     = RTYRD.DEVICE_NAME;
                        RRTAT.PASS_COUNT      = RTYRD.TCQS_FRESH_PASS_QTY + RTYRD.TCQS_REWORK_PASS_QTY;
                        RRTAT.RETEST_COUNT    = RTYRD.TCQS_FRESH_FAIL_QTY + RTYRD.TCQS_REWORK_FAIL_QTY;
                        RRTAT.EDIT_EMP        = RTYRD.EDIT_EMP;
                        RRTAT.EDIT_TIME       = RTYRD.EDIT_TIME;
                        sql = RRTYRD.GetInsertString(this.DBType);
                    }
                }
                try
                {
                    result = DB.ExecSQL(sql);
                    //如果數據更新成功,則返回數據更新的記錄數,如果為Begn...END返回為-1,可被 Int32.Parse 方法轉換成 int
                    if (Int32.Parse(result) < -1)
                    {
                        string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000190", new string[] { "R_TMP_ATEDATA_T" });
                        throw new MESReturnMessage(errMsg + ":" + result);
                    }
                }
                catch (Exception ee)//執行SQL異常
                {
                    string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000190", new string[] { "R_TMP_ATEDATA_T" });
                    throw new MESReturnMessage(errMsg + ":" + ee.Message);
                }
                //更新R_SN_DETAIL
                TRSD              = new T_R_SN_DETAIL(DB, this.DBType);
                RRSD              = (Row_R_SN_DETAIL)TRSD.NewRow();
                RRSD.ID           = TRSD.GetNewID(Bu, DB);
                RRSD.SN           = SerialNo;
                RRSD.SKUNO        = RTYRD.SKUNO;
                RRSD.WORKORDERNO  = RTYRD.WORKORDERNO;
                RRSD.LINE         = RTYRD.PRODUCTION_LINE;
                RRSD.STATION_NAME = RTYRD.STATION_NAME;
                RRSD.DEVICE_NAME  = RTYRD.DEVICE_NAME;
                RRSD.CLASS_NAME   = RTYRD.CLASS_NAME;
                //如果以PASS過站,則Flag=1
                if (RTYRD.TOTAL_FRESH_PASS_QTY + RTYRD.TOTAL_REWORK_PASS_QTY > 0)
                {
                    RRSD.RESULT_FLAG = "1";
                }
                else if (RTYRD.TOTAL_FRESH_FAIL_QTY + RTYRD.TOTAL_REWORK_FAIL_QTY > 0) //如果以Fail進維修,則Flag=0
                {
                    RRSD.RESULT_FLAG = "0";
                }
                else if (RTYRD.TCQS_FRESH_PASS_QTY + RTYRD.TCQS_REWORK_PASS_QTY > 0)//如果PASS但不過站,則Flag=2
                {
                    RRSD.RESULT_FLAG = "2";
                }
                else//如果FAIL但不過站,則Flag=3
                {
                    RRSD.RESULT_FLAG = "3";
                }
                RRSD.EDIT_EMP  = RTYRD.EDIT_EMP;
                RRSD.EDIT_TIME = RTYRD.EDIT_TIME;
                sql            = RRSD.GetInsertString(this.DBType);
                try
                {
                    result = DB.ExecSQL(sql);
                    //如果數據更新成功,則返回數據更新的記錄數,如果為Begn...END返回為-1,可被 Int32.Parse 方法轉換成 int
                    if (Int32.Parse(result) < -1)
                    {
                        string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000190", new string[] { "R_SN_DETAIL" });
                        throw new MESReturnMessage(errMsg + ":" + result);
                    }
                }
                catch (Exception ee)//執行SQL異常
                {
                    string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000190", new string[] { "R_SN_DETAIL" });
                    throw new MESReturnMessage(errMsg + ":" + ee.Message);
                }
                return(result);
            }
            else
            {
                string errMsg = MESReturnMessage.GetMESReturnMessage("MES00000019", new string[] { DBType.ToString() });
                throw new MESReturnMessage(errMsg);
            }
        }