ABAP

【ABAP】WRITE命令―初心者向け

WRITE命令の構文ルール、利用方法、各種オプションについて解説しています。

WRITE命令は、内容自体は理解しやすく構文も簡単ですが、出力位置の指定方法が重要となりますので、最後までご覧ください。

また、WRITE命令1つで一覧画面を作ることができる分、出力位置の指定や書式の設定方法など、かなり詳細なプログラミング知識が必要になってきます。

が、このページだけではすべてを解説しきることは難しいため、「WRITE命令の基本」に観点を絞って整理していきたいと思います。

構文ルール:WRITE命令

WRITE (データオブジェクト or リテラル).

もっとも基本的な形です。WRITE命令は、(データオブジェクト or リテラル)の内容を、一覧ページに書き込みます。ここで指定するデータオブジェクトは基本どのデータ型でもOKです。フィールドシンボルも指定することができます。

さっそく以下のサンプルで動作を確認してみます。

サンプルコード:WRITE命令

DATA:
  OUTPUT1 TYPE i.

PARAMETERS:
  INPUT1 TYPE i,
  INPUT2 TYPE i.

  OUTPUT1 = INPUT1 * INPUT2.

WRITE OUTPUT1.

上記コード、「INPUT1」に100を、「INPUT2」に20を入れて実行した結果が以下の画面が表示されます。

WRITE命令の実行結果

非常に簡単な処理です。

文字の長さは、データ型の長さによって自動的に指定されます。

では、この場合はどのように表示されるでしょうか?

DATA:
  OUTPUT1 TYPE i,
  10000 TYPE i VALUE `10000`.

PARAMETERS:
  INPUT1 TYPE i,
  INPUT2 TYPE i.

  OUTPUT1 = INPUT1 * INPUT2.

WRITE : OUTPUT1,
        10000.

変数を1つ追加してみました。すると、

WRITE命令の実行結果2

横並びで2つ追加されます。ここで、重要なのは、WRITE命令をこれから解説するオプションなしでは、出力形式や表示位置が自動的に指定されてしまうことです。

したがって、実際のプログラムでWRITE命令がオプションなしで利用されるのはかなりのレアケースといっても過言ではないでしょう。

ここからはよく利用されるWRITE命令のオプションを解説していきます。

WRITE AT

WRITE AT 位置(長さデータオブジェクト.

「AT」オプションにより、出力位置を指定することができます。さっそく、サンプルコードを見てみましょう。

サンプルコード:WRITE AT

DATA:
TYPE i,
     B TYPE i.

= 1234.
= 456.

WRITE A.
WRITE AT 100(3) B.

最後の1行が、ATオプションを利用しています。画面の1番左から、100文字分の位置に「3文字」でWRITEします。

WRITE AT命令の実行結果

WRITE AT命令の難点として、この位置を探すのが結構難しいのです。例えば、

WRITE A.
WRITE AT 5(3) B.

としてしまうと、データオブジェクトAの位置と被ってしまいます。(その場合、上書きされます。)

WRITE AT命令の実行結果2

帳票系のプログラムは、この点に気を付けて細かくテストしてあげるのが重要であるといえます。

WRITE /

WRITE / (データオブジェクト).

WRITEの直後にスラッシュ “/” を入れると、次の行に出力されます。

DATA:
TYPE i,
     B TYPE i.

= 1234.
= 456.

WRITE A.
WRITE AT /5(3) B.

上記のコードを実行した結果がこちらです。

WRITE / 実行結果画面

また、WRITE ATに続くオペランド部分には、変数を指定することもできます。すなわち、

WRITE AT /5(3) B.

WRITE AT /POSITION(LENGTH) B.

のように指定することが可能です。

改行前が空白文字の場合

“/” を用いる場合の注意点は、改行をする前の行がブランクの場合です。

改行をする前の行がブランクの場合は、”/” を記述しても改行されません。”/” は、「改行する」というよりも「ブランクの行に出力する」という意味でとらえておくとよいでしょう。

したがって、以下のサンプルコードを実行した結果は以下のように表示されることになります。

DATA:TYPE c,
       B TYPE i,
      C TYPE i.

= 123.
= ` `.
= 456.

WRITE C.
WRITE A.
WRITE AT /5(3) B.

“/” の前がブランクの場合は改行されません