LOCAL dSchedDate, dRcvDate, nItemCuft, nItemRate, nNumberOfDays, nFreeDays, nDaysInMonth, nStorageDue, amt_due dSchedDate = ctod('03/16/2003') dRcvDate = ctod('02/25/2003') nItemCuft = 90 nItemRate = .50 nNumberOfDays = 0 nStorageDue = 0 amt_due = 0.00 nFreeDays = 14 nDaysInMonth = 31 IF MONTH(dRcvDate) = MONTH(dSchedDate) dStartCalcDate = dRcvDate + nFreeDays IF dStartCalcDate >= dSchedDate nNumberOfDays = 0 ELSE nNumberOfDays = DAY(dSchedDate) - DAY(dStartCalcDate) + 1 ENDIF ENDIF *** received date was in a previous month *** determine if we use the first of the month or find how many freedays in last month IF MONTH(dRcvDate + nFreeDays) < MONTH(dSchedDate) dStartCalcDate = 1 ELSE dStartCalcDate = dRcvDate + nFreedays ENDIF nNumberOfDays = DAY(dSchedDate) - DAY(dStartCalcDate) + 1 *** do the calculation ? nStorageDue = (nItemRate/nDaysInMonth) * nItemCuft * nNumberOfDays ? amt_due = ROUND(nStorageDue, 2) *** no negative amounts allowed IF amt_due < 0 amt_due = 0 ENDIFTIA