I've dotted all my Vars, added indicator vars to fetch statements
all vars intialized outside of whiles, set whileopt off, increased files
from 5 to 30 still blows out to "I>" prompt (runs under
trace/debugger). If anyone wants to take a minute and peak at the
code and see if there is anything I'm missing, I've attached the
code ( not sure if list server excepts attachments) the show vars
are just for testing program.
*(int. variables start--------------------------------------------------------------)
SET WHILEOPT OFF
SET VAR vDCT INT
SET VAR vTCT INT
SET VAR vSALEX TEXT
SET VAR vBDRD DATE
SET VAR vEDRD DATE
SET VAR vSD1 date
SET VAR vED1 date
SET VAR vSD2 date
SET VAR vED2 date
SET VAR vSD3 date
SET VAR vED3 date
SET VAR vSD4 date
SET VAR vED4 date
SET VAR vSD5 date
SET VAR vED5 date
SET VAR vCNT1 INT
SET VAR vCNT2 INT
SET VAR vCNT3 INT
SET VAR vCNT4 INT
SET VAR vCNT5 INT
SET VAR vCNT6 INT
SET VAR vRDAVG INT
SET VAR vRDDIFF INT
SET VAR vLCT INT
SET VAR vTMPCNT INT
SET VAR vMOVLC TEXT
SET VAR vTES TEXT
SET VAR vTPP TEXT
SET VAR vTBRK TEXT
SET VAR vind1 INT
SET VAR vind2 INT
*(int. variables end--------------------------------------------------------------)
*(fillin current reload dates
start--------------------------------------------------------------)
LABEL TOP
*(Enter current reload issue dates)
CLS
WRITE 'Enter begining Last Call Date for reloads' at 8,15
FILLIN vBDRD=8 USING 'Enter Begining Date=' at 12,20 WHITE ON BLACK
CLS
WRITE 'Enter Ending Last Call Date for reloads' at 8,15
FILLIN vEDRD=8 USING 'Enter Ending Date=' at 12,20 WHITE ON BLACK
CLS
WRITE 'BEGINING DATE=' at 10,20
SHOW VAR vBDRD at 10,36
WRITE 'thru' at 11,38
WRITE 'ENDING DATE=' at 12,20
SHOW VAR vEDRD at 12,36
FILLIN vTES=1 USING 'Enter to continue, N to reset, Q to Quit= ' at 17,20 +
WHITE ON BLACK
IF .vTES EQ 'N' THEN
CLS
GOTO TOP
ENDIF
IF .vTES EQ 'Q' THEN
CLS
GOTO BOTTOM
ENDIF
*(fillin current reload dates
end--------------------------------------------------------------)
*(Figure future RELOAD DATE SPANS FOR THE NEXT 5 WEEKS)
SET VAR vSD1 = (ADDDAY(.vBDRD,7))
SET VAR vED1 = (ADDDAY(.vEDRD,7))
SET VAR vSD2 = (ADDDAY(.vBDRD,14))
SET VAR vED2 = (ADDDAY(.vEDRD,14))
SET VAR vSD3 = (ADDDAY(.vBDRD,21))
SET VAR vED3 = (ADDDAY(.vEDRD,21))
SET VAR vSD4 = (ADDDAY(.vBDRD,28))
SET VAR vED4 = (ADDDAY(.vEDRD,28))
SET VAR vSD5 = (ADDDAY(.vBDRD,35))
SET VAR vED5 = (ADDDAY(.vEDRD,35))
*(figure future RELOAD DATE SPANS
end--------------------------------------------------------------)
*(Declare cursors start--------------------------------------------------------------)
*(FIND OUT WHAT SALES# ARE IN THIS WEEKS ISSUE AND ARE DUE RELOADS)
DECLARE XX1 CURSOR FOR select distinct csales# from customer where lcdate >= .vBDRD
and lcdate <= .vEDRD +
AND STATUS IS NULL AND PDSTATUS IS NOT NULL
*(cursor for current week reload issue)
DECLARE movload CURSOR FOR SELECT CUSTID FROM CUSTOMER WHERE CSALES# = .vsalex AND
STATUS IS NULL +
and pdstatus is not null and lcdate >= .vBDRD and lcdate <= .vEDRD
*(cursor for next future week reload issue)
DECLARE futload CURSOR FOR SELECT CUSTID FROM CUSTOMER WHERE CSALES# = .vsalex AND
STATUS IS NULL +
and pdstatus is not null and lcdate >= .vSD1 and lcdate <= .vED1
*(Declare cursors end--------------------------------------------------------------)
OPEN XX1
FETCH XX1 INTO vSALEX INDICATOR vind1
*(Outside WHiles Loop
start--------------------------------------------------------------)
*(while loop will process one sales# at a time)
WHILE SQLCODE <> 100 THEN
*(Calculate total reloads to be issued for each week for current sales#)
COMPUTE vCNT1 AS COUNT CUSTID FROM CUSTOMER WHERE STATUS IS NULL AND PDSTATUS IS NOT
NULL AND +
LCDATE >= .vBDRD AND LCDATE <= .vEDRD AND CSALES# = .vSALEX
COMPUTE vCNT2 AS COUNT CUSTID FROM CUSTOMER WHERE STATUS IS NULL AND PDSTATUS IS NOT
NULL AND +
LCDATE >= .vSD1 AND LCDATE <= .vED1 AND CSALES# = .vSALEX
COMPUTE vCNT3 AS COUNT CUSTID FROM CUSTOMER WHERE STATUS IS NULL AND PDSTATUS IS NOT
NULL AND +
LCDATE >= .vSD2 AND LCDATE <= .vED2 AND CSALES# = .vSALEX
COMPUTE vCNT4 AS COUNT CUSTID FROM CUSTOMER WHERE STATUS IS NULL AND PDSTATUS IS NOT
NULL AND +
LCDATE >= .vSD3 AND LCDATE <= .vED3 AND CSALES# = .vSALEX
COMPUTE vCNT5 AS COUNT CUSTID FROM CUSTOMER WHERE STATUS IS NULL AND PDSTATUS IS NOT
NULL AND +
LCDATE >= .vSD4 AND LCDATE <= .vED4 AND CSALES# = .vSALEX
COMPUTE vCNT6 AS COUNT CUSTID FROM CUSTOMER WHERE STATUS IS NULL AND PDSTATUS IS NOT
NULL AND +
LCDATE >= .vSD5 AND LCDATE <= .vED5 AND CSALES# = .vSALEX
*(Get average reload issue )
SET VAR vRDAVG = (LAVG(.vCNT1,.vCNT2,.vCNT3,.vCNT4,.vCNT5,.vCNT6))
SET VAR vRDDIFF = (.vRDAVG - .vCNT1)
*(--------------------------------------------------------------)
*(If current issue is larger than average)
*(Move from current to future)
IF 0 > .vRDDIFF THEN
SHOW VAR vSALEX
SHOW VAR vCNT1
SHOW VAR vCNT2
SHOW VAR vCNT3
SHOW VAR vCNT4
SHOW VAR vCNT5
SHOW VAR vCNT6
SHOW VAR vRDAVG
SHOW VAR vRDDIFF
write 'Move from current TO FUTURE'
pause
SET VAR vTCT = 0
SET VAR vDCT = 0
SET VAR vTMPCNT = (.vCNT1 / .vRDDIFF)
SET VAR vLCT = (ABS(.vTMPCNT))
SHOW VAR vLCT
PAUSE
OPEN movload RESET
FETCH movload into vMOVLC INDICATOR vind2
WHILE SQLCODE <> 100 THEN
IF vDCT = .vLCT THEN
*(This is the IF statement that keeps having problems)
*(final code will have an update here)
SET VAR vTCT = (.vTCT + 1)
SET VAR vDCT = 0
ENDIF
SET VAR vDCT = (.vDCT + 1)
FETCH movload into vMOVLC INDICATOR vind2
ENDWHILE
SHOW VAR vTCT
PAUSE
ENDIF
*(--------------------------------------------------------------)
*(If current issue is smaller than average)
*(Move from future to current)
IF 0 < .vRDDIFF THEN
SHOW VAR vSALEX
SHOW VAR vCNT1
SHOW VAR vCNT2
SHOW VAR vCNT3
SHOW VAR vCNT4
SHOW VAR vCNT5
SHOW VAR vCNT6
SHOW VAR vRDAVG
SHOW VAR vRDDIFF
write 'Move from Future to current'
pause
SET VAR vTCT = 0
SET VAR vDCT = 0
SET VAR vLCT = (.vCNT2 / .vRDDIFF)
SHOW VAR vLCT
PAUSE
OPEN futload RESET
FETCH futload into vMOVLC INDICATOR vind2
WHILE SQLCODE <> 100 THEN
IF vDCT = .vLCT THEN
*(This is the IF statement that keeps having problems)
*(final code will have an "update here")
SET VAR vTCT = (.vTCT + 1)
SET VAR vDCT = 0
ENDIF
SET VAR vDCT = (.vDCT + 1)
FETCH futload into vMOVLC INDICATOR vind2
ENDWHILE
SHOW VAR vTCT
PAUSE
ENDIF
*(--------------------------------------------------------------)
WRITE 'break out of while'
FILLIN vtbrk=2 USING 'Enter y to break'
IF .vtbrk = 'y' THEN
break
ENDIF
FETCH XX1 INTO vSALEX INDICATOR vind1
ENDWHILE
*(Outside While Loop end--------------------------------------------------------------)
DROP CURSOR XX1
DROP CURSOR movload
DROP CURSOR futload
label bottom
CLEAR VAR vDCT vSALEX vTCT vBDRD vEDRD vTES vTPP vSD1 vED1 vSD2 vED2 vSD3 vED3 vSD4
vED4 vSD5 vED5 +
vCNT1 vCNT2 vCNT3 vCNT4 vCNT5 vCNT6 vRDAVG vRDDIFF vLCT vTMPCNT vTBRK vind1
vind2
RETURN