【ABAP】SY-SUBRC?1分で学ぶシステム項目(変数)の役割と使い方

ABAP

ABAPのコーディングをしていく上で必ず1度は必要になる知識が「システム項目」です。

システム項目はSAP側であらかじめ値が設定されている項目であり、ABAPのプログラム実行時にはこのシステム項目を変数のように利用するシーンが多々あります。

ABAPを読んだことがある人であれば「SY-SUBRC(サブアールシー)」という言葉を聞いたことがある人もいるかもしれません。このページではABAPのおけるシステム項目の意味と使い方、覚えておきたい代表的なシステム項目を解説します。

このページで学べる内容
  • システム項目とは何か?
  • SY-SUBRCとは?
  • これだけは覚えておきたいシステム項目
  • システム項目利用時の注意点

ABAPerを目指す方や、SAPに関係する仕事をしている方であれば知らないと恥ずかしい超・基本知識ばかりですので是非最後までご覧ください。

システム項目(システム変数)とは?

システム項目とは、プログラム実行時にあらかじめ自動的にシステムによって値が決められている変数のようなものです。

本来、変数はDATA命令を用いて事前に定義しておく必要がありますが、このシステム項目は宣言する必要がありません。どのようなプログラムを実行する際でも、必ずあるルールに沿って値が自動的に代入されていきます。

ABAPをコーディングする際には、このシステム項目の値を利用して条件を分岐させたり、画面に値を表示させたりすることができるため、使いどころがたくさんあります。

以下では、ABABerとして知らないと恥ずかしい代表的なシステム項目の意味と使い方の例を解説していきます。

SY-SUBRC

もっとも基本的で、もっとも利用頻度の高いシステム項目です。

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

処理成功:SY-SUBRC = 0

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

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

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


IF SY-SUBRC=0.


上記のように、IF文とセットで利用することが多いです。

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

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


IF SY-SUBRC <> 0.


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

処理失敗:SY-SUBRC = 4

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

ただし、実際のコーディングでは「SY-SUBRC = 4」ではなく、「SY-SUBRC <> 0」と記述することが普通です。

理由は、処理失敗の場合に「SY-SUBRC」は1・2・3にもなる可能性があるためです。正常終了の場合は常に0と決まっていますが、正常ではない場合はそのパターンに沿って様々な値が入りえます。

通常の実務レベルでは「1~4」の区別はそこまで必要とされませんが、0以外であれば何かしらのエラー状態となっていることが分かります。そのため、基本は「SY-SUBRC<>0」で例外処理へ分岐させます。

補足:ABAPにboolean型はある?

ここまで解説してきた通り、SY-SUBRCは他のプログラミング言語でいう「boolean」型の変数のような使い方がされていることが分かります。

ABAPにBoolean型のデータオブジェクトは存在しないため、このシステム項目「SY-SUBRC」が利用されます。主に、IF文とセットで利用されるのが普通です。

SY-DATUM

現在の日付が入ります。

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

また、本筋とは異なりますが、システム日付を知りたい場合なんかにも使えます。

SY-UNAME

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

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

SY-DBCNT

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

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

SY-BATCH

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

バックグラウンド実行の場合に「SY-BATCH」は「X」が設定されます。オンライン実行の場合はブランクです。バックグラウンド実行のみを許可しているプログラムでは、この「SY-BATCH」の値が「X」のみの場合に実行を許可する仕様にしています。

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

SY-TABIX

SY-TABIXは、現在ループしているテーブルの対象行を格納する項目です。

例えば、内部テーブルの10行目をループしている最中であれば、SY-TABIXには「10」が設定されます。

システム項目に関するFAQ

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

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

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

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

システム項目を探す方法

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

トリビア:覚えておくと1ランクUP

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

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

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


ABAPを1から学習したい方は

ABAPを1から学習したい方は、以下の記事をご覧ください。

こちらの記事では、ABAPを用いて簡単な機能を実装できるようにするための必須知識を解説しております。今、本サイトで一番人気の記事ですので是非合わせてご覧ください。

タイトルとURLをコピーしました