【ABAP】WRITE命令をわかりやすく3分で解説

ABAP

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

WRITE命令は、内容自体は理解しやすく構文も簡単ですが、出力位置の指定方法などに独特なコツとツボが存在します。

WRITE命令の利用頻度は最近はそこまで多くは無いのですが、ABAPerとしてはWRITE命令の基本や注意点はしっかり押さえておきましょう!

このページで学べる内容
  • WRITE命令の基本/処理と構文ルール
  • WRITE命令のオプション
    • 改行
    • 出力位置

ABAPerを目指す方であれば知らないと恥ずかしい基本知識の1つです。是非最後までご覧ください。

スポンサーリンク

ABAP:WRITE命令

構文ルール: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を入れて実行すると、プログラム実行後の一覧画面は以下のようになります。

ABAP WRITE
WRITE命令の実行結果

このように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.

結果は以下の通りです。いい感じの「横並びで」表示されます。

ABAP WRITE
WRITE命令の実行結果2

ここで重要なのは、WRITE命令をオプションなしで利用する場合(デフォルトで利用する場合)、出力形式や表示位置が自動的に指定されてしまうという点です

したがって、例えば表示位置を固定させたい帳票を作成したい場合などには「どのページ」の「何行目」の「何桁目」に表示したいのか?という指定を厳格に行う必要があります。

次の章ではWRITE命令を利用して改行や表示位置の指定方法など各種オプションについて解説します。

WRITE命令の主要オプション
  • WRITE AT:表示位置/長さの指定
  • /(スラッシュ):改行

WRITE AT:出力位置の指定

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
WRITE AT命令の実行結果

WRITE AT命令ではこの位置を探すのが結構難しいのです。例えば以下のようにコーディングしてしまうとデータオブジェクトAの位置と重複します。

DATA:
     A TYPE i,
     B TYPE i.

A = 1234.
B = 456.

WRITE A.
WRITE AT 5(3) B. 
WRITE AT
WRITE AT命令の実行結果2

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

このようにWRITE命令を利用する際はこまめに画面表示の結果を逐一確認しながらコーディングしていく必要がある点に注意しましょう。

WRITE /:改行

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

WRITEの直後にスラッシュ "/" を入れると、指定した文字列は改行されたうえで表示されます。

DATA:
     A TYPE i,
     B TYPE i.

A = 1234.
B = 456.

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

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

WRITE / 実行結果画面

改行前が空白文字の場合: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.
blank
"/" の前がブランクの場合は改行されません

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

"/" は、「改行する」というよりも「ブランクの行に出力する」という意味でとらえておくとよいでしょう。

WRITE命令の基本形は以上です。基本を理解していれば、応用的な知識も比較的楽に理解できると思いますので、このページの内容をしっかり理解しておきましょう。

WRITE命令のまとめ
  • WRITE命令はオペランドに指定した文字列を一覧画面上に表示する命令
  • ATオプションや / を用いて文字列の出力位置を指定して利用する
WRITE [データオブジェクト/リテラル] (オプション).

SAP / ABAPを1から学習したい方は

SAP / ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

タイトルとURLをコピーしました