REPORT ZYUTL002.
*---------------------------------------------------------------------*
* This program lists the user's auth. profiles.
*---------------------------------------------------------------------*
TABLES : USR01 ,
         USR04 ,
         USR10 ,
         USR11 .

SELECT-OPTIONS : XNAME FOR USR04-BNAME .

DATA : BEGIN OF TABUSR OCCURS 200,
         BNAME LIKE USR04-BNAME ,
         PROFILE LIKE USR10-PROFN,
         SAMPROF(1),
         PTEXT   LIKE USR11-PTEXT,
       END OF TABUSR .
DATA : RC LIKE SY-SUBRC ,
       AKTIVATED  VALUE 'A',
       COLECTPROF VALUE 'C',
       GENERPROF  VALUE 'G' ,
       MAXUSR TYPE I VALUE 300 ,
       PROFLNG LIKE SY-FDPOS VALUE 12. " -    Profile

FIELD-SYMBOLS: <TEXT>.
DATA  PRINT_USERS_PROFILES.

* -----------
SELECT * FROM USR01 WHERE BNAME IN XNAME .

  PERFORM READ_USR04                   "User-Record lesen
          USING USR01-BNAME .

ENDSELECT .

LOOP AT TABUSR .
  CLEAR USR11.
* Get the profile texts.
  SELECT SINGLE * FROM USR11
         WHERE LANGU = SY-LANGU
         AND   PROFN = TABUSR-PROFILE
         AND   AKTPS = AKTIVATED.
  TABUSR-PTEXT = USR11-PTEXT.
  MODIFY TABUSR.
ENDLOOP.

PERFORM PRINT_USERS_PROFILES.

*---------------------------------------------------------------------*
*       FORM READ_USR04                                               *
*---------------------------------------------------------------------*
FORM READ_USR04 USING VALUE(USER) .
  CLEAR USR04.
  SELECT SINGLE * FROM USR04
         WHERE BNAME   = USER.
  IF SY-SUBRC = 0.
    PERFORM FILL_TABUSR USING USER.
    LOOP AT TABUSR.
      CLEAR USR10.
      SELECT SINGLE * FROM USR10
             WHERE PROFN = TABUSR-PROFILE
             AND   AKTPS  = AKTIVATED.
      IF USR10-TYP = COLECTPROF.
        TABUSR-SAMPROF  = 'X'.
      ELSEIF USR10-TYP = GENERPROF.
        TABUSR-SAMPROF = 'G'.
      ELSE.
        CLEAR TABUSR-SAMPROF.
      ENDIF.
      MODIFY TABUSR.
    ENDLOOP.
  ELSE.
    CLEAR TABUSR.
  ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM FILL_TABUSR                                              *
*---------------------------------------------------------------------*
FORM FILL_TABUSR USING VALUE(USER) .
  DATA: NRPRO TYPE I,
        OFF   TYPE I.

  CLEAR TABUSR.
  OFF = 2.
  NRPRO = USR04-NRPRO / 12.
  IF NRPRO > MAXUSR. NRPRO = 0. ENDIF.
  DO NRPRO TIMES.
    ASSIGN USR04-PROFS+OFF(PROFLNG) TO <TEXT>.
    WRITE <TEXT> TO TABUSR-PROFILE.
    TABUSR-BNAME = USER .
    APPEND TABUSR.
    OFF = OFF + PROFLNG.
  ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  PRINT_USERS_PROFILES
*&---------------------------------------------------------------------*
FORM PRINT_USERS_PROFILES.

  SORT TABUSR BY BNAME .
  LOOP AT TABUSR .
    AT NEW BNAME .
      SKIP 1 .
      WRITE : /001 'User name :', TABUSR-BNAME .
      WRITE : /001 SY-ULINE(30) .
    ENDAT .
    WRITE : / TABUSR-PROFILE, TABUSR-PTEXT.

  ENDLOOP .
ENDFORM.                               " PRINT_USERS_PROFILES