ABAP:SUBMIT执行其他报表并返回的数据

来源:互联网 发布:现货原油软件下载 编辑:程序博客网 时间:2024/05/15 23:48

有些情况我们需要取一些标准报表的数据,如果自己重写比较复杂,用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


原创粉丝点击