在SAP ABAP开发里面经常会遇到,获取另一个程序ALV运行结果的需求。为了实现这个需求通常有两种方法一种方法是通过内存参数传递数据(但这种方法有个弊端,如是SAP的标准程序通过增强来程序很麻烦。),另一种是直接利用SAP的标准Function获取ALVarez数据。本文介绍后一种。例子是获取 科目余额表( FAGLL03)运行结果。
代码 示例如下:
REPORT ZFI76B_AUTO.
RANGES:s_hkont_gl FOR bsid-hkont.
DATA:lv_flag.
DATA:ls_data TYPE REF TO data.
DATA:lt_data_gl LIKE faglposx OCCURS 1 WITH HEADER LINE.
FIELD-SYMBOLS: <lt_data> TYPE table,
<l_data> TYPE data.
s_hkont_gl[] = VALUE #(
( sign = 'I' option = 'EQ' low = '6115010000'" 信用减值损失-应收账款:取自
)
( sign = 'I' option = 'EQ' low = '6701030100'" 信用减值损失-应收账款:取自《利润
)
( sign = 'I' option = 'EQ' low = '6115010200'" 信用减值损失-应收账款:取自《利
)
( sign = 'I' option = 'EQ' low = '6115010100'" 信用减值损失-应收账款:取自
)
).
IF s_hkont_gl[] IS NOT INITIAL. "从总账取值逻辑
cl_salv_bs_runtime_info=>set(
display = ''
metadata = ''
data = 'X' ).
EXPORT lv_flag TO MEMORY ID 'ZAR'."调用标准应收行项目程序不弹框假如无数据(不是必须)
SUBMIT fagl_account_items_gl " 调用FAGLL03
WITH sd_saknr IN s_hkont_gl
" WITH sd_bukrs IN s_bukrs
WITH x_opsel = 'X'
" WITH pa_stida = p_augdt
WITH x_aisel = ''
* USING SELECTION-SET 'HZQ'
AND RETURN.
TRY.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = ls_data ). " 获取ALV数据
ASSIGN ls_data->* TO <lt_data>.
CATCH cx_salv_bs_sc_runtime_info.
" MESSAGE 'UNABLE TO RETRIEVE ALV DATA' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ). "调用完成后 清理工作
IF <lt_data> IS ASSIGNED. "接下来开始使用抓过来的数据
MOVE-CORRESPONDING <lt_data> TO lt_data_gl[].
ENDIF.
ENDIF.