ABAP SUMBIT程式的程式裡也有SUBMIT的處理方式
阿新 • • 發佈:2022-04-21
一般來說,程式呼叫其他程式時候可以用submit來傳參取數。網上也有很多種例子。
一般來說使用下面程式碼取記憶體獲得內表資料,當radiobutton時候要全部傳參
CL_SALV_BS_RUNTIME_INFO=>SET( EXPORTING DISPLAY = ABAP_FALSE METADATA = ABAP_FALSE DATA = ABAP_TRUE ). SUBMIT ZMMRP070 WITH P_IMPORT = '' "radiobutton 傳參要用‘’ WITH P_QUERY = '' WITH P_DATA = 'X' * WITH S_MATNR IN S_MATNRWITH S_MATNR IN LR_MATNR EXPORTING LIST TO MEMORY AND RETURN. IF SY-SUBRC = 0. TRY. CL_SALV_BS_RUNTIME_INFO=>GET_DATA_REF( IMPORTING R_DATA = LR_PAY_DATA ). ASSIGN LR_PAY_DATA->* TO <LT_PAY_DATA>. CATCH CX_SALV_BS_SC_RUNTIME_INFO. MESSAGE`Unable to retrieve ALV data` TYPE 'E'. ENDTRY. ENDIF. CL_SALV_BS_RUNTIME_INFO=>CLEAR_ALL( ). LOOP AT <LT_PAY_DATA> ASSIGNING FIELD-SYMBOL(<FS_MEMORY>). MOVE-CORRESPONDING <FS_MEMORY> TO WA_STOCK. APPEND WA_STOCK TO IT_STOCK. CLEAR:WA_STOCK.ENDLOOP. ENDIF.
但是當呼叫的程式裡也有submit的時候,記憶體就取得不對了,專家說這個時候要採取多執行緒任務,當然這個不懂,後面採取了MEMORY ID的方法。
具體操作如下:
在被呼叫的程式裡定義一個CONSTANTS: G_MEMORY(30) VALUE 'ZSYPJXS'."三月平均銷售記憶體
在處理完內表後,加一個
FREE MEMORY ID G_MEMORY.
"將結果匯出到主呼叫程式
EXPORT IT_SMZQBB FROM IT_SMZQBB TO MEMORY ID G_MEMORY
在主程式裡接受記憶體
CONSTANTS: G_MEMORY(30) VALUE 'ZSYPJXS'."三月平均銷售記憶體 "也要定義好相同名字的名字 DATA:IT_SMZQBB111 TYPE STANDARD TABLE OF TY_SMZQBB, WA_SMZQBB111 TYPE TY_SMZQBB."主程式定義好相同的接受資料的內表結構 FIELD-SYMBOLS : <LT_PAY_DATA> TYPE ANY TABLE . FIELD-SYMBOLS : <LT_TEST> TYPE ANY . "LIKE LINE OF it_tab . DATA LR_PAY_DATA TYPE REF TO DATA. RANGES: S_MATNR1 FOR ZTMM021-MATNR. S_MATNR1-SIGN = 'I'. S_MATNR1-OPTION = 'EQ'. S_MATNR1-LOW = IT_PCLJ-MATNR. APPEND S_MATNR1. CLEAR: S_MATNR1. CLEAR LR_PAY_DATA. UNASSIGN <LT_PAY_DATA>. CL_SALV_BS_RUNTIME_INFO=>SET( EXPORTING DISPLAY = ABAP_FALSE METADATA = ABAP_FALSE DATA = ABAP_TRUE ). SUBMIT ZSDRP120 WITH S_MATNR IN S_MATNR1 WITH A = '' WITH B = 'X' WITH C = '' WITH S = '' WITH SS = 'X' WITH D = '' WITH Z_BACK = 'X' *EXPORTING LIST TO MEMORY AND RETURN. AND RETURN. *VIA SELECTION-SCREEN. "VIA SELECTION-SCREEN 表示顯示被呼叫的螢幕 "從被呼叫程式中匯入結果 IMPORT IT_SMZQBB TO IT_SMZQBB111 FROM MEMORY ID G_MEMORY. FREE MEMORY ID G_MEMORY.
這個時候資料會被傳到主程式的
IT_SMZQBB111裡,就可以進行處理了。