白码ERP快速实现库存不足时自动生成采购单功能

创建生产订单时,系统自动根据产品所需物料库存是否充足,如有物料库存不足,自动生成对应的采购订单;

前期准备:

需创建产品、物料、BOM、生产订单、生产订单明细、需求物料、采购订单、采购订单明细数据表,这里就用最简单的数据表进行演示,实际情况可按照需求添加属性;

产品

物料

BOM

生产订单

生产订单明细

需求物料

采购订单

采购订单明细数据表

数据表关系图

*数据表关系图

实现步骤:

新建一个功能,命名为“新建生产订单”;

①第一步,新增生产订单,使用新增数据的步骤,根据实际情况调整属性的设置;

新建生产订单功能

设置生产订单属性

②第二步,新增生产订单明细,使用新增集合的步骤,填写需要生产的产品和对应的生产量;

新增生产订单明细

使用

③第三步,计算第二步所有产品所需物料的合计值,录入到“需求物料”表里,这里涉及多条数据的合并去重,需要使用编程的步骤;

需求物料

需求物料步骤

async function runProcess($model = model, $plugin = plugin, $params) {

    let list = $params.list;//生产订单明细

    let orderid = $params.order._id;//生产订单

    let require_list = [];

    /*物料需求列表

        [

            {

                id:"物料id",

                demand:"总需求数量"

            }

        ]

    */

    for (let i = 0; i < list.length; i++) {//遍历生产订单明细collection

        let quantity = list[i]["5fd1cc619f7ebc78933d9a2b"];//计划生产量

        //查询产品的BOM列表

        let bom_list = await $plugin.data.queryData("5fd1cb6c04284278923ac9a7", {

            "5fd1cb8404284278923ac9a8": list[i]["5fd1cc429f7ebc78933d9a2a"]

        });

        for (let j = 0; j < bom_list.length; j++) {//遍历bom列表

            //查询物料需求列表中是否已有物料

            let itemIndex = require_list.findIndex((item) => {

                return item.id == bom_list[j]["5fd1cb9204284278923ac9a9"];

            });

            if (itemIndex > 0) {

                //物料重复,去重,增加数量

                require_list[itemIndex]["demand"] =  new Number(require_list[itemIndex]["demand"]) + new Number(quantity) * new Number(bom_list[j]["5fd1cb9804284278923ac9aa"]);//产品计划生产量*物料用量

            } else {

                //新物料

                require_list.push({

                    id: bom_list[j]["5fd1cb9204284278923ac9a9"],//物料id

                    demand: new Number(quantity) * new Number(bom_list[j]["5fd1cb9804284278923ac9aa"])//产品计划生产量*物料用量

                });

            }

        }

    }

    for (let i = 0; i < require_list.length; i++) {//去重完后,录入到需求物料表

        let form = {

            "5fd1cc8d04284278923ac9ad":orderid,//关联生产订单

            "5fd1ccad9f7ebc78933d9a2c":require_list[i]["id"],//物料

            "5fd1ccb39f7ebc78933d9a2d":require_list[i]["demand"]//总需求数量

        };

        //保存数据

        await $plugin.data.saveData("5fd1cc8204284278923ac9ac",form);

    }

}

④第四步,获取上一步新增的需求物料集合,使用获取集合的步骤;

获取物料

⑤第五步,计算缺货数,使用关联获取集合的步骤,获取第四步进行计算,其中缺货数属性设为物料的需求数量-库存数,且隐藏此步骤;

订单

⑥第六步,判断是否有需求物料的缺货数小于或等于0,使用条件判断的步骤;

订单

订单

⑦如果判断结果为假,即存在缺货数大于0的物料,则需要生成采购订单,第七步先获取缺货数大于0的物料需求列表,同样使用获取集合的步骤,但缺货数的属性需要设置筛选条件:缺货数大于0;

订单

订单

⑧第八步,新增采购订单,使用新增数据的步骤,且隐藏步骤;

订单

订单

⑨第九步,使用第七步数据进行新增采购订单的明细,使用新增集合的步骤,其中$关联需要设为第七步,即第九步新增的数据来源,物料和数量分别对应需求物料表的物料和缺货数,隐藏步骤;

订单

订单

订单

⑩功能已做好,测试结果如下

测试结果

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值