セクション 3 / 11

データ型と変数宣言

ABAPの組み込み型、変数宣言の書き方、構造体と内部テーブル、そしてインライン宣言による現代的な記法を解説します。

目次を開く

ABAPには業務データを扱うための型が揃っています。特に、金額と数量を正確に扱うための型が用意されている点は、業務言語としての性格をよく表しています。

組み込み型

ABAPの主な組み込み型
内容既定長初期値
C文字列(固定長)1スペース
N数字文字列(0埋め)1'0'
D日付(YYYYMMDD)8'00000000'
T時刻(HHMMSS)6'000000'
I整数(4バイト)0
INT8整数(8バイト)0
Pパック数(小数桁を指定)80
F浮動小数点80
STRING可変長文字列可変
XSTRING可変長バイト列可変

N型とC型の違い

N型は「数字だけを格納する文字列」です。数値ではないため計算には使えませんが、前ゼロが保持されます。

N型とC型の挙動
DATA lv_num TYPE n LENGTH 5.
DATA lv_chr TYPE c LENGTH 5.

lv_num = 42.       " 結果: '00042' (前ゼロで埋まる)
lv_chr = 42.       " 結果: '42   ' (後ろがスペース)

SAPの伝票番号や品目コードは、多くがN型で定義されています。「0000012345」のような前ゼロ付きのコードが表示されるのは、この型を使っているためです。

変数の宣言

基本的な宣言
" 組み込み型を直接指定
DATA lv_name TYPE c LENGTH 30.
DATA lv_amount TYPE p LENGTH 8 DECIMALS 2.

" データディクショナリの型を参照(推奨)
DATA lv_matnr TYPE matnr.
DATA lv_werks TYPE werks_d.

" テーブル項目を参照
DATA lv_bukrs TYPE bkpf-bukrs.

" 初期値の指定
DATA lv_count TYPE i VALUE 10.

" 定数
CONSTANTS lc_status TYPE c LENGTH 1 VALUE 'A'.

構造体(Structure)

構造体は、複数の項目をまとめた型です。1件のレコードを表現するのに使います。

構造体の定義と使用
TYPES: BEGIN OF ty_item,
         matnr TYPE matnr,
         maktx TYPE maktx,
         menge TYPE i,
         price TYPE p LENGTH 8 DECIMALS 2,
       END OF ty_item.

DATA ls_item TYPE ty_item.

ls_item-matnr = 'MAT-001'.
ls_item-menge = 10.

" ディクショナリの構造を参照
DATA ls_mara TYPE mara.

内部テーブルの型

内部テーブルは、構造体を複数保持するためのメモリ上の表です。詳細は専用のセクションで扱いますが、宣言の書き方だけ押さえておきます。

内部テーブルの宣言
" 標準テーブル
DATA lt_items TYPE STANDARD TABLE OF ty_item.

" 作業領域つき(古い書き方)
DATA lt_items TYPE TABLE OF ty_item WITH HEADER LINE.

" ディクショナリ構造を使う
DATA lt_mara TYPE STANDARD TABLE OF mara.

" キー付きソート済テーブル
DATA lt_sorted TYPE SORTED TABLE OF ty_item
                WITH UNIQUE KEY matnr.

インライン宣言(ABAP 7.4以降)

ABAP 7.4からは、使う場所で変数を宣言できるようになりました。型はコンパイラが推論します。

インライン宣言
" 従来の書き方
DATA ls_mara TYPE mara.
SELECT SINGLE * FROM mara INTO ls_mara WHERE matnr = @lv_matnr.

" インライン宣言
SELECT SINGLE * FROM mara INTO @DATA(ls_mara) WHERE matnr = @lv_matnr.

" ループでの使用
LOOP AT lt_items INTO DATA(ls_item).
  WRITE: / ls_item-matnr.
ENDLOOP.

" 値のコンストラクタ式
DATA(lt_numbers) = VALUE int_tab( ( 1 ) ( 2 ) ( 3 ) ).

インライン宣言により、宣言部とロジックが離れることによる読みにくさが解消されます。変数のスコープが使用箇所の近くに限定されるため、可読性が向上します。

📖 わからない用語は SAP用語辞典 で調べられます。

理解度チェック

このセクションの内容を確認しましょう。

確認問題 1

ABAPで整数を表す基本データ型はどれか。

確認問題 2

ABAPの日付型Dの内部形式はどれか。

確認問題 3

ABAPでは変数をDATA命令で宣言する。

確認問題 4

金額や数量など小数点を含む計算に適したデータ型はどれか。

確認問題 5

データディクショナリで定義されたデータエレメントの型を、ABAPプログラム内でTYPE句により参照することができる。

確認問題 6

ABAPの型Nの説明として正しいものはどれか。