Just a quick look, it appears the code is adding to the city and state totals before checking if the city or state values have changed. This means if the city or state has changed that it'll be adding some of the next city and state totals to the previous city and state totals. Unless I'm mistaken, this will not match a uniquery stmt doing the same. If you see my example posted earlier you'll see it checks for change of key values, then print totals, then clear totals, then add to totals, which is necessary for correct results.
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Behalf Of Dennis Bartlett Sent: Monday, June 21, 2004 2:07 AM To: [EMAIL PROTECTED] Subject: RE: [U2] [UV] WHILE READNEXT id DO {{not a holy war,just a code example) SORT CUSTOMER BY STATE BY CITY {showing} NAME BREAK-ON CITY BREAK-ON STATE TOTAL YTD-SALES ORDERS File layout ------------------ <0> Order Number <1> State <2> City <3> Cust.Name (for purpose of example) <4> Sales by month position (ie 12 multivals) PROGRAM YTD.SALES.RPT * author : d.bartlett * written : 21 June 04 * example of GOTO-less code in a break-on environment * --------------------------------------------------- * Assumes there won't be a city in a different state * with the same name / code * --------------------------------------------------- OPEN 'ORDERS' TO CUSTOMER ELSE STOP 201,'CUSTOMER' TODAY = OCONV(DATE(),'D2/') ; * assumes dd/mm/yy PERIOD = TODAY[4,2] ; * assumes simple periods CUST.YTD.SALES = 0 LPT.WIDTH = 80 STATE.SALES = 0 CITY.SALES = 0 CUST.SALES = 0 TOT.SALES = 0 LAST.STATE = '' LAST.CITY = '' * -------------------------------------------------- * select data - assumes I can still use select-by * - if not, we do a two stage pass * (1) process file, * using locate to sequence state*city * build array1 = state*city } state*city* * build array2 = orderno * * (2) process sorted array1 with REMOVE * MORE = 1 * LOOP * REMOVE KEY FROM ARRAY1 SETTING MORE * REMOVE ORDERNO FROM ARRAY2 SETTING JUNK * * --> process * WHILE MORE * REPEAT * * Limitations are size, speed * -------------------------------------------------- CMD = 'SELECT CUSTOMER' CMD := ' BY STATE' CMD := ' BY CITY' CRT 'Selecting data - please wait' EXECUTE CMD CAPTURING X RETURNING Y IF (Y < 1) THEN MSG = 'No records were found matching' MSG := ' your selection' CRT MSG :; INPUT REPLY END ELSE CRT Y : ' records selected' GOSUB PROCESS.ORDERS END CRT @(-1) STOP * ================================================= PROCESS.ORDERS: LOOP READNEXT ORDERNO ELSE DONE = 1 UNTIL (DONE = 1) READ ORDREC FROM ORDERS, ORDERNO THEN GOSUB PARSE.ORDER GOSUB ACCUM.YTD * initialise temp variables IF (LAST.STATE = '') THEN LAST.STATE = STATE LAST.CITY = CITY END * test if city has changed? IF (CITY NE LAST.CITY) THEN GOSUB CITY.TOTALS * test if state has changed? IF (STATE NE LAST.STATE) THEN GOSUB STATE.TOTALS * print a detail line CRT NAME 'L#40' : CRT OCONV(YTD.SALES, 'MD2') 'R#15' END REPEAT * final CITY totals GOSUB CITY.TOTALS GOSUB STATE.TOTALS GOSUB FINAL.TOTAL RETURN * --------------------------------------------------- PARSE.ORDER: * <0> Order Number * <1> State * <2> City * <3> Cust.ID * <4> Cust.Name (for purpose of example) * <5> Sales by month position (ie 12 multivals) STATE = ORDREC<1> CITY = ORDREC<2> NAME = ORDREC<3> SALES = ORDREC<4> RETURN * --------------------------------------------------- ACCUM.YTD: CUST.SALES = 0 FOR P = 1 TO PERIOD CUST.SALES += OR.SALES<1,P> NEXT P STATE.SALES += CUST.SALES CITY.SALES += CUST.SALES TOT.SALES += CUST.SALES RETURN * --------------------------------------------------- CITY.TOTALS: CRT SPACE(40) : CRT STR('-',15) CRT SPACE(40) : CRT OCONV(CITY.SALES, 'MD2') 'R#15' LAST.CITY = CITY CITY.SALES = 0 RETURN * --------------------------------------------------- STATE.TOTALS: CRT CRT SPACE(40) : CRT STR('=',15) CRT SPACE(40) : CRT OCONV(STATE.SALES, 'MD2') 'R#15' STATE.SALES = 0 LAST.STATE = STATE RETURN * --------------------------------------------------- FINAL.TOTAL: CRT CRT STR('=',LPT.WIDTH) CRT SPACE(40) : CRT OCONV(TOT.SALES, 'MD2') 'R#15' CRT STR('=',LPT.WIDTH) RETURN * --------------------------------------------------- END -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Mark Johnson Sent: 18 June 2004 04:14 To: [EMAIL PROTECTED] Subject: Re: [U2] [UV] WHILE READNEXT id DO I respond with the GOTO perspective ------- u2-users mailing list [EMAIL PROTECTED] To unsubscribe please visit http://listserver.u2ug.org/ ------- u2-users mailing list [EMAIL PROTECTED] To unsubscribe please visit http://listserver.u2ug.org/