ABAP

【SAP】SY-SUBRC?覚えておきたいシステム項目4選

ABAPのコーディングをするうえで、絶対に欠かせない知識が「システム項目」です。

IF文などで、よく「SY-SUBRC = 0」とか出てきますよね。あと「サブアールシーが~」なんていう会話も耳にしたことがあると思います。ABAP的には「SY-SUBRC」はシステム項目と呼ばれる重要かつ常識的な知識です。

普段の会話でもよく出てきたり、プログラムの中に多数登場するにも拘わらず、システム項目について分かりやすく説明しているサイトが無かったので、このページで整理して解説していきたいと思います。

システム項目とは?

ABAPには、システムデータ項目と呼ばれる特殊な変数が存在します。

これは、DATA命令で宣言する変数とは違い予め自動的にシステムによって設定されているものです。システム項目という単語が出たら「システム内で予め設定されている変数」のことである、と理解しましょう。

事前に何の指定をしなくても例外なく変数として存在しているのがシステム項目なので、その変数の名前も不変です。

したがって、ABAPerの会話では、このシステム項目の名称が常識として出てくるので初心者は事前に知っておかないと恥ずかしい思いをするかもしれません。

以下では、ABABerの常識である代表的なシステム項目を上げています。

DATA命令で宣言する変数、というワードに引っかかった方は下記ページを読んでから以下に進むことをお勧めします。

SY-SUBRC

タイトルでも入れているほど、超・代表的なシステム項目です。

RCは”Return Code”の略です。

その名の通り、処理の結果がその変数に値として入っています。処理の結果といっても、SELECT文などで抽出した結果が入るのではなく、その処理が成功したか否かが入ります。

処理完了の「”SY-SUBRC = 0″」

処理が正常に完了した場合、変数には0が入ります。

例えば、SELECT文で目的のデータが取得された場合、SY-SUBRCには”0″がセットされます。

逆に0以外が入っていれば、処理が正常に終了しなかったことを示します。つまり、何らかの理由でデータが抽出できなかったことを意味します。

IF SY-SUBRC = 0.

よく出てくる構文ですね。

もし処理が正常に完了したら、、、という意味です。

逆に正常終了しない場合は

IF SY-SUBRC <> 0.

と記述し、続けてエラーメッセージの出力処理や、処理中段のロジックを記述するのが一般的な例です。

SY-SUBRC = 4

SY-SUBRC = 4 は、処理が正常に終了しない場合にセットされます。

では、なぜ実際のコーディングでは「SY-SUBRC = 4」ではなく、「SY-SUBRC <> 0」と記載されるのでしょうか。

結論、SY-SUBRCは1も2も3も4も取りうるからです。正常終了の場合は常に0と決まっていますが、正常ではない場合はより細かく異常の値をシステムが制御しているのです。

1、2、3、4―。これらはどれも全て正常に終了しない場合にセットされる可能性があり、実際にどれがセットされるのかは状況と処理内容により異なるので、とりあえず正常終了以外を許容しない場合を想定して「SY-SUBRC <> 0」をコーディングするのです。

そして、通常の実務レベルでは「1~4」の区別はそこまで必要とされません。

場合によっては必要となるかもしれませんが、必要となったタイミングで調べればOKです。

SY-DATUM

現在の日付が入ります。

例えば選択画面の初期値に本日日付を入れるようなコードを書く場合、この変数が役立ちます。

SY-UNAME

SY-UNAMEは、ログインしているユーザIDが入っています。

これも選択画面の初期値にログインユーザのIDを入れておくなど、使えると便利な変数です。

合わせて覚えておきたい項目はこちら

以上3つのシステム項目は、使用頻度が高いものですが、そのほかにも「知っていると便利」なシステム項目が存在しています。

随時、更新していきますので是非この機会に覚えてみてはいかがでしょうか。

SY-DBCNT

SY-DBCNTは、オープンSQLでデータベースを操作した際、処理に成功したレコード数を保持するためのシステム項目です。わかりやすい例でいえば、SELECT-SINGLE命令を発して、レコードの取得に成功した場合、SY-DBCNTには「1」が入ります。

レコード処理の成功可否については、SY-SUBRCに値が入ります。SY-DBCNTは、あくまでも「レコードの処理件数」が入ります

SY-BATCH

SY-BATCHはプログラムの実行方法、すなわち「オンライン実行」か「バックグラウンド実行」かを判別するシステム項目です。

バックグラウンド実行の場合に「SY-BATCH」は「X」が設定されます。オンライン実行の場合はブランクです。

オンライン実行、バックグラウンド実行について詳しく知りたい方はこちらをご覧ください。

システム項目に関するFAQ

システム項目は別の値で上書きして良いか?

結論、システム項目は基本的に上書きはしないほうが良いです。プログラム的には明示的に値を上書きすることは可能なのですが、予期しないエラーが発生することがあります。

また、そもそもシステム項目は予め設定されていることがメリットなので、そこを上書きすることはそもそもの思想と反してしまいます。

基本、明示的にシステム項目への値を設定するのではなく、参照項目として利用するのが原則です。

システム項目を探す方法

上記代表的な3選を解説しましたが、その他の項目はどうすればよいでしょうか?ググるのもありですが、ご存知のようにSAPに関する知見はあまり存在しませんので、SE11(ABAPディクショナリ)からテーブル「SYST」を検索する方法でSY-XXXXをお探しください。

本ページでも、随時一覧を作りその意味と簡単な使用例をアップデートしますので、お楽しみにお待ちください。

トリビア

上記の「システム項目を探す方法」を解説した時点で「ピンときた」方もいらっしゃるかもしれませんが、システム項目は「SYST」という構造データの一部です。

ゆえに、システム項目を調べるときは「SYST」というデータベースを調べるわけです。

※構造?変数? 疑問に思った方は以下のページも参考にお読みください。

最後に

① システム項目は事前に設定されている
  (宣言する必要がない!)

② システム項目は常に設定されている

③ システム項目を上書きしない

システム項目については、上記3つのポイントを押さえておきましょう。