I am creating a file and a report.
The report has 5 parts:
1. list of all records
2. total of records
3. total by service code (I only have one: 9999)
4. total by bank and service code
5. final total by service code
I created 4 CTLs, one for the file and three for the report. I imagine the job will sort the same file 4 times. Since the sort is always the same: bank/service code - is there a way to combine them so I have less passes?
Thank you,
Tony
The code:
//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD *
0000000000001 001
0000000000002 002
0000000000003 001
0000000000005 001
//OUT DD SYSOUT=*
//RPT1 DD SYSOUT=*,LRECL=132
//TOOLIN DD *
* CREATES THE XX FILE
COPY FROM(IN) TO(OUT) USING(CTL1)
* CREATES THE XX REPORT
COPY FROM(IN) TO(RPT1) USING(CTL2)
COPY FROM(IN) TO(RPT1) USING(CTL3)
COPY FROM(IN) TO(RPT1) USING(CTL4)
//CTL1CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
INREC OVERLAY=(101:TIMENS=(24))
OUTFIL REMOVECC,
HEADER1=(001:C'HEADER',
010:DATENS=(4MD),
018:101,4,
025:C'SOME TITLE'),
BUILD=(001:C'D11',
004:016,003,
007:C'01',
009:C'00000',
014:002,013,
027:C'9999',
031:C'00000000000000001',
048:DATENS=(4MD),
100:C' '),
TRAILER1=(001:C'TRAILER',
010:DATENS=(4MD),
018:101,4,
025:COUNT=(TO=ZD,LENGTH=6),
100:C' ')
/*
//CTL2CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
OUTFIL REMOVECC,
HEADER1=(001:C'REPORT ID: XXXXXXXX',
045:C'ANOTHER TITLE',
125:DATENS=(4MD),/,
043:C'THIS REPORT IS WORTH SOMETHING',/),
HEADER2=(001:C'BANK ACCOUNT SVC NUMBER OF',
057:C'AMOUNT ORIGIN COST',
109:C'LOCKBOX EFFECTIVE',/,
001:C' NUMBER CODE ITEMS',
090:C'CENTER NO. DATE'),
OUTREC=(001:016,003,
008:002,013,
023:C'9999',
029:C'00000000000000001',
120:DATENS=(4MD),
132:C' '),
TRAILER1=(015:C'TOTALS',
029:COUNT=(TO=ZD,LENGTH=17))
/*
//CTL3CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
OUTFIL REMOVECC,NODETAIL,
BUILD=(132:X),
HEADER1=(/,
001:C'SERVICE CODE TOTALS NUMBER ITEMS',
057:C'AMOUNT'),
TRAILER1=(001:C'9999',
029:COUNT=(TO=ZD,LENGTH=17),/)
/*
//CTL4CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
OUTFIL REMOVECC,NODETAIL,
BUILD=(132:X),
SECTIONS=(016,003,SKIP=P,
HEADER3=(001:C'BANK',006:016,003,011:C'TOTAL',/,
001:C'SERVICE CODE TOTALS ITEMS AMOUNT'),
TRAILER3=(001:C'9999',
020:COUNT=(TO=ZD,LENGTH=17),/)),
TRAILER1=(001:C'GRAND TOTAL',/,
001:C'SERVICE CODE TOTALS ITEMS AMOUNT',/,
001:C'9999',
020:COUNT=(TO=ZD,LENGTH=17))
//
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//IN DD *
0000000000001 001
0000000000002 002
0000000000003 001
0000000000005 001
//OUT DD SYSOUT=*
//RPT1 DD SYSOUT=*,LRECL=132
//TOOLIN DD *
* CREATES THE XX FILE
COPY FROM(IN) TO(OUT) USING(CTL1)
* CREATES THE XX REPORT
COPY FROM(IN) TO(RPT1) USING(CTL2)
COPY FROM(IN) TO(RPT1) USING(CTL3)
COPY FROM(IN) TO(RPT1) USING(CTL4)
//CTL1CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
INREC OVERLAY=(101:TIMENS=(24))
OUTFIL REMOVECC,
HEADER1=(001:C'HEADER',
010:DATENS=(4MD),
018:101,4,
025:C'SOME TITLE'),
BUILD=(001:C'D11',
004:016,003,
007:C'01',
009:C'00000',
014:002,013,
027:C'9999',
031:C'00000000000000001',
048:DATENS=(4MD),
100:C' '),
TRAILER1=(001:C'TRAILER',
010:DATENS=(4MD),
018:101,4,
025:COUNT=(TO=ZD,LENGTH=6),
100:C' ')
/*
//CTL2CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
OUTFIL REMOVECC,
HEADER1=(001:C'REPORT ID: XXXXXXXX',
045:C'ANOTHER TITLE',
125:DATENS=(4MD),/,
043:C'THIS REPORT IS WORTH SOMETHING',/),
HEADER2=(001:C'BANK ACCOUNT SVC NUMBER OF',
057:C'AMOUNT ORIGIN COST',
109:C'LOCKBOX EFFECTIVE',/,
001:C' NUMBER CODE ITEMS',
090:C'CENTER NO. DATE'),
OUTREC=(001:016,003,
008:002,013,
023:C'9999',
029:C'00000000000000001',
120:DATENS=(4MD),
132:C' '),
TRAILER1=(015:C'TOTALS',
029:COUNT=(TO=ZD,LENGTH=17))
/*
//CTL3CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
OUTFIL REMOVECC,NODETAIL,
BUILD=(132:X),
HEADER1=(/,
001:C'SERVICE CODE TOTALS NUMBER ITEMS',
057:C'AMOUNT'),
TRAILER1=(001:C'9999',
029:COUNT=(TO=ZD,LENGTH=17),/)
/*
//CTL4CNTL DD *
SORT FIELDS=(016,003,CH,A,002,013,CH,A)
OUTFIL REMOVECC,NODETAIL,
BUILD=(132:X),
SECTIONS=(016,003,SKIP=P,
HEADER3=(001:C'BANK',006:016,003,011:C'TOTAL',/,
001:C'SERVICE CODE TOTALS ITEMS AMOUNT'),
TRAILER3=(001:C'9999',
020:COUNT=(TO=ZD,LENGTH=17),/)),
TRAILER1=(001:C'GRAND TOTAL',/,
001:C'SERVICE CODE TOTALS ITEMS AMOUNT',/,
001:C'9999',
020:COUNT=(TO=ZD,LENGTH=17))
//
And the report:
REPORT ID: XXXXXXXX ANOTHER TITLE 20141001
THIS REPORT IS WORTH SOMETHING
BANK ACCOUNT SVC NUMBER OF AMOUNT ORIGIN COST LOCKBOX EFFECTIVE
NUMBER CODE ITEMS CENTER NO. DATE
001 0000000000001 9999 00000000000000001 20141001
001 0000000000003 9999 00000000000000001 20141001
001 0000000000005 9999 00000000000000001 20141001
002 0000000000002 9999 00000000000000001 20141001
TOTALS 00000000000000004
SERVICE CODE TOTALS NUMBER ITEMS AMOUNT
9999 00000000000000004
BANK 001 TOTAL
SERVICE CODE TOTALS ITEMS AMOUNT
9999 00000000000000003
BANK 002 TOTAL
SERVICE CODE TOTALS ITEMS AMOUNT
9999 00000000000000001
GRAND TOTAL
SERVICE CODE TOTALS ITEMS AMOUNT
9999 00000000000000004
THIS REPORT IS WORTH SOMETHING
BANK ACCOUNT SVC NUMBER OF AMOUNT ORIGIN COST LOCKBOX EFFECTIVE
NUMBER CODE ITEMS CENTER NO. DATE
001 0000000000001 9999 00000000000000001 20141001
001 0000000000003 9999 00000000000000001 20141001
001 0000000000005 9999 00000000000000001 20141001
002 0000000000002 9999 00000000000000001 20141001
TOTALS 00000000000000004
SERVICE CODE TOTALS NUMBER ITEMS AMOUNT
9999 00000000000000004
BANK 001 TOTAL
SERVICE CODE TOTALS ITEMS AMOUNT
9999 00000000000000003
BANK 002 TOTAL
SERVICE CODE TOTALS ITEMS AMOUNT
9999 00000000000000001
GRAND TOTAL
SERVICE CODE TOTALS ITEMS AMOUNT
9999 00000000000000004