您的位置:首页 > 其它

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。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: