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.
原创声明:转载或引用请务必@SAP蛋妞 Daniel-胡莲舟