SAP实战中Submit的常见用法-调用标准程序

调用SAP标准程序

转载于:https://blog.csdn.net/zhongguomao/article/details/76252149?utm_source=blogxgwz5

场景:系统MB52/MB51/MB5B等类似的报表,虽然数据很全面,执行效率也够快,但是经常会不满足用户需求(增添字段、添加查询条件等),很多ABAP会选择去COPY出标准程序,然后去做修改,强烈不推荐此种方式,弊端太大,容易使标准程序出现问题,且效率低(特别涉及MSEG等数据库表)。

我们可以使用SUBMIT,此语法可将获取系统标准报表数据,然后你就可以自己去加一层壳来实现自己的定制。

语法:

  1. SUBMIT {rep|(name)} [selscreen_options]
  2. [list_options]
  3. [job_options]
  4. [AND RETURN].

selscreen_options:主要是标准程序选择界面Field,通过F1去查看具体Field name

方式一:获取ALV报表结果数据(不局限于严格意义上的ALV Grid、LIST报表也能获取到值),关键代码:

  1. SUBMIT
  2.  
  3.     TRY.
  4.         cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_alv_data ).
  5.  
  6.         ASSIGN lr_alv_data->* TO <lt_alv_data>.
  7.       CATCH cx_salv_bs_sc_runtime_info.
  8.  
  9.         MESSAGE 'Unable to retrieve ALV data! Please try other conditions.' TYPE 'E'.
  10.     ENDTRY.


示例:获取MB5B执行结果,详细代码:

  1. *&---------------------------------------------------------------------*
  2. *&
  3. *& 获取MB5B数据 
  4. *&---------------------------------------------------------------------*
  5. DATA:lr_alv_data TYPE REF TO data. 
  6.  
  7. FIELD-SYMBOLS : <lt_alv_data> TYPE ANY TABLE .
  8. FIELD-SYMBOLS : <lt_data> TYPE ANY. "LIKE LINE OF  it_tab . 
  9.  
  10.  
  11. *&---------------------------------------------------------------------*
  12. *& "计算特殊库存E的期初期末
  13. *&---------------------------------------------------------------------*
  14.     cl_salv_bs_runtime_info=>set( EXPORTING display  = abap_false
  15.                                             metadata = abap_false
  16.                                             data     = abap_true ).
  17.     CLEAR lr_alv_data.
  18.     UNASSIGN <lt_alv_data>.
  19.  
  20.     SUBMIT rm07mlbd                                         "MB5B特殊库存及搜索条件
  21.            WITH matnr IN so_matnr
  22.            WITH werks IN so_werks
  23.            WITH lgort EQ so_lgort-low "循环获取每个库存地点的期初期末
  24.            WITH sobkz EQ 'E'
  25.            WITH datum IN so_budat
  26.            "库存类型-特殊库存
  27.            WITH lgbst EQ space
  28.            WITH bwbst EQ space
  29.            WITH sbbst EQ 'X'
  30.            "设置
  31.            WITH xsum EQ space
  32.            WITH pa_sumfl EQ 'X'
  33.            WITH xchar EQ space
  34.            WITH xnomchb EQ space
  35.            WITH xnomchb EQ space
  36.            WITH nosto EQ space
  37.  
  38.            WITH pa_dbstd EQ 'X'
  39.            AND RETURN.
  40.  
  41.     TRY.
  42.         cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_alv_data ).
  43.  
  44.         ASSIGN lr_alv_data->* TO <lt_alv_data>.
  45.       CATCH cx_salv_bs_sc_runtime_info.
  46.  
  47.         MESSAGE 'Unable to retrieve ALV data! Please try other conditions.' TYPE 'E'.
  48.     ENDTRY.
  49.  
  50.     cl_salv_bs_runtime_info=>clear_all( ).
  51.  
  52.     "
  53.     IF <lt_alv_data> IS ASSIGNED.
  54.       UNASSIGN <lt_data>.
  55.       LOOP AT <lt_alv_data> ASSIGNING <lt_data>."即所需要内表数据
  56.  
  57.       ENDLOOP.
  58.     ENDIF.

方式二:将执行结果放入MEMORY(此法用于结果不是很明确的ALV结构),关键代码:

  1. EXPORT export_list TO MEMORY ID 'MB51_EXPORT_LIST'.
  2.  
  3. SUBMIT...
  4.  
  5. IMPORT export_list FROM MEMORY ID 'MB51_EXPORT_LIST'.

 

示例:获取MB51执行结果数据,详细代码:

  1. *&---------------------------------------------------------------------*
  2. *& Report  ZTEST_CALL_MB51
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *& 获取MB51数据
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  ztest_call_mb51.
  10.  
  11. TYPE-POOLS:abap.
  12. TABLES:mseg,mara,mard.
  13.  
  14. DATA:
  15.       flag(01)    TYPE  c VALUE 'X', "Name for compatibility with MB03 "MAA EhP4
  16.       no_list(01) TYPE  c VALUE 'X'. "Do not show the list             "MAA EhP4
  17.  
  18. DATA: BEGIN OF export_list OCCURS 0,
  19.         matnr TYPE mseg-matnr,
  20.         maktx TYPE makt-maktx,
  21.         werks TYPE mseg-werks,
  22.         name1 TYPE t001w-name1,
  23.         lgort TYPE mseg-lgort,
  24.         charg TYPE mseg-charg,                              "351455
  25.         bwtar TYPE mseg-bwtar,                              "351455
  26.         bwart TYPE mseg-bwart,
  27.         sobkz TYPE mseg-sobkz,
  28.         btext TYPE t156t-btext,
  29.         mblnr TYPE mseg-mblnr,
  30.         mjahr TYPE mseg-mjahr,
  31.         zeile TYPE mseg-zeile,
  32.         budat TYPE mkpf-budat,
  33.         erfmg TYPE mseg-erfmg,
  34.         erfme TYPE mseg-erfme,
  35.         lifnr TYPE mseg-lifnr,
  36.         vgart TYPE mkpf-vgart,
  37.       END OF export_list.
  38.  
  39. SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-t01.
  40. SELECT-OPTIONS:so_werks FOR mseg-werks OBLIGATORY,
  41.                           so_matnr FOR mseg-matnr,
  42.                           so_mtart FOR mara-mtart,
  43.                           so_matkl FOR mara-matkl,
  44.                           so_lgort FOR mard-lgort.
  45. SELECT-OPTIONS so_mtr_i FOR mseg-matnr NO-DISPLAY .
  46. SELECTION-SCREEN: END OF BLOCK blk1.
  47.  
  48. START-OF-SELECTION.
  49.  
  50.   EXPORT flag TO MEMORY ID 'MB51_FLAG'.
  51.   EXPORT no_list TO MEMORY ID 'MB51_NOLIST' .
  52.   EXPORT export_list TO MEMORY ID 'MB51_EXPORT_LIST'.
  53.  
  54.   SUBMIT rm07docs
  55.     WITH matnr IN so_matnr
  56.     WITH werks IN so_werks
  57.     WITH lgort IN so_lgort
  58.     WITH database EQ abap_true
  59.     WITH pa_dbstd EQ abap_true
  60.     WITH mb51_flag EQ flag
  61.     WITH mb51_nolist EQ no_list
  62.   EXPORTING LIST TO MEMORY AND RETURN.
  63.  
  64.   IMPORT export_list FROM MEMORY ID 'MB51_EXPORT_LIST'.
  65.   FREE MEMORY ID 'MB51_EXPORT_LIST'.
  66.  
  67.   LOOP AT export_list."export_list 为需要的内表数据
  68.  
  69.   ENDLOOP.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值