AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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
Теги
конфликт обновления, курсовая разница

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка в логе при установке клиента AX 2009 sao DAX: Администрирование 9 04.02.2010 11:56
Ошибка в формате числа. 36AC DAX: Программирование 7 19.10.2006 10:04
НДС с курсовых разниц Ann DAX: Функционал 7 26.10.2004 15:10
Отмена курсовых разниц AndSoft DAX: Функционал 11 17.08.2004 15:34
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:22.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.