有源单批号拣货按最小包装量倍数拣货原创
金蝶云社区-邱育华
邱育华
2人赞赏了该文章 925次浏览 未经作者许可,禁止转载编辑于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.注册插件至对应服务配置界面。



以上二开仅供参考,是否能够达到业务要求有待实际账套业务数据验证!

赞 2