本ページでは、ABAPにおけるTABLES命令の意味と処理内容/基本構文について解説します。
普段あまり見慣れない命令かもしれませんが、レガシープログラム(古くから存在しているププログラム)の改修などで唐突に現れることもあるので、このページで解説・整理しておきたいと思います。
ABAPerであれば知っておいて損はない内容です。是非最後までご覧ください。
TABLES命令とは
TABLES命令は「データベース」と同じ名前のテーブル作業領域を宣言する命令です。
BKPFを参照した場合、それと全く同じ名称の内部テーブルが生成されるということです。
具体的な構文ルールを踏まえて、実際の処理内容を詳しく解説していきます。
構文ルール:TABLES命令
構文は非常に簡素です。この命令を実行すると、(テーブル名)に指定したテーブルと同じ名称の内部テーブルが定義されます。
テーブルだけでなく、ABAPディクショナリに登録した構造やビューも指定できます。(ただし、ABAPオブジェクトでは利用できません。)
例えば、こんな使い方ができます。
TABLES BKPF.
こうすることで、BKPF(会計伝票ヘッダテーブル)と同様のテーブル作業領域(内部テーブル)が出来上がります。
ただし、何度も説明している通り、この命令を利用せずとも内部テーブルを宣言することは可能。内部テーブルの名称がDBテーブルと同じ名称になるのでできれば利用は避けたほうが良いでしょう。
DATA BSEG_WA TYPE BKPF.
実際に内部テーブルを定義する際は、現在では上記のようにDATA命令を用いるのは主流のためTABLES命令はほとんど用いられることはありません。
TABLES命令:利用例
以下のコードでは、BSEGの作業領域を宣言しています。
TABLES: BSEG. "テーブル「BSEG」の作業領域 SELECT * FROM BSEG. WRITE: BSEG-BUKRS, "会社コード BSEG-BELNR, "伝票番号 BSEG-BUZEI. "明細番号 ENDSELECT.
1行目
⇒「BSEG(会計伝票明細)」と同じ構造の作業領域を宣言
3行目~6行目
⇒SELECTで「BSEG」をループ / 対象のレコードをWRITE
サンプルコードで利用した命令(SELECT/WRITE)について詳しく知りたい方はこちら
お気づきのように、構造とテーブル名が同じになってしまうため、非常に可読性が悪いです。(おそらく、もともとは構造を意識せずに利用できる命令として導入されていたのではないかと推測しています。)
新規に開発を行う場合は、TABLES命令の利用は避けるようにしましょう。
ABAPを1から勉強したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!