【ABAP】SELECTION-SCREEN

概要

選択画面を作成する上で主要な命令文は「PARAMETERS」「SELECT-OPTIONS」「SELECTION-SCREEN」の3つとなります。
今回解説する「SELECTION-SCREEN」の役割は選択画面の見栄えを整えたり新たな画面を追加したりとレイアウトを形成する命令となります。

「SELECTION-SCREEN」の後に記述する内容によって動作が異なりその種類は多くあります。
例えば別の選択画面の定義や選択画面に下線やコメントを追加したりなど。
種類が多いですが全て覚える必要はありません。見栄えが変わり分かりやすいためどの様な事が出来るのかを覚えると良いです。
命令文と特徴を同時に以下解説していきます。

命令文と特徴

SELECTION-SCREEN命令の命令文と特徴を解説していきます。
サンプルコーディングを実際に動かしてみた方が分かりやすいかもしれないです。

ブロック

以下命令文の…に「PARAMETERS」「SELECT-OPTIONS」命令を組込みグループ化する様に使用します。この命令文だけでは見た目は変わりませんがロジックでブロックとして別れている事が分かります。
ブロック化することでイベント処理「AT SELECTION-SCREEN ON BLOCK ブロック名」で入力項目の整合性チェックなどが可能です。
そのため関連性のある項目をブロック化する様に意識すると良いです。
補足として「NO INTERVALS」を語尾に付けることでブロック単位で項目を非表示にすることが可能です。

命令文

SELECTION-SCREEN BEGIN OF BLOCK ブロック名.

SELECTION-SCREEN END OF BLOCK ブロック名.

ブロック(フレーム)

「ブロック」で説明した内容と同じですが以下命令文は選択画面上にフレーム(枠線)を表示することができます。
命令文は先ほどの「ブロック」と同じで語尾に「WITH FRAME」をくっ付けただけです。
選択画面からも1つのブロックが分かります。

命令文

SELECTION-SCREEN BEGIN OF BLOCK ブロック名 WITH FRAME.

SELECTION-SCREEN END OF BLOCK ブロック名.

ブロック(タイトル)

「ブロック(フレーム)」で説明した内容に加え、タイトルを表示させることが出来ます。
タイトルを付ける場合は必ず「WITH FRAME」の後に定義する必要があります。
タイトル名の指定のやり方は大きく2つあり、1つ目はテキストシンボルとなります。
2つ目は最大8文字の項目名を定義し、その項目名に対してテキストを代入するやり方となります。
基本的にはテキストシンボルのやり方が一般的です。

命令文

SELECTION-SCREEN BEGIN OF BLOCK ブロック名 WITH FRAME TITLE タイトル名.

SELECTION-SCREEN END OF BLOCK ブロック名.

コメント

選択画面上にコメントを表示する事ができます。
命令文の”/”と位置については使用しなくても良いです。
“/”については新規行にコメントを追加し、”/”なしの場合は現在行に追加されます。
位置についてはコメントの開始位置(列)となります。
長さについてはコメントの長さを表します。
コメントについては上記「ブロック(タイトル)」のタイトル名の指定とやり方が同様になります。
基本的にはテキストシンボルのやり方が一般的です。

命令文

SELECTION-SCREEN COMMENT /位置(長さ) コメント.

空白行

選択画面上に空白行を表示する事ができます。
数字の数だけ空白行を追加します。指摘できる数字は1から9までとなっています。
指定しなかった場合は1を指定した場合と同じとなります。

命令文

SELECTION-SCREEN SKIP 数字.

下線

選択画面上に下線を表示する事ができます。
コメントと同様に”/”、位置、長さを指定する事ができます。
指定しない場合はその行の長さ分下線が生成されます。

命令文

SELECTION-SCREEN ULINE /位置(長さ).

1行表示

1行内に複数のエレメント(PARAMETERSやSELECT-OPTIONS、コメント)などを表示する事ができます。
…内に複数エレメントを指定します。
しかし、選択テキストは表示されなくなるため上記のコメントやこの後解説するPOSITIONを組合わせる事で入力名称を表示させます。
表示位置を指定する際に”/”は使用しないでください、エラーとなります。

命令文

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN END OF LINE.

位置

選択画面上のエレメントの位置を特定します。
値の数字を指定する場合は1から83の値までとなります。
POS_LOWは1番目の入力項目が標準として表示される位置を指定します。
POS_HIGHは2番目の入力項目が標準として表示される位置を指定します。
1番目の入力項目、2番目の入力項目については、「SELECT-OPTIONS」のFROM(1番目)とTO(2番目)の項目位置で最適な位置が指定されるイメージとなります。

命令文

SELECTION-SCREEN POSITION 値(数字またはPOS_LOW、POS_HIGH).

ボタン

選択画面上にボタンを表示する事ができます。
命令文の「/位置(長さ) ボタン名」はコメントの内容と同様となります。
機能コードについては最大20文字まで指定することができます。
機能コードを用いる場合は標準テーブル「SSCRFIELDS」をTABLES命令で定義する必要があります。

その理由として機能コードを割当てたボタンを押下した時にAT SELECTION-SCREENのイベント処理にて標準テーブル「SSCRFIELDS」の項目「UCOMM」に機能コードが転送されます。
転送された値よりボタンが押下されたことを判断するためです。
イメージがしにくいと思いますが詳しくはコーディングを確認してください。

命令文

SELECTION-SCREEN PUSHBUTTON /位置(長さ) ボタン名 USER-COMMAND 機能コード.

モーダルダイアログボックス

モーダルダイアログボックスはメインとなる選択画面(標準選択画面)上に表示させる別画面となります。
要約するとポップアップ画面となります。この時、標準選択画面は非活性の状態となります。
タイトル名は「ブロック(タイトル)」と同様の指定の仕方となります。
Dynpro番号は最大4桁の番号を指定する必要があります。
ただし、レポートプログラムで標準選択画面として既にDynpro番号を1000と指定されているため、ポップアップ等の別画面を定義する場合は1000以外を指定する必要があります。

命令文

SELECTION-SCREEN BEGIN OF SCREEN Dynpro番号 TITLE タイトル名 AS WINDOW.

SELECTION-SCREEN END OF SCREEN Dynpro番号.

定義したモーダルダイアログボックスはCALL SELECTION-SCREEN命令にて呼出す事が可能です。
COL1,LINE1,COL2,LINE2については画面の表示サイズ?を決める役割を果たします。
画面左上の列をCOL1、行をLINE1で値によって決定され、COL2,LINE2はポップアップ画面の右上部分の列と行を値によって決定します。(実際に値を指定したが基準が分からず、AT 10 10が一般的かと思われます。サイズが合わない場合は数字を増やしたり減らしたり感覚で指定してください。)
「ENDING AT COL2 LINE2」について指定しない場合は自動で適切なサイズに決定するため、基本指定しない事の方が多いです。

命令文

CALL SELECTION-SCREEN Dynpro番号 STARTING AT COL1 LINE1
ENDING AT COL2 LINE2.

従属画面

従属画面は選択画面内に表示する別画面となります。
要約すると埋込み画面となります。
埋込みである事からも分かりますがCALL SELECTION-SCREEN命令による呼出しは使用できないです。
使い方は受注伝票の様に複数タブを作成することができます。

命令文

SELECTION-SCREEN BEGIN OF SCREEN Dynpro番号 AS SUBSCREEN.

SELECTION-SCREEN END   OF SCREEN Dynpro番号.

コーディング

上記「命令文と特徴」で説明した内容は以下のサンプルコーディングで全て使用しています。
レポートプログラムに貼付けるだけで動作する様に作成しているためテキストシンボルを使用しないで作成しています。

サンプルコード実行時の選択画面です。

標準選択画面
ポップアップ画面
詳細画面
TABLES: SSCRFIELDS.

DATA:
  W_ERDAT TYPE ERDAT.  "SELECT-OPTIONS用

*ブロック1
SELECTION-SCREEN BEGIN OF BLOCK BL01.
PARAMETERS:
  CB01 AS CHECKBOX,
  CB02 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK BL01.

*ブロック2 フレーム(枠線)
SELECTION-SCREEN BEGIN OF BLOCK BL02 WITH FRAME.
PARAMETERS:
  CB03 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK BL02.

*ブロック3 フレーム(枠線)とタイトル
*SELECTION-SCREEN BEGIN OF BLOCK BL03 WITH FRAME TITLE TEXT-01. "テキストシンボルの場合
SELECTION-SCREEN BEGIN OF BLOCK BL03 WITH FRAME TITLE BLTITLE1.
PARAMETERS:
  P_TEST01 TYPE BUKRS.
SELECT-OPTIONS:
  S_ERDAT1 FOR W_ERDAT.
SELECTION-SCREEN END OF BLOCK BL03.

*選択画面上にコメントを表示
SELECTION-SCREEN COMMENT /10(20) COMM01.
*選択画面上に空白行を追加
SELECTION-SCREEN SKIP 2.
*選択画面上に下線を引く
SELECTION-SCREEN ULINE.
*選択画面上に下線を引く(長さ指定可)
SELECTION-SCREEN ULINE /5(10).
*1行で表示
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (8) COMM03.
SELECTION-SCREEN POSITION 9.
PARAMETERS:P_TEST06 TYPE BUKRS.
*選択画面上にボタンを定義
SELECTION-SCREEN PUSHBUTTON 20(10) BUTTON1 USER-COMMAND CL01.
SELECTION-SCREEN PUSHBUTTON 31(10) BUTTON2 USER-COMMAND CL02.
SELECTION-SCREEN END OF LINE.

*ポップアップ画面
SELECTION-SCREEN BEGIN OF SCREEN 2000 TITLE SCTITLE1 AS WINDOW.
SELECTION-SCREEN COMMENT /5(20) COMM02.
PARAMETERS:
  P_TEST02 TYPE BUKRS,
  CB04     AS CHECKBOX.
SELECTION-SCREEN END OF SCREEN 2000.

*詳細画面
SELECTION-SCREEN BEGIN OF SCREEN 3000.
PARAMETERS:
  P_TEST03 TYPE BUKRS.
SELECT-OPTIONS:
  S_ERDAT3 FOR W_ERDAT.
SELECTION-SCREEN:
  BEGIN OF TABBED BLOCK TAB01 FOR 10 LINES,
    TAB (20) TAB11 USER-COMMAND TCL1 DEFAULT SCREEN 4000,
    TAB (20) TAB12 USER-COMMAND TCL2 DEFAULT SCREEN 4100,
  END   OF BLOCK TAB01.
SELECTION-SCREEN END OF SCREEN 3000.

*タブ画面1(従属画面)
SELECTION-SCREEN BEGIN OF SCREEN 4000 AS SUBSCREEN.
PARAMETERS:
  P_TEST04 TYPE BUKRS.
SELECT-OPTIONS:
  S_ERDAT4 FOR W_ERDAT.
SELECTION-SCREEN END   OF SCREEN 4000.

*タブ画面2(従属画面)
SELECTION-SCREEN BEGIN OF SCREEN 4100 AS SUBSCREEN.
PARAMETERS:
  P_TEST05 TYPE BUKRS.
SELECT-OPTIONS:
  S_ERDAT5 FOR W_ERDAT.
SELECTION-SCREEN END   OF SCREEN 4100.

*----------------------------------------------------------------------*
*  INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
  BLTITLE1 = 'TITLE1'.
  SCTITLE1 = 'ポップアップタイトル'.
  COMM01   = 'コメントが書ける'.
  COMM02   = 'モーダルダイアログボックス'.
  COMM03   = 'パラメータ'.
  BUTTON1  = 'ポップアップ'.
  BUTTON2  = '詳細画面'.
  TAB11    = 'タブ1'.
  TAB12    = 'タブ2'.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
* ボタンが押された場合
  CASE SSCRFIELDS.
*   ポップアップボタンを押下
    WHEN 'CL01'.
      CALL SELECTION-SCREEN 2000 STARTING AT 10 10.
      "ENDING AT 100 100.
*   詳細画面ボタンを押下
    WHEN 'CL02'.
      CALL SELECTION-SCREEN 3000.
  ENDCASE.

*----------------------------------------------------------------------*
*  START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
*入力した値を出力
  WRITE:
    /'P_TEST01(初期画面)    ', P_TEST01,
    /'P_TEST02(ポップアップ)', P_TEST02,
    /'P_TEST03(詳細画面)    ', P_TEST03,
    /'P_TEST04(タブ1画面)  ', P_TEST04,
    /'P_TEST04(タブ2画面)  ', P_TEST05.