ALV TOP_OF_PAGE-页头信息

目录

前言

实战

实战开发


前言

        在ABAP ALV中,TOP_OF_PAGE是一个事件标识符,用于描述在报表每一页顶部打印或显示内容的情况。当ALV在打印或显示数据时,每翻到新的一页,系统就会触发TOP_OF_PAGE事件,这时你可以定义一个处理程序(通常是FORM或CLASS的方法)来控制在新页顶部展示哪些内容,比如公司logo、报表标题、页码、日期等。

实战

        两种实现方式:

        第一种:直接通过REUSE_ALV_GRID_DISPLAY函数的i_callback_top_of_page来回调Form;

        第二种:通过REUSE_ALV_GRID_DISPLAY函数的it_events参数接口,向事件内表中Append事件top_of_page与对应的Form;

I_CALLBACK_TOP_OF_PAGE Form 与 REUSE_ALV_COMMENTARY_WRITE 函数配合使用。 

REUSE_ALV_COMMENTARY_WRITE 函数包括一个必须参数,三个可选参数:

        1、IT_LIST_COMMENTARY(必须):一个类型为 SLIS_T_LISTHEADER 的内表;
                TYPES: BEGIN OF slis_listheader,
                         typ(1)  TYPE C,   " H = Header, S = Selection, A = Action
                         key(20) TYPE C,
                         info    TYPE slis_entry,
                   END OF slis_listheader.

        2、I_LOGO(可选):图片/Logo 的 Object ID

        3、I_END_OF_LIST_GRID(可选):用于页脚的信息

        4、I_ALV_FORM(可选):是否用于 ALV 的FORM中,默认为:Space

 typ的取值为:"H=Header, S=Selection, A=Action

  • H:表示输出内容为列表头。通常只有一行(但可以有多行),此时KEY不会输出,只有INFO值才会输出,字体会加粗加大,左对齐。
  • S:表示输出内容为字段型说明,即针对某个词进行说明,分两列(KEY和INFO)输出。通常有多个,且每行中只允许一对。此时KEY与INFO都会输出,Key字段会加粗,INFO正常显示,均左对齐输出。
  • A:表示输出内容为提示说明性文字。通常只有一行(但可以有多行),此时KEY不会输出,只有INFO值才会输出,字粗为斜体左对齐输出。

注意:同时有 H、S、A时,会按照 H、S、A的先后顺序输出(而不管向内表APEPEND的顺序),且H、S、A之间会使用空行分隔,但它们各自内部(类型相同的行)之间不会输出空行。

实战开发

展示效果:

完整代码:

TYPE-POOLS:slis.

DATA:gt_fieldcat TYPE slis_t_fieldcat_alv,
     gs_fieldcat TYPE slis_fieldcat_alv,
     gs_layout   TYPE slis_layout_alv,
     gv_repid    TYPE sy-repid.

DATA:gt_spfli LIKE STANDARD TABLE OF spfli WITH HEADER LINE.

INITIALIZATION.
  gv_repid = sy-repid.

*屏幕开始事件
START-OF-SELECTION.
  PERFORM f_getdata.
  PERFORM f_catalog.
  PERFORM f_alvshow.

FORM f_getdata.
  SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli.
ENDFORM.

FORM f_catalog.
*fieldcat属性
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = gv_repid
      i_structure_name       = 'SPFLI'
    CHANGING
      ct_fieldcat            = gt_fieldcat "导出gt_fieldcat内表数据
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR gs_fieldcat.
*"对gt_fieldcat属性的修改
  READ TABLE gt_fieldcat INTO gs_fieldcat INDEX 2. "将第二列设为热点显示
  gs_fieldcat-hotspot = 'X'.
  MODIFY gt_fieldcat  FROM gs_fieldcat INDEX 2.

*layout属性
  gs_layout-zebra = 'X'."斑马线显示
  gs_layout-colwidth_optimize = 'X'."列宽度最优化显示
ENDFORM.

FORM f_alvshow.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = gv_repid
      i_grid_title             = 'ALV REPORT TEST' "ALV显示标题
      is_layout                = gs_layout
      it_fieldcat              = gt_fieldcat
      i_callback_top_of_page   = 'F_TOP_OF_PAGE'
    TABLES
      t_outtab                 = gt_spfli
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.


FORM f_top_of_page.
  DATA: i_header  TYPE  slis_t_listheader,
          wa_header TYPE slis_listheader.
* 定义登录用户的描述
  DATA: l_name     TYPE string ,
        name_first LIKE adrp-name_first ,
        name_last  LIKE adrp-name_last .
* 定义登录日期
  DATA: l_date TYPE string .
* 得到登录用户的描述
  SELECT SINGLE
    adrp~name_first
    adrp~name_last
    INTO (name_first,name_last)
    FROM adrp
    INNER JOIN usr21 ON adrp~persnumber = usr21~persnumber
    WHERE usr21~bname = sy-uname .
  IF sy-subrc = 0 .
    CONCATENATE name_last name_first INTO l_name .
  ELSE .
    l_name = sy-uname .
  ENDIF.
  CLEAR name_first.
  CLEAR name_last.

  CONCATENATE sy-datum+0(4) '.'
              sy-datum+4(2) '.'
              sy-datum+6(2) INTO l_date.

  wa_header-typ  = 'H'.
  wa_header-info = 'ALV DEMO' .
  APPEND wa_header TO i_header .
  CLEAR  wa_header .

  wa_header-typ  = 'S'.
  wa_header-key  =  '制表日期:' .
  wa_header-info = l_date .
  APPEND wa_header TO i_header .
  CLEAR  wa_header .
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = i_header
      i_logo             = 'ENJOYSAP_LOGO'  "OAOR 中的Object Key
      i_alv_form         = 'X'.
ENDFORM.                  "frm_top_of_page

 

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_亮亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值