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.

*****************************TABLES
TABLES:marc.

*****************************Data Definitions
*定义ALV所要显示的数据对应的内表数据类型及内表数据对象
TYPES: BEGIN OF  ty_data,
  matnr LIKE mara-matnr,       "物料號碼
  maktx LIKE makt-maktx,        "物料说明
  groes LIKE mara-groes,       "规格
END OF ty_data.

DATA: gt_data TYPE TABLE OF ty_data,
      gt_makt LIKE TABLE OF makt,
      wa_data LIKE LINE OF gt_data,
      wa_makt LIKE LINE OF gt_makt.

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

*定义ALV所需要用到的类型池
TYPE-POOLS slis.
"定义和LAYOUT和FIELDCAT
DATA: gs_layout TYPE slis_layout_alv,
          gt_fieldcat TYPE slis_t_fieldcat_alv,
          wa_fieldcat TYPE  slis_fieldcat_alv.


*****************************Selection Screen
*定义选择屏幕
PARAMETERS: p_werks LIKE marc-werks DEFAULT '2000' OBLIGATORY.
SELECT-OPTIONS: s_matnr FOR marc-matnr.

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

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

  SELECT marc~matnr mara~groes
            INTO CORRESPONDING FIELDS OF TABLE gt_data
            FROM marc
            INNER JOIN mara ON marc~matnr EQ mara~matnr
            WHERE marc~matnr IN s_matnr
            AND marc~werks EQ p_werks.

  SELECT * INTO TABLE gt_makt
            FROM makt
            WHERE matnr IN s_matnr
            AND spras = sy-langu.

  SORT: gt_data BY matnr,
    gt_makt BY matnr.

  LOOP AT gt_data INTO wa_data.

    READ TABLE gt_makt INTO wa_makt WITH KEY matnr = wa_data-matnr
                BINARY SEARCH.
    IF sy-subrc = 0.
      wa_data-maktx = wa_makt-maktx.
    ENDIF.

    MODIFY gt_data FROM wa_data.
  ENDLOOP.
ENDFORM.                    " GET_DATA

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
FORM display_data.

  "栏位最适宽度
  gs_layout-colwidth_optimize = 'X'.

  PERFORM set_fieldcat.

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

*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT
*&---------------------------------------------------------------------*
FORM set_fieldcat.

  DEFINE fieldcat.
    wa_fieldcat-fieldname = &1.  "对应内表字段名
    wa_fieldcat-seltext_l = &2.       "输出列文本
    APPEND wa_fieldcat TO gt_fieldcat.CLEAR wa_fieldcat.
  END-OF-DEFINITION.

  fieldcat 'MATNR' '物料'.
  fieldcat 'MAKTX' '物料说明'.
  fieldcat 'GROES' '规格'.

ENDFORM.                   " SET_FIELDCAT
View Code

运行效果:

三、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 字段名称    
tabname fieldname字段对应的内表名称    
currency 货币单位    
cfieldname 当前输出内表中的货币单位字段的字段名称    
ctabname Cfieldname字段值对应的内表名称    
ifieldname      
quantity 计量单位    
qfieldname 参考计量单位的字段名称    
qtabname Qfieldname  对应的输出内表名    
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) 设置栏位是否有热点(热点栏位显示有下划线)    

 

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

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

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

木叶飞舞之处,火亦生生不息
原文地址:https://www.cnblogs.com/StephenAmell/p/8084927.html