* * This program displays the redundant authorizations of the user who runs it. * It reads the data from the user buffer, locates the redundant authorizations * (more then one authorization for an object) and displays them with the fields * names and field values. * REPORT ZREDUNDA. TABLES: TOBJT. DATA: OBJECT1 LIKE USR12-OBJCT, OBJECT2 LIKE USR12-OBJCT, OBJECT3 LIKE USR12-OBJCT, AUTH1 LIKE USR12-AUTH, AUTH2 LIKE USR12-AUTH, AUTH3 LIKE USR12-AUTH, IND LIKE SY-INDEX, FLAG TYPE I. DATA: BEGIN OF INTTAB OCCURS 30, OBJECT LIKE USR12-OBJCT, AUTH LIKE USR12-AUTH, END OF INTTAB. DATA: BEGIN OF INTTAB2 OCCURS 30, OBJECT LIKE USR12-OBJCT, AUTH LIKE USR12-AUTH, EXPL LIKE TOBJT-TTEXT, END OF INTTAB2. DATA: BEGIN OF TABSET OCCURS 30, SFIELD LIKE TOBJ-FIEL1, VON(18), BIS(18), END OF TABSET. *read up the authorizations from the user buffer CALL 'ANALYSE_USERBUFFER' ID 'AUTHS' FIELD INTTAB-*SYS*. *filter out the multipy authorizatios of the same object SORT INTTAB BY OBJECT. DO. IF SY-INDEX = 1. OBJECT1 = ''. AUTH1 = ''. READ TABLE INTTAB INDEX 1. OBJECT2 = INTTAB-OBJECT .AUTH2 = INTTAB-AUTH. READ TABLE INTTAB INDEX 2. OBJECT3 = INTTAB-OBJECT.AUTH3 = INTTAB-AUTH. ELSE. OBJECT1 = OBJECT2. AUTH1 = AUTH2. READ TABLE INTTAB INDEX SY-INDEX. OBJECT2 = INTTAB-OBJECT .AUTH2 = INTTAB-AUTH. IND = SY-INDEX + 1. READ TABLE INTTAB INDEX IND. IF SY-SUBRC = 0. OBJECT3 = INTTAB-OBJECT.AUTH3 = INTTAB-AUTH. ELSE. OBJECT3 = ''. AUTH3 = ''. IF OBJECT2 = OBJECT1 OR OBJECT2 = OBJECT3. INTTAB2-OBJECT = OBJECT2. INTTAB2-AUTH = AUTH2. SELECT SINGLE * FROM TOBJT WHERE LANGU = SY-LANGU AND OBJECT = OBJECT2. INTTAB2-EXPL = TOBJT-TTEXT. ENDIF. EXIT. ENDIF. ENDIF. IF OBJECT2 = OBJECT1 OR OBJECT2 = OBJECT3. INTTAB2-OBJECT = OBJECT2. INTTAB2-AUTH = AUTH2. SELECT SINGLE * FROM TOBJT WHERE LANGU = SY-LANGU AND OBJECT = OBJECT2. INTTAB2-EXPL = TOBJT-TTEXT. APPEND INTTAB2. ENDIF. ENDDO. SORT INTTAB2 BY OBJECT AUTH. *display the authorization and description, the objects, fields and *field values FLAG = 0. OBJECT1 = ''. LOOP AT INTTAB2. IF OBJECT1 = INTTAB2-OBJECT. WRITE: / INTTAB2-AUTH COLOR 2. PERFORM FIELD_VALUES. LOOP AT TABSET. WRITE: / TABSET-SFIELD, TABSET-VON, TABSET-BIS. ENDLOOP. ELSE. SKIP. WRITE: / INTTAB2-OBJECT COLOR 3, INTTAB2-EXPL COLOR 3. PERFORM FIELD_VALUES. WRITE: / INTTAB2-AUTH COLOR 2. LOOP AT TABSET. WRITE: / TABSET-SFIELD, TABSET-VON, TABSET-BIS. ENDLOOP. ENDIF. OBJECT1 = INTTAB2-OBJECT. ENDLOOP. *---------------------------------------------------------------------* * FORM FIELD_VALUES * *---------------------------------------------------------------------* * retrieve the field values of an authorization * *---------------------------------------------------------------------* FORM FIELD_VALUES. TABLES: USR12. FIELD-SYMBOLS. DATA: INTFLAG TYPE I VALUE 0, OFF TYPE I, VTYP, LNG TYPE I, CLNG(2), GLNG(2), FLDLNG TYPE I VALUE 10, SETFILL. SELECT SINGLE * FROM USR12 WHERE AUTH = INTTAB2-AUTH AND OBJCT = INTTAB2-OBJECT AND AKTPS = 'A'. SETFILL = 0. REFRESH TABSET. CLEAR TABSET. OFF = 2. ASSIGN USR12-VALS+OFF(1) TO . WRITE TO VTYP. WHILE VTYP <> ' ' AND OFF < USR12-LNG. OFF = OFF + 1. CASE VTYP. WHEN 'F'. OFF = OFF + 5. ASSIGN USR12-VALS+OFF(2) TO . WRITE TO CLNG. LNG = CLNG. IF LNG <= 0. EXIT. ENDIF. OFF = OFF + 2. ASSIGN USR12-VALS+OFF(FLDLNG) TO . WRITE TO TABSET-SFIELD. OFF = OFF + FLDLNG. WHEN 'E'. ASSIGN USR12-VALS+OFF(LNG) TO . WRITE TO TABSET-VON. IF TABSET-VON = SPACE. TABSET-VON = ''' '''. ENDIF. APPEND TABSET. SETFILL = SETFILL + 1. TABSET-VON = SPACE. TABSET-BIS = SPACE. OFF = OFF + LNG. WHEN 'G'. ASSIGN USR12-VALS+OFF(2) TO . WRITE TO CLNG. GLNG = CLNG. OFF = OFF + 2. ASSIGN USR12-VALS+OFF(LNG) TO . IF INTFLAG = 0. WRITE TO TABSET-VON. WRITE '*' TO TABSET-VON+GLNG. ELSE. WRITE TO TABSET-BIS. WRITE '*' TO TABSET-BIS+GLNG. INTFLAG = 0. ENDIF. APPEND TABSET. SETFILL = SETFILL + 1. TABSET-VON = SPACE. TABSET-BIS = SPACE. OFF = OFF + LNG. WHEN 'V'. INTFLAG = 1. ASSIGN USR12-VALS+OFF(LNG) TO . WRITE TO TABSET-VON. IF TABSET-VON = SPACE. TABSET-VON = ''' '''. ENDIF. OFF = OFF + LNG. WHEN 'B'. INTFLAG = 0. ASSIGN USR12-VALS+OFF(LNG) TO . WRITE TO TABSET-BIS. IF TABSET-BIS = SPACE. TABSET-BIS = ''' '''. ENDIF. APPEND TABSET. SETFILL = SETFILL + 1. TABSET-VON = SPACE. TABSET-BIS = SPACE. OFF = OFF + LNG. ENDCASE. ASSIGN USR12-VALS+OFF(1) TO . WRITE TO VTYP. ENDWHILE. ENDFORM.