MM-批次管理(04)-批次主数据之货架寿命到期检查的应用Shelf Life Expiration Check

一、货架寿命管理的业务背景

 

货架寿命管理,是SAP针对物料有效期管理的一种方式。其目的,就是为了明确库存中物料是否在有效期内,或者距离失效还有多长时间。之所以在批次管理部分讲解这部分内容,是因为货架寿命管理一般与批次管理共同使用,在批次管理的配合使用下,货架寿命管理功能才能真正达到寿命管理的目的。

 

当我们启用批次管理后,针对每一个批次,我们都能确定其使用寿命或者有效期,在我们使用库存物料时,我们就能够实现根据使用寿命的不同,去确定不同批次物料的出库次序,或者确定哪些批次的物料,已经超过有效期无法使用。

二、货架寿命管理的原理介绍

 

SAP为物料的寿命管理,或者叫有效期管理,设置了两个重要的参数:  总货架寿命和最小剩余货架寿。

其中:

总货架寿命:就是物料本身的有效期,也可以理解为物料的终身寿命。比如,我们常见在某些商品上见到的有效期180天,其中,这个180天就可以理解为总货架寿命。有了总货架寿命,当我们输入生产日期后,就可以计算出到期日期。

即存在该公式:到期日期=生产日期+总货架寿命

最小货架寿命:实际上是指当物料被送货至某企业时,该企业希望该物料至少剩余的寿命。比如,某物料总货架寿命是180天,从生产出来那天起,经过包装运输等,送到该企业时,已经过了30天,那么,截至收货当天,剩余的寿命是150天。而这个150天,就是该物料此时此刻的剩余货架寿命。假定,该企业的最小货架寿命为160天,即该物料送到该企业时,至少还有160天的收货有效期,那么依据上述举例中,物料剩余150天的有效期,并不满足企业要求160天的剩余寿命,因此,将不能收货。如果企业设置的最小货架寿命为140天,则在上述举例中,是允许收货的。

即存在该公式条件:当“物料的最小货架寿命≤物料的到期日期 - 当前收货日期”成立的前提下,才能收货。

注意1:此处,物料的到期日期 - 当前收货日期,实际上就是,该物料在当前能收货时,还剩余的寿命。

注意2:当前收货日期,在SAP中收货时,系统会取收货的过账日期,作为当前收货日期,用以此公式的计算。

 由于“到期日期=生产日期+总货架寿命”,因此,当 “物料的最小货架寿命 ≤ 生产日期+总货架寿命- 当前收货日期”成立时,系统允许收货,否则,不行。 

所以,在SAP系统中:

首先,需要在物料主数据中设定“总货架寿命、最小货架寿命”;

其次,在收货时输入该批次物料的生产日期,以及当前收货日期(系统过账日期),

系统就能够判断该物料是否允许被收货。 

以上就是SAP关于货架寿命管理的主要逻辑。

 

三、SAP货架寿命管理功能的系统操作

四、SAP货架寿命管理功能的相关配置

 

详细内容请大家,在我的个人公众号中查看:

https://mp.weixin.qq.com/s/u2DGkkNPZ5FGbYAasV53HA

~~~~~~~~~~~~~这篇内容就到这儿吧,我们下篇见~~~~~~~~~~~~~~~

才疏学浅,能力有限,如果大家发现问题,还请批评指正。

愿大家的学习,轻松且愉快。

如果大家觉得有用,希望转发关注,谢谢。

<think>我们正在处理一个关于SAPBAPI的查询,用户希望找到用于修改批次货架寿命的BAPI。根据用户的问题,他提到了两种可能的BAPI:BAPIGoodsMovement或BAPIMaterialShelfLifeManagement。首先,我们需要理解批次货架寿命(BatchShelfLife)的管理SAP中是如何实现的。批次货架寿命通常与物料的批次特性相关,存储在批次主记录中。因此,修改批次货架寿命可能涉及修改批次主数据。回顾提供的引用:引用[4]提到了批次(Batch)相关的BAPI,包括:-BAPI_BATCH_CREATE:创建批次-BAPI_BATCH_CHANGE:更改批次-BAPI_BATCH_GET_DETAIL:获取批次详细信息其中,BAPI_BATCH_CHANGE就是用于更改批次的BAPI,它应该可以用于修改批次的属性,包括货架寿命。另外,用户提到了BAPIGoodsMovement,这通常用于货物移动(如收货、发货、转移过账等),但货物移动的BAPI(如BAPI_GOODSMVT_CREATE)主要用于库存操作,而不是直接修改批次主数据。不过,在某些情况下,货物移动可能会触发批次主数据的更新(例如,在收货时指定批次货架寿命),但直接修改现有批次货架寿命应该使用批次更改的BAPI。此外,用户还提到了“BAPIMaterialShelfLifeManagement”。在SAP中,货架寿命管理ShelfLifeManagement)通常是通过批次特性来管理的,因此修改批次特性就可以达到修改货架寿命的目的。因此,我们可以推断,修改批次货架寿命的BAPI应该是BAPI_BATCH_CHANGE。接下来,我们需要确认BAPI_BATCH_CHANGE的使用方法。根据引用[2]和[3],建议在SE37中测试BAPI以了解其参数。BAPI_BATCH_CHANGE的参数结构:-BATCH:批次的关键字(物料号、批次号、工厂等)-BATCHX:指示哪些字段需要更新(X表示更新)-GOODSMLAN:货架寿命到期日(GoodsShelfLifeExpirationDate)?注意:在批次主数据中,货架寿命通常用两个字段表示:到期日EXPIRATION_DATE)和货架寿命SHELF_LIFE)。具体使用哪个字段取决于配置。在SAP中,批次主数据到期日存储在表MCH1-EXPDT(或MCH1-HSDAT)中。而货架寿命(以天为单位)通常存储在批次特性中(如果使用批次特性管理的话)。因此,我们需要区分:1.如果用户要修改的是批次到期日ExpirationDate),那么可以使用BAPI_BATCH_CHANGE,直接修改EXPDT字段(在参数BATCH中设置EXPDT,在BATCHX中设置EXPDT为X)。2.如果用户要修改的是货架寿命ShelfLifeinDays),那么它可能是批次的一个特性(Characteristic),此时需要使用批次特性更新的BAPI,如BAPI_OBJCL_CHANGE(更改分类数据)或BAPI_BATCH_CHANGE(如果批次特性通过扩展字段映射到批次主数据,但通常不直接映射)。但是,在标准批次主数据中,到期日EXPIRATION_DATE)是直接存储的,而货架寿命(天数)通常不是直接存储在批次主表中,而是通过分类系统(Classification)管理的特性。因此,修改货架寿命可能需要同时修改批次主数据到期日,或者修改批次特性。因此,我们需要明确用户的需求:-如果是修改到期日,使用BAPI_BATCH_CHANGE修改EXPDT字段。-如果是修改货架寿命(天数),那么需要更新批次特性。这可能需要使用分类相关的BAPI,如BAPI_OBJCL_CHANGE。然而,在SAP中,货架寿命到期日ExpirationDate)和货架寿命ShelfLife)是两个不同的概念。到期日是固定的日期,而货架寿命是从生产日期开始计算的天数。通常,系统会根据生产日期和货架寿命自动计算到期日。因此,修改货架寿命可能需要重新计算到期日。考虑到复杂性,我们通常建议直接修改到期日。如果用户确实需要修改货架寿命(天数),那么可能需要:1.获取批次的生产日期(通常存储在批次主数据中,字段HSDAT)。2.根据新的货架寿命重新计算到期日(生产日期+货架寿命天数)。3.使用BAPI_BATCH_CHANGE更新到期日。或者,如果货架寿命是作为批次特性管理的,那么可以使用分类BAPI更新特性值。但是,根据引用[4]列出的批次BAPI,BAPI_BATCH_CHANGE是用于更改批次主数据的,而批次特性通常不包含在批次主数据中。因此,对于批次特性的更改,我们需要使用分类BAPI。因此,结如下:1.如果修改批次到期日ExpirationDate):使用BAPI_BATCH_CHANGE,设置BATCH-EXPDT为新的到期日,BATCHX-EXPDT='X'。2.如果修改批次货架寿命ShelfLifeinDays):-如果货架寿命批次主数据中的字段(但标准SAP批次主数据中并没有直接存储货架寿命天数字段,通常存储到期日),那么无法直接修改。-如果货架寿命批次特性,则使用分类BAPI(BAPI_OBJCL_CHANGE)更新该特性值。然而,用户的问题中提到了“BAPIforupdatingbatchshelflife”,结合SAP标准功能,批次货架寿命通常是指到期日ExpirationDate),因为到期日直接决定了批次是否过期。所以,我们重点介绍使用BAPI_BATCH_CHANGE修改到期日。使用BAPI_BATCH_CHANGE的步骤:1.准备批次关键字:需要物料(MATERIAL)、批次号(BATCH)、工厂(PLANT)等。2.在BATCH结构中设置要修改的字段(例如EXPDT),在BATCHX结构中设置对应的修改标志(例如EXPDT='X')。3.调用BAPI_BATCH_CHANGE。4.检查返回消息,如果成功则提交事务(使用BAPI_TRANSACTION_COMMIT)。示例代码(ABAP):```abapDATA:lt_batch_dataTYPEbapibatch,lt_batchxTYPEbapibatchx,lt_returnTYPETABLEOFbapiret2.lt_batch_data-material='物料号'.lt_batch_data-batch='批次号'.lt_batch_data-plant='工厂'.lt_batch_data-expdt='到期日'."格式为YYYYMMDDlt_batchx-material='X'.lt_batchx-batch='X'.lt_batchx-plant='X'.lt_batchx-expdt='X'.CALLFUNCTION'BAPI_BATCH_CHANGE'EXPORTINGbatch_data=lt_batch_databatch_datax=lt_batchxTABLESreturn=lt_return.READTABLElt_returnWITHKEYtype='E'.IFsy-subrc=0."有错误,处理错误ELSE.CALLFUNCTION'BAPI_TRANSACTION_COMMIT'EXPORTINGwait='X'.ENDIF.```注意:在调用BAPI后,必须检查返回消息。如果没有错误,则提交事务,否则回滚。如果用户需要修改的是批次特性(货架寿命天数),那么需要使用分类BAPI。但是,由于批次特性依赖于配置,不同的客户可能配置不同的特性名,因此需要先确定特性名。使用分类BAPI更新批次特性的步骤:1.获取批次的对象键(ObjectKey):批次的对象键格式为'<物料号><批次号><工厂>'(例如:00000000010000000001)。2.使用BAPI_OBJCL_GETDETAIL获取批次的分类数据,找到要修改的特性(例如特性名为SHELF_LIFE)。3.使用BAPI_OBJCL_CHANGE更新特性值。示例代码(ABAP):```abapDATA:lt_allocvaluesnumTYPETABLEOFbapi1003_alloc_values_num,lt_allocvaluescharTYPETABLEOFbapi1003_alloc_values_char,lt_allocvaluescurrTYPETABLEOFbapi1003_alloc_values_curr,lt_returnTYPETABLEOFbapiret2."设置要修改的特性(假设为数值型特性)DATA(ls_allocvaluesnum)=VALUEbapi1003_alloc_values_num(charact='SHELF_LIFE'"特性名value_from='365'"新的货架寿命天数).APPENDls_allocvaluesnumTOlt_allocvaluesnum."调用BAPI修改分类CALLFUNCTION'BAPI_OBJCL_CHANGE'EXPORTINGobjectkey='批次对象键'"批次的对象键objecttable='MCH1'"批次主数据表classnum='批次分类'"批次分类号(可选,如果已知)classtype='023'"批次分类类型(023表示批次分类)TABLESallocvaluesnum=lt_allocvaluesnumallocvalueschar=lt_allocvaluescharallocvaluescurr=lt_allocvaluescurrreturn=lt_return.READTABLElt_returnWITHKEYtype='E'.IFsy-subrc=0."有错误,处理错误ELSE.CALLFUNCTION'BAPI_TRANSACTION_COMMIT'EXPORTINGwait='X'.ENDIF.```注意:使用分类BAPI需要知道批次的对象键和分类信息,这可能需要先调用其他BAPI(如BAPI_BATCH_GET_DETAIL)来获取。由于用户的问题更倾向于批次主数据的修改,我们首先推荐使用BAPI_BATCH_CHANGE修改到期日。如果用户确实需要修改货架寿命天数(作为特性),那么再使用分类BAPI。因此,回答用户的问题:用于修改批次货架寿命到期日)的BAPI是BAPI_BATCH_CHANGE。如果修改的是货架寿命天数(作为批次特性),则使用BAPI_OBJCL_CHANGE。根据引用[2]和[3],建议在SE37中测试这些BAPI,以确保参数正确。生成相关问题:1.如何使用BAPI_BATCH_CHANGE修改批次到期日?2.如何通过分类BAPI修改批次特性?3.在SAP中,批次货架寿命到期日货架寿命天数有什么区别?4.调用BAPI后为什么数据没有更新到数据库?如何提交事务?注意:用户的问题中提到了“BAPIGoodsMovement”,但货物移动的BAPI通常用于创建货物移动(如收货、发货),在收货时可以为批次指定到期日(例如,在收货时通过BAPI_GOODSMVT_CREATE的ITEM_DATA中的EXPIRY_DATE字段设置)。但是,这仅适用于在收货时设置,而不适用于修改已存在的批次。因此,对于修改已存在批次货架寿命,我们不使用货物移动BAPI。最终回答如下:</think>### SAP中修改批次货架寿命的BAPI使用方法 在SAP中修改批次货架寿命(Batch Shelf Life)主要通过**批次主数据管理**实现,核心BAPI是 **`BAPI_BATCH_CHANGE`**。货架寿命通常存储在批次主数据的**到期日Expiration Date)**字段或**分类特性**中,具体方法如下: --- #### 方法1:通过批次主数据修改到期日(推荐) 使用 `BAPI_BATCH_CHANGE` 直接更新批次主数据到期日EXPIRATION_DATE),这是最常用的方式: ```abap DATA: lt_batch_data TYPE bapibatch, "批次数据 lt_batchx TYPE bapibatchx, "修改标志位 lt_return TYPE TABLE OF bapiret2. "返回消息 " 设置修改内容 lt_batch_data-material = 'MAT001'. "物料号 lt_batch_data-batch = 'BATCH001'. "批次号 lt_batch_data-plant = '1000'. "工厂 lt_batch_data-expdt = '20241231'. "新到期日 (YYYYMMDD) " 标记需修改的字段 lt_batchx-material = 'X'. "物料号必填 lt_batchx-batch = 'X'. "批次号必填 lt_batchx-plant = 'X'. "工厂必填 lt_batchx-expdt = 'X'. "标记到期日需更新 CALL FUNCTION 'BAPI_BATCH_CHANGE' EXPORTING batch_data = lt_batch_data batch_datax = lt_batchx TABLES return = lt_return. " 提交事务 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ``` **关键点**: 1. **EXPIRATION_DATE(EXPIRY_DATE)**:直接控制货架寿命到期日期。 2. **必填字段**:物料、批次号、工厂必须提供并标记修改(X)。 3. **事务提交**:必须调用 `BAPI_TRANSACTION_COMMIT` 写入数据库[^2][^3]。 --- #### 方法2:通过分类特性修改(适用于配置了特性管理) 若货架寿命存储在批次特性中(如特性名 `SHELF_LIFE`),需使用分类BAPI: ```abap " 1. 获取批次对象键 DATA(lv_objectkey) = |{ material }{ batch }{ plant }|. " 2. 更新特性值 CALL FUNCTION 'BAPI_OBJCL_CHANGE' EXPORTING objectkey = lv_objectkey "批次对象键 objecttable = 'MCH1' "批次主数据表 classnum = 'BATCH_CLASS' "批次分类号 classtype = '023' "批次分类类型 TABLES allocvaluesnum = lt_values_num "数值型特性值 return = lt_return. " 提交事务 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. ``` --- #### ⚠️ 注意事项 1. **BAPI选择**: - **`BAPI_BATCH_CHANGE`**:直接修改批次主数据,适用于到期日更新。 - **`BAPI_OBJCL_CHANGE`**:修改批次特性,需提前配置分类体系。 - **货物移动BAPI(如 `BAPI_GOODSMVT_CREATE`)**:仅适用于**收货时初始化**货架寿命无法修改现有批次[^1]。 2. **前置条件**: - 批次主数据必须存在(可通过 `BAPI_BATCH_GET_DETAIL` 验证)。 - 工厂需启用批次管理。 3. **测试工具**: - 使用事务码 **`SE37`** 测试BAPI参数逻辑,避免程序报错[^2][^3]。 --- #### 相关SAP表 | 表名 | 描述 | 关键字段 | |-------|---------------|-------------------| | `MCH1` | 批次主数据 | MATNR, CHARG, HSDAT(生产日期), VFDAT(到期日) | | `AUSP` | 特性值 | OBJEK, ATINN, ATWRT | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值