Date formulas allow you to determine a new date based on a reference date. This recipe will show you how to use the built-in NAV function called CALCDATE
to calculate them.
Create a new codeunit from Object Designer.
Add the following global variable:
Name
Type
CalculatedDate
Date
In the
OnRun
trigger write the following code:CalculatedDate := CALCDATE('CM+1D', 01012010D); MESSAGE('Calculated Date: %1', CalculatedDate);
Save and close the codeunit.
When you run the codeunit you should see a window like the following screenshot:
The CALCDATE()
function takes in two parameters, a calculation formula and a starting date. The calculation formula is a string that tells the function how to calculate the new date. The second parameter tells the function which date it should start with. A new date is returned by this function, so the value must be assigned to a variable using standard :=
syntax.
The following units can be used in the calculation formula:
These units may be different depending on what language your version of NAV is running under.
You have two options for the number to place before the unit. This can either be a standard number ranging between 1 and 9, or the letter C, which stands for Current. These units can be added and subtracted to determine a new date based on any starting date.
Calculation formulas can become very complex. The best way to fully understand them is to write your own formulas to see the results. Start out with basic formulas like 1M+2W-1D and move on to more complex ones like — CY+2Q-1W.
NAV has the ability to issue a reminder whenever a customer goes past due on their balance. These reminders are issued at specific times based on date formulas entered by the user during setup.
Look at the MakeReminder()
method in codeunit 392, Reminder-Make. This function has a large amount of code so only a small section is shown here. The date formula is stored in a field called Grace Period and is used to determine if those many days have passed since the due date of the document.
IF (CALCDATE(ReminderLevel."Grace Period",ReminderDueDate) < ReminderHeaderReq."Document Date") AND ((LineLevel <= ReminderTerms."Max. No. of Reminders") OR (ReminderTerms."Max. No. of Reminders" = 0)) THEN BEGIN