ofbiz 业务代码剖析 (1)

ofbiz 业务代码剖析

1 制造模块剖析

mrp算法

为了方便说明,给一个最简单的生产模式

m1-p1

也就是由原材料m1直接加工生产p1,比例是1:1

我们设m1的库存量是1000,最低库存200,采购提前期6天,p1的库存是900个,最低库存100

现在接到一个订单,2月2号要2000个p1发运(ofbiz是按照发运期来算提前量的),该怎么算呢

很显然,我们立刻得出,应该生产p1 1200个

但我们的实际生产量并不一定是1200,我们应该先找一下已经安排下的p1的生产单,看有多少

好,找到一个生产单,1月30号生产完毕300个,这样,我们只需要生产900个p1就能满足2月2号的需求

那什么时候开始生产,就需要计算制造提前期,ofbiz是按照工艺路线*数量来计算的,比设一个固定的制造提前期要精确的多,经过计算,需要1月26号开始生产

为了生产p1我们需要多少m1呢,如果不考虑损耗率,应该是900个,现在m1的库存是1000个,能满足需要么

不能,因为m1的最低库存是200个,也就是最多只有800个m1可用,那我们是不是还需要采购100个

和生产一样,先要查一下有没有在1月26号前到货的采购订单,这次发现没有,那我们就要给供应商发一个采购订单,订购600个,为什么是600个

这里有一个采购批量的概念,也就是说采购不是你需要多少就订多少,供应商有一个批量规则,比如m1的供应商的要求是每次订购必须是一箱,一箱是多少呢,600个

ofbiz并没有给出采购批量的算法,只是给出了接口,保证了最大的灵活性,因为实际中,对每一个采购订单计算批量可能导致过大的采购量

比如,现在mrp运算得出 1月26号采购到货100个m1,2月2号采购到货300个m1,2月6号采购到货200个m1,批量是600

在实际中采购员会把数量汇总,给供应商发出一张1月26号到货的采购600个m1的订单,这张订单应该提前6天发出去,因为采购提前期是6天,考虑到日历的休息日,实际应该是提前6个工作日

如果按每张订单分别来,同时考虑批量,就会是1月26号采购600个m1,2月2号采购600个m1,2月6号采购600个m1

以上流程分析清楚了,mrp算法就是一个大循环,先把需求按产品排序,然后按llc循环,计算实际生产或采购需求量,对于需要生产和采购的就生成采购建议和生产建议

代码里也有一些小技巧决定了运行的速度,要避免使用递归函数,一遍循环就要全部算完

制造模块还有一些比较细致的设计,比如考虑产品属性,考虑产品配置bom(这两个功能很重要),考虑虚拟件,引入非库存件的概念

以库存件和非库存件的概念分析一下

我们考虑如下的生产模式

m1-p1_2-p1_1-p1

由原材料m1加工成半成品p1_2,再由p1_2加工成p1_1,最后由p1_1加工成成品p1

按很多erp的设计,先是领料m1,生产p1_2,然后将生产出来的p1_2入库,然后领料p1_2,生产p1_1,将生产出来的p1_1入库,然后领料p1_1,生产p1

看上去不是很严谨么

问题在与,在车间的实际生产中,生产出p1_2,就直接拿去生产p1_1了,根本不会做什么入库再领料的操作,不然,一天要输多少单据,如果所有半成品都严格要求做要出入库操作的话,就会不符合实际的车间生产情况

所以,非库存件是一个非常好的设计,我们把p1_2和p1_1设置成非库存件,可以很好的适应实际的生产管理的需要

当然,还有其他需要考虑的,比如,如果非库存件生产有结余要入库也需要处理

猜你喜欢

转载自lijianhua1205.iteye.com/blog/1942128