有源单批号拣货按最小包装量倍数拣货原创
3人赞赏了该文章
1,200次浏览
编辑于2021年12月17日 11:02:49
一、【业务需求】
商品的单位是基本单位包,库存单位也是包;下单时最小包装数为25;销售出库根据先进先出拣货,可能会存在A批次库存 10 拣货10,B批次库存30 拣货15的情况,可否控制 先进先出拣货根据最小包装数去拣货;例如:订单数量下单数量 50包 ;若C批次库存 36包; 拣货可检25包,D批次 库存26 包,拣货拣25包;即按批次按最小包装的倍数拣货 |
二、【功能分析】
二次开发步骤:
1.编写插件继承批号拣货插件基类;
2.根据业务需要重载对应事件RegexUseableInvData,该事件用于处理拣货前处理获取的即时库存数据, 获取到对应物料的【最小包装量】设置,设置批号拣货返回的数量,不直接取即时库存数量,而是:向下取整(即时库存量/最小包装量)*最小包装量
using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Permission.Objects; using Kingdee.BOS.Util; using Kingdee.K3.SCM.App.Core.ConvertBusinessService; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Kingdee.K3.SCM.App.Stock.CustomizePlugIn { public class LotPickIncreaseQtyFilter : AbstractLotPickPlugIn { public override void RegexUseableInvData(Dictionary<long, DataTable> dctinvDatas) { base.RegexUseableInvData(dctinvDatas); foreach (var item in dctinvDatas) { // 获取最小包装量 string stockSql = string.Format(@"SELECT FINCREASEQTY FROM t_BD_MaterialPlan WHERE FINCREASEQTY != 0 and FMATERIALID = {0}", item.Key); using (IDataReader dataReader = DBUtils.ExecuteReader(this.Ctx, stockSql)) { while (dataReader.Read()) { decimal increaseQty = Convert.ToDecimal(dataReader["FINCREASEQTY"]); int count = item.Value.Rows.Count; var invTable = item.Value; for (var i = 0; i < count; i++) { DataRow row = invTable.Rows[i]; decimal baseQty = Convert.ToDecimal(row["FBASEQTY"]); baseQty = Math.Floor(baseQty / increaseQty) * increaseQty; // 批号拣货返回的数量,不是直接取即时库存数量,而是:向下取整(即时库存量/最小包装量)*最小包装量 row["FBASEQTY"] = baseQty; } } dataReader.Close(); } } } } }
3.注册插件至对应服务配置界面。
以上二开仅供参考,是否能够达到业务要求有待实际账套业务数据验证!
赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读