Привет.
Обнаружил в
\Data Dictionary\Tables\VendTable\Methods\validateField
странный код
X++:
boolean validateField(fieldId p1)
{
...
boolean ret;
;
//AIFFault Mesgs
switch (p1)
{
case fieldnum(VendTable, InvoiceAccount):
if (this.InvoiceAccount && !VendTable::find(this.InvoiceAccount))
{
ret = AifFault::checkFailedLogFault(strfmt("@SYS120870", fieldid2name(tablenum(VendTable), p1), this.InvoiceAccount), #InvalidInvoiceAccount);
}
break;
...
}
//AIF Fault Mesgs end here
...
ret = super(p1);
if (ret)
{
switch (p1)
{
...
case fieldnum(VendTable, CreditMax) :
if (this.CreditMax < 0)
{
ret = checkFailed("@SYS69970");
}
...
}
}
return ret;
код процитирован для ax2009, но в 2012-й аналогично.
1. ret в начале метода никак не инциализируется, т.е. имеет значение false
2. Затем идет куча проверок для AIF с присвоением в ret значения false в случае ошибки.
3. Затем идет вызов super() c перетиранием значения ret (!) т.е. игнорируются найденные на шаге 2 некорректности в заполнении полей (хотя какие они найденные, когда ret инициализровался как false).
4. Затем обычные проверки значений полей.
Вопрос, что это такое ?
Это досадная опечатка в коде, приведшая к тому что не работает целый кусок по валидации значений (только пишет сообщения в инфолог и в AIF)
или так и было задумано (валидация в принципе на super() должна была отработать, но она только в инфолог сообщения шлет, а в AIF - нет. т.е. возможно этот код просто досылал интересующие автора сообщения в AIF) ?