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

https://blog.csdn.net/m0_37062693/article/details/75050216

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

参考:ZEROTEST69

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

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

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

列子:

 
  1. *&---------------------------------------------------------------------*

  2. *& Report ZEROTEST69

  3. *& 测试直接取MB5B 历史库存的数据

  4. *&---------------------------------------------------------------------*

  5. *&

  6. *&

  7. *&---------------------------------------------------------------------*

  8.  
  9. REPORT zerotest69.

  10. TABLES: t001w,mard,mkpf.

  11. DATA:ls_data TYPE REF TO data.

  12. FIELD-SYMBOLS: <lt_data> TYPE table,

  13. <l_data> TYPE data.

  14.  
  15. DATA BEGIN OF itab_list OCCURS 0.

  16. INCLUDE STRUCTURE abaplist.

  17. DATA END OF itab_list.

  18.  
  19. DATA:BEGIN OF t_str OCCURS 0,

  20. str(20) TYPE c,

  21. END OF t_str.

  22.  
  23. DATA: BEGIN OF vlist OCCURS 0, "这个调用程序ALV输出的长度要根据实际长度来确认

  24. filler1(100) TYPE c,

  25. field1(50) TYPE c,

  26. filler(50) TYPE c,

  27. field2(50) TYPE c,

  28. filler3(50) TYPE c,

  29. END OF vlist.

  30. DATA: str1(100) TYPE c,

  31. str2(100) TYPE c.

  32. SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.

  33. SELECT-OPTIONS:

  34. s_werks FOR t001w-werks,

  35. s_matnr FOR mard-matnr,

  36. s_budat FOR mkpf-budat.

  37. SELECTION-SCREEN END OF BLOCK bl1.

  38.  
  39. START-OF-SELECTION.

  40. PERFORM get_mb5b_data.

  41. *&---------------------------------------------------------------------*

  42. *& Form get_mb5b_data

  43. *&---------------------------------------------------------------------*

  44. * text

  45. *----------------------------------------------------------------------*

  46. FORM get_mb5b_data.

  47.  
  48. cl_salv_bs_runtime_info=>set(

  49. display = abap_false

  50. metadata = abap_false

  51. data = abap_true ).

  52.  
  53. 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

  54.  
  55.  
  56. CALL FUNCTION 'LIST_FROM_MEMORY'

  57. TABLES

  58. listobject = itab_list

  59. EXCEPTIONS

  60. not_found = 4

  61. OTHERS = 8.

  62.  
  63. CALL FUNCTION 'LIST_TO_ASCI'

  64. EXPORTING

  65. list_index = -1

  66. TABLES

  67. listasci = vlist

  68. listobject = itab_list

  69. EXCEPTIONS

  70. empty_list = 1

  71. list_index_invalid = 2

  72. OTHERS = 3.

  73. IF sy-subrc = 0.

  74. READ TABLE vlist INDEX 5.

  75. IF sy-subrc = 0 .

  76. SPLIT vlist-filler1 AT '' INTO TABLE t_str . "根据空格拆分

  77. ENDIF.

  78. ENDIF.

  79. DELETE t_str WHERE str = ''. "删除空行

  80. READ TABLE t_str INDEX 3.

  81. IF sy-subrc = 0.

  82. WRITE: t_str-str.

  83. ENDIF.

  84. * TRY.

  85. * cl_salv_bs_runtime_info=>get_data_ref(

  86. * IMPORTING r_data = ls_data ).

  87. *

  88. * ASSIGN ls_data->* TO <lt_data>.

  89. *

  90. * CATCH cx_salv_bs_sc_runtime_info.

  91. * MESSAGE '无法读取ALV数据' TYPE 'E'.

  92. * ENDTRY.

  93. *

  94. * cl_salv_bs_runtime_info=>clear_all( ).

  95. *

  96. * IF <lt_data> IS ASSIGNED.

  97. * LOOP AT <lt_data> ASSIGNING <l_data>.

  98. ** MOVE-CORRESPONDING <l_data> TO gt_tab.

  99. ** APPEND gt_tab.

  100. * ENDLOOP.

  101. * ENDIF.

  102. ENDFORM. "

测试界面:

测试结果:

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

MB5B界面:

MB5B结果:

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

测试控制台:


 

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

猜你喜欢

转载自blog.csdn.net/weixin_42137700/article/details/81635123
今日推荐