GRID LVC ALV 程序实例
*&-----------------------------------------------------------*
*& Report ZGRID_ALV_LVC_DEMO
*&-----------------------------------------------------------*
REPORT zgrid_alv_lvc_demo.
TYPE-POOLS: slis.
TABLES: mara,marc,rlgrap.
"Internal Table Data"
TYPES: BEGIN OF str_alv,
sel TYPE flag,
id TYPE char25, " Red Green color "
message TYPE string, " Message "
index TYPE i,
matnr TYPE mara-matnr,
werks TYPE marc-werks,
dismm TYPE marc-dismm,
dispo TYPE marc-dispo,
END OF str_alv.
DATA: gt_alv TYPE STANDARD TABLE OF str_alv,
gs_alv TYPE str_alv.
"ALV Parameter"
DATA: gt_lvc_fieldcat TYPE lvc_t_fcat,
gs_lvc_fieldcat TYPE lvc_s_fcat,
gs_grid_settings TYPE lvc_s_glay,
layout TYPE lvc_s_layo.
"Select screen"
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETERS: p_chk1 RADIOBUTTON GROUP zr01 DEFAULT 'X' USER-COMMAND zchg.
SELECTION-SCREEN COMMENT 3(8) text-002 FOR FIELD p_chk1.
SELECTION-SCREEN POSITION 12.
PARAMETERS: p_chk2 RADIOBUTTON GROUP zr01.
SELECTION-SCREEN COMMENT 14(12) text-003 FOR FIELD p_chk2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
PARAMETERS: p_mtart TYPE mara-mtart.
PARAMETERS: p_file LIKE rlgrap-filename MODIF ID z01.
SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-004.
PARAMETERS: p_werks TYPE marc-werks MODIF ID z02.
SELECT-OPTIONS: s_matnr FOR mara-matnr MODIF ID z02.
SELECTION-SCREEN END OF BLOCK blk2.
"Marco Define"
DEFINE mro_fcat.
clear gs_lvc_fieldcat.
gs_lvc_fieldcat-fieldname = &1.
translate gs_lvc_fieldcat-fieldname to upper case.
gs_lvc_fieldcat-reptext = &2.
gs_lvc_fieldcat-scrtext_l = &2.
gs_lvc_fieldcat-scrtext_m = &2.
gs_lvc_fieldcat-scrtext_s = &2.
if gs_lvc_fieldcat-fieldname eq 'SEL'.
gs_lvc_fieldcat-checkbox = 'X'.
gs_lvc_fieldcat-edit = 'X'.
gs_lvc_fieldcat-just = 'C'.
endif.
append gs_lvc_fieldcat to gt_lvc_fieldcat.
END-OF-DEFINITION.
" Screen Group control "
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF p_chk1 EQ 'X'.
IF screen-group1 EQ 'Z02'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ELSEIF screen-group1 EQ 'Z01'.
screen-input = 1.
screen-invisible = 0.
MODIFY SCREEN.
ENDIF.
ELSE.
IF screen-group1 EQ 'Z01'.
screen-input = 0.
screen-invisible = 1.
MODIFY SCREEN.
ELSEIF screen-group1 EQ 'Z02'.
screen-input = 1.
screen-invisible = 0.
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
"Screen Event"
START-OF-SELECTION .
"Extract data"
PERFORM frm_extract_data.
"Display alv"
PERFORM frm_display.
*&---------------------------------------------------------------------*
*& Form FRM_EXTRACT_DATA
*&---------------------------------------------------------------------*
FORM frm_extract_data .
SELECT *
FROM mara INNER JOIN marc
ON mara~matnr = marc~matnr
INTO CORRESPONDING FIELDS OF TABLE gt_alv
WHERE mara~matnr IN s_matnr
AND werks EQ p_werks.
IF gt_alv IS INITIAL.
MESSAGE 'No data.' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " FRM_EXTRACT_DATA"
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
FORM frm_display .
CLEAR layout.
layout-zebra = 'X'.
layout-col_opt = 'X'.
layout-cwidth_opt = 'X'.
layout-box_fname = 'SEL'. "设置选择列字段"
CLEAR gt_lvc_fieldcat.
PERFORM frm_init_fcat.
"修改后刷新数据到内表"
gs_grid_settings-edt_cll_cb = 'X'.
"显示 ALV"
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
is_layout_lvc = layout
it_fieldcat_lvc = gt_lvc_fieldcat
i_grid_settings = gs_grid_settings
i_default = 'X'
i_save = 'X'
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "FRM_DISPLAY"
*&---------------------------------------------------------------------*
*& Form pf_status_set
*&---------------------------------------------------------------------*
FORM pf_status_set USING extab TYPE slis_t_extab.
DATA: lt_fcode TYPE STANDARD TABLE OF sy-ucomm.
CLEAR lt_fcode.
APPEND '&CHNG' TO lt_fcode.
APPEND '&MODI' TO lt_fcode.
APPEND '&XDPL' TO lt_fcode.
SET PF-STATUS 'STATUS' EXCLUDING lt_fcode.
"设置编辑事件"
* DATA: lo_grid TYPE REF TO cl_gui_alv_grid.
* CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* IMPORTING
* e_grid = lo_grid.
* CALL METHOD lo_grid->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
* IF sy-subrc <> 0.
* ENDIF.
ENDFORM. "pf_status_set"
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN '&IC1'.
WHEN 'BACK' OR 'EXIT'.
LEAVE PROGRAM .
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
rs_selfield-refresh = 'X'.
ENDFORM. "user_command"
*&---------------------------------------------------------------------*
*& Form FRM_INIT_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_init_fcat .
* mro_fcat 'sel' 'Choose'.
mro_fcat 'index' 'Index'.
mro_fcat 'id' 'Icon' .
mro_fcat 'message' 'Message' .
mro_fcat 'werks' 'Plant' .
mro_fcat 'matnr' 'P/N' .
mro_fcat 'dismm' 'MRP TYpe' .
mro_fcat 'dispo' 'MRP Controller' .
APPEND gs_lvc_fieldcat TO gt_lvc_fieldcat.
"半自动创建"
* CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
* EXPORTING
* i_structure_name = 'ZDEMO_STRUCTURE'
* CHANGING
* ct_fieldcat = gt_fieldcat
* EXCEPTIONS
* inconsistent_interface = 1
* program_error = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
ENDFORM. " FRM_INIT_FCAT"