[[LOOP>ABAP/LOOP]]命令の中で使用する、キーブレイク時に動作させる命令。
使いどころを押さえれば便利な命令だが、思わぬ動作をすることもあるビギナーは要注意の命令。
* 概要 [#c4b0c5f6]
** 用法 [#f3178f66]
[[LOOP AT>ABAP/LOOP]]の最初に一回だけ実行したい、あるいは最後に一回だけ実行したい、あるいはキーがブレイクした場合にのみ実行したいというシーンで利用する。
使いこなすことができればコーディングの幅が広がることは間違いないのだが、いくつかのお作法があり、これを破ると「コンパイルは通るのに、意図した動作にならない」「仕様変更時に思わぬデグレが起きる」といったことを招きやすいのも事実で、さらにAT~ENDATの間では値がアスタリスクになるという現象も起きるので注意。
以下、お作法および制約というか仕様。
-[[LOOP AT>ABAP/LOOP]]の中で[[内部テーブル>ABAP/内部テーブル]]を[[MODIFY>ABAP/MODIFY]]しない
-[[LOOP AT>ABAP/LOOP]]の中で[[内部テーブル>ABAP/内部テーブル]]を[[DELETE>ABAP/DELETE]]しない
-WHERE句つきの[[LOOP AT>ABAP/LOOP]]の中では使わない
-LOOPでINTOした作業領域(構造)の値を変更しない
-AT~ENDATの間で、値がアスタリスクに化ける(AT~ENDATを抜ければ元通りになる)
** サンプル [#p2cdac94]
*** AT FIRST [#oc6b1b8a]
AT FIRST.
CLEAR : xxx.
ENDAT.
[[LOOP AT>ABAP/LOOP]]の一発目だけ実行したいときに。
これだけなら、[[システム変数>ABAP/システム変数]](SY-LOOPCだっけ?)の判定でよい気がする。
*** AT NEW [#s8a4dbe6]
AT NEW WERKS.
WRITE : WA_MARC-MATNR,
WA_MARC-WERKS.
ENDAT.
キーブレイクしたときに何かしたい場合。
例えば、キーブレイクしたときにだけコードやテキストを書き出す等。
最も利用価値がありながら、油断すると意図しない動きになるので注意すべき命令。
なお、AT NEWを使う際は、指定した項目とそこから左側の項目が判定されるため事前に[[SORT>ABAP/SORT]]する等のケアを忘れずに。
*** END OF xxx [#m5c2ee3d]
AT END OF CHARG.
WRITE : 'Total',
L_AMOUNT.
ENDAT.
連続したキーの終わりにだけ何かしたい場合に使用し、AT NEWと同じくらい利用価値が高い。
メリットや注意点はAT NEWと同じだが、最後に処理するだけあって画面や[[テーブル>SAPのオブジェクト/テーブル]]なんかに結果を書き出すことが多いため、意図しない結果になっていても気づきやすいことが多い。とはいえ、注意。
*** AT LAST [#uee45ab7]
AT LAST.
ULINE.
ENDAT.
[[LOOP AT>ABAP/LOOP]]の最後の処理だったら[[LOOP AT>ABAP/LOOP]]を抜けた直後でもよい気がするが、仕変を入れる際に「ロジックの追加はココより上に入れるんやで」と明示できたりするのがメリットだろうか?あるいは[[SUM>ABAP/SUM]]する?
* その他 [#odda6ec0]
同じATでも、[[AT LINE-SELECTION>ABAP/AT LINE-SELECTION]]、[[AT SELECTION-SCREEN>ABAP/AT SELECTION-SCREEN]]、[[AT USER-COMMAND>ABAP/AT USER-COMMAND]]、[[LOOP AT>ABAP/LOOP]]などについては各ページを参照のこと。
関連する命令には、[[LOOP>ABAP/LOOP]]や[[SUM>ABAP/SUM]]がある。
~
~
CENTER:【スポンサードリンク】
#htmlinsert(amazon_book_sap_system_implement)
~
~
----
#pcomment(reply)