生活随笔
收集整理的這篇文章主要介紹了
SAP实战中Submit的常见用法-调用标准程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:系統MB52/MB51/MB5B等類似的報表,雖然數據很全面,執行效率也夠快,但是經常會不滿足用戶需求(增添字段、添加查詢條件等),很多ABAP會選擇去COPY出標準程序,然后去做修改,強烈不推薦此種方式,弊端太大,容易使標準程序出現問題,且效率低(特別涉及MSEG等數據庫表)。 我們可以使用SUBMIT,此語法可將獲取系統標準報表數據,然后你就可以自己去加一層殼來實現自己的定制。 語法: SUBMIT {rep|(name)} [selscreen_options] [list_options] [job_options] [AND RETURN]. 復制代碼 selscreen_options:主要是標準程序選擇界面Field,通過F1去查看具體Field name 方式一:獲取ALV報表結果數據(不局限于嚴格意義上的ALV Grid、LIST報表也能獲取到值),關鍵代碼: SUBMIT ? ? TRY. ? ?? ???cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_alv_data ). ? ?? ???ASSIGN lr_alv_data->* TO <lt_alv_data>. ? ?? ?CATCH cx_salv_bs_sc_runtime_info. ? ?? ???MESSAGE 'Unable to retrieve ALV data! Please try other conditions.' TYPE 'E'. ? ? ENDTRY. 復制代碼 示例:獲取MB5B執行結果,詳細代碼: *&---------------------------------------------------------------------* *& *& 獲取MB5B數據? *&---------------------------------------------------------------------* DATA:lr_alv_data TYPE REF TO data.? FIELD-SYMBOLS : <lt_alv_data> TYPE ANY TABLE . FIELD-SYMBOLS : <lt_data> TYPE ANY. "LIKE LINE OF??it_tab .? *&---------------------------------------------------------------------* *& "計算特殊庫存E的期初期末 *&---------------------------------------------------------------------* ? ? cl_salv_bs_runtime_info=>set( EXPORTING display??= abap_false ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???metadata = abap_false ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???data? ???= abap_true ). ? ? CLEAR lr_alv_data. ? ? UNASSIGN <lt_alv_data>. ? ? SUBMIT rm07mlbd? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???"MB5B特殊庫存及搜索條件 ? ?? ?? ???WITH matnr IN so_matnr ? ?? ?? ???WITH werks IN so_werks ? ?? ?? ???WITH lgort EQ so_lgort-low "循環獲取每個庫存地點的期初期末 ? ?? ?? ???WITH sobkz EQ 'E' ? ?? ?? ???WITH datum IN so_budat ? ?? ?? ???"庫存類型-特殊庫存 ? ?? ?? ???WITH lgbst EQ space ? ?? ?? ???WITH bwbst EQ space ? ?? ?? ???WITH sbbst EQ 'X' ? ?? ?? ???"設置 ? ?? ?? ???WITH xsum EQ space ? ?? ?? ???WITH pa_sumfl EQ 'X' ? ?? ?? ???WITH xchar EQ space ? ?? ?? ???WITH xnomchb EQ space ? ?? ?? ???WITH xnomchb EQ space ? ?? ?? ???WITH nosto EQ space ? ?? ?? ???WITH pa_dbstd EQ 'X' ? ?? ?? ???AND RETURN. ? ? TRY. ? ?? ???cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_alv_data ). ? ?? ???ASSIGN lr_alv_data->* TO <lt_alv_data>. ? ?? ?CATCH cx_salv_bs_sc_runtime_info. ? ?? ???MESSAGE 'Unable to retrieve ALV data! Please try other conditions.' TYPE 'E'. ? ? ENDTRY. ? ? cl_salv_bs_runtime_info=>clear_all( ). ? ? " ? ? IF <lt_alv_data> IS ASSIGNED. ? ?? ?UNASSIGN <lt_data>. ? ?? ?LOOP AT <lt_alv_data> ASSIGNING <lt_data>."即所需要內表數據 ? ?? ?ENDLOOP. ? ? ENDIF. 復制代碼 方式二:將執行結果放入MEMORY(此法用于結果不是很明確的ALV結構),關鍵代碼: EXPORT export_list TO MEMORY ID 'MB51_EXPORT_LIST'. SUBMIT... IMPORT export_list FROM MEMORY ID 'MB51_EXPORT_LIST'. 復制代碼 示例:獲取MB51執行結果數據,詳細代碼: *&---------------------------------------------------------------------* *& Report??ZTEST_CALL_MB51 *& *&---------------------------------------------------------------------* *& *& 獲取MB51數據 *&---------------------------------------------------------------------* REPORT??ztest_call_mb51. TYPE-POOLS:abap. TABLES:mseg,mara,mard. DATA: ? ?? ?flag(01)? ? TYPE??c VALUE 'X', "Name for compatibility with MB03 "MAA EhP4 ? ?? ?no_list(01) TYPE??c VALUE 'X'. "Do not show the list? ?? ?? ?? ? "MAA EhP4 DATA: BEGIN OF export_list OCCURS 0, ? ?? ???matnr TYPE mseg-matnr, ? ?? ???maktx TYPE makt-maktx, ? ?? ???werks TYPE mseg-werks, ? ?? ???name1 TYPE t001w-name1, ? ?? ???lgort TYPE mseg-lgort, ? ?? ???charg TYPE mseg-charg,? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?"351455 ? ?? ???bwtar TYPE mseg-bwtar,? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?"351455 ? ?? ???bwart TYPE mseg-bwart, ? ?? ???sobkz TYPE mseg-sobkz, ? ?? ???btext TYPE t156t-btext, ? ?? ???mblnr TYPE mseg-mblnr, ? ?? ???mjahr TYPE mseg-mjahr, ? ?? ???zeile TYPE mseg-zeile, ? ?? ???budat TYPE mkpf-budat, ? ?? ???erfmg TYPE mseg-erfmg, ? ?? ???erfme TYPE mseg-erfme, ? ?? ???lifnr TYPE mseg-lifnr, ? ?? ???vgart TYPE mkpf-vgart, ? ?? ?END OF export_list. SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-t01. SELECT-OPTIONS:so_werks FOR mseg-werks OBLIGATORY, ? ?? ?? ?? ?? ?? ?? ?? ???so_matnr FOR mseg-matnr, ? ?? ?? ?? ?? ?? ?? ?? ???so_mtart FOR mara-mtart, ? ?? ?? ?? ?? ?? ?? ?? ???so_matkl FOR mara-matkl, ? ?? ?? ?? ?? ?? ?? ?? ???so_lgort FOR mard-lgort. SELECT-OPTIONS so_mtr_i FOR mseg-matnr NO-DISPLAY . SELECTION-SCREEN: END OF BLOCK blk1. START-OF-SELECTION. ??EXPORT flag TO MEMORY ID 'MB51_FLAG'. ??EXPORT no_list TO MEMORY ID 'MB51_NOLIST' . ??EXPORT export_list TO MEMORY ID 'MB51_EXPORT_LIST'. ??SUBMIT rm07docs ? ? WITH matnr IN so_matnr ? ? WITH werks IN so_werks ? ? WITH lgort IN so_lgort ? ? WITH database EQ abap_true ? ? WITH pa_dbstd EQ abap_true ? ? WITH mb51_flag EQ flag ? ? WITH mb51_nolist EQ no_list ??EXPORTING LIST TO MEMORY AND RETURN. ??IMPORT export_list FROM MEMORY ID 'MB51_EXPORT_LIST'. ??FREE MEMORY ID 'MB51_EXPORT_LIST'. ??LOOP AT export_list."export_list 為需要的內表數據 ??ENDLOOP. 復制代碼 |
總結
以上是生活随笔為你收集整理的SAP实战中Submit的常见用法-调用标准程序的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。