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.