ABAPにおける変数等の宣言は2つに分類することができます。
ここでは、変数等の宣言の分類/宣言の仕方/Tipsについて解説します。
■変数の分類
グローバル変数
ABAPにおけるグローバル変数はプログラム全体や複数のプロシージャにて使用可能な変数です。
プログラムのREPORTやCLASSの直下で宣言します。
ローカル変数
ローカル変数は特定のプロシージャ内(FORM~ENDFORM内やMETHOD~ENDMETHODなど)
にて有効な変数でそのプロシージャ内で宣言可能です。
宣言したプロシージャの外では使用できません。
※STATIC命令を使えば入れ子構造の下層プロシージャでも使用可能。
※MODULE~ENDMODULE内で宣言しても、グローバル変数となります。
■変数等宣言
TYPES データ型の定義
PGM内のみ有効なカスタム型を作成できます。
TYPES:
ztesttype TYPE sflight,
BEGIN OF types_test,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
END OF types_test,
types_test_t TYPE STANDARD TABLE OF types_test.
DATA 変数宣言
PGM内のみ有効な変数を作成できます。
DATA:
lv_test TYPE CHAR10,
ls_ztestdata TYPE sflight.
BEGIN OF ls_data_test,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
END OF ls_data_test,
lt_data_test_t LIKE STANDARD TABLE OF ls_data_test.
FIELD-SYMBOLS フィールドシンボル宣言
PGM内のみ有効なフィールドシンボルを作成できます。
FIELD-SYMBOLS:
<fs_sflight> TYPE sflight,
<fs_carrid> TYPE sflight-carrid,
<fs_any> TYPE any.
CONSTANTS 定数宣言
PGM内のみ有効な定数を作成できます。
CONSTANTS:
c_testno TYPE CHAR10 VALUE '0123456789',
BEGIN OF cs_test,
JPN TYPE string VALUE 'Japan',
KOR TYPE string VALUE 'Korea',
USA TYPE string VALUE 'United States'
GER TYPE string VALUE 'Germany',
END OF cs_test,
TABLES テーブル作業領域宣言
PGM内のみ有効な作業領域を作成できます。
宣言された作業領域は構造付きテーブルになります。
TABLES:
t001,
ekpo.
STATIC 静的変数
PGM内のみ有効な作業領域を作成できます。
プロシージャ内で使用可能な宣言方法で、自身と入れ子構造となった下位プロシージャ内で使用可能です。
STATICS:
lv_ztest TYPE char10,
ls_ztestdata TYPE sflight.
BEGIN OF ls_data_test,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
END OF ls_data_test,
lt_data_test_t LIKE STANDARD TABLE OF ls_data_test.
■変数等宣言時のTips
BEGIN OF ~END OF
カスタム構造を指定できます。
TYPESで一度構造型を指定してからそれを使用してテーブル型を作成できます。
TYPESやDATA、CONSTANTSなどで使用できます。
TYPES:
ztesttype TYPE sflight,
BEGIN OF types_test,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
END OF types_test,
types_test_t TYPE STANDARD TABLE OF types_test.
INCLUDE
BEGIN OF ~END OF内で使用すると構造の中に事前定義された構造を展開できます。
展開された構造の項目はほかの項目と同じように使用できます。
TYPES INCLUD~では指定できないため、チェーン命令を使用している場合は一旦TYPESのチェーンを切る必要があります。
TYPES:
ztesttype TYPE sflight,
BEGIN OF types_test,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
INCLUDE TYPE T001,
TYPES:
END OF types_test,
types_test_t TYPE STANDARD TABLE OF types_test.
TABLE OF
変数や型定義時にTABLE OFの直後に指定した型のテーブル型を指定できます。
以下の種類があり、テーブルの種類によって使い分けます。
STANDARD TABLE OF
SORTED TABLE OF
HASHED TABLE OF
TABLE OF (基本的にSTANDARD TABLE扱い)
TYPES:
BEGIN OF types_test,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
price TYPE sflight-price,
currency TYPE sflight-currency,
END OF types_test,
types_test_t TYPE STANDARD TABLE OF types_test.
REF TO
参照変数を作成できます。
参照変数の方でクラスを指定し、その参照変数を使用してインスタンスを作成できます。
DATA:
obj_alv_tree TYPE REF TO cl_gui_custom_container.
CREATE OBJECT obj_alv_tree
EXPORTING
parent = obj_cc
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
no_toolbar = ' '
no_thml_header = 'X'
EXCEPTIONS
others = 1.
RANGE OF
以下構造からなる範囲指定用内部テーブル(レンジテーブル)を作成できます。
SAP標準でレンジテーブルとして認識されるようになっており、IFやSELECT、CHECKなど様々な場面で使用可能です。
※選択画面のSELECT-OPTIONSで作成できるパラメータもレンジテーブルになります。
| 項目 | 説明 |
|---|---|
| SIGN | 包括(I)か排他(E)かを指定 |
| OPTION | 比較子を指定 |
| LOW | レンジの下限値(OPTION:EQの場合はこちらと=かどうか) |
| HIGH | レンジの上限値 |
DATA:
lv_range TYPE RANGE OF ekpo-ebeln.
TYPEとLIKE
TYPEとLIKEの大きな違いは以下になります。
TYPE:型のみを参照できる
LIKE:変数を参照できる
特殊な事情がない限りTYPEの使用を推奨します。
TYPES:
ztesttype TYPE sflight.
DATA:
lv_ztest TYPE CHAR10.
DATA:
lv_id LIKE lv_test,
lv_fl TYPE ztesttype.
レンジテーブルなど構造付きテーブルの明示的な指定
レンジテーブルなどはテーブルと構造が全く同一の変数名で双方作成されます。
(ヘッダ付きテーブル、構造付きテーブルと呼ばれる)
通常、自動的にどちらかを判定しますが、うまくいかなくなる場合があるため、下記を指定して明示的に指定してください。
※構造付きテーブルは現在廃止になっている+可読性が悪く、バグの温床となるため古いPGMの改修などで仕方がない限り使用しないほうが良いです。
〇テーブルを指定する場合( []を付ける )
ZRANGETAB[]
〇構造を指定する場合( []を付けない )
ZRANGETAB

