*&---------------------------------------------------------------------*
*& Report ZLJH091202
*&---------------------------------------------------------------------*
*&要求使用ALV展现数据,数据自取,要求对第一列数据添加颜色,
*&并且实现此列的热点单击,单击此列某条数据,
*&实现ALV弹出展现所有此列数据相同的其他字段数据。
*&如:此列为BUKRS,单击此列公司代码为2000的某条数据
*&则取出所有公司代码为2000的数据ALV弹出展现。
*&---------------------------------------------------------------------*
REPORT ZLJH091202.
**********************************************************************
*定义
**********************************************************************
TYPE-POOLS:SLIS.
TYPES:BEGIN OF TYP_01,
ERNAM TYPE MARA-ERNAM,
MATNR TYPE MARA-MATNR,
MAKTX TYPE MAKT-MAKTX,
CBOX TYPE C,
COLOR TYPE CHAR04,
END OF TYP_01.
DATA GT_01 TYPE STANDARD TABLE OF TYP_01.
DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA GT_OUT TYPE STANDARD TABLE OF TYP_01.
DEFINE FIELDCAT.
GS_FIELDCAT-COL_POS = &1.
GS_FIELDCAT-FIELDNAME = &2.
GS_FIELDCAT-SELTEXT_L = &3.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.
**********************************************************************
*SELECTION SCREEN
**********************************************************************
**********************************************************************
*AT SELECTION SCREEN
**********************************************************************
START-OF-SELECTION.
SELECT MARA~ERNAM
MARA~MATNR
MAKT~MAKTX
FROM MARA
INNER JOIN MAKT ON MARA~MATNR = MAKT~MATNR AND MAKT~SPRAS = SY-LANGU
INTO CORRESPONDING FIELDS OF TABLE GT_01 UP TO 50 ROWS.
END-OF-SELECTION.
IF GT_01 IS NOT INITIAL.
PERFORM FRM_SHOW.
ELSE.
MESSAGE '无符合条件的数据' TYPE 'E' DISPLAY LIKE 'I'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SHOW.
PERFORM FRM_LAYOUT.
PERFORM FRM_FIELDCAT.
PERFORM FRM_ALV_DISPLAY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT.
FIELDCAT '1' 'ERNAM' '创建者'.
FIELDCAT '2' 'MATNR' '物料编号'.
FIELDCAT '3' 'MAKTX' '物料描述'.
LOOP AT GT_FIELDCAT INTO GS_FIELDCAT.
IF GS_FIELDCAT-FIELDNAME = 'ERNAM'.
GS_FIELDCAT-KEY = 'X'.
MODIFY GT_FIELDCAT FROM GS_FIELDCAT INDEX SY-TABIX.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY.
call function 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS'
I_CALLBACK_USER_COMMAND = 'FRM_USERCOMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
tables
t_outtab = GT_01
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
if sy-subrc <> 0.
* Implement suitable error handling here
endif.
ENDFORM.
*----------------------------------------------------------------------*
* FORM FRM_USERCOMMAND
*----------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 TEXT
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_USERCOMMAND USING P_CODE TYPE SYUCOMM
CHANGING SEL TYPE SLIS_SELFIELD.DATA LT_TAB TYPE STANDARD TABLE OF TYP_01.
CASE P_CODE.
WHEN '&IC1'.
READ TABLE GT_01 INTO DATA(GS_01) INDEX SEL-tabindex.
LOOP AT GT_01 INTO DATA(GS_02) WHERE ERNAM = GS_01-ERNAM .
APPEND GS_02 TO GT_OUT.
ENDLOOP.
DATA LT_FIELDCAT LIKE GT_FIELDCAT.
LT_FIELDCAT = GT_FIELDCAT.
DELETE LT_FIELDCAT INDEX 1.
CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
EXPORTING
I_TITLE = '详细信息'
* I_SELECTION = 'X'
* I_ALLOW_NO_SELECTION =
I_ZEBRA = 'X'
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_CHECKBOX_FIELDNAME =
* I_LINEMARK_FIELDNAME =
* I_SCROLL_TO_SEL_LINE = 'X'
i_tabname = 'MARA'
* I_STRUCTURE_NAME =
IT_FIELDCAT = LT_FIELDCAT
* IT_EXCLUDING =
* I_CALLBACK_PROGRAM =
* I_CALLBACK_USER_COMMAND =
* IS_PRIVATE =
* IMPORTING
* ES_SELFIELD =
* E_EXIT =
tables
t_outtab = GT_OUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
WHEN 'BZ'.
LOOP AT GT_01 INTO GS_01 WHERE CBOX = 'X'.
ENDLOOP.
IF SY-SUBRC <> 0.
MESSAGE '请至少选择一行' TYPE 'I'.
ELSE.
LOOP AT GT_01 INTO GS_01 WHERE CBOX = 'X'.
IF GS_01-COLOR IS NOT INITIAL.
CLEAR GS_01-COLOR.
ELSE.
GS_01-COLOR = 'C610'.
ENDIF.
MODIFY GT_01 FROM GS_01 INDEX SY-TABIX.
ENDLOOP.
ENDIF.
ENDCASE.
SEL-REFRESH = 'X'.
ENDFORM.
*----------------------------------------------------------------------*
* FORM .......
*----------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_STATUS USING EXTAB.
SET PF-STATUS 'MENU'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_LAYOUT .GS_LAYOUT-INFO_FIELDNAME = 'COLOR'.GS_LAYOUT-box_fieldname = 'CBOX'.GS_LAYOUT-key_hotspot = 'X'.ENDFORM.