ALV简介和Fieldcat与Layout相关参数属性
ALV(SAP List Viewer) 是SAP常用的屏幕显示列表控件对象,通过传递数据内表方式显示数据;
ALV显示格式分为Grid 和 List两种模式:
Grid模式有栏位选择按钮功能,允许用户直接输出格式,操作更为灵活;
List 模式则固定格式,应用于较严格的标准报表。
Grid Mode:
alv_grid_mode
List Mode:
alv_list_mode
输出ALV的 Function有两个:REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC
两个函数都可以将数据用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 函数用到的全局变量:
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函数用到的全局变量:
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 的定义:
slis_layout_alv
SE11中,lvc_s_layo的定义:
lvc_s_layo
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-优化 | 默认:space |
| no_min_linesize(1) | 设置不允许最小宽度 | X-不允许,space-允许 | 默认:space |
| min_linesize | ALV列表的最小宽度 | sy-linsz,取值10到250 | 可选参数 |
| max_linesize | ALV列表的最大宽度 | sy-linsz,可取值80-1020 | 默认值250 |
| window_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_tabname | box_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屏幕 | ||
| xifunckey | eXtended interaction(SAPQuery) | ||
| xidirect | eXtended 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_FNAME | Field name with exception coding | ||
| EXCP_ROLLN | Data 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 | 代表颜色信息的字段名 |
和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 | 字段名称 | ||
| tabname | fieldname字段对应的内表名称 | ||
| currency | 货币单位 | ||
| cfieldname | 当前输出内表中的货币单位字段的字段名称 | ||
| ctabname | Cfieldname字段值对应的内表名称 | ||
| ifieldname | |||
| quantity | 计量单位 | ||
| qfieldname | 参考计量单位的字段名称 | ||
| qtabname | Qfieldname 对应的输出内表名 | ||
| 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) | 设置栏位是否有热点(热点栏位显示有下划线) |
使用ALV输出,可以直接参考数据字典中的现有透明表,也可以自定义Fieldcat来输出字段;
如若使用数据字典中的透明表或视图时,需要调用REUSE_ALV_FIELDCATALOG_MERGE 函数来对相应的Fieldcat 进行匹配;
另外,必须保证该结构或内表中的每个字段都参考数据字典中的Data Element,否则无法获取字段的相关信息.
以REUSE_ALV_GRID_DISPLAY 函数为例:
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 函数:
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[] " 列明内表
i_save = 'X' " 是否保存布局
TABLES
t_outtab = i_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
输出结果:
reuse_alv_grid_display
2) REUSE_ALV_GRID_DISPLAY_LVC 函数
REPORT ztest_jx_alv_lvc.
* 引入类型池
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_lvc TYPE lvc_s_fcat , " 相当于工作区
i_fieldcat_lvc TYPE lvc_t_fcat , " 存放列名的列表
i_layout_lvc TYPE lvc_s_layo . " 负责整个ALV的全局属性
wa_fieldcat_lvc-tabname = 'I_TAB'.
wa_fieldcat_lvc-fieldname = 'MATNR'. " 需要输出的内表的字段名
wa_fieldcat_lvc-scrtext_l = 'Material NO.'. " 字段的描述-长字段标签
wa_fieldcat_lvc-scrtext_m = 'Material NO.'. " 字段描述-中字段标签
wa_fieldcat_lvc-scrtext_s = 'Material NO.'. " 字段描述-短字段标签
wa_fieldcat_lvc-fix_column = 'X' . " 是否是固定列
APPEND wa_fieldcat_lvc TO i_fieldcat_lvc .
CLEAR wa_fieldcat_lvc.
i_layout_lvc-zebra = 'X' . " 使ALV界面呈现颜色交替
i_layout_lvc-sel_mode = 'A' . " 选择模式,"A"在最左端有选择按钮
i_layout_lvc-cwidth_opt = 'X' . " 自动优化列宽
i_layout_lvc-detailinit = 'X' . " 是否出现细节屏幕
i_layout_lvc-detailtitl = '详细内容' . " 细节屏幕标题
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid " 当前程序
is_layout_lvc = i_layout_lvc " 属性内表
it_fieldcat_lvc = i_fieldcat_lvc[] " 列明内表
i_save = 'X' " 是否保存布局
TABLES
t_outtab = i_tab " 数据内表
EXCEPTIONS
program_error = 1
OTHERS = 2.
输出结果:
reuse_alv_grid_display_lvc
浙公网安备 33010602011771号