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

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 函数用到的全局变量:

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

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 函数为例:

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

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

reuse_alv_grid_display_lvc

 

转载于:https://www.cnblogs.com/hcmy00/p/6524094.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值