SAP ABAP报表开发之SALV学习笔记(一) SAPABAP报表SALV报表开发
  • 创建时间:2023-10-08 / 最新修改时间:2023-10-08 16:47:37
  • 1447
  • 0
转载请注明本文出处:http://limpire.cn/artifact/heap/sap/222.html


SAP ABAP报表开发之SALV学习笔记(一)

SALV 报表开发使用了面向对象。所以我们先了解一下SALV类的关系图.

image-20231008164039722

上面3个类用来分别实现3种报表形式。我们主要学习CL_SALV_TABLE这个类。

CL_SALV_TABLE 主要用来创建 表格形式的报表. 好比用OO SALV 和 Function ALV 一样.

使用 CL_SALV_TABLE 创建报表一般只需要用到2个方法.

  • FACTORY 静态方法

image-20231008142951045

  • DISPLAY 实例方法

image-20231008143018104

调用顺序如下

  1. 调用静态方法 FACTORY ,以Exporting方式返回实例对象,其参数用于定义报表样式.
  2. 调用返回实例方法 DISPLAY 显示报表.

几行代码初试牛刀

REPORT z_salv_test.
DATA lt_data TYPE TABLE OF zsqlmodels.
DATA lr_salv TYPE REF TO cl_salv_table.


select * from zsqlmodels into CORRESPONDING FIELDS OF table lt_data.


CALL METHOD cl_salv_table=>factory
*  EXPORTING
*    list_display   = if_salv_c_bool_sap=>false
*    r_container    =
*    container_name =
  IMPORTING
    r_salv_table   = lr_salv "返回的实例
  CHANGING
    t_table = lt_data . "要显示的内表
*CATCH cx_salv_msg.

lr_salv->display(  ).

效果如下:

image-20231008145110714

很明显,工具栏是空的,表头也是根据这个底表的属性显示的,还有很多美中不足.

为报表添加ALV标准工具栏

先看代码和效果:

REPORT z_salv_test.
DATA lt_data TYPE TABLE OF zsqlmodels.
DATA lr_salv TYPE REF TO cl_salv_table.


select * from zsqlmodels into CORRESPONDING FIELDS OF table lt_data.


CALL METHOD cl_salv_table=>factory
*  EXPORTING
*    list_display   = if_salv_c_bool_sap=>true
*    r_container    =
*    container_name =
  IMPORTING
    r_salv_table   = lr_salv
  CHANGING
    t_table = lt_data .
*CATCH cx_salv_msg.




** 添加ALV标准工具栏

DATA lr_func_bar type ref to cl_salv_functions_list.
lr_func_bar = lr_salv->get_functions(  ).
lr_func_bar->set_default(  ).



" 显示报表
lr_salv->display(  ).

image-20231008150255749

从代码中可以看出cl_salv_functions_list 是设置工具栏的一个对象.是通过 cl_salv_table 实例方法 get_functions 获得实例的.

既然这样我们是不是可以添加其他工具标签呢?

添加导出电子表格(Excel)功能

看看 cl_salv_functions_list 一些public方法.

image-20231008152950564

这些方法大多数只需要传入一个参数,这个参数默认是TRUE. 调用后则报表上就会添加响应的功能.

image-20231008153336500

我们以电子表格为例.

REPORT z_salv_test.
DATA lt_data TYPE TABLE OF zsqlmodels.
DATA lr_salv TYPE REF TO cl_salv_table.


SELECT * FROM zsqlmodels INTO CORRESPONDING FIELDS OF TABLE lt_data.


CALL METHOD cl_salv_table=>factory
*  EXPORTING
*    list_display   = if_salv_c_bool_sap=>true
*    r_container    =
*    container_name =
  IMPORTING
    r_salv_table = lr_salv
  CHANGING
    t_table      = lt_data.
*CATCH cx_salv_msg.




** 添加ALV标准工具栏

DATA lr_func_bar TYPE REF TO cl_salv_functions_list.
lr_func_bar = lr_salv->get_functions(  ).
lr_func_bar->SET_default(  ).
lr_func_bar->SET_EXPORT_SPREADSHEET( ). ""添加右键 电子表格 功能 (其实就是导出excel功能)




" 显示报表
lr_salv->display(  ).

效果如下:

image-20231008152725379

image-20231008152753737

SALV设置列属性,解决表头显示问题

根据上一小节,我们可以发现,很多细节上的配置都是调用主类 cl_salv_table 下的get*xxx 方法获得另外一个对象,然后在通过该对象的方法设置成我们想要的效果.

先看看这透明表的定义.

image-20231008160621008

从上图中,我们可以看出,透明表的几个字段名字为空,所以导致SALV不能带列名字出来(下图).

image-20231008150255749

现在根据我们的思路给代码再添加一段

REPORT z_salv_test.
DATA lt_data TYPE TABLE OF zsqlmodels.
DATA lr_salv TYPE REF TO cl_salv_table.


SELECT * FROM zsqlmodels INTO CORRESPONDING FIELDS OF TABLE lt_data.


CALL METHOD cl_salv_table=>factory
*  EXPORTING
*    list_display   = if_salv_c_bool_sap=>true
*    r_container    =
*    container_name =
  IMPORTING
    r_salv_table = lr_salv
  CHANGING
    t_table      = lt_data.
*CATCH cx_salv_msg.




** 添加ALV标准工具栏

DATA lr_func_bar TYPE REF TO cl_salv_functions_list.
lr_func_bar = lr_salv->get_functions(  ).
lr_func_bar->SET_default(  ).
lr_func_bar->set_export_spreadsheet( ). ""添加右键 电子表格 功能 (其实就是导出excel功能)



** 设置字段文本
DATA lc_col_tables TYPE REF TO cl_salv_columns_table .
DATA lc_col TYPE REF TO cl_salv_column .

lc_col_tables = lr_salv->get_columns(  ). "获取cl_salv_columns_table对象实例.

lc_col = lc_col_tables->get_column( `SQL_STATEMENT` ). "根据列名称(内表字段名)获取cl_salv_column具体列实例.
lc_col->set_short_text( `SQL语句` ).


lc_col = lc_col_tables->get_column( `FUNC_NAME` ). "根据列名称(内表字段名)获取cl_salv_column具体列实例.
lc_col->set_short_text( `功能名字` ).

lc_col = lc_col_tables->get_column( `CREATE_DATE` ). "根据列名称(内表字段名)获取cl_salv_column具体列实例.
lc_col->set_short_text( `创建日期` ).

lc_col = lc_col_tables->get_column( `CREATE_TIME` ). "根据列名称(内表字段名)获取cl_salv_column具体列实例.
lc_col->set_short_text( `创建时间` ).

lc_col = lc_col_tables->get_column( `MARK` ). "根据列名称(内表字段名)获取cl_salv_column具体列实例.
lc_col->set_short_text( `备注` ).

" 显示报表
lr_salv->display(  ).

运行效果如下:

image-20231008161430765

通过我们调用相关类的方法,标题设置出来了.

本章暂时先写到这里,下一章将更加详细的了解下.


请说:

昵称 Email

评论:

吃不起海鲜就买海鲜味的酱油

回车换行很爽,代表着一个段落或者一个小结的完成,打印出来之后就是一个可触摸的成品.围着这种意境,一起来技术性打酱油.

文章列表
分类目录
友情链接