Esempio n. 1
0
        //将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);
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        //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);
            }
        }
Esempio n. 4
0
        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();
            }
        }
Esempio n. 5
0
        //将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----");
            }
        }
Esempio n. 6
0
        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;
            }
        }