SAP-ALV

it2025-08-08  14

ALV

ALV概述

​ 全称 alv_list_view ,是sap提供的一个强大的数据报表显示工具,alv实质上是一个屏幕控件对象,他通过程序传递数据内表的方式来显示数据

类型池 : slis

TYPE-POOLS SLIS . "类型池

REUSR_ALV_GRID_DISPLAY

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' * I_CALLBACK_PROGRAM = SY-CPR OG "调用alv函数返回的程序 * I_CALLBACK_PF_STATUS_SET = '子程序名' "设置alv程序内的按钮 * I_CALLBACK_USER_COM AND = '子程序名' "设置按钮功能,传输form名称 * I_CALLBACK_TOP_OF_PAGE = ' ' "表头 * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' "动态表头 * I_CALLBACK_HTML_END_OF_LIST = ' ' * I_STRUCTURE_NAME = 'zstudent' "数据库表名(直接去表内容) (单表) * I_BACKGROUND_ID = ' ' I_GRID_TITLE = '标题' * I_GRID_SETTINGS = IS_LAYOUT = GT_LAYOUT "全局格式,表样式的优化 IT_FIELDCAT = GT_FIELDCAT "列格式设置(表单),必须执行的函数 * IT_EXCLUDING = "隐藏alv基本按钮 * IT_SPECIAL_GROUPS = IT_SORT = GT_SORT "设置排序内容等 * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' " * IS_VARIANT = " IT_EVENTS = GT_EVENTS "定义alv事件 增加按钮 * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * O_PREVIOUS_SRAL_HANDLER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES T_OUTTAB = GT_XX "显示表 内表名 EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF SY-SUBRC <> 0. * Implement suitable error handling here ENDIF.

fieldcat --> 列属性 --> 内表

DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV . DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV . 列格式设置(表单)字段名称,列是否可修改,列宽度等 FORM BUILD_FIELDCAT . CLEAR : GV_INDEX , GT_FIELDCAT . PERFORM FRM_EDIT_FIELDCAT USING 'ZCODE' '学生编号'. PERFORM FRM_EDIT_FIELDCAT USING 'ZNAME' '学生姓名'. PERFORM FRM_EDIT_FIELDCAT USING 'ZSEX' '性别'. ENDFORM. FORM FRM_EDIT_FIELDCAT USING P_FIELD TYPE STRING P_TEXT TYPE STRING. ADD 1 TO GV_INDEX . GS_FIELDCAT-COL_POS = GV_INDEX . " 第几列输出 GS_FIELDCAT-FIELDNAME = P_FIELD . " 字段名 GS_FIELDCAT-SELTEXT_M = P_TEXT . " 描述文本 CASE P_FIELD. WHEN 'ZCODE' . GS_FIELDCAT-KEY = 'X' . " 奖列设为关键字 GS_FIELDCAT-HOTSPOT = 'X' . " 热点 WHEN 'ICON' . GS_FIELDCAT-ICON = 'X' . " 图标 "取数中书写` LOOP AT GT_STUDENT INTO GS_STUDENT . " 图标 IF GS_STUDENT-ZSEX = 'M' . GS_STUDENT-ICON = ICON_GREEN_LIGHT . ELSE . GS_STUDENT-ICON = ICON_RED_LIGHT . ENDIF. MODIFY GT_STUDENT FROM GS_STUDENT . ENDLOOP. WHEN 'CHECK' . GS_FIELDCAT-CHECKBOX = 'X' . "复选框 WHEN 'LABST'. "表的列属性 GS_FIELDCAT-DO_SUM = 'X'. "合计 GS_FIELDCAT-QUANTITY = 'FER' . "直接指明的国定单位 GS_FIELDCAT-QFIELDNAME = 'WERKS'. "内表中表明当前数值的单位的字段 ENDCASE . APPEND GS_FIELDCAT TO GT_FIELDCAT . ENDFORM. 字段说明key将该列设置为关键字 (x/ )icon以图标显示 (x/ )checkbok以复选框显示 (x/ )just定义对其方式 (r/l/c)lzero增加前导零 (x/ )no_sign不显示符号 (x/ )no_zero不显示前导零 (x/ )col_pos作为第几列输出 (数字)do_sum对字段进行总汇 (x/ )select_l/m/s字段名称描述长/中/短 (字符串)hotspot设置为热点 (显示为有下划线) (x/ )

layout --> 全局格式 --> 结构

DATA GS_LAYOUT TYPE SLIS_LAYOUT_ALV. 全局格式设置(结构)整表字段是否可修改,是否以斑马纹输出,是否显示选择按钮字段等 FORM BUILD_LAYOUT . GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X' . " 优化列宽 GS_LAYOUT-ZEBRA = 'X' . " 斑马纹 GS_LAYOUT-EDIT = 'X' . " 是否可编辑模式 GS_LAYOUT-NO_VLINE = 'X' . " 不显示垂直格线 GS_LAYOUT-NO_ULINE_HS = 'X' . " 不显示水平格线 GS_LAYOUT-KEY_HOTSPOT = 'X' . " 热点 GS_LAYOUT-BOX_FIELDNAME = 'BOX' . " 内表中字段名称 - 定义为当前行的选择按钮 GS_LAYOUT-INFO_FIELDNAME = 'COLOR' " 行颜色 GS_LAYOUT-COLTAB_FIELDNAME = 'COLOR' " 单元格颜色 GS_LAYOUT-DETAIL_INITIAL_LINES = 'X' . " 点击详情 显示空字段 GS_LAYOUT-WINDOW_TITLEBAR = '窗体抬头' . GS_LAYOUT-CONFIRMATION_PROMPT = 'X' . " 弹出提示框 - 是否退出 ENDFORM. 字段说明edit是否为可编辑模式 (x/ )colwidth_optimize优化列宽,根据内容自动匹配宽度 (x/ )no_vline不显示垂直格线 (x/ )no_uline_hs不显示水平格线 (x/ )info_fieldname设置标志颜色字段 (内表中字段名称)key_hotspot设置关键字断热点 (x/ )no_colname是否显示字段名 (x/ )zebra以斑马纹输出,深浅色底纹相间 (x/ )

SORT --> 排序

DATA GT_SORT TYPE SLIS_T_SORTINFO_ALV . DATA GS_SORT TYPE SLIS_SORTINFO_ALV . FORM BUILD_SORT . " 按照学校升序 CLEAR GS_SORT . GS_SORT-SPOS = '1' . GS_SORT-FIELDNAME = 'ZSCHOOL' . GS_SORT-UP = 'X' . GS_SORT-SUBTOT = 'X' . "分类小计 APPEND GS_SORT TO GT_SORT . " 按照性别降序 CLEAR GS_SORT . GS_SORT-SPOS = '2' . GS_SORT-FIELDNAME = 'ZSEX' . GS_SORT-DOWN = 'X' . APPEND GS_SORT TO GT_SORT . ENDFORM.

FILTER --> 筛选

DATA GT_FILTER TYPE SLIS_T_FILTER_ALV . DATA GS_FILTER TYPE SLIS_FILTER_ALV . FORM BUILD_FILTER . CLEAR GS_FILTER . GS_FILTER-FIELDNAME = 'ZSEX' . " 字段名 GS_FILTER-SIGN0 = 'E' . " 不包含 GS_FILTER-OPTIO = 'EQ' . " 等于 GS_FILTER-VALUF = '' . " 空值 APPEND GS_FILTER TO GT_FILTER . ENDFORM.

EVENT --> CALLBACK事件

DATA GT_EVENTS TYPE SLIS_T_EVENT . DATA GS_EVENTS TYPE SLIS_ALV_EVENT . FORM BUILD_EVENTS . CLEAR GS_EVENTS . "自定义按钮 GS_EVENTS-NAME = 'PF_STATUS_SET' . GS_EVENTS-FORM = 'SET_STATUS' . "子程序名 APPEND GS_EVENTS TO GT_EVENTS . CLEAR GS_EVENTS . GS_EVENTS-NAME = 'USER_COMMAND' . GS_EVENTS-FORM = 'FM_USER_COMMAND' . APPEND GS_EVENTS TO GT_EVENTS . ENDFORM. FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB . SET PF-STATUS 'STATUS' EXCLUDING RT_EXTAB . "自定义按钮 * SET PF-STATUS 'ST_STATUS' EXCLUDING RT_EXTAB . " 参照标准按钮 ENDFORM . FORM FM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD . *-----------------------------------------------* 按钮功能 CASE R_UCOMM . WHEN '&IC1' . "单击 CASE RS_SELFIELD-FIELDNAME . WHEN '字段名' . "单击要设置热点 双击不用设置热点 MESSAGE S000 WITH '点击' RS_SELFIELD-VALUE WHEN '字段名' . "内存id SET PARAMETER ID 'LIF' FIELD RS_SELFIELD-VALUE . CALL TRANSACTION 'FK03' . ENDCASE . WHEN 'CALLSF' . "双击 DEAD TABLE GT_STUDENT INTO GS_STUDENT INDEX RS_SELFIELD-TABINDEX. PERFORM CALL_SMARTFORMS USEING GS_STUDENT-字段. WHEN 'DOWNLOAD' . " PERFORM DOWNLOAD_FILE ENDCASE. ENDFORM .

start-of-selection --> 取数

START-OF-SELECTION . "取数 PERFORM 子程序 . FORM GET_DATA . *-----------------------------------------------* 取数 DATA : LT_MARA TYPE TABLE OF TY_MARA, LS_MARA TYPE TY_MARA, LT_MAKT TYPE TABLE OF TY_MAKT, LS_MAKT TYPE TY_MAKT. SELECT LGORT, MATNR, LABST, WERKS INTO TABLE @DATA(LT_MARD) "新语法 FROM MARD. IF LT_MARD IS NOT INITIAL . SELECT MATNR MEINS MTART INTO TABLE LT_MARA FROM MARA FOR ALL ENTRIES IN LT_MARD WHERE MATNR = LT_MARD-MATNR . SELECT MATNR MAKTX INTO TABLE LT_MAKT FROM MAKT FOR ALL ENTRIES IN LT_MARD "FOR ALL ENTRIES IN --key全取 表不为空 WHERE MATNR = LT_MARD-MATNR . ENDIF. LOOP AT LT_MARD INTO DATA(LS_MARD). MOVE-CORRESPONDING LS_MARD TO GS_XX . "按相同字段名称依次进行赋值 READ TABLE LT_MARA INTO LS_MARA WITH KEY MATNR = LS_MARD-MATNR. READ TABLE LT_MAKT INTO LS_MAKT WITH KEY MATNR = LS_MARD-MATNR. IF SY-SUBRC = 0 . GS_XX-MTART = LS_MARA-MTART . GS_XX-MEINS = LS_MARA-MEINS . GS_XX-MAKTX = LS_MAKT-MAKTX . ENDIF . APPEND GS_XX TO GT_XX. CLEAR:GS_XX. ENDLOOP. ENDFORM. 数据表单数据选取

end-of-selection --> 读数

END-OF-SELECTION . "读数 IF 内表 IS NOT INITIAL . PERFORM 子程序 . ELSE . MESSAGE S001 DISPLAY LIKE 'E' . ENDIF . FORM 子程序 . PERFORM BUILD_FIELDCAT . PERFORM BUILD_LAYOUT . PERFORM BUILD_SORT . PERFORM BUILD_FILTER . PERFORM BUILD_EVENTS . PERFORM BUILD_ALV . ENDFORM.

对fieldcat赋值:设置每列格式

对layout赋值:设置表单格式

对sort表等赋值:设置排序内容等

对event表赋值:增加程序交互事件

调用函数:输出alv

最新回复(0)