FM SELECT_OPTIONS_RESTRICT

 REPORT TESTREP.

 * Include type pool SSCR
 TYPE-POOLS SSCR.

 * Define the object to be passed to the RESTRICTION parameter
 DATA RESTRICT TYPE SSCR_RESTRICT.

 * Auxiliary objects for filling RESTRICT
 DATA OPT_LIST TYPE SSCR_OPT_LIST.
 DATA ASS      TYPE SSCR_ASS.

 * Define the selection screen objects
 * First block: 3 SELECT-OPTIONS
 SELECTION-SCREEN BEGIN OF BLOCK BLOCK_0 WITH FRAME TITLE TEXT-BL0.
   SELECT-OPTIONS SEL_0_0 FOR SY-TVAR0.
   SELECT-OPTIONS SEL_0_1 FOR SY-TVAR1.
   SELECT-OPTIONS SEL_0_2 FOR SY-TVAR2.
   SELECT-OPTIONS SEL_0_3 FOR SY-TVAR3.
 SELECTION-SCREEN END   OF BLOCK BLOCK_0.

 * Second block: 2 SELECT-OPTIONS
 SELECTION-SCREEN BEGIN OF BLOCK BLOCK_1 WITH FRAME TITLE TEXT-BL1.
   SELECT-OPTIONS SEL_1_0 FOR SY-SUBRC.
   SELECT-OPTIONS SEL_1_1 FOR SY-REPID.
 SELECTION-SCREEN END   OF BLOCK BLOCK_1.

 INITIALIZATION.

 * Define the option list

 * ALL: All options allowed

MOVE 'ALL'        TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-BT,
             OPT_LIST-OPTIONS-CP,
             OPT_LIST-OPTIONS-EQ,
             OPT_LIST-OPTIONS-GE,
             OPT_LIST-OPTIONS-GT,
             OPT_LIST-OPTIONS-LE,
             OPT_LIST-OPTIONS-LT,
             OPT_LIST-OPTIONS-NB,
             OPT_LIST-OPTIONS-NE,
             OPT_LIST-OPTIONS-NP.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

NOPATTERN: CP and NP not allowed
CLEAR OPT_LIST.
MOVE 'NOPATTERN'  TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-BT,
             OPT_LIST-OPTIONS-EQ,
             OPT_LIST-OPTIONS-GE,
             OPT_LIST-OPTIONS-GT,
             OPT_LIST-OPTIONS-LE,
             OPT_LIST-OPTIONS-LT,
             OPT_LIST-OPTIONS-NB,
             OPT_LIST-OPTIONS-NE.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

NOINTERVLS: BT and NB not allowed
CLEAR OPT_LIST.
MOVE 'NOINTERVLS' TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-CP,
             OPT_LIST-OPTIONS-EQ,
             OPT_LIST-OPTIONS-GE,
             OPT_LIST-OPTIONS-GT,
             OPT_LIST-OPTIONS-LE,
             OPT_LIST-OPTIONS-LT,
             OPT_LIST-OPTIONS-NE,
             OPT_LIST-OPTIONS-NP.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
* EQ_AND_CP: only EQ and CP allowed
  CLEAR OPT_LIST.
  MOVE 'EQ_AND_CP'  TO OPT_LIST-NAME.
  MOVE 'X' TO: OPT_LIST-OPTIONS-CP,
               OPT_LIST-OPTIONS-EQ.
  APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* JUST_EQ: Only EQ allowed
  CLEAR OPT_LIST.
  MOVE 'JUST_EQ' TO OPT_LIST-NAME.
  MOVE 'X' TO OPT_LIST-OPTIONS-EQ.
  APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.

* Assign selection screen objects to option list and sign

* KIND = 'A': applies to all SELECT-OPTIONS
  MOVE: 'A'          TO ASS-KIND,
        '*'          TO ASS-SG_MAIN,
        'NOPATTERN'  TO ASS-OP_MAIN,
        'NOINTERVLS' TO ASS-OP_ADDY.
  APPEND ASS TO RESTRICT-ASS_TAB.

* KIND = 'B': applies to all SELECT-OPTIONS in block BLOCK_0,
*             that is, SEL_0_0, SEL_0_1, SEL_0_2
  CLEAR ASS.
  MOVE: 'B'          TO ASS-KIND,
        'BLOCK_0'    TO ASS-NAME,
        'I'          TO ASS-SG_MAIN,
        '*'          TO ASS-SG_ADDY,
        'NOINTERVLS' TO ASS-OP_MAIN.
  APPEND ASS TO RESTRICT-ASS_TAB.

* KIND = 'S': applies to SELECT-OPTION SEL-0-2
  CLEAR ASS.
  MOVE: 'S'          TO ASS-KIND,
        'SEL_0_2'    TO ASS-NAME,
        'I'          TO ASS-SG_MAIN,
        '*'          TO ASS-SG_ADDY,
        'EQ_AND_CP'  TO ASS-OP_MAIN,
        'ALL'        TO ASS-OP_ADDY.
  APPEND ASS TO RESTRICT-ASS_TAB.

* KIND = 'S': Applies to SELECT-OPTION SEL_0_3
  CLEAR ASS.
  MOVE: 'S'        TO ASS-KIND,
        'SEL_0_3'  TO ASS-NAME,
        'I'        TO ASS-SG_MAIN,
        'N'        TO ASS-SG_ADDY,
        'JUST_EQ'  TO ASS-OP_MAIN.
  APPEND ASS TO RESTRICT-ASS_TAB.

* Call function module
  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
       EXPORTING
            RESTRICTION                = RESTRICT
*           DB                         = ' '

       EXCEPTIONS
            TOO_LATE                   = 1
            REPEATED                   = 2
            NOT_DURING_SUBMIT          = 3
            DB_CALL_AFTER_REPORT_CALL  = 4
            SELOPT_WITHOUT_OPTIONS     = 5
            SELOPT_WITHOUT_SIGNS       = 6
            INVALID_SIGN               = 7
            REPORT_CALL_AFTER_DB_ERROR = 8
            EMPTY_OPTION_LIST          = 9
            INVALID_KIND               = 10
            REPEATED_KIND_A            = 11
            OTHERS                     = 12.

* Exception handling
  IF SY-SUBRC NE 0.
    ...
  ENDIF.

  ...

START-OF-SELECTION.

  ...

你可能感兴趣的:(select)