2014-03-13 76 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

相关问题