应用:Bills of Material
职责:Bills of Material
总体说明
Routing(工艺路线)最终解决的问题是生产过程中加工顺序、资源和用量的标准化。准确度要求在98%以上,要不断与现场比对,逐步达到100%。
与BOM一样,Routing亦是制造型企业的业务驱动核心,WIP、OPM、COST、MPS/MRP等是直接跑在Routing的基础上,没有稳定清晰的Routing就没有ERP。
Routing是产品/半成品的生产步骤图,定义了生产特定物料所要经历的工序、加工部门(工作中心)、提前期、耗用的资源及其额定数量。
以“自行车组装”为例,下面是其预定工艺路线表:
其中960001,经过3道工序,在第一工序即“总装中心”,使用了两种资源进行组装。
Routing的维护和变更实际至少涉及如下部门:工程部/研发中心、计划部、制造部、财务部。
Oracle中的Routing,不仅仅是技术意义上的施工标准步骤,其还承担了工、费归集的成本职能;使得我们结合BOM可以准确算出一个装配件的成本——料、工、费。因为加入了成本因素,使得Routing稍显复杂。
从不同角度看,Routing也有不同的分类,不过没有BOM那么复杂。
从设计与制造角度 据bom_operational_routings.routing_type分
工程Routing基本上是反应工程设计上的Routing原型;而实际在EBS中的维护,和制造Routing没有差异。
制造Routing反应的是当前用于车间实际生产的Routing,即在产品生产过程中,按照标准应当历经哪些工序,经由哪些部门,耗用多少该部门的资源生产。
从工艺主次角度 据bom_operational_routings.alternate_routing_designator分
最常用的工艺路线,在各模块使用中默认都是主Routing,如成本卷积、开JOB、MRP提前期运算;成本卷积、开JOB可以手工选择替代BOM。
创建主Routing之后,就可以建立替代Routing了,意思是同样一个产品,还可以用其他的步骤和方法(不同工序、不同部门、不同资源、不同数量)生产。
在做工程Routing的时候,通常可以创建一系列替代Routing,来比较其组成、工艺、成本。
替代Routing的意义还在于表明,使用不同等级的技能工或者不同科技水平的机器,其效率是不一样的。比如主Routing是用新设备加工,需要0.1机时;替代Routing AAA使用旧设备加工,需要0.3小时。
可选内容:从工艺是否固定角度
通常我们说的都是标准Routing,工序、部门、资源及定额数量都固定。
Dynamic Routings(动态工艺路线)的含义:生产过程并非事先固定,而是根据前工序的结果,决定后面的工序是什么,比如10工序测试结果值<60%,那么转30工序,否则进入20工序。
所以初始定义是一个复杂的Routing Network,类似含分支判断的程序流程图。
标准Routing学习流程
Prerequisite 参考《深入浅出Oracle EBS之全模块设置详例》设置BOM
↓
Review Item 回顾物料定义中BOM Tab页属性,参考“INV: Items”
↓
Define Resource 定义资源及其费率
↓
Define Overhead 定义制造费用、资源与制造费用关系
↓
Define Department 定义部门及其与资源的关系、制造费用在各部门的费率
↓
Define Standard Op 定义标准工序
↓
Define Primary Routing 定义主Routing
↓
Define Alternate 定义替代项
↓
Define Alternate Routing 定义替代Routing
↓
Modify Operations 失效工序、添加新工序及资源
↓
Resource Where Used 资源使用处
资源定义
N: BOM/Routings/Resources
Oracle中资源的含义比较丰富,主要包括人工、机器,此外还包括时间、货币、数量、杂项。定义资源的时候需要定义一系列成本参数:账户和费率。
费率即单位成本、单价的意思。
我们创建如下资源:机器、初级工、测试工、特级工并设置费率分别为10/10/11/20。这里也可以直接定义资源和制造费用的关系。
点击Rates定义费率,初次定义可以直接定义Frozen的:
资源定义关键字段:
我们本章练习定义的数据如下:
制造费用定义
N: CST/Setup/Sub-Elements/Overheads
任何除物料间接费用外的间接费用,如水、电、煤、现场管理费等,都可以定义为Overhead(制造费用)。Overhead纯属成本概念,并不影响Routing的定义和使用;Oracle通过其与Resource的关联,实现自动计算成品/半成品的单位成本、生产成本的目的。
我们创建如下资源:Water、Coal并设置其与HR01/MS01、HR01/HR02/HR03相关联。这里也可以直接定义制造费用在各部门的费率。
即使新建的Overhead,这里也无法定义Frozen类型的关系;不过回到前面Resource定义的地方就可以。
制造费用定义关键字段:
我们本章练习定义的数据如下:
部门
N: BOM/Routings/Departments
这里的部门,可以等价于工作中心、加工中心、成本中心,并不是我们所说的财务、市场、计划部门。
我们创建如下部门:总装中心、包装部门、测试部门、车轮部门。并定义两个关系:
部门定义关键字段:
我们本章练习定义的数据如下:
标准工序
N: BOM/Routings/Standard Operations
标准工序相当于一份工序模版,通常代表每个加工中心最常用的生产工序。
每个部门都可以定义若干标准工序,然后在定义实际工艺路线的时候,可以直接引用这些标准工序,视情况加以修改即可,提高Routing维护的效率和准确性。
这里我们定义一个“总装部门”标准的“装配工序”,详细字段参考下节:
主Routing
N: BOM/Routings/Routings
前面的设置都是为Routing准备的。
这里我们逐一创建前面介绍的“自行车组装”的工艺路线,资源只能选与工序中的部门有关联的,即只能选择本部门拥有的资源;其中10工序引用标准工序:
常用字段详细说明,粗体部分是必须要掌握的:
我们本章练习定义的Routing数据如下:
替代号
N: BOM/Setup/Alternates
替代号定义是和BOM共享的,所以可以使用已有的,或者定义新的AAA:
替代Routing
N: BOM/Routings/Routings
差别仅仅在于多一个替代号。这里不再详述,请读者自行练习。
我们本章练习定义的Routing数据如下:
修改工序
N: BOM/Routings/Routings
对于工序或者其下资源的修改,比如修改部门、资源、使用量等,可以直接修改相应行,这样简单、直接,但是无法保留痕迹。建议的做法有2:一是“拷贝”一行进行修改,失效原行;二是通过ECO(Engineering Change Order工程更改单)来做。
这里用方法1,先查出要改的Routing,在要修改的行填入“失效日期”,保存后;新增一条记录,录入同序号工序;因为资源是和工序相关联的,所以必须重新录入新的资源信息。
这样实际上产生了新版本(Version)的Routing,如此例,08-NOV-2006 13:05:59及之前是一个版本,08-NOV-2006 13:06:59及之后是另外一个版本;严格说,这两个时间的空档内,又是一个版本。
资源使用处
N: BOM/Routings/Resource WhereUsed
输入资源代码,点击Find,即可快速找出资源在哪些装配件的哪些工序的使用量:
Revision and Version
虽然没有标记版本号,前面的“Modify Operation”因为有有效时间范围进行区分,使Routing在不同时点具有不同的Version(版本);另一方面,Routing是可以创建Revision(修订号)的,不同Revision的Routing,其版本当然也不同。
所以,总的来说,可以通过这两种方式维护不同的Routing版本。
如何写Routing SQL
Routing的SQL写法相对简单,但也要注意有效日期、类型的限制。下面是取当前时点(Sysdate)Routing的例子,尚缺考虑Revision:
SELECT mst.segment1 assembly_item,
bor.alternate_routing_designator alternate,
bor.completion_subinventory,
bos.operation_seq_num,
dept.department_code,
bos.effectivity_date,
bos.disable_date,
bres.resource_seq_num,
res.resource_code,
bres.basis_type,
bres.usage_rate_or_amount
FROM inv.mtl_system_items_b mst,
bom.bom_operational_routings bor,
bom.bom_operation_sequences bos,
bom.bom_departments dept,
bom.bom_operation_resources bres,
bom.bom_resources res
WHERE mst.organization_id = bor.organization_id
AND mst.inventory_item_id = bor.assembly_item_id
AND bor.routing_sequence_id = bos.routing_sequence_id
AND bos.department_id = dept.department_id
AND bos.operation_sequence_id = bres.operation_sequence_id
AND bres.resource_id = res.resource_id
--Item
AND mst.bom_enabled_flag = 'Y'
AND mst.bom_item_type IN (1, 2, 3, 4) --Dependent
AND nvl(mst.eam_item_type, 0) = 0
--Routing Header
AND bor.routing_type = 1 --1 Manufature, 2 ENG
AND nvl(bor.cfm_routing_flag, 2) = 2
--Operations
AND nvl(bos.disable_date, SYSDATE) >= SYSDATE
AND bos.implementation_date IS NOT NULL
AND nvl(bos.eco_for_production, 2) = 2
--Filters
AND mst.organization_id = 104
AND mst.segment1 LIKE '960%'
ORDER BY 1, 2 NULLS FIRST, 4, 8;
如何写Resource及其费率 SQL
比较简单,注意成本类型即可:
SELECT res.organization_id,
res.resource_code,
res.description,
lov_cse.meaning cost_element,
CASE
WHEN res.cost_element_id IN (3, 4) THEN
decode(res.functional_currency_flag,
1,
'Currency',
lov_brt.meaning)
ELSE
lov_cse.meaning
END resource_type,
lov_dbs.meaning default_basis_type,
crc.resource_rate
FROM bom.bom_resources res,
apps.fnd_lookup_values_vl lov_cse,
apps.fnd_lookup_values_vl lov_dbs,
apps.fnd_lookup_values_vl lov_brt,
bom.cst_resource_costs crc
WHERE res.cost_element_id = lov_cse.lookup_code
AND 'CST_COST_CODE_TYPE' = lov_cse.lookup_type
AND res.default_basis_type = lov_dbs.lookup_code
AND 'CST_BASIS' = lov_dbs.lookup_type
AND res.resource_type = lov_brt.lookup_code
AND 'BOM_RESOURCE_TYPE' = lov_brt.lookup_type
AND res.resource_id = crc.resource_id
AND res.organization_id = 104
AND res.cost_element_id = 3 -- Element
AND crc.cost_type_id = 1 --Cost Type
ORDER BY 1, 2, 3, 4;
如何写制造费用、关联的资源、费率SQL
实际上,Oracle把各成本子要素的定义都存储在bom_resources表中,所以写SQL的时候需要注意自连接的使用,不要混淆。
制造费用关联的资源:
SELECT owh.organization_id,
owh.resource_code overhead_code,
owh.description,
lov_cse.meaning cost_element,
lov_dbs.meaning default_basis_type,
res.resource_code resource_code
FROM bom.bom_resources owh,
apps.fnd_lookup_values_vl lov_cse,
apps.fnd_lookup_values_vl lov_dbs,
bom.cst_resource_overheads cro,
bom.bom_resources res
WHERE owh.cost_element_id = lov_cse.lookup_code
AND 'CST_COST_CODE_TYPE' = lov_cse.lookup_type
AND owh.default_basis_type = lov_dbs.lookup_code
AND 'CST_BASIS' = lov_dbs.lookup_type
AND owh.resource_id = cro.overhead_id
AND cro.resource_id = res.resource_id
AND owh.organization_id = 104
AND owh.cost_element_id = 5 -- Element
AND cro.cost_type_id = 1 --Cost Type
ORDER BY 1, 2;
制造费用的部门费率:
SELECT owh.organization_id,
owh.resource_code overhead_code,
owh.description,
lov_cse.meaning cost_element,
lov_dbs.meaning default_basis_type,
dept.department_code,
cdo.rate_or_amount
FROM bom.bom_resources owh,
apps.fnd_lookup_values_vl lov_cse,
apps.fnd_lookup_values_vl lov_dbs,
bom.cst_department_overheads cdo,
bom.bom_departments dept
WHERE owh.cost_element_id = lov_cse.lookup_code
AND 'CST_COST_CODE_TYPE' = lov_cse.lookup_type
AND owh.default_basis_type = lov_dbs.lookup_code
AND 'CST_BASIS' = lov_dbs.lookup_type
AND owh.resource_id = cdo.overhead_id
AND cdo.department_id = dept.department_id
AND owh.organization_id = 104
AND owh.cost_element_id = 5 -- Element
AND cdo.cost_type_id = 3 --Cost Type
ORDER BY 1, 2, 6;
如何删除Routing
N: BOM/Delete Groups
统一通过删除组删除,这样可以统一检查是否已有事务处理等约束条件,没有的话方可删除。
制造提前期及其累计
N: BOM/Routings/Routings/Tools/Compute Lead Times
N: BOM/Routings/Routings/Tools/Rollup Lead Times
制造提前期累计。
应用:Bills of Material
职责:Cost Management
总体说明
物料成本就是一个Item的成本,所以也有公司叫单品成本、产品成本、单位成本。
与实际业务一样,EBS系统中有关物料的事务处理,均以Item为基础,进一步,其成本核算都是基于“物料成本”计算的。
比如销售物品A给客户,销售收入=售价 * 销售数量,销售成本=物料成本 * 销售数量,于是很容易得到一张销售订单的毛利 = 销售收入 - 销售成本。
在系统中,采购、库存事务、WIP也与物料成本息息相关,如PO算采购价差/发票价差、INV算库存价值及交易成本、WIP算生产成本及其差异等也是直接以物料成本为基础的。
那么“物料成本”怎么来的呢?其一当然是手工输入,直接定义;不过实际使用中,一般都是由系统根据相应的成本方法自动计算。为此需要先了解一些Oracle中的成本概念。
成本结构:Oracle提供的成本模型
库存组织:成本模块和其他制造模块一样,都是基于“库存组织”来定义、记录、屏蔽基础数据和业务数据;此外,与BOM的Common一样,成本也可以从其他组织Share过来,不过Share仅限于标准成本法,并且Share组织不能启用WIP功能;Share组织叫“成本子组织”,相应的,被Share的组织的叫“成本主组织”,大部分企业应用中,都不使用Share功能,所以组织的“成本主组织”通常也是自己。
成本方法:系统支持永续成本法(每笔事务处理实时核算成本)、期间成本法(以期间为单位核算事务处理成本)。前者是主要的核算方法,具体分标准、移动加权平均、FIFO、LIFO,一个库存组织只能使用并且必须使用一种永续成本法,通常由经营特性或者行业法规确定;后者通常作为补充,具体分PAC期间平均成本、期间LIFO,亦是由法规、会计准则规定。一个库存组织,同时使用永续成本法和期间成本法时,“对于同一项成本事务,可以产生多套成本会计分录。 但可以选择只将某一套会计分录传送到总帐,使得成本处理符合法规的规定”,这个通过选择不同的过账程序来实现。
通常制造企业采用标准成本法,分销/零售企业采用平均成本法。
成本要素:比较重要,参见下面说明。
基准类型:比较重要,参见下面说明。
成本要素Cost Element:Oracle划分的成本粒度
物料成本在系统中具体细分为5大要素的成本:Material、Material Overhead、Resource、Outside Processing、Overhead。与实际成本分析中的“料、工、费”对应。
这5大要素是整个成本核算的重要基础,也是我们理解系统成本计算和流转的关键。库存价值账户、WIP估价账户、WIP差异账户、各要素吸收账户、库存成本分录、WIP资源分录、WIP成本差异、物料成本卷积等等,都是基于此来处理的——从技术角度看,其成本相关的程序代码,Oracle都是写死处理这5大要素的。
1、材料Material:材料成本,通常是BOM最底层的组件的直接采购成本。
2、材料间接费Material Overhead:材料的管理费。
3、资源Resource:直接制造成本,通常指直接消耗的人工、设备、场地、杂项费用。
4、外协Outside Processing:委外加工费,可与Item关联以便通过采购接收管理。
5、制造费用Overhead:资源消耗和外协处理过程中的间接费用。
系统中,如果要使用上述任一要素,必须至少定义一个对应的子要素Sub Element,这实际上提供了一个灵活、细致的平台,用户可以根据自己的成本核算特点“随意”设置。
材料子要素:如不细分,设一个笼统的“原材料”子要素即可;也可细分如胶料、钢构、化学品、土豆等等。
材料间接费子要素:设置材料管理费明细,诸如采购费、运费、税款等等。
资源子要素:可设置各类实际资源,如车床1、硫化机1、普通人工、技工等等。
外协子要素:设置委外加工类型,也可按供应商设置,也可与Item关联。
制造费用子要素:即设置制造费用明细,如水、煤、电。
从成本要素看,物料成本的构成如下:
基准类型Basis:成本自动计算的基准参数
EBS处处使用自动化计算功能,成本核算亦不例外。自动化既要处理好“何时算、如何算”的问题,也要明确“多少量、多少钱、以什么账户借贷”的问题。基准类型,是用来确定“如何算数量”的。
回顾之前的Routing章节,制造费用、资源都有涉及计费基准的设置,归纳起来是:
注:“单Item消耗”用于“物料成本”自动计算和卷积;“每WIP消耗”用于“在制品成本”自动计算,“每PO消耗”用于“采购成本”计算。
成本卷积Rollup:根据BOM、Routing、各种费率及基准类型计算装配件成本
成本卷积应用于装配件,其成本=下层的组件成本 + 自身加工成本。从下往上观察下图,可直观看出自行车的成本为何=170.00。
所以一般来说,仅需手工指定最底层组件——材料的成本,所有装配件的成本均可由BOM、Routing、各种费率及基准类型自动“卷积”出来。
成本的Level和Source
从成本卷积的角度看,各种成本又可分为:
本层-非卷积:直接定义在本物料上的成本,如上述把手、车座的成本。
本层-基于卷积:由本物料的Routing计算而来的成本,如上述车架、自行车的“本层工费成本”。
下层-基于卷积:由本物料的BOM卷上来的成本,如上述车架的“下层材料成本”、自行车的“下层材料成本”和“下层工费成本”。
这里的“下层”,有些文档叫“上层”,这是翻译的问题!对应的英文其实叫“Previous”,所以用英文反倒不会歧义。
成本类型Cost Type:保存各个版本的成本数据
系统中使用Cost Type来保存各个版本的成本数据:现行的成本、备份的成本、准备使用的成本、模拟的成本等。所以如果要取一个物料的成本,必须指定是哪个成本类型下的。
因为可以建立无数个成本类型,实际上就可以保存任何有意义的成本版本,如每年保留一份历史成本。
现行成本使用的成本类型是“内置”的,即Oracle写死的,且不同的成本方法不同:标准成本法使用“Frozen”、平均成本法使用“Average”、FIFO成本法使用“FIFO”、LIFO成本法使用“LIFO”。
除非初始定义,不然不允许直接定义或者卷积这些“内置”成本类型下的物料成本甚至各种费率,必须先在其他成本类型(通常是Pending)里面把成本数据准备好——手工定义+卷积,最后同过Cost Update程序更新到现行成本类型上。
成本分录:重要!
成本相关分录非常多,并且不同成本方法下有些不同,尤其是差异的计算,这里仅讨论成本核算最常用的分录,全面内容请参考《深入浅出Oracle EBS之分录、物流、单据流》。
系统中的成本分录都是基于成本要素的——5大要素及其子要素。
首先看下主要的帐户设置(界面自己去复习):
再看下各种事务处理的具体分录,以标准成本为例:
Item Cost学习流程
Prerequisite 参考《深入浅出Oracle EBS之全模块设置详例》设置CST
↓
Review Org Parameter 回顾组织参数上选择的成本类型,略
↓
Review Fun Exclusion 回顾职责的功能排除
↓
Define Item 定义采购件和制造件的定义,参考“INV: Items”
↓
Define BOM 定义BOM定义,参考“BOM: Bills of Material”
↓
Define Resource 定义资源及其费率,参考“BOM: Routings”
↓
Define Overhead 定义制造费用,参考“BOM: Routings”
↓
Define Department 定义部门,参考“BOM: Routings”
↓
Define Routing 定义Routing,参考“BOM: Routings”
↓
Define Sub Element 定义成本子要素,这里补充定义物料和物料间接费子要素
↓
Define Item Cost 手工定义物料成本,通常是采购件的Pending成本
↓
Define Cost Type 定义成本类型
↓
Rollup Item Cost 成本卷积,通常是卷积装配件的Pending成本
↓
View Item Cost 查看物料Pending成本
↓
Run Cost Update 以标准成本为例,把Pending成本更新到Frozen
↓
View Item Cost 查看物料现行成本
↓
Do Any Transactions 做事务处理看起成本分录来验证,比如接收入库、Inv事务
菜单排除设置
N: Sys/Security/Responsibility/Define
下面列出Function,至于要应用到哪些职责,根据实际需要设置。
成本子要素
N: CST/Sub-Elements/Material
定义Rubber、Steel两个物料子要素,分别基于Lot和Item。
N: CST/Sub-Elements/Overhead
定义Purchasing等6个物料间接费子要素,分别基于6个计费基准,并都与HR01关联。
材料间接费这里无须定义费率,其应当在Item Cost中直接定义。
测试数据的Frozen成本如下:
物料成本
N: CST/Item Costs/Item Costs
直接定义采购件的Frozen成本,这里是91开头的物料,具体是点击Costs按钮,然后按照子要素输入成本,可以自己研究下主界面的成本如何计算出来。
关键字段说明:
Attribute Name |
Description |
Header属性 |
|
Item |
物料编码 |
Cost Type |
成本类型 |
Based on Rollup |
成本基于卷积,通常装配件是Yes,最底层采购件是No |
Include In Rollup |
装备件卷积时,本组件包含在其中,一般都是Yes |
Lot Size |
计算成本用的批量 |
Unit Cost |
单位总成本,只读 |
Material |
物料的总成本,只读 |
Material Overhead |
物料间接费要素的总成本,只读 |
Resource |
资源的总成本,只读 |
Outside Processing |
委协的总成本,只读 |
Overhead |
制造费用的总成本,只读 |
User Def Item Costs属性 |
|
Cost Element |
成本要素 |
Sub-Element |
成本子要素 |
Activity |
活动 |
Basis |
基准类型 |
Rate or Amount |
单位成本 |
Unit Cost |
根据批量、基准类型、单位成本计算而来,是Header上各成本的来源 |
Rollup Item Costs属性,同User Def |
测试数据的Frozen成本如下:
物料 |
成本要素 |
子要素 |
基于资源 |
基准类型 |
卷积来源 |
层次 |
费率 |
基准 |
成本 |
910001 |
Material |
RUBBER |
Lot |
User def |
This |
10 |
0.125 |
1.25 |
|
910001 |
Material |
STEEL |
Item |
User def |
This |
10 |
1 |
10 |
|
910001 |
Material Owh |
Duty |
Lot |
User def |
This |
0.1 |
0.125 |
0.0125 |
|
910001 |
Material Owh |
Purchasing |
Item |
User def |
This |
0.1 |
1 |
0.1 |
|
910001 |
Material Owh |
Import1 |
Res Units |
User def |
This |
0.1 |
0 |
0 |
|
910001 |
Material Owh |
Import2 |
Res Value |
User def |
This |
0.1 |
0 |
0 |
|
910001 |
Material Owh |
Import3 |
Ttl Value |
User def |
This |
0.1 |
11.25 |
1.125 |
|
910001 |
Material Owh |
Import4 |
Activity |
User def |
This |
0.1 |
0.5 |
0.05 |
|
910002 |
Material |
RUBBER |
Lot |
User def |
This |
10 |
0.125 |
1.25 |
|
910003 |
Material |
STEEL |
Item |
User def |
This |
10 |
1 |
10 |
|
910004 |
Material |
STEEL |
Item |
User def |
This |
5 |
1 |
5 |