REPORT ZALV_MATERIAL_INFO.
*----------------------------------------------------------------------*
* INCLUDE
*----------------------------------------------------------------------*
INCLUDE .
*----------------------------------------------------------------------*
* TYPES
*----------------------------------------------------------------------*
TYPE-POOLS SLIS. "Used for ALV function
*----------------------------------------------------------------------*
* DATA
*----------------------------------------------------------------------*
*----- material information structure & itab
DATA:
BEGIN OF WA_MATERIAL,
CHECK TYPE C,
ICON1 LIKE ICON-ID,
MATNR LIKE MAKT-MATNR,
MAKTX LIKE MAKT-MAKTX,
END OF WA_MATERIAL.
DATA:
IT_MATERIAL LIKE TABLE OF WA_MATERIAL,
GW_MATNR LIKE MAKT-MATNR,
*----- ALV used
IT_EVENT TYPE SLIS_T_EVENT,
IT_HEADER TYPE SLIS_T_LISTHEADER,
WA_EXIT TYPE SLIS_EXIT_BY_USER, "RET-CODE CANCEL
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
GW_VARIANT LIKE DISVARIANT,
IT_EXIT TYPE SLIS_T_EVENT_EXIT WITH HEADER LINE,
*----- Program ID
GW_REPID LIKE SY-REPID,
*----- user's selection of pop up dialog
GW_ANSWER TYPE C.
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS:
C_TABNAM TYPE SLIS_TABNAME VALUE 'WA_MATERIAL',
C_PF_ST LIKE SY-PFKEY VALUE 'S001',
C_FN_TOP_PAGE TYPE SLIS_FORMNAME VALUE 'ALV_TOP_OF_PAGE'.
*----------------------------------------------------------------------*
* PARAMETERS
*----------------------------------------------------------------------*
PARAMETERS:
P_VARI TYPE DISVARIANT-VARIANT. "Layout
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
GW_REPID = SY-REPID. "Get Program ID
%_P_VARI_%_APP_%-TEXT = 'Display Variant'.
* BACK button
IT_EXIT-UCOMM = '&F03'.
IT_EXIT-BEFORE = 'X'.
IT_EXIT-AFTER = 'X'.
APPEND IT_EXIT TO IT_EXIT.
IT_EXIT-UCOMM = '&IC1'.
APPEND IT_EXIT TO IT_EXIT.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
* ALV layout help list
PERFORM F4_FOR_VARIANT USING P_VARI.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
PERFORM CHECK_LAYOUT_VAR.
*----------------------------------------------------------------------*
* START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM FRM_SELECT_DATA.
PERFORM FRM_OUTPUT_RESULT.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_DATA
*&---------------------------------------------------------------------*
* Select data from MAKT
*----------------------------------------------------------------------*
FORM FRM_SELECT_DATA.
SELECT MATNR
MAKTX
FROM MAKT
UP TO 10 ROWS
INTO CORRESPONDING FIELDS OF TABLE IT_MATERIAL.
*----- set icon
LOOP AT IT_MATERIAL INTO WA_MATERIAL.
WA_MATERIAL-ICON1 = ICON_GREEN_LIGHT.
MODIFY IT_MATERIAL FROM WA_MATERIAL.
ENDLOOP.
ENDFORM. " FRM_SELECT_DATA
*&---------------------------------------------------------------------*
*& Form FRM_OUTPUT_RESULT
*&---------------------------------------------------------------------*
* Display result
*----------------------------------------------------------------------*
FORM FRM_OUTPUT_RESULT.
*----- event table
PERFORM BUILD_EVENTTAB USING IT_EVENT.
*----- ALV layout
PERFORM SET_ALV_LAYOUT.
PERFORM CHANGE_ALV_LAYOUT.
*----- set ALV variant
PERFORM SET_ALV_VARIANT USING P_VARI.
*----- display ALV
PERFORM DISPLAY_ALV_GRID.
ENDFORM. " FRM_OUTPUT_RESULT
*&---------------------------------------------------------------------*
*& Form FRM_SET_PF_STAUS
*&---------------------------------------------------------------------*
* Set gui status
*----------------------------------------------------------------------*
FORM FRM_SET_PF_STAUS USING UT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS C_PF_ST. "S001
ENDFORM. " FRM_SET_PF_STAUS
*&---------------------------------------------------------------------*
*& Form FRM_HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
* Handle user command
*----------------------------------------------------------------------*
FORM FRM_HANDLE_USER_COMMAND USING U_UCOMM LIKE SY-UCOMM
UH_SELFIELD TYPE SLIS_SELFIELD.
CASE U_UCOMM.
WHEN '&F03'.
PERFORM POPUP_DIALOG.
IF GW_ANSWER <> '1'.
LEAVE SCREEN.
ELSE.
LEAVE TO SCREEN 0.
ENDIF.
WHEN 'CLER'.
* double click a line
WHEN '&IC1'.
READ TABLE IT_MATERIAL INTO WA_MATERIAL
INDEX UH_SELFIELD-TABINDEX.
GW_MATNR = WA_MATERIAL-MATNR.
SET PARAMETER ID: 'MAT' FIELD GW_MATNR.
CALL TRANSACTION 'MM03'.
WHEN '&REF'.
ENDCASE.
ENDFORM. " FRM_HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form BUILD_EVENTTAB
*&---------------------------------------------------------------------*
* Set event table
*----------------------------------------------------------------------*
FORM BUILD_EVENTTAB USING UT_EVENT TYPE SLIS_T_EVENT.
DATA: LH_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = UT_EVENT
EXCEPTIONS
OTHERS = 1.
READ TABLE UT_EVENT WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LH_EVENT.
IF SY-SUBRC = 0.
MOVE C_FN_TOP_PAGE TO LH_EVENT-FORM.
MODIFY UT_EVENT FROM LH_EVENT INDEX SY-TABIX.
ENDIF.
ENDFORM. " BUILD_EVENTTAB
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_GRID
*&---------------------------------------------------------------------*
* Show ALV in grid mode
*----------------------------------------------------------------------*
FORM DISPLAY_ALV_GRID.
DATA:
LTH_LAYOUT TYPE SLIS_LAYOUT_ALV,
LW_ALV_TITLE TYPE LVC_TITLE.
LW_ALV_TITLE = 'Material Info'.
LTH_LAYOUT-BOX_FIELDNAME = 'CHECK'.
LTH_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = SPACE
I_BUFFER_ACTIVE = SPACE
I_CALLBACK_PROGRAM = GW_REPID
* I_CALLBACK_PF_STATUS_SET = 'FRM_SET_PF_STAUS'
I_CALLBACK_USER_COMMAND = 'FRM_HANDLE_USER_COMMAND'
I_GRID_TITLE = LW_ALV_TITLE
IS_LAYOUT = LTH_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT = GW_VARIANT
IT_EVENTS = IT_EVENT
IT_EVENT_EXIT = IT_EXIT[]
IMPORTING
E_EXIT_CAUSED_BY_CALLER = WA_EXIT
TABLES
T_OUTTAB = IT_MATERIAL
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " DISPLAY_ALV_GRID
*&---------------------------------------------------------------------*
*& Form SET_ALV_LAYOUT
*&---------------------------------------------------------------------*
* set alv layout
*----------------------------------------------------------------------*
FORM SET_ALV_LAYOUT.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = GW_REPID
I_INTERNAL_TABNAME = C_TABNAM
* I_STRUCTURE_NAME =
* I_BYPASSING_BUFFER = 'X'
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = GW_REPID
CHANGING
CT_FIELDCAT = IT_FIELDCAT[]
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
ENDFORM. " SET_ALV_LAYOUT
*&---------------------------------------------------------------------*
*& Form CHANGE_ALV_TEXT
*&---------------------------------------------------------------------*
* set ALV catalog
*----------------------------------------------------------------------*
* --> U_VALUE text 項目
* --> U_LENTYP text 短中長の指定
* --> U_NAME text 項目名称
*----------------------------------------------------------------------*
FORM CHANGE_ALV_TEXT USING U_VALUE
U_LENTYP
U_NAME.
READ TABLE IT_FIELDCAT INTO WA_FIELDCAT WITH KEY FIELDNAME = U_VALUE.
IF SY-SUBRC = 0.
WA_FIELDCAT-DDICTXT = U_LENTYP.
WA_FIELDCAT-SELTEXT_L = U_NAME.
WA_FIELDCAT-SELTEXT_M = U_NAME.
WA_FIELDCAT-SELTEXT_S = U_NAME.
WA_FIELDCAT-REPTEXT_DDIC = U_NAME.
MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.
ENDIF.
ENDFORM. " CHANGE_ALV_TEXT
*&---------------------------------------------------------------------*
*& Form CHANGE_ALV_LAYOUT
*&---------------------------------------------------------------------*
* change ALV layout
*----------------------------------------------------------------------*
FORM CHANGE_ALV_LAYOUT.
PERFORM SET_CHECK_FIELD USING 'CHECK' 'X'.
PERFORM NO_DISPLAY_SET USING 'CHECK'.
PERFORM SET_ICON USING 'ICON1' 'X'.
* set ALV catalog
PERFORM CHANGE_ALV_TEXT
USING: 'ICON1' ' ' 'Status',
'MATNR' ' ' 'Material No',
'MAKTX' ' ' 'Material Description'.
ENDFORM. " CHANGE_ALV_LAYOUT
*&---------------------------------------------------------------------*
*& Form SET_ICON
*&---------------------------------------------------------------------*
* Set icon
*----------------------------------------------------------------------*
FORM SET_ICON USING U_FIELD TYPE SLIS_FIELDNAME
U_VALUE TYPE C.
READ TABLE IT_FIELDCAT INTO WA_FIELDCAT WITH KEY FIELDNAME = U_FIELD.
IF SY-SUBRC = 0.
WA_FIELDCAT-ICON = U_VALUE.
MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.
ENDIF.
ENDFORM. " SET_ICON
*&---------------------------------------------------------------------*
*& Form SET_CHECK_FIELD
*&---------------------------------------------------------------------*
* set check field
*----------------------------------------------------------------------*
FORM SET_CHECK_FIELD USING U_FIELD TYPE SLIS_FIELDNAME
U_VALUE TYPE C.
READ TABLE IT_FIELDCAT INTO WA_FIELDCAT
WITH KEY FIELDNAME = U_FIELD.
IF SY-SUBRC = 0.
WA_FIELDCAT-CHECKBOX = U_VALUE.
MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.
ENDIF.
ENDFORM. " SET_CHECK_FIELD
*&---------------------------------------------------------------------*
*& Form NO_DISPLAY_SET
*&---------------------------------------------------------------------*
* No display set
*----------------------------------------------------------------------*
FORM NO_DISPLAY_SET USING U_FIELD TYPE SLIS_FIELDNAME.
READ TABLE IT_FIELDCAT INTO WA_FIELDCAT
WITH KEY FIELDNAME = U_FIELD.
IF SY-SUBRC = 0.
WA_FIELDCAT-TECH = 'X'.
MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.
ENDIF.
ENDFORM. " NO_DISPLAY_SET
*&---------------------------------------------------------------------*
*& Form SET_INPUT_FIELD
*&---------------------------------------------------------------------*
* set input field
*----------------------------------------------------------------------*
FORM SET_INPUT_FIELD USING U_FIELD TYPE SLIS_FIELDNAME
U_VALUE TYPE C.
READ TABLE IT_FIELDCAT INTO WA_FIELDCAT
WITH KEY FIELDNAME = U_FIELD.
IF SY-SUBRC = 0.
WA_FIELDCAT-INPUT = U_VALUE.
MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.
ENDIF.
ENDFORM. " SET_INPUT_FIELD
*&---------------------------------------------------------------------*
*& Form ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* set ALV header
*----------------------------------------------------------------------*
FORM ALV_TOP_OF_PAGE.
DATA: LH_LINE TYPE SLIS_LISTHEADER.
REFRESH IT_HEADER.
LH_LINE-TYP = 'S'.
LH_LINE-INFO = 'Header line1'.
APPEND LH_LINE TO IT_HEADER.
LH_LINE-TYP = 'S'.
LH_LINE-INFO = 'Header line2'.
APPEND LH_LINE TO IT_HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = IT_HEADER.
ENDFORM. " ALV_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form POPUP_DIALOG
*&---------------------------------------------------------------------*
FORM POPUP_DIALOG.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = 'Previous screen'
TEXT_QUESTION = 'Do you really want to quit?'
TEXT_BUTTON_1 = 'Yes'
TEXT_BUTTON_2 = 'No'
DEFAULT_BUTTON = '2'
DISPLAY_CANCEL_BUTTON = ''
START_COLUMN = 25
START_ROW = 6
IMPORTING
ANSWER = GW_ANSWER
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
ENDFORM. " POPUP_DIALOG
*&---------------------------------------------------------------------*
*& Form F4_FOR_VARIANT
*&---------------------------------------------------------------------*
* ALV layout help list
*----------------------------------------------------------------------*
FORM F4_FOR_VARIANT USING U_VARI.
DATA:LI_VARIANT LIKE DISVARIANT,
LE_VARIANT LIKE DISVARIANT.
LI_VARIANT-REPORT = SY-REPID.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
IS_VARIANT = LI_VARIANT
I_SAVE = 'A'
IMPORTING
ES_VARIANT = LE_VARIANT
EXCEPTIONS
NOT_FOUND = 2.
IF SY-SUBRC = 2.
* 選択されていません
MESSAGE S205(0K).
ELSE.
U_VARI = LE_VARIANT-VARIANT.
ENDIF.
ENDFORM. " F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*& FORM CHECK_LAYOUT_VAR
*&---------------------------------------------------------------------*
* Check if layout variant exists
*----------------------------------------------------------------------*
FORM CHECK_LAYOUT_VAR.
DATA LH_DISVARIANT TYPE DISVARIANT.
IF NOT P_VARI IS INITIAL.
LH_DISVARIANT-REPORT = SY-REPID.
LH_DISVARIANT-VARIANT = P_VARI.
CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
I_SAVE = SPACE
CHANGING
CS_VARIANT = LH_DISVARIANT
EXCEPTIONS
WRONG_INPUT = 1
NOT_FOUND = 2
PROGRAM_ERROR = 3.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_VARI'.
* layout variant is not defined
MESSAGE E809(00) WITH P_VARI.
ENDIF.
ENDIF.
ENDFORM. " CHECK_LAYOUT_VAR
*&---------------------------------------------------------------------*
*& Form SET_ALV_VARIANT
*&---------------------------------------------------------------------*
* set ALV layout variant
*----------------------------------------------------------------------*
FORM SET_ALV_VARIANT USING U_VARI.
CLEAR GW_VARIANT.
GW_VARIANT-REPORT = SY-REPID.
IF NOT U_VARI IS INITIAL.
MOVE U_VARI TO GW_VARIANT-VARIANT.
ENDIF.
ENDFORM. " SET_ALV_VARIANT
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/238575/viewspace-1006909/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/238575/viewspace-1006909/