3

私の選択画面では、どの種類の番号で情報を選択したいかグループをラジオボタンで選択できます。(材料番号、工事契約、または顧客注文)。

種類を選択した後、ユーザーは対応する選択オプションに数字を入力する必要があります。この情報を使用して、必要な情報を選択し、それらを itab に移動しますt_marc。このテーブルには と同じフィールドがありますmarc

ユーザーが選択画面で品目番号を選択すると、すべてが正常に機能し、ユーザーが書き留めたすべての番号の値が ALV リストに表示されます。

他の数値で選択した場合、出力の値も正しいですが、最後に表示された数値までの情報のみが編集されます。

すべての数字を 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」は毎回上書きします。「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) にレコードがあることを常に確認してください。そうしないと、パフォーマンスの問題が発生します。

于 2014-03-13T14:08:03.437 に答える