トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

ABAP/SELECTION-SCREEN の変更点

Top/ABAP/SELECTION-SCREEN

[[選択画面>ABAP/選択画面]]のレイアウトを作ったりいじったりする命令。

----
#contents
----

* 概要 [#v3fc8d0b]
** 用法 [#l2f96b3f]
基本的に、[[選択画面>ABAP/選択画面]]で色々やろうと思ったら、[[PARAMETERS>ABAP/PARAMETERS]]と[[SELECT-OPTIONS>ABAP/SELECT-OPTIONS]]とこの命令になる。

[[Dynpro>ABAP/Dynpro]]では各パーツをレイアウトエディタで作って調整するが、[[選択画面>ABAP/選択画面]]においては、この命令なくては成立しないくらい重要な命令。

凝ったことをやるなら[[Dynpro>ABAP/Dynpro]]で組めよという話になるが、「そこまででもないけど、あんまり見た目がプアなのもねぇ」って場合も多いので、使う機会は多い。

** サンプル(選択画面の登録) [#p1e491a2]
*** Dynproとしての選択画面の登録 [#nbb04e35]
 SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) TITLE (タイトル)

これが最もよくある使い方かと思う。
タイトルは、[[テキストシンボル>ABAP/テキストシンボル]]を使うのがセオリー。
タイトルは、[[テキストシンボル>ABAP/テキストエレメント]]を使うのがセオリー。

 SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) AS WINDOW

モーダルダイアログボックスとして使う場合。

 SELECTION-SCREEN BEGIN OF SCREEN 9000 TITLE TEXT-010 AS WINDOW. 
   PARAMETERS P_UNAME TYPE SY-UNAME. 
 SELECTION-SCREEN END   OF SCREEN 9000. 

 CALL SELECTION-SCREEN '9000' STARTING AT 10 10. 

こんな感じで予め定義しておき、[[CALL SELECTION-SCREEN>ABAP/CALL SELECTION-SCREEN]]命令で呼び出す。

*** 従属画面としての選択画面の登録 [#v18858bb]
 SELECTION-SCREEN BEGIN OF SCREEN (Dynpro番号) AS SUBSCREEN 
 
 SELECTION-SCREEN END   OF SCREEN (Dynpro番号). 

「NO INTERVALS」オプションは[[SELECT-OPTIONS>ABAP/SELECT-OPTIONS]]と一緒、「NESTING LEVEL n」オプションはnに0-4を指定し[[タブストリップ>ABAP/タブストリップ]]を使用する際のオプション。

** サンプル(選択画面のレイアウト) [#nd0422f9]
*** 空白行の挿入 [#q7d47607]
 SELECTION-SCREEN SKIP.

この記述だと1行飛ばし、行数指定する場合は下記となる。

 SELECTION-SCREEN SKIP n.

nには普通の数値を指定し、ブランク行を入れたいときに。
キュッと固めたりゆとりを持たせたり、それだけで人間工学的や与える印象が違うもの。

*** 区切り線の描画 [#n0daa55f]
 SELECTION-SCREEN ULINE /(ポジション) (長さ).

スラッシュ以降は省略可、省略した場合はフルで線が引かれる。

 SELECTION-SCREEN ULINE MODIF ID (修正グループID).

修正グループを割り当てることで[[MODIFY SCREEN>ABAP/MODIFY SCREEN]]命令で変更できるんだとか。
あまり使わない気もするが、他の選択画面の項目を変更しても線だけ残りっぱなしになっちゃうから消すとか?
他のオプションでも利用可能な記述。

こんな感じ。

 SELECTION-SCREEN ULINE.
 SELECTION-SCREEN ULINE /1(50).

*** テキストの表示 [#v51a0555]
※ポジションと長さの指定とMODIF IDについては上記のULINEと同じ使い方なので割愛

 SELECTION-SCREEN COMMENT (テキスト) FOR FIELD (選択項目).

テキストを、選択画面の項目の見出しとして定義する場合。

 SELECTION-SCREEN COMMENT (テキスト) VISIBLE LENGTH (長さ).

定義長で出してしまうと長過ぎる場合に、表示長を調整できる。
実際の書き方は、こんな感じ。

 SELECTION-SCREEN COMMENT /1(50) comm1 MODIF ID mg1.

*** 押しボタン [#l518d5c3]
位置と長さの指定、MODIF ID、VISIBLE LENGTHについては上記と同様のため割愛するが、テキストの長さによってVISIBLE LENGTHを調整すること。

 SELECTION-SCREEN PUSHBUTTON (ボタンのテキスト)

ちなみに、[[汎用モジュール>SAPのオブジェクト/汎用モジュール]]ICON_CREATEで表示するテキストやアイコンを作ることができる。
動きはテーブルICONTを検索して補足情報を付与する等シンプルなので、読んでみる方が早い。

また、ボタンだけ作っても意味がないので、「ボタンが押されたらxxxをする」という動きが必要となるため、[[機能コード>ABAP/機能コード]]を割り当てる。

  SELECTION-SCREEN PUSHBUTTON 2(10) W_DESC3 USER-COMMAND UCOM4 VISIBLE LENGTH 8.

これにより、ボタンが押されると[[AT SELECTION-SCREEN>ABAP/AT SELECTION-SCREEN]]がトリガされる。
USER COMMANDと書くが、[[AT USER-COMMAND>ABAP/AT USER-COMMAND]]じゃなくて[[AT SELECTION-SCREEN>ABAP/AT SELECTION-SCREEN]]。

*** 同じ行に色々な要素を入れる [#fdc45648]
標準・アドオンを問わず、同じ行に2つ以上の入力項目があったりラジオボタンがあったりする[[選択画面>ABAP/選択画面]]も多いが、それを実現するための命令。

 SELECTION-SCREEN BEGIN OF LINE. 
   PARAMETERS : P_KUNNR TYPE KNA1-KUNNR.
   SELECTION-SCREEN POSITION 30. 
   ... 
 SELECTION-SCREEN END   OF LINE. 

こんな感じ。
この書き方をして[[PARAMETERS>ABAP/PARAMETERS]]を宣言してもテキストが表示されないので、上述の「SELECTION-SCREEN COMMENT」を使う。

*** 選択画面の中にブロックを設ける [#y8cda1a9]
SELECTION-SCREEN BEGIN OF BLOCK B01 WITH FRAME (テキスト) 
  ...
SELECTION-SCREEN END   OF BLOCK B01.

単に見た目だけをまとめるだけでなく、ここで定義したブロックに対して[[AT SELECTION-SCREEN ON BLOCK (ブロック名)>ABAP/AT SELECTION-SCREEN]]という[[イベントブロック>ABAP/イベントブロック]]が定義できる。

例えば、[[会社コード>財務会計/会社コード]]と[[管理領域>管理会計/管理領域]]のように相関関係のある項目はソレ自体だけでは必須チェックくらいしかできず相関チェックができないが、かといって色々と[[AT SELECTION-SCREEN>ABAP/AT SELECTION-SCREEN]]に詰め込みすぎるとややこしくなるため、住み分けた方がわかりやすかっ
たりする。

*** タブを作る [#y553e71e]
[[選択画面>ABAP/選択画面]]にも[[タブストリップ>ABAP/タブストリップ]]が定義できる!・・・が、あまり凝ったことをやるなら普通に[[Dynpro>ABAP/Dynpro]]を組んだ方が。。。という話もある。

 SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
   PARAMETERS :
     P1_STR1 TYPE c LENGTH 10,
     P1_STR2 TYPE c LENGTH 10,
     P1_STR3 TYPE c LENGTH 10.
 SELECTION-SCREEN END   OF SCREEN 100.
 
 SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
   PARAMETERS :
     P2_STR1 TYPE c LENGTH 10,
     P2_STR2 TYPE c LENGTH 10,
     P2_STR3 TYPE c LENGTH 10.
 SELECTION-SCREEN END   OF SCREEN 200.
 
 SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
  SELECTION-SCREEN PUSHBUTTON 2(10) W_DESC3 USER-COMMAND UCOM4 visible length 8.
 SELECTION-SCREEN END   OF SCREEN 300.
 
 SELECTION-SCREEN :
   BEGIN OF TABBED BLOCK mytab FOR 5 LINES,
     TAB (20) W_DESC1 USER-COMMAND UCOM1 DEFAULT SCREEN 100,
     TAB (20) W_DESC2 USER-COMMAND UCOM2 DEFAULT SCREEN 200,
     TAB (20) W_DESC4 USER-COMMAND UCOM3 DEFAULT SCREEN 300,
   END   OF BLOCK mytab.

こんな感じで組むと、3つタブのある[[タブストリップ>ABAP/タブストリップ]]が定義され、普通の[[Dynpro>ABAP/Dynpro]]のように切り替えて利用することができる。

*** GUIステータスなしでメニューにボタンを追加する [#sf2c29fc]
 TABLES : SSCRFIELDS.
 
まず、このように[[TABLES>ABAP/TABLES]]でSSCRFIELDSが宣言されていることが条件で、次に[[選択画面>ABAP/選択画面]]が表示される前([[INITIALIZATION>ABAP/INITIALIZATION]]でよい)に、

 SSCRFIELDS-FUNCTXT_01 = '1st'.
 SSCRFIELDS-FUNCTXT_02 = '2nd'.

このように、宣言したSSCRFIELDSの項目FUNCTXT_0nにボタンのテキストを設定する。
そうすると、メニューにボタンが有効化されるので、

 SELECTION-SCREEN FUNCTION KEY n.

この形の命令で、nには1-5までの数字を割り当てる。
そうすると、nで指定した数値とリンクして、「FC0n」という[[機能コード>ABAP/機能コード]]が有効になる。

この例では、実行ボタンの右隣に「1st」や「2nd」というボタンが追加され、それらを押下すると「FC01」や「FC02」という[[機能コード>ABAP/機能コード]]がトリガされることとなる。

** サンプル(その他の選択画面からのエレメントの使用) [#s35e4238]
 SELECTION-SCREEN INCLUDE ... 

いくつか派生はあるが、基本的にはこんな感じで書いて、文字通りIncludeする。
使い回しをしたいシーンは然程多くはないかもしれないが、複数の画面で入力項目を共有できるというメリットはある。

 SELECTION-SCREEN INCLUDE PARAMETERS P_KUNNR.

[[PARAMETERS>ABAP/PARAMETERS]]のInclude。

 SELECTION-SCREEN INCLUDE SELECT-OPTIONS S_KUNNR.

[[SELECT-OPTIONSS>ABAP/SELECT-OPTIONS]]のInclude。

 SELECTION-SCREEN INCLUDE COMMENT xxx

テキスト等のInclude。

 SELECTION-SCREEN INCLUDE PUSHBUTTON xxx

ボタンのInclude。

 SELECTION-SCREEN INCLUDE BLOCKS xxx

ブロックのInclude。

** サンプル(論理データベースの選択画面) [#y358871c]
[[論理データベース>SAPのオブジェクト/論理データベース]]での宣言。

通常の記述とは異なるので注意・・・といっても、今となっては[[論理データベース>SAPのオブジェクト/論理データベース]]を新たに拵えるってこともないか。

*** 標準選択画面のバージョン [#s3fb06de]
実際の[[論理データベース>SAPのオブジェクト/論理データベース]]KDFより。

 SELECTION-SCREEN BEGIN OF VERSION 900 TEXT-900.
   SELECTION-SCREEN EXCLUDE SELECT-OPTIONS: KD_AUGDT.
 SELECTION-SCREEN END   OF VERSION 900.

*** 項目選択 [#i5cf6b0e]
こちらも、KDFより。

 SELECTION-SCREEN FIELD SELECTION FOR TABLE LFA1.

FOR NODE xxxの記述法もあり。

*** 動的選択 [#s6d8ffdd]
同じく、KDFより。
 
 SELECTION-SCREEN DYNAMIC SELECTIONS FOR TABLE BSIK.

ここで宣言しておくと、動的選択で選べる模様。
上記と同じく、FOR NODEが利用可能。

* その他 [#s3712aef]
選択画面の定義自体に関連する命令は、[[PARAMETERS>ABAP/PARAMETERS]]と[[SELECT-OPTIONS>ABAP/SELECT-OPTIONS]]がある。
その他の画面処理に関連する命令は、[[SET SCREEN>ABAP/SET SCREEN]]、[[CALL SCREEN>ABAP/CALL SCREEN]]、[[SET PF-STATUS>ABAP/SET PF-STATUS]]、[[GET PF-STA
TUS>ABAP/GET PF-STATUS]]、[[SET TITLEBAR>ABAP/SET TITLEBAR]]、[[LOOP AT SCREEN>ABAP/LOOP AT SCREEN]]、[[MODIFY SCREEN>ABAP/MODIFY SCREEN]]、[[SUPPRESS
 DIALOG>ABAP/SUPPRESS DIALOG]]、[[SET CURSOR>ABAP/SET CURSOR]]、[[GET CURSOR>ABAP/GET CURSOR]]、[[SET HOLD DATA>ABAP/SET HOLD DATA]]、[[CONTROLS>ABAP/
CONTROLS]]、[[REFRESH CONROL>ABAP/REFRESH CONROL]]などがある。


~
~
CENTER:【スポンサードリンク】
#htmlinsert(amazon_book_sap_system_implement)
~
~
----
#pcomment(reply)