1. 程式人生 > 其它 >ABAP SUMBIT程式的程式裡也有SUBMIT的處理方式

ABAP SUMBIT程式的程式裡也有SUBMIT的處理方式

一般來說,程式呼叫其他程式時候可以用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_MATNR
WITH 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(30VALUE '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裡,就可以進行處理了。