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); } } } }
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; } }