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

tech2022-09-19  67

1.ALV简介

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

SE11中,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-优化默认: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[]     
最新回复(0)