源代码:
*--------------------------------------------------------------------*
*&---------------------------「TABLES」-----------------------------&*
*--------------------------------------------------------------------*
TABLES:.
*--------------------------------------------------------------------*
*&---------------------------「TYPES」------------------------------&*
*--------------------------------------------------------------------*
* 定义ALV输出结构
TYPES:BEGIN OF output,
END OF output.
*--------------------------------------------------------------------*
*&-----------------------「INTERNAL TABLES」------------------------&*
*--------------------------------------------------------------------*
* 定义输出内表
DATA: gt_output TYPE TABLE OF output,
gs_output TYPE output.
* 定义ALV数据选择内表
DATA: gt_checked TYPE TABLE OF output,
gs_checked TYPE output.
*--------------------------------------------------------------------*
*&--------------------------「VARIABLE」----------------------------&*
*--------------------------------------------------------------------*
* 定义AVL变量
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat,
gs_decimals TYPE lvc_decmls,
gs_layout TYPE lvc_s_layo.
* 定义指针
FIELD-SYMBOLS:<fs_opt> TYPE output.
*--------------------------------------------------------------------*
*&--------------------------「SCREEN」------------------------------&*
*--------------------------------------------------------------------*
SELECTION-SCREEN:BEGIN OF BLOCK bk1 WITH FRAME TITLE TEXT-001 .
* 区间
SELECT-OPTIONS:
s_field FOR itab-field NO INTERVALS NO-EXTENSION .
SELECTION-SCREEN ULINE.
* 单值
PARAMETERS:p_field AS CHECKBOX, "复选框"
p_rtn1 RADIOBUTTON GROUP g1, "单选按钮一"
p_rtn2 RADIOBUTTON GROUP g1, "单选按钮二"
p_file TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK bk1.
*--------------------------------------------------------------------*
*&--------------------------「PROCESS」-----------------------------&*
*--------------------------------------------------------------------*
INITIALIZATION.
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_display_data.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& 数据展示输出
*&---------------------------------------------------------------------*
FORM frm_display_data .
PERFORM frm_set_layout. " 设置ALV布局
PERFORM frm_set_fieldcat. " 设置ALV展示字段
PERFORM frm_display_alv. " 设置ALV数据展示
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& 设置ALV布局
*&---------------------------------------------------------------------*
FORM frm_set_layout .
gs_layout-zebra = 'X'.
gs_layout-sel_mode = 'D'.
gs_layout-cwidth_opt = 'X'.
* GS_LAYOUT-BOX_FNAME = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*& 设置字段目录
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .
PERFORM frm_add_field USING 'STATUS' '状态灯' '' '' '' '' ''.
* PERFORM frm_add_field USING 'MESSAGE' '消息' '' '' '' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ADD_FIELD
*&---------------------------------------------------------------------*
* 设置屏幕显示的字段
*----------------------------------------------------------------------*
FORM frm_add_field USING pv_fieldname
pv_seltext
pv_nozero
pv_sum
pv_ref_field
pv_ref_table
pv_edit.
CLEAR:gs_fieldcat.
gs_fieldcat-fieldname = pv_fieldname.
gs_fieldcat-coltext = pv_seltext.
gs_fieldcat-scrtext_s = pv_seltext.
gs_fieldcat-scrtext_m = pv_seltext.
gs_fieldcat-scrtext_l = pv_seltext.
gs_fieldcat-no_zero = pv_nozero.
gs_fieldcat-do_sum = pv_sum.
gs_fieldcat-ref_field = pv_ref_field.
gs_fieldcat-ref_table = pv_ref_table.
gs_fieldcat-edit = pv_edit.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& 定义ALV输出函数
*&---------------------------------------------------------------------*
FORM frm_display_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'ALV_USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
* IT_SORT_LVC =
* I_DEFAULT = 'X'
i_save = 'A'
TABLES
t_outtab = gt_output
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SET_PF_STATUS
*&---------------------------------------------------------------------*
*& 定义工具栏按钮状态
*&---------------------------------------------------------------------*
FORM SET_PF_STATUS USING PT_EXCLUDE TYPE KKBLO_T_EXTAB .
* 声明按钮设置内表
* DATA:LT_EXCLUDE TYPE KKBLO_T_EXTAB WITH HEADER LINE.
* DATA:LS_EXCLUDE LIKE LINE OF LT_EXCLUDE.
* 添加按钮例子:
* LS_EXCLUDE = '&ADDLINE'.
* APPEND LS_EXCLUDE TO LT_EXCLUDE[].
* CLEAR LS_EXCLUDE.
* LS_EXCLUDE = '&DELLINE'.
* APPEND LS_EXCLUDE TO LT_EXCLUDE[].
* CLEAR LS_EXCLUDE.
* LS_EXCLUDE = '&SAVEMD'.
* APPEND LS_EXCLUDE TO LT_EXCLUDE[].
* CLEAR LS_EXCLUDE.
* SET PF-STATUS 'STANDARD' EXCLUDING LT_EXCLUDE[] .
* 如果条件满足:
* IF P_FILTER IS NOT INITIAL.
SET PF-STATUS 'STANDARD' .
* ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*& 定义ALV按钮事件
*&---------------------------------------------------------------------*
FORM ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD .
* 设置ALV内容改变事件回调
DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA: LV_INDEX TYPE I.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LR_GRID.
CALL METHOD LR_GRID->CHECK_CHANGED_DATA.
* 设置按钮触发事件
* CASE R_UCOMM.
* WHEN '&IC1'. " ALV双击事件
* 获取当前双击的行目索引"
* READ TABLE GT_OUTPUT INDEX RS_SELFIELD-TABINDEX ASSIGNING <FS_OPT>.
* 判断是否是指定的字段?"
* IF RS_SELFIELD-FIELDNAME EQ 'FIELD1' OR RS_SELFIELD-FIELDNAME EQ 'FIELD2'.
* PERFORM FRM_ALV_EVENT_IC1.
* ENDIF.
* WHEN '&PRINT'.
* PERFORM FRM_ALV_EVENT_PRINT. " 调用SF打印事件子例程
* WHEN '&BDC'.
* PERFORM FRM_ALV_EVENT_BDC. " 调用BDC批导事件子例程
* WHEN '&BAPI'.
* PERFORM FRM_ALV_EVENT_BAPI. " 调用BAPI批导事件子例程
* WHEN '&FC01'.
* PERFORM FRM_ALV_EVENT_FC01. " 调用FC01按钮事件子例程
* WHEN '&FC02'.
* PERFORM FRM_ALV_EVENT_FC02. " 调用FC02按钮事件子例程
* WHEN OTHERS.
* ENDCASE.
RS_SELFIELD-REFRESH = 'X'. " 刷新ALV屏幕
ENDFORM.