ABAP

内部テーブル/構造/変数―ABAPの3つの基本

ABAPをコーディングする上で、主に初心者が躓きがちな「内部テーブル」「構造(ワークエリア)」「変数」について整理して解説しています。

「内部テーブル」も「構造(ワークエリア)」も「変数」も、どれもプログラム実行中のみ存在する作業領域(メモリ領域)です。

ただし、逆に言うと基本中の基本概念であるため、それらの違いについて解説したページや参考書が見当たらないため、本ページで整理・解説します。

このページで学べる内容

  • メモリ領域について
  • 変数/構造/内部テーブルの違い
  • 変数/構造/内部テーブルの宣言方法

これからABAPを勉強する方であれば、絶対に知っておきたい基礎知識ですので、是非最後までご覧ください。

それでは、早速解説を始めていきます。

前提:利用するタイミング

「内部テーブル」「構造(ワークエリア)」「変数」―。

これらは、すべて共通して「プログラム実行中のみ」に存在する一時的なメモリ領域です。

プログラムを人間として置き換えると、メモリ領域というのは「メモ帳」のようなものです。あれやこれやと作業している最中に、「あ、これは忘れないで覚えておこう」とか「これは後で使えるように一応メモしておこう」とか。

プログラムの中でその役割を担うのが、「内部テーブル」であり「構造」であり「変数」です。

ABAPでは、この3つのメモ帳を用いて様々な処理を行っていきます。

では、それら3つは何が違うのか?

ザックリ言うと、メモ帳の「フォーマット」が違うのです。

内部テーブル/構造/変数 のイメージ

「内部テーブル」「構造(ワークエリア)」「変数」をそれぞれイメージ図で表したのがこちらです。

内部テーブル・構造・変数のイメージ図

何をどのようにメモできるのか?

1つひとつ、深堀しながら解説していきます。

変数

変数はExcelで例えると「1つのセル」に相当します。

1つのデータを保存するだけのメモリ領域です。後述する「構造(ワークエリア)」と「内部テーブル」は、変数の集合体である、ととらえることもできます。

変数の定義

DATA (変数名) TYPE (データ型).


変数の定義には、DATA命令を用います。

この命令で、変数を定義することができます。詳しくは、DATA命令のページで解説しておりますので、合わせてそちらもご覧ください。

構造

「構造は」Excelで例えると1行の複数セルに相当します。

「構造」はその性質上「ワークエリア」とも呼ばれます。なぜ、ワークエリアと呼ばれるか?

それは、あるテーブルからデータを1行だけ取り出して処理を行いたい場合に用いられるのが基本的な利用方法となるためです。

例えば、ループ処理では処理の対象とする内部テーブルを1度にすべて処理を実行するのではなく、1行1行別で定義した構造にデータを格納した後に処理を行うのです。

構造の定義

DATA (変数名) TYPE (テーブル名).


(テーブル名)には、標準テーブルの名称(BKPFとかBSEG)、もしくはアドオンテーブルの名称を指定します。

え。テーブル名でいいの?

そんな声も聞こえてきそうですが、これでOKです。テーブルをTYPEオプションに指定すると、構造が定義されるのです。後述しますが、この点逆に内部テーブルを定義する際の注意点となりますので、丁寧な理解が必要です。

内部テーブル

内部テーブルは、ご覧の通り複数行の構造です。

「テーブル」の名の付く通り、複数のレコードを保持することができるメモリ領域です。

標準テーブルやアドオンテーブルのデータをそっくりそのまま(もしくは条件を絞って)メモしたい、というときに便利です。

内部テーブルの定義

DATA (変数名) TYPE TABEL OF (テーブル名).


構造と内部テーブルの定義はセットで覚えるのがよいでしょう。こちらについては、このページよりも少しだけ実践的に解説している記事がありますので、そちらをご覧ください。

応用編:メモ帳を消したいときは

内部テーブルや構造・変数については、一度定義した後1回のプログラム実行中に何度も使いまわすことが可能です。つまり、処理Aで利用した内部テーブルは、同一のプログラムであれば処理Bでも利用することができるのです。

ただし、使いまわす際には、必ず毎回中身をクリア(初期化)する必要がでてきます。

初期化しなくても、上書きする形で新たにメモ書きすることが可能ですが、余計な心配事(バグの可能性)をなくすためには、必ず事前にCLEARするのがABAPのお作法です。

初期化の方法については、以下のページで解説していますので、合わせてこちらのページもご覧ください。