Добрый день.
При расчете курсовых разниц возникает такая ошибка: Невозможно отредактировать запись в Сопоставление по поставщику (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