参考《深入浅出Oracle EBS之核心功能(DIS)》。canca
参考《深入浅出Oracle EBS之核心功能(DIS)》。canca
应用:Bills of Material
职责:Bills of Material
总体说明
BOM(物料清单)最终解决的问题是生产过程中用料和用量的标准化。准确度要求在98%以上,要不断与现场比对,逐步达到100%。
BOM是制造型企业的业务驱动核心,WIP、OPM、COST、MPS/MRP等是直接跑在BOM的基础上,没有稳定清晰的BOM就没有ERP。
BOM是产品的组成结构图,定义了生产特定物料所需的零件及数量。每一个零件也可能有他们的BOM结构,由此产生多层的产品结构树。
例如一个车轮需要两个轮辋的自行车还是比较少见的哦!可以看出,生产一部自行车,需要轮辋 2 * 2个
BOM的维护和变更实际至少涉及如下部门:工程部/研发中心、计划部、制造部、财务部。
从不同角度看,BOM有不同的分类。
从设计与制造角度 据bom_bill_of_materials.assembly_type分
工程BOM基本上是反应工程图纸上的BOM,如CAD设计出来的BOM。
而实际在EBS中的维护,和制造BOM没什么大的差异;主要差别在于工程BOM不能用于生产,维护时可以选择工程物料、其他工程BOM作为组件。
制造BOM反应的是当前用于车间实际生产的BOM,即在产品生产过程中,按照标准应当投入的零部件规格及其数量。
从组件供应角度 据bom_inventory_components.wip_supply_type分
WIP组件需求按照正常逻辑计算:仅看一层BOM的零部件。
WIP组件需求,跳过虚拟件,把其下的组件直接作为WIP的需求;忽略虚拟件的工艺路线。
虚拟件只是从其父件的角度出发区分出来的,其本如果直接开Job,和其他装配件没有任何差异。
从产品类型角度 据mtl_system_items_b.bom_item_type分
最常见的普通BOM,理论上组件都是必须的,数量也是标准耗用量。
WIP、CST等模块使用的就是标准BOM,OM实际执行的也是标准BOM。
用于OM的CTO(ATO、PTO)销售方式,所以具体又可分ATO BOM、PTO BOM。
企业事先定义了一个产品的模型,其中的组件,有些是必须的(Mandatory),有些是可选的(Optional);在上述两种组件中,可能又定义一个类别(Option Class),只要在这个类别中选一个或多个就行了。模型BOM如果嵌套定义,就非常复杂了。
客户根据模型,最终选定一个满意的组成方案;我们根据客户的方案开SO下单执行。
SO会根据选配结果创建一个Item及其BOM。因为这种Item我们通常设置为采用“<原物料编码>*<序列号>”的方式生成,所以也叫“星号Item”;对应的BOM叫“配置BOM”,其和标准BOM没有任何差别。
用于模型BOM的组件,参考上面说明。
比如计算机模型中的显示器,就可以作为选项类,公司可以提供多个型号供客户选择。
有时候会觉得“选项类BOM”和“模型BOM”类似嘛,这就对了,差别在于前者只能作为后者的组件,不独立供客户订购了。^o^!
计划BOM和标准BOM的差别在于其组件使用量都有百分比,这样在做Forecasts展开的时候,MPS会逐层乘以百分比,得出扩展计划数量。
计划类型的Item不能定义Routing、BOM没有产出率、不卷积成本、不需要供应/发运等等信息,总之计划BOM仅仅关心数量!
从配方主次角度 据bom_bill_of_materials.alternate_bom_designator分
最常用的产品结构,在各模块使用中默认都是主BOM,如成本卷积、开JOB、MRP运算、OM模型BOM等;成本卷积、开JOB可以手工选择替代BOM。
创建主BOM之后,就可以建立平行配方——替代BOM了,意思是同样一个产品,还可以用其他的配方(不同物料、不同数量)生产,这样比用替代料来得更加直接、更加好控制。
在做工程BOM的时候,通常可以创建一系列替代BOM,来比较其组成、工艺、成本。
标准BOM学习流程
Prerequisite 参考《深入浅出Oracle EBS之全模块设置详例》设置BOM
↓
Review Item 回顾物料定义中BOM Tab页属性,参考“INV: Items”
↓
Review Profile 回顾重要的Profile设置
↓
Define Primary BOM 定义主BOM
↓
Define Alternate 定义替代项
↓
Define Alternate BOM 定义替代BOM
↓
View Indented BOM 查看BOM多级清单
↓
View Item Where Used 查看物料使用处
↓
Modify Component 失效组件、添加新组件
预制文件
N: Sys/Profiles/System
重点关注如下几个Profile的设置值:
主BOM
N: BOM/Bills/Bills
EBS中BOM是分层独立定义的,但顺序不分先后,如上述“自行车组成结构图”,可以先定义自行车的BOM,再定义车轮的BOM;也可以反过来定义。最终都一样组成一棵产品结构树,相对的,父节点叫“装配件”或“父件”,子节点叫“组件”或“子件”。
上图,装配件为“960001”,组件有“910001”、“960002”。
上图,装配件为“960002”,组件有“910002”、“910003”。
这样一层层下去,理论上可以无限制定义;Oracle ERP目前允许多达60层的BOM,但实际实施应当尽量扁平化。
常用字段详细说明,粗体部分是必须要掌握的:
我们本章练习定义的BOM数据如下:
替代号
N: BOM/Setup/Alternates
定义替代号HUAJHUA:
替代BOM
N: BOM/Bills/Bills
和Primary BOM唯一的差别在于需要在“装配件”下加定义替代号,假定配方HUAJHUA的数量和主配方不一样。
960001的HUAJHUA:
960002的HUAJHUA(注:等看完“View Indented BOM”再回来定义!)
我们本章练习定义的BOM数据如下:
多级清单
N: BOM/Bills/Indented Bills
如上面所讨论的那样,BOM定义的时候是分层独立定义,而完整的BOM应当是棵结构树,Indented Bills就是以缩进方式展示了这棵树,叫“BOM多级清单”。
“BOM多级清单”是从装配件的角度看,递归使用了哪些物料来生产。
这个查询界面数据含义是:展开当前960001主BOM,看直接、间接使用了哪些组件,最多10层。结果是(点击左下角+号展开),是一棵正立的树:
这里重点关注Quantity和Extended Quantity,后者是由前者逐层递乘出来。
再查下替代BOM的“多级清单”,定义960002替代配方前:
定义960002替代配方后:
EBS在展开多级清单的时候遵循如下规则:以顶层的替代号为准,首先用子层中相同替代号的BOM展开,如果没有则用主BOM,直到叶结点(没有定义BOM的物料)。
物料使用处
N: BOM/Bills/Item Where Used
“物料使用处”是从组件的角度看,到底被哪些装配件使用,可以递归至顶层装配件!
上图界面含义是:查询910002当前被哪些装配件直接、间接使用了,最多网上找10层。结果如下,是多级清单的倒立:
须改组件
N: BOM/Bills/Bills
对于组件的修改,比如修改数量、供应方式、产出率等,可以直接修改相应行,这样简单、直接,但是无法保留痕迹。建议的做法有2:一是“拷贝”一行进行修改,失效原行;二是通过ECO(Engineering Change Order工程更改单)来做。
这里用方法1,先查出要改的BOM,在要修改的行填入“失效日期”,保存后;新增一条记录,录入同序号及新的组件信息。
这样实际上产生了新版本(Version)的BOM,如此例,27-OCT-2006 16:43:05及之前是一个版本,27-OCT-2006 16:46:40及之后是另外一个版本;严格说,这两个时间的空档内,又是一个版本。
Revision and Version
虽然没有标记版本号,前面的“Modify Component”因为有有效时间范围进行区分,使BOM在不同时点具有不同的Version(版本);另一方面,Item是可以创建Revision(修订号)的,以不同修订号的Item创建的BOM,其版本当然也不同。
所以,总的来说,可以通过这两种方式维护不同的BOM版本。
如何写BOM SQL
应当使用系统标准API来展开:apps.bompexpl.exploder_userexit,可以展开任意级的多级清单,含指定类型的成本。我们不需要自己写展开BOM的函数,也不需要用SQL直接取,这样可以保证最大的代码健壮性和兼容性。
SELECT mst.segment1 assembly_item,
boms.alternate_bom_designator alternate,
bics.item_num,
msic.segment1 component_item,
bics.component_quantity,
bics.effectivity_date,
bics.disable_date
FROM inv.mtl_system_items_b mst,
apps.bom_bill_of_materials boms,
apps.bom_inventory_components bics,
inv.mtl_system_items_b msic
WHERE mst.organization_id = boms.organization_id
AND mst.inventory_item_id = boms.assembly_item_id
AND boms.bill_sequence_id = bics.bill_sequence_id
AND boms.organization_id = msic.organization_id
AND bics.component_item_id = msic.inventory_item_id
--Item
AND mst.bom_enabled_flag = 'Y'
AND mst.bom_item_type IN (1, 2, 3, 4) --Dependent
--BOM Header
AND boms.assembly_type = 1 --1 Manufature,2 ENG
AND nvl(boms.effectivity_control, 1) <= 3
--BOM Line
AND nvl(bics.disable_date, SYSDATE) >= SYSDATE
AND bics.effectivity_date <= SYSDATE
AND bics.implementation_date IS NOT NULL
AND nvl(bics.eco_for_production, 2) = 2
--Filters
AND mst.organization_id = 82
AND mst.segment1 LIKE '96%'
ORDER BY 1, 2 NULLS FIRST, 3
可选阅读:不同类型BOM允许的组件类型
《115bomug.pdf》/Bills of Material/Overview of Bills of Material/Components
可选阅读:不同类型BOM允许的组件属性
《115bomug.pdf》/Bills of Material/Overview of Bills of Material/Components
如何共享BOM
N: Tools/Copy or Common
一个组织的BOM,可以共享给同一主组织下的其他组织,甚至可以共享给同一组织的其他物料,只要物料的BOM Item Type相同。这样可以减少维护工作量,XXX公司的BOM就是在同一组织维护,然后Common给整个集团!
永远注意:共享仅共享一层BOM,其组件的BOM需要再做共享;跨组织的话供应子库/货位无法共享;要保证组件和替代物料在目标组织存在,否则无法共享。
共享有两种方式:一是拷贝,这样拷贝过去后,可以修改,独立维护;二是参考,也叫Common,BOM仍然在原组织/原物料维护,目标组织/目标物料BOM不能再维护,系统规定Common BOM不能再被其他Item Common,否则程序找起来很费劲。
另外,对于CTO销售企业来说,BOM在普通的组织维护,而SO的验证组织通常是Master组织,所以必须把BOM Common到主组织。
替代物料
N: Button/Substitute
标准BOM可以设置替代物料(不要和替代号混淆),即组件可以用其他物料来替代,数量不需要相等;这个仅影响MRP,不影响WIP。
避免BOM循环定义
N: Tools/Check for Loops
定义BOM的时候,实际上仅关注一层,并不关心组件本身的BOM定义,如果A用了B,B用了C,C用了A,如果用多级清单展开的话,实际上是个死循环,为此系统提供了该检查功能,防止循环的出现。
BOM维护监控
BOM或其组件,创建、修改、删除的没一次动作,系统在后台记录了Business Event,如果需要监控的话,只要定义订阅即可达到监控目的,比如数量修改了,则发个通知给特定的人员,感觉是不错的功能。
批量修改
N: BOM/Bills/Mass Change
提高维护效率的手段,可以独立于ECO使用。
可以定义一系列条件——要改的BOM范围,然后设置Action——修改内容,比如增加组件B、删除组件A等丰富的修改方式。
比较两个BOM
N: BOM/Bills/Comparison
可以比较任意组织、任意BOM,看其在用料和用量上有哪些差异
如何删除BOM
N: BOM/Delete Groups
统一通过删除组删除,这样可以统一检查是否已有事务处理等约束条件,没有的话方可删除。
约束条件
N: BOM/Setup/Constraint
设置BOM删除时的约束条件,默认的足矣!