新規記事の投稿を行うことで、非表示にすることが可能です。
2020年02月07日
【ABAP】内部テーブル/構造/変数―3つの基本
ABAPをコーディングする上で、主に初心者が躓きがちな「内部テーブル」「構造(ワークエリア)」「変数」について整理して解説しています。
「内部テーブル」も「構造(ワークエリア)」も「変数」も、どれもプログラム実行中のみ存在する作業領域(メモリ領域)で、この知識がないとABAPのコーディングが非常に難しくなってしまいます。
このページで学べる内容
・メモリ領域について
・変数/構造/内部テーブルの違い
・変数/構造/内部テーブルの宣言方法
・メモリ領域について
・変数/構造/内部テーブルの違い
・変数/構造/内部テーブルの宣言方法
目次
1 前提:利用するタイミング
2 内部テーブル/構造/変数 のイメージ
3 変数
3.1 変数の定義
4 構造
4.1 構造の定義
5 内部テーブル
5.1 内部テーブルの定義
6 変数/構造/内部テーブルの初期化
1 前提:利用するタイミング
2 内部テーブル/構造/変数 のイメージ
3 変数
3.1 変数の定義
4 構造
4.1 構造の定義
5 内部テーブル
5.1 内部テーブルの定義
6 変数/構造/内部テーブルの初期化
1 前提:利用するタイミング
「内部テーブル」「構造(ワークエリア)」「変数」―。
これらは、すべて共通して「プログラム実行中のみ」に存在する一時的なメモリ領域です。
プログラムを人間として置き換えると、メモリ領域というのは「メモ帳」のようなものです。
あれやこれやと作業している最中に、「あ、これは忘れないで覚えておこう」とか「これは後で使えるように一応メモしておこう」とか。
プログラムの中でその役割を担うのが、「内部テーブル」であり「構造」であり「変数」です。
ABAPでは、この3つのメモ帳を用いて様々な処理を行っていきます。
では、それぞれどのような違いがあって、どのように使い分けるのでしょうか?
ここからは、「変数」「構造」「内部テーブル」の違いにスポットを当てて解説を進めます。
2 内部テーブル/構造/変数 のイメージ
「内部テーブル」「構造(ワークエリア)」「変数」をそれぞれイメージで表したのがこちらです。
変数: 変数
構造: 変数 + 変数 + 変数 + 変数 + ・・・
内部テーブル: 変数 + 変数 + 変数 + 変数 + ・・・ 構 造
変数 + 変数 + 変数 + 変数 + ・・・ 構 造
変数 + 変数 + 変数 + 変数 + ・・・ → 構 造
変数 + 変数 + 変数 + 変数 + ・・・ 構 造
・ ・
・ ・
・ ・
構造: 変数 + 変数 + 変数 + 変数 + ・・・
内部テーブル: 変数 + 変数 + 変数 + 変数 + ・・・ 構 造
変数 + 変数 + 変数 + 変数 + ・・・ 構 造
変数 + 変数 + 変数 + 変数 + ・・・ → 構 造
変数 + 変数 + 変数 + 変数 + ・・・ 構 造
・ ・
・ ・
・ ・
ABAPerは、変数/構造/内部テーブルといったら、これらのイメージ図が頭に思い浮かびます。
これらの共通概念をもとに会話が進んでいくのです。
1つひとつ、深堀しながら解説していきます。
3 変数
変数はExcelで例えると「1つのセル」に相当します。
1つのデータを保存するだけのメモリ領域です。
後述する「構造(ワークエリア)」と「内部テーブル」は、変数の集合体である、ととらえることもできます。
2.1 変数の定義
DATA (変数名) TYPE (データ型).
変数の定義には、DATA命令を用います。
この命令で、変数を定義することができます。
4 構造
構造は」Excelで例えると1行の複数セルに相当します。
「構造」はその性質上「ワークエリア」とも呼ばれます。
なぜ、ワークエリアと呼ばれるか?
それは、あるテーブルからデータを1行だけ取り出して処理を行いたい場合に用いられるのが基本的な利用方法となるためです。
例えば、ループ処理では処理の対象とする内部テーブルを1度にすべて処理を実行するのではなく、1行1行別で定義した構造にデータを格納した後に処理を行うのです。
4.1 構造の定義
DATA (変数名) TYPE (テーブル名).
(テーブル名)には、標準テーブルの名称(BKPFとかBSEG)、もしくはアドオンテーブルの名称を指定します。
え。テーブル名でいいの?
そんな声も聞こえてきそうですが、これでOKです。
テーブルをTYPEオプションに指定すると、構造が定義されるのです。
後述しますが、この点逆に内部テーブルを定義する際の注意点となりますので、丁寧な理解が必要です。
5 内部テーブル
内部テーブルは、ご覧の通り複数行の構造です。
「テーブル」の名の付く通り、複数のレコードを保持することができるメモリ領域です。
標準テーブルやアドオンテーブルのデータをそっくりそのまま(もしくは条件を絞って)メモしたい、というときに便利です。
5.1 内部テーブルの定義
DATA (変数名) TYPE STANDARD TABEL OF (テーブル名).
構造と内部テーブルの定義はセットで覚えるのがよいでしょう。
6 変数/構造/内部テーブルの初期化
内部テーブルや構造・変数については、一度定義した後1回のプログラム実行中に何度も使いまわすことが可能です。
つまり、処理Aで利用した内部テーブルは、同一のプログラムであれば処理Bでも利用することができるのです。
ただし、使いまわす際には、必ず毎回中身をクリア(初期化)する必要がでてきます。
初期化しなくても、上書きする形で新たにメモ書きすることが可能ですが、余計な心配事(バグの可能性)をなくすためには、必ず事前にCLEARするのがABAPのお作法です。
タグ:ABAP