ABAP 调用报表执行后的数据

某程序要用到其中一个报表的字段值,这个字段取值比较复杂,所以就直接调用该程序

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值