第一部分 物料与批次
料主数据在SAP系统是一个非常重要的主数据,不仅体现在业务上,也体现在系统功能上,从分类的功能范围出发,物料主数据就可以进行分类,可以将建好的类分配给物料主数据,而且可以将类类别001物料分类和类类别023批次分类同时分配给物料主数据,这样物料主数据既有了物料分类的特性,又有了批次分类的特性。
批次是物料管理中的常见概念,特别是在化工、制药、快消等行业,由于生产工艺或材料的原因,不同批次的产品或原料,在具体的属性上有区别,或出于保质期、质量追溯等原因,需要对同一物料,不同批次的产品或原料进行区别,那么,启用批次管理可以很好的达到此目的。
一般来说,当同一物料每一采购批次或者生产批次都不尽相同时,才有必要启用批次管理,比如每一批次的价格,每一批次的生命周期,每一批次的颜色、重量、体积、尺寸等不相同,就可以用批次来管理,当启用批次管理后,会影响到MM、PP、SD等模块,涉及:采购,库存管理,生产投料,销售发货,同时也会影响到财务的成本核算。
本文梳理了批次在MM模块的应用,主要内容包括:
一、 物料与批次
二、 批次主数据
三、 批次级别
四、 批次分类
五、 货架寿命
六、 批次确定
七、 分割评估
一、物料与批次
若要对物料进行批次管理,首先要为该物料启用批次管理,在物料主数据->采购视图下勾
勾选批次管理,保存后,系统更新表MARC-XCHAR=X。
如果系统在集团层级启用了批次管理,那么对于某个物料是否启用了批次管理,要检查MARA表的XCHPF字段,如果值为X,则说明启用了批次管理,如果值为空,则没有启用批次管理。
为物料启用批次管理的前提条件是该物料在当期和前期没有库存,若有库存,需要将库存清空。
二、批次主数据
为物料启用批次管理后,就可以使用批次功能了,在SAP系统中,批次与物料一样都是主数据,而且也有组织架构,批次的组织架构包括:物料、工厂、库存地点。可以使用事务代码MSC3N来查看批次主数据,
批次主数据包含组织架构,和基本数据1、基本数据2、分类、物料数据、更改视图,主要内容如下:
生产日期、货架寿命到期日、评估类型、供应商、供应商批次、上一次收货(即最新的收货日期)……
类、类类别、特征、特征值
总货架寿命、剩余货架寿命、期间标识……
更改历史、更改凭证
创建批次主数据有以下三种方式:
1) 事务代码MSC1N(手工创建)
三种方式创建新批次的配置路径: SPRO->后勤-常规->批次管理->创建新批次
其中,手工创建新批次和货物移动创建新批次的配置定义了生成和校验新批次的方式。
批次主数据是依赖于物料主数据的,在创建批次主数据时一定要指定一个物料。
批次主数据有内部给号、外部给号两种编码方式,批次编号可以是数字和字符。在IMG路径 SPRO->后勤-常规->批次管理->批次编号的分配 下配置批次给号方式、编码范围和编码范围的程序出口,
SAP系统提供了四个批次编号范围的用户出口,增强为SAPLV01Z,
下面两个用户出口用于自动分配批次编号:
Ø EXIT_SAPLV01Z_001:
Ø EXIT_SAPLV01Z_002:
下面两个用户出口用于手工分配批次编号:
Ø EXIT_SAPLV01Z_003:
Ø EXIT_SAPLV01Z_004:
这四个用户出口的应用不做详细讨论,工作中遇到具体情况具体对待。
号码范围段的自定义出口。增强为 SAPLV01Z
SAPLV01Z 包括两个出口,分别是:EXIT_SAPLV01Z_001 和 EXIT_SAPLV01Z_002
1.复制生产订单号至批次号码上。
2.复制销售订单号至批次号码上。
3.批次号码按物料类型来分配。
4.批次号码按物料号码来分配。
1.2.3.4 可以通过 EXIT_SAPLV01Z_001来实现。
1.2.5.6 可以通过 EXIT_SAPLV01Z_002来实现。
DATA NUM(10) TYPE C.CLEAR:NUM.IF X_BNCOM-MTART = 'FERT'. CONCATENATE 'D' SY-DATUM+3(5) NEW_CHARG+6(4) INTO NUM. NEW_CHARG = NUM. ELSEIF X_BNCOM-MTART = 'ROH'. CONCATENATE 'R' SY-DATUM+3(5) NEW_CHARG+6(4) INTO NUM. NEW_CHARG = NUM.endif.可以按物料类型来。
实际项目案例:
通过批次增强出口,对于批次外部给号编写批次编码规则
增强出口程序:EXIT_SAPLV01Z_003.,EXIT_SAPLV01Z_004
每个工厂定义一套批次编码规则,编码规则为:年(4)+月(2)+日(2)+4位流水号,定义编码规则时存在下面两种情况:
1.根据工厂(MARC-WERKS)=“HD*”时编码规则为:年(4)+月(2)+日(2)+4位流水号,其中4位流水号要增加物料编码(MARC-MATNR)判断,查找该物料编码最新的批次号(MCHA-CHARG),再原批次号上面递增加1,如果4位流水号的编号为9999后下一个批次号就为0001开始。
2.其它工厂编码规则为:年(4)+月(2)+日(2)+4位流水号,流水号根据每天的日期自动从0001开始递增。
20120808新增:
在处理公司内调拨订单(Z009)入库(移动类型101)时,要求沿用原出库批次号,不能使用新的批次编号,此要求与目前正常采购订单入库时的批次增强存在冲突,所以需要调整目前收货时的批次增强逻辑,将订单类型为Z009的收货对应的自动产生批次逻辑屏蔽掉。
三、批次级别
每个物料主数据都通过一个由数字、或字母、或数字字母混合的编码进行标识,即物料编码,物料编码在集团级别唯一。
批次主数据与物料主数据一样,也需要一个编码来标识,即批次编码(或编号),批次编码有三个级别(level):集团级别、物料级别、工厂级别,你可以决定批次编码在哪个级别唯一。
在IMG路径 SPRO->后勤-常规->批次管理->指定批级别并激活状态管理 下配置批次级别,
下面是对各个批次级别的介绍:
若批次级别是集团级别和物料级别,批次分类类别都是023,批次数据主要存储在表MCH1;若批次级别是工厂级别,批次分类类别都是022,批次数据主要存储在表MCHA。后面批次的分类和特性中会用到。
如果系统在集团层级启用了批次管理,那么对于某个物料是否启用了批次管理,要检查MARA表的XCHPF字段,如果值为X,则说明启用了批次管理,如果值为空,则没有启用批次管理。
如果系统在工厂层级启用了批次管理,那么要检查MARC表的XCHAR字段,如果值为X,则说明启用了批次管理,如果值为空,则没有启用批次管理。
SAP系统批次默认的级别是工厂级别,批次级别可以由较低级别向较高级别转换,若向较低级别转换,只能由集团级别转换为物料级别(是因为集团级别和物料级别的批次数据表都是MCH1,关键字段一样),批次级别存入表TCUCH中,
批次级别之间的转换如下图所示:
如果不小心把批次级别设成了物料级别,或需求有变,就真的不能转换成工厂级别吗?当然不是,不过方法比较麻烦,方法来自SAP Notes:
Note 41715 - Resetting batch level from material to plant level
-
For all releases lower than Release 4.5B, implement the corrections and the modification in the report RM07CHDX as described in the correction instructions.
-
Create the report ZCHTCUCH, which is specified in the attachment.
-
Run this report in the clients for which you want to reset batch level to plant level.
-
Call transaction OMCT.
-
Check whether the batch level for “Batch unique at plant level” is set.
-
Implement Notes 821891, 944278, 950540 and 1091613 if you have not already done so (or you have not imported the corresponding Support Package).
-
Execute the function “Batch Level → Conversion”.
-
Define a plant for a plant view that may be missing.
-
Always execute the report in the test mode first. Analyze the error log.
-
If no errors occur, you can execute the report in production mode.
-
If you are working with batch long texts, first execute the report ZM07CHDX_TEXT in test mode.
附:
ZCHTCUCH源代码:
REPORT ZCHTCUCH.
TABLES: TCUCH.
SELECT * FROM TCUCH.
IF TCUCH-KZDCH NE ‘0’.
TCUCH-KZDCH = ‘0’.
UPDATE TCUCH.
WRITE:/ ‘TCUCH changed to plant-level’.
ELSE.
WRITE:/ ‘TCUCH already changed to plant-level’.
ENDIF.
ENDSELECT.
显示简略信息
相关程序:
RM07CHDX
RM07CHZX
四、批次分类
分类(Classification)是SAP系统中应用比较广泛的一个功能,首先需要了解一些相关的概念:类,对象,特性(属性),特性值,等等。
SAP系统中,有很多领域都用到了类,为了将各个领域、不同用途的类区分开,SAP系统提供了几十种类类别(class type),类类别是更高级别的控制类的单元,在系统中体现为该领域所用到的表的组合。例如,001物料分类,002设备分类,010供应商分类,022批次分类,023批次分类……
有关SAP系统分类(Classification)的详细内容,可查阅相关资料,接下来继续看批次分类是如何应用的。
Ø 用户定义特性:不参考系统表字段,手工指定特性的数据类型(字符格式、数字格式等),特征值存入表AUSP中。
Ø 参考特性:参考系统表字段,数据类型由参考的表字段决定,特征值除了存入表AUSP中,还会存入参考的表字段。
Ø 标准特性:SAP系统提供的特性。系统提供的批次相关的特性以LOBM_*开头。
使用事务代码CT04创建特性,创建时要为特性定义描述、数据类型、数据长度等内容,
如果要定义为参考特性,在“附加数据”分页下选择参考的表和字段,
使用事务代码CL01创建类,创建类时要为类分配类类别,创建批次类时要一般选择类类别023,
在“特性”分页下为该类分配用到的特性,
OK,到目前为止我有了包含5个特性的类ZYK001,创建分类和特性是为了使用,那么如何使用类呢?必须要有对象,如果没有对象,那么类就只是一个抽象的概念,而不能具体化。
物料主数据在SAP系统是一个非常重要的主数据,不仅体现在业务上,也体现在系统功能上,从分类的功能范围出发,物料主数据就可以进行分类,可以将建好的类分配给物料主数据,而且可以将类类别001物料分类和类类别023批次分类同时分配给物料主数据,这样物料主数据既有了物料分类的特性,又有了批次分类的特性。
上面说过批次主数据是依赖于物料主数据而存在的,将批次分类分配给物料主数据的目的还是为了将类分配给此物料下的批次主数据,接下来把批次分类ZYK001分配给物料和批次。
4.3分配批次分类给物料主数据
物料主数据有“分类”视图,在该视图下为物料主数据分配分类,指定类类别和类名称ZYK001,
给物料分配类后,在生成该物料的批次时, 系统自动将类ZYK001分配给该物料的批次主数据 ,每一个批次主数据相当于这个批次类的具体的对象,从而不用为每个批次主数据手工分配类,节省了大量时间。
每个物料在一个类类别下只能分配一个类,假如类类别下有类ZYK001和ZYK002,那么不能将ZYK001和ZYK002同时分配一个物料。
若不预先给物料分配批次分类,在收货时就无法给批次自动确定分类,系统给出消息:
这个消息说明在货物移动时要确定批次分类,可以在IMG后台配置中控制是否在货物移动时进行分类确定,路径: SPRO->后勤-常规->批次管理->批次评估->评估库存管理中的货物移动->激活IM中货物移动的批分类 。
4.4分配批次分类给批次主数据
可以为 批次主数据自动分配分类,也可以手工分配 。 自动分配的方式上面刚说了,就提前给物料分配批次分类,收货时批次自动确定分类。根据业务需要,也可以手工为批次主数据分配分类 。
事务代码:MSC2N,输入物料和批次,在分类视图下输入类ZYK001,
可以继续为批次的特性输入特征值。
现在我得到一个具体的对象:批次0000000517,这个对象属于分类ZYK001,并且这个对象的特性和特性值分别是:
特性 | 特性值 |
---|---|
到寿日期 | 2013.05.30 |
收货日期 | 2012.04.17 |
我的数字 | 11 |
我的货币 | 120.00 |
显示简略信息
特性与特性值存入表AUSP中,表MCH1与AUSP通过内部对象码(MCH1-CUOBJ_BM、AUSP-OBJEK)进行关联。可用函数QC01_BATCH_VALUES_READ读取物料批次的特性和特性值。
注:批次是否需要启用分类管理,视情况而定。
货架寿命、保质期
有些物资具有一定的保质期(比如食品、药品),根据企业的规定,已经过期的物资不得再收货入库,或者不允许领用出库、销售等,这类物资在SAP系统中可以通过货架寿命来进行管理。
通过下面两个步骤来要启用货架寿命管理:
物料主数据->工厂数据/存储1视图
总货架寿命 :可以输入,也可以不输入,这个值用来计算寿命到期日(失效日期)
最小剩余货架寿命 :如果总货架寿命输入了值,那么最小剩余货架寿命必须输入一个值,是指可以在货架(库房)中存放的距离寿命到期日最少的时间。例如,牛奶在距离失效日期前5天就不允许再食用,超市库管员收到一批牛奶时,还有3天就要失效了,那么该库管员不允许将该批牛奶入库。
时间单位 代表总货架寿命和最小剩余货架寿命对应的是天数,还是年数,还是月数。
物料是否进行到期日检查可以从工厂和移动类型两个维度进行控制,IMG配置路径: SPRO->后勤-常规->批次管理->货架寿命截止日期 (SLED)->设置到期日检查
或者, SPRO->物料管理->库存管理和实际库存->收货->设置到期日检查
工厂检查 :勾选要进行到期日检查的工厂
移动类型检查 :给进行到日期检查的移动类型选择检查方法
检查方法:
检查方法 | 入库是否检查到期日 | 出库是否检查到期日 |
---|---|---|
空 | 否 | 是 |
1 | 是 | 是 |
2 | 否 | 是 |
3 | 否 | 否 |
显示详细信息
设置好货架寿命后,收货时要求输入生产日期,系统计算出寿命到期日,寿命到期日也可以手工赋值。最近的收货日期、生产日期、寿命到期日存入物料凭证表和批次表中。其中最近的收货日期(也翻译成上一次收货日期)取凭证的过账日期。
货架寿命到期日检查原理如下图:
寿命到期日=生产日期(2012/12/1)+总货架寿命(10天)=2012/12/11
剩余货架寿命=寿命到期日(2012/12/11) - 收货日期(2012/12/8)=3天
3>2,目前剩余的货架寿命天数大于最小剩余货架寿命天数,所以允许入库。
上面讲述了收货对寿命到期日的检查,在“批次确定”小节继续出库时对寿命到期日的应用。
六、批次确定
随着企业的产品、原料的种类和数量不断增加,如何快捷的从这些众多的物品中找到满足相应条件的物品,成为企业越来越关注的问题。那么如何使用SAP系统解决这个问题?在使用批次管理的基础上,为每个批次定义属性,并制定对这些属性查找的规则,根据企业对不同批次的需求,按照相应的查找规则来查找满足条件的批次,这就是批次确定。
批次确定在IM、PP、SD、WM模块中都有应用,SAP系统中对于批次确定功能的系统配置路径是 SPRO->后勤-常规->批次管理->批次确定和批次检查
在“批次确定和批次检查”下对IM、PP、SD、WM的应用都有对应的配置方法,下面以IM应用为例。
了解了批次分类和货架寿命的应用,接下来就在货架寿命的基础上继续批次确定,看一下IM如何实现FIFO(先进先出)或FXFO(X:Expiration,先到期先出,我自己编的^_^)。
事例:有一牛奶销售子公司,从牛奶厂获得奶产品,再负责对外销售或内部员工领用,大家都知道牛奶的保质期比较短,牛奶公司要从牛奶的失效日期和入库日期两个维度对牛奶进行严格管理,公司首先考虑失效日期的先后,其次考虑入库日期的先后。库房里有几批牛奶,公司要求失效日期越靠前的先出库(FXFO),若失效日期一样,那么先到货的先出库(FIFO),即失效日期的优先级高于收货日期。
实现上述需求,在SAP系统需要用到条件技术、批次分类、货架寿命等功能,做过PO定价策略的朋友应该对条件技术不陌生,这里将用到查找策略。
若要通过条件技术的查找策略准确的查找到满足条件的批次,首先要为物料批次定义准确的特性和货架寿命。第四章和第五章讲述了创建批次分类、为物料分配批次分类、创建并分配特性、寿命检查,在此不再赘述,直接看结果,假设牛奶在系统中有三个批次的库存,下图是通过BIC显示的库存结果:
本事例要通过货架寿命到期日和收货日期来查找批次,那么我就将货架寿命到期日和收货日期作为批次分类的特性,批次特性如下表所示:
批次分类 | 特性 | 说明 | 参考字段 |
---|---|---|---|
ZYK_MILK_001 | ZMM_MILK_SLED | 货架寿命到期日 | MCH1-VFDAT |
ZMM_MILK_GRDATE | 最近的收货日期 | MCH1-LWEDT |
显示简略信息
根据事例的FXFO、FIFO出库要求,三个批次的出库顺序应该如下表所示:
顺序 | 物料 | 批次 | 寿命到期日 | 收货日期 |
---|---|---|---|---|
1 | 580000002 | 0000000618 | 2012.05.14 | 2012.04.24 |
2 | 580000002 | 0000000620 | 2012.05.16 | 2012.04.25 |
3 | 580000002 | 0000000619 | 2012.05.16 | 2012.04.26 |
显示详细信息
接下来就是通过条件技术的查找策略来实现上面的出库要求了。涉及的系统设置包括:条件表(Condition Tables)、访问队列(Access Sequences)、策略类型(Strategy Types)、查找过程(Search Procedure)、排序规则(Sort Rules)、选择类(Selection Classes)、查找策略(Search Strategy)。
1) 条件表Condition Tables
条件表是批次查找策略用到的字段的组合,系统提供了编号从000到500的标准的条件表,若要创建条件表,编号要从501开始。用于批次查找的标准条件表如下:
系统提供的字段有:供应商、客户、工厂、库存地点、物料、物料类型、物料组、特殊库存、移动类型。从这些字段中选取用作查找条件的字段组合成一个条件表,例如,移动类型/工厂,移动类型/工厂/物料,工厂/物料等。
在这里,我选取移动类型、工厂、物料作为条件,那么可以使用条件表024。
2) 访问队列Access Sequences
也翻译为访问顺序,可以理解为按照一个什么顺序来访问哪些条件表。系统提供了几个访问顺序,ME01如下图所示,依次访问条件表24、23、22、21、20,在查找批次时按照这个顺序直到找到满足条件的数据为止。可以根据自己的需要在访问顺序中添加或删除要访问的条件表。
3) 排序规则Sort Rules
按照上面一堆的条件查找到批次后,可以定义一个排序的规则,用来建议用户优先选择哪个批次,此处通过批次的特性来对批次进行排序。本事例考虑牛奶的到寿日期和到货日期两个特性,排序规则如下:
由于先考虑到寿日期,再考虑到货日期,所以特性ZMM_MILK_SLED放在上面;另外,这两个日期都是越靠前的越先出库,所以都选择升序进行排列。下面要将排序规则分配给策略类型。
4) 选择类Selection Classes
如果批次分类包含了10个8个特性,但是用于批次查找策略的就两个特性,那么可以新建一个分类,将这两个特性分配给新建的类,这个新建的类就是选择类。在这个事例中批次分类就两个特性,所以我就直接把批次分类ZYK_MILK_001当做选择类,下面要将选择分配给策略类型。
5) 策略类型Strategy Types
策略类型是一种查找批次的策略、规则,由访问队列(Access Sequences)、选择类(Selection Classes)、排序规则(Sort Rules)组成,下图所示是这次创建的策略类型:
6) 查找过程Search Procedure
查找过程是策略类型的组合,系统按照查找过程中的顺序读取每个策略类型,得到最后的结果。
定义查找过程后,要将查找过程分配给移动类型。
7) 查找策略Search Strategy
系统中可能会存在多个策略类型、多个访问队列、多个查找过程,那么如何确定某个出库业务使用哪种策略类型、哪个访问队列、哪个查找过程呢?这里要为每种业务分配一种查找策略,使用事务代码MBC1创建查找策略,
选中策略类型ZSTR,点击“关键字组合”按钮,系统根据分配给策略类型ZSTR的访问队列ME01,再根据分配给访问队列ME01的条件表得到关键字组合:
从中选择一个组合,例如选择“移动类型/工厂/物料”,
输入移动类型201、工厂9510、物料580000002,再指定选择标准,这里可以更改排序规则,保存。这样,在出库时,如果满足“移动类型=201、工厂=9510、物料=580000002”,就会根据查找策略ZSTR来确定批次。
完成了上面的设置之后,按照移动类型=201、工厂=9510、物料=580000002的条件进行出库,这里使用事务代码MB1A,在批次字段输入*(如果是MIGO,点击 按钮),回车得到批次查找的结果如下图,结果满足本事例对牛奶的出库要求。
最后,批次查找原理可以总结为下图:
七、分割评估
Valuation,评估也翻译为估价,即计算价值,在这里指的是计算存货价值,SAP系统通过公式“ 存货价值 =存货数量×价格 ”来计算存货价值,分割评估(Split Valuation)就是分别按照这个公式计算价值。分割评估不是批次范畴的概念,而是针对物料价值来说的,按照批次分割评估是物料分割评估中的一种。
既然提到评估(valuation),就有必要了解一下跟评估有关的概念,评估涉及到评估级别(level)、评估范围(area)、评估类别(category)、评估类型(type)等内容。
评估级别level 定义了是在公司级别评估还是在工厂级别评估。
评估范围area: 若评估级别选择了公司级,那么每个公司都是一个评估范围area;如果评估级别选择了工厂级,那么每个工厂就是一个评估范围。
评估类别category :对于某些物料,在一个评估范围内area,不同存货可能要进行分别评估,例如不同的原产地、不同的颜色、不同的状态等等,通过评估类别category来定义物料是按照哪种方式进行分别评估。
评估类型type: 为物料定义了评估类别后,还要针对该评估类别定义不同的评估类型type,可理解为子存货(substock),物料在每个评估类型(子存货)下进行分别评估。
下图说明了按照“ 评估类别 category:颜色” 进行分别评估的结构及原理:
SAP系统表MBEW存储评估数据,上图事例工厂9510的存货在表中存储如下图:
每当白色评估类型数量和价值发生变化时,就会更新表MBEW中“580000019 9510 白色”这个行项目的数据,黑色同理。无论物料是否分割评估,维护会计视图后,都会生成一条估价抬头记录(创建物料会计视图时,让组织级别评估类型为空,维护的就是估价抬头记录),估价抬头记录是对某一评估范围下所有评估类型的累计,所以任何一个评估类型存货发生变化时,不但更新该评估类型对应的行项目,还要更新估价抬头记录。例如,白色的存货数量增加5个后MBEW变为:
了解了分割评估,接下来继续看按照批次分割评估(valuation for single batch)。按照批次分割评估(X自动批量)是一种特殊的评估类别,该评估类别没有指定评估类型,而是把每个批次当做一个评估类型,也就是物料每个批次下分别计算价值。
按照批次分割评估首先必须要启用批次管理,这样可以记录每次收货的价值,每次增加一个新批次存货,就会在MBEW表中增加一条记录。
若物料启用分割评估,每个评估类型既可以使用移动平均价,也可以使用标准价,而估价抬头记录(物料主数据的组织级别为空时的会计视图)是各个评估类型的累计,举个例子:
一个物料MAT_001有两个评估类型X和Y,那么MAT_001的总存货价值和价格计算如下:
总价值 = X的价格X的数量 + Y的价格Y的数量
价格 = 总价值 / 总数量 = (X价格X数量 + Y价格Y数量)/(X数量 + Y数量)
从公式可以看出,物料抬头记录的价格是随着评估类型变化的,所以必须采用移动平均价。
从000 Client 复制特征到当前客户端:BMSM