Добрый день.
Периодически (не каждый день) расчет сводника прерывается с ошибкой "Невозможно отредактировать запись в Чистые потребности (ReqTrans). Возник конфликт обновления из-за того, что другой пользовательский процесс выполняет удаление записи или изменение одного или нескольких полей в записи.", ну далее "Покрытие номенклатуры частично обновлено.", а у помощников соответственно "Главный процесс помечен как процесс, в котором произошел сбой".
АХ2009. Считаем с помощниками, кол-во пробовали менять, чаще используем 4-6 штук.
В методе ReqTrans.update() сделали стандартную конструкцию оптимист.модели, чтобы хоть что-то понять, а также поймать ошибку и вывести номенклатуру на которой крашится - не помогло, номенклатуры разные.
X++:
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() < #RetryNum)
{
retry;
}
}
else
{
warning(strfmt("Ошибка при обновлении ном-ры %1", this.ItemId));
throw Exception::UpdateConflict;
}
Собственно главный вопрос по каким причинам в данном update может быть appl.ttsLevel() > 0 и это вообще нормально?
Стек расчета стандартный
X++:
(S)\Data Dictionary\Tables\ReqTrans\Methods\update,57,
(S)\Data Dictionary\Tables\ReqTrans\Methods\deleteExplosionCoverageTrans,19,
(S)\Data Dictionary\Tables\ReqTrans\Methods\deleteExplosionCoverage,53,
(S)\Classes\ReqCalc\deleteItemRequirement,69,
(S)\Classes\ReqCalcScheduleItemTable\insertDataRegeneration,88,
(S)\Classes\ReqCalcScheduleItemTable\insertData,23,
(S)\Classes\ReqCalc\updateDat,10,
(S)\Classes\ReqCalc\run,15,
(S)\Classes\ReqCalcScheduleItemTable\run,52,
(S)\Classes\ReqProcessExternThread\initAndRunReqCalc,15,
(S)\Classes\ReqProcessExternThread\run,27,
(S)\Classes\BatchRun\runJobStatic,63