ALV 以及REUSE_ALV_GRID_DISPLAY_LVC
ALV
START-OF-SELECTION.
PERFORM FRM_GET_DATA. "获取数据
PERFORM FRM_BUILD_LAYOUT. "定义布局
PERFORM FRM_BUILD_FCAT. "定义展示字段
PERFORM FRM_BUILD_DISPLAY. "调用ALV展示函数
步骤:
-
调用数据获取函数:使用将数据库中所需的内容读入内表。
SELECT A~MBLNR, "查询屏幕输入条件数据 A~MJAHR, B~ZEILE, A~BUDAT, B~MATNR, B~BWART, B~LIFNR, B~DMBTR, B~MENGE FROM MKPF AS A INNER JOIN MSEG AS B ON A~MBLNR = B~MBLNR INTO CORRESPONDING FIELDS OF TABLE @GT_OUTPUT UP TO 1000 ROWS WHERE A~MBLNR IN @S_MBLNR AND A~MJAHR IN @S_MJAHR AND A~BUDAT IN @S_BUDAT AND B~MATNR IN @S_MATNR AND B~BWART IN @S_BWART.
-
定义ALV展示布局
FORM FRM_BUILD_LAYOUT . GS_LAYOUT-CWIDTH_OPT = 'X'. "最优列宽 GS_LAYOUT-ZEBRA = 'X'. "斑马线 GS_LAYOUT-SEL_MODE = 'A'. "选择方式 ENDFORM.
-
定义ALV展示字段
FORM FRM_BUILD_FCAT. DATA:LS_FCAT TYPE LINE OF LVC_T_FCAT. "定义一个宏用于设置每个字段属性 DEFINE DMKPF_FCAT. CLEAR LS_FCAT. LS_FCAT-FIELDNAME = &1. "字段名 LS_FCAT-REPTEXT = &2. "展示名 LS_FCAT-KEY = &3. "设为key LS_FCAT-CHECKBOX = &4. "设为复选框 LS_FCAT-EDIT = &5. "可编辑 LS_FCAT-COL_OPT = &6. "自适应宽度 APPEND LS_FCAT TO GT_FCAT. END-OF-DEFINITION. "宏调用,设置需要展示的字段的属性 DMKPF_FCAT 'CHK' 'Select' 'X' 'X' 'X' ''. DMKPF_FCAT 'MBLNR' 'Material Document' 'X' '' '' 'X'. DMKPF_FCAT 'MJAHR' 'Material Document Year' '' '' '' 'X'. DMKPF_FCAT 'ZEILE' 'Item no' '' '' '' 'X'. DMKPF_FCAT 'BUDAT' 'Posting Date' '' '' '' 'X'. DMKPF_FCAT 'MATNR' 'Material Number' '' '' '' 'X'. DMKPF_FCAT 'MAKTX' 'Material Description' '' '' '' 'X'. DMKPF_FCAT 'BWART' 'Movement Type' '' '' '' 'X'. DMKPF_FCAT 'LIFNR' 'Vendor' '' '' '' 'X'. DMKPF_FCAT 'NAME1' 'Vendor Description' '' '' '' 'X'. DMKPF_FCAT 'DMBTR' 'Amount' '' '' '' 'X'. DMKPF_FCAT 'MENGE' 'Quantity' '' '' '' 'X'. DMKPF_FCAT 'REMARKS' 'remarks' '' '' 'X' 'X'. ENDFORM.
-
调用ALV展示函数
FORM FRM_BUILD_DISPLAY . CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING "回调程序,SY-REPID表示当前程序 I_CALLBACK_PROGRAM = SY-REPID "GUI状态函数:FRM_SET_STATUS I_CALLBACK_PF_STATUS_SET = 'FRM_SET_STATUS' "用户自定义指令函数:FRM_USER_COMMAND I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND' "ALV布局 IS_LAYOUT_LVC = GS_LAYOUT "ALV显示字段 IT_FIELDCAT_LVC = GT_FCAT TABLES "数据内表来源 T_OUTTAB = GT_OUTPUT EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF. ENDFORM. * 为按钮添加新功能 FORM FRM_SET_STATUS USING TR_EXTAB TYPE SLIS_T_EXTAB. SET PF-STATUS 'ZSTANDARD'. ENDFORM. * 设置用户自定义指令 FORM FRM_USER_COMMAND USING PV_UCOMM TYPE SY-UCOMM PS_SELFIELD TYPE SLIS_SELFIELD. CASE PV_UCOMM. WHEN '&EACH'. "全选事件 CLEAR GS_OUTPUT. LOOP AT GT_OUTPUT INTO GS_OUTPUT. GS_OUTPUT-CHK = 'X'. MODIFY GT_OUTPUT FROM GS_OUTPUT. ENDLOOP. PERFORM FRM_REFRESH_ALV. WHEN '&NONE'. "取消全选事件 CLEAR GS_OUTPUT. LOOP AT GT_OUTPUT INTO GS_OUTPUT. GS_OUTPUT-CHK = ''. MODIFY GT_OUTPUT FROM GS_OUTPUT. ENDLOOP. PERFORM FRM_REFRESH_ALV. WHEN '&PRT'. "打印事件 PERFORM FRM_REFRESH_ALV. LOOP AT GT_OUTPUT INTO GS_OUTPUT. IF GS_OUTPUT-CHK = 'X'. APPEND GS_OUTPUT TO GIT_OUTPUT. ENDIF. ENDLOOP. PERFORM FRM_DATA_PRINT. "打印事件 WHEN '&DWN'. PERFORM FRM_REFRESH_ALV. CLEAR:GS_OUTPUT. LOOP AT GT_OUTPUT INTO GS_OUTPUT. IF GS_OUTPUT-CHK = 'X'. APPEND GS_OUTPUT TO GIT_OUTPUT. ENDIF. ENDLOOP. PERFORM FRM_DWN_ELSX. "DOWNLOAD AS ELSX ENDCASE. ENDFORM.
ALV常用属性
I_CALLBACK_PROGRAM:调用ALV的程序名称"通常使用SY-REPID
I_CALLBACK_PF_STATUS_SET:ALV的GUI
I_CALLBACK_USER_COMMAND:自定义用户命令的FROM
I_CALLBACK_TOP_OF_PAGE:ALV抬头内容信息
I_CALLBACK_HTML_TOP_OF_PAGE:ALV HTML格式抬头内容信息
I_GRID_TITLE:ALV 标题
I_GRID_SETTINGS:GRID信息
IS_LAYOUT_LVC:ALV输出布局样式
IT_FIELDCAT_LVC:设定显示的项目名称及输出设定
IT_EXCLUDING:隐藏设置的ALV工具栏
IT_SORT_LVC:ALV自定义排序
I_DEFAULT:用户是否可以定义默认的布局,'X'-可以定义默认布局,Space-不可以定义默认布局 (默认:X)
I_SAVE:保存表格布局,'X'-只能保存全局变式;'U'-只能保存特定变式;'A'-都可以保存;Space-不能保存变式 (默认:space)
IS_VARIANT:表格布局变式
IT_EVENTS:设置事件, 类型为slis_t_event的内表(name:事件名称,form:事件的FORM)
不常用
I_INTERFACE_CHECK: 检查接口一致性
I_BYPASSING_BUFFER: 是否使用缓存
I_BUFFER_ACTIVE:是否激活缓存,如果每次显示ALV都是相同的字段目录,则该字段目录会被放到一特殊的缓存里,加快显示速度。
I_CALLBACK_HTML_END_OF_LIST:ALV HTML格式页脚内容信息
I_STRUCTURE_NAME:为输出表数据结构的命名,指定了这个参数,域目录将会自动生成
I_BACKGROUND_ID:ALV背景图片Object ID
IT_SPECIAL_GROUPS / IT_SPECIAL_GROUPS_LVC:若内表中一些字段通过SP_GROUP被分组在一起,必须为这些组传递组文本内表
IT_FILTER / IT_FILTER_LVC:ALV过滤设置
IS_SEL_HIDE:替换或修改屏幕中select-option的值
IT_EVENT_EXIT:设置回调的方法的执行行为,表明用户所写的代码是在执行标准执行之前还是之后
IS_PRINT:后台打印的相关参数
I_SCREEN_START_COLUMN:以对话框形式显示的开始列
I_SCREEN_START_LINE:以对话框形式显示的开始行
I_SCREEN_END_COLUMN:以对话框形式显示的结束列
I_SCREEN_END_LINE:以对话框形式显示的结束行
I_HTML_HEIGHT_TOP:HTML抬头的高度
I_HTML_HEIGHT_END:HTML页脚的高度
IT_ALV_GRAPHICS:是否可以在图表中显示ALV
IT_HYPERLINK:使用超链接
导出为Excel文件
ALV标准导出
使用ALV标准导出:加入GUI状态后添加标准按钮"电子表格" 即可将内表数据导出为Excel文件。
GUI_DOWNLOAD
使用函数进行导出
GUI按钮
SE41
根据条件显示ALV按钮
代码实现
FORM FRM_STATUS_SET USING IT_EXTAB TYPE SLIS_T_EXTAB. "#EC CALLED
REFRESH IT_EXTAB.
IF P_PZDR <> 'X'.
APPEND '&MN' TO IT_EXTAB.
APPEND '&GZ' TO IT_EXTAB.
SET PF-STATUS 'STANDARD' EXCLUDING IT_EXTAB.
ELSE.
APPEND '&CX' TO IT_EXTAB.
SET PF-STATUS 'STANDARD' EXCLUDING IT_EXTAB.
ENDIF.
ENDFORM.