||
**OO ALV源代码,只需创建一个101的屏幕即可。
TABLES: marav,mara.
*---------------------------------------------------------------------*
DATA:
BEGIN OF gt_out OCCURS 100 ,
matnr LIKE marav-matnr, "Material number
maktx LIKE marav-maktx, "Material short text
matkl LIKE marav-matkl, "Material group (so you can test to make
ntgew LIKE marav-ntgew, "Net weight, numeric field (so you can test to
gewei LIKE marav-gewei, "weight unit (just to be complete)
END OF gt_out.
**定义事件操作 变更
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
***ALV相关
DATA: gr_alvgrid TYPE REF TO cl_gui_alv_grid ,"ALV对象
gt_fieldcat TYPE lvc_t_fcat , "FILEDCAT属性
gs_layout TYPE lvc_s_layo , "LAYOUT属性
gs_variant TYPE disvariant,
gt_exclude TYPE ui_functions. "存放排除按钮的内表
DATA alv_custom_container TYPE REF TO cl_gui_custom_container.
SELECT-OPTIONS: s_matnr FOR marav-matnr .
*---------------------------------------------------------------------*
START-OF-SELECTION.
gs_variant-report = sy-repid.
PERFORM prepare_layout CHANGING gs_layout . "设置LAYOUT
REFRESH gt_fieldcat. "清空FIELDCAT内表
PERFORM prepare_field_catalog CHANGING gt_fieldcat ."设置FIELD CATALOG
***抓取数据
SELECT * FROM marav
INTO CORRESPONDING FIELDS OF TABLE gt_out
WHERE
matnr IN s_matnr.
***只需创建屏幕
CALL SCREEN 101.
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PS_LAYOUT text
*----------------------------------------------------------------------*
FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
***设置LAYOUT属性
ps_layout-zebra = 'X' .
ps_layout-smalltitle = 'X' .
ps_layout-cwidth_opt = 'X'. "设置自动列宽
ps_layout-no_toolbar = ' '.
ps_layout-no_rowmark = 'X'.
ENDFORM. "PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*& FORM PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
* 根据维护表的结构初始化ALV的FIELD CATALOG
*----------------------------------------------------------------------*
* -->PT_FIELDCAT TEXT
*----------------------------------------------------------------------*
FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
DATA: ls_fieldcat TYPE lvc_s_fcat,
l_rows TYPE i VALUE 1.
***填充FIELDCAT内表<得到展示的字段>
CLEAR:ls_fieldcat.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-coltext = '物料'.
ls_fieldcat-no_zero = 'X'.
ls_fieldcat-col_pos = l_rows.
APPEND ls_fieldcat TO pt_fieldcat.
l_rows = l_rows + 1.
CLEAR:ls_fieldcat.
ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-coltext = '描述'.
ls_fieldcat-col_pos = l_rows.
APPEND ls_fieldcat TO pt_fieldcat.
l_rows = l_rows + 1.
CLEAR:ls_fieldcat.
ls_fieldcat-fieldname = 'NTGEW'.
ls_fieldcat-coltext = '重量'.
ls_fieldcat-col_pos = l_rows.
APPEND ls_fieldcat TO pt_fieldcat.
l_rows = l_rows + 1.
CLEAR:ls_fieldcat.
ls_fieldcat-fieldname = 'GEWEI'.
ls_fieldcat-coltext = '单位'.
ls_fieldcat-col_pos = l_rows.
APPEND ls_fieldcat TO pt_fieldcat.
l_rows = l_rows + 1.
ENDFORM . "PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& FORM EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
* 去除不要的ALV工具栏按钮
*----------------------------------------------------------------------*
* <--P_LT_EXCLUDE TEXT
*----------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
***排除不必要的按钮,将不需要的按钮APPEND内表中即不显示
DATA ls_exclude TYPE ui_func.
ENDFORM. "EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0101 OUTPUT.
***设置界面可以操作的按钮
SET PF-STATUS 'MAIN100'.
***设置标题
SET TITLEBAR '100'.
gs_variant-report = sy-repid..
IF gr_alvgrid IS INITIAL .
****建立对象
CREATE OBJECT gr_alvgrid "ALV_GRID
EXPORTING
i_parent = alv_custom_container. "将数据装载到控制屏幕中
***排除不要的按钮
PERFORM exclude_tb_functions USING gt_exclude.
***展示数据
CALL METHOD gr_alvgrid->set_table_for_first_display
EXPORTING
is_variant = gs_variant
i_save = 'A'
is_layout = gs_layout
it_toolbar_excluding = gt_exclude
CHANGING
it_outtab = gt_out[]
it_fieldcatalog = gt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0101 INPUT.
save_ok = sy-ucomm.
CLEAR: ok_code.
***响应工具栏事件
CASE save_ok.
WHEN 'BACK'.
SET SCREEN 0 . "按返回 按钮,返回选择屏幕
WHEN 'EXIT'.
LEAVE PROGRAM. "退出程序
WHEN 'CANCEL'.
LEAVE PROGRAM. "退出程序
WHEN OTHERS.
IF save_ok = 'PRINT'.
* MESSAGE '你单击了打印' TYPE 'S'.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
小黑屋|联系我们|赛跑网 ( QQ:108519493 )
GMT+8, 2024-6-9 10:39 , Processed in 0.378930 second(s), 19 queries .
Powered by 91SAP X3.4
© 2001-2023 91sap Team.