abap开发中,有时会需要获取另外一个已存在的报表中的数据,也就是绑定在ALV上的数据,通常有两种做法:
第一种方法:把ALV的内表数据export到内存中,在调用结束后,用import从内存中读取出来,这种方法需要修改被调用报表;
第二种方法:使用SAP提供的函数,这种方法不需要修改被调用报表的,以下是此种方法的sample;
*&---------------------------------------------------------------------*
*& Report ZTEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zliuxy_test.
TYPES:BEGIN OF ty_itab,
werks LIKE mast-werks,
matnr LIKE mast-matnr, "bom层
stlnr LIKE mast-stlnr, "物料单
stlal LIKE stko-stlal, "可选bom(替代)
idnrk LIKE stpo-idnrk, "bom物料
menge LIKE stpo-menge, "数量
alpst LIKE stpo-alpst, "策略
ewahr LIKE stpo-ewahr, " 使用可能性
END OF ty_itab.
DATA:itab TYPE TABLE OF ty_itab WITH HEADER LINE,
ls_itab TYPE ty_itab.
RANGES:s_matnr FOR mast-matnr,
s_datuv FOR stas-datuv.
FIELD-SYMBOLS:<lt_data> TYPE ANY TABLE.
DATA:lr_data TYPE REF TO data.
"初始设置
CALL METHOD cl_salv_bs_runtime_info=>set
EXPORTING
display = abap_false
metadata = abap_false
data = abap_true.
s_matnr-sign = 'I'.
s_matnr-option = 'EQ'.
s_matnr-low = ''.
APPEND s_matnr.
s_datuv-sign = 'I'.
s_datuv-option = 'EQ'.
s_datuv-low = ''.
APPEND s_datuv.
* 调用目标程序
SUBMIT z_mm_bomq
WITH s_matnr IN s_matnr
WITH s_datuv IN s_datuv
AND RETURN.
TRY.
"获取ALV显示数据
CALL METHOD cl_salv_bs_runtime_info=>get_data_ref
IMPORTING
r_data = lr_data.
ASSIGN lr_data->* TO <lt_data>.
REFRESH itab.
CLEAR itab.
MOVE-CORRESPONDING <lt_data>[] TO itab[].
CATCH cx_salv_bs_sc_runtime_info.
ENDTRY.
"结束
cl_salv_bs_runtime_info=>clear_all( ).