SELECT-OPTIONS:仅为itab分配最后一个条目

时间:2014-03-13 12:46:09

标签: abap

在我的选择屏幕中,您可以选择一个radiobutton组,使用哪种数字来选择信息。 (材料编号,施工合同或客户订单)。

选择种类后,用户必须将数字填入相应的选择选项中。 通过这些信息,我选择了我需要的信息,将它们移动到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.

1 个答案:

答案 0 :(得分: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”。或者,我会使用a代替所有条目(无循环)。

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

始终确保驱动程序表中有记录(在本例中为t_afpo),否则会出现性能问题。