このページではABAPにおけるWRITE命令の構文ルール/利用方法、改行方法の仕方など各種オプションについてABAP初心者向けにわかりやすく解説します。

WRITE命令は、内容自体は理解しやすく構文も簡単ですが、出力位置の指定方法などに独特なコツとツボが存在します。
WRITE命令の利用頻度は最近はそこまで多くは無いのですが、ABAPerとしてはWRITE命令の基本や注意点はしっかり押さえておきましょう!
ABAPerを目指す方であれば知らないと恥ずかしい基本知識の1つです。是非最後までご覧ください。
ABAP:WRITE命令
WRITE [データオブジェクト/リテラル] (オプション).

サンプルコードはこちら↓。
DATA TEXT(10) TYPE C VALUE 1234567890. WRITE TEXT. WRITE /'This is a sample code.'. * 結果 * 1234567890 * This is a sample code.
WRITE命令は、オペランドに指定したデータオブジェクト/リテラルの内容を、一覧ページに書き込みます。ここで指定するデータオブジェクトは基本的にどのデータ型でもOKで、フィールドシンボルを指定することも可能です。
DATA: OUTPUT1 TYPE i. PARAMETERS: INPUT1 TYPE i, INPUT2 TYPE i. OUTPUT1 = INPUT1 * INPUT2. WRITE OUTPUT1.
上記コードの変数 "INPUT1" に100を。変数 "INPUT2 " に20を入れて実行すると、プログラム実行後の一覧画面は以下のようになります。

このようにWRITE命令は処理結果を画面に表示したい場合に利用されます。

ですが、実はWRITE命令はちょっと扱いづらい部分が多いので実際に一覧画面を出力するにはALVが利用することがほとんど。
ここからはWRITE命令の処理を一歩深く解説しつつ、WRITE命令の弱点がどの辺にあるのか?を理解していきましょう。
WRITE命令の出力位置
WRITE命令のちょっと難しいところは文字列の表示位置の指定方法です。

以下は先ほどお見せしたサンプルコードを少しだけ修正したものです。WRITE命令をチェーン形式で利用し2つのテキストを表示する処理です。
DATA: OUTPUT1 TYPE i, 10000 TYPE i VALUE `10000`. PARAMETERS: INPUT1 TYPE i, INPUT2 TYPE i. OUTPUT1 = INPUT1 * INPUT2. WRITE : OUTPUT1, 10000.
結果は以下の通りです。いい感じの「横並びで」表示されます。


ここで重要なのは、WRITE命令をオプションなしで利用する場合(デフォルトで利用する場合)、出力形式や表示位置が自動的に指定されてしまうという点です。
したがって、例えば表示位置を固定させたい帳票を作成したい場合などには「どのページ」の「何行目」の「何桁目」に表示したいのか?という指定を厳格に行う必要があります。
次の章ではWRITE命令を利用して改行や表示位置の指定方法など各種オプションについて解説します。
WRITE AT:出力位置の指定
WRITE AT (位置)(長さ)(データオブジェクト).
ATオプションを利用することで出力位置を指定することができます。どこから、どれぐらいの桁長で出力するかを指定します。
DATA: A TYPE i, B TYPE i. A = 1234. B = 456. WRITE A. WRITE AT 100(3) B.
最後の1行がATオプションを利用した例です。画面の1番左から、100文字分の位置に「3文字」でWRITEします。

WRITE AT命令ではこの位置を探すのが結構難しいのです。例えば以下のようにコーディングしてしまうとデータオブジェクトAの位置と重複します。
DATA: A TYPE i, B TYPE i. A = 1234. B = 456. WRITE A. WRITE AT 5(3) B.

重複された部分は上書きされてしまいます。

このようにWRITE命令を利用する際はこまめに画面表示の結果を逐一確認しながらコーディングしていく必要がある点に注意しましょう。
WRITE /:改行
WRITE / (データオブジェクト).
WRITEの直後にスラッシュ "/" を入れると、指定した文字列は改行されたうえで表示されます。
DATA: A TYPE i, B TYPE i. A = 1234. B = 456. WRITE A. WRITE AT /5(3) B.

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

改行前が空白文字の場合:WRITE /
"/" を用いる場合の注意点は改行をする前の行がブランクの場合です。
DATA:A TYPE c, B TYPE i, C TYPE i. C = 123. A = ` `. B = 456. WRITE C. WRITE A. WRITE AT /5(3) B.

改行をする前の行がブランクの場合は、"/" を記述しても改行されません。

"/" は、「改行する」というよりも「ブランクの行に出力する」という意味でとらえておくとよいでしょう。
WRITE命令の基本形は以上です。基本を理解していれば、応用的な知識も比較的楽に理解できると思いますので、このページの内容をしっかり理解しておきましょう。
SAP / ABAPを1から学習したい方は

初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!