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

Reply via email to