1.ALV简介
ALV(SAP List Viewer) 是SAP常用的屏幕显示列表控件对象,通过传递数据内表方式显示数据;
ALV显示格式分为Grid 和 List两种模式:
Grid模式有栏位选择按钮功能,允许用户直接输出格式,操作更为灵活;
List 模式则固定格式,应用于较严格的标准报表。
Grid Mode:
List Mode:
输出ALV的 Function有两个:REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC
两个函数都可以将数据用ALV的形式显示出来,只是一些小部分有所不同。
2.ALV报表开发的相关参数及属性
2.1 在调用 ALV 函数前,需要引入一个类型池:SLIS
2.2 Layout和Fieldcat的定义
Layout 主要用于设定 ALV 的输出格式,为 ALV 输出的可选项;
Fieldcat 主要用于ALV的结构定义,包括具体的栏位及名称、类型、格式等属性,为 ALV 输出的必选项。
在调用ALV之前,需要先定义Layout 和Fieldcat,他们同属于类型池 SLIS:
其中,对于两个ALV函数用到的全局变量定义有所区别:
1) REUSE_ALV_GRID_DISPLAY 函数用到的全局变量:
1 2 3 4 5 6 7 DATA : wa_fieldcat TYPE slis_fieldcat_alv , " 相当于工作区 i_fieldcat TYPE slis_t_fieldcat_alv , " 存放输出栏位名称的列表 i_layout TYPE slis_layout_alv . " 负责整个ALV的全局属性
2) REUSE_ALV_GRID_DISPLAY_LVC函数用到的全局变量:
1 2 3 4 5 6 7 DATA : wa_fieldcat TYPE lvc_s_fcat , " 相当于工作区 i_fieldcat TYPE lvc_t_fcat , " 存放输出栏位名称的列表 i_layout TYPE lvc_s_layo . " 负责整个ALV的全局属性
可以看出:
REUSE_ALV_GRID_DISPLAY 的Layout 类型为 slis_layout_alv, Fieldcat 的类型为 slis_fieldcat_alv;
REUSE_ALV_GRID_DISPLAY_LVC 的Layout 类型为 lvc_s_layo, Fieldcat 的类型为 lvc_s_fcat;
其中,对于‘SLIS_’开头的,可以在类型池 SLIS 中查看,‘LVC_’开头的可以在数据字典(SE11)中查看。
SLIS 类型池中 slis_layout_alv 的定义:
SE11中,lvc_s_layo的定义:
3 Layout的相关属性
3.1 slis_fieldcat_alv 常用具体字段栏位如下:
1) 公共部分
字段名称描述输入值备注no_colhead(1)不显示标题X-不显示,space-显示 no_hotspot(1)标题不设热点X-没有,space-有 zebra(1)使ALV表格按斑马线间隔条码方式显示X-有,space-没有 no_vline(1)设置列间竖线X-不显示,space-显示 no_hline(1)设置行间隔线X-不显示,space-显示 cell_merge(1)设置是否压域复制X-可复制,space-不可复制 edit(1)设置所有单元格可编辑X-可编辑,space-不可编辑 edit_mode(1)编辑模式 numc_sum(1)设置仅NUMC类型字段进行总计X-仅Numc类型,space-不仅Numc类型
no_input(1)不允许输入,用于显示状态X-不允许,space-允许 f2code设置触发弹出详细信息窗口的功能码sy-ucomm‘&ETA’ – 双击no_keyfix (1)关键字不固定,可以随滚动条滚动X-不固定,space-固定 expand_all (1)展开所有的node 对hierarchy ALV函数而言no_author (1)设置是否需要系统标准权限检查X-不需要,space-需要
2) ALV菜单栏
字段名称描述输入值备注def_status (1)默认菜单状态A显示,space不显示‘A’ – 为显示所有标准菜单item_text (20)菜单按钮文本 countfname (1) lvc_fname
3) 显示选项
字段名称描述输入值备注colwidth_optimize(1)优化列宽设置X-优化默认:spaceno_min_linesize(1)设置不允许最小宽度X-不允许,space-允许默认:spacemin_linesizeALV列表的最小宽度sy-linsz,取值10到250可选参数max_linesizeALV列表的最大宽度sy-linsz,可取值80-1020默认值250window_titlebar窗口标题sy-title no_uline_hs(1)输出ALV表不显示水平格线X-不显示,space-显示
4) 红绿灯显示异常
字段名称描述输入值备注lights_fieldname输出内表中定义的字段名,该字段用来显示状态灯1:red,2:yellow,3:green lights_tabname输出字段的参考内表名称 lights_rollname数据元素的名称,在灯字段按F1触发 lights_condense对输出的内表分类汇总的时候,小计行显示状态灯X
5) 汇总合计
字段名称描述输入值备注no_sumchoice (1)不能进行选择总计 no_totalline (1)不能总计,但可以小计 no_subchoice (1)不能选择小计,但可以总计 no_subtotals (1)不能小计,但可以总计 no_unit_splitting有单位字段,不进行总计 totals_before_items总行将会显示在最前面 totals_only (1)仅显示合计 totals_text (60)合计,第一列显示的文本 subtotals_text (60)总计和小计行,第一列显示的文本
6) 交互
字段名称描述输入值备注box_fieldname设置ALV表格是否显示选择按钮栏位 box_tabnamebox_fieldname 参考内表名称 box_rollname下拉框按钮名称 expand_fieldname’展开’字段名称 hotspot_fieldname热点字段 confirmation_prompt退出ALV列表的确认对话框 key_hotspot (1)关键字段作为热点 flexible_key (1)关键字段可以移动 group_buttons (1)COL1 – COL5 按钮组 get_selinfos (1)获取选择屏幕 group_change_edit (1)设置用户新的按钮组 no_scrolling(1)滚动条无效,清单不随其滚动 仅list_alv有效
7) 明细窗口
字段名称描述输入值备注detail_popup (1)行项目明细弹窗形式X-显示,space-不显示对list_alv有效detail_initial_lines(1)明细中同时显示初始化行X-同时显示,space-不显示 detail_titlebar明细窗口标题文本sy-title
8) 显示变式
字段名称描述输入值备注header_text表头按钮 default_item (1)列表明细作为默认值X-激活,space-不激活
9) 颜色
字段名称描述输入值备注info_fieldname用于设置ALV输出报表每一行的颜色,其参数为输出内表的栏位名称
C000~C999倘若其数据输出内表名为LT_OUT,则需要在改内表增加一个栏位“COLOR”,并为内表每行赋值,LT_OUT-COLOR = ‘C500’
coltab_fieldname颜色值
10) 其他
字段名称描述输入值备注list_append设置是否Call屏幕 xifunckeyeXtended interaction(SAPQuery) xidirecteXtended INTeraction(SAPQuery) dtc_layout设置Tabstip的布局格式配置DTC_S_LAYO allow_switch_to_list设置从Grid模式转换为List模式
3.2 lvc_s_layo常用具体字段栏位如下:
1) 布局控制(ALV_S_LAYO)
字段名称描述输入值备注ZEBRA(1)使ALV表格按斑马线间隔条码方式显示X-有,space-没有 EDIT(1)准备编辑X-可编辑,space-不可编辑 EDIT_MODE(1)编辑模式 NO_KEYFIX(1)关键字不固定,可以随滚动条滚动X-不固定,space-固定 FRONTEND(1) LANGUAGE语言标识符LANG SMALLTITLE(1)标题大小 NO_HGRIDLN(1)是否隐藏水平网格线X-不显示,space-显示 NO_VGRIDLN(1)是否隐藏垂直网格线X-不显示,space-显示 NO_HEADERS(1)隐藏列抬头X-不显示,space-显示 NO_MERGING(1)禁用单元格合并 CWIDTH_OPT(1)自动优化列宽X-优化,space-不自动优化 TOTALS_BEF(1)在个别记录前总计输出 NO_TOTARR(1)汇总行前显示箭头表示汇总 NO_TOTEXP(1)只显示小计,不显示总计 NO_F4(1)屏蔽F4搜索帮助 COUNTFNAME内部表字段的字段名称LVC_FNAME
2) 一般显示选项(LVC_S_L001)
字段名称描述输入值备注STYLEFNAME用来传输格表,以便把各显示为按钮LVC_FNAME
3) 网格定制(LVC_S_L002)
字段名称描述输入值备注NO_ROWMARK禁用行选择 NO_TOOLBAR隐藏工具栏 GRID_TITLE标题栏文本 SEL_MODE(1)选择模式A-选择按钮,space-空白“A”在最左端有选择按钮BOX_FNAME内部表字段的字段名称 SGL_CLK_HD第一次点击列的头的时候升序排列,第二次点击的时候降序排列
4) 总计选项(LVC_S_L003)
字段名称描述输入值备注NO_TOTLINE(1)不输出总计行X-不输出,space-输出 NUMC_TOTAL(1)禁止 NUMC 字段总计X-禁止,space-不禁止 NO_UTSPLIT(1)按单元拆分总计行X-不拆分,space-拆分
5) 例外(LVC_S_L004)
字段名称描述输入值备注EXCP_FNAMEField name with exception coding EXCP_ROLLNData element for exception documentation EXCP_CONDS(1)Aggregate exceptions EXCP_LED(1)Exception as LED EXCP_GROUP(1)Exception Group
6) 交互控制(LVC_S_L005)
字段名称描述输入值备注DETAILINIT在细节屏幕显示初始值 DETAILTITL细节屏幕的标题栏 KEYHOT关键列作为热点 NO_AUTHOR不执行 ALV 标准授权检查 XIFUNCKEY附加功能名 XIDIRECT一般标记
7) 拖&放控制设置(LVC_S_DD01)
字段名称描述输入值备注S_DRAGDROP拖&放控制设置结构LVC_S_DD01
8) 颜色(LVC_S_L006)
字段名称描述输入值备注INFO_FNAME带有简单行彩色代码的字段名称 CTAB_FNAME代表颜色信息的字段名
4 Fieldcat的相关属性
和Layout一样,REUSE_ALV_GRID_DISPLAY 函数中的 Fieldcat 结构: slis_t_fieldcat_alv 可在 SLIS 类型池中找到;
REUSE_ALV_GRID_DISPLAY_LVC函数中的 Fieldcat 结构: lvc_s_fcat 可在 SE11 中查看。
两者大同小异,常用具体字段栏位如下:
字段名称描述输入值备注row_pos输出行位置1….n col_pos输出列位置1….n fieldname字段名称 tabnamefieldname字段对应的内表名称 currency货币单位 cfieldname当前输出内表中的货币单位字段的字段名称 ctabnameCfieldname字段值对应的内表名称 ifieldname quantity计量单位 qfieldname参考计量单位的字段名称 qtabnameQfieldname 对应的输出内表名 round四舍五入保留位数 exponent流动表示的指数 key(1)将栏位设置为Key值 icon(1)将定义栏位以ICON的形式显示 symbol(1)作为Symbol符号输出,
在ALV输出内表中的字段值可以是ABAP名称
checkbox(1)作为复选框输出 just(1)定义栏位对齐方式(R)Right (L)Left (C)Center lzero(1)输出前置零 no_sign(1)不输出正负号+、- no_zero(1)如果取值为零,则为空,既不输出零 no_convext(1) edit_mask输出编辑掩码, 同write语句中的edit mas格式是一样的 一般用来格式化时间和日期等emphasize(4)设置栏位的颜色 fix_column(1)固定列 do_sum(1)对当前列输出时自动求和 no_out(1)当前列隐藏输出 tech(1)技术字段,设置’X’后,该字段不会显示,也不能输出,如同MANDT字段一样的效果
outputlen列的字符宽度 offset偏移量 seltext_l / scrtext_l长文本 seltext_m / scrtext_m中文本 seltext_s / scrtext_s短文本 ddictxt(1)列标题描述格式(S)hort (M)iddle (L)ong rollname datatype数据类型 inttype整型 intlen整型长度 lowercase是否允许小写字母 decfloat_style浮点格式 ref_fieldname参考字段名称,配合ref_tabname一起使用,一般用来使单元格生成F4帮助
ref_tabname参考表名称,配合ref_fieldname使用 roundfieldname四舍五入字段名称 roundtabname四舍五入内表名称 decimalsfieldname小数点字段名称 decimalstabname小数点内表名称 decimals_out(6)控制小数点的位数 text_fieldname文本字段名称 reptext_ddic与数据元素的主标题类似 ddic_outputlen数据字典输出长度 key_sel(1)这个参数只和设置了Key的字段相关,和Key一起使用可以交互式的隐藏设置为Key的字段(alv_list有效)
no_sum(1)不自动汇总 sp_group(4)分组需求 reprep(1)selection for rep/rep input(1)输入 edit(1)编辑 hotspot(1)设置栏位是否有热点(热点栏位显示有下划线)
5 调用ALV输出函数
使用ALV输出,可以直接参考数据字典中的现有透明表,也可以自定义Fieldcat来输出字段;
如若使用数据字典中的透明表或视图时,需要调用REUSE_ALV_FIELDCATALOG_MERGE 函数来对相应的Fieldcat 进行匹配;
另外,必须保证该结构或内表中的每个字段都参考数据字典中的Data Element,否则无法获取字段的相关信息.
以REUSE_ALV_GRID_DISPLAY 函数为例:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_interface_check = ' ' i_bypassing_buffer = ' ' i_buffer_active = ' ' i_callback_program = gv_repid "程序名称 i_callback_pf_status_set = 'FRM_SET_GUI' "定义触发工具栏定义的子程序 i_callback_user_command = 'FRM_USER_COMMAND' "单击alv工具栏按钮或双击行项目时触发所定义的子程序 i_callback_top_of_page = ' ' i_callback_html_top_of_page = ' ' i_callback_html_end_of_list = ' ' i_structure_name = i_background_id = ' ' i_grid_title = 'ALV输出' "ALV名称 i_grid_settings = is_layout = gt_layout "程序所定义的layout名称 it_fieldcat = gt_fieldcat[] "定义fieldcat数据 it_excluding = it_special_groups = it_sort = gt_sort[] it_filter = is_sel_hide = i_default = 'X' i_save = 'X' is_variant = it_events = gt_event[] 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 = IMPORTING e_exit_caused_by_caller = es_exit_caused_by_user = TABLES t_outtab = gt_print EXCEPTIONS program_error = 1 OTHERS = 2.
下面看看两个函数各自输出的方式与操作;
1) REUSE_ALV_GRID_DISPLAY 函数:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 REPORT ztest_jx_alv. TYPES : slis. TYPES : BEGIN OF ty_s_matnr, matnr TYPE mara-matnr, END OF ty_s_matnr. DATA : i_tab TYPE STANDARD TABLE OF ty_s_matnr. SELECT matnr FROM mara INTO CORRESPONDING FIELDS OF TABLE i_tab UP TO 20 ROWS. DATA : wa_fieldcat TYPE slis_fieldcat_alv , " 相当于工作区 i_fieldcat TYPE slis_t_fieldcat_alv , " 存放列名的列表 i_layout TYPE slis_layout_alv . " 负责整个ALV的全局属性 DATA : lv_pos TYPE p. wa_fieldcat-qtabname = wa_fieldcat-ctabname = wa_fieldcat-tabname = 'I_TAB' . wa_fieldcat-fieldname = 'MATNR' . " 需要输出的内表的字段名 wa_fieldcat-seltext_l = 'Material NO.' . " 字段的描述-长字段标签 wa_fieldcat-seltext_m = 'Material NO.' . " 字段描述-中字段标签 wa_fieldcat-seltext_s = 'Material NO.' . " 字段描述-短字段标签 wa_fieldcat-fix_column = 'X' . " 是否是固定列 APPEND wa_fieldcat TO i_fieldcat. CLEAR wa_fieldcat. i_layout-zebra = 'X' . " 使ALV界面呈现颜色交替 i_layout-colwidth_optimize = 'X' . " 自动优化列宽 i_layout-detail_initial_lines = 'X' . " 是否出现细节屏幕 i_layout-detail_titlebar = '详细内容' . " 细节屏幕标题 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid " 当前程序 is_layout = i_layout " 属性内表 it_fieldcat = i_fieldcat[]