1

ループステートメント中にこの問題があります。

私はループを持っています:

loop at lt assigning <ls> where <condition> (im using loop instead of reaf table coz i need to use GE and LE logical statements)
     if sy-subrc = 0.
      result = <ls>-FIELD.
     else.
      result = ''.
     endif.
endloop.

問題は、sy-subrc チェックをスキップすることです。ループが実行され、レコードが見つからない場合 (sy-subrc = 4)、結果フィールドに '' が代入されず、代わりに最初のステートメントが保持されます。

どうしたの?

4

1 に答える 1

3

戻りコードはループの後に設定されます (forselectおよび他のループ構造と同じ)。したがって、次のようなものが必要です。

 loop at lt assigning <ls> where <condition>"(im using loop instead of reaf table coz i need to use GE and LE logical statements)
 endloop.
 if sy-subrc = 0.
  result = <ls>-FIELD.
 else.
  result = ''.
 endif.

この場合、ステートメントを使用する必要がありますread(GE/LE の問題について言及しています - これは別の質問に値するかもしれません)。

これで、すべてのエントリをループします。

別の方法として、最初のエントリの後で停止することもできます。

result = ''. "Initialize for not-found-entry.
loop at lt assigning <ls> where <condition>.
  result = <ls>-FIELD. "Take the found entry
  exit. "Stop after first entry
endloop.

がなければexit、最後のエントリを取得します。順序が関連している場合は、関連する並べ替えを追加することもできます。

于 2015-12-06T19:12:17.537 に答える