ALV (二)、Function ALV ( Layout 和 Fieldcat )

ALV的相关函数:REUSE_ALV_GRID_DISPLAY 代表grid格式的alv,REUSE_ALV_LIST_DISPLAY,代表list格式的alv,

 

REUSE_ALV_FIELDCATALOG_MERGE:根据内表定义的数据字典对象快速生成fieldcat内表(必须要引用data element)。

此外还有一种以LVC结尾的ALV函数REUSE_ALV_GRID_DISPLAY_LVC,这个函数中的引用类型不再是slis,而是数据字典结构,而且与OO ALV所用到的类型也基本相同,所以推荐使用 LVC结尾的函数。

先介绍以下slis类型池的参数。

layout 主要用于ALV整体输出格式,结构属于类型池:  type-pools:slis.

         no_colhead(1) type c,         " no headings不显示列标题行
         no_hotspot(1) type c,         " headings not as hotspot
         zebra(1) type c,              " striped pattern斑马线显示,颜色隔行交替显示
         no_vline(1) type c,           " columns separated by space不显示垂直网格线
         no_hline(1) type c,        "rows separated by space B20K8A0N5D不显示水平网格线
         cell_merge(1) type c,         " not suppress field replication  ALV单元格中的内容能够复制到剪贴板
         edit(1) type c,               " for grid onlyALV是否可编辑,注意只对Grid模式有效,对List模式无效
         edit_mode(1) type c,          " for grid only
         numc_sum(1)     type c,       " totals for NUMC-Fields possib.
         no_input(1) type c,           " only display fields
         f2code like sy-ucomm,       "gs_layout-f2code  = '&ETA'.设置触发弹出详细信息窗口的功能码,这里是双击(&ETA)就可以弹出详细窗口,而不需要通过右键菜单
         reprep(1) type c,             " report report interface active
         no_keyfix(1) type c,          " do not fix keycolumns
         expand_all(1) type c,         " Expand all positions
         no_author(1) type c,          " No standard authority check
*        PF-status
         def_status(1) type c,         " default status  space or 'A'
         item_text(20) type c,         " Text for item button
         countfname type lvc_fname,

*        Display options
         colwidth_optimize(1) type c, "ALV网格(单元格)宽度设置为自动最优化,按输出内容宽度自动调整
         no_min_linesize(1) type c,    " line size = width of the list
         min_linesize like sy-linsz,   " if initial min_linesize = 80
         max_linesize like sy-linsz,   " Default 250
         window_titlebar like sy-title,
         no_uline_hs(1) type c,
*        Exceptions
         lights_fieldname type slis_fieldname," fieldname for exception列显示为红绿灯
         lights_tabname type slis_tabname, " fieldname for exception
         lights_rollname like dfies-rollname," rollname f. exceptiondocu
         lights_condense(1) type c,    " fieldname for exception
*        Sums
         no_sumchoice(1) type c,       " no choice for summing up
         no_totalline(1) type c,       " no total line
         no_subchoice(1) type c,       " no choice for subtotals
         no_subtotals(1) type c,       " no subtotals possible
         no_unit_splitting type c,     " no sep. tot.lines by inh.units
         totals_before_items type c,   " diplay totals before the items统计行会在数据行前面显示
         totals_only(1) type c,        " show only totals只显示合计
         totals_text(60) type c,       " text for 1st col. in total line合计第一列文本
         subtotals_text(60) type c,    " text for 1st col. in subtotals
*        Interaction交互
         box_fieldname type slis_fieldname, " fieldname for checkbox指定数据内表中哪列以选择按钮形式显示(首列前可按下或弹上来的按钮),ALV最左上角会出现全选按钮
         box_tabname type slis_tabname," tabname for checkbox
         box_rollname like dd03p-rollname," rollname for checkbox
         expand_fieldname type slis_fieldname, " fieldname flag 'expand'
         hotspot_fieldname type slis_fieldname, " fieldname flag hotspot
         confirmation_prompt,          " confirm. prompt when leaving当退出ALV报表展示界面时,是否需要提示用户
         key_hotspot(1) type c,        " keys as hotspot " K_KEYHOT设置关键字段是否是热点,可单击
         flexible_key(1) type c,       " key columns movable,...
         group_buttons(1) type c,      " buttons for COL1 - COL5
         get_selinfos(1) type c,       " read selection screen
         group_change_edit(1) type c,  " Settings by user for new group
         no_scrolling(1) type c,       " no scrolling
*        Detailed screen详细屏幕
         detail_popup(1) type c,       " show detail in popup 右键中有 Detail 菜单,是否弹出详细信息窗口
         detail_initial_lines(1) type c, " show also initial lines为空行时单元格内容也会显示在右键弹出的详细框中
         detail_titlebar like sy-title," Titlebar for detail设置详细弹出窗口的标题栏
*        Display variants
         header_text(20) type c,       " Text for header button
         default_item(1) type c,       " Items as default
*        colour颜色
         info_fieldname type slis_fieldname, " infofield for listoutput指定数据输出内表中哪列存储的是颜色,用来设置ALV每行数据的颜色。注:使用属性需要同时在数据内表中定义一个与该参数所定义字段名相同的栏位,如:LAYOUT-INFO_FIELDNAME=’COLOR’,假设数据内表名为LT_OUT,则需要在该内表增加一个栏们“COLOR”,颜色范围 C000~C999
         coltab_fieldname type slis_fieldname, " colors
*        others
         list_append(1) type c,       " no call screen
         xifunckey type aqs_xikey,    " eXtended interaction(SAPQuery)
         xidirect type flag,          " eXtended INTeraction(SAPQuery)
         dtc_layout type dtc_s_layo,  "Layout for configure the Tabstip
         allow_switch_to_list(1) type c, "ACC: Switch from FullGrid to List

fieldcat 主要用于ALV显示结构的定义,包括栏位名称,类型,输出格式,

         row_pos        LIKE sy-curow, " output in row
         col_pos        LIKE sy-cucol, " position of the column列的输出位置字段在表中第几列
         fieldname      TYPE slis_fieldname,"针对输出内表哪列进行设置,只有设置了的列才会显示,如果没有设置,则不会显示在ALV中。如果此字段是CURR(currency field) ,QUAN(Quantity field) 需要指定相应的CUKY, UNIT字段.需设置Cfieldname Ctabname 和Qfieldname    Qtabname
         tabname        TYPE slis_tabname,
         currency(5)    TYPE c, " tcurx表中的货币名称
         cfieldname     TYPE slis_fieldname, " field with currency unit金额字段所参照的货币单位字段名称(货币单位字段为数据内表中的某列?)
         ctabname       TYPE slis_tabname,   " and table
         ifieldname     TYPE slis_fieldname, " initial column
         quantity(3)    TYPE c, "计量单位
         qfieldname     TYPE slis_fieldname, " field with quantity unit
         qtabname       TYPE slis_tabname,   " and table
         roundtypei,        " round in write statement四舍五入至小数点后多少位
         exponent(3)       TYPE c,     " exponent for floats浮点数的幂指数为多少位
         key(1)         TYPE c,        " column with key-color指定字段是否是关键字段,如果是则单元格显示的颜色会不同,并会靠前显示
         icon(1)        TYPE c,        " as icon字段将以图标形式显示,INCLUDE <list> ,图标字段内容来自list Inc.文件
         symbol(1)      TYPE c,        " as symbol字段内容作为符号输出,与上面的ICON属性相似
         checkbox(1)    TYPE c,        " as checkbox字段将以复选框形式显示
         just(1)        TYPE c,        " (R)ight (L)eft (C)ent.单元格中内容显示时对齐方式。不设置时按钮数据类型默认对齐方式来对齐
         lzero(1)       TYPE c,        " leading zero   为X时输出前导零
         no_sign(1)     TYPE c,        " write no-sign 不显示数字符号
         no_zero(1)     TYPE c,        " write no-zero 只输出有意义的值,空值不输出。为X时全为零(如:00000)时不输出,所以不输出零时应该最好同时设置lzero = sapce与no_zero = X,相反如果要输出,则应同时设置lzero = X 与no_zero = space
         no_convext(1)  TYPE c,
         edit_mask      TYPE slis_edit_mask, "对字段内容进行掩码格式化输出,具体请参照《ABAP BC Programming.docx》中的WRITE … TO章节,如:gt_fieldcat-edit_mask = '____/__/__'可对日期字段都日期格式化显示
         emphasize(4)   TYPE c,        " emphasize设置列的颜色
         fix_column(1)   TYPE c,       " Spalte fixieren列固定不滚动,与Key属性相似,但颜色不会发生变化
         do_sum(1)      TYPE c,        " sum up该列是否进行小计,需与gt_sort-subtot一起使用(即需要参考排序),否则只对整列进行一个合计
         no_out(1)      TYPE c,        " (O)blig.(X)no out但注意用户可以change layout(布局设置)来显示出此列
         tech(1)        TYPE c,        " technical field该字段为技术字段:设置为技术列的列将不会再显示出来,即使是在布局设置里也是看不到的
         outputlen      LIKE dd03p-outputlen, "列的字符输出宽度
         OFFSET         TYPE dd03p-outputlen,     " offset
"调整输出列抬头的文本:文本可以随着用户调整列的宽度而变化,其文本即是在对应data element中定义的,如果需要定制,则可以指定以下字段
         seltext_l LIKE dd03p-scrtext_l, " long key word标题字段显示的名称(长)
         seltext_m LIKE dd03p-scrtext_m, " middle key word标题字段显示的名称(中)
         seltext_s LIKE dd03p-scrtext_s, " short key word标题字段显示的名称(短)
         ddictxt(1)     TYPE c,        " (S)hort (M)iddle (L)ong设置以长、中还是短名称来显示,取值分别为 S、M、L。直接指定文本显示为长文本、中、还是短文本, 指定这个字段后则会固定下来,不会随着用户的宽度调整变化.
         reptext_ddic   LIKE dd03p-reptext,   " heading (ddic),(header) Analogous(相似) to the Data element main header

         rollname       LIKE dd03p-rollname,"f1帮助需参照的dataelement,在alv的显示界面将鼠标放到该字段的位置后按f1会弹出该字段的说明。另外,可以不指明字段的描述(如seltext_l、seltext_m、seltext_s),
        " 函数会自动将字段的描述显示为该参照的数据元素下面datatype两个属性在字段如果是金额或p小数(数量)类型时,需要对datatype此属性进行设置,否则,如果不设置时,在修改对应单元格内容时,
        "会自动将你所输入的数除100,即小数点提前两位;并且如果是数量类型,除了设置datatype外,inttype也需要进行设置,且为 c,具体实现请参考这里
         datatype       LIKE dd03p-datatype,
         inttype LIKE dd03p-inttype,
         intlen         LIKE dd03p-intlen,
         lowercase      LIKE dd03p-lowercase,

         ref_fieldname  LIKE dd03p-fieldname,"如需单元格显示F4输入帮助,则需要指定字段所参照的表名
         ref_tabname    LIKE dd03p-tabname,"如需单元格显示F4输入帮助,则需要指定字段所参照的表中的字段名
         roundfieldname TYPE slis_fieldname,
         roundtabname   TYPE slis_tabname,
         decimalsfieldname TYPE slis_fieldname,
         decimalstabname   TYPE slis_tabname,
         decimals_out(6)   TYPE c,     " decimals in write statement控制小数点的位数
         text_fieldname TYPE slis_fieldname,
         ddic_outputlen LIKE dd03p-outputlen,

         key_sel(1)     TYPE c,        " field not obligatory
         no_sum(1)      TYPE c,        " do not sum up
         sp_group(4)    TYPE c,        " group specification
         reprep(1)      TYPE c,        " selection for rep/rep
         input(1)       TYPE c,        " input
         edit(1)        TYPE c,        " internal use only是否可编辑
         hotspot(1)     TYPE c,        " hotspot设置字段内容下面是否有热点(有下划线,可点击,单击即可触发相应事件)

对 lvc_s_layo  结构,选择方式,自带选择不显示

ls_layout-sel_mode = 'A'.
  ls_layout-no_rowmark = 'X'.

附加:

如果没有SEL字段以及 EDIT的话,没有标准的选择方式

ls_fcat-edit       = &6.  

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP FUNCTION ALV 中添加状态栏下拉框按钮,可以使用函数模块 `REUSE_ALV_HIERSEQ_LIST_DISPLAY`。该函数模块可以在状态栏中添加下拉框按钮,用于切换不同的层次结构。 以下是添加下拉框按钮的代码示例: ``` REPORT ztest. DATA: it_list TYPE STANDARD TABLE OF sflight, wa_list TYPE sflight. DATA: it_fieldcat TYPE slis_t_fieldcat_alv. FIELD-SYMBOLS: <fs_fieldcat> TYPE slis_fieldcat_alv. * 初始化 ALV 数据 SELECT * FROM sflight INTO TABLE it_list. * 初始化字段目录 CLEAR: it_fieldcat. wa_fieldcat-fieldname = 'CARRID'. wa_fieldcat-ref_table = 'SCARR'. wa_fieldcat-ref_field = 'CARRID'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'CONNID'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'FLDATE'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'SEATSMAX'. APPEND wa_fieldcat TO it_fieldcat. wa_fieldcat-fieldname = 'SEATSOCC'. APPEND wa_fieldcat TO it_fieldcat. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = VALUE #( ( hierarchy_seq = 'CARRID' ) ) TABLES t_fieldcat = it_fieldcat t_outtab = it_list. * 定义层次结构下拉框的值集合 DATA: it_hier TYPE STANDARD TABLE OF lvc_s_layo WITH HEADER LINE. it_hier-fieldname = 'HIERARCHY_SEQ'. it_hier-seltext_l = '层次结构'. it_hier-selopt = 'O'. it_hier-no_out = 'X'. APPEND it_hier. it_hier-fieldname = 'CARRID'. it_hier-seltext_l = '按航空公司'. it_hier-selopt = 'C'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'FLDATE'. it_hier-seltext_l = '按航班日期'. it_hier-selopt = 'D'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'SEATSMAX'. it_hier-seltext_l = '按最大座位数'. it_hier-selopt = 'S'. it_hier-no_out = ' '. APPEND it_hier. it_hier-fieldname = 'SEATSOCC'. it_hier-seltext_l = '按已占用座位数'. it_hier-selopt = 'O'. it_hier-no_out = ' '. APPEND it_hier. * 设置层次结构下拉框 SET PF-STATUS 'PF_STATUS' EXCLUDING it_hier. * PF-STATUS 事件处理程序 MODULE pf_status OUTPUT. SET PF-STATUS 'PF_STATUS'. SET TITLEBAR 'TITLE'. ENDMODULE. * AT SELECTION-SCREEN 事件处理程序 AT SELECTION-SCREEN ON HIERARCHY_SEQ. LOOP AT it_hier ASSIGNING FIELD-SYMBOL(<fs_hier>). IF <fs_hier>-fieldname = 'HIERARCHY_SEQ'. CONTINUE. ENDIF. IF <fs_hier>-selopt = 'X'. CLEAR: it_list. SELECT * FROM sflight INTO TABLE it_list ORDER BY carrid. ELSE. CLEAR: it_list. SELECT * FROM sflight INTO TABLE it_list ORDER BY ( <fs_hier>-fieldname ). ENDIF. CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = VALUE #( ( hierarchy_seq = <fs_hier>-fieldname ) ) TABLES t_fieldcat = it_fieldcat t_hierarchy = it_list. ENDLOOP. ``` 在代码中,使用了 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块来显示 ALV 报表,并在 `is_layout` 参数中指定默认的层次结构。在 `pf_status` 事件处理程序中设置状态栏的标题,并在 `AT SELECTION-SCREEN` 事件处理程序中根据用户选择的层次结构重新查询数据并刷新 ALV 报表。 通过在 `it_hier` 中定义层次结构下拉框的值集合,并在 `SET PF-STATUS` 语句中排除该值集合,即可在状态栏中添加下拉框按钮。在 `AT SELECTION-SCREEN` 事件处理程序中,根据用户选择的层次结构重新查询数据,并使用 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块刷新 ALV 报表显示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值