ERP项目有这样一个场景:
我们需要在SAP_ALL全部的授权中,只拿掉BASIS相关和SPRO后台配置入口的权限,剩下99%的权限给关键用户使用。
我们需要在10万个事务代码中,把BASIS的几个TC和SPRO按分段剔除出来。
下面程序就帮助得到剔除后的TC分段。这个神操作就是我的BASIS终极授权。
剔除的事务代码:
SCC1
SCC4
SCC7
SCC8
SCC9
SPRO
PFCG
SU01
SU01D
SU01_NAV
SU01_OLD
SU02
SU03
SU05_OLD
SU1
SU10
SU10_OLD
SU12
SU2
SU20
SU20_BTCH
SU21
SU22
SU22_HISTORY
SU22_OLD
SU24
SU24_HISTORY
SU24_OLD
SU24_S_TABU_NAM
SU25
SU25_2A_SEL
SU25_OLD
SU26
SE09
SE10
SE11
SE15
SE16
SE16N
SE18
SE19
SE20
SE21
SE24
SE30
SE32
SE37
SE38
SE39
SE80
程序运行后得到分段:
我们从SAP_ALL参数文件,拷贝而来的新的keyuser复合参数文件的构成:
1、拿掉了标准的&_SAP_ALL_22这一个。(S/4 HANA 1809这版,S-TCODE对象藏在这个里面)
2、按&_SAP_ALL_22的170个权限对象,我们新建一个角色ZSAP_ALL22,加入这170个对象
3、对其中的S-TCODE对象,是用户的事务代码,我们填入程序算出的分段。
4、角色ZSAP_ALL22生成参数文件DV300004加到ZKEYUSER复合参数文件中。
5、把ZKEYUSER参数文件加给用户,完成一个关键用户的权限授权。
********************************************************************
* 获得事物代码分段
* 功能:获得,去除不需要的事物代码后的事物代码分段,BASIS授权使用
* 作者:刘欣 Power By James All Rights Reserved.
* 2014-6-28 潍柴项目
********************************************************************REPORT ZBA_R005 .*定义str_code结构
TYPES : BEGIN OF str_code,item LIKE agr_tcodes-tcode,END OF str_code.*定义str_code2结构
TYPES : BEGIN OF str_code2,low LIKE agr_tcodes-tcode,high LIKE agr_tcodes-tcode,END OF str_code2.*定义big内表
DATA big TYPE STANDARD TABLE OF str_code WITH HEADER LINE .
*定义min内表
DATA min TYPE STANDARD TABLE OF str_code WITH HEADER LINE .*定义out内表
DATA out TYPE STANDARD TABLE OF str_code2 WITH HEADER LINE .*定义用户输入的不好的事物代码
DATA divcode LIKE agr_tcodes-tcode.*//--------------定义SELECTION SCREEN----------------------
SELECTION-SCREEN BEGIN OF BLOCK block_body WITH FRAME.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN COMMENT /1(57) t1 .
SELECTION-SCREEN SKIP 2.
SELECT-OPTIONS: div_itab FOR divcode NO INTERVALS.
SELECTION-SCREEN END OF BLOCK block_body.*//--------------INITIALIZATION------------------
INITIALIZATION.t1 = '获得事物代码分段报表'.*//-------------AT SELECTION-SCREEN--------------------------AT SELECTION-SCREEN.START-OF-SELECTION.*取出11万个事物代码
SELECT TCODE INTO TABLE big FROM TSTC.Sort BIG BY ITEM. “2019.11.21 宝汽项目添加*按照坏代码换成haha
LOOP AT div_itab.LOOP AT big.IF big-item EQ div_itab-LOW.big-item = 'haha'.MODIFY big .ENDIF.ENDLOOP.ENDLOOP.*按haha为界分段,取每小段的第一个和最后一个代码。LOOP AT big.IF big-item <> 'haha'.APPEND big-item to min.AT LAST.READ TABLE min INTO out-low INDEX 1.READ TABLE min INTO out-high INDEX lines( min ).APPEND out.CLEAR min[].ENDAT.ELSE.AT END OF item.READ TABLE min INTO out-low INDEX 1.READ TABLE min INTO out-high INDEX lines( min ).APPEND out.CLEAR min[].ENDAT.ENDIF.ENDLOOP.*输出结果perform listshow.end-OF-SELECTION.*//-------form listshow-----------------form listshow.DATA:G_REPID TYPE SY-REPID,IT_EVENTS TYPE SLIS_T_EVENT,IT_FIELD TYPE SLIS_T_FIELDCAT_ALV,WA_FIELD TYPE SLIS_FIELDCAT_ALV,IT_SORT TYPE SLIS_T_SORTINFO_ALV.
*
*G_REPID = SY-REPID.********宏定义.DEFINE ADD_FIELD.WA_FIELD-FIELDNAME = &1.WA_FIELD-REPTEXT_DDIC = &2.WA_FIELD-NO_ZERO = 'X'.WA_FIELD-outputlen = 25. "列宽APPEND WA_FIELD TO IT_FIELD.END-OF-DEFINITION.ADD_FIELD 'low' '分段下限'. "注意这里low要同内表的字段一致ADD_FIELD 'high' '分段上限'.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGI_CALLBACK_PROGRAM = G_REPIDI_BACKGROUND_ID = 'ALV_BACKGROUND'
* I_GRID_TITLE = ' 用户权限查询'IT_FIELDCAT = IT_FIELD
* IS_LAYOUT = GS_LAYOUT
* IT_SORT = IT_SORTI_SAVE = 'A'IT_EVENTS = IT_EVENTS[]TABLEST_OUTTAB = outEXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.endform.