源代码:
*--------------------------------------------------------------------**&---------------------------「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.