SALV有个的功能,就是submit其他SALV程序后能直接取得显示的结果。
方法一:通常情况下,可以将submit的SALV显示结果发送到内存中,
通过 SUBMIT .... EXPORTING LIST TO MEMORY AND RETURN,
然后通过函数 LIST_FROM_MEMORY 读取,通过 WRITE_LIST 写入,这么做比较繁琐。
方法二:通过类CL_SALV_BS_RUNTIME_INFO来实现:
步骤一:1,将Submit的salv设置为不显示模式
" 设定SALV运行模式,
cl_salv_bs_runtime_info=>set(
display = abap_false "不显示
metadata = abap_false
data = abap_true ).
步骤二:submit SALV程序
SUBMIT ztld_mm_009
WITH s_date = s_date WITH s_werks IN g_werks WITH s_lgort IN s_lgort
EXPORTING LIST TO MEMORY AND RETURN.
步骤三:调用cl_salv_bs_runtime_info=>get_data_ref()取得结果
TRY.
"取得运行数据
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING
r_data = go_data
).
* 数据赋值
ASSIGN go_data->* TO <git_outtab>.
CATCH cx_salv_bs_sc_runtime_info.
ENDTRY.
CALL METHOD cl_salv_bs_runtime_info=>clear_all.
步骤四:进行数据的处理
做过的一个实例:
DATA go_data TYPE REF TO data.
FIELD-SYMBOLS: <git_outtab> TYPE ANY TABLE . ”结构必须和被调程序的ALV 结构一样
RANGES:g_werks FOR mseg-werks .
CLEAR g_werks.
g_werks-sign = 'I'.
g_werks-option = 'EQ'.
g_werks-low = '6001'.
APPEND g_werks.
CLEAR g_werks.
g_werks-sign = 'I'.
g_werks-option = 'EQ'.
g_werks-low = '6003'.
APPEND g_werks.
cl_salv_bs_runtime_info=>set(
display = abap_false
metadata = abap_false
data = abap_true ).
SUBMIT ztld_mm_009
WITH s_date = s_date WITH s_werks IN g_werks WITH s_lgort IN s_lgort
EXPORTING LIST TO MEMORY AND RETURN.
TRY.
"取得运行数据
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING
r_data = go_data
).
* 数据赋值
ASSIGN go_data->* TO <git_outtab>. "结构必须和被调程序的ALV 结构一样
CATCH cx_salv_bs_sc_runtime_info.
ENDTRY.
CALL METHOD cl_salv_bs_runtime_info=>clear_all.
IF go_data IS NOT INITIAL .
*数据处理
LOOP AT <git_outtab> ASSIGNING <gis_outtab>.
ztld_dmbtr = <gis_outtab>-dmbtr + ztld_dmbtr.
ztld_cqje = <gis_outtab>-dmbtr14 + <gis_outtab>-dmbtr15 + <gis_outtab>-dmbtr16
+ <gis_outtab>-dmbtr17 + <gis_outtab>-dmbtr18 + <gis_outtab>-dmbtr19
+ ztld_cqje .
ENDLOOP.
ENDIF.