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

ABAP

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

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

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命令

SELECT-OPTIONS命令と合わせて覚えておきたいのがPARAMETERS命令。SELECT-OPTIONS命令と同じように選択画面内に選択項目を作成する命令です。

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

構文ルール: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命令とレンジテーブル

PARAMETERS命令と、SELECT-OPTIONS命令の違いで理解しておきたい重要なポイントは、SELECT-OPTIONS命令が生成するデータオブジェクトはレンジテーブル型になるという点です。

レンジテーブルとは

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

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

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

FORの後で指定するデータ型は、このレンジテーブルの「HIGH」項目と「LOW」項目のデータ型になります。単一項目のPARAMETERS命令とはこの点で大きく異なりますのでしっかり区別して理解しておきましょう。

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                       .   "販売伝票タイプ
OBLIGATORYY

上記の通りでコーディングすると、入力項目「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:複数選択の禁止

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

そのため、このオプションを利用した場合はFROM~TOで指定するか、FROMだけを指定する入力しか行えなくなります。

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         .   "販売伝票タイプ

つまり、PARAMETRES命令で定義したときと画面上は同じような表示になります。

SELECT-OPTIONS:サンプルコード

最後に、より実践的に理解できるよう最後に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.

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

SAP/ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    アウトプットは「最強のインプット」である!
  2. 備忘:忘れたとしても後から見返せるように。
    未来の自分への「お手紙」を書いています。
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    あなたの知識は誰かにとっての「価値ある情報」です。

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
ビズドットオンラインをフォローする
blank
ビズドットオンライン
タイトルとURLをコピーしました