-SET &REQUEST_TIME1 = - DATECVT( DATEADD(DATECVT(&REQUEST_TIME,'I8YYMD','YYMD'),'D', 7),'YYMD','I8YYMD');and an explanation:
quote:The code above looks crazy, but what's happening is you have to convert the alpha string to a Date format using DATECVT, then use DATEADD to add 7 days, then use DATECVT to convert from Date format back to alpha string - read the line of code form inside going outwards.
DEFINE FUNCTION UDATEADD(INDATE/A8YYMD, INUNIT/A2, INNBR/I4) INDATE1/YYMD = INDATE; UDATEADD1/YYMD = DATEADD(INDATE1, INUNIT, INNBR); UDATEADD/A8YYMD = UDATEADD1; END -RUN
-SET &DATE1 = UDATEADD(&YYMD, 'M', -3); -TYPE &YYMD - &DATE1
-*-- Beginning of Fiscal Quarter DEFINE FUNCTION BOFQ(INDATE/A8) INDTYYA/A4 = EDIT(INDATE,'9999$$$$'); INDTYY/I4 = EDIT(INDTYYA); OUTDTYY/I4 = INDTYY - 1; INDTMD/A4 = EDIT(INDATE,'$$$$9999'); BOFQ/A8 = IF INDTMD FROM '1101' TO '1231' THEN INDTYYA || '1101' ELSE IF INDTMD FROM '0101' TO '0131' THEN EDIT(OUTDTYY) || '1101' ELSE IF INDTMD FROM '0201' TO '0430' THEN INDTYYA || '0201' ELSE IF INDTMD FROM '0501' TO '0731' THEN INDTYYA || '0501' ELSE IF INDTMD FROM '0801' TO '1031' THEN INDTYYA || '0801' ELSE INDATE; END -RUN -*-- End of Fiscal Quarter DEFINE FUNCTION EOFQ(INDATE/A8) INDTYYA/A4 = EDIT(INDATE,'9999$$$$'); INDTYY/I4 = EDIT(INDTYYA); INDTMD/A4 = EDIT(INDATE,'$$$$9999'); OUTDTYY/I4 = INDTYY + 1; EOFQ/A8 = IF INDTMD FROM '1101' TO '1231' THEN EDIT(OUTDTYY) || '0131' ELSE IF INDTMD FROM '0101' TO '0131' THEN INDTYYA || '0131' ELSE IF INDTMD FROM '0201' TO '0430' THEN INDTYYA || '0430' ELSE IF INDTMD FROM '0501' TO '0731' THEN INDTYYA || '0731' ELSE IF INDTMD FROM '0801' TO '1031' THEN INDTYYA || '1031' ELSE INDATE; END -RUN -*-- Beginning of Fiscal Year DEFINE FUNCTION BOFY(INDATE/A8) INDTYYA/A4 = EDIT(INDATE,'9999$$$$'); INDTYY/I4 = EDIT(INDTYYA); INDTMM/A2 = EDIT(INDATE,'$$$$99$$'); OUTDTYY/I4 = IF INDTMM LT '11' THEN INDTYY - 1 ELSE INDTYY; BOFY/A8 = EDIT(OUTDTYY) || '1101'; END -RUN -*-- End of Fiscal Year DEFINE FUNCTION EOFY(INDATE/A8) INDTYYA/A4 = EDIT(INDATE,'9999$$$$'); INDTYY/I4 = EDIT(INDTYYA); INDTMM/A2 = EDIT(INDATE,'$$$$99$$'); OUTDTYY/I4 = IF INDTMM LT '11' THEN INDTYY ELSE INDTYY + 1; EOFY/A8 = EDIT(OUTDTYY) || '1031'; END -RUN
-SET &DT_BOFQ = BOFQ(&YYMD); -SET &DT_EOFQ = EOFQ(&YYMD); -SET &DT_BOFY = BOFY(&YYMD); -SET &DT_EOFY = EOFY(&YYMD);
Frank | |
prod: WF 7.6.10 platform Windows, databases: msSQL2000, msSQL2005, RMS, Oracle, Sybase,IE7 test: WF 7.6.10 on the same platform and databases,IE7 |