【转载】ABAP:SUBMIT执行其他报表并返回数据

有些情况我们需要取一些标准报表的数据,如果自己重写比较复杂,用SUBMIT … AND RETURN可以调用标准报表并获取获取返回值。

参考:ZEROTEST69

语法:SUBMIT [程序名] WITH [调用程序屏幕的参数名]IN/=  值 AND RETURN

加上 EXPORTING LIST TO MEMORY 将程序返回的alv输出到MEMORY可以用函数取出


网上也有很多类似的例子,这里自己以MB5B测试了一个例子

列子:

 

*&---------------------------------------------------------------------*
*& Report  ZEROTEST69
*& 测试直接取MB5B 历史库存的数据
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zerotest69.
TABLES: t001w,mard,mkpf.
DATA:ls_data TYPE REF TO data.
FIELD-SYMBOLS: <lt_data> TYPE table,
               <l_data>  TYPE data.

DATA  BEGIN OF itab_list OCCURS 0.
        INCLUDE STRUCTURE abaplist.
DATA  END OF itab_list.

DATA:BEGIN OF t_str OCCURS 0,
    str(20) TYPE c,
END OF t_str.

DATA: BEGIN OF vlist OCCURS 0, "这个调用程序ALV输出的长度要根据实际长度来确认
  filler1(100)   TYPE c,
  field1(50)    TYPE c,
  filler(50)    TYPE c,
  field2(50)    TYPE c,
  filler3(50)   TYPE c,
  END OF vlist.
DATA: str1(100) TYPE c,
      str2(100) TYPE c.
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
SELECT-OPTIONS:
  s_werks FOR t001w-werks,
  s_matnr FOR mard-matnr,
  s_budat FOR mkpf-budat.
SELECTION-SCREEN END OF BLOCK bl1.

START-OF-SELECTION.
  PERFORM get_mb5b_data.
*&---------------------------------------------------------------------*
*&      Form  get_mb5b_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_mb5b_data.

* 以下此句如果加上 程序获取不到数据,具体原因未知

  cl_salv_bs_runtime_info=>set(
    display  = abap_false
    metadata = abap_false
    data     = abap_true  ).

  SUBMIT rm07mlbd WITH werks IN s_werks WITH matnr IN s_matnr WITH datum IN s_budat WITH lgbst = 'X' AND RETURN EXPORTING LIST TO MEMORY."TCODE:MB5B


  CALL FUNCTION 'LIST_FROM_MEMORY'
    TABLES
      listobject = itab_list
    EXCEPTIONS
      not_found  = 4
      OTHERS     = 8.

  CALL FUNCTION 'LIST_TO_ASCI'
    EXPORTING
      list_index         = -1
    TABLES
      listasci           = vlist
      listobject         = itab_list
    EXCEPTIONS
      empty_list         = 1
      list_index_invalid = 2
      OTHERS             = 3.
  IF sy-subrc = 0.
    READ TABLE vlist INDEX 5.
    IF sy-subrc = 0 .
      SPLIT vlist-filler1  AT '' INTO TABLE t_str . "根据空格拆分
    ENDIF.
  ENDIF.
  DELETE t_str WHERE str = ''. "删除空行
  READ TABLE t_str INDEX 3.
  IF sy-subrc = 0.
    WRITE: t_str-str.
  ENDIF.
*  TRY.
*      cl_salv_bs_runtime_info=>get_data_ref(
*       IMPORTING r_data = ls_data ).
*
*      ASSIGN ls_data->* TO <lt_data>.
*
*    CATCH cx_salv_bs_sc_runtime_info.
*      MESSAGE '无法读取ALV数据' TYPE 'E'.
*  ENDTRY.
*
*  cl_salv_bs_runtime_info=>clear_all( ).
*
*  IF <lt_data> IS ASSIGNED.
*    LOOP AT <lt_data> ASSIGNING <l_data>.
**    MOVE-CORRESPONDING <l_data> TO gt_tab.
**    APPEND gt_tab.
*    ENDLOOP.
*  ENDIF.
ENDFORM.                    "

测试界面:

测试结果:

输出的库存和MB5B的结果是一样的

MB5B界面:

MB5B结果:


字符串处理一下可以得到总库存:

测试控制台:

参考:http://blog.csdn.net/zhongguomao/article/details/50924058


--------------------- 
作者:zero灬小火柴 
来源:CSDN 
原文:https://blog.csdn.net/m0_37062693/article/details/75050216 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值