Показать сообщение отдельно
Старый 25.09.2009, 11:41   #1  
Helm is offline
Helm
Участник
 
15 / 11 (1) +
Регистрация: 24.09.2009
Разноски, блокировки и NumberSeq
Господа, доброго дня!
Аксапта тройка.
Симптомы такие: для нескольких заказов при попытке разносок вешается намертво система, создаются два доступа к таблице NumberSequenceTable, один блочит другого.
Происходит это в классе NumberSeqCleanUp в методе cleanUpSequence в этом запросе
X++:
select forupdate firstonly numberSequenceTableUpd
    index hint SeriesIdx
    where numberSequenceTableUpd.numberSequence == _numberSequenceTable.numberSequence;
Проблема была описана Здесь и Здесь Однако перепись метода release в NumberSeq не помогает банально потому, что туда код не заходит.
Происходит впервые, раньше не было такого как говорят, что согласуется со старыми топиками (работаю второй день на месте, впервые вижу проблемы с проводками такого класса).

Помимо этого ещё появился глюк.
При создании отгрузочной накладно процесс проходит, ничего не виснет, однако в проводках и в соответствующей таблице пустота.

Ниже весь код, по-моему он оригинальный
X++:
public void cleanUpSequence(UserConnection         userConnection,
                     NumberSequenceTable    _numberSequenceTable,
                     boolean                hookCleanUp = false
                    )
{
    NumberSequenceList      numberSequenceList;
    NumberSequenceTable     numberSequenceTableUpd;
    boolean                 doCleanUpDead   = FALSE;

    if (_numberSequenceTable && _numberSequenceTable.continuous)
    {
        userConnection.ttsbegin();

        numberSequenceTableUpd.setConnection(userConnection);

        select forupdate firstonly numberSequenceTableUpd
            index hint SeriesIdx
            where numberSequenceTableUpd.numberSequence == _numberSequenceTable.numberSequence;

        if (numberSequenceTableUpd && (!hookCleanUp || numberSequenceTableUpd.mustRunCompleteCleanUp()))
            numberSequenceTableUpd.updateCompleteClean();

        while select transId
            from numberSequenceList
            group by transId
            where numberSequenceList.numberSequence == _numberSequenceTable.numberSequence
        {
            if (!numberSequenceList.transId)
                doCleanUpDead = TRUE;
            this.cleanUpTrans(userConnection,numberSequenceList.transId);
        }
        if (doCleanUpDead)
            this.cleanupDeadProc(userConnection,_numberSequenceTable.numberSequence);

        userConnection.ttscommit();
    }
}
P.S. Перенесите, пожалуйста, топик, сглючило(

Последний раз редактировалось Helm; 25.09.2009 в 11:53.