Показать сообщение отдельно
Старый 20.10.2009, 16:23   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Ошибка в расчете курсовых разниц
Добрый день.

При расчете курсовых разниц возникает такая ошибка: Невозможно отредактировать запись в Сопоставление по поставщику (VendSettlement). Возник конфликт обновления из-за того, что другой пользовательский процесс выполняет удаление записи или изменение одного или нескольких полей в записи.

Вот так выглядит код в котором идет обновление данных в таблице VendSettlement (метод updateSettlement в классе CustVendTransData):
X++:
public CustVendSettlement updateSettlement(CustVendTransOpen _custVendTransOpen,
                                           DiscAmount        _utilizedCashDisc   = 0,
                                           PennyDiff         _pennyDiff          = 0,
                                           NoYes             _canBeReversed      = NoYes::No,
                                           boolean           _setOffsetRecId     = false,
                                           boolean           _update             = false,
                                           Dimension         _cashDiscDimension  = custVendTrans.Dimension,
                                           Voucher           _taxVoucher         = '')
{
    CustVendTrans       this_Orig           = custVendTrans.orig();
    CustVendSettlement  custVendSettlement  = this.parmCustVendTransStatic().custVendSettlement();
    ;
    ttsbegin;
    if (_update)
    {
        ...
        //тут все нормально
    }
    else
    {
        custVendSettlement.clear();
        if (custVendTrans.ExchAdjustment != this_Orig.ExchAdjustment)
        {
            custVendSettlement.AccountNum           = custVendTrans.AccountNum;
            custVendSettlement.OffsetTransVoucher   = custVendTrans.LastSettleVoucher;
            custVendSettlement.TransDate            = max(custVendTrans.TransDate, custVendTrans.LastExchAdj);
            custVendSettlement.TransRecId           = custVendTrans.RecId;
            custVendSettlement.ExchAdjustment       = custVendTrans.ExchAdjustment - this_Orig.ExchAdjustment;
            custVendSettlement.DueDate              = _custVendTransOpen.DueDate;
        }
        if (custVendTrans.SettleAmountMST  != this_Orig.SettleAmountMST ||
            custVendTrans.SettleAmountCur  != this_Orig.SettleAmountCur ||
            _utilizedCashDisc                                  ||
            !custVendSettlement.AccountNum)
        {
            custVendSettlement.AccountNum           = custVendTrans.AccountNum;
            custVendSettlement.OffsetTransVoucher   = custVendTrans.LastSettleVoucher;
            custVendSettlement.TransDate            = max(custVendTrans.TransDate, custVendTrans.LastSettleDate);
            custVendSettlement.TransRecId           = custVendTrans.RecId;
            custVendSettlement.SettleAmountMST      = custVendTrans.SettleAmountMST- this_Orig.SettleAmountMST;
            custVendSettlement.SettleAmountCur      = custVendTrans.SettleAmountCur- this_Orig.SettleAmountCur;
            custVendSettlement.UtilizedCashDisc     = _utilizedCashDisc;
            custVendSettlement.PennyDiff            = _pennyDiff;
            custVendSettlement.CashDiscDate         = _custVendTransOpen.CashDiscDate;
            custVendSettlement.OffsetRecId          = _setOffsetRecId ? custVendTrans.OffsetRecId : 0; //custVendSettlement.SettleAmountCur ? this.offsetRecid : 0;
            custVendSettlement.DueDate              = _custVendTransOpen.DueDate;
            custVendSettlement.LastInterestDate     = _custVendTransOpen.LastInterestDate;
            custVendSettlement.CanBeReversed        = _canBeReversed;
            custVendSettlement.CashDiscAccount      = _custVendTransOpen.CashDiscAccount;
            if ( _canBeReversed && _utilizedCashDisc)
            {
                custVendSettlement.Dimension        = _cashDiscDimension;
            }

            custVendSettlement.TaxVoucher_RU         = _taxVoucher;
        }
        custVendSettlement.insert();
    }
    ttscommit;
    return custVendSettlement;
}
Есть подозрение, что clear() таблицы не успевает отработать до insert().
Подскажите, пожалуйста, как решить эту проблему. АХ 4sp2, MS SQL 2005