某程序要用到其中一个报表的字段值,这个字段取值比较复杂,所以就直接调用该程序
FORM frm_get_zdqzy TABLES lt_156 STRUCTURE gs_156 USING cs_head LIKE gs_head .
DATA: gt_seltab TYPE TABLE OF rsparams, "选择条件通用表
gs_seltab TYPE rsparams.
DATA: gs_data TYPE REF TO data. "动态语法专用类型
FIELD-SYMBOLS: <gt_data> TYPE table,
<gs_data> TYPE data,
<dyn_wa> TYPE any,
<dyn_field> TYPE any,
<dyn_field2> TYPE any,
<dyn_field3> TYPE any,
<dyn_value> TYPE any.
DEFINE mcr_catch_data. "从动态结构中获取数据
"&1: From 字段名 &2:To 字段名
ASSIGN COMPONENT &1 OF STRUCTURE <gs_data> TO <dyn_field>.
IF sy-subrc EQ 0 .
&2 = <dyn_field>.
ENDIF.
END-OF-DEFINITION.
"整理选择条件
CLEAR:gt_seltab.
IF cs_head-vbukr IS NOT INITIAL.
gt_seltab = VALUE #( BASE gt_seltab[]
( selname = 'S_VBUKR' kind = 'S' sign = 'I' option = 'EQ' low = cs_head-vbukr )
).
ENDIF.
IF cs_head-werks IS NOT INITIAL.
gt_seltab = VALUE #( BASE gt_seltab[]
( selname = 'S_WERKS' kind = 'S' sign = 'I' option = 'EQ' low = cs_head-werks )
).
ENDIF.
IF gs_head-pspid IS NOT INITIAL.
gt_seltab = VALUE #( BASE gt_seltab[]
( selname = 'S_PSPID' kind = 'S' sign = 'I' option = 'EQ' low = cs_head-pspid )
).
ENDIF.
"设置ALV - 不显示
cl_salv_bs_runtime_info=>set( display = ''
metadata = ''
data = 'X' ).
"调用程序
SUBMIT yxpsr156 WITH SELECTION-TABLE gt_seltab AND RETURN.
TRY.
cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = gs_data ).
ASSIGN gs_data->* TO <gt_data>.
"转换数据
IF <gt_data> IS ASSIGNED.
LOOP AT <gt_data> ASSIGNING <gs_data>.
CLEAR:gs_156.
mcr_catch_data 'POSID' gs_156-posid."
mcr_catch_data 'ZDQZY' gs_156-zdqzy."
APPEND gs_156 TO gt_156.
ENDLOOP.
ENDIF.
CATCH cx_salv_bs_sc_runtime_info.
MESSAGE 'UNABLE TO RETRIEVE ALV DATA' TYPE 'E'.
ENDTRY.
cl_salv_bs_runtime_info=>clear_all( ).
ENDFORM.