X++ business runtime functions

This article describes the business run-time functions.

These functions enter financial data and calculate formulas.

cTerm

Calculates the number of periods that are required for the current investment value to yield a target value.

Syntax

real cTerm(real interest, real future_value, real current_value)

Parameters

Parameter Description
interest The interest rate.
future_value The target value.
current_value The current investment value.

Return value

The number of periods that are required in order to reach future_value.

Remarks

The current_value and future_value parameters must have the same prefixed sign (plus or minus).

Example

static void cTermExample(Args _arg)
{
    real r;
    ;
    r = cTerm(10.0, 500.00, 100.00);
    print "The cTerm is " + num2Str(r, 2, 2, 1, 1);
    pause;
}

ddb

Calculates the accelerated depreciation of an asset.

Syntax

real ddb(real price, real scrap, real life, int period)

Parameters

Parameter Description
price The purchase price of the asset.
scrap The residual value of the asset that has been written off.
life The expected lifetime of the asset.
period The period to calculate depreciation over.

Return value

The depreciation of the asset.

Remarks

The book value for a specific period is equal to the purchase price minus the accumulated depreciation for previous periods:

  • Book value for Period 1 = Price
  • Book value for Period 2 = Book value for Period 1 – Depreciation for Period 1
  • Book value for Period n = Book value for Period (n–1) – Depreciation for Period (n–1)

There are three variations for the calculation of depreciation: If Period > Life:

  • Depreciation = 0

If (Book value for Period n) – ((Book value for Period n) × 2 ÷ Life) < Residual value:

  • Depreciation = (Book value for Period n) – Residual value

In all other cases: Depreciation = (Book value for Period n) × 2 ÷ Life The syd and sln functions also calculate the depreciation of an asset. The syd and ddb functions enables higher depreciation for the earlier years, whereas sln calculates a linear depreciation.

ddb(12000,2000,10,1); //Returns the value 2400.
ddb(12000,2000,10,3); //Returns the value 1536.

dg

Calculates the contribution ratio, which is based on the sales price and the purchase price. If the value of the sale parameter is 0.0, the calculation can't be done.

Syntax

real dg(real sale, real purchase)

Parameters

Parameter Description
sale The sale price.
purchase The purchase price.

Return value

The contribution ratio.

Remarks

dg(1000,300); //Returns the value 0.7.
dg(100,30); //Returns the value 0.7.
dg(20000, 11000); //Returns the value 0.45.

fV

Calculates the future value of an investment.

Syntax

real fV(real amount, real interest, real life)

Parameters

Parameter Description
amount The amount that was paid in during each period.
interest The interest rate.
life The number of investment periods.

Return value

The future value of the investment.

Remarks

fV(100,0.14,10); //Returns the value 1933.73.
fV(400,0.10,5); //Returns the value 2442.04.

idg

Calculates the sale price, based on the purchase price and the contribution ratio.

real idg(real purchase, real contribution_ratio)

Parameters

Parameter Description
purchase The purchase price.
contribution_ratio The contribution ratio.

Return value

The sale price.

Remarks

If the contribution ratio is equal to 1.0, the calculation can't be done. The idg function is the inverse of the dg function.

idg(300,0.7); //Returns the value 1000.
idg(11000,0.45); //Returns the value 20000.

intvMax

Retrieves the number of intervals for the specified period when the period is divided into parts as specified by the func parameter.

int intvMax(date input_date, date ref_date, int func)

Parameters

Parameter Description
input_date The end of the period, which must be later than the ref_date parameter.
ref_date The start of the period.
func A IntvScale system enumeration value that indicates the division unit.

Remarks

Here are the possible values for the func parameter:

  • None
  • YearMonthDay
  • YearMonth
  • Year
  • MonthDay
  • Month
  • Day
  • YearQuarter
  • Quarter
  • YearWeek
  • Week
  • WeekDay

Example

static void intvMaxExample()
{
    date refDate = str2Date("4/9/2007", 213);
    date inputDate = str2Date("10/5/2007", 213);
    int numberOfIntervals;
    ;
    numberOfIntervals = intvMax(inputDate, refDate, intvScale::YearMonth);
    print numberOfIntervals;
    pause;
}

intvName

Returns the name of the interval that is the specified number of intervals ahead of the specified date.

str intvName(date input_date, int col, enum func)

Parameters

Parameter Description
input_date A date in the first interval.
col The number of intervals ahead of the date that is specified by the input_date parameter.
func An intvScale enumeration value.

Return value

The name of the interval.

Remarks

For example, if the func parameter is the IntvScale::WeekDay enumeration value, this method returns the name of the weekday. If the func parameter is the IntvScale::Week enumeration value, this method returns a string that contains the number of the week.

Example

static void intvNameExample(Args _args)
{
    date refDate = 2672010;
    str name;
    ;
    name = intvName(refDate, 3,  intvScale::WeekDay);
    Global::info(strfmt("%1 is the output, which indicates the day of the week 3 days after 26\7\2010.", name));
}
/**** Infolog display.
Message (09:56:55 am)
Thu is the output, which indicates the day of the week 3 days after 2672010.
****/

intvNo

Calculates the number of intervals between two dates when you divide the time into the specified intervals.

Syntax

int intvNo(date input_date, date ref_date, int func)

Parameters

Parameter Description
input_date A date that indicates the end of the period
ref_date A date that indicates the start of the period.
func An intvScale enumeration value.

Return value

The number of intervals between the dates that are specified by the ref_date and input_date parameters.

Example

static void intvNoExample(Args _args)
{
    date inputDate = str2Date("1/1/2007", 213);
    date refDate = str2Date("3/1/2007", 213);
    int noOfIntervals;
    ;
    noOfIntervals = intvNo(refDate, inputDate, intvScale::Month);
    print noOfIntervals;
    pause;
    //noOfIntervals now holds the difference in months between March and January (2).
}

intvNorm

Returns the normalized date for the period.

Syntax

date intvNorm(date input_date, date ref_date, int func)

Parameters

Parameter Description
input_date The end of the period, which must be later than the date that is specified by the ref_date parameter.
ref_date The start of the period.
func An intvScale enumeration value that indicates the interval division unit.

Return value

The normalized date for the period.

Remarks

The returned date will equal the date of the first day in the interval in which the date that is specified by the ref_date parameter exists.

Example

static void example()
{
    print intvNorm(today(), today()-1, IntVScale::WeekDay);
    pause;
}

pmt

Calculates the amount that must be paid every period to repay a loan.

Syntax

real pmt(real principal, real interest, real life)

Parameters

Parameter Description
principal The amount that was originally borrowed.
interest The interest that is applied each period to the amount that was borrowed.
life The number of periods that the loan is repaid over.

Return value

The amount that must be paid every period.

Remarks

The life and interest parameters must be expressed in the same time units. The value of the life parameter must be more than 0.0.

Example

pmt(4000,0.14,4); //Returns the value 1372.82.
pmt(10000,0.10,20); //Returns the value 1174.60.

pt

Retrieves the sum of a number plus a specified percentage of that number.

Syntax

real pt(real amount, real percentage)

Parameters

Parameter Description
amount The original number.
percentage The percentage supplement.

Return value

The number that is equal to ((amount *× *percentage) + amount).

Remarks

pt(2000.0,0.10); //Returns the value 2200.0.
pt(20.0,0.10); //Returns the value 22.0.

pv

Calculates the present value of an annuity, where an amount is received over multiple periods and the interest rate is deducted for each period.

Syntax

real pv(real amount, real interest, real life)

Parameters

Parameter Description
amount The amount that is paid during each period.
interest The interest rate.
life The number of times that the value that is specified by the amount parameter is paid.

Return value

The current value of an annuity.

Remarks

pv(300,0.14,4); //Returns the value 874.11.

rate

Calculates the interest that is required for the current investment value to attain the future value over the specified number of periods.

Syntax

real rate(real _future_value, real _current_value, real _terms)

Parameters

Parameter Description
_future_value The future value of the investment.
_current_value The current value of the investment.
_terms The number of periods that the investment spans.

Return value

The calculated interest rate.

Remarks

rate(10000,1000,20); //Returns the value 0.12.

sln

Retrieves the constant depreciation amount for the specified asset for each depreciation period.

Syntax

real sln(real price, real scrap, real life)

Parameters

Parameter Description
price The purchase price of the asset.
scrap The scrap value of the asset.
life The number of periods in the expected life of the asset.

Return value

The depreciation amount.

Example

static void slnExample(Args _arg)
{
    real r;
    ;
    r = sln(100.00, 50.00, 50.00);
    print r;
    pause;
}

syd

Calculates the depreciation of an asset over a specified period.

Syntax

real syd(real _price, real _scrap, real _life, int _period)

Parameters

Parameter Description
_price The purchase price of the asset.
_scrap The scrap value of the asset.
_life The expected life of the asset (the number of periods).
_period The period to calculate depreciation for.

Return value

The amount of depreciation over the specified period.

Remarks

In contrast to the sln function, the syd function can allow for an accelerated depreciation of the asset. As with the ddb function, this enables higher depreciation during the early periods of the life of an asset.

Example

In the following examples, the periodic depreciation is calculated for an asset that has a purchase price of 10,000, a scrap value of 2,000, and a life of 5. In comparison, sln(10000,2000,5) would calculate 1600.00 for each period.

// Returns the value 2666.67 (for the 1st period).
syd(10000,2000,5,1);
// Returns the value 2133.33 (for the 2nd period).
syd(10000,2000,5,2);
// Returns the value 1600.00 (for the 3rd period).
syd(10000,2000,5,3);
// Returns the value 1066.67 (for the 4th period).
syd(10000,2000,5,4);
// Returns the value 533.33 (for 5th - and final- period).
syd(10000,2000,5,5);

term

Calculates the number of periods that an investment must run for.

Syntax

real term(real amount, real interest, real future_value)

Parameters

Parameter Description
amount The amount of the periodic investment.
interest The interest rate for each period.
future_value The future value that is anticipated for the investment

Return value

The number of periods that the investment must run for.

Example

static void termExample(Args _args)
{
    print term(400,0.08,5000);  //returns the value '9.01'.
    print term(100,0.14,3000);  //returns the value '12.58'.
    pause;
}