abap面向对象的报表
2016-02-05 10:02
176 查看
SE38建立程序
源代码:
REPORT YTEST003T.
*变量定义
TYPES ty_spfli TYPE spfli OCCURS 0.
DATA: gr_table TYPE REF TO cl_salv_table.
*选择屏幕设计
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
PARAMETERS: p_full RADIOBUTTON GROUP rg,
p_list RADIOBUTTON GROUP rg,
p_grid RADIOBUTTON GROUP rg.
SELECTION-SCREEN END OF BLOCK blk.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
* ALV操作类(定义)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS: getdata "取得要显示的数据
RETURNING value(lt_tab) TYPE ty_spfli,
alv_full "全屏Grid列表处理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
alv_list "普通List处理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
alv_grid "在自定义屏幕上显示的列表
IMPORTING value(lt_tab) TYPE ty_spfli,
main. "主方法
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* ALV操作类(实现)
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要显示的数据
METHOD getdata.
SELECT * INTO TABLE lt_tab FROM spfli.
ENDMETHOD. "getdata
*输出全屏网格列表的方法
METHOD alv_full.
"创建实例
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示列表
gr_table->display( ).
ENDMETHOD. "alv_full
*输出全屏普通列表的方法
METHOD alv_list.
"创建实例
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = 'X'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示列表
gr_table->display( ).
ENDMETHOD. "alv_list
*输出在自定义屏幕上的列表
METHOD alv_grid.
CALL SCREEN '0100'.
ENDMETHOD. "alv_grid
*主方法,整合数据
METHOD main.
DATA: lt_tab TYPE TABLE OF spfli.
"取得要显示的数据
lt_tab = me->getdata( ).
"判断选择屏幕的选择条件调用不同的方法
CASE 'X'.
WHEN p_full.
me->alv_full( lt_tab ).
WHEN p_list.
me->alv_list( lt_tab ).
WHEN p_grid.
me->alv_grid( lt_tab ).
ENDCASE.
ENDMETHOD. "main
ENDCLASS. "lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* MODULE status_0100
*----------------------------------------------------------------------*
* PBO 屏幕输出前执行
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
"定义变量
DATA: lr_container TYPE REF TO cl_gui_custom_container,
lr_alv2 TYPE REF TO lcl_alv,
lt_tab TYPE TABLE OF spfli.
"创建容器实例
IF cl_salv_table=>is_offline( ) = ''.
CREATE OBJECT lr_container
EXPORTING
container_name = 'CONTAINER'.
ENDIF.
"创建类LCL_ALV实例
CREATE OBJECT lr_alv2.
"取得列表数据
lt_tab = lr_alv2->getdata( ).
"创建ALV实例
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = lr_container
container_name = 'CONTAINER'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示ALV列表
gr_table->display( ).
"释放内存
FREE lt_tab.
ENDMODULE. "status_0100
*----------------------------------------------------------------------*
* MODULE user_command_0100
*----------------------------------------------------------------------*
* PAI 屏幕输出后的动作
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ENDMODULE. "user_command_0100
*报表执行
START-OF-SELECTION.
DATA lr_alv TYPE REF TO lcl_alv.
CREATE OBJECT lr_alv.
lr_alv->main( ).
这里 CALL SCREEN '0100'.
逻辑流
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
进入格式,创建一个容器,名称是CONTAINER。
源代码:
REPORT YTEST003T.
*变量定义
TYPES ty_spfli TYPE spfli OCCURS 0.
DATA: gr_table TYPE REF TO cl_salv_table.
*选择屏幕设计
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
PARAMETERS: p_full RADIOBUTTON GROUP rg,
p_list RADIOBUTTON GROUP rg,
p_grid RADIOBUTTON GROUP rg.
SELECTION-SCREEN END OF BLOCK blk.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
* ALV操作类(定义)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS: getdata "取得要显示的数据
RETURNING value(lt_tab) TYPE ty_spfli,
alv_full "全屏Grid列表处理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
alv_list "普通List处理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
alv_grid "在自定义屏幕上显示的列表
IMPORTING value(lt_tab) TYPE ty_spfli,
main. "主方法
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* ALV操作类(实现)
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要显示的数据
METHOD getdata.
SELECT * INTO TABLE lt_tab FROM spfli.
ENDMETHOD. "getdata
*输出全屏网格列表的方法
METHOD alv_full.
"创建实例
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示列表
gr_table->display( ).
ENDMETHOD. "alv_full
*输出全屏普通列表的方法
METHOD alv_list.
"创建实例
TRY.
cl_salv_table=>factory(
EXPORTING
list_display = 'X'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示列表
gr_table->display( ).
ENDMETHOD. "alv_list
*输出在自定义屏幕上的列表
METHOD alv_grid.
CALL SCREEN '0100'.
ENDMETHOD. "alv_grid
*主方法,整合数据
METHOD main.
DATA: lt_tab TYPE TABLE OF spfli.
"取得要显示的数据
lt_tab = me->getdata( ).
"判断选择屏幕的选择条件调用不同的方法
CASE 'X'.
WHEN p_full.
me->alv_full( lt_tab ).
WHEN p_list.
me->alv_list( lt_tab ).
WHEN p_grid.
me->alv_grid( lt_tab ).
ENDCASE.
ENDMETHOD. "main
ENDCLASS. "lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* MODULE status_0100
*----------------------------------------------------------------------*
* PBO 屏幕输出前执行
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
"定义变量
DATA: lr_container TYPE REF TO cl_gui_custom_container,
lr_alv2 TYPE REF TO lcl_alv,
lt_tab TYPE TABLE OF spfli.
"创建容器实例
IF cl_salv_table=>is_offline( ) = ''.
CREATE OBJECT lr_container
EXPORTING
container_name = 'CONTAINER'.
ENDIF.
"创建类LCL_ALV实例
CREATE OBJECT lr_alv2.
"取得列表数据
lt_tab = lr_alv2->getdata( ).
"创建ALV实例
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = lr_container
container_name = 'CONTAINER'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"显示ALV列表
gr_table->display( ).
"释放内存
FREE lt_tab.
ENDMODULE. "status_0100
*----------------------------------------------------------------------*
* MODULE user_command_0100
*----------------------------------------------------------------------*
* PAI 屏幕输出后的动作
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ENDMODULE. "user_command_0100
*报表执行
START-OF-SELECTION.
DATA lr_alv TYPE REF TO lcl_alv.
CREATE OBJECT lr_alv.
lr_alv->main( ).
这里 CALL SCREEN '0100'.
逻辑流
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
进入格式,创建一个容器,名称是CONTAINER。
相关文章推荐
- ZooKeeper常用命令
- linux下使用yum安装mysql详解
- 怎么样使用yum来安装、卸载jdk
- Citrix Receiver登入的时候报找不到ICAWebWrapper插件
- 常用MySQL语句搜集整理
- linux下 yum 安装mysql和卸载
- Django 笔记 页面和URL配置
- Django 笔记 页面和URL配置
- 短板VS长板谁胜出
- 很详细的Nginx配置说明
- 遍历数组中进行remove操作
- Tomcat异常
- Windows Socket 编程_ 简单的服务器/客户端程序 .
- poj 3096 Surprising Strings
- 【树】Count Complete Tree Nodes
- ELK:kibana使用的lucene查询语法
- 使用UITableView纯代码模仿QQ聊天界面
- 《数据库索引设计优化》读书笔记(八)
- Symfony2开发之控制器用法实例分析
- jsp:forward page=