見出し画像

2020/06/04 今日の積み上げ

SAP研修4日目

◇IF文(ABAP編):
例)
PARAMETERS : T_VAR TYPE I.
IF T_VAR = 100.
 WRITE : 'OK'.
ELSEIF T_VAR = 1000.
 WRITE : 'OUT'.
ELSE.
 WRITE : T_VAR.
ENDIF.
変数を定義した上で、入力された変数が一致するかの条件式を書いた。
基本的な書き方は他の言語と同じだが、
・ABAPの場合()や{}は使用しないので注意が必要
・条件比較する際も「==」ではなく、「=」が使われるため気をつける。(IFの中は論理式と認識されている

・IFの終わりは「ENDIF」をかく。

◇CASE文(ABAP編):
例)
PARAMETERS : T_VAR TYPE I.
CASE T_VAR .
 WHEN 10.
  WRITE 'AAA'.
 WHEN 100.
  WRITE 'BBB'.
 WHEN 1000.
  WRITE 'CCC'.
 WHEN OTHERS.
  WRITE T_VAR.
ENDCASE.
⓵CASEの後に比較対象の変数を記載する。
⓶WHENを使って比較する。
⓷必ずENDCASEで閉じる。

◇DO文(ABAP編):
例)
PARAMETERS : T_VAR TYPE I.
DO T_VAR TIMES.
 WRITE SY-INDEX.
ENDDO.
入力された回数分処理が繰り返される。
SY-INDEXはSAPで用意されているもので、ループ回数を参照できる。実行結果は、1.2.3.4......と入力した数まで表示される。
DOの横の”ループ回数 TIMES”は省略することもできるが、その場合無限ループに入ってしまうため、DOのなかでEXITを記載し抜け出す処理を書く必要がある。

◇WHILE文(ABAP編):
例)
WHILE SY-INDEX < 4.
 WRITE : SY-INDEX.
ENDWHILE.
DOと同じ繰り返し処理。
SY_INDEXでループ回数を参照しているため、3回同じ処理が繰り返される。DO同様EXITを使って抜け出すこともできる。

◇LOOP文(ABAP編):
LOOP文は内部テーブルを上から一行ずつ読み込むループである。
読み込んだデータは構造(作業領域)へ順次格納される。
例)
TYPES :
BEGIN OF TYP_DATA1,
KEY1(5) TYPE C,
KEY2(5) TYPE C,
NUM(5) TYPE C,
END OF TYP_DATA1.

DATA :
GT_DATA1 TYPE STANDARD TABLE OF TYP_DATA1.
GST_DATA1 LIKE LINE OF GT_DATA1.

GST_DATA1-KEY1 = 'AAA'.
GST_DATA1-KEY2 = 'ZZZ'.
GST_DATA-NUM = '111'.
APPEND GST_DATA1 TO GT_DATA1.
GST_DATA1-KEY1 = 'BBB'.
GST_DATA1-KEY2 = 'YYY'.
GST_DATA-NUM = '222'.
APPEND GST_DATA1 TO GT_DATA1.
GST_DATA1-KEY1 = 'CCC'.
GST_DATA1-KEY2 = 'XXX'.
GST_DATA-NUM = '333'.
APPEND GST_DATA1 TO GT_DATA1.

LOOP AT GT_DATA1 INTO GST_DATA1.
 WRITE : /
 GST_DATA1-KEY1,
 GST_DATA1-KEY2,
 GST_DATA-NUM.
ENDLOOP.

◇メッセージ出力:
トランザクションコード「se91」でメッセージクラスを参照できる。
例)3通りの書き方がある。
MESSAGE S011.
MESSAGE S011(ZPR_MSGCL).
MESSAGE ID 'ZPR_MSGCL' TYPE 'S' NUMBER 011.
一行目の書き方の場合、最初のREPORT命の行に追記処理が必要。
例)
REPORT ZPR_NAME01.
⇨REPORT ZPR_NAME01 MESSAGE-ID ZPR_MSGCL.

◇メッセージタイプ:
A:強制終了(ポップアップメッセージが出力される)
※処理はメッセージ命令で終了する。
E:エラー(画面右下に赤字で出力される)
※処理はメッセージ命令で終了する。
I:情報メッセージ(ポップアップメッセージが出力される)
※ポップアップの「続行」を押すと処理が続行される。
S:ステータスメッセージ(画面右下にメッセージが出力される)
※処理は自動で続行される。
W:警告(画面右下にメッセージが出力される)
※処理はメッセージ命令で終了する。
X:強制終了(ショートダンプ画面としてメッセージが出力される)
※処理はメッセージ命令で終了する。

◇メッセージ変数:
トランザクションコード「se91」を使ってメッセージ照会画面に行く。
メッセージテキスト欄に「&1」を入力することによりソースの方で変数を入れることができる。
例)
メッセージテキスト欄に
「&1テーブルの登録に失敗しました。」で登録する。
ソースの方で、
MESSAGE S010(ZPR_MSGCL) WITH 'テスト'.
と記述することで、結果を
”テストテーブルの登録に失敗しました。”と表示される。
※&2.&3と追記で書くことにより、いくらでも変数を追加できる。

◇メッセージ変数格納:
ソースに以下を追記する。
MESSAGE S010(ZPR_MSGCL) WITH 'テスト' INTO G_MESG.
それによりG_MESGにメッセージが格納され、
WRITE G_MESG.
でメッセージが左下ではなく、結果画面の方に出力できる。
※代わりにエラーメッセージとしては出力されない。

◇ラジオボタンの作成:
例)(SELECTION記述はなくても問題ない)
SELECTION-SCREEN BEGIN OG BLOCK BLK1 WITH FRAME TITLE TEXT-S01.
PARAMETERS :
 P_RAD1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',
 P_RAD2 RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.
表示画面には…
🔘P_RAD1
⚪️P_RAD2
と表示される。デフォルトの記述により、最初はP_RAD1にチェックがつくが、P_RAD2を押せばP_RAD1は解除される。
ラジオボタンは片方しか選択できない。

◇選択画面制御:
例)
SELECTION-SCREEN BEGIN OG BLOCK BLK1 WITH FRAME TITLE TEXT-S01.
PARAMETERS :
 P_DATA1(5) TYPE C MODIF ID M01,
 P_DATA2(5) TYPE C MODIF ID M02,
 P_DATA3(5) TYPE C MODIF ID M03,

 P_RAD1 RADIOBUTTON GROUP GRP1 DEFAULT 'X' USER-COMMAND RAD,
 P_RAD2 RADIOBUTTON GROUP GRP1.
 P_RAD3 RADIOBUTTON GROUP GRP1.
SELECTION-SCREEN END OF BLOCK BLK1.

AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
 CASE SCREEN-GROUP1.
  WHEN 'M01'
   IF P_RAD1 = 'X'.
    SCREEN-INPUT = 1.
   ELSE.
    SCREEN-INPUT = 0.
   ENDIF.
  WHEN 'M02'
   IF P_RAD1 = 'X'.
    SCREEN-REQUIRED = 2.
   ELSE.
    SCREEN-INPUT = 0.
   ENDIF.
  WHEN 'M03'
   IF P_RAD1 = 'X'.
    SCREEN-INPUT = 1.
   ELSE.
    SCREEN-INPUT = 0.
   ENDIF.
 ENDCASE.
 MODIFY SCREEN.
ENDLOOP.

補足)
MODIF IDにより項目をグループ化することが可能
・MODIF IDを使うと、キーはSCREEN-GROUP1に割り当てられる。
MODIFY SCREENで画面の更新を行う
USER-COMMANDでラジオボタンを選択した際に画面を更新することが可能
・USER_COMMANDの後の変数RADは任意のもの

◇画面制御変数:
SCREEN-INPUT
0の場合:入力不可状態
1の場合:入力可能状態
SCREEN-REQUIRED
0の場合:入力不可状態
1の場合:必須入力の状態
2の場合:必須入力の表示だが必須入力でない状態
SCREEN-ACTIVE
0の場合:非表示状態

◇バージョン管理:
ユーティリティからバージョンを生成すればゲームのセーブデータのように管理できる。

以上。

この記事が気に入ったらサポートをしてみませんか?