PP生产订单的BADI增强 WORKORDER_UPDATE

博客介绍了在PP生产订单中,通过BADI WORKORDER_UPDATE 的BEFORE_UPDATE实现保存时检查工单BOM是否存在相同物料号的行项目。如果存在重复,则提示错误信息并阻止保存。作者遇到问题,尽管尝试了增强,但在实际应用中仍导致错误和业务界面报错,寻求合适解决方案。
我们的项目需求是:

1、 保存时检查工单BOM是否存在物料号相同的行项目,如果有则提示“物料& 重复,请检查工单BOM 系统增强出口:PPCO0001,检查组件行项目是否有重复物料项

开始以为的增强增强看一下是用PPCO0001还是PPCO0007

后来找到了badi WORKORDER_UPDATE

IF_EX_WORKORDER_UPDATE~BEFORE_UPDATE


    DATA:BEGIN OF N

<think>我们正在讨论ABAP中LE_SHP_DELIVERY_UPDATE BADI增强实现方法。根据引用内容,我们可以看到两个相关的代码片段: 引用[1]展示了方法`if_ex_le_shp_delivery_update~update_item`的实现,其中根据条件更新了行项目的库存地点(lgort)。 引用[2]展示了另一个BADI(LE_SHP_TAB_CUST_ITEM)的实现,用于在交货单行项目上添加自定义标签页。 用户的问题是关于LE_SHP_DELIVERY_UPDATE BADI增强。这个BADI主要用于在交货单更新时执行自定义逻辑。下面我将详细解释如何使用这个BADI。 步骤1:创建BADI实现 使用事务码SE18或SE19来创建BADI LE_SHP_DELIVERY_UPDATE的实现。 步骤2:实现接口方法 该BADI有两个主要方法: - `IF_EX_LE_SHP_DELIVERY_UPDATE~INITIALIZE_DELIVERY`:在创建交货单时初始化调用。 - `IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_ITEM`:在交货单行项目更新时调用。 我们重点看`UPDATE_ITEM`方法。在引用[1]中,我们看到一个例子:在方法中检查条件,然后更新行项目的库存地点。 步骤3:编写增强逻辑 在UPDATE_ITEM方法中,我们可以访问以下参数: - `IS_LIPS`:当前行项目的数据 - `IS_LIPS_OLD`:更新前的行项目数据 - `IS_VBPOK`:包含更新控制信息(如移动类型、库存地点等) - `CS_LIPS`:用于修改行项目的数据(注意:只能修改BADI允许的字段) 示例代码(基于引用[1]): ```abap METHOD if_ex_le_shp_delivery_update~update_item. " 如果is_vbpok-lgort不为空,则更新行项目的库存地点 IF is_vbpok-lgort IS NOT INITIAL. cs_lips-lgort = is_vbpok-lgort. ENDIF. ENDMETHOD. ``` 步骤4:激活实现 编写代码后激活该实现。 注意事项: - 在UPDATE_ITEM方法中,只能更新某些允许的字段。通常,这些字段包括库存地点(LGORT)、批次(CHARG)等。具体可修改字段请参考SAP标准文档。 - 注意性能:由于该BADI在交货单更新时调用,因此增强逻辑应尽可能高效。 另外,引用[2]提到了另一个BADI:LE_SHP_TAB_CUST_ITEM。它用于在交货单行项目界面添加自定义标签页。如果用户需要屏幕增强,可以同时考虑这个BADI。 总结:LE_SHP_DELIVERY_UPDATE BADI主要用于在交货单更新过程中修改行项目数据。通过实现其UPDATE_ITEM方法,我们可以根据业务需求调整行项目的某些字段。 生成相关问题: 1. LE_SHP_DELIVERY_UPDATE BADIUPDATE_ITEM方法允许修改哪些字段? 2. 如何结合使用LE_SHP_DELIVERY_UPDATE和LE_SHP_TAB_CUST_ITEM进行交货单的增强? 3. 在LE_SHP_DELIVERY_UPDATE中如何调试增强代码? </think> ### ABAP中LE_SHP_DELIVERY_UPDATE BADI增强实现方法 在ABAP中,`LE_SHP_DELIVERY_UPDATE` BADI用于在交货单更新时执行自定义业务逻辑。以下是实现步骤和关键方法: #### 1. **BADI激活与实现** - 使用事务码`SE18`创建BADI实现: ```abap " 创建实现名称(例如:ZIM_LE_SHP_DELIVERY_UPDATE) ``` - 激活实现并绑定到`LE_SHP_DELIVERY_UPDATE` BADI定义。 #### 2. **核心方法:`UPDATE_ITEM`** 在方法`IF_EX_LE_SHP_DELIVERY_UPDATE~UPDATE_ITEM`中修改行项目数据: ```abap METHOD if_ex_le_shp_delivery_update~update_item. " 示例:更新库存地点(需检查允许修改的字段) IF is_vbpok-lgort IS NOT INITIAL. " 引用[1] cs_lips-lgort = is_vbpok-lgort. " 修改行项目库存地点 ENDIF. " 可扩展逻辑(如更新自定义字段) IF cs_lips-zz_custom_field IS INITIAL. cs_lips-zz_custom_field = 'DEFAULT_VALUE'. ENDIF. ENDMETHOD. ``` **参数说明**: - `is_vbpok`:包含更新控制信息(如移动类型、库存地点) - `cs_lips`:行项目数据,可直接修改允许字段 #### 3. **字段修改限制** - 仅允许修改特定字段(如`LGORT`、`CHARG`等),需参考SAP标准文档 - 禁止修改关键字段(如交货数量、物料号) #### 4. **屏幕增强集成** 若需添加自定义字段到交货单界面,需结合BADI `LE_SHP_TAB_CUST_ITEM`: ```abap METHOD if_ex_le_shp_tab_cust_item~activate_tab_page. ef_caption = '自定义数据'. " 标签页标题 ef_position = '20'. " 显示位置 ef_program = 'SAPLZFGSD'. " 自定义函数组 引用[2] ef_dynpro = '9100'. " 屏幕编号 cs_v50agl_cust = 'X'. " 激活标志 ENDMETHOD. ``` > **注意**:需在屏幕`9100`中处理自定义字段的输入输出逻辑 #### 5. **调试与测试** - 使用事务码`VL02N`触发交货单更新 - 在`UPDATE_ITEM`方法中设置断点 - 检查`cs_lips`修改后的值是否写入数据库 #### 6. **注意事项** - **权限检查**:在增强中添加权限对象校验 - **性能优化**:避免复杂循环,批量处理数据 - **兼容性**:验证是否与标准逻辑冲突(通过`is_lips_old`比较旧值) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值