Привет всем.
При выполнении такого джоба:
X++:
static void job123(Args _args)
{
...
void updateFieldValue(Common _common, FieldId _fieldId, anytype _value)
{
...
try
{
ttsBegin;
_common.selectForUpdate(true);
_common.(_fieldId) = _value;
_common.doUpdate();
ttsCommit;
}
catch
{
ttsAbort;
}
...
}
...
;
...
updateFieldValue(APMParameters::find(), fieldnum(APMParameters, Field1), valueField1);
...
}
генерируется ошибка:
Цитата:
Невозможно отредактировать запись в Параметры (APMParameters).
Операция не может быть завершена, так как запись не выбиралась для обновления. Используйте TTSBEGIN/TTSCOMMIT наряду с выражением FORUPDATE.
Попытка изменения записи в таблице "APMParameters", которая не выбрана для изменения (RecId = 5637144576). [W-0108]
(S)\Classes\xRecord\doUpdate
(C)\Jobs\job123 - line 77
Мне получилось ее обойти так:
X++:
static void job123(Args _args)
{
...
void updateFieldValue(Common _common, FieldId _fieldId, anytype _value)
{
...
try
{
//ttsBegin; // <-- убираем
_common.selectForUpdate(true);
_common.(_fieldId) = _value;
_common.doUpdate();
//ttsCommit; // <-- убираем
}
catch
{
ttsAbort;
}
...
}
...
;
...
ttsBegin; // <-- добавляем
updateFieldValue(APMParameters::find(), fieldnum(APMParameters, Field1), valueField1);
ttsCommit; // <-- добавляем
...
}
Вопросы:
1. возможно как то обойти данную ошибку но оставив ttsBegin/ttsCommit в методе updateFieldValue ?
2. Заметил что такая ошибка генерируется только для изменения данных у этой таблицы - APMParameters.
Если такое же выполнять для других таблиц, например: RassetParameters, CompanyInfo таких ошибок нет.
Не подскажете почему для одних таблиц нет ошибки а для APMParameters ошибка при вызове doUpdate()?