gnuci你能引用一个列在声明部分时,列与SUM子句在COBOL REPORT WRITER模块使用?



除了特定的平台和编译器之外,假设您在使用Report Writer Module的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   
.

此外,假设程序报告了3行,其中SUM ws - tutorial - pay的结果为126。

SEC2 SECTION中显示S-MM值的语句产生的值是什么?我想它应该是126,但我得到零显示。这可能是因为126的值还没有移动到S-MM,但我不确定。

"应该"的值是多少?显示在S-MM

的声明部分

Q: 当列在COBOL REPORT WRITER模块中与SUM子句一起使用时,您可以在声明部分引用列吗?

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

S-MMentry-name子句的data-name格式。引用自2002年COBOL标准,报表组描述条目,13.13.2语法规则:

7)当数据名在GENERATE语句、USE BEFORE REPORTING语句、SUM计数器的限定符、SUM子句的UPON短语或SUM子句的操作数中被引用时,必须指定entry-name子句的数据名格式。数据名不得以任何其他方式引用。

如果S-MM符合条件,则可以引用它作为SUM计数器的限定符。

COBOL 74和85标准声明,"Data-name-1是可选的,但可以在任何条目中指定。但是,Data-name-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

最新更新