我正在使用DFSORT的ICETOOL DISPLAY运算符来生成帐户列表。我在分支机构上使用“BREAK”按分类代码分隔帐户,然后将帐户余额相加。一切正常,但在使用BTOTAL总结余额后,我得到一个额外的条目(帐户)。我在下面添加了我的代码和结果,以便您更好地理解我的问题。
码
//SUR0007 JOB (5678),'ACCOUNTS'
//RUNIT EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//TOOLIN DD *
DISPLAY FROM(INPUT2) LIST(REPORT) -
TITLE('LIST OF BANK ACCOUNTS BY BRANCH') -
HEADER('ACCOUNT') ON(2,8,BI,E'99999999') -
HEADER('BALANCE') ON(3,6,BI,E'99999999') -
HEADER('OWNER') ON(13,30,CH) -
BTITLE('SORTCODE:') BREAK(1,4,BI,E'999999') -
BTOTAL('BRANCH TOTAL:') -
TOTAL('GRAND TOTAL:')
/*
//INPUT2 DD DSN=USER.CICS.Z022.BANK.ACCOUNTS,DISP=SHR
//REPORT DD SYSOUT=*
结果
SORTCODE:000012
ACCOUNT BALANCE
-------- --------
91317760 97999587
BRANCH TOTAL :
91317760 97999587
预期结果
SORTCODE:000012
ACCOUNT BALANCE
-------- --------
91317760 97999587
BRANCH TOTAL : 97999587
答案 0 :(得分:0)
DFSORT的ICETOOL DISPLAY运算符有很多选项,这意味着它有大量的文档。
您应该参阅 DFSORT入门手册以获得介绍级别的使用,并参阅 DFSORT应用程序编程指南以获得更多高级别的使用。
在BCOUNT内,所有数字字段都会显示总计。您的帐户是数字(二进制),但如果您不能将其设为非数字,则可以使用NOST
(您可以假装这意味着没有子总计)作为您不使用的任何字段格式的一部分想要自动求和。
要使您的BTOTAL文字与总计显示在同一行,请在报告说明中使用STATLEFT
。
以下是应用程序编程指南中使用这两者的示例:
DISPLAY FROM(ACCTS) LIST(FANCY) -
TITLE('Accounts Report for First Quarter') -
DATE(MD4/) BLANK -
HEADER('Amount') ON(12,6,ZD,C1,N08) -
HEADER(Id') ON(NUM,N02) -
HEADER('Acct#') ON(31,3,PD,NOST,LZ) -
HEADER('Date') ON(1,4,ZD,E'99/99',NOST) -
INDENT(2) BETWEEN(5) -
STATLEFT -
TOTAL('Total for Q1') -
AVERAGE('Average for Q1')
有相同报告的简单版本的编码:
DISPLAY FROM(ACCTS) LIST(PLAIN) -
TITLE('Accounts Report for First Quarter') -
DATE(MD4/) BLANK -
HEADER('Amount') ON(12,6,ZD) -
HEADER(Id') ON(NUM) -
HEADER('Acct#') ON(31,3,PD) -
HEADER('Date') ON(1,4,ZD) -
TOTAL('Total for Q1') -
AVERAGE('Average for Q1')
输出,以及示例的解释,是:
此示例显示了一些可用于改善外观的选项 一个DISPLAY报告。第一个DISPLAY运算符产生“普通” 报告,第二个DISPLAY运算符使用粗体显示的选项 制作一份“花哨”的报告。
The PLAIN output starts on a new page and looks as follows:
Accounts Report for First Quarter 05/04/2001
Amount Id Acct# Date
--------------- --------------- ------------------- --------------------
93271 1 15932 106
137622 2 187 128
83147 3 15932 212
183261 4 2158 217
76389 5 187 305
920013 6 15932 319
Total for Q1
1493703 50328 1287
Average for Q1
248950 8388 214
The FANCY output starts on a new page and looks as follows:
Accounts Report for First Quarter 05/04/2001
Amount Id Acct# Date
-------- --- ------ -----
932.71 1 15932 01/06
1,376.22 2 00187 01/28
831.47 3 15932 02/12
1,832.61 4 02158 02/17
763.89 5 00187 03/05
9,200.13 6 15932 03/19
Total for Q1 14,937.03
Average for Q1 2,489.50
以下是对“花式”使用的额外选项的解释 报告:
First ON field: In the PLAIN report, BLANK causes ICETOOL to print
6字节的ZD值为未编辑的数字,前导零被抑制。 但是对于这个例子,我们知道数字真的代表美元和 美分。所以在FANCY报告中,我们使用C1格式项(其中一个) 三十三个可用的掩码)用逗号(,)作为打印值 千位分隔符和句点(。)作为小数点。
In the PLAIN report, TOTAL causes ICETOOL to allow 15 digits for the
值因为它不知道需要多少位数。但 对于这个例子,我们知道总金额不会超过8位数。 所以在FANCY报告中,我们使用N08格式项来设置 到8的数字位数。这会减少字段的列宽。
Second ON field: In the PLAIN report, NUM causes ICETOOL to allow 15
记录编号的数字,因为它不知道有多少 需要数字。但是对于这个例子,我们知道记录的数量 不会超过99.所以在FANCY报告中,我们使用N02格式 将数字设置为2的项目。这会减小列宽 记录号码。
Third ON field: In the PLAIN report, TOTAL and AVERAGE cause ICETOOL to
打印此3字节PD字段的总和和平均值。但 对于这个例子,我们知道我们不想要该字段的统计数据 因为它是一个帐号。所以在FANCY报告中,我们使用了 NOST格式化项目以取消此字段的统计信息。
In the PLAIN report, the default mask of A0 causes ICETOOL to suppress
这个3字节PD字段的前导零。但是对于这个例子, 我们知道我们想要为该字段显示前导零,因为它是 一个帐号。所以在FANCY报告中,我们使用LZ格式 要打印此字段的前导零的项目。
Fourth ON field: In the PLAIN report, BLANK causes ICETOOL to print the
4字节ZD值作为带有前导零的未编辑数字 抑制。但是对于这个例子,我们知道数字代表一个日期 (月和日)。所以在FANCY报告中,我们使用E'99 / 99' 格式化项目以使用前导零和斜杠(/)打印值 在月和日之间。
In the PLAIN report, TOTAL and AVERAGE cause ICETOOL to print the total
和此4字节ZD字段的平均值。但是对于这个例子,我们 知道我们不想要这个领域的总数或平均数,因为它是 一个约会。所以在FANCY报告中,我们使用NOST格式项 取消此字段的统计信息。
Note: In some applications, we might want the minimum and maximum for a
与E'pattern'一起显示的日期,因此我们不会指定NOST 日期字段。
INDENT: In the PLAIN report, ICETOOL starts the report in column 2
(在控制字符之后),默认情况下。但是对于这个例子,我们 想稍微缩进报告。所以在FANCY报告中,我们使用了 INDENT(2)操作数将报告缩进2个空格,以便从中开始 第4栏。
BETWEEN: In the PLAIN report, ICETOOL uses 3 blanks between the columns
数据,默认情况下。但是对于这个例子,我们想要更多的空间 列之间。所以在FANCY报告中,我们使用BETWEEN(5) 操作数在列之间插入5个空格。
默认情况下,STATLEFT: In the PLAIN report, ICETOOL prints the strings for TOTAL
和AVERAGE在第一列数据下使用 每个统计信息有两行,以避免字符串覆盖 值。但是对于这个例子,我们希望有TOTAL和 AVERAGE字符串在报告中脱颖而出,并且每个字符串都打开 与其值相同的行。所以在FANCY报告中,我们使用了 STATLEFT操作数打印左侧的TOTAL和AVERAGE字符串 第一列数据。
这是链接,其中还包含报告的“普通”版本,与花哨的版本形成鲜明对比:http://www-01.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.icea100/ice2ca_Example_1110.htm
我通过icetool display statleft nost
的搜索引擎找到了该链接。