SAP EAM:资产报废同步更新设备状态

在EAM系统的设计中,有时用户会要求在固资报废时,自动同步设备的用户状态。这个需求也合理,那怎么处理呢?

首先确定固资报废的Tcode只有一个,比如要求固定资产报废只能使用ABAVN。

接下来就该找增强出口或BADI,经测试设备与资产联动的用户出口不满足条件,找到AINT0002-出入流水中冲销帐户的替代 可以满足条件,但这个是在凭证的行项目循环,虽然对效率没有什么影响,但是可能会对一个代码强迫症患者来说会很难受。

接下来还是以这个增强出口为例说明。

1.CMOD建立增强项目,分配增强组件;

2.在EXIT_SAPLAPCF_006下的include中编写增强逻辑;

增强逻辑简述:

(1)获取程序SAPLAMDPS2I结构RAIFP2的运行值,检查资产号不能为空 <lfs_raifp2>-anln1

(2)判断是否部分报废(这里以报废金额和报废比例字段来判断),部分报废不同步设备用户状态;

(3)根据资产号和公司代码,在表ILOA、EQUZ、EQUI的关联中(或视图V_EQUI)取设备对象号EQUI-OBJNR;

(4)调用函数STATUS_CHANGE_EXTERN更改设备用户状态;

代码示例:

 1 DATA: lv_field(30) TYPE c VALUE '(SAPLAMDPS2I)RAIFP2'.
 2 FIELD-SYMBOLS: <lfs_raifp2> TYPE raifp2.
 3 
 4 ASSIGN (lv_field) TO <lfs_raifp2>.
 5 CHECK sy-subrc = 0.
 6 CHECK <lfs_raifp2>-anln1 IS NOT INITIAL.
 7 CHECK <lfs_raifp2>-anbtr = 0 AND ( <lfs_raifp2>-prozs = 100 OR <lfs_raifp2>-prozs = 0 ).
 8 SELECT DISTINCT c~objnr
 9   INTO TABLE @DATA(lt_equi)
10   FROM iloa AS a INNER JOIN equz AS b
11     ON a~iloan = b~iloan
12    AND b~datbi = '99991231'
13  INNER JOIN equi AS c
14     ON b~equnr = c~equnr
15  WHERE a~bukrs = @<lfs_raifp2>-bukrs
16    AND a~anlnr = @<lfs_raifp2>-anln1
17    AND c~objnr <> ''.
18 
19 CHECK sy-subrc = 0.
20 
21 LOOP AT lt_equi INTO DATA(ls_equi).
22 
23   CALL FUNCTION 'STATUS_CHANGE_EXTERN'
24     EXPORTING
25       objnr               = ls_equi-objnr
26       user_status         = 'E0004'
27     EXCEPTIONS
28       object_not_found    = 1
29       status_inconsistent = 2
30       status_not_allowed  = 3
31       OTHERS              = 4.
32   IF sy-subrc <> 0.
33 * Implement suitable error handling here
34   ENDIF.
35 
36 ENDLOOP.

 

posted @ 2021-01-18 16:35  SAP蛋妞  阅读(527)  评论(0编辑  收藏  举报