ABAP DATA定義の基本

  データ定義&編集

概要

変数とよばれる値を格納しておく場所を定義する命令がDATA命令である。アドオンプログラムを作成する際に必ず使用するのがDATA定義であり、
様々な型を参照し独自の場所を各アドオンプログラム内に確保する事が可能だ。
ここでは一般的に良く使用される型を参照した変数を作成してみよう。

サンプルコード

*単一の変数
DATA: V_CHRA(10)   TYPE C.           "10桁の文字型
DATA: V_NUM(10)    TYPE N.           "10桁の数字型
DATA: V_INT        TYPE I.           "数値型
DATA: V_DEC(18)    TYPE P DECIMAL 3. "少数3桁の数値型
DAtA: V_STR        TYPE STRING.      "可変長の文字型
DATA: V_VBELN      TYPE VBAK-VBELN.  "受注伝票番号のデータエレメントを参照した型(10桁文字列)

*ローカルのTypesを使用する場合
TYPES: 
  BEGIN OF TY_Z1,
    V_COL1 TYPE C,
    V_COL2 TYPE C,
    V_COL3 TYPE C,
  END OF TY_Z1.

*構造
DATA: WK_Z1 TYPE TY_Z1.

*内部テーブル
DATA: IT_Z1 TYPE TABLE OF TY_Z1. "Standard table

説明

それでは順番に確認してみよう。
「DATA: V_CHRA(10) TYPE C」は10桁の文字型を格納できる変数を定義しており、様々な文字を格納する事ができる。
桁数を変更したい場合は(10)を変更してみよう。また省略した場合は1桁となる。

「DATA: V_NUM(10) TYPE N」は10桁の数字型であり、0-9の数字のみ格納する事ができる。
また、777という値を格納した場合は、実際には0000000777というデータに格納されて保持される。
少しややこしいが、数字だけを格納する事ができる文字型だと考えれば良い。

「DATA: V_INT TYPE I」は小数点を持っていない数値型だ。桁数の定義は行わないが限界があり、それを超えるとオーバーフローした記憶がある。
「DATA: V_DEC(18) TYPE P DECIMAL 3」は小数点を定義できる数値型だ。数量や金額を格納する際によく使用される。
「DAtA: V_STR TYPE STRING」は可変長の文字型だ。桁数を定義しなくて良いのであれば、常にStringでいいじゃないかと思うかもしれないが、意外に使用頻度は少ない。基本的にデータベーステーブルのデータを扱う場合は、その定義に沿った型を使用するケースがほとんどだ。また、標準で用意されている関数にはStringを許可していないものも多くある。
最後の「DATA: V_VBELN TYPE VBAK-VBELN」が最も多く使用される定義であり、VBAKというテーブルのVBELNという項目を参照するという意味だ。
例えば、VBELNの桁数を10桁から50桁に拡張された場合、それを参照しているプログラムも自動的に同じ桁数を扱えるようになる為だ。
予め何の値が格納されるか決まっているのであれば、このように定義するのが一番良いと言える。

さて次に構造だが、「DATA: WK_Z1 TYPE TY_Z1」と定義した場合、WK_Z1-V_COL1、WK_Z1-V_COL2、K_Z1-V_COL3の3つの値を格納できる場所を確保する事ができる。
内部テーブルは、上記3つの場所を複数行持つことができるようになる。

TYPE定義についてはこちらを参照