X++ иногда не контролирует тип результата метода
Тип возвращаемого методом значения не приводится к объявленному типу.
Axapta 3.0 SP2
Пример :
Тип метода getPrice() объявлен как real,
а реально возвращается тип integer.
Видимо приведение типов происходит уже вне метода.
static void JobTestBugTypes()
{
Amount amount = 10;
Qty qty = 0;
Array sArray = new Array(Types::Real);
real r;
anytype any;
types tAny;
types tR;
real getPrice( real _costValue, real _qty)
{
if (_qty !=0)
return _costValue / _qty;
else
return 0; // глюки пропадут если здесь
// сразу поставить явно константу типа real
// например 0.0
}
;
r = getPrice(amount, qty);
tR = typeOf(r);
info(strFMT('r : Реально получили значение типа %1', tR));
any = getPrice(amount, qty);
tAny = typeOf(any);
info(strFMT('any : Реально получили значение типа %1', tAny));
sArray.value(3, getPrice(amount, qty) ); // здесь exception будет "Несовпадение типов"
sArray.value(3, any ); // и здесь был бы если бы дошли
info('Все в порядке');
}
|