REPORT ZZAUT004 MESSAGE-ID 01.
*----------------------------------------------------------------------*
* Topic:       Utillity for Maintenance Single profiles.               *
*                                                                      *
* Description: Enhanced maintenance function for maintenance the pro-  *
*              files (single). With this program you enter the profile *
*              name profile text and up to x objects and authorization *
*                                                                      *
* Implementing The program is client independent.                      *
*                                                                      *
* Authoriza.   Standard authorization checks as in the normal editor.  *
*                                                                      *
* Submitting:  Run by SA38, SE38.                                      *
*                                                                      *
* Parametre:   Object, Authorizations.                                 *
*                                                                      *
* Output:      Files on the desktop or presentation server:            *
*                                                                      *
* Customizing: No need for customization.                              *
*                                                                      *
* Change of    You only need to do the syntax check at releasechange.  *
* release:                                                             *
*                                                                      *
* R/3 Release: Developed and tested in R/3 Release:                    *
*              3.0F                                                    *
*                                                                      *
* Programmer:  Benny G. Sørensen,                                      *
* Date:        May 1997.                                               *
*                                                                      *
*------------------------------ Questions -----------------------------*
* Version  2
*-------------------------------Corrections----------------------------*
* Date        Userid     Correction     Text                           *
* ::.::.::::  ::::::::   :::::::::::::: :::::::::::::::::::::::::::::  *
*----------------------------------------------------------------------*
TABLES: SSCRFIELDS.
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
   PARAMETERS: P_PROF LIKE USR10-PROFN
              ,P_TEXT LIKE USR11-PTEXT.
SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT0 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH0  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT1 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH1  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT2 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH2  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT3 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH3  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT4 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH4  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT5 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH5  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT6 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH6  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT7 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH7  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT8 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH8  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJCT9 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUTH9  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC10 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT10  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC11 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT11  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC12 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT12  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC13 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT13  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC14 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT14  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC15 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT15  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC16 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT16  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC17 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT17  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC18 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT18  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
  SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 1(31) TEXT-000 .
      PARAMETERS:  P_OBJC19 LIKE TOBJ-OBJCT.
      SELECTION-SCREEN COMMENT (3) TEXT-003 .
      PARAMETERS:  P_AUT19  LIKE USR12-AUTH.
    SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLK2.

SELECTION-SCREEN FUNCTION KEY 1. "Insert

INCLUDE MS01CTP2.
INCLUDE MS01CTCO.
*----------------------------------------------------------------------*
* EVENT: Initialization
*----------------------------------------------------------------------*
INITIALIZATION.
  SSCRFIELDS-FUNCTXT_01 = TEXT-023. "Insert

*----------------------------------------------------------------------*
* EVENT: validate users entries on the selection screen                *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
  IF SSCRFIELDS-UCOMM = 'FC01'.
    PERFORM NEW_PROFILE.
  ENDIF.

*---------------------------------------------------------------------*
*       FORM ADD_TABPRO                                               *
*---------------------------------------------------------------------*
FORM NEW_PROFILE.
  CLEAR TABPRO. REFRESH TABPRO.

  PERFORM ADD_TABPRO  USING P_OBJCT0 P_AUTH0.
  PERFORM ADD_TABPRO  USING P_OBJCT1 P_AUTH1.
  PERFORM ADD_TABPRO  USING P_OBJCT2 P_AUTH2.
  PERFORM ADD_TABPRO  USING P_OBJCT3 P_AUTH3.
  PERFORM ADD_TABPRO  USING P_OBJCT4 P_AUTH4.
  PERFORM ADD_TABPRO  USING P_OBJCT5 P_AUTH5.
  PERFORM ADD_TABPRO  USING P_OBJCT6 P_AUTH6.
  PERFORM ADD_TABPRO  USING P_OBJCT7 P_AUTH7.
  PERFORM ADD_TABPRO  USING P_OBJCT8 P_AUTH8.
  PERFORM ADD_TABPRO  USING P_OBJCT9 P_AUTH9.

  PERFORM ADD_TABPRO  USING P_OBJC10 P_AUT10.
  PERFORM ADD_TABPRO  USING P_OBJC11 P_AUT11.
  PERFORM ADD_TABPRO  USING P_OBJC12 P_AUT12.
  PERFORM ADD_TABPRO  USING P_OBJC13 P_AUT13.
  PERFORM ADD_TABPRO  USING P_OBJC14 P_AUT14.
  PERFORM ADD_TABPRO  USING P_OBJC15 P_AUT15.
  PERFORM ADD_TABPRO  USING P_OBJC16 P_AUT16.
  PERFORM ADD_TABPRO  USING P_OBJC17 P_AUT17.
  PERFORM ADD_TABPRO  USING P_OBJC18 P_AUT18.
  PERFORM ADD_TABPRO  USING P_OBJC19 P_AUT19.

  LOOP AT TABPRO.
    SELECT SINGLE * FROM USR12
      WHERE OBJCT = TABPRO-OBJECT
        AND AKTPS = 'A'
        AND AUTH  = TABPRO-RULE.
    IF SY-SUBRC NE 0.
      MESSAGE S215 WITH TABPRO-RULE.
    ENDIF.
  ENDLOOP.

  PERFORM UPD_PROFILE USING SPACE P_PROF 'P' P_TEXT.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM ADD_TABPRO                                               *
*---------------------------------------------------------------------*
FORM ADD_TABPRO USING VALUE(OBJCT) VALUE(AUTH) .
  CHECK NOT ( OBJCT IS INITIAL ).
  CHECK NOT ( AUTH  IS INITIAL ).
  CLEAR TABPRO.
  TABPRO-OBJECT = OBJCT.
  TABPRO-OTEXT  = ''.
  TABPRO-RULE   = AUTH.
  TABPRO-MARK   = SPACE.
  APPEND TABPRO.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM UPD_PROFILE                                              *
*---------------------------------------------------------------------*
FORM UPD_PROFILE USING
         VALUE(DIVISION) VALUE(PROFILE) VALUE(AKTPAS) PTEXT.
  PERFORM UPD_USR10
          USING PROFILE AKTPAS SPACE 'S'.
* Profiletext sichern, falls einer angegeben wurde
  IF PTEXT <> SPACE.
    PERFORM UPD_USR11 USING PROFILE AKTPAS PTEXT.
  ENDIF.
  PCHANGE = 0.
  PERFORM SAVED.
  PERFORM AKTIV USING 'P'.
  MESSAGE S210 WITH PROFILE.
ENDFORM.

FORM AKTIV USING AKTPAS.
  IF AKTPAS = 'P'.
    STATE = 11.
  ELSE.
    STATE = 12.
  ENDIF.
ENDFORM.
FORM SAVED.
  IF STATE < 10.
    STATE = STATE + 10.
  ENDIF.
ENDFORM.
FORM UPD_USR10 USING VALUE(PROFILE) VALUE(AKTPAS) VALUE(DIVISION)
                     VALUE(BTYP).
DATA: OFF TYPE I,
      Z   TYPE I VALUE 0,
      MAX TYPE I,
      LONGSTRING(3750),
      LONGSTRING1(3750).

DATA: BEGIN OF INTUST10C OCCURS 50.
        INCLUDE STRUCTURE UST10C.
DATA: END OF INTUST10C.

DATA: BEGIN OF INTUST10S OCCURS 50.
        INCLUDE STRUCTURE UST10S.
DATA: END OF INTUST10S.
*
  SELECT SINGLE * FROM USR10
         WHERE PROFN = PROFILE
         AND   AKTPS  = AKTPAS.
  RC = SY-SUBRC.
  MOVE-CORRESPONDING USR10 TO *USR10.
  CLEAR USR10.
  CLEAR LONGSTRING.
  USR10-PROFN = PROFILE.            
  USR10-AKTPS = AKTPAS.
  USR10-DIVIS = DIVISION.
  USR10-TYP   = BTYP.
  OFF = 2.
  Z = 0.
  IF USR10-TYP = COLECTPROF. 
    MAX = MAXREC - PROFLNG.
    LOOP AT TABCPF.
      WRITE TABCPF-PROF TO LONGSTRING+OFF(PROFLNG).
      OFF = OFF + PROFLNG.
      Z = Z + 1.
      IF OFF > MAX.
        MESSAGE W269.
        EXIT.
      ENDIF.
    ENDLOOP.
  ELSE.     
    IF USR10-TYP = SINGLEPROF.
      MAX = MAXREC - OBJLNG - AUTHLNG.
      LOOP AT TABPRO. 
        WRITE TABPRO-OBJECT TO LONGSTRING+OFF(OBJLNG).
        OFF = OFF + OBJLNG.
        WRITE TABPRO-RULE TO LONGSTRING+OFF(AUTHLNG).
        OFF = OFF + AUTHLNG.
        IF OFF > MAX.
          MESSAGE W260.
          EXIT.
        ENDIF.
        Z = Z + 1.
      ENDLOOP.
    ENDIF.
  ENDIF.
  USR10-NRAUT = OFF.
  USR10-AUTHS = LONGSTRING.

  IF RC = 0.

    IF AKTPAS = AKTIVATED.
      IF *USR10-AUTHS(1) <> REC_TYPE_CREATE AND
         *USR10-AUTHS(1) <> REC_TYPE_MODIFY.   
        SELECT * FROM USH10                    
               WHERE PROFN = PROFILE.          
          EXIT.                                
        ENDSELECT.                             
        IF SY-SUBRC <> 0.                      
          WRITE REC_TYPE_CREATE TO *USR10-AUTHS(1).
        ELSE.                                      
          MOVE-CORRESPONDING *USR10 TO USH10.      
          CLEAR USH10-AUTHS.                       
          INSERT USH10.                            
          *USR10-MODDA = SY-DATUM.                 
          *USR10-MODTI = SY-UZEIT - 1.             
          *USR10-MODBE = SY-UNAME.                 
        ENDIF.                                     
      ENDIF.                                       
      MOVE-CORRESPONDING *USR10 TO USH10.          
      INSERT USH10.
      IF SY-SUBRC <> 0.
        MESSAGE S297 WITH 'IH10' SY-SUBRC.
      ENDIF.
    ENDIF.
*
    USR10-MODBE = SY-UNAME.
    USR10-MODDA = SY-DATUM.
    USR10-MODTI = SY-UZEIT.
    WRITE REC_TYPE_MODIFY TO USR10-AUTHS(1).
    UPDATE USR10.
  ELSE.                               "Record is new
    USR10-MODBE = SY-UNAME.                         
    USR10-MODDA = SY-DATUM.                         
    USR10-MODTI = SY-UZEIT.                         
    WRITE REC_TYPE_CREATE TO USR10-AUTHS(1).        
    INSERT USR10.
  ENDIF.
  IF BTYP = COLECTPROF.
  SELECT * FROM UST10C INTO INTUST10C
         WHERE PROFN   = PROFILE
         AND   AKTPS   = AKTPAS.
    APPEND INTUST10C.
  ENDSELECT.
* Activate Transparente Tables ust10c or ust10s 
  SORT INTUST10C.
  LOOP AT INTUST10C.
    READ TABLE TABCPF WITH KEY PROF = INTUST10C-SUBPROF.
    IF SY-SUBRC <> 0.
      DELETE FROM UST10C
             WHERE PROFN   = INTUST10C-PROFN
             AND   AKTPS   = INTUST10C-AKTPS
             AND   SUBPROF = INTUST10C-SUBPROF.
    ENDIF.
  ENDLOOP.
  UST10C-PROFN = PROFILE.
  UST10C-AKTPS = AKTPAS.
  LOOP AT TABCPF.
    READ TABLE INTUST10C WITH KEY SUBPROF = TABCPF-PROF.
    IF SY-SUBRC <> 0.
      UST10C-SUBPROF = TABCPF-PROF.
      INSERT UST10C.
    ENDIF.
  ENDLOOP.
  ELSE.
  SELECT * FROM UST10S INTO INTUST10S
         WHERE PROFN   = PROFILE
         AND   AKTPS   = AKTPAS.
    APPEND INTUST10S.
  ENDSELECT.
  SORT INTUST10S.
  LOOP AT INTUST10S.
    READ TABLE TABPRO WITH KEY OBJECT  = INTUST10S-OBJCT
                               RULE    = INTUST10S-AUTH.
    IF SY-SUBRC <> 0.
      DELETE FROM UST10S
             WHERE PROFN   = INTUST10S-PROFN
             AND   AKTPS   = INTUST10S-AKTPS
             AND   OBJCT   = INTUST10S-OBJCT
             AND   AUTH    = INTUST10S-AUTH.
    ENDIF.
  ENDLOOP.
  UST10S-PROFN = PROFILE.
  UST10S-AKTPS = AKTPAS.
  LOOP AT TABPRO.
    READ TABLE INTUST10S WITH KEY OBJCT  = TABPRO-OBJECT
                                  AUTH   = TABPRO-RULE.
    IF SY-SUBRC <> 0.
      UST10S-OBJCT   = TABPRO-OBJECT.
      UST10S-AUTH    = TABPRO-RULE.
      INSERT UST10S.
    ENDIF.
  ENDLOOP.
  ENDIF.
ENDFORM.

FORM UPD_USR11 USING VALUE(PROFILE) VALUE(AKTPAS) VALUE(PTEXT).
    SELECT SINGLE * FROM USR11
           WHERE LANGU = SY-LANGU
           AND   PROFN = PROFILE
           AND   AKTPS = AKTPAS.
      USR11-PTEXT = PTEXT.
    IF SY-SUBRC = 0.
      UPDATE USR11.
      IF SY-SUBRC <> 0.
        MESSAGE S297 WITH 'UR11' SY-SUBRC.
      ENDIF.
    ELSE.
      USR11-LANGU = SY-LANGU.
      USR11-PROFN = PROFILE.
      USR11-AKTPS = AKTPAS.
      INSERT  USR11.
      IF SY-SUBRC <> 0.
        MESSAGE S297 WITH 'IR11' SY-SUBRC.
      ENDIF.
    ENDIF.
ENDFORM.