当程序中需要获取某张报表展示的ALV数据,又不想重新写一遍查询逻辑,则可以调用该报表,直接将报表的ALV内表的数据获取到,提高开发效率
"-----------------------------@斌将军-----------------------------
DATA:lo_dataTYPEREFTOdata,
lt_selectTYPETABLEOFrsparams,
ls_selectTYPErsparams.
FIELD-SYMBOLS<lt_data>TYPEANYTABLE.
"初始设置
CALLMETHODcl_salv_bs_runtime_info=>set
EXPORTING
display=abap_false
metadata=abap_false
data=abap_true.
"报表筛选条件
CLEARls_select.
ls_select-selname='S_MONTH'.
ls_select-sign='I'.
ls_select-option='EQ'.
ls_select-low='202204'.
*ls_select-high=''.
APPENDls_selectTOlt_select.
*CLEARls_select.
*ls_select-selname='S_KUNNR'.
*ls_select-sign='I'.
*ls_select-option='EQ'.
*ls_select-low='202204'.
**ls_select-high=''.
*APPENDls_selectTOlt_select.
"调用目标报表
SUBMITzsd001
WITHSELECTION-TABLElt_select"多选
*WITHp_year=i_year
ANDRETURN.
TRY.
"获取ALV显示数据
CALLMETHODcl_salv_bs_runtime_info=>get_data_ref
IMPORTING
r_data=lo_data.
IFlo_dataISINITIAL.
MESSAGE'无数据'TYPE'S'DISPLAYLIKE'E'.
RETURN.
ENDIF.
ASSIGNlo_data->*TO<lt_data>.
CATCHcx_salv_bs_sc_runtime_info.
ENDTRY.
IF<lt_data>ISNOTINITIAL.
"填充报表数据到内表
MOVE-CORRESPONDING<lt_data>TOgt_alv.
ENDIF.
"清理
cl_salv_bs_runtime_info=>clear_all().
"-----------------------------@斌将军-----------------------------
发表评论