3

在我的选择屏幕上,您可以使用单选按钮组选择要选择信息的类型。(材料编号、施工合同或客户订单)。

选择种类后,用户必须在相应的选择选项中填写数字。有了这些信息,我选择了我需要的信息,并将它们移动到 itab t_marc。此表具有与 相同的字段marc

当用户在选择屏幕上选择材料编号时,一切正常,用户记下的每个编号的值都显示在 ALV 列表中。

When selecting by one of the other numbers, the values in output are also right, but only the information to the last denoted number will be edited.

如何将所有数字移动到我的 itabs?

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

1 回答 1

5

您每次都在此循环(以及类似的循环)中覆盖记录。

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

“INTO TABLE”每次都会覆盖。您可以切换到“附加表”。或者,我将使用 a for all entries select 来代替(无循环)。

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

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

于 2014-03-13T14:08:03.437 回答