Registration

Dear SAP Community Member,
In order to fully benefit from what the SAP Community has to offer, please register at:
http://scn.sap.com
Thank you,
The SAP Community team.
Skip to end of metadata
Go to start of metadata
Error rendering macro 'code': Invalid value specified for parameter 'lang'
*&---------------------------------------------------------------------*
*& Report ZCHECKAUTH
*&
*&---------------------------------------------------------------------
REPORT ZAUTHRPT LINE-SIZE 132 NO STANDARD PAGE HEADING MESSAGE-ID ZZ.
*--------------------------------------------------------------
* This program creates a report based on:
* Composite profiles, Single Profiles, Objects,
* Authorizations and their Values.
*--------------------------------------------------------------
TABLES: USR03, USR04, USR10, USR12, TOBJT, DFIES.
SELECT-OPTIONS BNAME FOR USR04-BNAME DEFAULT SY-UNAME.
PARAMETERS: DO-EXPRT(1) DEFAULT ' '
NO-DISPLAY.
DATA: BEGIN OF INTFIELD OCCURS 10,
FIELDNAME LIKE TOBJ-FIEL1,
LNG TYPE I,
TYPE,
FTEXT LIKE DFIES-SCRTEXT_L,
CONVEXIT LIKE DFIES-CONVEXIT,
END OF INTFIELD.
DATA: BEGIN OF TABUSR OCCURS 500,
USERID LIKE USR04-BNAME,
PROFILE LIKE XU213-PROFILE,
END OF TABUSR.
DATA: BEGIN OF TABPRO OCCURS 500,
USERID LIKE USR04-BNAME,
PROFILE LIKE XU213-PROFILE,
END OF TABPRO.
DATA: BEGIN OF TABAUTH OCCURS 500,
USERID LIKE USR04-BNAME, "Userid
PROFILE LIKE XU213-PROFILE, "Profile
OBJECT LIKE USR12-OBJCT, "Object
RULE LIKE USR12-AUTH, "Authorization
END OF TABAUTH.
DATA: BEGIN OF TABVAL OCCURS 500,
USERID LIKE USR04-BNAME,
PROFILE LIKE XU213-PROFILE,
OBJECT LIKE USR12-OBJCT,
RULE LIKE USR12-AUTH, "Authorization
SFIELD LIKE TOBJ-FIEL1, "Field Name
VON(18), "Value From
BIS(18), "Value To
USED-IN-REPORT-ALREADY,
END OF TABVAL.
DATA: MAXUSR TYPE I VALUE 300,
MAXCPF TYPE I VALUE 300,
MAXPRO TYPE I VALUE 170,
PROFLNG LIKE SY-FDPOS VALUE 12, "Profile
OBJLNG LIKE SY-FDPOS VALUE 10, "Object
AUTHLNG LIKE SY-FDPOS VALUE 12, "Authorization
FLDLNG LIKE SY-FDPOS VALUE 10, "Field
TEMP-USERID LIKE USR04-BNAME,
PREV-OBJECT LIKE USR12-OBJCT,
PREV-RULE LIKE USR12-AUTH, "Authorization
PREV-SFIELD LIKE TOBJ-FIEL1,
TEMP-PROFILE LIKE XU213-PROFILE,
USER-NAME LIKE USR03-NAME1,
SYST_LANGUAGE VALUE 'D',
USER-DEPT(31),
USER-COST-CENTER(31),
PREV-PROFILE LIKE XU213-PROFILE.
FIELD-SYMBOLS: <TEXT>.
START-OF-SELECTION.
  SELECT * FROM USR04
  WHERE BNAME IN BNAME. "Userid
    PERFORM 100_LOAD_TABUSR.
  ENDSELECT.
  SORT TABUSR BY PROFILE ASCENDING
  USERID ASCENDING.
  PERFORM 200_PROCESS_PROFILES.
  PERFORM 400_PROCESS_AUTH_VALUES.
  SORT TABVAL BY USERID ASCENDING
  PROFILE ASCENDING
  OBJECT ASCENDING
  RULE ASCENDING
  SFIELD ASCENDING.
  TEMP-USERID = SPACE.
  PREV-PROFILE = SPACE.
  IF DO-EXPRT EQ 'X'.
    EXPORT TABVAL TO MEMORY ID 'ZAUTHRPT'.
  ELSE.
    PERFORM 500_PROCESS_REPORT.
  ENDIF.
END-OF-SELECTION.
*-----------------------------------------------------------------
* Form 100_LOAD_TABUSR
*-----------------------------------------------------------------
* Load internal User Name and Profiles to internal table.
*-----------------------------------------------------------------
FORM 100_LOAD_TABUSR.
  DATA: NRPRO TYPE I,
  OFF TYPE I.
  OFF = 2.
  NRPRO = USR04-NRPRO / 12.
  IF NRPRO > MAXUSR. NRPRO = 0. ENDIF.
  DO NRPRO TIMES.
    ASSIGN USR04-PROFS+OFF(PROFLNG) TO <TEXT>.
    MOVE USR04-BNAME TO TABUSR-USERID.
    WRITE <TEXT> TO TABUSR-PROFILE.
    APPEND TABUSR.
    OFF = OFF + PROFLNG.
  ENDDO.
ENDFORM. "100_LOAD_TABUSR
*-----------------------------------------------------------------
* Form 200_PROCESS_PROFILES
*-----------------------------------------------------------------
* Get all authorizations based on the profile name.
*-----------------------------------------------------------------
FORM 200_PROCESS_PROFILES.
  LOOP AT TABUSR.
    SELECT * FROM USR10
    WHERE PROFN = TABUSR-PROFILE.
      MOVE TABUSR-USERID TO TEMP-USERID.
      MOVE TABUSR-PROFILE TO TEMP-PROFILE.
      PERFORM 250_GET_AUTHORIZATIONS.
    ENDSELECT.
  ENDLOOP.
  SORT TABPRO BY PROFILE ASCENDING
  USERID ASCENDING.
* Process the profiles under the composite profile
  LOOP AT TABPRO.
    SELECT * FROM USR10
    WHERE PROFN = TABPRO-PROFILE.
      MOVE TABPRO-USERID TO TEMP-USERID.
      MOVE TABPRO-PROFILE TO TEMP-PROFILE.
      PERFORM 250_GET_AUTHORIZATIONS.
    ENDSELECT.
  ENDLOOP.
ENDFORM. "200_PROCESS_PROFILES
*-----------------------------------------------------------------
* Form 250_GET_AUTHORIZATIONS
*-----------------------------------------------------------------
* Distinguish between Single and composite profiles
*-----------------------------------------------------------------
FORM 250_GET_AUTHORIZATIONS.
  CASE USR10-TYP.
    WHEN 'C'. "Composite Profile
      PERFORM 260_PROCESS_COMP_PROFILES.
    WHEN 'S'. "Single Profile
      PERFORM 280_PROCESS_SINGLE_PROFILES.
    WHEN OTHERS.
      EXIT.
  ENDCASE.
ENDFORM. "250_GET_AUTHORIZATIONS
*---------------------------------------------------------------------*
* FORM 260_PROCESS_COMP_PROFILES *
*---------------------------------------------------------------------*
* Composite profiles are loaded to internal table to be *
* processed later. *
*---------------------------------------------------------------------*
FORM 260_PROCESS_COMP_PROFILES.
  DATA: NRAUT TYPE I,
  OFF TYPE I.
  OFF = 2.
  NRAUT = USR10-NRAUT / 12. "Number of authorizations
  IF NRAUT > MAXCPF. NRAUT = 0. ENDIF.
  DO NRAUT TIMES.
    ASSIGN USR10-AUTHS+OFF(PROFLNG) TO <TEXT>.
    WRITE <TEXT> TO TABPRO-PROFILE.
    MOVE TEMP-USERID TO TABPRO-USERID.
    APPEND TABPRO.
    OFF = OFF + PROFLNG.
  ENDDO.
ENDFORM. "260_PROCESS_COMP_PROFILES
*---------------------------------------------------------------------*
* FORM 280_PROCESS_SINGLE_PROFILES *
*---------------------------------------------------------------------*
* Load all authorizations under a single profile to an internal *
* table. *
*---------------------------------------------------------------------*
FORM 280_PROCESS_SINGLE_PROFILES.
  DATA: NRAUT TYPE I,
  OFF TYPE I.
  OFF = 2.
  NRAUT = USR10-NRAUT / 22.
  IF NRAUT > MAXPRO. NRAUT = 0. ENDIF.
  DO NRAUT TIMES.
    ASSIGN USR10-AUTHS+OFF(OBJLNG) TO <TEXT>.
    WRITE <TEXT> TO TABAUTH-OBJECT.
    OFF = OFF + OBJLNG.
    ASSIGN USR10-AUTHS+OFF(AUTHLNG) TO <TEXT>.
    WRITE <TEXT> TO TABAUTH-RULE.
    MOVE TEMP-USERID TO TABAUTH-USERID.
    MOVE TEMP-PROFILE TO TABAUTH-PROFILE.
    APPEND TABAUTH.
    OFF = OFF + AUTHLNG.
  ENDDO.
ENDFORM. "280_PROCESS_SINGLE_PROFILES
*-----------------------------------------------------------------
* Form 400_PROCESS_AUTH_VALUES
*-----------------------------------------------------------------
* Load internal table with Userid, Profile, Object,
* Authorizations and Values
*-----------------------------------------------------------------
FORM 400_PROCESS_AUTH_VALUES.
  LOOP AT TABAUTH.
    SELECT * FROM USR12
    WHERE OBJCT = TABAUTH-OBJECT
    AND AUTH = TABAUTH-RULE.
      PERFORM 450_LOAD_TABVALS.
    ENDSELECT.
  ENDLOOP.
ENDFORM. "400_PROCESS_AUTH_VALUES
*---------------------------------------------------------------------*
* FORM 450_LOAD_TABVALS *
*---------------------------------------------------------------------*
* NOTE: Search SAPMS01J function FILL_TABUSR *
* Must be in workbench. *
*---------------------------------------------------------------------*
FORM 450_LOAD_TABVALS.
  DATA: INTFLAG TYPE I VALUE 0,
  OFF TYPE I,
  VTYP,
  LNG TYPE I,
  CLNG(2),
  GLNG(2).
  OFF = 2.
  ASSIGN USR12-VALS+OFF(1) TO <TEXT>.
  WRITE <TEXT> TO VTYP.
  WHILE VTYP <> ' ' AND OFF < USR12-LNG.
    OFF = OFF + 1.
    CASE VTYP.
      WHEN 'F'.
        OFF = OFF + 5.
        ASSIGN USR12-VALS+OFF(2) TO <TEXT>.
        WRITE <TEXT> TO CLNG.
        LNG = CLNG.
        OFF = OFF + 2.
        ASSIGN USR12-VALS+OFF(FLDLNG) TO <TEXT>.
        WRITE <TEXT> TO TABVAL-SFIELD.
        OFF = OFF + FLDLNG.
      WHEN 'E'.
        ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
        WRITE <TEXT> TO TABVAL-VON.
        IF TABVAL-VON = SPACE.
          TABVAL-VON = ''' '''.
        ENDIF.
        PERFORM 480_PROCESS_MOVES.
        APPEND TABVAL.
        TABVAL-VON = SPACE.
        TABVAL-BIS = SPACE.
        OFF = OFF + LNG.
      WHEN 'G'.
        ASSIGN USR12-VALS+OFF(2) TO <TEXT>.
        WRITE <TEXT> TO CLNG.
        GLNG = CLNG.
        OFF = OFF + 2.
        ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
        IF INTFLAG = 0.
          WRITE <TEXT> TO TABVAL-VON.
          WRITE '*' TO TABVAL-VON+GLNG.
        ELSE.
          WRITE <TEXT> TO TABVAL-BIS.
          WRITE '*' TO TABVAL-BIS+GLNG.
          INTFLAG = 0.
        ENDIF.
        PERFORM 480_PROCESS_MOVES.
        APPEND TABVAL.
        TABVAL-VON = SPACE.
        TABVAL-BIS = SPACE.
        OFF = OFF + LNG.
      WHEN 'V'.
        INTFLAG = 1.
        ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
        WRITE <TEXT> TO TABVAL-VON.
        IF TABVAL-VON = SPACE.
          TABVAL-VON = ''' '''.
        ENDIF.
        OFF = OFF + LNG.
      WHEN 'B'.
        INTFLAG = 0.
        ASSIGN USR12-VALS+OFF(LNG) TO <TEXT>.
        WRITE <TEXT> TO TABVAL-BIS.
        IF TABVAL-BIS = SPACE.
          TABVAL-BIS = ''' '''.
        ENDIF.
        PERFORM 480_PROCESS_MOVES.
        APPEND TABVAL.
        TABVAL-VON = SPACE.
        TABVAL-BIS = SPACE.
        OFF = OFF + LNG.
    ENDCASE.
    ASSIGN USR12-VALS+OFF(1) TO <TEXT>.
    WRITE <TEXT> TO VTYP.
  ENDWHILE.
ENDFORM. "450_LOAD_TABVALS
*---------------------------------------------------------------------*
* FORM 480_PROCESS_MOVES *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM 480_PROCESS_MOVES.
  MOVE TABAUTH-USERID TO TABVAL-USERID.
  MOVE TABAUTH-PROFILE TO TABVAL-PROFILE.
  MOVE TABAUTH-OBJECT TO TABVAL-OBJECT.
  MOVE TABAUTH-RULE TO TABVAL-RULE.
ENDFORM. "480_PROCESS_MOVES
*---------------------------------------------------------------
* FORM 500_PROCESS_REPORT
*---------------------------------------------------------------
* Create a report
*---------------------------------------------------------------
FORM 500_PROCESS_REPORT.
  LOOP AT TABVAL.
    AT NEW USERID.
      NEW-PAGE.
      SELECT SINGLE * FROM USR03
      WHERE BNAME = TABVAL-USERID.
      IF USR03-NAME1 = SPACE.
        MOVE 'User Name NOT Available' TO USER-NAME.
      ELSE.
        MOVE USR03-NAME1 TO USER-NAME.
      ENDIF.
*---------------------------------------------------------------
* If you want to display the Department comment back in
*---------------------------------------------------------------
* IF USR03-ABTLG = SPACE.
* MOVE 'Users Department NOT Available' TO USER-DEPT.
* ELSE.
* MOVE USR03-ABTLG TO USER-DEPT.
* ENDIF.
      IF USR03-KOSTL = SPACE.
        MOVE 'Users Cost Center NOT Available' TO USER-COST-CENTER.
      ELSE.
        MOVE USR03-KOSTL TO USER-COST-CENTER.
      ENDIF.
    ENDAT.
    AT NEW PROFILE.
      WRITE: / TABVAL-PROFILE.
    ENDAT.
    AT NEW OBJECT.
      WRITE: /15 TABVAL-OBJECT.
      SELECT SINGLE * FROM TOBJT
      WHERE LANGU = SY-LANGU
      AND OBJECT = TABVAL-OBJECT.
      WRITE: 30 TOBJT-TTEXT.
      SKIP.
    ENDAT.
    IF ( TABVAL-RULE = PREV-RULE ) AND ( TABVAL-OBJECT = PREV-OBJECT ).
      PERFORM 550-CHECK-PREV-FIELD.
    ELSE.
      PERFORM 600-GET_FIELD_NAME.
      WRITE: /40 TABVAL-RULE,
      60 INTFIELD-FTEXT, "Field text
      110 TABVAL-VON, "Value From
      118 TABVAL-BIS. "Value To
      MOVE TABVAL-RULE TO PREV-RULE.
      MOVE TABVAL-OBJECT TO PREV-OBJECT.
      MOVE TABVAL-SFIELD TO PREV-SFIELD.
    ENDIF.
* BREAK-POINT.
  ENDLOOP.
ENDFORM. "500_PROCESS_REPORT
*---------------------------------------------------------------------*
* FORM 550-CHECK-PREV-FIELD *
*---------------------------------------------------------------------*
* To avoid redundant printing of the field name. *
*---------------------------------------------------------------------*
FORM 550-CHECK-PREV-FIELD.
  IF TABVAL-SFIELD = PREV-SFIELD.
    WRITE: /110 TABVAL-VON, "Value From
    118 TABVAL-BIS. "Value To
  ELSE.
    PERFORM 600-GET_FIELD_NAME.
    WRITE: /60 INTFIELD-FTEXT, "Field text
    110 TABVAL-VON, "Value From
    118 TABVAL-BIS. "Value To
    MOVE TABVAL-SFIELD TO PREV-SFIELD.
  ENDIF.
ENDFORM. "550-CHECK-PREV-FIELD
*---------------------------------------------------------------------*
* FORM 600-GET_FIELD_NAME *
*---------------------------------------------------------------------*
* Get the text name using the technical field name *
*---------------------------------------------------------------------*
FORM 600-GET_FIELD_NAME.
  CALL FUNCTION 'AUTH_FIELD_GET_INFO'
  EXPORTING
  FIELDNAME = TABVAL-SFIELD
  IMPORTING
  DATEL = DFIES-ROLLNAME
  LNG = DFIES-OUTPUTLEN
* RC = SY-SUBRC
  TEXT = DFIES-FIELDTEXT
  TYPE = DFIES-INTTYPE.
  IF SY-SUBRC <> 0.
    INTFIELD-FTEXT = TABVAL-SFIELD.
    IF SY-LANGU <> SYST_LANGUAGE.
      CALL FUNCTION 'AUTH_FIELD_GET_INFO'
      EXPORTING
      FIELDNAME = TABVAL-SFIELD
      LANGU = SYST_LANGUAGE
      IMPORTING
      DATEL = DFIES-ROLLNAME
      LNG = DFIES-OUTPUTLEN
* RC = SY-SUBRC
      TEXT = DFIES-FIELDTEXT
      TYPE = DFIES-INTTYPE.
      IF SY-SUBRC <> 0.
        MESSAGE A999 WITH 'Could not Get Info of Field Authority'.
      ENDIF.
    ELSE.
      MESSAGE A999 WITH 'System Language Invalid'.
    ENDIF.
  ELSE.
    IF DFIES-FIELDTEXT <> SPACE.
      INTFIELD-FTEXT = DFIES-FIELDTEXT.
    ELSE.
      INTFIELD-FTEXT = TABVAL-SFIELD.
    ENDIF.
  ENDIF.
ENDFORM. "600-GET_FIELD_NAME
INCLUDE ZCONINC3.
SKIP 2.
WRITE: / 'User-ID=', TABVAL-USERID, 'User Name=', USER-NAME.
WRITE: /30 'Object',
113 'Values'.
WRITE: / 'Profile',
15 'Object',
30 'Text',
40 'Authorization',
60 'Field Name',
110 'From',
118 'To'.
ULINE: /(7),15(6),30(6),40(13),60(11),110(10).
SKIP.
  • No labels