金色传说:SAP-ABAP-创建预留增强:将销售订单号和行项目写入RESB的行项目中

本文介绍了如何通过增强BAPI_RESERVATION_CREATE1解决预留单中销售订单和行项目统一问题,通过SE19创建增强实施,实现按单生产物料的预留区分,尽管RKPF表仍受限,但不影响预留过账与库存管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


问题场景

RESB预留行项目和RKPF预留抬头中都有销售订单号和销售订单行项目号字段,但是BAPI:BAPI_RESERVATION_CREATE1创建预留时,只能向抬头结构reservationheader-sales_ord和reservationheader-s_ord_item写入销售订单号和行项目,这就导致,创建的预留不管有多少行,最终所有的行的销售订单号和行项目都是一个,不能分成多个销售订单。


一、解决方法

对BAPI:BAPI_RESERVATION_CREATE1进行增强

二、增强步骤

1.SE19创建增强实施

在这里插入图片描述
代码如下(示例):

    DATA:aufnr TYPE afpo-aufnr.
    LOOP AT resb ASSIGNING FIELD-SYMBOL(<fs>).
      aufnr = <fs>-wempf.
      aufnr = |{ aufnr ALPHA = IN }|.
      "判断是否为按单生产的物料
      SELECT SINGLE strgr INTO @DATA(ds_strgr) FROM marc WHERE matnr = @<fs>-matnr AND werks = '8000'.
      IF ds_strgr EQ '50' OR ds_strgr EQ 'Z2'.
      "根据生产订单号取销售订单号,行号
      SELECT SINGLE kdauf,kdpos  FROM resb WHERE aufnr = @aufnr AND kdauf IS NOT INITIAL INTO @DATA(ds_eno).
      "写入RESB行项目
      <fs>-kdauf = ds_eno-kdauf.
      <fs>-kdpos = ds_eno-kdpos.
      ENDIF.
    ENDLOOP.

2.预留产生

在这里插入图片描述
这样,产生出的预留单就分开销售订单行了。

三、遗留问题

预留区分了行,但是RKPF表中还是只能存在一个销售订单行,但是不影响系统的预留过账,扣减对应的销售订单库存和产生物料凭证。

<think>好的,我现在需要回答用户关于在SAP中对生产订单创建增强的方法及实现方式的问题。根据用户提供的引用资料,我需要整理出相关的信息,并确保回答结构清晰,符合用户的要求。 首先,用户提到的Enhancement方法在引用5中有详细说明,其中提到了四代增强方式查找方法。特别是创建Enhancement Spot使用SE18、SE19的步骤。这可能涉及到用户出口(User Exits)、BADI(Business Add-Ins)以及隐式增强(Implicit Enhancement)等技术。 接下来,引用4提到了生产订单保存时的增强点PPCO0007,使用函数MODX_FUNCTION_ACTIVE_CHECK来检查是否激活。这说明在CO02事务代码中,保存生产订单时有特定的增强点可以利用,比如通过EXIT_SAPLCORO_001这样的出口。 另外,用户可能需要在生产订单创建过程中传递增强字段的值,如引用3中提到的计划订单转生产订单时,增强字段的传值问题。这里可能需要通过RESB表查询计划订单组件,并在转换时处理增强字段的数据。 还有,引用2中提到的AET工具虽然主要用于CRM,但可能对生产订单的界面增强有参考价值,比如创建下拉菜单字段,但需要确认是否适用于生产订单模块。 现在需要将以上信息整合成一个结构化的回答,分步骤说明Enhancement的方法实现方式,并确保每个步骤都有对应的引用支持。同时,要检查是否需要代码示例,如用户提供的示例中有Python代码,但SAP增强通常使用ABAP,所以可能需要ABAP代码片段。 还需要注意用户提到的系统级指令,比如数学公式的格式,但在这个问题中可能不涉及数学公式,所以可以忽略。但需要确保使用正确的LaTeX格式,如果遇到变量或代码等,按规则处理。 然后,生成相关问题,需要根据回答内容提出三个相关问题,帮助用户进一步了解该主题。 最后,确保引用标记正确放置在相关段落的末尾,如引用[^5],[^4]等。</think>在SAP中对生产订单创建增强的实现方法及步骤如下: ### 一、SAP生产订单增强的常见方法 1. **用户出口(User Exits)** - 通过预定义的程序出口(如`EXIT_SAPLCORO_001`)插入自定义逻辑。例如,在生产订单保存时(事务代码CO02)使用增强点`PPCO0007`,通过函数`MODX_FUNCTION_ACTIVE_CHECK`检查增强是否激活。 - 实现步骤: - 使用事务码`CMOD`创建增强项目- 绑定预定义出口(如`COOP0001`用于生产订单相关增强)。 - 在出口函数中编写ABAP代码,实现字段校验、数据传递等逻辑。 2. **BADI(Business Add-Ins)** - 通过定义BADI实现动态增强。例如,使用`WORKORDER_UPDATE` BADI拦截生产订单创建或修改事件。 - 实现步骤: - 事务码`SE18`创建或查找现有BADI。 - 事务码`SE19`实现BADI接口,编写增强逻辑(如更新批次特性值[^4])。 3. **隐式增强(Implicit Enhancement)** - 在标准程序预留的隐式增强点插入代码。例如,在函数模块`BAPI_PRODUCTIONORD_CREATE`中添加字段校验。 - 实现步骤: - 使用事务码`SE80`打开标准程序,定位隐式增强点。 - 通过`Enhancement Implementation`插入自定义逻辑。 --- ### 二、增强字段传递的实现 若需将计划订单的增强字段传递至生产订单(如引用[^3]的场景): 1. **数据来源**:计划订单组件存储在表`RESB`中,通过计划订单号(`PLNUM`)关联。 2. **增强实现**: - 在计划订单转生产订单的增强点(如`MD_SET_MATERIAL_FOR_PRODUCTION`)中,通过`RESB`表获取增强字段值。 - 使用`MOVE-CORRESPONDING`或直接赋值,将值写入生产订单结构(如`AUFK`或`AFPO`扩展字段)。 ```abap " 示例:从RESB表获取增强字段并赋值 DATA: lt_resb TYPE TABLE OF resb, lv_zfield TYPE zcustom_field. SELECT * FROM resb INTO TABLE lt_resb WHERE plnum = lv_plnum. IF sy-subrc = 0. lv_zfield = lt_resb[1]-zfield. " 假设zfield为增强字段 " 将lv_zfield写入生产订单结构 ENDIF. ``` --- ### 三、界面增强与权限控制 1. **屏幕字段增强** - 使用`Screen Painter`(事务码`SE51`)在生产订单创建界面(如事务码CO01)添加自定义字段。 - 通过`ENHANCEMENT-SECTION`在标准屏幕中插入自定义字段[^5]。 2. **权限检查** -增强代码中加入权限对象校验(如`AUTHORITY-CHECK`),确保仅特定角色可操作。例如,引用[^1]中为PPARCHP1程序添加权限检查。 --- ### 四、增强部署与测试 1. **注册增强容器** - 使用事务码`SE18`创建Enhancement Spot(以`Z`开头),并将增强实现绑定到容器。 2. **激活与传输** - 通过事务码`SE10`将增强对象纳入传输请求,确保系统间一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EasyStudios

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值