Frage

At my selection Screen you can choose with a radio button Group with which kind of number you want to select the information. (material number, construction contract or customer order).

After choosing a kind, the User have to fill in the number(s) into the corresponding select option. With this information I select the information I need an move them to the itab t_marc. This table has the same fields as marc.

When the User choose material number at the selection screen everything works fine and the values to every number the user wrote down is displayed at the ALV-List.

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.

How can I move all numbers to my 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.

start-of-selection

  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.
War es hilfreich?

Lösung

You're overwriting the records every time in this loop (and the similar loops).

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

"INTO TABLE" overwrites every time. You could switch to "APPENDING TABLE." Alternatively, I would use a for all entries select instead (no loop).

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

Always make sure there are records in the driver table (in this case, t_afpo) or you will have performance issues.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top