トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

ABAP/AT

Last-modified: 2016-04-19 (火) 21:07:51 (2922d)
Top > ABAP > AT


LOOP命令の中で使用する、キーブレイク時に動作させる命令。
使いどころを押さえれば便利な命令だが、思わぬ動作をすることもあるビギナーは要注意の命令。

概要

用法

LOOP ATの最初に一回だけ実行したい、あるいは最後に一回だけ実行したい、あるいはキーがブレイクした場合にのみ実行したいというシーンで利用する。

使いこなすことができればコーディングの幅が広がることは間違いないのだが、いくつかのお作法があり、これを破ると「コンパイルは通るのに、意図した動作にならない」「仕様変更時に思わぬデグレが起きる」といったことを招きやすいのも事実で、さらにAT~ENDATの間では値がアスタリスクになるという現象も起きるので注意。

以下、お作法および制約というか仕様。

  • LOOP ATの中で内部テーブルMODIFY?しない
  • LOOP ATの中で内部テーブルDELETEしない
  • WHERE句つきのLOOP ATの中では使わない
  • LOOPでINTOした作業領域(構造)の値を変更しない
  • AT~ENDATの間で、値がアスタリスクに化ける(AT~ENDATを抜ければ元通りになる)

サンプル

AT FIRST

AT FIRST.
  CLEAR : xxx.
ENDAT.

LOOP ATの一発目だけ実行したいときに。
これだけなら、システム変数(SY-LOOPCだっけ?)の判定でよい気がする。

AT NEW

AT NEW WERKS.
  WRITE : WA_MARC-MATNR,
          WA_MARC-WERKS.
ENDAT.

キーブレイクしたときに何かしたい場合。
例えば、キーブレイクしたときにだけコードやテキストを書き出す等。

最も利用価値がありながら、油断すると意図しない動きになるので注意すべき命令。
なお、AT NEWを使う際は、指定した項目とそこから左側の項目が判定されるため事前にSORT?する等のケアを忘れずに。

END OF xxx

AT END OF CHARG.
  WRITE : 'Total',
          L_AMOUNT.
ENDAT.

連続したキーの終わりにだけ何かしたい場合に使用し、AT NEWと同じくらい利用価値が高い。
メリットや注意点はAT NEWと同じだが、最後に処理するだけあって画面やテーブルなんかに結果を書き出すことが多いため、意図しない結果になっていても気づきやすいことが多い。とはいえ、注意。

AT LAST

AT LAST.
  ULINE.
ENDAT.

LOOP ATの最後の処理だったらLOOP ATを抜けた直後でもよい気がするが、仕変を入れる際に「ロジックの追加はココより上に入れるんやで」と明示できたりするのがメリットだろうか?あるいはSUMする?

その他

同じATでも、AT LINE-SELECTIONAT SELECTION-SCREENAT USER-COMMANDLOOP ATなどについては各ページを参照のこと。

関連する命令には、LOOPSUMがある。




【スポンサードリンク】
  





コメントはありません。 Comments/ABAP/AT?

お名前: