SAP中如何查看BOM的修改记录呢?

本文介绍两种在SAP系统中查询物料清单(BOM)变更记录的方法:一是使用SE38事务代码执行RCS00100,查看特定用户的所有BOM创建、修改、删除记录;二是通过SE11或SE12事务代码,结合CDHDR和CDPOS表,精确查询BOM Header和Item级别的变更详情。

方案一:se38:RCS00100,F8执行(DATUM表示开始日期,tabname:BOM的Header,填写STKO;如落实到item级别,填写STPO)。然后再执行即可看到00104708该用户所做得创建,修改,删除bom得所有记录(哈哈很简单把,我也觉得很简单,而且结果确实看到了,我所做得关于bom得每一笔数据,测试成功!)

方案二:se11/se12:CDHDR【CDHDR是记录Header层面的Change,CDPOS记录item级别的Change】(实用程序-表内容-显示)

 

第一步:SE12,Table=CDHDR,Table Contents。字段选择如下填写: 

Change doc. object=STUE(排他性的) 

Date:起止日期,自己确定,日期段落越大,运行时间越长 

Transaction:CS02(除了CS02变更BOM之外,我想不出还有什么删除BOM的方法) 

Appl.obj.change:U(只能是U,但我本人也很迷惑为什么删除了的BOM不能是D)执行。系统将显示有关的记录,记录下有关的Object value的号码。 

 

第二步:SE12,Table=CDPOS,Table Contents。字段选择如下填写: 

Change doc. object=STUE(排他性的) 

Object Value:从第一步获得 

Table name:STPO(排他性的) 

Change ID:D,U反映的是item值的新旧对比记录

concatenate sy-mandt 'M' itab_bom-stlnr into objectid.
  clear itab_cdhdr.
  refresh itab_cdhdr.
  clear change_data.
  refresh change_data.

  CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
      EXPORTING
        DATE_OF_CHANGE    = '00000000'
        OBJECTCLASS       = 'STUE'
        OBJECTID          = objectid
        TIME_OF_CHANGE    = '000000'
        USERNAME          = ''
      TABLES
        I_CDHDR           = ICDHDR
      EXCEPTIONS
        NO_POSITION_FOUND = 1
        OTHERS            = 2.

  if icdhdr[] is not initial.
    loop at icdhdr where udate >= s_erdat-low.
      itab_cdhdr-objectclas = icdhdr-objectclas.
      itab_cdhdr-objectid = icdhdr-objectid.
      itab_cdhdr-changenr = icdhdr-changenr.
      itab_cdhdr-udate = icdhdr-udate.
      append itab_cdhdr.

      CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'
        EXPORTING
          CHANGENUMBER      = ICDHDR-CHANGENR
*          TABLEKEY          = TABKEY
          TABLENAME         = 'STPO'
        IMPORTING
          HEADER            = CDHDR
        TABLES
          EDITPOS           = ICDSHW
       EXCEPTIONS
         NO_POSITION_FOUND = 1
         OTHERS            = 2.
*
*    select objectclas objectid changenr tabname tabkey fname chngind
*           value_new value_old from cdpos into table change_data
*     where objectclas = 'STUE' and objectid = bom_temp-objectid
*       and tabkey = bom_temp-tabkey and tabname = 'STPO' and
*           ( fname = 'IDNRK' or fname = 'MENGE' or fname = 'KEY' ).

     if icdshw[] is not initial.
       loop at icdshw.
         MOVE itab_cdhdr-objectclas  TO change_data-objectclas.
         MOVE itab_cdhdr-objectid  TO change_data-objectid.
         MOVE itab_cdhdr-changenr  TO change_data-changenr.
         MOVE itab_cdhdr-udate TO change_data-udate.
         MOVE ICDSHW-TABNAME TO change_data-tabname.
         MOVE ICDSHW-TABKEY TO change_data-tabkey.
         MOVE ICDSHW-FNAME TO change_data-fname.
         MOVE ICDSHW-F_OLD TO change_data-value_old.
         MOVE ICDSHW-F_NEW TO change_data-value_new.
         MOVE ICDSHW-CHNGIND TO change_data-chngind.
         APPEND change_data.
       endloop.
     endif.
    endloop.
  endif.

 

<think>我们正在处理一个关于SAP系统中BOM(物料清单)管理的问题。用户想知道如何查找修改BOM抬头的增强点。根据提供的引用,我们可以总结如下:引用[1]提到了使用BAPI`CSAP_MAT_BOM_MAINTAIN`来修改BOM抬头,但需要搭配`CALO_INIT_API`使用。引用[2]介绍了使用事务代码CEWB批量修改BOM,包括抬头信息。引用[3]则提到了一个BADI(BusinessAdd-In)`BOM_UPDATE`,用于在BOM创建或修改时增强,例如检查重复组件。引用[4]展示了生产订单抬头参数变更时自动刷新工序字段的增强示例。因此,针对修改BOM抬头的增强点,我们可以从以下几个方面考虑:1.**使用BADI(业务增强)**:SAP提供了标准的BADI用于BOM的创建和修改。例如,引用[3]提到的`BOM_UPDATE`就是用于BOM更新时的增强。我们可以在这个BADI中实现自定义逻辑,比如在修改BOM抬头时进行校验或自动填充某些字段。2.**用户出口(UserExit)**:除了BADI,SAP还可能提供用户出口。用户出口是SAP预先留好的空子程序,用户可以在其中添加自定义代码。不过,在BOM管理方面,BADI更为常见。3.**隐式增强点**:如果标准程序中没有显式的增强点(如BADI或用户出口),我们还可以考虑使用隐式增强点。隐式增强点可以在程序、函数组、屏幕等位置插入自定义代码。4.**BAPI或函数模块的增强**:如果修改BOM抬头是通过BAPI或函数模块进行的(如引用[1]中的`CSAP_MAT_BOM_MAINTAIN`),我们可以查看这些函数模块是否有增强点(例如,使用函数模块出口或BADI)。具体到查找修改BOM抬头的增强点,我们可以按照以下步骤进行:###步骤1:确定修改BOM抬头的标准事务代码修改BOM抬头的标准事务代码通常是CS01(创建)、CS02(修改)。因此,我们可以从这些事务代码的程序中查找增强点。###步骤2:查找BADI使用事务代码SE18(或者SE19测试实现),查找与BOM相关的BADI。根据引用[3],`BOM_UPDATE`是一个直接的BADI,它可以在BOM保存前或保存后执行自定义逻辑。这个BADI的方法包括:-`Check_Item`:用于检查项目数据-`Change_At_Save`:在保存时修改数据-`Post_Delete`:删除后处理-`Post_Save`:保存后处理我们可以在`Change_At_Save`方法中编写代码来修改或检查BOM抬头数据。###步骤3:查找用户出口使用事务代码SMOD和CMOD查找用户出口。与BOM相关的用户出口可能包括:-`CS000001`(BOM处理:用户出口)-`CS000002`(BOM处理:项目检查)-等等###步骤4:隐式增强点如果上述增强点都不满足需求,我们可以考虑隐式增强点。使用事务代码SE38打开程序,然后通过菜单“编辑”->“增强操作”->“显示隐式增强选项”来查找可以插入代码的位置。对于BOM修改,相关程序可能包括:-`SAPLCSDI`(BOM维护的对话模块)-`SAPLCSD`(BOM维护)在程序`SAPLCSDI`中,我们可以关注`MODULE``EXIT_SAPLCSDI_XXX`,其中XXX是三位数字,这些通常是用户出口。另外,我们也可以查找程序中的隐式增强点,例如在`PBO`(ProcessBeforeOutput)和`PAI`(ProcessAfterInput)模块中。###步骤5:在BAPI中增强如果修改是通过BAPI进行的,我们可以检查BAPI是否有增强点。例如,在`CSAP_MAT_BOM_MAINTAIN`中,我们可以查找是否有BADI或出口。通常,BAPI内部可能会调用BADI,或者我们可以通过查找函数组中的增强点来实现。###示例:使用BADIBOM_UPDATE根据引用[3],我们可以在BADI`BOM_UPDATE`中实现检查重复组件的逻辑。同样,我们可以在这个BADI中修改BOM抬头数据。例如,在方法`CHANGE_AT_SAVE`中,我们可以访问抬头数据并进行修改。实现步骤:1.使用SE19创建BADI`BOM_UPDATE`的实现(Implementation)。2.在方法`CHANGE_AT_SAVE`中编写代码。该方法有一个参数`IS_STKO`,它包含了BOM抬头的数据。我们可以修改这个结构的内容来改变BOM抬头。3.激活实现。注意:在修改`IS_STKO`时要小心,确保不破坏原有逻辑。###总结要查找修改BOM抬头的增强点,我们首先应该考虑标准BADI`BOM_UPDATE`。如果这个BADI不能满足需求,再考虑用户出口或隐式增强点。另外,根据修改BOM抬头的方式(通过事务代码CS02还是BAPI),我们可能需要针对不同的程序位置进行增强。下面,我们将根据上述分析生成相关问题。</think>### 如何在 SAP 中查找修改 BOM 抬头的增强点 在 SAP 系统中,修改 BOM 抬头的增强点主要通过 **BADI(Business Add-In)** 实现。以下是具体方法和关键增强点: --- #### 1. **标准 BADI:`BOM_UPDATE`** 这是最直接的增强点,专用于 BOM 创建/修改(CS01/CS02)时的校验和更新[^3]。 **实现步骤**: - 事务码 `SE18` 查找 BADI `BOM_UPDATE` - 在方法 `CHECK_ITEM` 或 `CHANGE_AT_SAVE` 中编写逻辑 - **可操作抬头字段**:通过参数 `IS_STKO` 访问 BOM 抬头数据 ```abap METHOD if_ex_bom_update~change_at_save. " 修改抬头字段示例:更改 BOM 描述 is_stko-bom_text = '新BOM描述'. ENDMETHOD. ``` --- #### 2. **隐式增强点:BOM 维护程序** 若 BADI 不满足需求,可在标准程序添加隐式增强: - **程序名**:`SAPLCSDI`(BOM 维护主程序) - **关键子程序**: - `SAVE_BOM`(保存逻辑) - `BO_HEADER_MAINTAIN`(抬头处理) **操作步骤**: 1. 事务码 `SE38` 打开程序 `SAPLCSDI` 2. 通过菜单路径 **编辑 → 增强 → 增强点** 插入自定义代码 --- #### 3. **BAPI 增强点** 若通过 BAPI `CSAP_MAT_BOM_MAINTAIN` 修改(引用[1]),可增强: - 函数组 `CNAL01` 中的子例程 - 在调用 BAPI 前/后添加校验逻辑 --- ### 关键注意事项 1. **字段权限**: BOM 抬头字段(如替代 BOM、有效期)需在 `STKO` 表结构中确认技术名称[^1][^3]。 2. **变更记录**: 修改抬头时需提供变更编号 (`AENNR`),确保变更记录可追溯[^1]。 3. **批量修改**: 使用事务码 `CEWB` 批量修改时,增强逻辑需兼容批量处理场景[^2]。 --- ### 操作示例:通过 BADI 检查重复组件 ```abap METHOD if_ex_bom_update~check_item. " 检查新组件是否已存在 LOOP AT it_stpo ASSIGNING FIELD-SYMBOL(<ls_stpo>). IF <ls_stpo>-idnrk = is_new_item-idnrk. MESSAGE e001(zbom) WITH '组件已存在'. " 自定义错误消息 ENDIF. ENDLOOP. ENDMETHOD. ``` > **提示**:激活增强后需测试事务码 `CS02` 的修改流程,确保逻辑触发且不影响标准功能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值