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

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_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 的定义:

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_linesizeALV列表的最小宽度sy-linsz,取值10到250可选参数
max_linesizeALV列表的最大宽度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_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[]     
  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP OOALV是一种在ABAP编程语言中面向对象的方式实现的ALVABAP List Viewer)报表。它提供了更灵活和可扩展的方式来创建和展示报表数据。 以下是ABAP OOALV的一些关键步骤和示例代码[^1][^2]: 1. 定义变量和选择屏幕定义:在ABAP程序中定义所需的变量,并选择适当的屏幕定义。 2. 创建类:创建一个类来处理ALV报表的逻辑和功能。这个类应该继承自`CL_GUI_ALV_GRID`类。 3. 调用函数:在类中定义一个方法来调用ALV函数模块,例如`REUSE_ALV_GRID_DISPLAY`。 4. 获取数据并展示:在类中定义一个方法来获取报表数据,并将数据传递给ALV函数模块。 5. 表头字段设置:在类中定义一个方法来设置ALV报表的表头字段。 6. ALV输出格式:在类中定义一个方法来设置ALV报表的输出格式,例如列宽、对齐方式等。 7. 展示ALV:在类中定义一个方法来展示ALV报表。 8. 其他:根据需要,可以在类中定义其他方法来处理特定的功能,例如处理单击事件、排序等。 下面是一个简单的示例代码,演示了如何使用ABAP OOALV来创建和展示一个简单的报表: ```abap CLASS lcl_alv_report DEFINITION. PUBLIC SECTION. METHODS: constructor, display_alv. PRIVATE SECTION. DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid. METHODS: get_data, set_field_catalog, set_layout. ENDCLASS. CLASS lcl_alv_report IMPLEMENTATION. METHOD constructor. CREATE OBJECT lo_alv_grid EXPORTING i_parent = cl_gui_container=>screen0. ENDMETHOD. METHOD display_alv. CALL METHOD lo_alv_grid->set_table_for_first_display EXPORTING i_structure_name = 'SPFLI' CHANGING it_outtab = lt_spfli. ENDMETHOD. METHOD get_data. SELECT * FROM spfli INTO TABLE lt_spfli. ENDMETHOD. METHOD set_field_catalog. DATA: lt_fieldcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat. CALL METHOD lo_alv_grid->get_frontend_fieldcatalog RECEIVING rt_fieldcatalog = lt_fieldcat. LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>. <fs_fieldcat>-outputlen = 20. ENDLOOP. CALL METHOD lo_alv_grid->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = lt_fieldcat. ENDMETHOD. METHOD set_layout. DATA: lo_layout TYPE REF TO cl_gui_alv_layout. CREATE OBJECT lo_layout EXPORTING i_grid_title = 'ALV Report'. CALL METHOD lo_alv_grid->set_layout EXPORTING is_layout = lo_layout. ENDMETHOD. ENDCLASS. DATA: lo_report TYPE REF TO lcl_alv_report. START-OF-SELECTION. CREATE OBJECT lo_report. lo_report->get_data( ). lo_report->set_field_catalog( ). lo_report->set_layout( ). lo_report->display_alv( ). ``` 这是一个简单的ABAP OOALV报表的示例,它获取了`SPFLI`表中的数据,并展示在ALV报表中。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值