【ABAP】SELECT-OPTIONS命令の使い方を3分で解説

ABAP

本ページでは、ABAP初心者向けに選択画面作成時に利用する命令 ”SELECT-OPTIONS”について説明します。

SELECT-OPTIONS命令は、SAPの画面項目を定義する命令。以下のサンプル画面の中における項目「連番」「処理ステータス」などはSELECT-OPTIONS命令によって定義されています。

このページでは、SELECT-OPTIONS命令の意味や使い方を1から解説していきます。

このページで学べる内容
  • SELECT-OPTIONS命令の意味と使い方・構文ルール
    • PARAMETERS命令との違い
  • SELECT-OPTIONS命令の注意点―レンジテーブルについて
  • SELECT-OPTIONS命令各種オプション
    • OBLIGATORY:必須入力
    • NO-DISPLAY:項目の非表示
    • NO-EXTENSION:複数選択の禁止
    • NO-INTERVALS:2つめの項目が非表示

ABAPエンジニアを目指す方であれば、絶対に知っておきたい重要知識です。3分ぐらいで読めますので、是非最後までご覧ください。

スポンサーリンク
スポンサーリンク

SELECT-OPTIONS命令とは?

SELECT-OPTIONS命令は、画面の項目を定義する命令です。

上記画像の「連番」「処理ステータス」「販売伝票タイプ」は、SELECT-OPTIONS命令で定義されている項目です。

このような、FROM~TO指定できる項目を作るのが、SELECT-OPTIONS命令です。

※ちなみに、「販売組織」項目はPARAMETERS命令で定義されています。

PARAMETERS命令

PARAMETERS命令も、選択画面内に選択項目を作成する命令です。

SELECT-OPTIONS命令と異なり、入力項目は1か所のみ(つまり範囲指定・複数検索が行えません)です。

SELECT-OPTIONS命令は、範囲指定(FROM~TO指定)ができる入力項目を定義できる命令です。両者を区別して整理しておきましょう。

構文ルール:SELECT-OPTIONS

それでは、早速構文ルールを学習していきましょう。

構文ルール

SELECT-OPTIONS (項目名) FOR (データオブジェクト).

PARAMETERS命令と異なるのが、TYPEオプションではなくFORオプションを使うこと。そして、FORの後にはデータ型ではなく、変数などのデータオブジェクトを指定する必要があること。(データ型を指定できない理由は次の章で詳しく説明します。)

早速サンプルコードを見てみましょう。

SELECT-OPTIONS: 
   S_SEQNO   FOR  GW_SCREEN-SEQNO                       ,   "連番"
   S_STATUS  FOR  GW_SCREEN-STATUS OBLIGATORY           ,   "処理ステータス"
   S_AUART   FOR  GW_SCREEN-AUART                       .   "販売伝票タイプ"

SELECT-OPTIONSに続けて、"項目名" を指定します。(上記サンプルコードで言えば、"S_SEQNO" "S_STATUS" "S_AUART")

※名称は、8文字以内でなければいけませんが、それ以外の制約は特にありません。コーディング規約に沿って分かりやすい名称を指定すればOK。

選択基準は普通複数あるので、実際の現場ではチェーン命令で記載するのが普通です。

チェーン命令とは

同じ命令が続く場合に1つの文で記述することが可能です。


例)チェーン命令を使わないで書いた場合

  DATA GW_SCREEN1 TYPE  IT_TBL001.
  DATA GW_SCREEN2 TYPE IT_TBL002.


例)上記例をチェーン命令で書いた場合

  DATA:
  GW_SCREEN1 TYPE  IT_TBL001,
  GW_SCREEN2 TYPE  IT_TBL002
,
  GW_SCREEN3 TYPE  IT_TBL003.


基本的な考え方はDATA命令とあまり違わないように感じるかもしれません。DATA命令の場合は、オペラント部の指定が "TYPE" であったのに対して、SELECT-OPTIONSの場合は "FOR" が続き点だけが異なるように見えます。

実は、このTYPEとFORの違いが重要です。

この微妙な違いの理解が、SELECT-OPTIONS命令では最も重要なポイントになります。

SELECT-OPTIONS命令「レンジテーブル」

SELECT-OPTIONS命令で定義された項目は、すべてレンジテーブルを参照します。

レンジテーブルとは

その名の通り、Renge(日本語訳:範囲)を保持するテーブルです。

以下のように、4つの項目から成立する内部テーブルの一種です。

上記レンジテーブルには、1-30の値が格納されているということを示します。

FORの後で指定するデータ型は、このレンジテーブルの「HIGH」項目と「LOW」項目のデータ型。

これで、SELECT-OPTIONS命令の基本形の理解はOK。

ここからは、各種オプション(選択項目への入力必須化など)を実装する方法を解説します。

OBLIGATORY:必須入力

このオプションは、入力項目の「FROM」の部分への入力を必須化します。

SELECT-OPTIONS: 
   S_SEQNO   FOR  GW_SCREEN-SEQNO                       ,   "連番
   S_STATUS  FOR  GW_SCREEN-STATUS OBLIGATORY           ,   "処理ステータス
   S_AUART   FOR  GW_SCREEN-AUART                       .   "販売伝票タイプ

上記の通りでコーディングすると、入力項目「S_STATUS」の最初の入力項目(FROM)が必須となります。(必須入力項目は✅マークが付与されます。)

必須化されると、当該項目が未入力の状態でプログラムを実行することはできません。

NO-DISPLAY:項目の非表示

このオプションを利用すると、入力項目が画面上に表示されなくなります。

SELECT-OPTIONS: 
   S_SEQNO   FOR  GW_SCREEN-SEQNO  NO-DISPALY           ,   "連番
   S_STATUS  FOR  GW_SCREEN-STATUS OBLIGATORY           ,   "処理ステータス
   S_AUART   FOR  GW_SCREEN-AUART                       .   "販売伝票タイプ

上記のようにコーディングすると、項目「S_SEQNO」は画面上に表示されなくなります。

ただし、これはあくまでも非表示にするだけであるという点に注意が必要。

NO-EXTENSION:複数選択の禁止

このオプションを利用すると、画面から複数選択を行うための押ボタンが消えます。

つまり、PARAMETRES命令で定義したときと同じ動きになります。

SELECT-OPTIONS: 
   S_SEQNO   FOR  GW_SCREEN-SEQNO  NO-DISPALY           ,   "連番
   S_STATUS  FOR  GW_SCREEN-STATUS OBLIGATORY           ,   "処理ステータス
   S_AUART   FOR  GW_SCREEN-AUART  NO-EXTENSION         .   "販売伝票タイプ

NO-INTERVALS:2つめの項目が非表示

このオプションを利用すると、2つめの入力項目(TO)が非表示になります。

SELECT-OPTIONS: 
   S_AUART   FOR  GW_SCREEN-AUART  NO-INTERVALS         .   "販売伝票タイプ

使いどころは、分かりません。

SELECT-OPTIONS:サンプルコード

最後に、より実践的な内容としてサンプルコードを見ていきます。

SELECTION-SCREEN BEGIN OF BLOCK MAIN WITH FRAME TITLE TEXT-S01.

* 会計年度
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) TEXT-S03 FOR FIELD GSOP_GJAHR.
SELECT-OPTIONS GSOP_GJAHR FOR GDF_GJAHR OBLIGATORY.
SELECTION-SCREEN END OF LINE.

* 伝票タイプ
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (10) TEXT-S04 FOR FIELD GS_BLART.
SELECT-OPTIONS GS_BLART FOR GDF_BLART.
SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK MAIN.

ABAPを1から勉強したい方は

ABAPを1から学習したい方のために、ABAPの基本知識・基礎概念を1つのページにまとめました。

現在、完全無料で公開しておりますので、是非ご覧ください!

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