Привет всем.
Выяснилась страшная вещь.
Если на табличке перекрыт метод toString то при вызове на соответствующем treeNode метода toString()
возникает ошибка.
Цитата:
Ошибка времени выполнения: TreeNode (источник данных), метод toString вызван с недопустимыми параметрами.
Возможно и в других местах есть проблемы. Здесь пишу о том где натолкнулся сам.
Стал исследовать вопрос, оказывается вызов super() внутри табличного toString() возвращает Common !



Но при этом IDE считает что тип должен быть str и генерит такой код
X++:
public str toString()
{
str ret;
ret = super();
return ret;
}
При выполнении ошибка несоответствия типов возникает на вызове
Если написать так,
X++:
public Common toString()
{
Common ret;
;
ret = super();
return ret;
}
то не компилируется на строке
с ошибкой несоответствия типов.
Если написать
X++:
public anytype toString()
{
anytype ret;
;
ret = super();
return ret;
}
то все компилируется и под отладчиком видно что super() вернул табличный буфер.
Это конечно помогает при использовании в коде
Но ошибка на
никуда не девается.
В общем, похоже что что-то там недоработано в ядре а на таблицах toString метод лучше не перекрывать. Во избежание так сказать...
Причем это не только тут
вот еще пример
ClassFactory - queryRunClass
и еще
Использование modifiedFieldValue() и modifiedField(). Как правильно.
Ax2012. Типы операндов не совместимы с оператором
Это все из той же серии когда где то в ядре при передаче параметров что-то ломается.
Т.е. для разработчиков в 2012-й Аксапте обращение с типами сделали более строгим, но в ядре немного недосмотрели, а может уже не стали менять старые баги.