ERP软件是提升企业管理效率极具威力的工具,目前国内许多企业都在准备采用ERP软件。笔者通过自己的实际应用和设计经验,介绍一种实用的ERP核心算法,适合国内中小规模企业(3000人以下企业)的使用。
ERP软件是提升企业管理效率极具威力的工具,目前国内许多企业都在准备采用ERP软件。笔者通过自己的实际应用和设计经验,介绍一种实用的ERP核心算法,适合国内中小规模企业(3000人以下企业)的使用。
ERP软件的核心
ERP就是企业资源管理,它的前身是MRP,即物料需求管理,MRP最早应用于生产制造企业,生产制造企业收到各种各样的订单时,单凭手工和经验往往不能很好地解决这样一个问题: 手头物料够不够用?什么时候需要采购什么物料?采购量为多少合适?而MRP可以很好地计算出物料需求,从而帮助企业管理人员做好物料的采购准备工作,既能保证生产不缺料,又不会积压大量的库存。物的流动与积压往往伴随着资金的流动与积压,所以后来MRP中加进了财务模块,在财务上对物流与库存进行有效的管理,这就是MRPII,即第二代的MRP。将MRP管理的思想发挥得最为极至的当数日本的丰田汽车公司,丰田倡导的"零库存","JIT"(及时供应)的先进管理概念在世界上备受推崇。零库存就是要尽可能地降低库存,因为任何库存都意味着资金的积压。而JIT(及时供应)就是说企业在最恰当的时候收到恰当的物料,既不缺料,也不会积压。
现代企业的客户和供应商的地域范围都大大扩展了,不少企业在全国乃至全世界范围进行销售和采购,这样物料流动的成本是很高的。对此笔者就有切身的体会,笔者几年前在广东一家外资企业做生产管理工作,有一次接到一张重要的订单,开始生产后才发现,生产过程必需的铜线很快就要断料了,这种铜线是我国台湾省供应的,平常都提前几个月大批订货,从台湾海运过来。为了让生产线不停工(生产线停工的成本也很高的),只好让台湾的供应商马上空运(经香港中转)几轴铜线过来应急,这样平白多花了近万元的空运费。
当前,制造企业面临着更大的挑战,因为个性化的时代需求意味着更多的款式,更小的批量,这样在物料的采购和生产的管理上难度都比大批量的制造难得多。十年八年不变地只生产单一的产品已经成为历史,现在就算比竞争对手慢一步推出新产品也会给企业带来不少损失。如在中国移动通信市场上,摩托罗拉的大块头模拟手机曾经独步天下,风光一时,后来爱立信公司推出了小巧玲珑的数字手机,一下子成为了市场的宠儿,后来几年,爱立信公司的手机款式一直没有多少改变,而诺基亚却不断地推出新潮的款式,得到市场的认可,迅速成为手机市场的新宠。
MRPII确实极大地帮助了企业应付这些挑战,不过它自己也需要变革以应付更多的挑战。企业的管理主要包括:人(人力资源)、财(资金)、物(物料、产品和机器设备、厂房等),MRPII软件的管理范围还没有包括全部企业管理资源。ERP软件进一步扩大了MRPII软件的管理范围,它把MRP中"物"的范畴扩大到企业所有可管理的资源,如人力资源,机器设备能力等等。
ERP最核心的功能是帮助企业管理好可用资源,这其中最重要的当然还是财(资金)、物(物料、产品)。
物料清单(BOM)
所有的ERP软件都离不开物料清单(BOM),BOM是所有ERP运算的基础,对资源的管理就是在BOM的基础上做BOM的展开运算。BOM是产品的配方,它列出制造某一种产品所需要的所有物料的清单。每个企业生产的产品不同,所用的材料不同,因而BOM是不同的。ERP软件能否成功实施,在很大程度上取决于能否整理出本企业的一个准确的BOM。在整理BOM时,需要分轻重,次要的无关紧要的物料可以不包括进去,这样就能抓住关键。
当有了一个产品配方在手时,就几乎等于拥有了解决企业资源管理问题的金钥匙,这样当收到了订单,或是按销售预测制定了生产计划后,就能计算反推出: 手头物料够不够用?什么时候需要采购什么物料?采购量为多少合适?在ERP软件中,"物"的范畴扩大到企业所有可管理的资源,如人力资源、机器设备能力等等,这样就能计算反推出:手头人力资源、机器设备能力够不够用?资金够不够用?能不能接这张订单?什么时候需要什么资源?多少量最合适?在ERP软件中,产品配方中也可以包括制造某一种产品所需要的人力资源、机器设备能力、资金等资源的清单。从这里也可以看出,在工程项目管理上,ERP也可以大展身手。所以说准备好本企业的一个准确的BOM已经成功了一半了。
不同的ERP系统采用不同的BOM存储结构,本文介绍的算法采用单层BOM存储结构,它的好处是简单、易用、扩展性好,可以实现无限的层次。图1是一个简单的BOM结构示意图。
这样的结构的另一个优点是BOM表的输入与维护相当容易,用户用Excel就可以准备BOM表了,比较方便。材料用量和材料提前准备日数是BOM的两个重要参数,它们分别从量和时间上控制实现"零库存"、"JIT"(及时供应)的最高目标。
有一点要注意到的是,现在所说的产品、材料是包括了所有资源的,而且产品与材料之间只是相对而言的。这样所有的资源(产品、物料及其他资源)都放到了一个数据库中,简化了管理,这也是ERP 带来的新概念。这样企业的BOM核心部分只有两个数据库,一个是资源库,它包括了所有的资源(产品、物料及其他资源);另外一个就是材料构成表(BOM)。这样的好处在于:利用BOM做展开时就相当方便了,可以方便地扩展应用的范围,从基本的物料需求,到人力、机器设备等其他资源,再到资金、项目进度管理,而惟一需要做的就是将它们放到资源库里,所以这种结构能充分地展示ERP的优点。
本算法采用单层BOM存储结构的另外一个好处是:用户使用中很方便,不需要对资源(产品、物料及其他资源)做任何特别编码,也不需要理会层次的问题。这使得ERP的实施变得更简单,原来可能要花几个月甚至大半年来准备BOM,现在只要一两周可能已足够了。这对许多中国企业来说可能是非常重要的,因为资金雄厚的欧美大企业可以花上1~2年时间实施ERP系统,而许多中国企业整天都面临着生存发展的严峻问题,它们更需要快速的立杆见影的东西来提升自己的竞争力。
这种结构的另外一个优点是能够比较好地处理替代件问题。替代件问题是困绕MRP/ERP的老大难问题,当一个产品的生产既可以用A部件,也可以用B、C、D等部件时,电脑处理起来就会很费劲。而采用单一资源库以后,可以将替代件归类为一个虚拟类,并建立一个类,而BOM只引用该类。
同样,采用单一结构还能很好地简化BOM表,因为在许多企业,如鞋厂,不同尺码的鞋的BOM 差别往往在用量的多少,按比例地增加或减少,或大部分是相同的,而差别只在一两样配件上。单一结构就能很容易实现虚拟中间件,如一个鞋厂有10000种款式,每种鞋的物料有50种,如果单纯的相乘,就是10000×50 =500000种物料配方,而将各种款式分类后,通过增加一些虚拟中间件后,如A款鞋公用件,那么最终需要的物料配方可能不到20000就足够了,给实际应用和计算带来很大方便。
展开计算的核心算法
当BOM准备好以后,就可以进行ERP展开计算了,这里介绍一种展开算法。
算法的具体实现步骤是:
1. 清空临时数据库;
2. 从客户订单数据库读入实际订单或销售预测,插入到临时数据库中,这就是待展开的需求;
3. 从临时数据库读出需求,同时读取材料构成表(BOM)中相应的物料需求项,并插入到临时数据库中,这就是展开的子层需求;
4. 重复3,直到算完所有的层,或者算到用户指定的层(应该允许用户选择,特别是当层次数很多时);
5. 从库存数据库读入手头的库存量,插入到临时数据库中,这就是库存量;
6. 从生产┑ナ菘舛寥胧滞返亩┑ィ迦氲搅偈笔菘庵校饩褪窃谥屏?
7. 从采购单数据库读入手头的采购单,插入到临时数据库中,这就是在购量。
部分关键代码如下:
'下面展开计算,从顶层到最底层
DoNextLevel:
MySqLcalling = "select * from ERPTemp where 状态<>1 order by 产品编号"
If Myrs.State = 1 Then Myrs.Close
Set Myrs = Nothing
Myrs.Open MySqLcalling, MyDE, adOpenStatic, adLockBatchOptimistic
Myrs.MoveFirst
产品编号 = -1
Do Until Myrs.EOF
If Myrs("状态") = 2 Then
Myrs("状态") = 0
GoTo ReachNewRecord
End If
If 产品编号<>Myrs("产品编号") Then
产品编号 = Myrs("产品编号")
MysqlERP ="select 产品编号,材料编号,材料用量,材料提前准备日数 from产品材料构成表where 产品编号="& Myrs("产品编号")
If MyDE.State= 0 Then MyDE
.Open
If MyRsERP.State = 1 Then MyRsERP.Close
MyRsERP.Open MysqlERP,
MyDE, adOpenForwardOnly, adLockReadOnly
End If
If Not MyRsERP.BOF Then
MyRsERP.MoveFirst
Do Until MyRsERP.EOF
TheNeededMonth = DateDiff("m", Now, DateAdd("d", -MyRsERP("材料提前准备日数"), Now()))
If TheNeededMonth< 1 Then TheNeededMonth = 0
If TheNeededMonth>12 Then TheNeededMonth = 12
If ERPbyWeek Then
'by week
TheNeededMonth = DateDiff("WW", Now, DateAdd("d", -MyRsERP("材料提前准备日数"), Now()))
If TheNeededMonth< 1 Then TheNeededMonth = 0
If TheNeededMonth > 52 Then TheNeededMonth = 52
End If
Myrsbookmark = Myrs.Bookmark
Myrs数量 = Myrs("数量")
Myrs.AddNew
Myrs("分组序号") = 4
Myrs("分组") = "需求量"
Myrs("状态") ="2"
Myrs("产品编号")=
MyRsERP("材料编号")
Myrs("数量") = MyRsERP("材料用量") * Myrs数量
Myrs("日期") = DateAdd("d", -MyRsERP("材料提前准备日数"), Now())
Myrs("月份") =
TheNeededMonth
Myrs.Bookmark = Myrsbookmark
MyRsERP.MoveNext
Loop
Else
Myrs("状态") = 1
End If
Myrs("状态") = 1
ReachNewRecord:
Myrs.MoveNext
Loop
MyRsERP.Close
Myrs.UpdateBatch
Myrs.Close
ERPlevel = ERPlevel + 1
DoEvents
If ERPStop Then GoTo ErrorHandle
If CalcLevel = -1 Then
GoTo DoNextLevel
Else
If ERPlevel< CalcLevel Then GoTo DoNextLevel
End If
Else
'OK, 结束
End If
大家可以注意到,由于上面采用了单层BOM存储结构,所以展开计算的算法就相当简单了,由于不需要特别的产品编码,BOM的输入与维护也非常简单。另外,大家还可以注意到,算法完全不用递归嵌套,因而可以加快运行速度。
展开计算完毕以后,就可以利用交叉表调出临时数据库中的数据,进行浏览、分析和打印了。这样需求量与供应量(库存量、在制量、在购量)就摆在了一起进行比较,管理者就能够很直观、清楚地看出各种资源现有多少,需求量有多少;管理人员可以据此做采购和生产的计划。而计划可以是主计划,也可以是细计划,取决于用户选定要展开到哪层,如果展开所有的层,那么所有的细计划,如车间计划,每个车间的人力、设备安排都会被包括在内。
本算法采用Access数据库,在VB 6.0上调试实现,由于采用了特别的算法设计,使得既可以实现无限的层次,又不用递归嵌套。对于国内中小规模企业(3000人以下,产品、材料条目总数在50000以下)来说,利用Access开发的小ERP系统可以很好地实现企业的现代化管理,应付日常的管理需求。
ERP只是一种企业资源计算器
ERP是一种有效的管理工具,可以对企业内部的资源进行有效管理,明显减少积压库存,加快资金周转率,降低成本。在当前激烈的市场竞争环境下,谁能比别人以更低的成本生产出更美更好的产品,谁就能成为市场的领导者。美国石油大王洛克菲勒成功最根本的原因是他在成本管理上严密精细。他能准确地查阅并分析下面呈报上来的开支和成本,销售及损益数据,并以此考核每个分厂的工作。
现实生活中,企业管理层,特别是实际操作的一线主管,很少会每个人都有洛克菲勒那样的数字分析天分,而且不少企业比油厂复杂得多,所以ERP等工具就像是一种企业资源计算器,如果企业严格按它的规程去做,那么它就能比洛克菲勒还要精确地分析处理数据。
如果洛克菲勒今天还在世,他一定也会借助于强大的电脑来管理庞大的业务。不过工具毕竟是工具,最智慧的还是应用它的人。如果一个企业家有洛克菲勒那样的经营智慧,就算用手工算,他也肯定是按照着这种管理理念在卓有成效地工作。
所以最智慧的不是机器而是应用它的人,ERP只是一种企业资源计算器,就像会计人员手里的算盘、计算器一样,只是一种工具。
总 结
ERP的实施中,最重要的一点在于一定要把握住关键,而忽略一些次要的因素,这对各方面的管理与规范相差甚远的国内企业来说尤为关键。这样抓住了本质以后,实施的成功就是必然的了。另外必须要注意到,ERP软件只是一种工具而已,企业管理应用者的智慧有多高,软件应用的水平就有多高。100万元的ERP软件和1万元的ERP软件的差别,除了功能和可靠性外,还有很重要的一点在于前者通过具体实施的过程,将一套很完善的管理方法和管理理念灌输给企业管理应用者,这也就是人们常说的知识的价值。