Exemplo n.º 1
0
        public void ToBackFlushCheck()
        {
            if (!isRun)
            {
                sfcdb = new OleExec(DBName, false);

                if (InterfacePublicValues.IsMonthly(sfcdb, MESDataObject.DB_TYPE_ENUM.Oracle))
                {
                    //月結不給拋賬
                    throw new Exception("This time is monthly,can't BackFlush");
                }

                if (_SAPWaitForBackFlushWo != null && _SAPWaitForBackFlushWo.Rows.Count > 0)
                {
                    T_R_BACKFLUSH_CHECK TR_BACKFLUSH_CHECK  = new T_R_BACKFLUSH_CHECK(sfcdb, MESDataObject.DB_TYPE_ENUM.Oracle);
                    DataSet             BackFlushCheckTable = TR_BACKFLUSH_CHECK.GetTableConstruct(sfcdb);
                    WOBase WO;
                    T_R_BACKFLUSH_HISTORY TR_BACKFLUSH_HISTORY = new T_R_BACKFLUSH_HISTORY(sfcdb, MESDataObject.DB_TYPE_ENUM.Oracle);
                    T_R_MRB TR_MRB = new T_R_MRB(sfcdb, MESDataObject.DB_TYPE_ENUM.Oracle);
                    foreach (DataRow dr in _SAPWaitForBackFlushWo.Rows)
                    {
                        //if (dr["AUFNR"].ToString() != "002510037542")
                        //if (dr["AUFNR"].ToString() != "002331000014")
                        //{
                        //    continue;
                        //}
                        DataRow bkItem = BackFlushCheckTable.Tables[0].NewRow();
                        bkItem["WORKORDERNO"]   = dr["AUFNR"];
                        bkItem["SKUNO"]         = dr["MATNR"];
                        bkItem["SAP_STATION"]   = dr["VORNR"];
                        bkItem["WORKORDER_QTY"] = Convert.ToInt64(Math.Ceiling(Convert.ToDecimal(dr["MGVRG"].ToString())));
                        bkItem["BACKFLUSH_QTY"] = Convert.ToInt64(Math.Ceiling(Convert.ToDecimal(dr["LMNGA"].ToString())));
                        try
                        {
                            WO = new WOBase(dr["AUFNR"].ToString(), sfcdb);
                            string SFCStation = WO.SAPMapping.GetSFCStation(bkItem["SAP_STATION"].ToString());
                            if (dr["AUFNR"].ToString().IndexOf("00257") == 0)
                            {
                                SFCStation = WO.Route.GetLastStation();
                            }
                            bkItem["SFC_STATION"] = SFCStation;
                            string LastSapStation = WO.SAPMapping.GetLastSAPStationCode();

                            if (dr["VORNR"].ToString() != LastSapStation)
                            {
                                if (dr["AUFNR"].ToString().IndexOf("00257") == 0)
                                {
                                    //處理HWD重工工單
                                    bkItem["SFC_QTY"] = WO.GetStationPassCount(SFCStation, false, sfcdb);
                                }
                                else
                                {
                                    bkItem["SFC_QTY"] = WO.GetStationPassCount(SFCStation, true, sfcdb);
                                }
                            }
                            else
                            {
                                bkItem["SFC_QTY"] = WO.GetStationPassCount(SFCStation, false, sfcdb);
                            }


                            //計算歷史拋帳數據
                            DataSet tmpData = TR_BACKFLUSH_HISTORY.GetBackFlushData(WO.WORKORDERNO, bkItem["SAP_STATION"].ToString(), sfcdb);

                            bkItem["LAST_SFC_QTY"] = tmpData.Tables[0].Rows[0]["C"];

                            //計算MRB的數量
                            tmpData           = TR_MRB.GetSNCountByWO(WO.WORKORDERNO, sfcdb);
                            bkItem["MRB_QTY"] = tmpData.Tables[0].Rows[0]["C"];

                            int   SFC_QTY      = Int32.Parse(bkItem["SFC_QTY"].ToString());
                            int   MRB_QTY      = Int32.Parse(bkItem["MRB_QTY"].ToString());
                            float SAP_QTY      = float.Parse(bkItem["BACKFLUSH_QTY"].ToString());
                            int   LAST_SFC_QTY = Int32.Parse(bkItem["LAST_SFC_QTY"].ToString());

                            int DIFF_QTY = SFC_QTY - LAST_SFC_QTY;
                            bkItem["DIFF_QTY"]  = DIFF_QTY;
                            bkItem["DIFF_QTY1"] = DIFF_QTY;
                            bkItem["DIFF_QTY2"] = SFC_QTY + MRB_QTY - SAP_QTY;

                            //處理異常數據
                            if (Int32.Parse(bkItem["DIFF_QTY"].ToString()) < 0)
                            {
                                WriteLog.WriteIntoMESLog(sfcdb, _BU, "Interface",
                                                         "MESInterface.HWD.BackFlush.BackFlushHelp",
                                                         "ToBackFlushCheck", dr["AUFNR"].ToString() + "," + dr["VORNR"].ToString() + ",DATA Err DIFF_QTY < 0", "", "System");
                                bkItem["DIFF_QTY"] = 0;
                            }


                            if (Int32.Parse(bkItem["DIFF_QTY"].ToString())
                                + float.Parse(bkItem["BACKFLUSH_QTY"].ToString())
                                > float.Parse(bkItem["WORKORDER_QTY"].ToString()))
                            {
                                bkItem["DIFF_QTY"] = 0;
                                WriteLog.WriteIntoMESLog(sfcdb, _BU, "Interface",
                                                         "MESInterface.HWD.BackFlush.BackFlushHelp",
                                                         "ToBackFlushCheck", dr["AUFNR"].ToString() + "," + dr["VORNR"].ToString() + ",DATA Err PassQTY > WORKORDER_QTY", "", "System");
                            }
                            BackFlushCheckTable.Tables[0].Rows.Add(bkItem);
                        }
                        catch (Exception ee)
                        {
                            WriteLog.WriteIntoMESLog(sfcdb, _BU, "Interface",
                                                     "MESInterface.HWD.BackFlush.BackFlushHelp",
                                                     "ToBackFlushCheck", dr["AUFNR"].ToString() + ":" + ee.Message, "", "System");
                            continue;
                        }
                    }
                    bkList = R_BACKFLUSH_CHECK.DataAdapert(BackFlushCheckTable, true);
                    if (addDataGridDelegate != null)
                    {
                        addDataGridDelegate("dgBACKFLUSH", BackFlushCheckTable.Tables[0]);
                    }
                    if (setCtrlEnableDelegate != null)
                    {
                        setCtrlEnableDelegate("btnCallRFC", true);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void RouteDatachecker(MESPubLab.MESStation.MESStationBase Station, MESPubLab.MESStation.MESStationInput Input, List <MESDataObject.Module.R_Station_Action_Para> Paras)
        {
            string       ErrMessage = "";
            List <R_MRB> GetMRBList = new List <R_MRB>();
            R_MRB        New_R_MRB  = new R_MRB();
            T_R_MRB      TR_MRB     = new T_R_MRB(Station.SFCDB, Station.DBType);

            if (Paras.Count != 3)
            {
                throw new Exception("參數數量不正確!");
            }
            MESStationSession SnSession = Station.StationSession.Find(t => t.MESDataType == Paras[0].SESSION_TYPE && t.SessionKey == Paras[0].SESSION_KEY);

            if (SnSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[0].SESSION_TYPE + Paras[0].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }
            else if (SnSession.Value == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[0].VALUE + Paras[0].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }
            SN ObjSn = (SN)SnSession.Value;

            MESStationSession WoSession = Station.StationSession.Find(t => t.MESDataType == Paras[1].SESSION_TYPE && t.SessionKey == Paras[1].SESSION_KEY);

            if (WoSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[1].SESSION_TYPE + Paras[1].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }
            WorkOrder ObjWo = (WorkOrder)WoSession.Value;

            MESStationSession StationSession = Station.StationSession.Find(t => t.MESDataType == Paras[2].SESSION_TYPE && t.SessionKey == Paras[2].SESSION_KEY);

            if (StationSession == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[2].SESSION_TYPE + Paras[2].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }
            else if (StationSession.Value == null)
            {
                ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { Paras[2].VALUE + Paras[2].SESSION_KEY });
                throw new MESReturnMessage(ErrMessage);
            }

            string NextStation = StationSession.Value.ToString();

            try
            {
                GetMRBList = TR_MRB.GetMrbInformationBySN(ObjSn.SerialNo, Station.SFCDB);

                if (GetMRBList == null || GetMRBList.Count == 0)
                {
                    ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000045", new string[] { "R_MRB:" + ObjSn.SerialNo });
                    throw new MESReturnMessage(ErrMessage);
                }
                //MESStationInput I = Station.Inputs.Find(t => t.DisplayName == "StationName");
                //List<object> snStationList = I.DataForUse;
                //snStationList.Clear();
                //snStationList.Add(""); ///BY SDL  加載頁面默認賦予空值,操作員必須點選其他有內容選項

                Route routeDetail = new Route(ObjWo.RouteID, GetRouteType.ROUTEID, Station.SFCDB, MESDataObject.DB_TYPE_ENUM.Oracle);
                List <RouteDetail> routeDetailList = routeDetail.DETAIL;
                RouteDetail        h = routeDetailList.Find(t => t.STATION_NAME == GetMRBList[0].NEXT_STATION || t.STATION_TYPE == GetMRBList[0].NEXT_STATION);
                if (h == null)   //R_MRB next_station欄位的值
                {
                    ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000205", new string[] { ObjSn.SerialNo, ObjWo.WorkorderNo });
                    throw new MESReturnMessage(ErrMessage);
                }

                RouteDetail g = routeDetailList.Find(t => t.STATION_NAME == NextStation);
                if (g == null)  //REWORK選擇的要打回工站
                {
                    ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000052", new string[] { NextStation });
                    throw new MESReturnMessage(ErrMessage);
                }

                if (g.SEQ_NO > h.SEQ_NO)
                {
                    ErrMessage = MESReturnMessage.GetMESReturnMessage("MES00000211", new string[] {  });
                    throw new MESReturnMessage(ErrMessage);
                }


                Station.AddMessage("MES00000026", new string[] {  }, MESPubLab.MESStation.MESReturnView.Station.StationMessageState.Pass);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }