TYPES命令はABAPにおける宣言命令の1つで、データ型(基本データ型/構造化型データ型)を定義する命令です。
初心者にとっては、そもそもデータ型って?内部テーブル?構造?と、少しとっつきにくい印象を受けてしまうかもしれませんが、TYPES命令をマスターせずにABAPをマスターすることは不可能です。
このページでは、TYPES命令の基本、その前提となる知識を1から分かりやすく初心者向けに解説します。
SAPエンジニア・ABAPエンジニアを目指す人であれば、絶対に知っておきたい内容ばかりですので是非最後までご覧ください。
TYPES命令―データ型定義
TYPES命令はデータ型を定義する命令です。
データ型とは、その名の通りデータオブジェクト(変数・構造・内部テーブル)がどのようなデータであるか?を示すもの。そのデータオブジェクトに格納できる値が、文字列なのか?数字なのか?はたまた日付型なのか?これらを決定する役割を担うのがデータ型です。
TYPES命令は、変数のデータ型・構造のデータ型・内部テーブルのデータ型すべてを宣言することができます。
①基本データ型
"変数" のデータ型
②構造データ型
"構造" のデータ型
③テーブルデータ型
"内部テーブル" のデータ型
「変数」「構造」「内部テーブル」の違いは以下の通り。
詳しくは、こちらの記事で詳しく解説しておりますので、合わせてご覧ください。
DATA命令によって宣言されるデータオブジェクトは、このTYPES命令で定義したデータ型(もしくはABAPディクショナリに登録したデータ型)を参照します。
プログラムの中で一度だけ必要になるデータ型や、わざわざABAPディクショナリに登録する必要がないようなデータ型をTYPES命令で定義します。
構文ルール:TYPES命令
TYPES命令は、作成するデータ型の種類に応じて微妙に書き方が異なります。
例えば、基本データ型を作成する場合は項目は1つなので、1つの項目名とデータ型を作成しておけばOKですが、構造データ型・テーブルデータ型の場合は複数の項目名、それに対応するデータ型を宣言する必要があります。
TYPES命令:基本データ型
TYPES (データ型名) TYPE (データ型) .
TYPES: ZBUKRS TYPE BKPF-BUKRS, "会社コード" Z_DAY1 TYPE I, "数字(4文字)" Z_DAY2 TYPE N LENGTH 8. "数字(8文字)"
TYPESの後に、任意のデータ型名称を。TYPEオプションの後に事前定義ABAPデータ型、もしくはABAPディクショナリに登録されているオブジェクトを指定します。
TYPES命令は、ソースコード上部にチェーン命令の形で記載されることが普通です。
ABAPキーワードの後に”:”を記述。命令が一つ終わるごとに、” ,”を記述します。チェーン命令の最後は、ルール③の通りピリオドを記述します。
TYPES: BUKRS TYPE BKPF-BUKRS, "会社コード" BELNR TYPE BKPF-BELNR, "会計伝票番号" GJAHR TYPE BKPF-GJAHR, "会計年度" BLART TYPE BKPF-BLART. "伝票タイプ"
TYPES命令:構造データ型
TYPES:
BEGIN OF (構造データ型名),
(項目名) TYPE (データ型),
(項目名) TYPE (データ型),
・・・・・・・・・・・・・・
END OF (構造データ型名).
TYPES: * BKPF格納用内部テーブル項目 BEGIN OF GTS_BKPF, BUKRS TYPE BKPF-BUKRS, "会社コード BELNR TYPE BKPF-BELNR, "会計伝票番号 GJAHR TYPE BKPF-GJAHR, "会計年度 BLART TYPE BKPF-BLART, "伝票タイプ END OF GTS_BKPF.
構造データ型は、"BEGIN OF" と ”END OF” で開始と終了を明示します。
上記のサンプルコードでは、4つの項目を持つ "GTS_BKPF" という構造データ型を作成しています。 もし、「BEGIN OF」「END OF」を書き忘れると・・・
TYPES: BUKRS TYPE BKPF-BUKRS, "会社コード" BELNR TYPE BKPF-BELNR, "会計伝票番号" GJAHR TYPE BKPF-GJAHR, "会計年度" BLART TYPE BKPF-BLART. "伝票タイプ"
4つの基本データ型が出来上がってしまいます。
この点、基本データ型と構造データ型では括りが異なりますので、明確に分類して理解しておきましょう。
TYPES命令:テーブルデータ型
テーブルデータ型は、TYPEオプションの後に指定するデータ型の種類によって書き方が異なります。
テーブルデータ型を参照する場合
TYPES (データ型名) TYPE (テーブルデータ型) .
基本データ型の場合と書き方は全く同じです。
構造データ型を参照する場合
TYPES (データ型名) TYPE TABLE OF (構造データ型) .
TYPEオプションの後に「TABLE OF」と記述します。
TYPES: * BKPF格納用内部テーブル GTS_WORK TYPE TABLE OF GTS_BKPF,
こうすることで、テーブルデータ型が定義されます。
TYPES命令とDATA命令の違い?
ここまでの内容を理解できていれば、TYPES命令とDATA命令の違いは明確です。
- DATA命令 ⇒ 変数/構造/内部テーブルを宣言
- TYPES命令 ⇒ 変数/構造/内部テーブルの基となる「型」を定義
となります。
したがって、基本的な流れは、①「TYPES命令で型を定義」を行ったあと、②「①で定義したデータ型に基づいてDATA命令で変数/構造を宣言」するという流れになります。
ABAPを学習して間もない方は、この点で混乱してしまう方が多いのですが、一つ一つ丁寧に考えれば決して難しくはありません。まだ理解しきれていない、という方は、再度ページ上部から読んでみてください。
LIKEオプション
TYPES命令では、LIKEオプションが利用できます。
TYPES A TYPE D.
↓
TYPES B LIKE A.
TYPES命令のオプションTYPEとLIKEの使い分けについても、この機会に学んでみましょう。続きは、以下のページにて解説しています。
ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!