3

特定のプラットフォームとコンパイラは別として、レポート ライター モジュールを使用して COBOL プログラムでこれを定義したとします。

01 CF-MM TYPE CONTROL FOOTING WS-MM.
             02 LINE PLUS 1.
                03 COLUMN 1             VALUE "* CF MONTH: ".
                03 COLUMN PLUS 1        PIC 99 SOURCE WS-MM.
                03 S-MM COLUMN PLUS 5   PIC S9(4)V99 SUM WS-TUTION-PAY. 
                03 VAL-NN COLUMN PLUS 5 PIC S9(4)V99 SOURCE S-MM.
      <...>
       PROCEDURE DIVISION.
       DECLARATIVES.  
           
        SEC2 SECTION.
            USE BEFORE REPORTING 
            CF-MM.
            DISPLAY "SUM MM LEVEL:" S-MM   
           .

さらに、プログラムが、SUM WS-TUTION-PAY の結果が 126 である 3 行を報告したとします。

S-MM 値を表示する SEC2 SECTION のステートメントから得られる値は何ですか? 126 のはずだと思いますが、ゼロが表示されています。これは、値 126 がまだ S-MM に移動されていないためかもしれませんが、よくわかりません。

S-MM の宣言セクションに表示される "べき" 値は何ですか

4

1 に答える 1

5

Q: COBOL REPORT WRITER モジュールの SUM 句で列を使用する場合、DECLARATIVES セクションで列を参照できますか?

03 S-MM COLUMN PLUS 5   PIC S9(4)V99 SUM WS-TUTION-PAY. 

S-MM句のdata-name形式です。entry-name2002 COBOL 標準、レポート グループ記述エントリ、13.13.2 構文規則からの引用:

7) SUM 句の UPON 句で、SUM カウンタの修飾子として、GENERATE ステートメント、USE BEFORE REPORTING ステートメントでデータ名が参照される場合、エントリ名句のデータ名形式を指定する必要があります。 、または SUM 句のオペランドとして。データ名は、他の方法で参照してはなりません。

その修飾子を考えるとS-MM、「SUM カウンターの修飾子として」参照される場合があります。

[COBOL 74 および 85 標準では、「データ名-1 はオプションですが、任意のエントリで指定できます。ただし、データ名-1 は、エントリが合計カウンタを定義している場合にのみ参照できます。」]

次のコードに使用したコンパイラは、Micro Focus COBOL 85 です。


コード:

   program-id. rw-test.
   environment division.
   input-output section.
       select report-file assign "rpt.txt"
           organization line sequential.
   data division.
   fd report-file
       report is report-1.
   working-storage section.
   01 n comp pic 99 value 0.
   01 test-table.
     02 test-data.
       03 pic 9999 value 1001.
       03 pic 9999 value 1002.
       03 pic 9999 value 1003.
       03 pic 9999 value 2004.
       03 pic 9999 value 2005.
       03 pic 9999 value 2006.
     02 test-entry redefines test-data pic 9999 occurs 6.
   01 report-entry.
       03 test-group pic 9.
       03 test-value pic 999.
   report section.
   rd report-1
    control is test-group.
   01 rw-detail type de.
     02 line plus 1.
       03 grp column 1 pic 9 source test-group.
       03 val column 4 pic zz9 source test-value.
   01 rw-foot type cf test-group.
     02 line plus 1.
       03 column 1 pic x(6) value "-  ---".
     02 line plus 1.
       03 column 1 pic 9 source test-group.
       03 s-mm column 4 pic zz9        *> s.mm defined
           sum test-value
           reset test-group.
     02 line plus 1 pic x value space.
   procedure division.
   declaratives.
   decl-rpt section.
       use before reporting rw-foot.
           display s-mm.               *> s.mm referenced
   end declaratives.
   main-line section.
       open output report-file.
       initiate report-1
       perform varying n from 1 by 1
       until n > 6
           move test-entry (n) to report-entry
           generate rw-detail
       end-perform
       terminate report-1
       close report-file
       stop run.
   end program rw-test.

報告:

1    1
1    2
1    3
-  ---
1    6

2    4
2    5
2    6
-  ---
2   15

画面:

006
015
于 2021-10-16T01:08:28.250 に答える