一、EBS主数据概述(Master Data)
一个有趣的现象是,与SAP相比不同,ORACLE EBS系统中并没有明确的所谓“主数据”(Master Data)概念,ORACLE应用产品官方文档(中英文)中也几乎找不到这个词组。因此这里要讨论的所谓“主数据”,主要是基于业务管理与系统应用层面而言,具有全局性、重要性的那些基础业务数据,诸如物料、供应商、客户等等。
之所以会出现上述现象,推测是和ORACLE产品的发展历史有一定关系,或许ORACLE早先确实没有意识到物料、供应商及客户等等业务数据,在系统管理与业务实践方面具有怎样的特殊性,以至于如今许多初学者会觉得奇怪:EBS系统的最初设计,物料是在INV模块中定义的,供应商是在AP模块中定义的,客户是在AR模块中定义的。而不是采取更合理的系统应用架构设计:主数据有专门的定义与管理应用功能,作为“服务”提供给相关应用模块调用(即类似所谓“SOA”架构)。
显然,ORACLE后来意识到了这个问题,并开始逐步在系统的规划设计方面做调整。针对“客户”等主数据管理,于2001年首次提出了所谓“TCA架构”(Trading community Architecture),并首先将“客户数据”独立出来,作为一个向其他相关模块提供调用服务(SOA)的基础应用。不过,迄今为止,对于“供应商”与“物料”,目前表面看来与过去相比几乎没有什么变化,但相信随着SOA的发展,系统以后也会做出调整完善。
从企业管理实践的需求角度来看,对于主数据的范畴,不同企业的理解可能有一定差别,例如有些企业将BOM也包括在主数据之内。本文以下则重点讨论无可争议的三个常用主数据:物料、供应商与客户。这三个主数据都有一个共同的系统使用特点:跨组织的全局性。而对于BOM数据,尽管在企业实际管理工作中,可能具有一定的全局性特点(例如不同工厂生产同样产品),但从系统应用角度来看,BOM是严格按INV组织隔离的,不同INV可共用的部分比较少,BOM系统应用的全局性特点并不十分明显,重要性也不是太高。
二、物料(Item)
物料Item数据管理以其应用的基础性与影响的广泛性,是EBS系统最重要也是最复杂的基础业务数据。企业尤其是大型企业,物料主数据的管理甚至可以上升到决定企业未来发展乃至生死存亡的高度。为此,ORACLE系统提供了完善的“端到端”的全流程解决方案。
(一)Item 的范畴
EBS系统英文原版中,物料是用Item来表示的,译成中文最初为“项目”,在文档表述中常常与另一个词Project的中文翻译“项目”混淆,带来诸多不便。这方面台湾将Project称之为“专案”,则非常方便,不会存在混淆的问题。R12中文版(大陆)将Item改为“物料”,虽说解决了容易混淆的问题,但却也带来了另一个问题:缩小了Item原先的内涵范畴。(为表述方便,本文后续原则上以Item一词代替“物料”一词)
在EBS中,Item不仅表示有形的“物料”,同时还可以指无形的“服务”,例如表示顾问服务的计量“人天”、表示一个广告创意的“campaign”、表示一个售后服务的“case”等等。具体类型(Item Type)是根据企业业务管理需要定义的,如下图1所示:
Item Type 的LOV是在Lookup Code 中定义的,访问级别是“用户”,即完全属于“自定义”,只有统计分析功用,并不参与系统流程构建,对业务流程没有影响。如下图2所示:
在EBS系统中,Item一经创建就无法轻易删除(必须使用特定的清理功能才可以。后面再介绍),但可以选择通过改变其“状态(Item Status)”来控制其相关的可用性,如下图3所示:
Item Status 的LOV值,系统提供了专门的表单定义功能,完全可根据企业需要定义每个“状态代码”对于Item属性起控制作用的具体方式,如下图4所示:
图3中,当一个具体的Item值选定一个确定的Status后,其相关属性的修改方式就由图4定义中的“控制方式”决定,控制方式可能是三种“默认值、设置值、不使用”之一。默认值:在将状态分配给物料时,系统将默认状态代码定义的属性值,用户可以更改此默认值;不使用:既不使用默认值,也不使用状态控制;设置值:在将状态分配给物料时,系统将默认状态代码定义的属性值。一旦分配了默认值,用户不能对其进行更改。例如图4中,“允许BOM ,值:√,使用:默认控制”,表示具有该Status的Item,其“允许BOM”属性的值默认为“YES(√)”,但用户可以更改。
至于图4定义中,每个属性的控制方式具体取值(即“默认值、设置值、不使用”中的哪一个),则又是通过“Item属性控制”定义功能来实现的。(复杂了,打住!打住!,后面再来详细讨论这个问题。)
(二)Item 的编码
几乎人人都知道物料编码的重要性,网上也有不少介绍如何管理物料编码的文章,什么“机械行业物料编码”、“电子行业物料编码”等等,诸如此类,不一而足。然而,笔者不得不遗憾地指出来,这些文章大多没有能抓住物料“系统编码管理”的本质与要义,基本上还都是基于手工编码与管理的“电算化”系统设计与实现方式而言的。
“物料编码”既是个非常“简单”的问题,也是个非常“复杂”的问题。说其简单,是因为所有企业,无论是使用什么样的管理软件,都需要给物料编码;说其“复杂”,是因为物料编码管理是一门涉及范围广泛,有相当深度的专业学问,远不是“编码方式”本身的那点内容。我们有时侯说SAP/ORACLE产品包含有“丰富的管理思想与业界最佳业务实践”,其实,从与“Item(编码)”有关的系统设计角度来看,恰恰就能验证这一说法。
目前国内主流ERP产品的“物料”定义,通常都包括两个基本内容“物料编码(Number)”、“物料名称(Name)”,并基于此引申出“物料编码、物料名称不能重复,使用后不允许修改”等等系统设计功能。ORACLE(或SAP)将所谓“物料编码Number、物料名称Name”变化成“物料Item、物料说明Description”。表面上看来,两者好像是一样的,区别不大,但实际上两者在系统设计理念上已经起了根本性变化。
在ORACLE EBS中,“Item”被抽象成一个代表物料的具有唯一性的“指示符”,可以是一个数字或字符的代码,也可以是一个长度限定的“短文本”( 在系统内部该字段实际是一个“键弹性域”结构,不过实际使用多段结构的情况较少,一般设定成单段结构,与普通表单字段使用无异)。但它并非是系统内部业务流程所使用的“唯一性识别ID”,也就是说,当在系统中定义Item时,系统还会在内部自动生成一个用于系统识别的唯一性ID(内码),外部所表现的Item(外码)只是其一个外部指示符(不过,系统也要求其具有唯一性)。
在EBS的使用过程中,系统允许修改已经存在的Item(编码),且如果改变了Item(编码),并不会影响到该Item原在其它相关模块中的使用状况。例如:先定义一个Item,然后为此Item创建BOM,然后在Item定义界面查找出此Item(编码)并修改保存,再去查询BOM,则可以发现原Item已经不存在,代之以的是修改后的Item,并完全继承了原BOM定义。至于所谓“Item说明(Description)”,与Item本身相比,系统除了不要求具有唯一性之外,其余方面几乎完全相同,它实际就是一个字符长度可更长一些的“短文本”,一般用之作为包括物料实际名称在内的对Item的简短说明。用涵义广泛的“说明Description”来取代涵义狭窄的“名称Name”,无疑使得系统使用具有了更为广泛的自由度。
基于涵义比较“具体”的“物料编码Number、物料名称Name”的“电算化”系统设计与实现方式,自然会将企业实际的物料编码工作也引导到比较“具体”的实现方式上去(如上面所提到的网文中介绍的内容)。而基于比较“抽象”的“Item”的ORACLE系统设计与实现方式,则为企业的Item(编码)管理提供了更为灵活、更为方便也更为完善的扩展空间。但要理解清楚这一点,首先需要懂得基于“业界最佳实践经验”而总结出来的有关物料编码的两条重要管理原则:
其一是,系统所使用的Item(编码)与工程上所使用的物料编码,不能混为一谈,两者的目的与用途不同,因而编码与管理方式也有很大不同。实际工作中(尤其是在使用某些低端ERP产品时),很容易的犯的一个错误是,以比较好懂的物料工程编码代替比较抽象的“系统编码”。因而导致在编码数据量较大时,出现系统使用困难,用户深感不便,严重影响工作效率的现象。
其二是,系统所使用的Item(编码)主要是针对工程上广义的“部件”(Part)而言,而不是针对狭义的物料(Material)。一个Part对应一个Item,但一个Part可能“包含”多个狭义的Material,如何“包含”则涉及到复杂的工程容差设计与材料认证问题。实际工作中,比较容易犯的错误是,以狭义的物料Material代替广义的Part,导致Item数量失去控制,系统业务处理逻辑复杂化而变得难以使用。
上述两条物料编码管理原则,对于许多缺少相关业务经验的人来说,理解起来可能难度较大。不过,对于大多数人来说,只要懂得所谓“Item编码”主要还是ERP核心系统之外的工作,高端的ERP产品(ORACLE/SAP)要求Item编码必须遵循上述两条基本管理原则就可以了。至于这两条编码管理原则如何贯彻执行,则涉及到有一定深度与广度的专业知识,与企业的管理实践密切相关,最近几年高科技电子行业出现一个称为“Commodity管理”的专门岗位,正是与此有关。十多年前,国内的通信企业华为公司开始引进国外的先进管理经验,拜请IBM为师,最初数千万元的咨询顾问费也就仅是围绕所谓“Commodity管理”,这一看起来不起眼、实际展开内容却十分丰富的领域来展开的。详细讨论物料的所谓“Commodity”管理非本文所能胜任,以下仅简单介绍几个比较常见且重要的问题。
关于系统的Item编码长度。经验表明,编码的长度以6-8位为宜,短了则可能容量不够,长了则不方便记忆、影响使用。编码应以数目字为主,必要时辅之以英文字母,不应当出现单词或词组,中文就更不应该出现了。一个编码通常分为前后两部分,前半部分(3-4位)表示物料分类,后半部分(3-4位)则是流水码。
关于系统的Item编码中的分类。首先,不要将Item编码中前半部分的“分类”与EBS系统中的Item Category(类别) 混为一谈,两者有一定联系但差别也很明显。前者代表的是基于“用途”的Item的自然或物理属性,是确定的;后者则更多的是体现企业的“管理”属性,可以根据需要随时作调整。从实际使用角度来看,一般规定Item中的一个“分类组合”只能隶属于一个确定的Category,但一个Category可以包含多个Item编码中的分类组合。
如今大多数人已经认可Item的编码“不包含业务涵义但应适当分类”的原则。过去各企业的物料分类五花八门,没有一定标准,这给电子商务时代的信息交流与互换造成了很大障碍。为此,1998年联合国开发计划署(UNDP)委托邓百氏咨询公司(Dun & Bradstreet)开发并维护全球产品与服务的分类体系,提出了“联合国标准产品与服务分类代码United Nations Standard Products and Services Code”,简称UNSPSC。应全球电子商务发展的要求,2003年5月UNDP正式委托美国统一代码委员会(UCC)全权实时维护和管理UNSPSC。目前已有上百个国家和地区的上万家公司在使用。2003年12月,美国统一代码委员会Uniform Code Council(UCC)正式授权中国物品编码中心Article Numbering Center of China(ANCC)独家负责UNSPSC中文版本的全部工作。ANCC成立了UNSPSC动态维护管理中心(UNSPSC-China)。
UNSPSC覆盖了国民经济各行各业,共设置了:55个大类,351个中类,2015个小类,19000多个细类产品(V6.0315版本)。分类依据基本上都是根据产品的“用途”进行分类的。即按照使用目的进行分类,每层结构内的顺序,基本是没有任何含义的,和产品与服务类别名称的语序也无关。UNSPSC采用四层八位的数字层次码结构,代码结构如下: Ⅹ1Ⅹ2Ⅹ3Ⅹ4Ⅹ5Ⅹ6Ⅹ7Ⅹ8。其中:
Ⅹ1Ⅹ2 第一层,大类(Segment),用于分析商品与服务种类的逻辑组合;
Ⅹ3Ⅹ4 第二层,中类(Family),一种通用的内部互相联系的商品和服务种类;
Ⅹ5Ⅹ6 第三层,小类(Class),具有共同用途和功能的一组商品和服务;
Ⅹ7Ⅹ8 第四层,细类(Commodity),一组可选用的商品和服务。
对于一个确定的物料来说,一定是属于UNSPSC中的一个“大类+中类+小类+细类”的8位数字的组合代码,例如31101501,它的编码的组成如下:
大类(Segment) :制造业部件和用品(Manufacturing Components and Supplies) -- 31
中类(Family): 铸件(Castings) -- 10
小类(Class):压模铸件(Die castings) -- 15
细类:(Commodity):铝压模铸件(Aluminum die castings) -- 01
为了达至全球性的物料分类统一与标准化,方便企业之间的沟通交流与数据交换,一个企业应当对照UNSPSC的分类定义,对涉及到的所有外购物料以及自产部件、半成品或产品进行准确分类。企业如果开发出一种“全新”的部件或产品,且发现不能在UNSPSC中找到合适的分类,则可以按规定程序向相关管理机构(例如UNSPSC—China)提交物料分类编码的新增申请。整个申请过程耗时可能很长,如果被拒绝,UNSPSC会建议使用现有分类,如果被接纳,则最终需要提交美国UCC批准。
但需注意的是上述UNSPSC 的8位分类编码,不应当被企业直接用来放进Item编码中(例如UNSPSC+流水码),这是因为一来UNSPSC细类(Commodity)数量太多,目前已达两万多个,每个企业实际真正能用到的只是其中很少一部分(一般数百个Commodity),例如一个电子制造业不到可能会用到类似“10101512”(兔子)的Commodity。二来8位分类码再加上流水码(一般是4位),Item编码总长度太长,不方便使用。
UNSPSC针对8位分类码也给出了只有6位的“识别码(Unique ID)”,但这个6位识别码(实际也是流水顺序码)仍然过长,不方便使用。如下图(表)5所示:
企业一般需要根据自己会使用到的那些8位UNSPSC分类码,个性化制定企业自己的分类“识别码”。通常取4位,前两位代表“大类”,后两位代表“小类”(注意这里的“大类/小类”与UNSPSC中的“大类/小类”没有对应关系,只是为了方便企业对已选取的UNSPSC的管理)。Item中的前4位分类识别码,即使全使用数目字(不使用英文字母),最多也可有1万种组合(3位有1000种组合,一般中小企业也足够),足以满足单个大企业的物料分类需要。不同企业的Item中的分类识别码尽管不同,但由于它们都对应于同一的UNSPSC分类码,故数据交流与互换不会有问题。
尽管UNSPSC出台及全球推行只是近几年的事,远落后于ORACLE ERP产品的发布时间,但EBS 很早就在其产品安装后的初始化状态预置了物料的“Commodity”概念(例如Item类别弹性域系统预置的“Category—Commodity”结构。尽管这不是系统应用必需,可以改掉)。但ORACLE这样做的目的实际上也就是希望将企业的物料管理运作实务引导到所谓“业界最佳业务实践(Best Practice)”上来。
关于代表广义的Part的系统Item编码与狭义的Material的关系问题。广义的Part编码是指只要符合“规格Form、性能Fit、功能Function”相同的物料,即使某些重要属性不相同(例如颜色、生产厂家、质量指标等等),只要不对3F的一致性有重要影响,均归属于同一个Item。狭义的物料Material编码则是指即使是3F相同,但如果某些重要属性不同(典型的是生产厂家不同),也不能归入同一个Item。
能否分清Part编码与Material编码之间的本质区别,不仅体现在一个企业的Item编码方式的选择上,反映一个企业对物料编码的认识水平,更重要的是它还能反映一个企业的产品研发的技术水平。国内有些电子制造企业(尤其是“代工型”企业)之所以选择的是material型(或曰“工程型”)的Item编码方式,一个很重要的原因是早期企业没有技术能力进行Material的容差设计与分析,为保险起见只好采取“同一物料只要厂家不同”就是不同Item。实际工作中为了使用方便,不得已又将生产厂家等诸多信息放入Item编码中,如此恶性循环,最终使得公司的物料管理陷入十分恶劣的混乱状态而难以自拔。
国内某年产值超千亿RMB规模的大型代工型电子制造企业,由于早年研发技术水平有限,加之不懂所谓“Commodity 管理”,对物料编码的认识水平很低,初期开始采取的就是“不同厂家一物一号”的“工程型”编码方式,待累积到Item的有效数量超过三、四十万,并且每月还在以一万多数量快速增加的时候,才意识到问题的严重性。尽管后来累积投入数亿元的费用试图进行改造,但已经积重难返,还是无法从根本上解决问题。而反观象IBM这样的超大型企业,尽管其产品线十分丰富,年收入达千亿美金(其中硬件收入约占一半),但其全球有效Item数量一直控制在6万左右。几年前,国内的华为公司拜请IBM为师,花费数亿元搞集成产品开发IPD项目,其项目核心目标之一就是要将华为当时9万左右的Item数量下降20%。
目前国内某些ERP产品在其系统物料定义界面出现“生产厂家、型号”字段并且只能唯一赋值,客观上会将企业的物料编码方式引导到“同一部件不同厂家不同Item编码”的低水平道路上去。这说明其在物料编码的系统规划设计方面的认识水平还有待提高。而在ORACLE 系统中,在Item定义界面则明确给出了Item与制造商部件号(MPN)的“一对多”的可能对应关系设置(具体设置下面再谈),这对于有效地避免企业采用错误的编码方式,促进企业Commodity 管理水平的提高将十分有帮助。