出力命令、改ページ処理、帳票タイトルの出力

18.2 出力命令、改ページ処理、帳票タイトルの出力

2. 出力命令、改ページ処理、帳票タイトルの出力

以下について説明します。

  • レポートの出力によく使用される出力命令
  • 一覧での改ページ方法
  • 一覧でタイトルを出力する方法

出力命令

出力命令(WRITE命令)にはさまざまな出力方法があり、
以下について詳しく説明していきます。

  • 出力命令(基本形)
  • 出力命令のオプション①
  • 出力命令のオプション②
  • 出力命令のオプション③
  • 出力命令のオプション④
  • フォーマットオプション①
  • フォーマットオプション②
  • 一覧エレメント

出力命令(基本形)

出力命令(基本形)

画面にデータを出力する方法として基本となるのが、WRITE命令です。
基本形の構文は、次のようになります。

<変数>を画面に出力しなさい、という命令になります。

出力命令のオプション①

以下について説明します。

  • 開始位置と出力長
  • 改行
  • 左寄せ/中央寄せ/右寄せ
  • 文字間の空白除去

出力命令のオプション①(開始位置と出力長)

WRITE命令の後に、開始位置と出力長を定義することができます。
出力長については、半角の丸カッコで囲む必要があります。
構文中の「m」、「n」は、不特定の数値を表す記号です。

<変数>を、開始位置mから、出力長nで、画面に出力しなさい、という命令になります。

構文例 WRITE m(n)

例題①は、<変数>を、開始位置3から、画面に出力しなさい、という命令になります。
例題②は、<変数>を、出力長10で、画面に出力しなさい、という命令になります。
例題③は、<変数>を、開始位置3から、出力長10で、画面に出力しなさい、という命令になります。

例題②、③のように、出力長に10を指定した場合、<変数>の桁数が10バイト以上ある場合、先頭から10バイトしか出力されません。
例題①、②のように、開始位置と出力長は必ずセットで指定する必要はありません。
しかし、例題③のように両方指定している方がソースコードは見やすくなります。
開始位置と出力長は、動的に指定することもできます。

構文例 WRITE AT m(n)

<変数>を、開始位置<COL>から、出力長<LEN>で、画面に出力しなさい、という命令になります。
WRITE命令の後に AT を付けることで、開始位置と出力長を動的に指定することが可能です。

ここでの結果は、前述の例題③と同じです。
<COL>に3、<LEN>に10を代入していますので、3カラム目から10バイトの領域に<変数>の内容が表示されます。

出力命令のオプション①(改行)

改行には、NEW-LINE命令、またはWRITE命令の2通りがあります。

改行しなさい、という命令になります。

改行してから、<変数>を出力しなさい、という命令になります。

構文例 NEW-LINE

構文例 WRITE /

出力結果は、どちらの方法でも同じになります。
<変数A>を出力後、改行し、<変数B>を出力します。
WRITE命令で改行する際は「/」を使用することがほとんどです。

出力命令のオプション①(左寄せ/中央寄せ/右寄せ)

出力領域内で出力文字の配置を指定できます。
何も指定しない場合は、出力項目の属性により位置が決まり、
数値属性以外は左寄せ、数値属性は右寄せとなります。

<変数>を、左寄せ/中央寄せ/右寄せで出力しなさい、という命令になります。

構文例 WRITE LEFT-JUSTIFIED / CENTERED / RIGHT-JUSTIFIED

出力命令のオプション①(文字間の空白除去)

WRITE命令による出力を行った場合、カーソルは、次の位置の後ろにカーソルが配置されます。
そのため、 連続して出力を行うと空白文字が入ります。
NO-GAPを使用することで直後にカーソルが配置され、 間隔を空けずに出力することができます。

<変数>を、間隔を空けずに出力しなさい、という命令になります。

構文例 WRITE NO-GAP

① <変数A>と<変数B>の間に空白文字が入って出力されます。
② NO-GAPを指定した場合、<変数A>と<変数B>は間隔を空けずに出力されています。
出力桁数が固定されていれば、 開始位置の指定でも同様の対応は可能です。

出力命令のオプション②

続いて、以下について説明します。

  • 直前に出力した位置の利用
  • 桁区切り文字の無効化
  • 符号の無効化
  • ゼロを空白として出力する方法

出力命令のオプション②(直前に出力した位置の利用)

UNDERを利用すると、現在の行で直前のWRITE命令で出力された位置に出力が行われます。
例えば、項目ヘッダテキストを出力し、明細データを出力する場合に配置を指定せずに項目ヘッダテキストを参照させることで、正しい配置で出力することができます。
また、出力位置が変わった場合、項目ヘッダテキストの位置を変更することで、明細データの配置も自動で変わります。

<参照出力項目>の下に、<変数>を出力しなさい、という命令になります。

構文例

TYPES:
   BEGIN OF TYP_KNB1,
        BUKRS TYPE BUKRS,
        KUNNR  TYPE KUNNR,
    END  OF TYP_KNB1 .

DATA:
    IT_KNB1 TYPE  STANDARD  TABLE  OF  TYP_KNB1,
    WA_KNB1 TYPE TYP_KNB1 .

START-OF-SELECTION .

WRITE: 10  ‘会社コード’ , 40  ‘得意先コード’ .
SELECT BUKRS KUNNR
     FROM   KNB1
     INTO   TABLE  IT_KNB1 .

LOOP  AT  IT_KNB1  INTO  WA_KNB1.

    WRITE: / WA_KNB1-BUKRS  UNDER   ‘会社コード’
                  WA_KNB1-KUNNR  UNDER  ‘得意先コード’

ENDLOOP.

「会社コード」の下に、構造:WA_KNB1の項目:BUKRS(会社コード)が出力され、
「得意先コード」の下に、構造:WA_KNB1のKUNNR(得意先コード)が出力されます。

出力命令のオプション②(桁区切り文字の無効化)

数値型の属性は、ユーザごとに指定した桁区切り(ユーザプロファイルの10進表記)に自動変換して表示されます(例えば、1,234.567など)。
桁区切り表記を無効にする場合に、NO-GROUPINGを使用します。

<変数>を桁区切りなしで表示しなさい、という命令になります。

構文例 WRITE NO-GROUPING

① ユーザプロファイルの桁区切りの設定に従って出力されます。
② NO-GROUPINGオプションが指定されているため、桁区切りなしで出力されます。

補足事項2

自分のユーザの桁区切りの設定は、ユーザプロファイルで確認できます。
自分のユーザプロファイルの確認の仕方は、7.2 「補足事項2」をご確認ください。

出力命令のオプション②(符号の無効化)

数値型かつ符号を持つ項目属性は、最後の1桁に符号の領域が用意されます。
符号領域を無効化する場合NO-SIGNを使用します。

<変数>を符号領域なしで出力しなさい、という命令になります。

構文例 WRITE NO-SIGN

① 最後の1桁に符号領域ありで出力されます。
② NO-SIGNオプションが指定されているため、最後の1桁に符号領域なしで出力されます。

出力命令のオプション②(ゼロを空白として出力)

数値データ型で値ゼロを格納している場合に、出力長に対して空白が出力されます。
データ型C、N またはStringの場合、先行ゼロが空白として表示されます。

<変数>を先行ゼロなしで出力しなさい、という命令になります。

構文例 WRITE NO-ZERO

出力命令のオプション③

以下の出力形式について説明します。

  • 通貨換算
  • 小数点以下の表示

出力命令のオプション③(通貨換算)

SAPの金額は、 すべて小数点以下2桁で管理されています。
通貨ごとに小数点以下の桁数が定義されており、通貨コードと組み合わせることで通貨に伴った金額が表示されます。
(TCURCで通貨コードそのものが、TCURXで通貨コードの小数点以下桁数が見られます。
以下に確認方法になります。
<確認方法>
SE16→テーブル名に”TCURC | TCURX ”を入力し、検索)

日本円の場合、画面で1,000円を入力するとSAPシステム上には10.00で格納されます。
通貨コードを指定することで1,000と表示されますが、指定しない場合は、SAPシステム上に格納されている内容で表示されてしまいます。

<変数>を通貨:<通貨コード>で出力しなさい、という命令になります。

構文例 WRITE CURRENCY

② JPY通貨(小数点以下桁数=0)に変換されて表示されます。
③ USD通貨(小数点以下桁数=2)に変換されて表示されます

出力命令のオプション③(小数点以下の表示)

数値項目(データ型I、PまたはF型)の小数点以下桁数の表示を指定できます。
小数点以下の表示桁数が項目の小数点以下より少ない場合は、次の桁数で四捨五入されて表示されます。
桁数をマイナスで指定した場合、ゼロとして処理されます。
数値項目以外のデータ型では、このオプションは無視されます。

<変数>を小数点以下桁数<桁数>で出力しなさい、という命令になります。

構文例 WRITE DECIMALS

<変数>の小数点以下桁数は4で定義されいるため、<変数>は小数点以下桁数4で表示されます。

オプションDECIMALSで2が指定されているため、<変数>は小数第3位で四捨五入され、
小数点以下桁数2で表示されます。

補足(「小数点以下を切り捨て」したい場合について)

「関数」と「汎用モジュールを使用する3点の方法があります。
関数に関しては、関数「FLOOR」と「CEIL」を用いることで切り捨てが可能です。
また画像のようにすることで、結果を入れる変数の型が小数点に対応しているかによって
切り捨て後に.00等をつけるかを変えられます。

「汎用モジュール」については”ROUND”という汎用モジュールで可能になります。

出力命令のオプション④

以下の出力形式について説明します。

  • 変換ルーチンの無効化
  • マスク編集
  • 日付固有の出力形式

出力命令のオプション④(変換ルーチンの無効化)

このオプション(USING NO EDIT MASK) は、変換ルーチンを無効化します。
変換ルーチンは、内部形式から外部形式に変換を行い表示するものですが、それを無効化するオプションになります。

<変数>を変換ルーチンなしで出力しなさい、という命令になります。

構文例 WRITE USING NO EDIT MASK

ドメイン:SAKNR(G/L 勘定コード)には変換ルーチン:ALPHAが割り当たっています。
① 前ゼロが削除された、外部形式で出力されます。
② オプションUSING NO EDIT MASKが指定されているため、前ゼロ付きの内部形式で出力されます。

出力命令のオプション④(マスクの編集)

下記2つの構文のオプションは、マスクの編集や個別の変換ルーチンを指定することができます。

<変数>を<マスク編集>の形式で出力しなさい、という命令になります。

<変数>を<変換ルーチン>>の形式で出力しなさい、という命令になります。

構文例 WRITE USING EDIT MASK

出力命令のオプション④(日付固有の出力形式)

下記の構文のオプションは、日付項目のさまざまな出力形式です。
ユーザマスタの日付出力定義により年、月、日の順序が決まるので、日付形式の通りにはならないので注意してください。

<変数>を<日付形式>で出力しなさい、という命令になります。

構文例 WRITE <日付形式>

日付形式の設定が、「YYYY/MM/DD」のユーザで実行した結果となります。

① DD/MM/YYYY でも同様の結果となります。
② DD/MM/YY でも同様の結果となります。
③ DDMMYY でも同様の結果になります。

補足事項2

自分のユーザの日付形式の設定は、ユーザプロファイルで確認できます。
自分のユーザプロファイルの確認の仕方は、7.2 「補足事項2」をご確認ください。

フォーマットオプション①

WRITE命令では、フォーマットオプションとして、色や罫線、入力属性、フレーム等を定義することができます。
また、それぞれを組み合わせることで、さまざまな出力を実現できます。
フォーマットオプション①では、以下について説明します。

  • カラー
  • 背景色の濃度
  • 文字の色
  • マウスポインタの表示

フォーマットオプション①(カラー)

このオプション(カラー) は、出力の色を設定します。

<変数>を色:<C>で出力しなさい、という命令になります。
<C>は、カラー番号またはカラーテキストになります。

構文例 WRITE COLOR

出力結果

カラー番号を指定しても、カラーテキストを指定しても、結果は同じになります。

フォーマットオプション①(背景色の濃度)

このオプション(背景色の濃度)は、背景色の濃度を指定できます。
ONの場合、濃い背景色が使用され、OFFの場合、薄い背景色となります。

<変数>を濃い背景色または薄い背景色で出力しなさい、という命令になります。
INTENSIFIEDの後にON/OFFの指定がない場合は、ONとなります。

構文例 WRITE INTENSIFIED ON / OFF

出力結果

ONの場合、濃い背景色、OFFの場合、薄い背景色で出力されます。

フォーマットオプション①(文字の色)

このオプション(文字の色)は、オプションCOLORが背景色と前景色のどちらを設定するかを指定します。
ONの場合、前景色(文字の色)が設定され、OFF場合、背景色が設定されます。

<変数>を前景色または、背景色で出力しなさい、という命令になります。
INVERSEの後にON/OFFの指定がない場合は、ONとなります。

構文例 WRITE INVERSE ON / OFF

出力結果

ONの場合、前景色1で出力され、OFFの場合、背景色1で出力されます。

フォーマットオプション①(マウスポインタの表示)

このオプションを有効にした場合、画面に表示された一覧で出力した領域にカーソルをあてるとマウスポインタが手の形に変わり、シングルクリックでダブルクリックの処理、つまり機能キー[F2]のクリックと同じ処理が実行されます。
OFFを指定した場合、マウスの機能は変更されません。

カーソルをあてるとマウスポインタが手の形になるように、<変数>を出力しなさい、という命令になります。
HOTSPOTの後にON/OFFの指定がない場合は、ONとなります。

構文例 WRITE HOTSPOT ON/OFF

出力結果

伝票番号の「1001203948」にカーソルを合わせた場合のみ、マウスポインタが手の形に変わります。

フォーマットオプション②

フォーマットオプション②では、以下について説明します。

  • 入力可能項目
  • 横線&罫線の結合
  • フォーマットオプションの無効

フォーマットオプション②(入力可能項目)

このオプション(入力可能項目)は、一覧の出力領域を入力可能項目にします。
また、出力内容を上書きすることができます。背景色との組み合わせも可能です。
注意点として、一覧行に空白文字だけの入力項目がある場合、事前にSET BLANK LINES ON命令を実行しておかなければ、その行は表示されません。

<変数>を入力可能項目として出力しなさい、という命令になります。
なお、上書きした内容は、プログラムに自動で反映しません。
READ LINE命令を使用して取得する必要があります。

構文例 WRITE INPUT ON

出力結果

伝票番号と明細番号の値が入力可能となります。
上書きも可能です。

フォーマットオプション②(横線&罫線の結合)

このオプション(横線&罫線の結合)は、横線「-」と罫線「|」を結合するかどうかを指定します。
ONを指定した場合、該当する上覧領域で変換が実行されます。
OFFを指定した場合、変換は実行されません。
FRAMESの後ろにON、OFFの指定をしない場合、ONとなります。

<変数>を、横線・罫線の結合あり、または、なしで出力しなさい、という命令になります。

構文例 WRITE FRAMES ON/OFF

出力結果

オプションを有効にした場合、罫線または横線がすべて結合されて表示されます。

フォーマットオプション②(フォーマットオプションの無効)

このオプション(フォーマットオプションの無効)は、FRAMEオプションを除いたすべてのフォーマットオプションを無効化します。

出力結果は、FRAMESオプション以外は、指定なしの状態で出力されます。
なお、ここまで紹介してきたフォーマットオプションは、FORMAT命令でも同様に使用できます。
FORMAT命令は、指定以降すべてのオプションが有効になります。
次のFORMAT再定義まで適用されます。

構文例 FORMAT

出力結果

FIELD1~FIELD3は、色NO1(水色)で表示されます。
FIELD4~FIELD5は、色NO3(黄色)で表示されます。
FIELD6は、リセットにより色なしになります。

一覧エレメント

WRITE命令には、特殊な一覧エレメントを出力することができます。
一覧エレメントでは、以下を説明します。

  • チェックボックス
  • アイコン
  • シンボル

一覧エレメント(チェックボックス)

このオプション(チェックボックス)により、入力可能なチェックボックスが出力されます。
長さ1桁の文字型データオブジェクトである必要があります。
入力値が「X」または「x」である場合には、選択された状態のチェックボックスが表示されます。
それ以外は、チェックボックスは空として表示されます。

チェックボックス:<変数>を出力しなさい、という命令になります。

構文例 WRITE AS CHECKBOX

出力結果

一覧エレメント(アイコン)

このオプション(アイコン)により、アイコンが出力されます。
C型のデータオブジェクトを指定する必要があります。
データ型グループICON、または一般的なインクルードプログラム<LIST>をプログラムのグローバル宣言にインクルードすることによって、データオブジェクトを宣言することができます。

アイコン:<ICON>を出力しなさい、という命令になります。

構文例 WRITE AS ICON

出力結果

アイコンの種類は、トランザクションコード:ICONで確認できます。

一覧エレメント(シンボル)

このオプション(シンボル)により、アイコンと同じよう にシンボルを出力します。
データ型グループSYM、または一般的なインクルードプログラム<LIST> をプログラムのグローバル宣言部分にインクルードする必要があります。
アイコンの出力とよく似ています。

シンボル:<SYMBOL名>を出力しなさい、という命令になります。

構文例 WRITE AS SYMBOL

出力結果

シンボルの種類は、プログラム:SHOWSYMBで確認できます。

改ページ処理

一覧での改ページ方法について以下を説明していきます。

  • 命令による改ページ
  • NEW-PAGEオプション
  • 指定行数による改ページ

命令による改ページ

改ページのNEW-PAGE命令によって、現在の一覧で改ページを行います。
しかし、WRITEやULINE命令などの一覧への出力命令が発行されるまでは、有効になりません。
つまり、NEW-PAGE命令は、現在ページを完了する命令であり、WRITEやULINE命令が発行されると次のページに出力される動きになっています。
NEW-PAGE命令が発行されると、 最初に一覧イベ ン卜「TOP-OF-PAGE」がトリガーされます。

構文例 NEW-PAGE

出力結果

出力前は必ずTOP-OF-PAGEイベントを処理しています。
なお、「改ページ」の部分は表題になります。

NEW-PAGEオプション

改ページ命令のオプションには、以下2つがあります。
それぞれ概要を説明していきます。

  • ページオプション
  • スプールオプション

NEW-PAGEオプション(ページオプション)

  • 後続のすべてのページで 標準ヘッダ or 列ヘッダのオン/オフを切り替えます。

標準ヘッダの表示、非表示を指定します。

列ヘッダの表示、非表示を指定します。

構文例 NEW-PAGE

出力結果

1ページ目は、オプションWITH-TITLEと、オプションWITH-HEADINGを指定したので、
標準ヘッダ、列ヘッダ共に表示されます。

2ページ目は、オプションNO-TITLEと、オプションNO-HEADINGを指定したので、
標準ヘッダ、列ヘッダ共に非表示になります。

標準ヘッダ、列ヘッダの設定方法

トランザクションコード:SE38でプログラムを編集中に、
上部のメニューから、「ジャンプ ー> テキストエレメント ー> 一覧ヘッダ」と選択します。

標準ヘッダ、列ヘッダの編集画面が表示されます。

LINE-COUNT

<n>に1ページの行数を指定する構文は、次のようになります。

改ページ後の1ページの行数<n>で改ページしなさい、という命令になります。

LINE-SIZE

<n>に1行の表示桁数(行幅)を指定する構文は、次のようになります。

改ページ後の1行の幅<n>で改ページしなさい、という命令になります。

NO-TOPOFPAGE

イベントTOP-OF-PAGEを発生させなくする構文は、次のようになります。

NEW-PAGEオプション(スプールオプション)

スプールとは、データの入出力について、一時的に外部に書き込むことでパフォーマンスを向上する仕組みのことです。
SAPシステムではプログラムが帳票を出力する機能を保持する際などで活用します。

指定行数による改ページ

レポート命令のオプションのLINE-COUNTを指定することで、一覧のページ内の行数が設定されます。
設定された行数を超えると、NEW-PAGE命令と同様に、現在ページを完了し、最初に一覧イベン卜「TOP-OF-PAGE」がトリガーされます。

構文例 REPORT LINE-COUNT

出力結果

オプションLINE-COUNT で50を指定しているため、1ページ50行を超えると改ページされます。

帳票タイトルの出力

一覧でのタイトルを出力する方法について以下を説明していきます。
標準機能で、プログラムの表題を、レポートの標準ページヘッダに出力する機能があります。

プログラムの表題は、トランザクションコード:SE38で、ラジオボタン:属性を選択すると、確認できます。

ここで確認できます。

実行時に、レポー卜の標準ヘッダに、プログラム属性の表題が、出力されます

また、標準ページヘッダを出力させない方法として、レポート命令のオプション「NO STANDARD PAGE HEADING」を使用することで、標準ページヘッダが出力されなくなります。
その構文は、次の通りです。

構文例 REPORT NO STANDARD PAGE HEADING

出力結果

オプションNO STANDARD PAGE HEADINGを指定したため、ヘッダが表示されません。


NEXT>> 18.3 メッセージ