画面節項目の取り込みおよび表示

画面節項目を含む ACCEPT および DISPLAY 操作は他の ACCEPT または DISPLAY 操作と同様に処理されますが、1 つ重要な違いがあります。次のコードがあるとします。

 working-storage section.
 01 item-a              pic 9(5).
 01 item-b              pic 9(10).
 01 item-c              pic x(10).
 ...
 screen section.
 01 demo-screen.
     03 blank screen.
     03 line 1 column 1 pic z(4)9 from item-a.
     03 line 3 column 1 pic 9(10) to item-b.
     03 line 5 column 1 pic x(10) using item-c.

このコードをコンパイルすると、コンパイラは各画面節のレベル-01 項目 (レコード) ごとに作業領域を設定します。この例では、3 つのフィールド用のデータを保持するために必要な大きさの作業領域を demo-screen に設定します。

次の文を実行すると、

display demo-screen

item-a および item-c の内容が作業場所節から作業領域に転記され、これら 2 つのフィールド用作業領域のデータが画面に表示されます。item-b は ACCEPT のみのフィールドであるため表示されません。

次の文を実行すると、

accept demo-screen

item-b および item-c の作業領域にデータが取り込まれ、これら 2 つのフィールドのデータは作業領域から作業場所節に転記されます。item-a は DISPLAY のみのフィールドであるため、データは item-a には取り込まれません。

データ部から作業領域への転記は、DISPLAY 文を実行した場合にのみ発生し、作業領域からデータ部への転記は ACCEPT 文の実行中にのみ発生することに注意してください。DISPLAY 文をはさまない 2 つの ACCEPT 文が連続して実行されると、2 番目の ACCEPT の実行開始時におけるフィールドの初期の内容は、前の ACCEPT 実行中に作業領域に入れられたフィールドの内容であり、データ部項目の現在の内容ではありません。

つまり、データ部および画面節のどちらでも、フィールドは数字編集フィールドとして定義すべきではありません。数字編集フィールドとして定義すると、データ部項目を作業領域に転記したり、また、その逆の転記をするために、コンパイラは数字編集フィールドを数字編集フィールドに転記することになります。このような転記の結果は不定で、予期しない結果になります。データ部項目および画面節項目が両方とも同じ PICTURE 文字列である場合も同様です。

たとえば、プログラムに次のコード行が含まれているとします。

working-storage section.
 01 ws-item     pic zz9.99 value 1.23
 screen section.
 01 demo-screen.
     03 pic zz9.99 using ws-item.
 procedure division.
     display demo-screen.

DISPLAY 処理の結果は不定となります。データ部で、画面節の ACCEPT または DISPLAY 文のソースまたはターゲットとして使用される項目は、常に非編集フィールドにします。