Тема: InventSum
Показать сообщение отдельно
Старый 09.01.2010, 16:01   #7  
Alexanderrrr is offline
Alexanderrrr
Участник
Аватар для Alexanderrrr
 
54 / 19 (1) ++
Регистрация: 06.03.2009
Адрес: Саратов
во-первых, спасибо за ответы!

Цитата:
Alexanderrrr, Вы не там ищете. Блокировки в InventSum.find() - это следствие, а причина где-то в дебрях "расчета аванса", который зачем-то выполняет блокировку запасов в наличии, его и копайте
подозрения у меня на вот этот метод:
X++:
/*
Select table InventSum for update
*/

public InventSum inventSumSelectLocked(InventTrans inventTrans)
{
     InventSum inventSum;
   ;
    if (!this.mustUseTTSSystem())
        inventSum = InventSum::find(inventTrans.itemId,inventTrans.inventDimId,true);
    else
    {
        if (!this.dBConnectionUpd() || !TTSLevel_Upd || !appl.ttsLevel())
            throw error(strfmt("@SYS69842",funcname()));

        inventSum.setConnection(this.dBConnectionUpd());
    
        select firstonly forupdate inventSum
            index hint itemDimIdx
            where inventSum.ItemId      == inventTrans.itemId   &&
                  inventSum.InventDimId == inventTrans.inventDimId;
    }
    return inventSum;  
}
он вызывается из inventtrans.update:
X++:
void update(NoYes dropInventOnHand= NoYes::No)
{
    InventTrans     this_Orig;
    InventSum       inventSum;

    ttsbegin;

    this.setStatusDate();
    this.setClosedOpen();
    //Dual Warehouse -->
    this.setClosedOpenSecCur_RU();
    //Dual Warehouse <--
    this.setDirection();

    if (!dropInventOnHand)
    {
        this_Orig  = this.orig();

        appl.inventUpdateTTSControl().setTTSBeginUpd();

        if (InventSum::mustInventTransBeUpdated(this,this_Orig))
        {
            inventSum = appl.inventUpdateTTSControl().inventSumSelectLocked(this);

            if (!inventSum.canInventTransBeUpdated(this_Orig))
            {
                inventSum.updateInventTrans(this,NoYes::Yes,null,false);

                inventSum = appl.inventUpdateTTSControl().inventSumSelectLocked(this_Orig);

                inventSum.updateInventTrans(this_Orig,NoYes::No,null,true);
            }
            else
                inventSum.updateInventTrans(this,NoYes::Yes,this_Orig);
        }
        else if (InventSum::mustInventTransBeLogUpdated(this,this_Orig))
        {
            appl.inventUpdateTTSControl().insertInventSumLogTTS(this,NoYes::Yes,inventSum);
            appl.inventUpdateTTSControl().insertInventSumLogTTS(this_Orig,NoYes::No,inventSum,true);
        }
        this.updateTransIdReturn();

        appl.inventUpdateTTSControl().setTTSCommitUpd();
    }

    super();

    ttscommit;
}
только в чем дело, понять пока не могу..
__________________
..в каждой программе есть хотя бы одна ошибка..

Последний раз редактировалось Alexanderrrr; 09.01.2010 в 16:12.