实现 ALV 页眉页脚

作者:斌将军 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

**1**

**文档介绍**

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

在ALV中,可以通过增加页眉和页脚,丰富ALV的展示。除了基本的页眉和页脚,还可以通过插入HTML代码的方式展示更加丰富的页眉和页脚,本篇文章将介绍ALV和OOALV中页眉页脚的使用。

**2**

**ALV页眉页脚**

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

效果如下

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

**2.1**

**显示的内容**

页眉和页脚,都通过函数REUSE_ALV_COMMENTARY_WRITE显示内容。

页眉

"--------------------@斌将军--------------------FORM FRM_TOP_OF_PAGE .

DATA:lt_listheader TYPE slis_t_listheader, ls_listheader TYPE slis_listheader. CLEAR:ls_listheader. ls_listheader-typ = 'H'."标题 ls_listheader-info = '页眉'. APPEND ls_listheader TO lt_listheader. CLEAR ls_listheader. ls_listheader-typ = 'S'. ls_listheader-key = '编制单位:'. ls_listheader-info = '1100'. APPEND ls_listheader TO lt_listheader. CLEAR ls_listheader. ls_listheader-typ = 'S'. ls_listheader-info = '1200'. APPEND ls_listheader TO lt_listheader. CLEAR ls_listheader. ls_listheader-typ = 'A'. ls_listheader-info = '单位:元'. APPEND ls_listheader TO lt_listheader. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = lt_listheader "显示的数据 i_logo = 'ENJOYSAP_LOGO' "显示的图片LOGO* I_END_OF_LIST_GRID =* I_ALV_FORM = .ENDFORM. " FRM_TOP_OF_PAGE"--------------------@斌将军--------------------

页脚

"--------------------@斌将军--------------------FORM FRM_END_OF_LIST .

DATA:lt_listheader TYPE slis_t_listheader, ls_listheader TYPE slis_listheader. CLEAR:ls_listheader. ls_listheader-typ = 'H'. ls_listheader-info = '页脚'. APPEND ls_listheader TO lt_listheader. CLEAR ls_listheader. ls_listheader-typ = 'S'. ls_listheader-key = '作者:'. ls_listheader-info = '斌将军'. APPEND ls_listheader TO lt_listheader. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = lt_listheader i_logo = 'ENJOYSAP_LOGO'* I_END_OF_LIST_GRID =* I_ALV_FORM = .ENDFORM. " FRM_END_OF_LIST"--------------------@斌将军--------------------

其中的LOGO,可以通过事务代码OAER,输入对应信息

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

找到对应LOGO

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

**2.2**

**ALV事件方式实现**

实现页眉和页脚,都可以通过注册ALV事件EVENT,调用对应的子例程,显示对应内容

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

事件代码

"--------------------@斌将军--------------------

DATA:gt_event TYPE slis_t_event."事件
FORM frm_get_event. DATA:lv_frm_top_of_page TYPE slis_formname VALUE 'FRM_TOP_OF_PAGE',"页眉子例程 lv_frm_end_of_list TYPE slis_formname VALUE 'FRM_END_OF_LIST',"页脚子例程 ls_events TYPE slis_alv_event.

"获取事件 CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = gt_event EXCEPTIONS list_type_wrong = 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.

"查找TOP_OF_PAGE事件,并将回调子例程传输给FORM READ TABLE gt_event ASSIGNING FIELD-SYMBOL() WITH KEY name = slis_ev_top_of_page. IF sy-subrc = 0. -form = lv_frm_top_of_page. ELSE. CLEAR:ls_events. ls_events-form = lv_frm_top_of_page. ls_events-name = lv_frm_top_of_page. APPEND ls_events TO gt_event. ENDIF. "查找END_OF_LIST事件,并将回调子例程传输给FORM READ TABLE gt_event ASSIGNINGWITH KEY name = slis_ev_end_of_list. IF sy-subrc = 0. -form = lv_frm_end_of_list. ELSE. CLEAR:ls_events. ls_events-form = lv_frm_end_of_list. ls_events-name = lv_frm_end_of_list. APPEND ls_events TO gt_event. ENDIF. ENDFORM. " FRM_GET_EVENT"--------------------@斌将军--------------------

在调用ALV时,传入EVENT

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

**2.3**

**ALV参数实现页眉**

如果单独实现页眉效果,就不需要这么复杂,可以直接将页眉子例程传入ALV函数REUSE_ALV_GRID_DISPLAY_LVC的I_CALLBACK_TOP_OF_PAGE参数中,调用子例程

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

**3**

**ALV展示HTML页眉页脚**

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

效果如下

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

ALV

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

页眉和页脚的子例程代码类似

"--------------------@斌将军--------------------FORM frm_html_top_of_page USING document TYPE REF TO cl_dd_document.

DATA:lv_pos    TYPE i,       lv_text   TYPE sdydo_text_element,       lv_buffer TYPE string. lv_buffer = ' && '页眉' && ''. CALL METHOD document->html_insert    EXPORTING      contents = lv_buffer    CHANGING      position = lv_pos. lv_text = '标题'.  CALL METHOD document->add_text    EXPORTING      text      = lv_text      sap_style = 'HEADING'.

"插入两行空行  CALL METHOD document->new_line.

CALL METHOD document->add_icon    EXPORTING      sap_icon = 'ICON_CUSTOMER'. "STRONG是加粗  lv_text = '用户名:'.  CALL METHOD document->add_text    EXPORTING      text         = lv_text      sap_emphasis = 'Strong'.

"间隔  CALL METHOD document->add_gap    EXPORTING      width = 2.

lv_text = '斌将军'.  CALL METHOD document->add_text    EXPORTING      text          = lv_text      sap_fontsize  = cl_dd_document=>large      sap_fontstyle = cl_dd_document=>serif      sap_emphasis  = cl_dd_document=>emphasis.

"间隔  CALL METHOD document->add_gap    EXPORTING      width = 10.

CALL METHOD document->add_icon    EXPORTING      sap_icon = 'ICON_DATE'. lv_text = '日期:'.  CALL METHOD document->add_text    EXPORTING      text         = lv_text      sap_emphasis = 'Strong'. CALL METHOD document->add_gap    EXPORTING      width = 2. lv_text = '20240420'.  CALL METHOD document->add_text    EXPORTING      text      = lv_text      sap_style = 'Key'. CALL METHOD document->add_gap    EXPORTING      width = 10. CALL METHOD document->add_icon    EXPORTING      sap_icon = 'ICON_INFORMATION'. lv_text = '链接:'.  CALL METHOD document->add_text    EXPORTING      text         = lv_text      sap_emphasis = 'Strong'. CALL METHOD document->add_link    EXPORTING      url     = 'http://www.baidu.com'      tooltip = '百度' "小手指的提示信息      text    = 'Baidu'.

"横线  CALL METHOD document->underline.

ENDFORM.                    "HTML_TOP_OF_PAGE"--------------------@斌将军--------------------

**4**

**OOALV页眉页脚**

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

效果如下

实现 ALV 页眉页脚 - 封面图
实现 ALV 页眉页脚 - 封面图

首先,如上图将界面分为上、中、下三部分。

> 关于屏幕分割,也可以参考《OOALV 分割屏幕 》

>

> 斌将军,公众号:斌将军 [ OOALV 分割屏幕

> ](https://mp.weixin.qq.com/s?__biz=Mzg5OTg3ODg2MQ==&mid=2247484229&idx=3&sn=53597e1b375a204fc0e4b00e87dbaaff&chksm=c04dd9e7f73a50f107e9493946a5f65ab232067af9a9251ed49bc344b3a420ef4882f9cf8738#rd)

"--------------------@斌将军--------------------*&---------------------------------------------------------------------**& Form FRM_CREATE_CONTAINER_9000*& 创建容器*&---------------------------------------------------------------------*FORM frm_create_container_9000.

"创建 容器 CREATE OBJECT g_container_9000 EXPORTING repid = sy-repid dynnr = '

...

斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「实现ALV页眉页脚.md」整理生成,仅用于内部技术分享与学习交流。