//将listTrSn保存到本地进行缓存 public bool SaveTrSn(List <string> listTrsn, string woid, int stockNoType) { //需要推送的:发料,超领 //不需要推送的:售出,委外,移库 //不确定的:预留 if (stockNoType != (int)MyData.PickWoType.Normal && stockNoType != (int)MyData.PickWoType.Super && stockNoType != (int)MyData.PickWoType.Discard) { return(true); } if (listTrsn == null || listTrsn.Count == 0) { return(false); } try { return(DBFunc.SaveTrSn(listTrsn, woid, stockNoType)); } catch (Exception ex) { ShowHint("InsertRTrSn:" + ex.Message, Color.Red); return(false); } }
private int GeTrSnCnt(string locid) { try { List <string> listTrSn = DBFunc.SearchTrSnFromRInventoryDetailByLocId(locid); return(listTrSn.Count); } catch (Exception ex) { Log.Error(ex.Message); Trace.WriteLine("Debug: " + ex.Message); return(-1); } }
//1.读取本地缓存的TrSn, 2.推送到线边仓 private void PushTrSnByStockNo(string woid, int stockNoType) { if (stockNoType != (int)MyData.PickWoType.Normal && stockNoType != (int)MyData.PickWoType.Super && stockNoType != (int)MyData.PickWoType.Discard) { return; } try { DataTable dt = DBFunc.SearchTbInsertTrSnByStockNo(woid); if (dt == null || dt.Rows.Count == 0) { //Print("该工单没有需要推送的TrSn信息"); return; } foreach (DataRow dr in dt.Rows) { if (InsertTrSn(dt.Rows[0]["Stock_No"].ToString(), int.Parse(dt.Rows[0]["StockNo_Type"].ToString()), dr["Tr_Sn"].ToString().ToUpper())) { Print(DateTime.Now.ToString() + "推送TrSn=" + dr["Tr_Sn"].ToString() + ", ID=" + dr["ID"].ToString() + "的信息到线边仓成功!"); //ShowHint("推送信息到线边仓成功!", Color.Lime); } else { Print(DateTime.Now.ToString() + "推送TrSn=" + dr["Tr_Sn"].ToString() + ", ID=" + dr["ID"].ToString() + "的信息到线边仓失败!"); //ShowHint("推送信息到线边仓失败!", Color.Red); } } } catch (Exception ex) { Log.Error("推送信息到线边仓异常:" + ex.Message); Print("推送信息到线边仓异常:" + ex.Message); } }
private void ExecuteInput(string str) { try { int splitnum = 0; //分盘数量 int result = 0; bool saveTrSnFlag = false; List <string> listTrSn = new List <string>(); //本地检查并保存五合一条码 if (str.Contains("&")) { if (!CheckMaterialTrSn(str)) { ShowHint("当前输入的五合一条码不满足规则:" + str, Color.Red); return; } listTrSn.Add(str.Split('&')[0]); } else { listTrSn.Add(str); } //远程检查条码类型 if (!CheckBarcode(listTrSn[0].ToUpper(), ref result)) { return; } if (result == 1) //储位 { if (!str.Equals(MyData._lastArrive.locid)) { _allOutCnt = 0; ShowHint("储位号错误,请扫描正确的储位号!", Color.Red); return; } UpdateCnt(MyData.GetStockNo(), MyData._lastArrive.locid); //扫完储位后刷新数量 _lastScanLocId = str; if (MyData._lastArrive.allout.Equals("1")) { if (_allOutCnt == 0) { _allOutCnt++; ShowMessage("再扫一次储位号全盘出料"); ShowQty(); //扫过一次储位后跳到数量 } else { _allOutCnt = 0; try { //保存所有的trSn listTrSn = DBFunc.SearchTrSnFromRInventoryDetailByLocId(_lastScanLocId); if (listTrSn == null || listTrSn.Count == 0) { ShowHint("整盘出库失败,找不到该储位对应的TrSn", Color.Red); return; } } catch (Exception ex) { ShowHint("SearchTrSnFromRInventoryDetailByLocId exception:" + ex.Message, Color.Red); return; } //全盘出料 if (!PartialPickMaterialAllOut(_lastScanLocId, ref result)) { return; } saveTrSnFlag = true; } } else { //高亮数量 ShowQty(); //不是全盘出料时, 扫描储位后转为闪烁数量 ShowMessage("请扫描物料条码"); } } else if (result == 3) //物料编号 { _allOutCnt = 0; if (!_lastScanLocId.Equals(MyData._lastArrive.locid)) { ShowHint("请先扫描储位号!", Color.Red); return; } _allOutCnt = 0; //一盘一盘扫 if (!PartialPickMaterial(_lastScanLocId, listTrSn[0].ToUpper(), ref splitnum, ref result)) { return; } saveTrSnFlag = true; } else { _allOutCnt = 0; } //取料成功 if (saveTrSnFlag) { //如果要分盘 if (result == 3 && listTrSn.Count == 1) { if (splitnum > 0) { string newTrSn = refWebtR_Tr_Sn.Instance.Get_tr_sn_current(1); //获取一个新的trSn if (!CompleteReelSplit(listTrSn[0].ToUpper(), newTrSn, splitnum, ref result)) { return; } SplitTrSn(listTrSn[0].ToUpper(), newTrSn, splitnum); //要推送的trSn是新生成的trSn listTrSn.Clear(); listTrSn.Add(newTrSn); } } //更新货架信息 StartFindShelf(); //保存TrSn SaveTrSn(listTrSn, MyData.GetStockNo(), MyData.GetStockNoType()); UpdateCnt(MyData.GetStockNo(), _lastScanLocId); //全部出库完毕,则过账 if (result == 1) /*料出库成功,且所有站点物料全部出库,自动过账*/ { findFlag = true; //不再刷新 PushTrSnByStockNo(MyData.GetStockNo(), MyData.GetStockNoType()); //SapPick(MyData.GetStockNo(), MyData.GetStockNoType(); ShowHint("出库过账功能暂时关闭!", Color.Lime); } } } catch (Exception ex) { Log.Error("ExecuteInput:" + ex.Message); UpdateCnt(MyData.GetStockNo(), _lastScanLocId); //更新货架信息 StartFindShelf(); } }
//将TrSn推送到线边仓 public bool InsertTrSn(string woid, int stockNoType, string trsn) { string _woid = woid; //需要推送的:发料,超领 //不需要推送的:售出,委外,移库 //不确定的:预留 if (stockNoType == (int)MyData.PickWoType.Delivery || stockNoType == (int)MyData.PickWoType.OutSource || stockNoType == (int)MyData.PickWoType.Transfer) { Print("该工单类型为:" + stockNoType + ", 属于售出,委外,移库中的一种,不需要推送TrSn信息到线边仓"); return(true); } //超领需要去掉最后面两位流水号 if (stockNoType == (int)MyData.PickWoType.Super) { _woid = woid.Substring(0, woid.Length - 2); Print("该工单类型属于超领,去掉工单最后两位流水号,去前为:" + woid + ", 去后为:" + _woid); } else if (stockNoType == (int)MyData.PickWoType.Discard) { _woid = woid.Substring(0, woid.Length - 3); Print("该工单类型属于制程报废,去掉工单最后三流水号,去前为:" + woid + ", 去后为:" + _woid); } try { Trace.WriteLine("Debug:----InsertTrSn Start----"); DataTable dt = new DataTable(); dt.Columns.Add("TR_SN", typeof(string)); dt.Columns.Add("KP_NO", typeof(string)); dt.Columns.Add("KP_DESC", typeof(string)); dt.Columns.Add("VENDER_ID", typeof(string)); dt.Columns.Add("VENDER_NAME", typeof(string)); dt.Columns.Add("DATE_CODE", typeof(string)); dt.Columns.Add("LOT_CODE", typeof(string)); dt.Columns.Add("QTY", typeof(int)); dt.Columns.Add("STOCK_ID", typeof(string)); dt.Columns.Add("LOC_ID", typeof(string)); dt.Columns.Add("STATUS", typeof(string)); dt.Columns.Add("FIFO_DATECODE", typeof(string)); dt.Columns.Add("INVENTORY_DATE", typeof(string)); //通过TrSn查表R_Inventory_Detail DataTable dt1 = new DataTable(); try { dt1 = DBFunc.SearchFromRInventoryDetailByTrSn(trsn); if (dt1 == null || dt1.Rows.Count == 0) { Print("在RInventoryDetail中找不到该TrSn信息:" + trsn); //ShowHint("在RInventoryDetail中找不到该TrSn信息:" + trsn, Color.Red); return(false); } } catch (Exception ex) { //Print("SearchFromRInventoryDetailByTrSn异常:" + ex.Message); ShowHint("SearchFromRInventoryDetailByTrSn异常:" + ex.Message, Color.Red); return(false); } dt1.Rows[0]["KP_DESC"] = "NA"; dt1.Rows[0]["VENDER_NAME"] = "NA"; try { dt1.Rows[0]["KP_DESC"] = DBFunc.SearchDescFromBMaterialByKpNo(dt1.Rows[0]["KP_NO"].ToString()); } catch (Exception ex) { ShowHint("SearchDescFromBMaterialByKpNo异常:" + ex.Message, Color.Red); } //如果R_Inventory_Id中查不到信息,则去B_Material中查询 if (string.IsNullOrEmpty(dt1.Rows[0]["KP_DESC"].ToString().Trim()) || string.IsNullOrEmpty(dt1.Rows[0]["VENDER_NAME"].ToString().Trim())) { //通过KP_NO查表R_Inventory_ID try { DataTable dt2 = DBFunc.SearchFromRInventoryIdByKpNo(dt1.Rows[0]["KP_NO"].ToString()); dt1.Rows[0]["KP_DESC"] = dt2.Rows[0]["material_desc"].ToString(); dt1.Rows[0]["VENDER_NAME"] = dt2.Rows[0]["vender_name"].ToString(); } catch (Exception ex) { Print("SearchFromRInventoryIdByKpNo异常:" + ex.Message); } } dt.Rows.Add( dt1.Rows[0]["TR_SN"], dt1.Rows[0]["KP_NO"], dt1.Rows[0]["KP_DESC"], dt1.Rows[0]["VENDER_ID"], dt1.Rows[0]["VENDER_NAME"], dt1.Rows[0]["DATE_CODE"], dt1.Rows[0]["LOT_CODE"], dt1.Rows[0]["QTY"], dt1.Rows[0]["STOCK_ID"], dt1.Rows[0]["LOC_ID"], dt1.Rows[0]["STATUS"], dt1.Rows[0]["FIFO_DATECODE"], dt1.Rows[0]["INVENTORY_DATE"] ); string result = string.Empty; if (Phicomm_WMS.OUTIO.tR_Tr_Sn.InsertRTrSn(_woid, dt, ref result) || result.Contains("Duplicate")) { DBFunc.UpdateTbInsertTrSn(woid, trsn); return(true); } Print("推送信息到线边仓失败:" + result); //ShowHint("推送失败:" + result, Color.Red); return(false); } catch (Exception ex) { Print("InsertRTrSn:" + ex.Message); ShowHint("InsertRTrSn:" + ex.Message, Color.Red); return(false); } finally { Trace.WriteLine("Debug:----InsertTrSn Stop----"); } }
private void SapReplenish(string woid) { if (string.IsNullOrEmpty(woid)) { return; } int stockNoType = 0; if (!GetStockNoType(woid, ref stockNoType)) { return; } if (stockNoType != 7 && stockNoType != 8) { ShowHint("查询到该工单的类型为:" + stockNoType + ", 异常", Color.Red); return; } try { string result = ""; string remark = ""; string tranno = ""; //根据工单类型,选择movetype的优先级 string[] movetype = null; if (stockNoType == 7) { movetype = new string[] { "311" }; } else if (stockNoType == 8) { movetype = new string[] { "311", "512", "542" }; } //根据movetype优先级来过账 foreach (string mt in movetype) { //查询r_sap_material_shipping数据库 DataTable dt = new DataTable(); try { dt = DBFunc.SearchRSapMaterialShippingByMoveType(woid, mt, "IN"); } catch (Exception ex) { ShowHint("SearchRSapMaterialShippingByMoveType:" + ex.Message, Color.Red); return; } if (dt == null || dt.Rows.Count == 0) { continue; } List <Dictionary <string, object> > listSapUploadItem = new List <Dictionary <string, object> >(); foreach (DataRow dr in dt.Rows) { Dictionary <string, object> dd = new Dictionary <string, object> { { "SHIPPING_NO", woid }, { "material_no", dr["material_no"].ToString() }, { "QTY", dr["SHIP_QTY"].ToString() }, { "PLANT", dr["PLANT"].ToString() }, { "STORE_LOC", dr["STORE_LOC"].ToString() }, { "MOVE_TYPE", mt }, { "MOVE_PLANT", dr["MOVE_PLANT"].ToString() }, { "MOVE_STLOC", dr["MOVE_STLOC"].ToString() } }; listSapUploadItem.Add(dd); } try { //调PI018接口 if (SapHelper.GetPI018(listSapUploadItem, mt, stockNoType, ref remark, ref tranno)) { result += "移动类型:" + mt + "(New), " + remark + "\r\n"; //数据库回写r_sap_material_shipping DBFunc.UpateSapMaterialShipping(dt, remark, tranno, "1", "Y"); } else { result += "移动类型:" + mt + "(New), " + remark + "\r\n"; //数据库回写r_sap_material_shipping DBFunc.UpateSapMaterialShipping(dt, remark, tranno, "0", "N"); ShowHint(result, Color.Red); return; } } catch (Exception ex) { ShowHint("调用PI018接口异常" + ex.Message, Color.Red); return; } } if (!string.IsNullOrEmpty(result)) { ShowHint(result, Color.Lime); } else { ShowHint("本次无数据需要过账!", Color.Red); } } catch (Exception ex) { ShowHint("SAP过账:" + ex.Message, Color.Red); return; } }