本文的主要目的是实现采购订单价格信息维护以及估价标识维护的权限控制,并保证估价订单行项目不能够做发票校验。
1. 创建权限对象zpuordcon,用来进行订单价格信息维护和估价标识维护的权限检查
2. 在function group V69A的屏幕6201的PBO的MODULE
FELDAUSWAHL中找到user exit userexit_field_modification,插入如下代码:
AUTHORITY-CHECK OBJECT ‘ZPUORDCON’
ID ‘ACTVT’ FIELD ‘16′.
CHECK sy-subrc <> 0.
IF SCREEN-INPUT = ‘1′.
SCREEN-INPUT = ‘0′.
ENDIF.
但用户没有权限时,将可输入的字段改为不可输入
同样在屏幕6201的PAI MODULE:kondition_pruefen中找到user exit:userexit_pricing_check加入如下代码:
AUTHORITY-CHECK OBJECT ‘ZPUORDCON’
ID ‘ACTVT’ FIELD ‘16′.
CHECK sy-subrc <> 0.
MESSAGE E832(ZBRIL).
当用户没有权限是,如果用户在价格条件的table control中输入值时则报error message。
3. 在函数组MEGUI的屏幕1325中,双击module event_pbo,然后双击call_view的method handle event然后双击method PBO,然后双击method:initi_control,加入如下代码:
IF sy-dynnr = ‘1325′.
LOOP AT SCREEN.
IF SCREEN-NAME = ‘MEPO1325-SCHPR’.
AUTHORITY-CHECK OBJECT ‘ZPUORDCON’
ID ‘ACTVT’ FIELD ‘16′.
IF sy-subrc <> 0.
SCREEN-INPUT = ‘0′.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF. 当用户没有估价标志的维护权限时,则将其改为不可输入。
通过创建项目,激活增强LMR1M004,在其中加入如下代码:
IF TAB_DRSEG-SELKZ = ‘X’ AND TAB_DRSEG-SCHPR = ‘X’.
MESSAGE e831(zbril) WITH TAB_DRSEG-ebeln TAB_DRSEG-ebelp
TAB_DRSEG-MATNR.
ENDIF.
当用户对估价的订单行项目做发票校验时,则会报error message,发票校验无法通过。曾经尝试通过badi INVOICE_UPDATE的CHANGE_BEFORE_UPDATE来校验,但是这样的报error message后就会退出失误,不够理想,故改为使用customer exit的方式。不过可以在badi INVOICE_UPADATE的CHANGE_AT_SAVE中加入下面代码校验:
method IF_EX_INVOICE_UPDATE~CHANGE_AT_SAVE.
DATA: wa_mrmrseg LIKE LINE OF ti_rseg_new,
flag TYPE c,
v_schpr TYPE schpr.
LOOP AT ti_rseg_new INTO wa_mrmrseg.
SELECT SINGLE schpr INTO v_schpr
FROM ekpo
WHERE ebeln = wa_mrmrseg-ebeln AND
ebelp = wa_mrmrseg-ebelp.
IF v_schpr = ‘X’.
flag = ‘X’.
EXIT.
ENDIF.
ENDLOOP.
IF flag = ‘X’.
MESSAGE e831(zbril) WITH wa_mrmrseg-ebeln wa_mrmrseg-ebelp.
ENDIF.
endmethod.