Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Roles comparing helps

Former Member
0 Likes
618

Hi guys,

could somebody tell me how to compare 2 roles?

I want to check authorization difference between 2 roles.

Thanks,

James

1 ACCEPTED SOLUTION
Read only

dhruv_shah3
Active Contributor
0 Likes
585

Hi,

Use the below program and enter the role name in the selection screen...

Execute the program in different sessions and then compare it.



*&---------------------------------------------------------------------*
*& Report  Z_MASTER_DERIVED
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_MASTER_DERIVED LINE-SIZE 175.

TABLES :AGR_1016.

TYPES: BEGIN OF TY_AGR_1016,
          AGR_NAME TYPE AGR_1016-AGR_NAME,
          COUNTER TYPE AGR_1016-COUNTER,
          PROFILE TYPE AGR_1016-PROFILE,
          VARIANT TYPE AGR_1016-VARIANT,
      END OF TY_AGR_1016,

       BEGIN OF TY_AGR_TEXTS,
          AGR_NAME TYPE AGR_TEXTS-AGR_NAME,
          SPRAS TYPE AGR_TEXTS-SPRAS,
          TEXT TYPE AGR_TEXTS-TEXT,
      END OF TY_AGR_TEXTS,

       BEGIN OF TY_AGR_DEFINE,
          AGR_NAME TYPE AGR_DEFINE-AGR_NAME,
          PARENT_AGR TYPE AGR_DEFINE-PARENT_AGR,
       END OF TY_AGR_DEFINE,

       BEGIN OF TY_DR_COUNT,
          AGR_NAME TYPE AGR_DEFINE-AGR_NAME,
          COUNT TYPE I,
       END OF TY_DR_COUNT,

       BEGIN OF TY_AGR_TCODES,
         AGR_NAME TYPE AGR_TCODES-AGR_NAME,
         TCODE TYPE AGR_TCODES-TCODE,
         TCODE_COMP TYPE TSTCT-TCODE,
       END OF TY_AGR_TCODES,

       BEGIN OF TY_TSTCT,
        SPRSL TYPE TSTCT-SPRSL,
        TCODE TYPE TSTCT-TCODE,
        TTEXT TYPE TSTCT-TTEXT,
      END OF TY_TSTCT,

      BEGIN OF TY_AGR_1252,
        AGR_NAME TYPE AGR_1252-AGR_NAME,
        VARBL TYPE AGR_1252-VARBL,
        LOW TYPE AGR_1252-LOW,
        HIGH TYPE AGR_1252-HIGH,
        DESC(30)  TYPE C,
        VARBL_DISP TYPE AGR_1252-VARBL,
        AGR_NAME_DISP TYPE AGR_1252-AGR_NAME,
     END OF TY_AGR_1252,

     BEGIN OF TY_USVART,
          LANGU TYPE USVART-LANGU, "LANGUAGE KEY
          VARBL TYPE USVART-VARBL,
          VTEXT TYPE USVART-VTEXT, "DESCRIPTION
     END OF TY_USVART,

      BEGIN OF TY_AGR_1250,
        AGR_NAME TYPE AGR_1250-AGR_NAME,
        OBJECT TYPE AGR_1250-OBJECT,
        AUTH TYPE AGR_1250-AUTH,
        ATEXT TYPE AGR_1250-ATEXT,
      END OF TY_AGR_1250,

       BEGIN OF TY_AGR_1251,
          AGR_NAME TYPE AGR_1251-AGR_NAME,
          OBJECT TYPE AGR_1251-OBJECT,
          AUTH TYPE AGR_1251-AUTH,
          FIELD TYPE AGR_1251-FIELD,
         LOW TYPE AGR_1251-LOW,
         HIGH  TYPE AGR_1251-HIGH,
      END OF TY_AGR_1251,

       BEGIN OF TY_AUTHX,
         ROLLNAME TYPE AUTHX-ROLLNAME,
       END OF TY_AUTHX,

        BEGIN OF TY_DD04T,
          ROLLNAME TYPE DD04T-ROLLNAME,
          DDLANGUAGE TYPE DD04T-DDLANGUAGE,
          DDTEXT TYPE DD04T-DDTEXT,
        END OF TY_DD04T,

          BEGIN OF TY_SFINAL,
         OBJ_DISP TYPE AGR_1250-OBJECT,
           ATEXT_DISP TYPE AGR_1250-ATEXT,
         DDTEXT_DISP(80) TYPE C,
        END OF TY_SFINAL,

        BEGIN OF TY_FINAL_DATA,
          OBJECT TYPE AGR_1250-OBJECT,
          ATEXT TYPE AGR_1250-ATEXT,
          DDTEXT TYPE DD04T-DDTEXT,
          DDTEXT_FIELD(60) TYPE C,
          VALUE(30) TYPE C,
          OBJ_DISP TYPE AGR_1250-OBJECT,
          ATEXT_DISP TYPE AGR_1250-ATEXT,
          DDTEXT_DISP(60) TYPE C,
        END OF TY_FINAL_DATA.


DATA : IT_AGR_1016 TYPE STANDARD TABLE OF TY_AGR_1016,
        WA_AGR_1016 TYPE TY_AGR_1016,

        IT_AGR_TEXTS TYPE STANDARD TABLE OF TY_AGR_TEXTS,
        WA_AGR_TEXTS TYPE TY_AGR_TEXTS,

        IT_AGR_DEFINE TYPE STANDARD TABLE OF TY_AGR_DEFINE,
        WA_AGR_DEFINE TYPE TY_AGR_DEFINE,

        IT_DR_COUNT TYPE STANDARD TABLE OF TY_DR_COUNT,
        WA_DR_COUNT TYPE TY_DR_COUNT,

        COUNT TYPE I,

        IT_AGR_TCODES TYPE  STANDARD TABLE OF TY_AGR_TCODES,
        WA_AGR_TCODES TYPE TY_AGR_TCODES,

        IT_TSTCT TYPE STANDARD TABLE OF TY_TSTCT,
        WA_TSTCT TYPE TY_TSTCT,

        IT_AGR_1252 TYPE STANDARD TABLE OF TY_AGR_1252,
        WA_AGR_1252 TYPE TY_AGR_1252,

        IT_AGR_1252_DEL TYPE STANDARD TABLE OF TY_AGR_1252,
        WA_AGR_1252_DEL TYPE TY_AGR_1252,

        IT_USVART TYPE STANDARD TABLE OF TY_USVART,
        WA_USVART TYPE TY_USVART,

        IT_AGR_1250 TYPE STANDARD TABLE OF TY_AGR_1250,
        WA_AGR_1250 TYPE TY_AGR_1250,

        IT_AGR_1251 TYPE STANDARD TABLE OF TY_AGR_1251,
        WA_AGR_1251 TYPE TY_AGR_1251,

        IT_AUTHX TYPE STANDARD TABLE OF TY_AUTHX,
        WA_AUTHX TYPE TY_AUTHX,

        IT_DD04T TYPE STANDARD TABLE OF TY_DD04T,
        WA_DD04T TYPE TY_DD04T,

        IT_SFINAL TYPE STANDARD TABLE OF TY_SFINAL,
        WA_SFINAL TYPE TY_SFINAL,
        WA_SFINAL1 TYPE TY_SFINAL,

        IT_FINAL TYPE STANDARD TABLE OF TY_FINAL_DATA,
        WA_FINAL TYPE TY_FINAL_DATA,

        IT_FINAL_DATA TYPE STANDARD TABLE OF TY_FINAL_DATA,
        WA_FINAL_DATA TYPE TY_FINAL_DATA.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT_001.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(20) TEXT_010 MODIF ID M1 .
SELECT-OPTIONS : S_ROLE FOR AGR_1016-AGR_NAME   NO INTERVALS MODIF ID M1 ."roles
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT_002.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XTR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(50) TEXT_011.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XAU AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(50) TEXT_012.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XDR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(50) TEXT_013.
SELECTION-SCREEN END OF LINE.


SELECTION-SCREEN END OF BLOCK B2.

INITIALIZATION.

  TEXT_001 = 'Report Specification'.
  TEXT_002 = 'Output Specification'.
  TEXT_010 = 'Roles'.
  TEXT_011 = 'Transection Objects' .
  TEXT_012 = 'Authorization Objects' .
  TEXT_013 = 'Derived Objects' .


START-OF-SELECTION.
  IF S_ROLE IS INITIAL.
    MESSAGE 'Please fill required field' TYPE 'S'.
    LEAVE LIST-PROCESSING.
    CALL TRANSACTION 'ZROLE'.
  ENDIF.
  PERFORM ROLE_LIST.

AT LINE-SELECTION.

  IF SY-LSIND = 1.

    FREE : IT_AGR_1016 , IT_AGR_TEXTS ,IT_AGR_DEFINE , IT_DR_COUNT , IT_AGR_TCODES ,
           IT_TSTCT , IT_AGR_1252 , IT_AGR_1252_DEL ,IT_USVART , IT_AGR_1250 ,
           IT_AGR_1251 , IT_AUTHX , IT_DD04T , IT_FINAL_DATA,IT_SFINAL,IT_FINAL. " ADDED TO TABLE IT_SFINAL,IT_FINAL BY DHRUV

    FORMAT COLOR 1.
    WRITE :/  'Role Name :  '  , WA_AGR_1016-AGR_NAME .
    FORMAT RESET.
    SKIP.

    IF XTR = 'X'.
      PERFORM TCODE_LIST.
    ENDIF.
    IF XDR = 'X' AND WA_DR_COUNT-COUNT <> 0.
      PERFORM DERIVED_ROLES.
    ENDIF.
    IF XDR = 'X' AND WA_DR_COUNT-COUNT = 0.
      PERFORM ROLE_NAME.
    ENDIF.
    IF XAU = 'X'.
      PERFORM AUTHORIZATION_OBJ.
    ENDIF.

  ELSEIF SY-LSIND = 2.

    IF XDR = 'X' AND WA_DR_COUNT-COUNT <> 0.
      FREE : IT_AGR_1016 , IT_AGR_TEXTS ,IT_AGR_DEFINE , IT_DR_COUNT , IT_AGR_TCODES ,
             IT_TSTCT , IT_AGR_1252 , IT_AGR_1252_DEL ,IT_USVART , IT_AGR_1250 ,
             IT_AGR_1251 , IT_AUTHX , IT_DD04T , IT_FINAL_DATA.

      FORMAT COLOR 1 INTENSIFIED ON.
      WRITE :/  'Derived Role Name :  '  , WA_AGR_1252_DEL-AGR_NAME .
      FORMAT RESET.
      SKIP.

      PERFORM AUTHORIZATION_OBJ_DER.

    ELSEIF XDR = 'X' AND WA_DR_COUNT-COUNT = 0.
      FREE : IT_AGR_1016 , IT_AGR_TEXTS ,IT_AGR_DEFINE , IT_DR_COUNT , IT_AGR_TCODES ,
         IT_TSTCT , IT_AGR_1252 , IT_AGR_1252_DEL ,IT_USVART , IT_AGR_1250 ,
         IT_AGR_1251 , IT_AUTHX , IT_DD04T , IT_FINAL_DATA .
      MESSAGE 'No Further Detail Information ' TYPE 'S'.
    ENDIF.

  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  role_list
*&---------------------------------------------------------------------*

FORM ROLE_LIST .

  SELECT DISTINCT AGR_NAME COUNTER PROFILE VARIANT
    FROM AGR_1016
    INTO TABLE IT_AGR_1016
    WHERE AGR_NAME IN S_ROLE.

  DELETE ADJACENT DUPLICATES FROM IT_AGR_1016 COMPARING AGR_NAME.

  IF IT_AGR_1016 IS NOT INITIAL.
    SELECT AGR_NAME SPRAS TEXT  FROM AGR_TEXTS
      INTO TABLE IT_AGR_TEXTS
      FOR ALL ENTRIES IN IT_AGR_1016
      WHERE AGR_NAME = IT_AGR_1016-AGR_NAME
      AND SPRAS = 'E'.

    DELETE ADJACENT DUPLICATES FROM  IT_AGR_TEXTS COMPARING AGR_NAME.

    WRITE: / 'Roles List :' COLOR 3 INTENSIFIED OFF.
    SKIP.
    WRITE:/(110) SY-ULINE.

    WRITE:/ SY-VLINE ,'SR No',
              9 SY-VLINE,10 '   Role Name',
              39 SY-VLINE,40 '   Description',
              99 SY-VLINE,100 ' DR Count',
             110 SY-VLINE.
    WRITE:/(110) SY-ULINE.
    DATA: CNT TYPE I VALUE 1.

    LOOP AT IT_AGR_1016 INTO WA_AGR_1016.
      SELECT COUNT(*) FROM AGR_DEFINE
        INTO  COUNT
        WHERE PARENT_AGR = WA_AGR_1016-AGR_NAME.

      IF SY-SUBRC = 0 .
        WA_DR_COUNT-AGR_NAME = WA_AGR_1016-AGR_NAME.
        WA_DR_COUNT-COUNT = COUNT.
      ELSE.
        WA_DR_COUNT-AGR_NAME = WA_AGR_1016-AGR_NAME.
        WA_DR_COUNT-COUNT = 0.
      ENDIF.

      APPEND WA_DR_COUNT TO IT_DR_COUNT.
      CLEAR WA_DR_COUNT.

      READ TABLE IT_AGR_TEXTS INTO WA_AGR_TEXTS
                  WITH KEY AGR_NAME = WA_AGR_1016-AGR_NAME.


      READ TABLE IT_DR_COUNT INTO WA_DR_COUNT
                  WITH KEY AGR_NAME = WA_AGR_1016-AGR_NAME.

      WRITE:/ SY-VLINE,4(5) CNT,
              9 SY-VLINE,10 WA_AGR_1016-AGR_NAME HOTSPOT ON,
              39 SY-VLINE,40 WA_AGR_TEXTS-TEXT HOTSPOT ON,
              99 SY-VLINE, 100 WA_DR_COUNT-COUNT HOTSPOT ON ,
              110 SY-VLINE.

      HIDE: WA_AGR_1016-AGR_NAME,WA_DR_COUNT-COUNT.
      CNT  = CNT + 1.
      WRITE:/(110) SY-ULINE.


      CLEAR : WA_DR_COUNT , WA_AGR_TEXTS.

    ENDLOOP.

  ENDIF.


ENDFORM.                    " role_list

*&---------------------------------------------------------------------*
*&      Form  TCODE_LIST
*&---------------------------------------------------------------------*
FORM TCODE_LIST .
  IF WA_AGR_1016-AGR_NAME IS NOT INITIAL.
    SELECT  AGR_NAME TCODE FROM AGR_TCODES
      INTO TABLE IT_AGR_TCODES
      WHERE AGR_NAME = WA_AGR_1016-AGR_NAME.


    IF IT_AGR_TCODES IS NOT INITIAL.

      LOOP AT IT_AGR_TCODES INTO WA_AGR_TCODES.
        WA_AGR_TCODES-TCODE_COMP = WA_AGR_TCODES-TCODE.
        MODIFY IT_AGR_TCODES FROM WA_AGR_TCODES TRANSPORTING TCODE_COMP.
      ENDLOOP.

      SELECT SPRSL TCODE TTEXT  FROM TSTCT
         INTO TABLE IT_TSTCT
        FOR ALL ENTRIES IN IT_AGR_TCODES
        WHERE TCODE = IT_AGR_TCODES-TCODE_COMP AND SPRSL = 'E'.

    ENDIF.

    DATA: A1 TYPE I.
    A1 = 1.
    WRITE:/2 'Transactions List : ' COLOR 3.
    WRITE:/(100) SY-ULINE.
    WRITE:/ SY-VLINE,'Sr.No',10 SY-VLINE,'Transaction Codes',
            30 SY-VLINE,'Description',100 SY-VLINE.
    WRITE:/(100) SY-ULINE.


    LOOP AT IT_AGR_TCODES INTO WA_AGR_TCODES.

      READ TABLE IT_TSTCT INTO WA_TSTCT WITH KEY TCODE = WA_AGR_TCODES-TCODE.
      WRITE :/ SY-VLINE,4(4) A1 ,
               10 SY-VLINE,13 WA_AGR_TCODES-TCODE ,
               30 SY-VLINE,WA_TSTCT-TTEXT ,
               100 SY-VLINE.
      A1 = A1 + 1.

    ENDLOOP.
    FORMAT RESET.
    WRITE:/(100) SY-ULINE.
    CLEAR  : WA_AGR_TCODES ,  WA_TSTCT-TTEXT.
  ENDIF.
ENDFORM.                    " TCODE_LIST

*&---------------------------------------------------------------------*
*&      Form  authorization_OBJ
*&---------------------------------------------------------------------*

FORM AUTHORIZATION_OBJ .

  IF WA_AGR_1016-AGR_NAME IS NOT INITIAL.
    SELECT  AGR_NAME OBJECT AUTH ATEXT
        FROM AGR_1250 INTO TABLE IT_AGR_1250
         WHERE AGR_NAME = WA_AGR_1016-AGR_NAME
         AND OBJECT NE 'S_TCODE'.

    IF IT_AGR_1250 IS NOT INITIAL.
      SELECT AGR_NAME OBJECT AUTH FIELD LOW HIGH
         FROM AGR_1251
         INTO TABLE IT_AGR_1251
         FOR ALL ENTRIES IN IT_AGR_1250
         WHERE AGR_NAME = IT_AGR_1250-AGR_NAME AND
               OBJECT = IT_AGR_1250-OBJECT AND
               AUTH = IT_AGR_1250-AUTH.

    ENDIF.

    SKIP.

    WRITE :/2 'Authorization Objects' COLOR 3.

    WRITE:/(175) SY-ULINE.
    WRITE :/ SY-VLINE, 'Object',
            25 SY-VLINE,26 'Description',
            96 SY-VLINE,97 'Activity / Fields',
            157  SY-VLINE,158 'Values',
            175 SY-VLINE.


    SORT IT_AGR_1251.

    LOOP AT IT_AGR_1251 INTO WA_AGR_1251.

      READ TABLE IT_AGR_1250 INTO WA_AGR_1250 WITH KEY AGR_NAME = WA_AGR_1251-AGR_NAME OBJECT = WA_AGR_1251-OBJECT.
      SELECT SINGLE ROLLNAME FROM AUTHX INTO WA_AUTHX  WHERE FIELDNAME = WA_AGR_1251-FIELD.
      SELECT SINGLE ROLLNAME DDLANGUAGE DDTEXT  FROM DD04T INTO  WA_DD04T WHERE ROLLNAME = WA_AUTHX-ROLLNAME AND DDLANGUAGE = 'E'.

      DATA: TEXT(80)  TYPE C.
      CONCATENATE WA_DD04T-DDTEXT  '/' WA_AGR_1251-FIELD INTO TEXT SEPARATED BY SPACE.

      DATA: VALUE(25) TYPE C.
      IF WA_AGR_1251-HIGH IS INITIAL.
        CONCATENATE WA_AGR_1251-LOW  ' ' INTO VALUE SEPARATED BY SPACE.
      ELSEIF WA_AGR_1251-HIGH IS NOT INITIAL.
        CONCATENATE WA_AGR_1251-LOW ',' WA_AGR_1251-HIGH INTO VALUE SEPARATED BY SPACE.
      ENDIF.

      WA_FINAL-OBJECT  =   WA_AGR_1251-OBJECT.
      WA_FINAL-ATEXT  =    WA_AGR_1250-ATEXT .
      WA_FINAL-DDTEXT    = WA_DD04T-DDTEXT.
      WA_FINAL-DDTEXT_FIELD  =  TEXT.
      WA_FINAL-VALUE  = VALUE.

      APPEND WA_FINAL TO IT_FINAL.
      CLEAR : TEXT, VALUE.
      CLEAR WA_FINAL.
      CLEAR : WA_AGR_1251, WA_AGR_1250 ,WA_DD04T ,WA_AUTHX,WA_AGR_1016 . "ADDED WA_AGR_1016 BY DHRUV

    ENDLOOP.


    SORT IT_FINAL.


    DATA: FLAG TYPE I.                                      "VALUE 1.
    DATA: FLAG_Y TYPE I.                                    "VALUE 1.
    DATA: LINES TYPE I.

    LOOP AT IT_FINAL INTO WA_FINAL.
      WA_SFINAL-OBJ_DISP = WA_FINAL-OBJECT.
      WA_SFINAL-ATEXT_DISP = WA_FINAL-ATEXT.
      WA_SFINAL-DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.

      APPEND WA_SFINAL TO IT_SFINAL.
      CLEAR WA_SFINAL.

    ENDLOOP.

    DELETE ADJACENT DUPLICATES FROM IT_SFINAL.

    SORT IT_SFINAL.

    LOOP AT IT_SFINAL INTO WA_SFINAL.

      IF FLAG = 8.
        FLAG = 1.
      ENDIF.


      LINES = 1.
      LOOP AT IT_FINAL INTO WA_FINAL WHERE OBJECT = WA_SFINAL-OBJ_DISP AND DDTEXT_FIELD = WA_SFINAL-DDTEXT_DISP.

        ON CHANGE OF WA_FINAL-OBJECT.
          WA_FINAL-OBJ_DISP = WA_FINAL-OBJECT.
          WA_FINAL-ATEXT_DISP = WA_FINAL-ATEXT.
          WRITE:/(175) SY-ULINE.
        ENDON.

        IF LINES = 1.
          READ TABLE IT_SFINAL INTO WA_SFINAL1 WITH KEY OBJ_DISP = WA_FINAL-OBJECT DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.
          IF SY-SUBRC = 0.
            WA_FINAL-DDTEXT_DISP = WA_SFINAL1-DDTEXT_DISP.
          ENDIF.
        ENDIF.

        IF FLAG = 0.
          FLAG_Y = 1.
          FORMAT COLOR 1.
        ELSEIF FLAG = 1.
          FLAG_Y = 1.
          FORMAT COLOR 2.
        ELSEIF FLAG = 2.
          FLAG_Y = 1.
          FORMAT COLOR 3.
        ELSEIF FLAG = 3.
          FLAG_Y = 1.
          FORMAT COLOR 4.
        ELSEIF FLAG = 4.
          FLAG_Y = 1.
          FORMAT COLOR 5.
        ELSEIF FLAG = 5.
          FLAG_Y = 1.
          FORMAT COLOR 6.
        ELSEIF FLAG = 6.
          FLAG_Y = 1.
          FORMAT COLOR 7.
        ENDIF.

        IF FLAG_Y = 1.

          WRITE : /     SY-VLINE,    WA_FINAL-OBJ_DISP      ," COLOR 1,
                     25 SY-VLINE,26  WA_FINAL-ATEXT_DISP     ," COLOR 2,
                     96 SY-VLINE,97  WA_FINAL-DDTEXT_DISP , " COLOR 3,
                    157 SY-VLINE,158 WA_FINAL-VALUE       , "COLOR 4,
                    175 SY-VLINE.

        ENDIF.

        CLEAR WA_FINAL.
        CLEAR LINES.

      ENDLOOP.

      FORMAT COLOR OFF.
      FLAG = FLAG + 1.

    ENDLOOP.
    WRITE:/(175) SY-ULINE.
  ENDIF.
ENDFORM.                    " authorization_OBJ

*&---------------------------------------------------------------------*
*&      Form  DERIVED_ROLES
*&---------------------------------------------------------------------*

FORM DERIVED_ROLES .

  IF NOT WA_AGR_1016-AGR_NAME IS INITIAL AND  WA_DR_COUNT-COUNT <> 0.

    SELECT AGR_NAME PARENT_AGR FROM AGR_DEFINE
      INTO TABLE IT_AGR_DEFINE
      WHERE PARENT_AGR = WA_AGR_1016-AGR_NAME.

    WRITE:/2 'Derived Roles :  ' COLOR 3.

    IF IT_AGR_DEFINE IS NOT INITIAL.

      SELECT AGR_NAME VARBL LOW HIGH FROM AGR_1252
        INTO TABLE IT_AGR_1252
        FOR ALL ENTRIES IN IT_AGR_DEFINE
        WHERE AGR_NAME = IT_AGR_DEFINE-AGR_NAME.

      IT_AGR_1252_DEL[] = IT_AGR_1252[].
      SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
      DELETE ADJACENT DUPLICATES FROM IT_AGR_1252_DEL COMPARING ALL FIELDS.

    ENDIF.

    SELECT LANGU VARBL VTEXT  FROM USVART
      INTO TABLE IT_USVART
      FOR ALL ENTRIES IN IT_AGR_1252_DEL
      WHERE VARBL = IT_AGR_1252_DEL-VARBL AND LANGU = 'E'.

    WRITE:/(81) SY-ULINE.
    WRITE : / SY-VLINE , 'Derived Role Name' ,
            34 SY-VLINE ,35 'Org. element' ,
            44 SY-VLINE , 45 'Description',
            69 SY-VLINE , 70 'Low',
            75 SY-VLINE , 76 'High',
            81 SY-VLINE.

    SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
    DATA : FLAG TYPE I.
    LOOP AT IT_AGR_1252_DEL INTO WA_AGR_1252_DEL.

      ON CHANGE OF WA_AGR_1252_DEL-VARBL.
        WA_AGR_1252_DEL-VARBL_DISP = WA_AGR_1252_DEL-VARBL.
        READ TABLE IT_USVART INTO WA_USVART WITH KEY VARBL = WA_AGR_1252_DEL-VARBL.
        IF SY-SUBRC = 0.
          WA_AGR_1252_DEL-DESC = WA_USVART-VTEXT.
        ENDIF.
        MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING   VARBL_DISP DESC.
        FLAG = 1.
      ENDON.

      ON CHANGE OF WA_AGR_1252_DEL-AGR_NAME.
        WRITE:/(81) SY-ULINE.
        WA_AGR_1252_DEL-AGR_NAME_DISP = WA_AGR_1252_DEL-AGR_NAME.
        MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING  AGR_NAME_DISP .
      ENDON.

      WRITE : / SY-VLINE , WA_AGR_1252_DEL-AGR_NAME_DISP  HOTSPOT ON,
                34 SY-VLINE ,35 WA_AGR_1252_DEL-VARBL_DISP HOTSPOT ON,
                44 SY-VLINE , 45 WA_AGR_1252_DEL-DESC HOTSPOT ON,
                69 SY-VLINE , 70 WA_AGR_1252_DEL-LOW  HOTSPOT ON,
                75 SY-VLINE , 76 WA_AGR_1252_DEL-HIGH HOTSPOT ON,
                81 SY-VLINE.

      HIDE WA_AGR_1252_DEL-AGR_NAME.

    ENDLOOP.
    WRITE:/(81) SY-ULINE.

  ENDIF.
ENDFORM.                    "DERIVED_ROLES

*&---------------------------------------------------------------------*
*&      Form  ROLE_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ROLE_NAME.

  SELECT AGR_NAME PARENT_AGR FROM AGR_DEFINE
  INTO TABLE IT_AGR_DEFINE
  WHERE AGR_NAME = WA_AGR_1016-AGR_NAME.

  WRITE:/2 'Roles :  ' COLOR 3.

  IF IT_AGR_DEFINE IS NOT INITIAL.
    SELECT AGR_NAME VARBL LOW HIGH FROM AGR_1252
      INTO TABLE IT_AGR_1252
      FOR ALL ENTRIES IN IT_AGR_DEFINE
      WHERE AGR_NAME = IT_AGR_DEFINE-AGR_NAME.

    IT_AGR_1252_DEL[] = IT_AGR_1252[].
    SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
    DELETE ADJACENT DUPLICATES FROM IT_AGR_1252_DEL COMPARING ALL FIELDS.

  ENDIF.

  SELECT LANGU VARBL VTEXT  FROM USVART
    INTO TABLE IT_USVART
    FOR ALL ENTRIES IN IT_AGR_1252_DEL
    WHERE VARBL = IT_AGR_1252_DEL-VARBL AND LANGU = 'E'.
  WRITE:/(81) SY-ULINE.
  WRITE : / SY-VLINE ,    'Role Name' ,
          34 SY-VLINE ,35 'Org. element' ,
          44 SY-VLINE , 45 'Description',
          69 SY-VLINE , 70 'Low',
          75 SY-VLINE , 76 'High',
          81 SY-VLINE.



  SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
  DATA : FLAG_Y TYPE I.
  LOOP AT IT_AGR_1252_DEL INTO WA_AGR_1252_DEL.

    ON CHANGE OF WA_AGR_1252_DEL-VARBL.
      WA_AGR_1252_DEL-VARBL_DISP = WA_AGR_1252_DEL-VARBL.

      READ TABLE IT_USVART INTO WA_USVART WITH KEY VARBL = WA_AGR_1252_DEL-VARBL.
      IF SY-SUBRC = 0.
        WA_AGR_1252_DEL-DESC = WA_USVART-VTEXT.
      ENDIF.

      MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING   VARBL_DISP DESC.

      FLAG_Y = 1.

    ENDON.

    ON CHANGE OF WA_AGR_1252_DEL-AGR_NAME.
      WRITE:/(81) SY-ULINE.
      WA_AGR_1252_DEL-AGR_NAME_DISP = WA_AGR_1252_DEL-AGR_NAME.
      MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING  AGR_NAME_DISP .
    ENDON.

    WRITE : / SY-VLINE , WA_AGR_1252_DEL-AGR_NAME_DISP ,
              34 SY-VLINE ,35 WA_AGR_1252_DEL-VARBL_DISP ,
              44 SY-VLINE , 45 WA_AGR_1252_DEL-DESC,
              69 SY-VLINE , 70 WA_AGR_1252_DEL-LOW ,
              75 SY-VLINE , 76 WA_AGR_1252_DEL-HIGH,
              81 SY-VLINE.

  ENDLOOP.
  WRITE:/(81) SY-ULINE.


ENDFORM.                    " DERIVED_ROLES
*&---------------------------------------------------------------------*
*&      Form  AUTHORIZATION_OBJ_DER
*&---------------------------------------------------------------------*

FORM AUTHORIZATION_OBJ_DER .

  IF NOT WA_AGR_1252_DEL-AGR_NAME IS INITIAL AND WA_DR_COUNT-COUNT <> 0.
    SELECT  AGR_NAME OBJECT AUTH ATEXT
        FROM AGR_1250 INTO TABLE IT_AGR_1250
           WHERE AGR_NAME = WA_AGR_1252_DEL-AGR_NAME
             AND OBJECT NE 'S_TCODE'.

    IF IT_AGR_1250 IS NOT INITIAL.
      SELECT AGR_NAME OBJECT AUTH FIELD LOW HIGH
         FROM AGR_1251
         INTO TABLE IT_AGR_1251
         FOR ALL ENTRIES IN IT_AGR_1250
         WHERE AGR_NAME = IT_AGR_1250-AGR_NAME AND
               OBJECT = IT_AGR_1250-OBJECT AND
               AUTH = IT_AGR_1250-AUTH.


    ENDIF.

    SKIP.

    WRITE :/2 'Authorization Objects' COLOR 3.

    WRITE:/(175) SY-ULINE.
    WRITE :/ SY-VLINE, 'Object',
            25 SY-VLINE,26 'Description',
            96 SY-VLINE,97 'Activity / Fields',
            157  SY-VLINE,158 'Values',
            175 SY-VLINE.


    SORT IT_AGR_1251.
    REFRESH IT_FINAL.
    LOOP AT IT_AGR_1251 INTO WA_AGR_1251.

      READ TABLE IT_AGR_1250 INTO WA_AGR_1250 WITH KEY AGR_NAME = WA_AGR_1251-AGR_NAME OBJECT = WA_AGR_1251-OBJECT.
      SELECT SINGLE ROLLNAME FROM AUTHX INTO WA_AUTHX  WHERE FIELDNAME = WA_AGR_1251-FIELD.
      SELECT SINGLE ROLLNAME DDLANGUAGE DDTEXT  FROM DD04T INTO  WA_DD04T WHERE ROLLNAME = WA_AUTHX-ROLLNAME AND DDLANGUAGE = 'E'.

      DATA: TEXT(80)  TYPE C.
      CONCATENATE WA_DD04T-DDTEXT  '/' WA_AGR_1251-FIELD INTO TEXT SEPARATED BY SPACE.

      DATA: VALUE(25) TYPE C.
      IF WA_AGR_1251-HIGH IS INITIAL.
        CONCATENATE WA_AGR_1251-LOW  ' ' INTO VALUE SEPARATED BY SPACE.
      ELSEIF WA_AGR_1251-HIGH IS NOT INITIAL.
        CONCATENATE WA_AGR_1251-LOW ',' WA_AGR_1251-HIGH INTO VALUE SEPARATED BY SPACE.
      ENDIF.

      WA_FINAL-OBJECT  =   WA_AGR_1251-OBJECT.
      WA_FINAL-ATEXT  =    WA_AGR_1250-ATEXT .
      WA_FINAL-DDTEXT    = WA_DD04T-DDTEXT.
      WA_FINAL-DDTEXT_FIELD  =  TEXT.
      WA_FINAL-VALUE  = VALUE.

      APPEND WA_FINAL TO IT_FINAL.
      CLEAR : TEXT, VALUE.
      CLEAR WA_FINAL.
      CLEAR : WA_AGR_1251, WA_AGR_1250 ,WA_DD04T ,WA_AUTHX .

    ENDLOOP.


    SORT IT_FINAL.


    DATA: FLAG TYPE I.                                      "VALUE 1.
    DATA: FLAG_Y TYPE I.                                    "VALUE 1.
    DATA: LINES TYPE I.
    REFRESH IT_SFINAL.
    LOOP AT IT_FINAL INTO WA_FINAL.
      WA_SFINAL-OBJ_DISP = WA_FINAL-OBJECT.
      WA_SFINAL-ATEXT_DISP = WA_FINAL-ATEXT.
      WA_SFINAL-DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.

      APPEND WA_SFINAL TO IT_SFINAL.
      CLEAR WA_SFINAL.
    ENDLOOP.

    DELETE ADJACENT DUPLICATES FROM IT_SFINAL.

    SORT IT_SFINAL.

    LOOP AT IT_SFINAL INTO WA_SFINAL.

      IF FLAG = 8.
        FLAG = 1.
      ENDIF.


      LINES = 1.
      LOOP AT IT_FINAL INTO WA_FINAL WHERE OBJECT = WA_SFINAL-OBJ_DISP AND DDTEXT_FIELD = WA_SFINAL-DDTEXT_DISP.

        ON CHANGE OF WA_FINAL-OBJECT.
          WA_FINAL-OBJ_DISP = WA_FINAL-OBJECT.
          WA_FINAL-ATEXT_DISP = WA_FINAL-ATEXT.
          WRITE:/(175) SY-ULINE.
        ENDON.

        IF LINES = 1.
          READ TABLE IT_SFINAL INTO WA_SFINAL1 WITH KEY OBJ_DISP = WA_FINAL-OBJECT DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.
          IF SY-SUBRC = 0.
            WA_FINAL-DDTEXT_DISP = WA_SFINAL1-DDTEXT_DISP.
          ENDIF.
        ENDIF.

        IF FLAG = 0.
          FLAG_Y = 1.
          FORMAT COLOR 1.
        ELSEIF FLAG = 1.
          FLAG_Y = 1.
          FORMAT COLOR 2.
        ELSEIF FLAG = 2.
          FLAG_Y = 1.
          FORMAT COLOR 3.
        ELSEIF FLAG = 3.
          FLAG_Y = 1.
          FORMAT COLOR 4.
        ELSEIF FLAG = 4.
          FLAG_Y = 1.
          FORMAT COLOR 5.
        ELSEIF FLAG = 5.
          FLAG_Y = 1.
          FORMAT COLOR 6.
        ELSEIF FLAG = 6.
          FLAG_Y = 1.
          FORMAT COLOR 7.
        ENDIF.

        IF FLAG_Y = 1.

          WRITE : /     SY-VLINE,    WA_FINAL-OBJ_DISP      ," COLOR 1,
                     25 SY-VLINE,26  WA_FINAL-ATEXT_DISP     ," COLOR 2,
                     96 SY-VLINE,97  WA_FINAL-DDTEXT_DISP , " COLOR 3,
                    157 SY-VLINE,158 WA_FINAL-VALUE       , "COLOR 4,
                    175 SY-VLINE.

        ENDIF.

        CLEAR WA_FINAL.
        CLEAR LINES.

      ENDLOOP.

      FORMAT COLOR OFF.
      FLAG = FLAG + 1.


    ENDLOOP.
    WRITE:/(175) SY-ULINE.
  ENDIF.
ENDFORM.                    " AUTHORIZATION_OBJ_DER

HTH

Regards,

Dhruv Shah

Hi guys&#65292;

could somebody tell me how to compare 2 roles?

I want to check authorization difference between 2 roles.

Thanks,

James

2 REPLIES 2
Read only

Former Member
0 Likes
585

Hi, all guys.

Please do some any usefull suggestion.

Read only

dhruv_shah3
Active Contributor
0 Likes
586

Hi,

Use the below program and enter the role name in the selection screen...

Execute the program in different sessions and then compare it.



*&---------------------------------------------------------------------*
*& Report  Z_MASTER_DERIVED
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_MASTER_DERIVED LINE-SIZE 175.

TABLES :AGR_1016.

TYPES: BEGIN OF TY_AGR_1016,
          AGR_NAME TYPE AGR_1016-AGR_NAME,
          COUNTER TYPE AGR_1016-COUNTER,
          PROFILE TYPE AGR_1016-PROFILE,
          VARIANT TYPE AGR_1016-VARIANT,
      END OF TY_AGR_1016,

       BEGIN OF TY_AGR_TEXTS,
          AGR_NAME TYPE AGR_TEXTS-AGR_NAME,
          SPRAS TYPE AGR_TEXTS-SPRAS,
          TEXT TYPE AGR_TEXTS-TEXT,
      END OF TY_AGR_TEXTS,

       BEGIN OF TY_AGR_DEFINE,
          AGR_NAME TYPE AGR_DEFINE-AGR_NAME,
          PARENT_AGR TYPE AGR_DEFINE-PARENT_AGR,
       END OF TY_AGR_DEFINE,

       BEGIN OF TY_DR_COUNT,
          AGR_NAME TYPE AGR_DEFINE-AGR_NAME,
          COUNT TYPE I,
       END OF TY_DR_COUNT,

       BEGIN OF TY_AGR_TCODES,
         AGR_NAME TYPE AGR_TCODES-AGR_NAME,
         TCODE TYPE AGR_TCODES-TCODE,
         TCODE_COMP TYPE TSTCT-TCODE,
       END OF TY_AGR_TCODES,

       BEGIN OF TY_TSTCT,
        SPRSL TYPE TSTCT-SPRSL,
        TCODE TYPE TSTCT-TCODE,
        TTEXT TYPE TSTCT-TTEXT,
      END OF TY_TSTCT,

      BEGIN OF TY_AGR_1252,
        AGR_NAME TYPE AGR_1252-AGR_NAME,
        VARBL TYPE AGR_1252-VARBL,
        LOW TYPE AGR_1252-LOW,
        HIGH TYPE AGR_1252-HIGH,
        DESC(30)  TYPE C,
        VARBL_DISP TYPE AGR_1252-VARBL,
        AGR_NAME_DISP TYPE AGR_1252-AGR_NAME,
     END OF TY_AGR_1252,

     BEGIN OF TY_USVART,
          LANGU TYPE USVART-LANGU, "LANGUAGE KEY
          VARBL TYPE USVART-VARBL,
          VTEXT TYPE USVART-VTEXT, "DESCRIPTION
     END OF TY_USVART,

      BEGIN OF TY_AGR_1250,
        AGR_NAME TYPE AGR_1250-AGR_NAME,
        OBJECT TYPE AGR_1250-OBJECT,
        AUTH TYPE AGR_1250-AUTH,
        ATEXT TYPE AGR_1250-ATEXT,
      END OF TY_AGR_1250,

       BEGIN OF TY_AGR_1251,
          AGR_NAME TYPE AGR_1251-AGR_NAME,
          OBJECT TYPE AGR_1251-OBJECT,
          AUTH TYPE AGR_1251-AUTH,
          FIELD TYPE AGR_1251-FIELD,
         LOW TYPE AGR_1251-LOW,
         HIGH  TYPE AGR_1251-HIGH,
      END OF TY_AGR_1251,

       BEGIN OF TY_AUTHX,
         ROLLNAME TYPE AUTHX-ROLLNAME,
       END OF TY_AUTHX,

        BEGIN OF TY_DD04T,
          ROLLNAME TYPE DD04T-ROLLNAME,
          DDLANGUAGE TYPE DD04T-DDLANGUAGE,
          DDTEXT TYPE DD04T-DDTEXT,
        END OF TY_DD04T,

          BEGIN OF TY_SFINAL,
         OBJ_DISP TYPE AGR_1250-OBJECT,
           ATEXT_DISP TYPE AGR_1250-ATEXT,
         DDTEXT_DISP(80) TYPE C,
        END OF TY_SFINAL,

        BEGIN OF TY_FINAL_DATA,
          OBJECT TYPE AGR_1250-OBJECT,
          ATEXT TYPE AGR_1250-ATEXT,
          DDTEXT TYPE DD04T-DDTEXT,
          DDTEXT_FIELD(60) TYPE C,
          VALUE(30) TYPE C,
          OBJ_DISP TYPE AGR_1250-OBJECT,
          ATEXT_DISP TYPE AGR_1250-ATEXT,
          DDTEXT_DISP(60) TYPE C,
        END OF TY_FINAL_DATA.


DATA : IT_AGR_1016 TYPE STANDARD TABLE OF TY_AGR_1016,
        WA_AGR_1016 TYPE TY_AGR_1016,

        IT_AGR_TEXTS TYPE STANDARD TABLE OF TY_AGR_TEXTS,
        WA_AGR_TEXTS TYPE TY_AGR_TEXTS,

        IT_AGR_DEFINE TYPE STANDARD TABLE OF TY_AGR_DEFINE,
        WA_AGR_DEFINE TYPE TY_AGR_DEFINE,

        IT_DR_COUNT TYPE STANDARD TABLE OF TY_DR_COUNT,
        WA_DR_COUNT TYPE TY_DR_COUNT,

        COUNT TYPE I,

        IT_AGR_TCODES TYPE  STANDARD TABLE OF TY_AGR_TCODES,
        WA_AGR_TCODES TYPE TY_AGR_TCODES,

        IT_TSTCT TYPE STANDARD TABLE OF TY_TSTCT,
        WA_TSTCT TYPE TY_TSTCT,

        IT_AGR_1252 TYPE STANDARD TABLE OF TY_AGR_1252,
        WA_AGR_1252 TYPE TY_AGR_1252,

        IT_AGR_1252_DEL TYPE STANDARD TABLE OF TY_AGR_1252,
        WA_AGR_1252_DEL TYPE TY_AGR_1252,

        IT_USVART TYPE STANDARD TABLE OF TY_USVART,
        WA_USVART TYPE TY_USVART,

        IT_AGR_1250 TYPE STANDARD TABLE OF TY_AGR_1250,
        WA_AGR_1250 TYPE TY_AGR_1250,

        IT_AGR_1251 TYPE STANDARD TABLE OF TY_AGR_1251,
        WA_AGR_1251 TYPE TY_AGR_1251,

        IT_AUTHX TYPE STANDARD TABLE OF TY_AUTHX,
        WA_AUTHX TYPE TY_AUTHX,

        IT_DD04T TYPE STANDARD TABLE OF TY_DD04T,
        WA_DD04T TYPE TY_DD04T,

        IT_SFINAL TYPE STANDARD TABLE OF TY_SFINAL,
        WA_SFINAL TYPE TY_SFINAL,
        WA_SFINAL1 TYPE TY_SFINAL,

        IT_FINAL TYPE STANDARD TABLE OF TY_FINAL_DATA,
        WA_FINAL TYPE TY_FINAL_DATA,

        IT_FINAL_DATA TYPE STANDARD TABLE OF TY_FINAL_DATA,
        WA_FINAL_DATA TYPE TY_FINAL_DATA.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT_001.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(20) TEXT_010 MODIF ID M1 .
SELECT-OPTIONS : S_ROLE FOR AGR_1016-AGR_NAME   NO INTERVALS MODIF ID M1 ."roles
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT_002.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XTR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(50) TEXT_011.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XAU AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(50) TEXT_012.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: XDR AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(50) TEXT_013.
SELECTION-SCREEN END OF LINE.


SELECTION-SCREEN END OF BLOCK B2.

INITIALIZATION.

  TEXT_001 = 'Report Specification'.
  TEXT_002 = 'Output Specification'.
  TEXT_010 = 'Roles'.
  TEXT_011 = 'Transection Objects' .
  TEXT_012 = 'Authorization Objects' .
  TEXT_013 = 'Derived Objects' .


START-OF-SELECTION.
  IF S_ROLE IS INITIAL.
    MESSAGE 'Please fill required field' TYPE 'S'.
    LEAVE LIST-PROCESSING.
    CALL TRANSACTION 'ZROLE'.
  ENDIF.
  PERFORM ROLE_LIST.

AT LINE-SELECTION.

  IF SY-LSIND = 1.

    FREE : IT_AGR_1016 , IT_AGR_TEXTS ,IT_AGR_DEFINE , IT_DR_COUNT , IT_AGR_TCODES ,
           IT_TSTCT , IT_AGR_1252 , IT_AGR_1252_DEL ,IT_USVART , IT_AGR_1250 ,
           IT_AGR_1251 , IT_AUTHX , IT_DD04T , IT_FINAL_DATA,IT_SFINAL,IT_FINAL. " ADDED TO TABLE IT_SFINAL,IT_FINAL BY DHRUV

    FORMAT COLOR 1.
    WRITE :/  'Role Name :  '  , WA_AGR_1016-AGR_NAME .
    FORMAT RESET.
    SKIP.

    IF XTR = 'X'.
      PERFORM TCODE_LIST.
    ENDIF.
    IF XDR = 'X' AND WA_DR_COUNT-COUNT <> 0.
      PERFORM DERIVED_ROLES.
    ENDIF.
    IF XDR = 'X' AND WA_DR_COUNT-COUNT = 0.
      PERFORM ROLE_NAME.
    ENDIF.
    IF XAU = 'X'.
      PERFORM AUTHORIZATION_OBJ.
    ENDIF.

  ELSEIF SY-LSIND = 2.

    IF XDR = 'X' AND WA_DR_COUNT-COUNT <> 0.
      FREE : IT_AGR_1016 , IT_AGR_TEXTS ,IT_AGR_DEFINE , IT_DR_COUNT , IT_AGR_TCODES ,
             IT_TSTCT , IT_AGR_1252 , IT_AGR_1252_DEL ,IT_USVART , IT_AGR_1250 ,
             IT_AGR_1251 , IT_AUTHX , IT_DD04T , IT_FINAL_DATA.

      FORMAT COLOR 1 INTENSIFIED ON.
      WRITE :/  'Derived Role Name :  '  , WA_AGR_1252_DEL-AGR_NAME .
      FORMAT RESET.
      SKIP.

      PERFORM AUTHORIZATION_OBJ_DER.

    ELSEIF XDR = 'X' AND WA_DR_COUNT-COUNT = 0.
      FREE : IT_AGR_1016 , IT_AGR_TEXTS ,IT_AGR_DEFINE , IT_DR_COUNT , IT_AGR_TCODES ,
         IT_TSTCT , IT_AGR_1252 , IT_AGR_1252_DEL ,IT_USVART , IT_AGR_1250 ,
         IT_AGR_1251 , IT_AUTHX , IT_DD04T , IT_FINAL_DATA .
      MESSAGE 'No Further Detail Information ' TYPE 'S'.
    ENDIF.

  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  role_list
*&---------------------------------------------------------------------*

FORM ROLE_LIST .

  SELECT DISTINCT AGR_NAME COUNTER PROFILE VARIANT
    FROM AGR_1016
    INTO TABLE IT_AGR_1016
    WHERE AGR_NAME IN S_ROLE.

  DELETE ADJACENT DUPLICATES FROM IT_AGR_1016 COMPARING AGR_NAME.

  IF IT_AGR_1016 IS NOT INITIAL.
    SELECT AGR_NAME SPRAS TEXT  FROM AGR_TEXTS
      INTO TABLE IT_AGR_TEXTS
      FOR ALL ENTRIES IN IT_AGR_1016
      WHERE AGR_NAME = IT_AGR_1016-AGR_NAME
      AND SPRAS = 'E'.

    DELETE ADJACENT DUPLICATES FROM  IT_AGR_TEXTS COMPARING AGR_NAME.

    WRITE: / 'Roles List :' COLOR 3 INTENSIFIED OFF.
    SKIP.
    WRITE:/(110) SY-ULINE.

    WRITE:/ SY-VLINE ,'SR No',
              9 SY-VLINE,10 '   Role Name',
              39 SY-VLINE,40 '   Description',
              99 SY-VLINE,100 ' DR Count',
             110 SY-VLINE.
    WRITE:/(110) SY-ULINE.
    DATA: CNT TYPE I VALUE 1.

    LOOP AT IT_AGR_1016 INTO WA_AGR_1016.
      SELECT COUNT(*) FROM AGR_DEFINE
        INTO  COUNT
        WHERE PARENT_AGR = WA_AGR_1016-AGR_NAME.

      IF SY-SUBRC = 0 .
        WA_DR_COUNT-AGR_NAME = WA_AGR_1016-AGR_NAME.
        WA_DR_COUNT-COUNT = COUNT.
      ELSE.
        WA_DR_COUNT-AGR_NAME = WA_AGR_1016-AGR_NAME.
        WA_DR_COUNT-COUNT = 0.
      ENDIF.

      APPEND WA_DR_COUNT TO IT_DR_COUNT.
      CLEAR WA_DR_COUNT.

      READ TABLE IT_AGR_TEXTS INTO WA_AGR_TEXTS
                  WITH KEY AGR_NAME = WA_AGR_1016-AGR_NAME.


      READ TABLE IT_DR_COUNT INTO WA_DR_COUNT
                  WITH KEY AGR_NAME = WA_AGR_1016-AGR_NAME.

      WRITE:/ SY-VLINE,4(5) CNT,
              9 SY-VLINE,10 WA_AGR_1016-AGR_NAME HOTSPOT ON,
              39 SY-VLINE,40 WA_AGR_TEXTS-TEXT HOTSPOT ON,
              99 SY-VLINE, 100 WA_DR_COUNT-COUNT HOTSPOT ON ,
              110 SY-VLINE.

      HIDE: WA_AGR_1016-AGR_NAME,WA_DR_COUNT-COUNT.
      CNT  = CNT + 1.
      WRITE:/(110) SY-ULINE.


      CLEAR : WA_DR_COUNT , WA_AGR_TEXTS.

    ENDLOOP.

  ENDIF.


ENDFORM.                    " role_list

*&---------------------------------------------------------------------*
*&      Form  TCODE_LIST
*&---------------------------------------------------------------------*
FORM TCODE_LIST .
  IF WA_AGR_1016-AGR_NAME IS NOT INITIAL.
    SELECT  AGR_NAME TCODE FROM AGR_TCODES
      INTO TABLE IT_AGR_TCODES
      WHERE AGR_NAME = WA_AGR_1016-AGR_NAME.


    IF IT_AGR_TCODES IS NOT INITIAL.

      LOOP AT IT_AGR_TCODES INTO WA_AGR_TCODES.
        WA_AGR_TCODES-TCODE_COMP = WA_AGR_TCODES-TCODE.
        MODIFY IT_AGR_TCODES FROM WA_AGR_TCODES TRANSPORTING TCODE_COMP.
      ENDLOOP.

      SELECT SPRSL TCODE TTEXT  FROM TSTCT
         INTO TABLE IT_TSTCT
        FOR ALL ENTRIES IN IT_AGR_TCODES
        WHERE TCODE = IT_AGR_TCODES-TCODE_COMP AND SPRSL = 'E'.

    ENDIF.

    DATA: A1 TYPE I.
    A1 = 1.
    WRITE:/2 'Transactions List : ' COLOR 3.
    WRITE:/(100) SY-ULINE.
    WRITE:/ SY-VLINE,'Sr.No',10 SY-VLINE,'Transaction Codes',
            30 SY-VLINE,'Description',100 SY-VLINE.
    WRITE:/(100) SY-ULINE.


    LOOP AT IT_AGR_TCODES INTO WA_AGR_TCODES.

      READ TABLE IT_TSTCT INTO WA_TSTCT WITH KEY TCODE = WA_AGR_TCODES-TCODE.
      WRITE :/ SY-VLINE,4(4) A1 ,
               10 SY-VLINE,13 WA_AGR_TCODES-TCODE ,
               30 SY-VLINE,WA_TSTCT-TTEXT ,
               100 SY-VLINE.
      A1 = A1 + 1.

    ENDLOOP.
    FORMAT RESET.
    WRITE:/(100) SY-ULINE.
    CLEAR  : WA_AGR_TCODES ,  WA_TSTCT-TTEXT.
  ENDIF.
ENDFORM.                    " TCODE_LIST

*&---------------------------------------------------------------------*
*&      Form  authorization_OBJ
*&---------------------------------------------------------------------*

FORM AUTHORIZATION_OBJ .

  IF WA_AGR_1016-AGR_NAME IS NOT INITIAL.
    SELECT  AGR_NAME OBJECT AUTH ATEXT
        FROM AGR_1250 INTO TABLE IT_AGR_1250
         WHERE AGR_NAME = WA_AGR_1016-AGR_NAME
         AND OBJECT NE 'S_TCODE'.

    IF IT_AGR_1250 IS NOT INITIAL.
      SELECT AGR_NAME OBJECT AUTH FIELD LOW HIGH
         FROM AGR_1251
         INTO TABLE IT_AGR_1251
         FOR ALL ENTRIES IN IT_AGR_1250
         WHERE AGR_NAME = IT_AGR_1250-AGR_NAME AND
               OBJECT = IT_AGR_1250-OBJECT AND
               AUTH = IT_AGR_1250-AUTH.

    ENDIF.

    SKIP.

    WRITE :/2 'Authorization Objects' COLOR 3.

    WRITE:/(175) SY-ULINE.
    WRITE :/ SY-VLINE, 'Object',
            25 SY-VLINE,26 'Description',
            96 SY-VLINE,97 'Activity / Fields',
            157  SY-VLINE,158 'Values',
            175 SY-VLINE.


    SORT IT_AGR_1251.

    LOOP AT IT_AGR_1251 INTO WA_AGR_1251.

      READ TABLE IT_AGR_1250 INTO WA_AGR_1250 WITH KEY AGR_NAME = WA_AGR_1251-AGR_NAME OBJECT = WA_AGR_1251-OBJECT.
      SELECT SINGLE ROLLNAME FROM AUTHX INTO WA_AUTHX  WHERE FIELDNAME = WA_AGR_1251-FIELD.
      SELECT SINGLE ROLLNAME DDLANGUAGE DDTEXT  FROM DD04T INTO  WA_DD04T WHERE ROLLNAME = WA_AUTHX-ROLLNAME AND DDLANGUAGE = 'E'.

      DATA: TEXT(80)  TYPE C.
      CONCATENATE WA_DD04T-DDTEXT  '/' WA_AGR_1251-FIELD INTO TEXT SEPARATED BY SPACE.

      DATA: VALUE(25) TYPE C.
      IF WA_AGR_1251-HIGH IS INITIAL.
        CONCATENATE WA_AGR_1251-LOW  ' ' INTO VALUE SEPARATED BY SPACE.
      ELSEIF WA_AGR_1251-HIGH IS NOT INITIAL.
        CONCATENATE WA_AGR_1251-LOW ',' WA_AGR_1251-HIGH INTO VALUE SEPARATED BY SPACE.
      ENDIF.

      WA_FINAL-OBJECT  =   WA_AGR_1251-OBJECT.
      WA_FINAL-ATEXT  =    WA_AGR_1250-ATEXT .
      WA_FINAL-DDTEXT    = WA_DD04T-DDTEXT.
      WA_FINAL-DDTEXT_FIELD  =  TEXT.
      WA_FINAL-VALUE  = VALUE.

      APPEND WA_FINAL TO IT_FINAL.
      CLEAR : TEXT, VALUE.
      CLEAR WA_FINAL.
      CLEAR : WA_AGR_1251, WA_AGR_1250 ,WA_DD04T ,WA_AUTHX,WA_AGR_1016 . "ADDED WA_AGR_1016 BY DHRUV

    ENDLOOP.


    SORT IT_FINAL.


    DATA: FLAG TYPE I.                                      "VALUE 1.
    DATA: FLAG_Y TYPE I.                                    "VALUE 1.
    DATA: LINES TYPE I.

    LOOP AT IT_FINAL INTO WA_FINAL.
      WA_SFINAL-OBJ_DISP = WA_FINAL-OBJECT.
      WA_SFINAL-ATEXT_DISP = WA_FINAL-ATEXT.
      WA_SFINAL-DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.

      APPEND WA_SFINAL TO IT_SFINAL.
      CLEAR WA_SFINAL.

    ENDLOOP.

    DELETE ADJACENT DUPLICATES FROM IT_SFINAL.

    SORT IT_SFINAL.

    LOOP AT IT_SFINAL INTO WA_SFINAL.

      IF FLAG = 8.
        FLAG = 1.
      ENDIF.


      LINES = 1.
      LOOP AT IT_FINAL INTO WA_FINAL WHERE OBJECT = WA_SFINAL-OBJ_DISP AND DDTEXT_FIELD = WA_SFINAL-DDTEXT_DISP.

        ON CHANGE OF WA_FINAL-OBJECT.
          WA_FINAL-OBJ_DISP = WA_FINAL-OBJECT.
          WA_FINAL-ATEXT_DISP = WA_FINAL-ATEXT.
          WRITE:/(175) SY-ULINE.
        ENDON.

        IF LINES = 1.
          READ TABLE IT_SFINAL INTO WA_SFINAL1 WITH KEY OBJ_DISP = WA_FINAL-OBJECT DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.
          IF SY-SUBRC = 0.
            WA_FINAL-DDTEXT_DISP = WA_SFINAL1-DDTEXT_DISP.
          ENDIF.
        ENDIF.

        IF FLAG = 0.
          FLAG_Y = 1.
          FORMAT COLOR 1.
        ELSEIF FLAG = 1.
          FLAG_Y = 1.
          FORMAT COLOR 2.
        ELSEIF FLAG = 2.
          FLAG_Y = 1.
          FORMAT COLOR 3.
        ELSEIF FLAG = 3.
          FLAG_Y = 1.
          FORMAT COLOR 4.
        ELSEIF FLAG = 4.
          FLAG_Y = 1.
          FORMAT COLOR 5.
        ELSEIF FLAG = 5.
          FLAG_Y = 1.
          FORMAT COLOR 6.
        ELSEIF FLAG = 6.
          FLAG_Y = 1.
          FORMAT COLOR 7.
        ENDIF.

        IF FLAG_Y = 1.

          WRITE : /     SY-VLINE,    WA_FINAL-OBJ_DISP      ," COLOR 1,
                     25 SY-VLINE,26  WA_FINAL-ATEXT_DISP     ," COLOR 2,
                     96 SY-VLINE,97  WA_FINAL-DDTEXT_DISP , " COLOR 3,
                    157 SY-VLINE,158 WA_FINAL-VALUE       , "COLOR 4,
                    175 SY-VLINE.

        ENDIF.

        CLEAR WA_FINAL.
        CLEAR LINES.

      ENDLOOP.

      FORMAT COLOR OFF.
      FLAG = FLAG + 1.

    ENDLOOP.
    WRITE:/(175) SY-ULINE.
  ENDIF.
ENDFORM.                    " authorization_OBJ

*&---------------------------------------------------------------------*
*&      Form  DERIVED_ROLES
*&---------------------------------------------------------------------*

FORM DERIVED_ROLES .

  IF NOT WA_AGR_1016-AGR_NAME IS INITIAL AND  WA_DR_COUNT-COUNT <> 0.

    SELECT AGR_NAME PARENT_AGR FROM AGR_DEFINE
      INTO TABLE IT_AGR_DEFINE
      WHERE PARENT_AGR = WA_AGR_1016-AGR_NAME.

    WRITE:/2 'Derived Roles :  ' COLOR 3.

    IF IT_AGR_DEFINE IS NOT INITIAL.

      SELECT AGR_NAME VARBL LOW HIGH FROM AGR_1252
        INTO TABLE IT_AGR_1252
        FOR ALL ENTRIES IN IT_AGR_DEFINE
        WHERE AGR_NAME = IT_AGR_DEFINE-AGR_NAME.

      IT_AGR_1252_DEL[] = IT_AGR_1252[].
      SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
      DELETE ADJACENT DUPLICATES FROM IT_AGR_1252_DEL COMPARING ALL FIELDS.

    ENDIF.

    SELECT LANGU VARBL VTEXT  FROM USVART
      INTO TABLE IT_USVART
      FOR ALL ENTRIES IN IT_AGR_1252_DEL
      WHERE VARBL = IT_AGR_1252_DEL-VARBL AND LANGU = 'E'.

    WRITE:/(81) SY-ULINE.
    WRITE : / SY-VLINE , 'Derived Role Name' ,
            34 SY-VLINE ,35 'Org. element' ,
            44 SY-VLINE , 45 'Description',
            69 SY-VLINE , 70 'Low',
            75 SY-VLINE , 76 'High',
            81 SY-VLINE.

    SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
    DATA : FLAG TYPE I.
    LOOP AT IT_AGR_1252_DEL INTO WA_AGR_1252_DEL.

      ON CHANGE OF WA_AGR_1252_DEL-VARBL.
        WA_AGR_1252_DEL-VARBL_DISP = WA_AGR_1252_DEL-VARBL.
        READ TABLE IT_USVART INTO WA_USVART WITH KEY VARBL = WA_AGR_1252_DEL-VARBL.
        IF SY-SUBRC = 0.
          WA_AGR_1252_DEL-DESC = WA_USVART-VTEXT.
        ENDIF.
        MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING   VARBL_DISP DESC.
        FLAG = 1.
      ENDON.

      ON CHANGE OF WA_AGR_1252_DEL-AGR_NAME.
        WRITE:/(81) SY-ULINE.
        WA_AGR_1252_DEL-AGR_NAME_DISP = WA_AGR_1252_DEL-AGR_NAME.
        MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING  AGR_NAME_DISP .
      ENDON.

      WRITE : / SY-VLINE , WA_AGR_1252_DEL-AGR_NAME_DISP  HOTSPOT ON,
                34 SY-VLINE ,35 WA_AGR_1252_DEL-VARBL_DISP HOTSPOT ON,
                44 SY-VLINE , 45 WA_AGR_1252_DEL-DESC HOTSPOT ON,
                69 SY-VLINE , 70 WA_AGR_1252_DEL-LOW  HOTSPOT ON,
                75 SY-VLINE , 76 WA_AGR_1252_DEL-HIGH HOTSPOT ON,
                81 SY-VLINE.

      HIDE WA_AGR_1252_DEL-AGR_NAME.

    ENDLOOP.
    WRITE:/(81) SY-ULINE.

  ENDIF.
ENDFORM.                    "DERIVED_ROLES

*&---------------------------------------------------------------------*
*&      Form  ROLE_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ROLE_NAME.

  SELECT AGR_NAME PARENT_AGR FROM AGR_DEFINE
  INTO TABLE IT_AGR_DEFINE
  WHERE AGR_NAME = WA_AGR_1016-AGR_NAME.

  WRITE:/2 'Roles :  ' COLOR 3.

  IF IT_AGR_DEFINE IS NOT INITIAL.
    SELECT AGR_NAME VARBL LOW HIGH FROM AGR_1252
      INTO TABLE IT_AGR_1252
      FOR ALL ENTRIES IN IT_AGR_DEFINE
      WHERE AGR_NAME = IT_AGR_DEFINE-AGR_NAME.

    IT_AGR_1252_DEL[] = IT_AGR_1252[].
    SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
    DELETE ADJACENT DUPLICATES FROM IT_AGR_1252_DEL COMPARING ALL FIELDS.

  ENDIF.

  SELECT LANGU VARBL VTEXT  FROM USVART
    INTO TABLE IT_USVART
    FOR ALL ENTRIES IN IT_AGR_1252_DEL
    WHERE VARBL = IT_AGR_1252_DEL-VARBL AND LANGU = 'E'.
  WRITE:/(81) SY-ULINE.
  WRITE : / SY-VLINE ,    'Role Name' ,
          34 SY-VLINE ,35 'Org. element' ,
          44 SY-VLINE , 45 'Description',
          69 SY-VLINE , 70 'Low',
          75 SY-VLINE , 76 'High',
          81 SY-VLINE.



  SORT IT_AGR_1252_DEL BY AGR_NAME VARBL LOW HIGH.
  DATA : FLAG_Y TYPE I.
  LOOP AT IT_AGR_1252_DEL INTO WA_AGR_1252_DEL.

    ON CHANGE OF WA_AGR_1252_DEL-VARBL.
      WA_AGR_1252_DEL-VARBL_DISP = WA_AGR_1252_DEL-VARBL.

      READ TABLE IT_USVART INTO WA_USVART WITH KEY VARBL = WA_AGR_1252_DEL-VARBL.
      IF SY-SUBRC = 0.
        WA_AGR_1252_DEL-DESC = WA_USVART-VTEXT.
      ENDIF.

      MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING   VARBL_DISP DESC.

      FLAG_Y = 1.

    ENDON.

    ON CHANGE OF WA_AGR_1252_DEL-AGR_NAME.
      WRITE:/(81) SY-ULINE.
      WA_AGR_1252_DEL-AGR_NAME_DISP = WA_AGR_1252_DEL-AGR_NAME.
      MODIFY IT_AGR_1252_DEL FROM WA_AGR_1252_DEL TRANSPORTING  AGR_NAME_DISP .
    ENDON.

    WRITE : / SY-VLINE , WA_AGR_1252_DEL-AGR_NAME_DISP ,
              34 SY-VLINE ,35 WA_AGR_1252_DEL-VARBL_DISP ,
              44 SY-VLINE , 45 WA_AGR_1252_DEL-DESC,
              69 SY-VLINE , 70 WA_AGR_1252_DEL-LOW ,
              75 SY-VLINE , 76 WA_AGR_1252_DEL-HIGH,
              81 SY-VLINE.

  ENDLOOP.
  WRITE:/(81) SY-ULINE.


ENDFORM.                    " DERIVED_ROLES
*&---------------------------------------------------------------------*
*&      Form  AUTHORIZATION_OBJ_DER
*&---------------------------------------------------------------------*

FORM AUTHORIZATION_OBJ_DER .

  IF NOT WA_AGR_1252_DEL-AGR_NAME IS INITIAL AND WA_DR_COUNT-COUNT <> 0.
    SELECT  AGR_NAME OBJECT AUTH ATEXT
        FROM AGR_1250 INTO TABLE IT_AGR_1250
           WHERE AGR_NAME = WA_AGR_1252_DEL-AGR_NAME
             AND OBJECT NE 'S_TCODE'.

    IF IT_AGR_1250 IS NOT INITIAL.
      SELECT AGR_NAME OBJECT AUTH FIELD LOW HIGH
         FROM AGR_1251
         INTO TABLE IT_AGR_1251
         FOR ALL ENTRIES IN IT_AGR_1250
         WHERE AGR_NAME = IT_AGR_1250-AGR_NAME AND
               OBJECT = IT_AGR_1250-OBJECT AND
               AUTH = IT_AGR_1250-AUTH.


    ENDIF.

    SKIP.

    WRITE :/2 'Authorization Objects' COLOR 3.

    WRITE:/(175) SY-ULINE.
    WRITE :/ SY-VLINE, 'Object',
            25 SY-VLINE,26 'Description',
            96 SY-VLINE,97 'Activity / Fields',
            157  SY-VLINE,158 'Values',
            175 SY-VLINE.


    SORT IT_AGR_1251.
    REFRESH IT_FINAL.
    LOOP AT IT_AGR_1251 INTO WA_AGR_1251.

      READ TABLE IT_AGR_1250 INTO WA_AGR_1250 WITH KEY AGR_NAME = WA_AGR_1251-AGR_NAME OBJECT = WA_AGR_1251-OBJECT.
      SELECT SINGLE ROLLNAME FROM AUTHX INTO WA_AUTHX  WHERE FIELDNAME = WA_AGR_1251-FIELD.
      SELECT SINGLE ROLLNAME DDLANGUAGE DDTEXT  FROM DD04T INTO  WA_DD04T WHERE ROLLNAME = WA_AUTHX-ROLLNAME AND DDLANGUAGE = 'E'.

      DATA: TEXT(80)  TYPE C.
      CONCATENATE WA_DD04T-DDTEXT  '/' WA_AGR_1251-FIELD INTO TEXT SEPARATED BY SPACE.

      DATA: VALUE(25) TYPE C.
      IF WA_AGR_1251-HIGH IS INITIAL.
        CONCATENATE WA_AGR_1251-LOW  ' ' INTO VALUE SEPARATED BY SPACE.
      ELSEIF WA_AGR_1251-HIGH IS NOT INITIAL.
        CONCATENATE WA_AGR_1251-LOW ',' WA_AGR_1251-HIGH INTO VALUE SEPARATED BY SPACE.
      ENDIF.

      WA_FINAL-OBJECT  =   WA_AGR_1251-OBJECT.
      WA_FINAL-ATEXT  =    WA_AGR_1250-ATEXT .
      WA_FINAL-DDTEXT    = WA_DD04T-DDTEXT.
      WA_FINAL-DDTEXT_FIELD  =  TEXT.
      WA_FINAL-VALUE  = VALUE.

      APPEND WA_FINAL TO IT_FINAL.
      CLEAR : TEXT, VALUE.
      CLEAR WA_FINAL.
      CLEAR : WA_AGR_1251, WA_AGR_1250 ,WA_DD04T ,WA_AUTHX .

    ENDLOOP.


    SORT IT_FINAL.


    DATA: FLAG TYPE I.                                      "VALUE 1.
    DATA: FLAG_Y TYPE I.                                    "VALUE 1.
    DATA: LINES TYPE I.
    REFRESH IT_SFINAL.
    LOOP AT IT_FINAL INTO WA_FINAL.
      WA_SFINAL-OBJ_DISP = WA_FINAL-OBJECT.
      WA_SFINAL-ATEXT_DISP = WA_FINAL-ATEXT.
      WA_SFINAL-DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.

      APPEND WA_SFINAL TO IT_SFINAL.
      CLEAR WA_SFINAL.
    ENDLOOP.

    DELETE ADJACENT DUPLICATES FROM IT_SFINAL.

    SORT IT_SFINAL.

    LOOP AT IT_SFINAL INTO WA_SFINAL.

      IF FLAG = 8.
        FLAG = 1.
      ENDIF.


      LINES = 1.
      LOOP AT IT_FINAL INTO WA_FINAL WHERE OBJECT = WA_SFINAL-OBJ_DISP AND DDTEXT_FIELD = WA_SFINAL-DDTEXT_DISP.

        ON CHANGE OF WA_FINAL-OBJECT.
          WA_FINAL-OBJ_DISP = WA_FINAL-OBJECT.
          WA_FINAL-ATEXT_DISP = WA_FINAL-ATEXT.
          WRITE:/(175) SY-ULINE.
        ENDON.

        IF LINES = 1.
          READ TABLE IT_SFINAL INTO WA_SFINAL1 WITH KEY OBJ_DISP = WA_FINAL-OBJECT DDTEXT_DISP = WA_FINAL-DDTEXT_FIELD.
          IF SY-SUBRC = 0.
            WA_FINAL-DDTEXT_DISP = WA_SFINAL1-DDTEXT_DISP.
          ENDIF.
        ENDIF.

        IF FLAG = 0.
          FLAG_Y = 1.
          FORMAT COLOR 1.
        ELSEIF FLAG = 1.
          FLAG_Y = 1.
          FORMAT COLOR 2.
        ELSEIF FLAG = 2.
          FLAG_Y = 1.
          FORMAT COLOR 3.
        ELSEIF FLAG = 3.
          FLAG_Y = 1.
          FORMAT COLOR 4.
        ELSEIF FLAG = 4.
          FLAG_Y = 1.
          FORMAT COLOR 5.
        ELSEIF FLAG = 5.
          FLAG_Y = 1.
          FORMAT COLOR 6.
        ELSEIF FLAG = 6.
          FLAG_Y = 1.
          FORMAT COLOR 7.
        ENDIF.

        IF FLAG_Y = 1.

          WRITE : /     SY-VLINE,    WA_FINAL-OBJ_DISP      ," COLOR 1,
                     25 SY-VLINE,26  WA_FINAL-ATEXT_DISP     ," COLOR 2,
                     96 SY-VLINE,97  WA_FINAL-DDTEXT_DISP , " COLOR 3,
                    157 SY-VLINE,158 WA_FINAL-VALUE       , "COLOR 4,
                    175 SY-VLINE.

        ENDIF.

        CLEAR WA_FINAL.
        CLEAR LINES.

      ENDLOOP.

      FORMAT COLOR OFF.
      FLAG = FLAG + 1.


    ENDLOOP.
    WRITE:/(175) SY-ULINE.
  ENDIF.
ENDFORM.                    " AUTHORIZATION_OBJ_DER

HTH

Regards,

Dhruv Shah