Показать сообщение отдельно
Старый 02.09.2021, 08:47   #1  
oleggy is offline
oleggy
Участник
 
256 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
как обойти ошибку - запись не выбиралась для обновления
Привет всем.
При выполнении такого джоба:
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()?

Последний раз редактировалось oleggy; 02.09.2021 в 08:52.