【ABAP】ALV简介和Fieldcat与Layout相关参数属性

1.ALV简介

2.ALV报表开发的相关参数及属性

3.Layout的相关属性

4.Fieldcat的相关属性

5.调用ALV输出函数

 

1.ALV简介

ALV(SAP List Viewer) 是SAP常用的屏幕显示列表控件对象,通过传递数据内表方式显示数据;

ALV显示格式分为Grid 和 List两种模式:

Grid模式有栏位选择按钮功能,允许用户直接输出格式,操作更为灵活;

List 模式则固定格式,应用于较严格的标准报表。


Grid Mode:

alv_grid_mode

alv_grid_mode

 

List Mode:

alv_list_mode

alv_list_mode

 

输出ALV的 Function有两个:REUSE_ALV_GRID_DISPLAYREUSE_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 的定义:

slis_layout_alv

slis_layout_alv

SE11中,lvc_s_layo的定义:

lvc_s_layo

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-优化 默认: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 代表颜色信息的字段名

 

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 字段名称
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) 设置栏位是否有热点(热点栏位显示有下划线)

 

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[]      " 列明内表
    i_save             = 'X'               " 是否保存布局
  TABLES
    t_outtab           = i_tab
  EXCEPTIONS
    program_error      = 1
    OTHERS             = 2.

 

输出结果:

reuse_alv_grid_display

reuse_alv_grid_display

 

2)    REUSE_ALV_GRID_DISPLAY_LVC 函数

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
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

reuse_alv_grid_display_lvc

 

给TA打赏
共{{data.count}}人
人已打赏
ABAPSAP

【ABAP】dialog 子屏幕中不允许SET SCREEN

2020-5-14 2:36:08

SAP

【SAP】批次管理

2020-8-21 15:51:56

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索