2014-03-13 109 views
3

在我的選擇屏幕上,您可以選擇一個單選按鈕組,選擇哪種類型的數字來選擇信息。 (材料編號,建築合同或客戶訂單)。選擇選項:只有最後一個條目分配給itab

選擇一種後,用戶必須填寫相應的選擇選項中的數字。 有了這些信息,我選擇了我需要的信息,將它們移動到itab't_marc'。 此表與'marc'具有相同的字段。

當用戶在選擇屏幕上選擇「材料編號」時,一切工作正常,並且用戶寫下的每個編號的值都顯示在ALV列表中。

當用其他數字之一進行選擇時,輸出中的值也是正確的,但只有最後指定數字的信息纔會被編輯。

如何將所有數字移動到我的itabs?

,這裏是我的程序代碼的部分(信息必須移動到t_marc):

Selectionscreen

PARAMETERS: p_mat RADIOBUTTON GROUP radi. 
PARAMETERS: p_auf RADIOBUTTON GROUP radi. 
PARAMETERS: p_vbl RADIOBUTTON GROUP radi. 

SELECT-OPTIONS: s_matnr FOR marc-matnr. 
SELECT-OPTIONS: s_aufnr FOR aufk-aufnr. 
SELECT-OPTIONS: s_vbeln FOR vbap-vbeln. 

啓動的選擇

IF p_mat = 'X'. 
    SELECT * FROM marc 
     INTO TABLE t_marc 
      WHERE matnr IN s_matnr 
       AND werks = p_werks. 

    ELSEIF p_auf = 'X'. 
    SELECT * FROM afpo 
     INTO TABLE t_afpo 
      WHERE aufnr IN s_aufnr. 
    LOOP AT t_afpo. 
     SELECT * FROM marc 
     INTO TABLE t_marc 
       WHERE matnr = t_afpo-matnr 
       AND werks = p_werks. 
    ENDLOOP. 

    ELSEIF p_vbl = 'X'. 
    SELECT * FROM vbap 
     INTO TABLE t_vbap 
      WHERE vbeln = s_vbeln-low 
       AND posnr IN s_posnr. 
    LOOP AT t_vbap. 
     SELECT * FROM marc 
     INTO TABLE t_marc 
       WHERE matnr = t_vbap-matnr 
       AND werks = p_werks. 
    ENDLOOP. 

回答

4

你覆蓋每次在這個循環中記錄(和類似的循環)。

LOOP AT t_afpo. 
    SELECT * FROM marc 
    INTO TABLE t_marc 
      WHERE matnr = t_afpo-matnr 
      AND werks = p_werks. 
ENDLOOP. 

「INTO TABLE」每次都會覆蓋。你可以切換到「APPENDING TABLE」。或者,我會使用一個所有條目而不是(無循環)。

SELECT * FROM marc 
    INTO TABLE t_marc 
    FOR ALL ENTRIES IN t_afpo 
    WHERE matnr = t_afpo-matnr 
    AND werks = p_werks. 

請務必確保驅動程序表(本例中爲t_afpo)中有記錄,否則您將遇到性能問題。

+0

它的工作原理!非常感謝你! – Jay

相關問題