ALV报表——基础(一)

目录

    2.1、实现步骤

    2.2、代码示例

      3.1、Layout相关属性

      3.2、Fieldcat相关属性 

      3.3、ALV输出函数

一、ALV简介

The ALV Grid Control (ALV = SAP List Viewer)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允许你可以在大型的应用程序中使用。在SAP的开发项目中,ALV GRID也可以作为修改和创建数据的一种工具。它包括3大部分,工具栏,标题,用于显示数据的网格控制器.如果有必要,用户可以隐藏标题和工具栏。

 

二、程序实现

2.1、实现步骤

①定义ALV所需要用到的类型池:TYPE-POOLS:SLIS.

②定义ALV所要显示的数据对应的内表数据类型及内表数据对象

③定义一些显示ALV时所需要使用的变量

④定义选择屏幕

⑤声明各个选择屏幕事件块

2.2、代码示例

 

*Report  ZMMRTEST
REPORT ZMMRTEST.

*定义ALV所需要用到的类型池
TYPE-POOLS SLIS.

*****************************TABLES
TABLES:MARD.

*****************************Data Definitions
*定义ALV所要显示的数据对应的内表数据类型及内表数据对象
DATA: BEGIN OF  GT_DATA OCCURS 0,          "一般物料資料
             MATNR LIKE MARD-MATNR ,       "物料號碼
             WERKS LIKE MARD-WERKS,        "工厂
             LGORT LIKE MARD-LGORT,
             LABST LIKE MARD-LABST,        "未限制使用的已估價庫存
END OF GT_DATA.

*定义一些显示ALV时所需要使用的变量
DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
          GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
"定义FIELDCAT

*****************************Selection Screen
*定义选择屏幕
PARAMETERS: P_WERKS LIKE MARD-WERKS DEFAULT '2000' OBLIGATORY.
SELECT-OPTIONS: S_MATNR FOR MARD-MATNR.

*****************************Main Process
*声明各个选择屏幕事件块
START-OF-SELECTION.

     PERFORM GET_DATA.
     PERFORM DISPLAY_DATA.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA .

     SELECT MATNR WERKS LGORT LABST
                INTO CORRESPONDING FIELDS OF TABLE GT_DATA
                FROM MARD
                WHERE MATNR IN S_MATNR.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
FORM DISPLAY_DATA.

*將ITAB欄位轉換為ALV欄位(欄位說明作為欄位標題)
DATA: L_REPID TYPE SY-REPID,
            L_INCLNAME TYPE TRDIR-NAME,
            L_IDX LIKE SY-TABIX.
  CLEAR: GT_FIELDCAT[],WA_FIELDCAT.
  L_REPID = L_INCLNAME = SY-CPROG.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME         = L_REPID
      I_INTERNAL_TABNAME     = 'GT_DATA'
      I_INCLNAME             = L_INCLNAME
    CHANGING
      CT_FIELDCAT            = GT_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT                 = GS_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT[]
*      I_CALLBACK_PF_STATUS_SET     = 'ALV_PF_STATUS'   " 触发事件调用子程序
*      I_CALLBACK_USER_COMMAND  = 'ALV_USER_COMMAND'   " 鼠标事件操作子程序
      I_SAVE                   = 'A'
    TABLES
      T_OUTTAB            =  GT_DATA
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " ALV_SHOW

 

 运行效果:

 

三、Layout、Fieldcat相关属性

3.1、Layout相关属性:主要用于设定 ALV 的输出格式,为 ALV 输出的可选项

①公共部分

字段名称描述输入值备注
 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  
 no_author (1) 设置是否需要系统标准权限检查 X-不需要,space-需要 

②ALV菜单栏

字段名称描述输入值备注
 def_status (1) 默认菜单状态 A显示,space不显示 'A' – 为显示所有标准菜单
 item_text (20) 菜单按钮文本  
 countfname (1)  lvc_fname 


③显示选项

字段名称描述输入值备注
 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-显示 

 

④红路灯显示异常

字段名称描述输入值备注
 lights_fieldname 输出内表中定义的字段名,该字段用来显示状态灯  1:red,2:yellow,3:green  
 lights_tabname 输出字段的参考内表名称  
 lights_rollname 数据元素的名称,在灯字段按F1触发  
 lights_condense 对输出的内表分类汇总的时候,小计行显示状态灯 x 

 

⑤汇总合计

字段名称描述输入值备注
 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) 总计和小计行,第一列显示的文本  

 

⑥交互

字段名称描述输入值备注
 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有效

 

⑦明细窗口

字段名称描述输入值备注
 detail_popup (1) 行项目明细弹窗形式 X-显示,space-不显示 对list_alv有效
 detail_initial_lines(1) 明细中同时显示初始化行 X-同时显示,space-不显示 
 detail_titlebar 明细窗口标题文本 sy-title 

 

⑧显示变式

字段名称描述输入值备注
 header_text 表头按钮  
 default_item (1) 列表明细作为默认值 X-激活,space-不激活 

 

⑨颜色

字段名称描述输入值备注
 info_fieldname用于设置ALV输出报表每一行的颜色,其参数为输出内表的栏位名称 C000~C999倘若其数据输出内表名为LT_OUT,则需要在改内表增加一个栏位“COLOR”,并为内表每行赋值,LT_OUT-COLOR = ‘C500’
 coltab_fieldname 颜色值  

 

⑩其他

字段名称描述输入值备注
 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、Fieldcat相关属性:主要用于ALV的结构定义,包括具体的栏位及名称、类型、格式等属性,为 ALV 输出的必选项

 

字段名称描述输入值备注
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)作为复选框输出(R)Right (L)Left (C)Center 
just(1)定义栏位对齐方式  
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)设置栏位是否有热点(热点栏位显示有下划线)  

 

 3.3、ALV输出函数使用ALV输出,可以直接参考数据字典中的现有透明表,也可以自定义Fieldcat来输出字段;

如若使用数据字典中的透明表或视图时,需要调用REUSE_ALV_FIELDCATALOG_MERGE函数来对相应的Fieldcat 进行匹配;

另外,必须保证该结构或内表中的每个字段都参考数据字典中的Data Element,否则无法获取字段的相关信息.

 

四、自定义FIELDCAT参数控制ALV输出

 

*Report  ZMMRTEST
REPORT ZMMRTEST.

*定义ALV所需要用到的类型池
TYPE-POOLS SLIS.

*****************************TABLES
TABLES:MARD.

*****************************Data Definitions
*定义ALV所要显示的数据对应的内表数据类型及内表数据对象
DATA: BEGIN OF  GT_DATA OCCURS 0,          "一般物料資料
             MATNR LIKE MARD-MATNR ,       "物料號碼
             WERKS LIKE MARD-WERKS,        "工厂
             LGORT LIKE MARD-LGORT,
             LABST LIKE MARD-LABST,        "未限制使用的已估價庫存
END OF GT_DATA.

*定义一些显示ALV时所需要使用的变量
DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV,
          GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
"定义FIELDCAT

*****************************Selection Screen
*定义选择屏幕
PARAMETERS: P_WERKS LIKE MARD-WERKS DEFAULT '2000' OBLIGATORY.
SELECT-OPTIONS: S_MATNR FOR MARD-MATNR.

*****************************Main Process
*声明各个选择屏幕事件块
START-OF-SELECTION.

     PERFORM GET_DATA.
     PERFORM DISPLAY_DATA.

END-OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
FORM GET_DATA .

     SELECT MATNR WERKS LGORT LABST
                INTO CORRESPONDING FIELDS OF TABLE GT_DATA
                FROM MARD
                WHERE MATNR IN S_MATNR.

ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  ALV_SHOW
*&---------------------------------------------------------------------*
FORM DISPLAY_DATA.

*將ITAB欄位轉換為ALV欄位(欄位說明作為欄位標題)
DATA: L_REPID TYPE SY-REPID,
            L_INCLNAME TYPE TRDIR-NAME,
            L_IDX LIKE SY-TABIX.
  CLEAR: GT_FIELDCAT[],WA_FIELDCAT.
  L_REPID = L_INCLNAME = SY-CPROG.
  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME         = L_REPID
      I_INTERNAL_TABNAME     = 'GT_DATA'
      I_INCLNAME             = L_INCLNAME
    CHANGING
      CT_FIELDCAT            = GT_FIELDCAT
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2
      OTHERS                 = 3.

  LOOP AT GT_FIELDCAT INTO WA_FIELDCAT.
    L_IDX = SY-TABIX.
    CASE WA_FIELDCAT-FIELDNAME. "对应内表的字段名
      WHEN 'LGORT'.
        WA_FIELDCAT-SELTEXT_S = WA_FIELDCAT-SELTEXT_M =
        WA_FIELDCAT-SELTEXT_L = '仓库'. "输出列文本
        WA_FIELDCAT-DDICTXT = 'S'.
    ENDCASE.
    CLEAR WA_FIELDCAT-KEY.
    MODIFY GT_FIELDCAT FROM WA_FIELDCAT INDEX L_IDX.
  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT                 = GS_LAYOUT
      IT_FIELDCAT              = GT_FIELDCAT[]
*      I_CALLBACK_PF_STATUS_SET     = 'ALV_PF_STATUS'   " 触发事件调用子程序
*      I_CALLBACK_USER_COMMAND  = 'ALV_USER_COMMAND'   " 鼠标事件操作子程序
      I_SAVE                   = 'A'
    TABLES
      T_OUTTAB            =  GT_DATA
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

ENDFORM.                    " ALV_SHOW

 

 运行效果:

 

 

转载于:https://www.cnblogs.com/StephenAmell/p/8084927.html

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值