SAP ABAP报表开发之SALV学习笔记(一) SAPABAP报表SALV报表开发
- 创建时间:2023-10-08 / 最新修改时间:2023-10-08 16:47:37
- 1632
- 0
转载请注明本文出处:http://limpire.cn/artifact/heap/sap/222.html
SAP ABAP报表开发之SALV学习笔记(一)
SALV 报表开发使用了面向对象。所以我们先了解一下SALV类的关系图.
上面3个类用来分别实现3种报表形式。我们主要学习CL_SALV_TABLE
这个类。
CL_SALV_TABLE
主要用来创建 表格形式的报表. 好比用OO SALV 和 Function ALV 一样.
使用 CL_SALV_TABLE
创建报表一般只需要用到2个方法.
- FACTORY 静态方法
- DISPLAY 实例方法
调用顺序如下
- 调用静态方法 FACTORY ,以Exporting方式返回实例对象,其参数用于定义报表样式.
- 调用返回实例方法 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( ).
效果如下:
很明显,工具栏是空的,表头也是根据这个底表的属性显示的,还有很多美中不足.
为报表添加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( ).
从代码中可以看出cl_salv_functions_list
是设置工具栏的一个对象.是通过 cl_salv_table
实例方法 get_functions
获得实例的.
既然这样我们是不是可以添加其他工具标签呢?
添加导出电子表格(Excel)功能
看看 cl_salv_functions_list
一些public方法.
这些方法大多数只需要传入一个参数,这个参数默认是TRUE. 调用后则报表上就会添加响应的功能.
我们以电子表格为例.
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( ).
效果如下:
SALV设置列属性,解决表头显示问题
根据上一小节,我们可以发现,很多细节上的配置都是调用主类 cl_salv_table
下的get*xxx
方法获得另外一个对象,然后在通过该对象的方法设置成我们想要的效果.
先看看这透明表的定义.
从上图中,我们可以看出,透明表的几个字段名字为空,所以导致SALV不能带列名字出来(下图).
现在根据我们的思路给代码再添加一段
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( ).
运行效果如下:
通过我们调用相关类的方法,标题设置出来了.
本章暂时先写到这里,下一章将更加详细的了解下.