alv 选择条件和显示在同一页面

6 篇文章 1 订阅

 

 

REPORT cc.

TABLES:ekko,ekpo,lfa1.

 

"方法定义"

CLASS lcl_report DEFINITION.

  PUBLIC SECTION.

    TYPES:BEGIN OF wa_data,

            ebeln TYPE ekko-ebeln, "采购订单

            ebelp TYPE ekpo-ebelp, "采购订单行项目

            matnr TYPE ekpo-matnr, "物料号

            lifnr TYPE lfa1-lifnr, "供应商

            menge TYPE ekpo-menge,

          END OF wa_data.

 

    DATA: alv_data  TYPE  TABLE OF wa_data,  " Output dat

          alv_ebeln TYPE RANGE OF ekko-ebeln,    " Select Option

          alv_matnr TYPE  RANGE  OF ekpo-matnr.

    METHODS:

      get_data,   "获取数据

      generate_output. "输出表

ENDCLASS.

DATA: lo_report TYPE REF TO lcl_report.

*选择屏幕

SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE aaa.

  SELECT-OPTIONS: s_ebeln FOR ekko-ebeln,

  s_matnr FOR ekpo-matnr.

SELECTION-SCREEN: END   OF BLOCK blk1.

*初始化

INITIALIZATION.

  CREATE OBJECT lo_report."实例化

  lo_report->generate_output( ). "表格

START-OF-SELECTION.

* Get data

  lo_report->alv_ebeln = s_ebeln[].

  lo_report->alv_matnr = s_matnr[].

  lo_report->get_data( ).  "获取数据"

CLASS lcl_report IMPLEMENTATION.

  METHOD get_data.

*数据获取

    SELECT

    ekko~ebeln,"采购订单

    ekpo~ebelp,"采购订单行项目

    ekpo~matnr,"物料号

    ekko~lifnr,"供应商

    ekpo~menge

    FROM ekko

    LEFT JOIN ekpo ON ekko~ebeln = ekpo~ebeln

    INTO  TABLE @me->alv_data

    WHERE ekko~ebeln IN @alv_ebeln

    AND ekpo~matnr IN @alv_matnr.

    IF sy-dbcnt IS INITIAL.

      MESSAGE s398(00) WITH 'No data selected'.

    ENDIF.

*内存传值

    EXPORT data = me->alv_data TO MEMORY ID sy-cprog.

  ENDMETHOD.                    "get_data"

  METHOD generate_output.

*   local data

    DATA: lo_dock TYPE REF TO cl_gui_docking_container,

          lo_cont TYPE REF TO cl_gui_container,

          lo_alv  TYPE REF TO cl_salv_table.

* 从内存中接收输出表,然后释放内存

    IMPORT data = me->alv_data FROM MEMORY ID sy-cprog.

    FREE MEMORY ID sy-cprog.

 

*  检查数据不为空

    CHECK me->alv_data IS NOT INITIAL.

 

*   Create a docking control at bottom

    CHECK lo_dock IS INITIAL.

    CREATE OBJECT lo_dock

      EXPORTING

        repid = sy-cprog

        dynnr = sy-dynnr

        ratio = 80

        side  = cl_gui_docking_container=>dock_at_bottom

        name  = 'DOCK_CONT'.

    IF sy-subrc <> 0.

      MESSAGE 'Error in the Docking control' TYPE 'S'.

    ENDIF.

*   Create a SALV for output

    CHECK lo_alv IS INITIAL.

    TRY.

*       Narrow Casting: To initialize custom container from

*       docking container

        lo_cont ?= lo_dock."对接容器"

*       SALV Table Display on the Docking container

        CALL METHOD cl_salv_table=>factory

          EXPORTING

            list_display   = if_salv_c_bool_sap=>false

            r_container    = lo_cont

            container_name = 'DOCK_CONT'

          IMPORTING

            r_salv_table   = lo_alv

          CHANGING

            t_table        = me->alv_data.

      CATCH cx_salv_msg .

    ENDTRY.

*   Pf status

    DATA: lo_functions TYPE REF TO cl_salv_functions_list.

    lo_functions = lo_alv->get_functions( ).

    lo_functions->set_default( abap_true ).

*ALV 输出

    lo_alv->display( ).

  ENDMETHOD.                    "generate_output

ENDCLASS.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值