Показать сообщение отдельно
Старый 16.03.2023, 11:36   #1  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
305 / 137 (5) +++++
Регистрация: 21.04.2008
Расчет сводника
Добрый день.
Периодически (не каждый день) расчет сводника прерывается с ошибкой "Невозможно отредактировать запись в Чистые потребности (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