!--a11y-->

完全性のために、このセクションでは、外部サブルーチンから呼出元プログラムのグローバルデータにアクセスする技術について説明します。そのために、呼出元プログラムおよびサブルーチンを含むプログラムの共通データ領域を宣言します。TABLES および NODES を使用して宣言されたすべてのインタフェース作業領域は、共通データ領域として動作します。
共通データ領域は、外部サブルーチンそのもののように、できるだけ節約して使用する必要があります。ネストしたサブルーチンから汎用モジュールを呼び出す場合、共通データ領域へのアクセス規則は非常に複雑になる可能性があります。
命令の使用に関するすべてのプログラムで、共通データ領域を宣言します。
DATA: BEGIN OF COMMON PART [<name>],
END OF
COMMON PART [<name>].
2 つの DATA 命令の間で、共通データ領域にインクルードするすべてのデータを宣言します。
共通部分の宣言は、使用するすべてのプログラムで完全に同じであることが必要です。このため、宣言をインクルードプログラムに組み込むことをお奨めします。
1 つのプログラム内で複数の共通部分を使用することができます。その場合、各共通部分に名前 <name> を割り当てる必要があります。各プログラムに共通部分が 1 つしかない場合は、名前を指定する必要はありません。共通部分に異なった宣言をしているプログラム間で競合を回避するために、共通部分には常に一意の名前を割り当てる必要があります。

インクルードプログラム INCOMMON に、共通部分 NUMBERS の宣言が含まれているとします。共通部分は 3 つの数値項目 NUM1 、NUM2 、および SUM で構成されています。
***INCLUDE INCOMMON.
DATA: BEGIN OF COMMON PART NUMBERS,
NUM1 TYPE I,
NUM2 TYPE I,
SUM TYPE I,
END OF COMMON PART NUMBERS.
プログラム FORMPOOL は INCOMMON をインクルードし、サブルーチン ADDIT および OUT が含まれています。
PROGRAM FORMPOOL.
INCLUDE INCOMMON.
FORM ADDIT.
SUM = NUM1
+ NUM2.
PERFORM
OUT.
ENDFORM.
FORM
OUT.
WRITE: / 'Sum of', NUM1, 'and',
NUM2, 'is', SUM.
ENDFORM.
呼出元プログラム FORM_TEST は INCOMMON をインクルードし、プログラム FORMPOOL からサブルーチン ADDIT を呼び出します。
PROGRAM FORM_TEST.
INCLUDE INCOMMON.
NUM1 = 2. NUM2 = 4.
PERFORM ADDIT(FORMPOOL).
NUM1 = 7. NUM2 = 11.
PERFORM ADDIT(FORMPOOL).
これにより、出力は以下のようになります。
Sum of 2 and 4 is 6
Sum of 7 and 11 is 18
プログラム FORMPOOL のサブルーチンは、共有データ領域のグローバルデータにアクセスします。

以下のように 2 つのサブルーチン TABTEST1 および TABTEST2 を含むプログラム FORMPOOL を想定します。
PROGRAM FORMPOOL.
TABLES SFLIGHT.
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.
プログラム FORM_TEST は、以下のように TABTEST1 および TABTEST2 を呼び出します。
PROGRAM FORM_TEST.
TABLES SFLIGHT.
PERFORM TABTEST1(FORMPOOL).
WRITE: / SFLIGHT-PLANETYPE,
SFLIGHT-PRICE.
PERFORM TABTEST2(FORMPOOL).
WRITE: / SFLIGHT-PLANETYPE,
SFLIGHT-PRICE.
SAPMZTST の出力は以下のようになります。
A310 150.00
A310 150.00
B747 500.00
A310 150.00
すべてのプログラムは、TABLES 命令で宣言されたテーブル作業領域 SFLIGHT にアクセスすることができます。サブルーチン TABTEST2 では、グローバル作業領域は LOCAL 命令によって、サブルーチンでの変更から保護されています。