Additional Functionality on SELECT-OPTIONS 功能限制

REPORT  YTEST_HU004.
TYPE-POOLS: SSCR.
TABLES: T001,MARA.
SELECT-OPTIONS: S_BUKRS FOR T001-BUKRS,
                S_MATNR FOR MARA-MATNR.

INITIALIZATION.
* 控制用结构ls_restrict的做成
  DATA: LIW_RESTRICT TYPE SSCR_RESTRICT.
  DATA: LIW_OPTLIST  TYPE SSCR_OPT_LIST,
        LIW_ASS      TYPE SSCR_ASS.
* 自定义名称V1
  LIW_OPTLIST-NAME = ‘V1′.
* 允许’=’
  LIW_OPTLIST-OPTIONS-EQ = ‘X’.
* 允许范围
  LIW_OPTLIST-OPTIONS-BT = ‘X’.
  APPEND  LIW_OPTLIST TO LIW_RESTRICT-OPT_LIST_TAB.

  CLEAR LIW_OPTLIST.
* 自定义名称V2
  LIW_OPTLIST-NAME = ‘V2′.
* 允许’=’
  LIW_OPTLIST-OPTIONS-EQ = ‘X’.
  APPEND  LIW_OPTLIST TO LIW_RESTRICT-OPT_LIST_TAB.
  LIW_ASS-KIND = ‘S’.
  LIW_ASS-NAME = ‘S_BUKRS’.
  LIW_ASS-SG_MAIN = ‘I’.
  LIW_ASS-OP_MAIN = ‘V1′.
  APPEND  LIW_ASS TO LIW_RESTRICT-ASS_TAB.
  CLEAR LIW_ASS.
  LIW_ASS-KIND = ‘S’.
  LIW_ASS-NAME = ‘S_MATNR’.
  LIW_ASS-SG_MAIN = ‘I’.
  LIW_ASS-OP_MAIN = ‘V2′.
  APPEND  LIW_ASS TO LIW_RESTRICT-ASS_TAB.
  CALL FUNCTION ‘SELECT_OPTIONS_RESTRICT’
    EXPORTING
      RESTRICTION            = LIW_RESTRICT
    EXCEPTIONS
      TOO_LATE               = 1
      REPEATED               = 2
      SELOPT_WITHOUT_OPTIONS = 3
      SELOPT_WITHOUT_SIGNS   = 4
      INVALID_SIGN           = 5
      EMPTY_OPTION_LIST      = 6
      INVALID_KIND           = 7
      REPEATED_KIND_A        = 8
      OTHERS                 = 9.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
REPORT  ZTEST222 MESSAGE-ID LR.
TABLES: CATSDB.
SELECT-OPTIONS: BELNR FOR CATSDB-BELNR NO INTERVALS.
DATA: TAB_BELNR LIKE CATS_BELNR OCCURS 0 WITH HEADER LINE.
TYPE-POOLS SSCR.
DATA: RESTRICT TYPE SSCR_RESTRICT.
DATA: OPT_LIST TYPE SSCR_OPT_LIST.
DATA: ASS      TYPE SSCR_ASS.
INITIALIZATION.
* restrict input possibilities
MOVE 'BELNR'      TO OPT_LIST-NAME.
MOVE 'X' TO: OPT_LIST-OPTIONS-EQ.
APPEND OPT_LIST TO RESTRICT-OPT_LIST_TAB.
  MOVE: 'A'          TO ASS-KIND,
'I'          TO ASS-SG_MAIN,
' '          TO ASS-SG_ADDY,
'BELNR'      TO ASS-OP_MAIN.
APPEND ASS TO RESTRICT-ASS_TAB.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
            RESTRICTION            = RESTRICT
EXCEPTIONS
            TOO_LATE               = 1
            REPEATED               = 2
            SELOPT_WITHOUT_OPTIONS = 3
            SELOPT_WITHOUT_SIGNS   = 4
            INVALID_SIGN           = 5
            EMPTY_OPTION_LIST      = 6
            INVALID_KIND           = 7
            REPEATED_KIND_A        = 8
OTHERS                 = 9.
* start to display the document
START-OF-SELECTION.
PERFORM FILL_BELNR_TAB.
PERFORM DISPLAY_DOCUMENT.
*---------------------------------------------------------------------*
*       FORM FILL_BELNR_TAB                                           *
*---------------------------------------------------------------------*
*       Fill internal table                                           *
*---------------------------------------------------------------------*
FORM FILL_BELNR_TAB.
REFRESH TAB_BELNR.
IF NOT BELNR IS INITIAL.
LOOP AT BELNR.
      TAB_BELNR-BELNR = BELNR-LOW.
APPEND TAB_BELNR.
    ENDLOOP.
  ELSE.
MESSAGE I228.
    STOP.
  ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM DISPLAY_DOCUMENT                                         *
*---------------------------------------------------------------------*
*       display document                                              *
*---------------------------------------------------------------------*
FORM DISPLAY_DOCUMENT.
CALL FUNCTION 'CATS_DISPLAY_DOCUMENT'
TABLES
            TAB_BELNR         = TAB_BELNR
EXCEPTIONS
            NO_DOCUMENT_FOUND = 1
            NO_DATA           = 2
            SYSTEM_ERROR      = 3
OTHERS            = 4.
IF SY-SUBRC = 1.
MESSAGE I170.
ELSEIF SY-SUBRC = 2.
MESSAGE I072.
ELSEIF SY-SUBRC = 3.
MESSAGE E020.
ELSEIF SY-SUBRC = 4.
MESSAGE E030.
  ENDIF.
ENDFORM.

你可能感兴趣的:(function)