I have to move the data from a Table to this group item.
But after i moved the data from Table to this Group item, I need to to move data from group item to a field in a BMS Which uses Occurs Clause with 10 occurence.
My problem is after I moved the data to BMS I could not see the output.
The Output is Still blank. I could't find a solution to solve this. Please Help me to solve my problem. Thank you!
Thank you for your interest on my problem. I am sending my BMS and the Cics - Cobol Program for your eye.
My BMS - Sales:
SALES DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL,TIOAPFX=YES, X
CTRL=(FRSET,FREEKB)
HEADER DFHMDI SIZE=(09,80),LINE=01,COLUMN=01
DFHMDF POS=(2,28), X
INITIAL='SALES ORDER MAINTENANCE', X
LENGTH=23, X
ATTRB=PROT
MASDATE DFHMDF POS=(2,69), X
INITIAL='__/__/____', X
LENGTH=10, X
ATTRB=PROT
DFHMDF POS=(3,34), X
INITIAL='ORDER MASTER', X
LENGTH=12, X
ATTRB=PROT
MASTIME DFHMDF POS=(3,69), X
INITIAL='__:__:__', X
LENGTH=8, X
ATTRB=PROT
DFHMDF POS=(5,1), X
INITIAL='CUSTOMER ID:', X
LENGTH=15, X
ATTRB=PROT
MASCID DFHMDF POS=(5,17), X
INITIAL='_____', X
LENGTH=5, X
ATTRB=(UNPROT,IC,FSET)
DFHMDF POS=(5,23), X
INITIAL=' ', X
LENGTH=1, X
ATTRB=ASKIP
DFHMDF POS=(5,27), X
INITIAL='START DATE:', X
LENGTH=12, X
ATTRB=PROT
SDATE DFHMDF POS=(5,40), X
INITIAL='__/__/____', X
LENGTH=10, X
ATTRB=(UNPROT,FSET)
DFHMDF POS=(5,51), X
INITIAL=' ', X
LENGTH=1, X
ATTRB=ASKIP
DFHMDF POS=(5,53), X
INITIAL='END DATE :', X
LENGTH=10, X
ATTRB=PROT
EDATE DFHMDF POS=(5,64), X
INITIAL='__/__/____', X
LENGTH=10, X
ATTRB=UNPROT
DFHMDF POS=(5,75), X
INITIAL=' ', X
LENGTH=1, X
ATTRB=PROT
DFHMDF POS=(7,1), X
INITIAL='OPTIONS : S = SELECT, D = DELETE', X
LENGTH=31, X
ATTRB=PROT
DFHMDF POS=(9,18), X
INITIAL='OPT ORDER NO. ORDER DATE ORDER VALUE', X
LENGTH=44, X
ATTRB=PROT
ORDMAP DFHMDI SIZE=(10,46),LINE=10,COLUMN=18
ORDERS DFHMDF POS=(01,01), X
INITIAL=' _ _____ __/__/____ __________.__',X
LENGTH=45, X
OCCURS=10, X
ATTRB=(UNPROT,FSET)
FOOTER DFHMDI SIZE=(03,80),LINE=22,COLUMN=01
MASMSG DFHMDF POS=(01,1), X
INITIAL=' ', X
LENGTH=70, X
ATTRB=PROT
MASMORE DFHMDF POS=(01,74), X
INITIAL='MORE', X
LENGTH=4, X
ATTRB=PROT
DFHMDF POS=(02,1), X
INITIAL='PF1-HELP PF3-GOBACK PF5-REFRESH X
PF7-PAGE UP PF8-PAGE DOWN', X
LENGTH=79, X
ATTRB=PROT
SALES DFHMSD TYPE=FINAL
END
My Program File5V1 :
Program to calculate total order value for a particular customer.
*----------------------------------------------------------------
*FILE NAME : FILE5V1
*FILES UTILIZED :
* KSDS-PK -ORDYEAD -CONTAINS ORDER HEADER INFORMATION
* RRDS-NO KEY- ORDTRANS-CONTAINS ORDER TRANSACTION INFORMATION
* KSDS-PK ITEMMAST-CONTAINS ITEM INFORMATION
*----------------------------------------------------------------
ID DIVISION.
PROGRAM-ID. FILE5V1.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY SALES.
* COPY TEST.
01 COUNTER PIC S9(4) COMP.
01 ORD-HEAD-REC.
05 SOHORDNUM PIC X(6).
05 SOHDT.
10 ORD-DATE PIC 99.
10 FILLER PIC X VALUE '/'.
10 ORD-MONTH PIC 99.
10 FILLER PIC X VALUE '/'.
10 ORD-YEAR PIC 9999.
05 SOHCUSCDE PIC X(5).
05 SOHORDSTS PIC X.
05 FILLER PIC X(58).
01 ORD-TRANS-REC.
05 SODORDNUM PIC X(6).
05 SODITMCDE PIC X(5).
05 SODQTY PIC 9(6).
05 FILLER PIC X(63).
01 ITEM-REC.
05 ITMCDE PIC X(5).
05 ITMDES PIC X(30).
05 ITMPRC PIC 9(9)V99.
05 ITMSTK PIC 9(6).
05 FILLER PIC X(28).
01 START-DATE.
05 ST-DATE PIC 99.
05 FILLER PIC X.
05 ST-MONTH PIC 99.
05 FILLER PIC X.
05 ST-YEAR PIC 9999.
01 END-DATE.
05 EN-DATE PIC 99.
05 FILLER PIC X.
05 EN-MONTH PIC 99.
05 FILLER PIC X.
05 EN-YEAR PIC 9999.
01 DISP-GROUP.
05 ORDERNO PIC X(6).
05 FILLER PIC X(5).
05 ORDERDATE PIC X(10).
05 FILLER PIC X(5).
05 DISPLAY-TOTAL PIC 9(9).99.
77 ORD-HEAD-EOF PIC X VALUE 'N'.
77 ORD-TRANS-EOF PIC X VALUE 'N'.
77 ORD-HEAD-RESP PIC S9(8) COMP.
77 ORD-TRANS-RESP PIC S9(8) COMP.
77 ITEM-RESP PIC S9(8) COMP.
77 ORD-HEAD-LEN PIC S9(4) COMP.
77 ORD-TRANS-LEN PIC S9(4) COMP.
77 ORD-START-DATE-CHECK PIC X.
77 ORD-END-DATE-CHECK PIC X.
77 ORD-DATE-CHECK PIC X.
77 TEMPTOTAL PIC 9(9)V99.
77 GRAND-TOTAL PIC 9(9)V99 VALUE 0.
77 ORD-COUNTER PIC 9(3) VALUE 0.
77 ORD-TRANS-RRN PIC S9(8) COMP VALUE 1.
77 ORD-HEAD-KEY PIC S9(8) COMP.
77 CUST PIC X(5).
*-----------------------------------------------
77 DISP-COUNTER PIC S9(8) COMP.
77 WS-LEN PIC S9(4) COMP.
01 DISP-MASTER-ARRAY VALUE SPACES.
05 REC PIC X(45) OCCURS 10 TIMES.
01 WS-MASTER-STRUCTURE.
05 FILLER PIC X.
05 OPTION PIC X.
05 FILLER PIC X(5).
05 ORDNUM PIC X(6).
05 FILLER PIC X(5).
05 ORDDATE.
10 ORDER-DATE PIC 99.
10 FILLER PIC X VALUE '/'.
10 ORDER-MONTH PIC 99.
10 FILLER PIC X VALUE '/'.
10 ORDER-YEAR PIC 9999.
05 FILLER PIC X(4).
05 ORDAMOUNT.
10 ORD-RUPEE PIC 9(10).
10 FILLER PIC X VALUE '.'.
10 ORD-PAISE PIC 99.
01 AAA PIC X(45).
01 NEW-DATA REDEFINES AAA PIC X(45).
*-----------------------------------------------------------
PROCEDURE DIVISION.
START-PARA.
* PERFORM MOVE-MASTER-VALUE-PARA.
* PERFORM SEND-MASTER-PARA.
* GO TO EXIT-PARA.
MOVE 1 TO DISP-COUNTER.
MOVE '11111' TO CUST.
MOVE '10/12/2003' TO START-DATE.
MOVE '10/04/2004' TO END-DATE.
MOVE 0 TO ORD-HEAD-KEY.
EXEC CICS STARTBR
FILE('ORDHEAD')
RIDFLD(ORD-HEAD-KEY)
END-EXEC.
PERFORM ORD-READ-NEXT-PARA UNTIL ORD-HEAD-EOF = 'Y'.
ORD-READ-NEXT-PARA.
MOVE 80 TO ORD-HEAD-LEN.
EXEC CICS READNEXT
FILE('ORDHEAD')
RIDFLD(ORD-HEAD-KEY)
INTO(ORD-HEAD-REC)
LENGTH(ORD-HEAD-LEN)
RESP(ORD-HEAD-RESP)
END-EXEC.
IF ORD-HEAD-RESP = DFHRESP(ENDFILE)
MOVE 'Y' TO ORD-HEAD-EOF
GO TO EXIT-PARA
ELSE IF ORD-HEAD-RESP = DFHRESP(NOTFND)
GO TO EXIT-PARA
ELSE
IF SOHCUSCDE = CUST AND SOHORDSTS = 'P'
PERFORM ORD-DATE-CHECK-PARA
IF ORD-DATE-CHECK = 'Y'
MOVE 0 TO GRAND-TOTAL
ADD 1 TO ORD-COUNTER
MOVE SOHORDNUM TO SODORDNUM
PERFORM READ-ORD-TRANS-PARA
END-IF
END-IF
END-IF.
ORD-DATE-CHECK-PARA.
IF ORD-YEAR > ST-YEAR
MOVE 'Y' TO ORD-START-DATE-CHECK
ELSE IF ORD-YEAR = ST-YEAR AND ORD-MONTH > ST-MONTH
MOVE 'Y' TO ORD-START-DATE-CHECK
ELSE IF ORD-YEAR = ST-YEAR AND ORD-MONTH = ST-MONTH AND
ORD-DATE >= ST-DATE
MOVE 'Y' TO ORD-START-DATE-CHECK
ELSE
MOVE 'N' TO ORD-START-DATE-CHECK
END-IF.
IF ORD-YEAR < EN-YEAR
MOVE 'Y' TO ORD-END-DATE-CHECK
ELSE IF ORD-YEAR = EN-YEAR AND ORD-MONTH < EN-MONTH
MOVE 'Y' TO ORD-END-DATE-CHECK
ELSE IF ORD-YEAR = EN-YEAR AND ORD-MONTH = EN-MONTH AND
ORD-DATE <= EN-DATE
MOVE 'Y' TO ORD-END-DATE-CHECK
ELSE
MOVE 'N' TO ORD-END-DATE-CHECK
END-IF.
IF ORD-START-DATE-CHECK = 'Y' AND
ORD-END-DATE-CHECK = 'Y'
MOVE 'Y' TO ORD-DATE-CHECK
ELSE
MOVE 'N' TO ORD-DATE-CHECK
END-IF.
READ-ORD-TRANS-PARA.
MOVE 1 TO ORD-TRANS-RRN.
MOVE 'N' TO ORD-TRANS-EOF.
EXEC CICS STARTBR
FILE('TRANSACT')
RIDFLD(ORD-TRANS-RRN)
RRN
END-EXEC.
PERFORM ORD-TRANS-READ-NEXT-PARA UNTIL ORD-TRANS-EOF = 'Y'.
EXEC CICS ENDBR
FILE('TRANSACT')
END-EXEC.
MOVE GRAND-TOTAL TO DISPLAY-TOTAL.
MOVE SOHORDNUM TO ORDERNO.
MOVE SOHDT TO ORDERDATE.
PERFORM MOVE-ORDER-VALUE-PARA.
ORD-TRANS-READ-NEXT-PARA.
MOVE LENGTH OF ORD-TRANS-REC TO ORD-TRANS-LEN.
EXEC CICS READNEXT
FILE('TRANSACT')
INTO(ORD-TRANS-REC)
RIDFLD(ORD-TRANS-RRN)
RESP(ORD-TRANS-RESP)
RRN
END-EXEC.
IF ORD-TRANS-RESP = DFHRESP(ENDFILE)
MOVE 'Y' TO ORD-TRANS-EOF
ELSE IF ORD-TRANS-RESP = DFHRESP(NORMAL)
IF SOHORDNUM = SODORDNUM
MOVE SODITMCDE TO ITMCDE
EXEC CICS READ
FILE('ITEM')
INTO(ITEM-REC)
RIDFLD(ITMCDE)
RESP(ITEM-RESP)
END-EXEC
IF ITEM-RESP = DFHRESP(NORMAL)
MULTIPLY ITMPRC BY SODQTY GIVING TEMPTOTAL
ADD TEMPTOTAL TO GRAND-TOTAL
END-IF
END-IF
END-IF.
EXIT-PARA.
PERFORM MOVE-MASTER-VALUE-PARA.
PERFORM SEND-MASTER-PARA.
EXEC CICS ENDBR
FILE('ORDHEAD')
END-EXEC.
EXEC CICS RETURN
END-EXEC.
MOVE-MASTER-VALUE-PARA.
MOVE 1 TO COUNTER.
* PERFORM MOVE-TO-MAP-PARA 10 TIMES.
MOVE REC(1) TO ORDERSO(1).
MOVE REC(2) TO ORDERSO(2).
MOVE REC(3) TO ORDERSO(3).
MOVE REC(4) TO ORDERSO(4).
EXEC CICS SEND
FROM(ORDERSO(1))
ERASE
END-EXEC.
EXEC CICS SEND
FROM(ORDERSO(2))
ERASE
END-EXEC.
EXEC CICS SEND
FROM(ORDERSO(3))
ERASE
END-EXEC.
EXEC CICS SEND
FROM(ORDERSO(4))
ERASE
END-EXEC.
MOVE-TO-MAP-PARA.
MOVE REC(COUNTER) TO AAA.
MOVE NEW-DATA TO FIELDO(COUNTER).
ADD 1 TO COUNTER.
MOVE REC(COUNTER) TO ORDERSO(COUNTER).
ADD 1 TO COUNTER.
MOVE-ORDER-VALUE-PARA.
MOVE SOHORDNUM TO ORDNUM.
MOVE SOHDT TO ORDDATE.
MOVE DISPLAY-TOTAL TO ORDAMOUNT.
MOVE WS-MASTER-STRUCTURE TO REC(DISP-COUNTER).
ADD 1 TO DISP-COUNTER.
SEND-MASTER-PARA.
EXEC CICS SEND
MAP('HEADER')
MAPSET('SALES')
FROM(HEADERO)
END-EXEC.
EXEC CICS SEND
MAP('ORDMAP')
MAPSET('SALES')
FROM(ORDMAPO)
END-EXEC.
EXEC CICS SEND
MAP('FOOTER')
MAPSET('SALES')
FROM(FOOTERO)
END-EXEC.
Please Help me to solve my problem. Thankyou again.
First you code is EXTREMELY difficult to read. Does your orig code use indentation? If it does you shpold use the "code" box before and after you've pasted the code.
Why don't you use a single SEND MAP? Why have you split the map into segments using SENDs?
Thank you for your interest Jack.
Sorry, since i am a new user, i don't know about these code tags.
now i send my program with the help of code format.
There is no special reason for splitting the map. only for dioagnosis purpose i have done this.
Map:
Code:
SALES DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL,TIOAPFX=YES, X
CTRL=(FRSET,FREEKB)
HEADER DFHMDI SIZE=(09,80),LINE=01,COLUMN=01
DFHMDF POS=(2,28), X
INITIAL='SALES ORDER MAINTENANCE', X
LENGTH=23, X
ATTRB=PROT
MASDATE DFHMDF POS=(2,69), X
INITIAL='__/__/____', X
LENGTH=10, X
ATTRB=PROT
DFHMDF POS=(3,34), X
INITIAL='ORDER MASTER', X
LENGTH=12, X
ATTRB=PROT
MASTIME DFHMDF POS=(3,69), X
INITIAL='__:__:__', X
LENGTH=8, X
ATTRB=PROT
DFHMDF POS=(5,1), X
INITIAL='CUSTOMER ID:', X
LENGTH=15, X
ATTRB=PROT
MASCID DFHMDF POS=(5,17), X
INITIAL='_____', X
LENGTH=5, X
ATTRB=(UNPROT,IC,FSET)
DFHMDF POS=(5,23), X
INITIAL=' ', X
LENGTH=1, X
ATTRB=ASKIP
DFHMDF POS=(5,27), X
INITIAL='START DATE:', X
LENGTH=12, X
ATTRB=PROT
SDATE DFHMDF POS=(5,40), X
INITIAL='__/__/____', X
LENGTH=10, X
ATTRB=(UNPROT,FSET)
DFHMDF POS=(5,51), X
INITIAL=' ', X
LENGTH=1, X
ATTRB=ASKIP
DFHMDF POS=(5,53), X
INITIAL='END DATE :', X
LENGTH=10, X
ATTRB=PROT
EDATE DFHMDF POS=(5,64), X
INITIAL='__/__/____', X
LENGTH=10, X
ATTRB=UNPROT
DFHMDF POS=(5,75), X
INITIAL=' ', X
LENGTH=1, X
ATTRB=PROT
DFHMDF POS=(7,1), X
INITIAL='OPTIONS : S = SELECT, D = DELETE', X
LENGTH=31, X
ATTRB=PROT
DFHMDF POS=(9,18), X
INITIAL='OPT ORDER NO. ORDER DATE ORDER VALUE', X
LENGTH=44, X
ATTRB=PROT
ORDMAP DFHMDI SIZE=(10,46),LINE=10,COLUMN=18
ORDERS DFHMDF POS=(01,01), X
INITIAL=' _ _____ __/__/____ __________.__',X
LENGTH=45, X
OCCURS=10, X
ATTRB=(UNPROT,FSET)
FOOTER DFHMDI SIZE=(03,80),LINE=22,COLUMN=01
MASMSG DFHMDF POS=(01,1), X
INITIAL=' ', X
LENGTH=70, X
ATTRB=PROT
MASMORE DFHMDF POS=(01,74), X
INITIAL='MORE', X
LENGTH=4, X
ATTRB=PROT
DFHMDF POS=(02,1), X
INITIAL='PF1-HELP PF3-GOBACK PF5-REFRESH X
PF7-PAGE UP PF8-PAGE DOWN', X
LENGTH=79, X
ATTRB=PROT
SALES DFHMSD TYPE=FINAL
END
Program:
****** ***************************** Top of Data ******************************
000100 *----------------------------------------------------------------
000200 *FILE NAME : FILE5V1
000300 *FILES UTILIZED :
000400 * KSDS-PK -ORDYEAD -CONTAINS ORDER HEADER INFORMATION
000500 * RRDS-NO KEY- ORDTRANS-CONTAINS ORDER TRANSACTION INFORMATION
000600 * KSDS-PK ITEMMAST-CONTAINS ITEM INFORMATION
000700 *----------------------------------------------------------------
000800 ID DIVISION.
000900 PROGRAM-ID. FILE5V1.
001000 DATA DIVISION.
001100 WORKING-STORAGE SECTION.
001200 COPY SALES.
001300 * COPY TEST.
001400 01 COUNTER PIC S9(4) COMP.
001500 01 ORD-HEAD-REC.
001600 05 SOHORDNUM PIC X(6).
001700 05 SOHDT.
001800 10 ORD-DATE PIC 99.
000900 PROGRAM-ID. FILE5V1.
001000 DATA DIVISION.
001100 WORKING-STORAGE SECTION.
001200 COPY SALES.
001300 * COPY TEST.
001400 01 COUNTER PIC S9(4) COMP.
001500 01 ORD-HEAD-REC.
001600 05 SOHORDNUM PIC X(6).
001700 05 SOHDT.
001800 10 ORD-DATE PIC 99.
001900 10 FILLER PIC X VALUE '/'.
002000 10 ORD-MONTH PIC 99.
002100 10 FILLER PIC X VALUE '/'.
002200 10 ORD-YEAR PIC 9999.
002300 05 SOHCUSCDE PIC X(5).
002400 05 SOHORDSTS PIC X.
002500 05 FILLER PIC X(58).
002600 01 ORD-TRANS-REC.
002700 05 SODORDNUM PIC X(6).
002800 05 SODITMCDE PIC X(5).
002900 05 SODQTY PIC 9(6).
003000 05 FILLER PIC X(63).
003100 01 ITEM-REC.
003200 05 ITMCDE PIC X(5).
003300 05 ITMDES PIC X(30).
003400 05 ITMPRC PIC 9(9)V99.
003500 05 ITMSTK PIC 9(6).
003600 05 FILLER PIC X(28).
003700 01 START-DATE.
003800 05 ST-DATE PIC 99.
003900 05 FILLER PIC X.
004000 05 ST-MONTH PIC 99.
004100 05 FILLER PIC X.
004200 05 ST-YEAR PIC 9999.
004300 01 END-DATE.
004400 05 EN-DATE PIC 99.
004500 05 FILLER PIC X.
004600 05 EN-MONTH PIC 99.
004700 05 FILLER PIC X.
004800 05 EN-YEAR PIC 9999.
004900 01 DISP-GROUP.
005000 05 ORDERNO PIC X(6).
005100 05 FILLER PIC X(5).
005200 05 ORDERDATE PIC X(10).
005300 05 FILLER PIC X(5).
005400 05 DISPLAY-TOTAL PIC 9(9).99.
005500 77 ORD-HEAD-EOF PIC X VALUE 'N'.
005600 77 ORD-TRANS-EOF PIC X VALUE 'N'.
005700 77 ORD-HEAD-RESP PIC S9(8) COMP.
005800 77 ORD-TRANS-RESP PIC S9(8) COMP.
005900 77 ITEM-RESP PIC S9(8) COMP.
006000 77 ORD-HEAD-LEN PIC S9(4) COMP.
006100 77 ORD-TRANS-LEN PIC S9(4) COMP.
006200 77 ORD-START-DATE-CHECK PIC X.
006300 77 ORD-END-DATE-CHECK PIC X.
006400 77 ORD-DATE-CHECK PIC X.
006500 77 TEMPTOTAL PIC 9(9)V99.
006600 77 GRAND-TOTAL PIC 9(9)V99 VALUE 0.
006700 77 ORD-COUNTER PIC 9(3) VALUE 0.
006800 77 ORD-TRANS-RRN PIC S9(8) COMP VALUE 1.
006900 77 ORD-HEAD-KEY PIC S9(8) COMP.
007000 77 CUST PIC X(5).
007100 *-----------------------------------------------------------------
007200 77 DISP-COUNTER PIC S9(8) COMP.
007300 77 WS-LEN PIC S9(4) COMP.
007400 01 DISP-MASTER-ARRAY VALUE SPACES.
007500 05 REC PIC X(45) OCCURS 10 TIMES.
007600 01 WS-MASTER-STRUCTURE.
007700 05 FILLER PIC X.
007800 05 OPTION PIC X.
007900 05 FILLER PIC X(5).
008000 05 ORDNUM PIC X(6).
008100 05 FILLER PIC X(5).
008200 05 ORDDATE.
008300 10 ORDER-DATE PIC 99.
008400 10 FILLER PIC X VALUE '/'.
008500 10 ORDER-MONTH PIC 99.
008600 10 FILLER PIC X VALUE '/'.
008700 10 ORDER-YEAR PIC 9999.
008800 05 FILLER PIC X(4).
008900 05 ORDAMOUNT.
009000 10 ORD-RUPEE PIC 9(10).
009100 10 FILLER PIC X VALUE '.'.
009200 10 ORD-PAISE PIC 99.
009300 01 AAA PIC X(45).
009400 01 NEW-DATA REDEFINES AAA PIC X(45).
009500 *-----------------------------------------------------------------
009600 PROCEDURE DIVISION.
009700 START-PARA.
009800 * PERFORM MOVE-MASTER-VALUE-PARA.
009900 * PERFORM SEND-MASTER-PARA.
010000 * GO TO EXIT-PARA.
010100 MOVE 1 TO DISP-COUNTER.
010200 MOVE '11111' TO CUST.
010300 MOVE '10/12/2003' TO START-DATE.
010400 MOVE '10/04/2004' TO END-DATE.
010500 MOVE 0 TO ORD-HEAD-KEY.
010600 *----------------------------------------------------------------*
010700 * THIS SECTION OF PROGRAM IS USED TO GET THE ORDERS FROM THE FILE*
010800 * ONE BY ONE. THE RECORD FORMAT FOR THIS FILE IS AS FOLLOWS. *
010900 * FILE NAME : ORDHEAD. *
011000 * -------------------------------------------- *
011100 * ORDNUMBER ORDERDATE CUSTOMER-ID STATUS *
011200 * -------------------------------------------- *
011300 * AA1001 01/01/2004 11111 P *
011400 * AA1002 22/02/2004 22222 P *
011500 * AA1003 12/03/2004 11111 P *
011600 * AA1004 15/03/2004 22222 P *
011700 * -------------------------------------------- *
011800 * USING BROWSE COMMAND THESE RECORDS ARE READ ONE BY ONE. AFTER *
011900 * EACH READ THE CUSTOMER ID FIELD IS CHECKED WITH OUR REQUIRED *
012000 * CUSTOMER ID. IF CONDITION SATISFIES THEN ORDER TRANSACTION FOR *
012100 * THAT ORDER IS READ AS FOLLOWS. *
012200 *----------------------------------------------------------------*
012300 EXEC CICS STARTBR
012400 FILE('ORDHEAD')
012500 RIDFLD(ORD-HEAD-KEY)
012600 END-EXEC.
012700 PERFORM ORD-READ-NEXT-PARA UNTIL ORD-HEAD-EOF = 'Y'.
012800 ORD-READ-NEXT-PARA.
012900 MOVE 80 TO ORD-HEAD-LEN.
013000 EXEC CICS READNEXT
013100 FILE('ORDHEAD')
013200 RIDFLD(ORD-HEAD-KEY)
013300 INTO(ORD-HEAD-REC)
013400 LENGTH(ORD-HEAD-LEN)
013500 RESP(ORD-HEAD-RESP)
013600 END-EXEC.
013700 IF ORD-HEAD-RESP = DFHRESP(ENDFILE)
013800 MOVE 'Y' TO ORD-HEAD-EOF
013900 GO TO EXIT-PARA
014000 ELSE IF ORD-HEAD-RESP = DFHRESP(NOTFND)
014100 GO TO EXIT-PARA
014200 ELSE
014300 IF SOHCUSCDE = CUST AND SOHORDSTS = 'P'
014400 PERFORM ORD-DATE-CHECK-PARA
014500 IF ORD-DATE-CHECK = 'Y'
014600 MOVE 0 TO GRAND-TOTAL
014700 ADD 1 TO ORD-COUNTER
014800 MOVE SOHORDNUM TO SODORDNUM
014900 PERFORM READ-ORD-TRANS-PARA
015000 END-IF
015100 END-IF
015200 END-IF.
015300 *----------------------------------------------------------------*
015400 * THIS SECTION OF PROGRAM IS USED TO CHECK THE ORDER DATE OF *
015500 * EVERY ORDER TO GET ONLY THE ORDERS USER WANT. *
015600 * THIS HAS BEEN DONE BY CHECKING EACH ORDERS DATE WITH THE *
015700 * REQUIRED DATE DURATION. ONLY THE ORDERS SATISFY THIS DATE *
015800 * CONDITION IS RETRIVED TO THE USER TERMINAL. *
015900 *----------------------------------------------------------------*
016000 ORD-DATE-CHECK-PARA.
016100 IF ORD-YEAR > ST-YEAR
016200 MOVE 'Y' TO ORD-START-DATE-CHECK
016300 ELSE IF ORD-YEAR = ST-YEAR AND ORD-MONTH > ST-MONTH
016400 MOVE 'Y' TO ORD-START-DATE-CHECK
016500 ELSE IF ORD-YEAR = ST-YEAR AND ORD-MONTH = ST-MONTH AND
016600 ORD-DATE >= ST-DATE
016700 MOVE 'Y' TO ORD-START-DATE-CHECK
016800 ELSE
016900 MOVE 'N' TO ORD-START-DATE-CHECK
017000 END-IF.
017100 IF ORD-YEAR < EN-YEAR
017200 MOVE 'Y' TO ORD-END-DATE-CHECK
017300 ELSE IF ORD-YEAR = EN-YEAR AND ORD-MONTH < EN-MONTH
017400 MOVE 'Y' TO ORD-END-DATE-CHECK
017500 ELSE IF ORD-YEAR = EN-YEAR AND ORD-MONTH = EN-MONTH AND
017600 ORD-DATE <= EN-DATE
017700 MOVE 'Y' TO ORD-END-DATE-CHECK
017800 ELSE
017900 MOVE 'N' TO ORD-END-DATE-CHECK
018000 END-IF.
018100 IF ORD-START-DATE-CHECK = 'Y' AND
018200 ORD-END-DATE-CHECK = 'Y'
018300 MOVE 'Y' TO ORD-DATE-CHECK
018400 ELSE
018500 MOVE 'N' TO ORD-DATE-CHECK
018600 END-IF.
018700 *-----------------------------------------------------------------
018800 * THIS SECTION OF PROGRAM IS USED TO GET THE ORDER TRANSACTION *
018900 * FROM THE FILE 'ORDTRANS'. THIS IS A ESDS FILE. THIS FILE *
019000 * CONTAINS LIST OF ORDERS AND ITS ORDER PARTICULARS. ONE RECORD *
019100 * IN THIS FILE CONTAILS ONE ORDER NUMBER, ONE ITEM IN THAT ORDER *
019200 * QUATITY OF THE ITEM ORDERED. LIKE THAT ONE ORDER MAY CONTAIN *
019300 * MORE THAN ONE ITEM. *
019400 * SAMPLE OF THIS STRUCTURE IS GIVEN BELOW. *
019500 * --------------------------------------- *
019600 * ORDERNUM ITEMCODE QUANTITY *
019700 * --------------------------------------- *
019800 * AA1001 10001 100 *
019900 * AA1001 10002 200 *
020000 * AA1001 10003 250 *
020100 * AA1002 10004 700 *
020200 * AA1002 10003 300 *
020300 * AA1003 10001 500 *
020400 * AA1003 10004 300 *
020500 * --------------------------------------- *
020600 *-----------------------------------------------------------------
020700 READ-ORD-TRANS-PARA.
020800 MOVE 1 TO ORD-TRANS-RRN.
020900 MOVE 'N' TO ORD-TRANS-EOF.
021000 EXEC CICS STARTBR
021100 FILE('TRANSACT')
021200 RIDFLD(ORD-TRANS-RRN)
021300 RRN
021400 END-EXEC.
021500 PERFORM ORD-TRANS-READ-NEXT-PARA UNTIL ORD-TRANS-EOF = 'Y'.
021600 EXEC CICS ENDBR
021700 FILE('TRANSACT')
021800 END-EXEC.
021900 MOVE GRAND-TOTAL TO DISPLAY-TOTAL.
022000 MOVE SOHORDNUM TO ORDERNO.
022100 MOVE SOHDT TO ORDERDATE.
022200 PERFORM MOVE-ORDER-VALUE-PARA.
022300 ORD-TRANS-READ-NEXT-PARA.
022400 MOVE LENGTH OF ORD-TRANS-REC TO ORD-TRANS-LEN.
022500 EXEC CICS READNEXT
022600 FILE('TRANSACT')
022700 INTO(ORD-TRANS-REC)
022800 RIDFLD(ORD-TRANS-RRN)
022900 RESP(ORD-TRANS-RESP)
023000 RRN
023100 END-EXEC.
023110 *----------------------------------------------------------------*
023120 *THIS PART OF THE PROGRAM IS USED TO GET THE VALUE OF THE ITEMS *
023121 *IN THE ORDERS. THEN THE VALUE OF ITEM IS MULTIPLIED WITH THE *
023122 *QUANTITY ORDERED. LIKE THAT TOTAL ORDER VALUE IS CALUCULATED BY *
023123 *ADDING ALL THE ITEMS ORDER VALUE. *
023130 *----------------------------------------------------------------*
023200 IF ORD-TRANS-RESP = DFHRESP(ENDFILE)
023300 MOVE 'Y' TO ORD-TRANS-EOF
023400 ELSE IF ORD-TRANS-RESP = DFHRESP(NORMAL)
023500 IF SOHORDNUM = SODORDNUM
023600 MOVE SODITMCDE TO ITMCDE
023700 EXEC CICS READ
023800 FILE('ITEM')
023900 INTO(ITEM-REC)
024000 RIDFLD(ITMCDE)
024100 RESP(ITEM-RESP)
024200 END-EXEC
024300 IF ITEM-RESP = DFHRESP(NORMAL)
024400 MULTIPLY ITMPRC BY SODQTY GIVING TEMPTOTAL
024500 ADD TEMPTOTAL TO GRAND-TOTAL
024600 END-IF
024700 END-IF
024800 END-IF.
024900 *-----------------------------------------------------------------
025000 * THIS PART OF THE PROGRAM IS USED TO TERMINATE THE EXECUTION OF *
025100 * CICS PROGRAM AND CLOSE THE TRANSACTION. *
025200 *-----------------------------------------------------------------
025300 EXIT-PARA.
025400 PERFORM MOVE-MASTER-VALUE-PARA.
025500 PERFORM SEND-MASTER-PARA.
025600 EXEC CICS ENDBR
025700 FILE('ORDHEAD')
025800 END-EXEC.
025900 EXEC CICS RETURN
026000 END-EXEC.
026100 *----------------------------------------------------------------*
026200 *THIS PART OF THE PROGRAM IS USED TO MOVE THE DATAS FROM WORKING *
026300 *STORAGE SECTION TABLE ITEM TO THE MAP FIELD. THIS TABLE HAS THE *
026400 *CALCULATED DATAS OF EACH AND EVERY ORDERS THAT USER REQUIRES. *
026500 *----------------------------------------------------------------*
026600 MOVE-MASTER-VALUE-PARA.
026700 MOVE 1 TO COUNTER.
026800 * PERFORM MOVE-TO-MAP-PARA 10 TIMES.
026900 * MOVE REC(1) TO ORDERSO(1).
027000 * MOVE REC(2) TO ORDERSO(2).
027100 * MOVE REC(3) TO ORDERSO(3).
027200 * MOVE REC(4) TO ORDERSO(4).
027300 MOVE WS-MASTER-STRUCTURE TO AAA.
027400 MOVE NEW-DATA TO ORDERSO(4).
027500 EXEC CICS SEND
027600 FROM(ORDERSO(1))
027700 ERASE
027800 END-EXEC.
027900 EXEC CICS SEND
028000 FROM(ORDERSO(2))
028100 ERASE
028200 END-EXEC.
028300 EXEC CICS SEND
028400 FROM(ORDERSO(3))
028500 ERASE
028600 END-EXEC.
028700 EXEC CICS SEND
028800 FROM(ORDERSO(4))
028900 ERASE
029000 END-EXEC.
029100 MOVE-TO-MAP-PARA.
029200 MOVE REC(COUNTER) TO AAA.
029300 MOVE NEW-DATA TO ORDERSO(COUNTER).
029400 MOVE-ORDER-VALUE-PARA.
029500 MOVE SOHORDNUM TO ORDNUM.
029600 MOVE SOHDT TO ORDDATE.
029700 MOVE DISPLAY-TOTAL TO ORDAMOUNT.
029800 MOVE WS-MASTER-STRUCTURE TO REC(DISP-COUNTER).
029900 ADD 1 TO DISP-COUNTER.
030000 *----------------------------------------------------------------*
030100 * THIS PART OF THE PROGRAM IS USED TO SEND THE ORDERS LIST TO THE*
030200 * USER TERMINAL. *
030300 *----------------------------------------------------------------*
030400 SEND-MASTER-PARA.
030500 * EXEC CICS SEND
030600 * MAP('HEADER')
030700 * MAPSET('SALES')
030800 * FROM(HEADERO)
030900 * END-EXEC.
031000 EXEC CICS SEND
031100 MAP('ORDMAP')
031200 MAPSET('SALES')
031300 FROM(ORDMAPO)
031400 END-EXEC.
031500 * EXEC CICS SEND
031600 * MAP('FOOTER')
031700 * MAPSET('SALES')
031800 * FROM(FOOTERO)
031900 * END-EXEC.
****** **************************** Bottom of Data *******************
It just occurred to me that the reason you used the multiple SENDs is that you don't know how to code an array in a map. If so, here's one way to do it:
Code the following for the array. It will reserve 10 lines of the MAP for itself. The X in col 72 and the start pos of the continued lines are assumed present and correct.
where,
nn is the line number of the 1st line of an array of 10 elements, each 79 bytes long (plus 1 for the ASKIP).
In your pgm define a WS group item of total length 79, with all the elementary fields you require in each line of the array. When you fill those fields you move the group field to the subscripted MAP line. For example:
MOVE WS-ARRAY-ELEMENT TO ARRAYXI(4)
That's my recollection of how it worked, anyway.
If you decide to go this way keep us posted about ant adjustments you had to make to get it to work.
I have gone thro' your reply, But i want to say that I have already used OCCURS clause in my map to display array of field. I have splitted map in to 3 sections. One is header which contains query details. Next is the actual content which contains array fields. The last one is nothing but for messages. So please consider the problem again,because i have already included your suggestion in my program.
But i want to say that I have already used OCCURS clause in my map to display array of field
Don't know how I missed that, sorry.
But my point still stands.
BTW, why do you define the orders in the MAP as a table then SEND them one at a time in the pgm code?
If you code one unified MAP you display everything with one SEND MAP. This reduces a LOT of performance overhead and simplifies the pgm code.
Some ques:
Does the terminal user update the order info in the MAP?
Why do you define tbl items as UNPROT?
Have you displayed the MAP? Are you satisfied w/its format (do the literals fall in the right places)? Can you show it to us?