基于Oracle EBS的低成本的原料FIFO解决方案
2013-04-13常州森萨塔科技有限公司
常州森萨塔科技有限公司 张 锐
江南银行 王 娟
在现代制造企业中,为了增加原材料的流动性,防止呆、废料的发生,企业都希望拥有原材料先进先出(FIFO:first in first out)的特性。这对于保证原材料质量,提高库存周转率,具有重要意义。对于业内领先的制造企业,FIFO和批次控制的实现也是提升其管理水平,赢得行业中优质客户的重要一环,关系到企业的重要利益。
目前ORACLE EBS系统仅仅对存货计价方式集成了FIFO的方法,而对于库房中的实物则没有这方面的有效支持[1]。大多企业仍旧依靠粘贴不同颜色的季节性标签或者敲检验日期章的方式进行手工管理,结果在发料时库房人员往往难以寻找到最早入库的原料;也有部分企业花费巨资购买第三方库存管理系统或者进行ERP本身的客制化。虽然效果不错但花费不斐,并且往往需要再造现有流程,具有一定的风险;还有部分企业建立独立的数据库和对应系统,监控原料的流转,但这种方案,库房人员需要掌握多套系统,多个系统间易出现数据的不一致。使得库房人员需要花费更多的精力在多个系统中进行盘点,极大增加了库房的工作量。本文深入研究了Oracle EBS系统(下文简称EBS系统)INV模块的底层特性和库房中原料流转的所有流程。创造性地提出了依附于现有ERP系统,在报表和条码综合辅助下实现原料库房FIFO的解决方案。
1.问题分析
1.1 项目目标及解决重点
原本车间使用传统的粘贴颜色标签的方式来标识原材料的大致入库月份,通过库房人员的记忆来确定入库最早的原料位置,此方式已不能适应新客户对于原料库存精益管理的要求。遂拟定本项目,项目目标如下:①制定批次号的规则和实现原材料的可追溯性;②无论原材料在库房中如何流转,系统始终可以保证最先入库的原料最先发料;③发料时库房人员可获得原料各批次的具体位置;④为降低风险与工作量,基于现有系统,不另建外部数据源。
表1 某原料库存事务操作的历史纪录
表2 批次分布报表
要完成以上目标,项目中有如下重点问题:
1)确定批次号格式及在系统中的存储位置,从而为FIFO和追溯性的实现打下基础。
2)建立批次号与对应原料实物的关系,以实现基于批次号顺序的自动寻料。自动寻料将避免人工寻料和判断的不准确性,是实现FIFO的重要保障
3)由于EBS不提供有效的批次管理功能,即实际使用中EBS只关心收、发原料的数量和货位,无法根据我们标示的批次号收发原料,故需寻找方法使EBS系统所有流程中按批次的原料出入与实际的原料接收/消耗的批次一致。
其中第三条牵涉EBS底层逻辑,且牵涉所有库房流转流程,是方案要解决的重点问题。以下详细分析上述三个问题。
1.2 原料库房的流程调查和批次号的格式确定及自动寻料的设计思路
若要实现原料流转的过程追踪,必须确定批次号,而批次号要实现FIFO必须满足以下三个条件:
1)EBS系统中需要记录每批原材料的唯一标识,标识本身能反映前后关系
2)在库房流转的所有流程中统一使用这个标识来进行追踪
3)此标识必须要粘贴在每批原料的箱子上,以实现系统记录到物理标识的印射。
日期可以直观地表示批次的前后关系,但由于某原料在一天内接收可能不止一次,一天内接收的物料也不止一种,为了满足唯一性,批次号格式应为:料号+入库时间+流水号。因为批次号中记录了入库的日期,一旦在系统中将在库原料和数量与批次号建立起对应关系,则可以找到方法将某原料的所有库存数据按照批次号中的入库日期排序,从而建立起库房中所有原料的批次分布报表,也就实现了自动寻料。
1.3 EBS系统原料消耗顺序与人工发料顺序一致性的控制
通过上述分析,已经可以做到基于批次号条码的的原料流转追踪,以及基于批次号的自动寻料。虽然物理上,库房人员可以根据报表的内容,正确的按照批次号的顺序进行发料,但ERP系统一定会按照我们定义的批次号的顺序进行发料吗?答案是否定的。因为参考字段是用户自己扩展的,作备注使用,任何一个ERP系统在没有客制化之前不可能为这些字段给予事务操作的逻辑。所以如何使系统按照我们的定义来消耗原料就成了本项目的核心。
通过挖掘资料,发现在数据库中,表MTL_ONHAND_QUANTITIES(库存原料数量表)会记录下现有原料分别转移进这个货位(Location)的时间(不是进入仓库的时间),而且其消耗的顺序也会依照进入货位的时间来进行,也就是说,从仓库的某个货位来看,某一个原料先转移入这个货位的一定会先出这个货位[2]。但这个定义和原料FIFO还是有一定差异的,并有可能形成实物现有量与系统中现有量的不一致。如下示例,对同一个料(13427-1),假设之前的现有量为0。从6月10日起分别4次接收入两个货位A和B(此时入库时间和转入货位的转入时间一致)。并在6月16日把货位B上的原料转移到货位A上。至此所有此原料的库存全部在A货位中,共3500个(见表1)。
表3 EBS内部发料序列表
图1 原料库房FIFO流程总图
若此时需要发料1200 PCE。我们根据批次分布报表的内容(表2),按入库时间进行排序。所以消耗的将是货位A中10日入库的1000个和11日入库的200个。但是EBS系统中却是依照转移入货位的时间自动进行消耗的(表3),消耗的将是10日入库的1000个和12日入库的200个。这时货位中的总数量虽然与系统记录的总数量一致,但系统中各批次对应的数量与实际将完全不符。则以后的发料工作则难以再按照批次分布报表数量进行发料。
总结原因,两张表的不一致,是由于其中的数据排序方式的不一致造成的。如果转入之前,先检查货位A上最大的转入时间是15号,库房人员只转入库日期在15号之后的原材料,则无论按转入时间排序还是按入库时间排序就都一致。根据这一思想,当做货位转移时,我们把此批原料的转入货位分成可转入和不可转入,假如某原料n的入库时间用Ti(n)表示,某货位A中此原料的转入时间用Tt(n,A)表示,则当Ti(n)<=Max(Tt(n,A))则A为不可转入货位,除了这些货位以外的其他货位(包括空货位)为可转入货位。当从某货位转出某原料的时候,应当先挑选可转入货位,再做转入的动作。(可转入货位的寻找可以根据以上逻辑自定义实时报表实现)。
另外因为原料转出时等同于在原货位消耗原料,所以本着FIFO的原则,也应该查询批次分布报表(表2),找到原货位中最早入库的原料,使之先转出。这样也就实现了货位转移过程中原料批次流转顺序与系统记录顺序的一致。
这里只是分析了货位转移这样一种流程,对库房中其他类型的流程是否也适用呢?通过调查总结和查阅资料,原材料流转过程中含有如下的流程[3]:
(1)发料流程(原材料库从仓库发送至生产线或委外加工供应商);
(2)入库流程(内部订单或采购订单的接收入库);
(3)线上退料流程(生产线退回至原材料仓库);
(4)货位(Location)转移流程(原料仓库中不同货位之间的转移);
(5)盘赢流程;
(6)盘亏流程。
而从货位的角度看,其操作有两大类:消耗和积累。
所以库房中的上述六个流程针对货位的动作可以分为三类:
1)只涉及某一货位积累的流程:盘赢/入库/生产线退料;
2)只涉及某一货位消耗的流程:发料/盘亏;
3)涉及一个货位的积累和另一个货位的消耗的流程:货位转移。
对第一类。盘赢和生产线退料流程类似。由于只涉及转入,只需在转入前寻找到可转入货位,并转入即可;对于入库的流程更简单,因为入库时间一定大于所有的在库原料的转入时间。故所有货位都是可转入货位
对第二类。发料时,由于产线线上只关心足够数量的原料,故只需要依据批次分布报表找到最早入库的原料,进行发料即可;对于盘亏,可能需要盘亏某批次的原料,因为盘亏属于消耗动作。系统自动会消耗某货位中最早的入库材料,故盘亏前应先将比想要盘亏批次更早早的原料转移,再进行盘亏动作。
对第三类。货位转移,前文已经解释此处不再累述。
综上所述,无论原料在原料库房中如何流转,只要转入的是我们定义的可转入货位,取出(消耗)时查询我们批次分布报表中最前面的记录,就一定可以实现系统中批次数据和实物批次数据的一致。
2.解决方案的实现
通过上述的分析,基本明晰了实现的手段和要点。以下简述解决方案。
2.1 批次号的存储及批次分布报表的实现
EBS在做库房的所有流程事务(发料/入库/线上退料/货位转移/盘点)处理时,都存在一个备注字段,可以用来存储批次号。在产品入库的时候可以要求库房人员打印和粘贴批次号标签,并在所有库房流转事务操作过程中均扫描输入这个批次号进入EBS系统的备注字段,从而也就实现了原料在所有流程中对批次号的追踪。但批次分布报表需要的是库存中原料及数量与批次号的对应,不是事物操作中原料与批次号的对应,如何进行这种转化呢?通过翻阅资料发现,EBS对于在货位中的材料会提供转入本货位的对应事务操作ID号,按照这个号码可以寻找到每次事务操作的备注字段,即批次号。由于存在这样一种关联,也就可以找到方法来制作批次分布报表(见表2),列出某原材料的各个批次分别在哪些货位中,有多少数量。库房人员就可以根据报表,一目了然的得知应该从哪个货位取哪几个最早批次的料,以及对应的数量,从而实现了自动寻料。自动寻料是库房人员正确依据FIFO原则发料的基础。
2.2 原料库房中的批次控制总流程
原料入库:在入库时,由于本批次的接收时间大于所有货位中原料的最大转入时间,故所有的货位都是可转入货位,库房人员可随意挑选货位做入库操作,操作时输入批次号。库房人员会在条码系统中打印出批次号并粘贴于接收的箱子上。
盘赢/线上退料:这两个流程大体相似,欲转入其他货位前,先从箱子上寻找到批次号;通过在报表中输入此批次号,报表给出可转入货位(包括空货位),将原材料转入。并在备注字段中扫描输入批次号。(在EBS中做相关的事务操作时在备注字段中输入批次号以使系统可以方便的找到每个原料的接收时间)。
货位转移:转入过程与盘赢的流程相似,但在转出原先货位时,必须先查询批次分布报表,转出本货位中最早转入的原料。同样在做相关的事务操作时需在备注字段中输入批次号
盘亏:盘亏与出库不同。出库始终发出(消耗)最早入库的料,而盘亏有可能要消耗的是某个批次的料。故先查询批次分布报表,转移出批次号早于欲盘点批次的原材料。然后在此货位中作盘亏处理。
出库:由于上述每个流程都将批次号扫描至备注字段中,故系统中可以容易到找到所有在库材料的的批次号以及货位和对应的数量。形成批次分布报表。并且由于定义了可转入货位和不可转入货位,这样也就保证了Oracle系统在做原料出库(消耗)的时候是按照原料入库的前后顺序排列的。库房人员只需查询批次分布报表并按照报表中的数据一笔笔出库即可,图1为原料库房FIFO流程总图。
3.结束语
本文深入挖掘了Oracle EBS INV模块的底层逻辑,并在充分利用其特性的基础上创新的提出了利用原有系统,结合条码和报表实现FIFO的敏捷解决方案。相比较其他解决方案,此方案仅用了不到两个月的时间就完成了调试上线。具有开发量小,简单易行,成本低的特点。由于此方案仍然基于原有ERP,不需要建立新的系统,避免了多数据源带来的数据不一致和流程再造的风险。经过4个月的运行验证,此解决方案运行正常,表现出了良好的实用性。
[1]许贤琳,曹健.ERP中动态库存成本核算算法的研究[J].计算机工程与应用,2006,42(34):199-202.
[2]Tyra Crockett.Oracle® Warehouse Management Implementation Guide[M].Release 12.US:Oracle,2006:126.
[3]马东博.制造企业的仓库设计[J].物流科技,2005,28(12):25-27.