コンテンツフレーム起動

変数 文書を SAP ライブラリストラクチャに組み込む

変数は名称付きデータオブジェクトであり、宣言命令によって静的に宣言するか、またはプログラムの実行時に動的に宣言することができます。変数を使用すると、変更可能なデータを特定の名称でプログラムのメモリ領域に保存することができます。

変数は、以下の命令を使用して静的に宣言することができます。

        DATA: その存続時間が宣言のコンテキストにリンクされている変数を宣言します。

        STATICS: プロシージャ内で静的に有効な変数を宣言します。

        CLASS-DATA: クラス内で静的変数を宣言します。

        PARAMETERS: 選択画面の入力項目にもリンクされている基本データオブジェクトを宣言します。

        SELECT-OPTIONS: 選択画面の入力項目にもリンクされている内部テーブルを宣言します。

        RANGES: SELECT-OPTIONS と同じ構造でも、選択画面とリンクされていない内部テーブルを宣言します。

このセクションでは、DATA 命令と STATICS 命令について説明します。CLASS-DATA の追加情報については、クラスを参照してください。PARAMETERSSELECT-OPTIONS 、および RANGES の追加情報については、選択画面を参照してください。

文字またはバイトを文字列に追加する、あるいは行を内部テーブルに追加すると、変数は 動的に宣言されます。文字列を宣言した後は、その型のみが定義されます。内部テーブルを宣言すると、行データ型、アクセスタイプ、およびキーが定義されます。実際のデータオブジェクト ( 文字列の文字またはバイト、あるいは内部テーブルの行) は、実行時に動的に作成されます。 

プロシージャを呼び出すときに、データオブジェクトを動的に作成することもできます。これらのデータオブジェクトはインタフェース定義の仮パラメータです。これらの仮パラメータが技術特性を所有するのは、渡された実パラメータから技術属性を継承する場合だけです。

DATA 命令

DATA 命令を使用して、ABAP プログラム内で変数を宣言するか、またはクラス内でインスタンス属性を宣言します。プログラムまたはクラスの中では、プロシージャ内でローカル変数を宣言することもできます。型に適用されるのと同じ可視性ルールが、変数にも適用されます (TYPE オプション を参照してください) 。プロシージャ内のローカル変数は、メインプログラムまたはクラス内の同一名称付き変数を非可視にします。

DATA 命令の構文は、TYPES 命令と同様です。

DATA <f> ...[TYPE <type>|LIKE <obj>]...[VALUE <val>].

変数名 <f> の長さは、最大で 30 文字にすることができます。+ . ,: ( ) を除くすべての文字を使用することができます。また、名称をすべて数字で構成することはできません。組込データオブジェクトの名称変更は不可能です。ABAP キーワードまたはオプションと同じ名称は使用しないでください。以下を実行する必要があります。

        追加コメントが不要な、変数の意味を説明する名称を使用します。

        ハイフンの使用を避けます。ハイフンは、構造のコンポーネントをアドレスするために予約されています。

        アンダースコア文字を使用して複合語を区切ります。

        特殊文字の使用を避けます。

        変数名の先頭には常に文字を使用します。

変数を静的に宣言するとき、変数に関するすべての技術属性、つまり変数の長さ、データ型、および小数点以下桁数を定義します。以下の方法で定義することができます。

既存技術属性の参照

既存のデータ型またはデータオブジェクトとまったく同じ技術属性を継承する変数を、以下のように作成することができます。

DATA <f> [TYPE <type>|LIKE <obj>]...

TYPE オプション を使用すると、<type> は技術属性がすべて指定された任意のデータ型になります。以下のデータ型にすることができます。

        非汎用の組込 ABAP (DFITSTRINGXSTRING)

        プログラム内のあらゆる既存のローカルデータ型

        あらゆる ABAP ディクショナリデータ型

LIKE オプションを使用すると、<obj> はすでに宣言されたデータオブジェクトになります。これは組込データオブジェクトにすることもできます。変数<f> では、データオブジェクト <obj> と同じ技術属性が採用されます。LIKE を使用すると、データオブジェクトとしてすでに宣言された内部テーブルの行を参照することもできます。

DATA <f> LIKE LINE OF <itab>.

以前のリリースと互換性を保つために、<obj> ABAP ディクショナリのデータベーステーブル、ビュー、構造、または構造のコンポーネントにすることができます。 

参照先のデータ型は、基本タイプ、参照タイプ、または複合タイプ ( 構造またはテーブル) にすることができます。基本項目データ型の場合、変数はメモリ内の単一項目になります。固定長のデータ型 (DFIT) を宣言すると、割り当てられるメモリ量が固定されます。可変長のオブジェクト (STRING, XSRTING) を宣言すると、そのオブジェクトの管理に十分なメモリだけが割り当てられます。データオブジェクトの長さは、実行時に動的に管理されます。構造の場合、変数は変数の並びになり、それ自身をさらに複合構造に組み込むことができます。各コンポーネントの名称 <ci> は型 <type> またはオブジェクト <obj> から取り込まれます。<f>-<c i> を使用して、各コンポーネントをアドレスすることができます。テーブルの場合、メモリには、実行時に動的に入力可能な管理エントリが格納されます。

例

TYPES: BEGIN OF struct,
         number_1 TYPE i,
         number_2 TYPE p DECIMALS 2,
       END OF struct.

DATA:  wa_struct TYPE struct,
       number    LIKE wa_struct-number_2,
       date      LIKE sy-datum,
       time      TYPE t,
       text      TYPE string,
       company   TYPE s_carr_id.

この例では、プログラムの内部型 STRUCT 、既存データオブジェクト WA_STRUCT のコンポーネント、組込データオブジェクト SY-DATUM 、組込 ABAP T ならびに STRING 、および ABAP ディクショナリのデータエレメント S_CARR_ID を参照して変数を宣言しています。

ジェネリック属性を備えたデータ型の参照

DATA 命令 で汎用の組込 ABAP ( CNP 、または X) を参照する場合、未定義の技術属性を命令で指定する必要があります。この場合、DATA 命令の構文は TYPES 命令と同じです。

DATA <f>[(<length>)] TYPE <type> [DECIMALS <d>]...

<length> オプションで項目長を設定します。このオプションを省略すると、項目長は、組込 ABAP セクションの表内の関連する初期値に設定されます。<type> P の場合は、DECIMALS <d> オプションで小数点以下桁数を指定することができます。このオプションを省略すると、小数点以下桁数は 0 に設定されます。

TYPE オプションまたは LIKE オプションを使用しないと、デフォルトの組込汎用型 C が使用されます。したがって、

DATA <f>.

の暗黙的な命令では、長さ 1 の文字変数 <f> が定義されます。これは、以下の明示的な命令の省略形です。

DATA <f>(1) TYPE C.

パック数値の小数点以下桁数の最大値は 14 です。小数点以下桁数を使用するには、プログラム属性固定小数点演算を設定する必要があります。設定しないと、変数は整数として扱われます。パック数値に値を代入すると、非有効数字は丸められます。

現在のところ、DATA 命令では、キーが定義されていない汎用標準テーブル以外の汎用データ型を参照することはできません。

例

DATA: text1,
      text2(2),
      text3(3) TYPE c,
      pack TYPE P DECIMALS 2 VALUE '1.225'.

この例では、長さがそれぞれ 1 バイト、2 バイト、3 バイトの文字変数を 3 つ作成し、長さが 8 バイトで小数点以下 2 桁のパック数値変数を 1 つ作成しています。固定小数点演算属性を設定すると、PACK の値は 1.23 になります。

固有データ型の変数の登録

ここまでは、既存のデータ型を参照して変数を定義する方法について見てきました。ただし、DATA 命令では、TYPES 命令と同じ型コンストラクタを使用して、変数の宣言時にデータ型を変数に割り当てることもできます。その場合、このデータ型は独立した形ではなく、関連データオブジェクトの属性としてのみ存在します。データ型はデータオブジェクトにリンクされます。データオブジェクトは、LIKE オプションで参照可能ですが、TYPE オプションで参照することはできません。

参照

直接参照変数を宣言する構文は、TYPES 命令で構造の定義に使用する構文と同じです。

DATA <f> TYPE REF TO ...

TYPE の後に、既存データ型の参照はありません。代わりに、型コンストラクタを使用します。

        以下の型コンストラクタを使用します。

REF TO DATA

これにより、データオブジェクトの参照データ型で項目 <f> を定義します。参照変数 <f> には、データオブジェクトの参照 ( ポインタ) 、つまりデータ型のインスタンスを含めることができます ( データ参照も参照してください)

        以下の型コンストラクタを使用します。

REF TO <class>|<interface>

これにより、ABAP オブジェクト内のオブジェクトの参照データ型で項目 <f> を定義します。参照変数 <f> には、クラス <class> またはそのサブクラスのインスタンス参照 ( ポインタ) 、あるいはインタフェース <interface> を実装するクラスの参照を、それぞれ含めることができます。オブジェクト処理も参照してください。

構造

構造を直接宣言する構文は、TYPES 命令で構造を定義するための構文と同じです。

DATA: BEGIN OF <structure>,
              ..............

<fi>...,
              ..............

END OF <structure>.

このチェーン命令により、

DATA BEGIN OF <structure>. DATA END OF <structure>.

の間の全変数が格納されている構造を作成します。これらの変数は、

DATA <fi>....

命令で定義したデータ型で生成されます。TYPES 命令と同様に、DATA BEGIN OF - DATA END OF の命令ブロックをネストすることができます。コンポーネント <fi> は、基本項目または参照変数にするか、あるいは既知の複合タイプを参照する場合は、複合自体にすることができます。型 I または F の項目は整列されるので ( データオブジェクトの整列を参照) 、必要に応じて、空の充てん項目がコンポーネント間に挿入されます。

プログラムでは、構造内の各変数のアドレスは、構造名とコンポーネントとの間にハイフンを使用し、<structure>-<f i> のように指定します。

例

DATA: BEGIN OF address,
         name(20)    TYPE c,
         street(20)  TYPE c,
         number      TYPE p,
         postcode(5) TYPE n,
         city(20)    TYPE c,
      END OF address.

この例では、ADDRESS と呼ばれる構造を定義しています。コンポーネントは、ADDRESS-NAME ADDRESS-STREET などを使用してアドレスすることができます。

内部テーブル

内部テーブルを変数のデータ型として直接宣言する構文は、TYPES 命令で内部テーブルの定義に使用する構文と同じです。

DATA <f> TYPE|LIKE <tabkind> OF <linetype> WITH <key>.

TYPE の後に、既存データ型の参照はありません。代わりに、型コンストラクタを使用します。

<tabkind> OF <linetype> WITH <key>.

変数<f> は、アクセスタイプ <tabkind> 、行データ型 <linetype> 、およびキー<key> によって内部テーブルとして宣言されます。行データ型<linetype> は、あらゆる既知のデータ型にすることができます。追加情報については、内部テーブルを参照してください。

開始値の指定

固定長の基本変数を宣言すると、その変数には、組込 ABAP セクションの表に列記されたとおり、DATA 命令によって型固有の初期値が自動的に入力されます。

ただし、DATA 命令で VALUE オプションを使用すると、固定長の基本変数の開始値を指定することもできます。( 構造宣言内でも可能です)

DATA <f>.....VALUE <val>.

プログラムで項目 <f> の開始値は <val> に設定されます。<val> には、以下を指定することができます。

        リテラル

        すでに宣言された定数

        明示的なオプション IS INITIAL

VALUE オプションでは、他の変数またはテキストシンボルを使用することはできません。XSTRING 、内部テーブル、または参照変数に開始値を代入することはできません。

例

開始値を指定する例は以下のとおりです。

DATA: counter TYPE p VALUE 1,
      date    TYPE d VALUE '19980601',
      flag    TYPE n VALUE IS INITIAL.

このデータ宣言の後、変数 FLAG には、その型固有の初期値 '0' が格納されます。

プロシージャ内の静的変数

DATA 命令によって宣言する変数は、その変数が定義されているコンテキスト内に限って存続します。そのため、ABAP メインプログラム内の変数はプログラムの実行時全体にわたって存在し、プロシージャ内のローカル変数はプロシージャが実行されている限り存在します。

プロシージャの実行終了後もローカル変数の値を保持するには、STATICS 命令を使用してその変数を宣言します。この命令で宣言した変数は、メインプログラムのコンテキストで存続しますが、プロシージャ内でのみ可視状態となります。

サブルーチンまたは汎用モジュールを初めて呼び出すと、対応するメインプログラムは、常に呼出元プログラムの内部セッションにロードされます。メインプログラムは、プロシージャの終了時に削除 されません。これにより、STATICS を使用して定義した変数の値を、プロシージャの実行終了後も保持することができます。そのため、プロシージャの次回の呼出時にその変数値を再利用することが可能になります ( サブルーチンのローカルデータセクションを参照してください)

メソッドでは、STATICS によって定義した変数は、関連メソッド内でのみ可視状態の静的属性になりますが、これはクラスの全インスタンスに対して静的となります ( クラスを参照してください)

STATICS 命令の構文は、DATA 命令と同一です。

 

 

コンテンツフレーム終了