Интересно, что поведение ядра изменилось при передаче параметров.
Раньше оно не приводило типы (и даже ошибочно написанный X++ код мог корректно срабатывать), а теперь приводит типы и код который работал раньше - теперь не работает.
Опасно, где это еще вылезет.
Для иллюстрации набросал джобик
X++:
static void Job3015(Args _args)
{
DictEnum dictEnum;
anytype a;
boolean test(boolean _parm)
{
;
dictEnum = new DictEnum(DictEnum::value2id(_parm));
info(strfmt("%1; %2; %3; %4",
typeOf(_parm),
any2int(_parm),
DictEnum::value2id(_parm),
dictEnum ? dictEnum.name() : '-'
));
return 3;
}
;
a = test(3);
dictEnum = new DictEnum(DictEnum::value2id(a));
info(strfmt("%1; %2; %3; %4",
typeOf(a),
any2int(a),
DictEnum::value2id(a),
dictEnum ? dictEnum.name() : '-'
));
info("");
}
В новом билде (как минимум после 1600.2967) джобик выведет
Цитата:
Enum; 1; 61440; boolean
Enum; 1; 0; -
первая строка соответствует преобразованию типов при передаче параметров в метод, а вторая - при возвращении результатов.
В старом билде (RU8) результат такой:
Цитата:
Enum; 3; 61440; boolean
Enum; 1; 0; -
т.е. значение не приводилось к нужному типу и баг в X++ коде не проявлялся.
P.S. Но конечно радует, что это не баг ядра как думали в начале, а всего лишь кривой X++ код.