本文的知识基础,不是PA教材或者keyword documentation
如何使用SE80创建report,call一个全新的screen,也就是普通屏幕,显示alv
TYPES: BEGIN OF ALV_LINE,
MATNR TYPE ZMMT00170-MATNR, "物料编号 --*--
MAKTX TYPE MAKT-MAKTX,
ZEINR TYPE MARA-ZEINR, "文档号码(无文档管理系统)
LIFNR TYPE ZMMT00170-LIFNR, " --*--
NAME1 TYPE LFA1-NAME1, "供应商描述
KDATB TYPE EKKO-KDATB, "合同起始日期 "----最早的----
EBELN TYPE ZMMT00170-EBELN,
EBELP TYPE ZMMT00170-EBELP,
END OF ALV_LINE.
DATA: SCR_ELMT_2000 TYPE SCRFNAME VALUE 'S2000CC01', "定制控制控件,用于存放ALV容器
SCR_ELMT_2000_MSEG TYPE SCRFNAME VALUE 'S2000CC02',
CUS_CTNR_2000 TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "ALV容器,用于存放ALV表格
ALV_GRID_2000 TYPE REF TO CL_GUI_ALV_GRID, "ALV表格,用于显示数据
CUS_CTNR_2000_MSEG TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "ALV容器,用于存放ALV表格
ALV_GRID_2000_MSEG TYPE REF TO CL_GUI_ALV_GRID, "ALV表格,用于显示数据
GT_FIELDCAT_2000 TYPE LVC_T_FCAT, "ALV中各个字段名
GT_FIELDCAT_2000_MSEG TYPE LVC_T_FCAT, "ALV中各个字段名
GS_LAYOUT_2000 TYPE LVC_S_LAYO. "ALV的标题
IF CUS_CTNR_2000 IS INITIAL.
"将alv容器放入屏幕元素
CREATE OBJECT CUS_CTNR_2000
EXPORTING
CONTAINER_NAME = SCR_ELMT_2000.
"将alv表格放入alv容器
CREATE OBJECT ALV_GRID_2000
EXPORTING
I_PARENT = CUS_CTNR_2000.
"fieldcat格式和数据准备
PERFORM BUILD_FIELDCAT CHANGING GT_FIELDCAT_2000.
" PERFORM BUILD_DATA.
"----显示第一个ALV----
CALL METHOD ALV_GRID_2000->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = ''
IS_LAYOUT = GS_LAYOUT_2000
CHANGING
IT_FIELDCATALOG = GT_FIELDCAT_2000
IT_OUTTAB = IT_TAB[].
"-------------------------------------------------------------------
"将alv容器放入屏幕元素 MSEG
CREATE OBJECT CUS_CTNR_2000_MSEG
EXPORTING
CONTAINER_NAME = SCR_ELMT_2000_MSEG.
"将alv表格放入alv容器
CREATE OBJECT ALV_GRID_2000_MSEG
EXPORTING
I_PARENT = CUS_CTNR_2000_MSEG.
PERFORM BUILD_FIELDCAT_MSEG CHANGING GT_FIELDCAT_2000_MSEG.
"----显示第二个ALV----
CALL METHOD ALV_GRID_2000_MSEG->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = ''
IS_LAYOUT = GS_LAYOUT_2000
CHANGING
IT_FIELDCATALOG = GT_FIELDCAT_2000_MSEG
IT_OUTTAB = IT_MSEG[].
ENDIF.
ENDMODULE.
FORM BUILD_FIELDCAT CHANGING GT_FIELDCAT TYPE LVC_T_FCAT.
DATA: GS_FIELDCAT TYPE LVC_S_FCAT.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ALV_LINE'"自定义的structure
CHANGING
CT_FIELDCAT = GT_FIELDCAT.
DEFINE SET_FIELDCAT.
CLEAR GS_FIELDCAT_MSEG.
GS_FIELDCAT-CHECKBOX = &1.
GS_FIELDCAT-EDIT = &2.
GS_FIELDCAT-OUTPUTLEN = &3.
GS_FIELDCAT-FIELDNAME = &4.
GS_FIELDCAT-COLTEXT = &5.
APPEND GS_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.
SET_FIELDCAT '' '' 25 'MATNR' '物料编号'.
SET_FIELDCAT '' '' 15 'LIFNR' '供应商编号'.
SET_FIELDCAT '' '' 10 'KDATB' '合同起始日期'.
SET_FIELDCAT '' '' 10 'WERKS' '工厂'.
ENDFORM.
以上就是2000这个屏幕使用定制控制显示alv的主要代码
定制控制的学名叫做 customer control,是screen painter中的一个屏幕元素
看看它的样子
然后看看它的属性
上图中的代码:
DATA: SCR_ELMT_2000 TYPE SCRFNAME VALUE 'S2000CC01', "定制控制控件,用于存放ALV容器
就是为了使用screen painter中创建的名为S2000CC01的屏幕元素对应的定制控制
代码中还有一部分:
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'ALV_LINE'"自定义的structure
CHANGING
CT_FIELDCAT = GT_FIELDCAT.