REUSE_ALV_GRID_DISPLAY实现ALV
1.声明alv字段和布局用的结构和内表
代码如下
DATA: gwa_field TYPE lvc_s_fcat. “ALV 控制: 字段目录
DATA: gt_field TYPE lvc_t_fcat.
DATA: gs_layout TYPE lvc_s_layo. “ALV 控制: 布局结构
2.获取数据并展示
代码如下
"获取数据
PERFORM frm_get_data.
"显示数据
PERFORM frm_display_data.
FORM frm_display_data .
"设置ALV字段
PERFORM frm_field_build.
"设置ALV输出格式及保存变式
PERFORM frm_layout_build.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FRM_SET_STATUS'
"i_callback_user_command = 'FRM_USER_COMMAND'
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_field
TABLES
t_outtab = gt_pre[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
3.设置alv结构
代码如下
FORM frm_field_build .
"定义宏
DEFINE add_field_cat.
CLEAR: gwa_field.
gwa_field-fieldname = &1.
gwa_field-scrtext_l = &2.
gwa_field-scrtext_m = &3.
gwa_field-outputlen = &4.
IF gwa_field-fieldname = 'MATNR' OR gwa_field-fieldname = 'AUFNR'.
gwa_field-no_zero = 'X'.
ENDIF.
APPEND gwa_field TO gt_field.
END-OF-DEFINITION.
"使用宏来设置表头字段
add_field_cat 'BUKRS' '公司代码' '公司代码' '4' .
add_field_cat 'BUTXT' '公司名称' '公司名称' '40' .
add_field_cat 'WERKS' '生产工厂' '生产工厂' '4' .
add_field_cat 'NAME1' '工厂名称' '工厂名称' '40' .
add_field_cat 'MATNR' '物料编码' '物料编码' '40' .
add_field_cat 'MAKTX' '物料描述' '物料描述' '40' .
add_field_cat 'MATKL' '物料组' '物料组' '9' .
add_field_cat 'EXTWG' '外部物料组' '外部物料组' '18' .
ENDFORM.
4.设置alv输出格式
代码如下:
FORM frm_layout_build .
gs_layout-zebra = 'X'. " 表格斑马线
gs_layout-cwidth_opt = 'X'.
gs_layout-lights_fieldname = 'STATUS'. "状态灯
ENDFORM.
5.gui状态设置及按钮响应
代码如下:
FORM frm_set_status USING it_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS_100'. "这个gui status可以从别的程序拷贝过来
"也可以引用标准程序的gui
"SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.
ENDFORM.
FORM frm_user_command USING rf_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
ok_code = sy-ucomm.
IF ok_code = '&F03' OR ok_code = '&F12' OR ok_code = '&F15'.
EXIT.
ENDIF.
ENDFORM.