!--a11y-->

サブルーチンは、サブルーチンが定義されたプログラム ( メインプログラム) 内のすべてのグローバルデータにアクセスすることができます。このため、サブルーチン内のデータを変更しない場合、またはデータがほとんど含まれていない場合は、パラメータインタフェースを定義する必要はありません。

FORM HEADER.
WRITE: / 'Program started by', SY-UNAME,
/ 'on host', SY-HOST,
'date:', SY-DATUM, 'time:', SY-UZEIT.
ULINE.
ENDFORM.
この例では、インクルードプログラムの例のように一覧ヘッダが表示される、HEADER というサブルーチンを登録します。
ただし、サブルーチンでプログラムのグローバルデータに影響を与えずに複雑なデータ操作を実行する場合は、必要なデータを正確に渡すパラメータインタフェースを定義する必要があります。適切なプログラミングスタイルおよびカプセル化のため、少なくともサブルーチンでデータを変更する際は、 常にパラメータインタフェースを使用する必要があります。
グローバルデータオブジェクトの値がサブルーチン内部で変更されないようにするには、以下の命令文を使用します。
LOCAL <f>.
この命令文は FORM 命令およびENDFORM 命令間でのみ使用します。LOCAL では、サブルーチン内部のデータ宣言によって隠せないグローバルデータオブジェクトの値を保持することができます。
たとえば、TABLES 命令によって定義されたテーブル作業領域を、サブルーチン内部の他の TABLES 命令で宣言することはできません。テーブル作業領域をローカルで使用しながら、そのコンテンツをサブルーチン外部で保持する場合は、LOCAL 命令を使用する必要があります。

PROGRAM FORM_TEST.
TABLES SFLIGHT.
PERFORM TABTEST1.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
PERFORM TABTEST2.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
FORM TABTEST1.
SFLIGHT-PLANETYPE = 'A310'.
SFLIGHT-PRICE = '150.00'.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
ENDFORM.
FORM TABTEST2.
LOCAL SFLIGHT.
SFLIGHT-PLANETYPE = 'B747'.
SFLIGHT-PRICE = '500.00'.
WRITE: / SFLIGHT-PLANETYPE, SFLIGHT-PRICE.
ENDFORM.
プログラムを実行すると、以下が表示されます。
A310 150.00
A310 150.00
B747 500.00
A310 150.00
プログラムではデータベーステーブル SFLIGHT に対してテーブル作業領域 SFLIGHT が登録されます。TABTEST1 およびTABTEST2 では、テーブル作業領域 SFLIGHT に異なる値が割り当てられます。TABTEST1 に割り当てられた値はグローバルに有効ですが、TABTEST2 に割り当てられた値はローカルでのみ有効です。