Показать сообщение отдельно
Старый 19.03.2010, 11:22   #9  
ena_ax is offline
ena_ax
Участник
 
254 / 46 (2) +++
Регистрация: 06.12.2006
Наткнулся на эту проблему. При анализе определил следующее: в методе recalcFutureRealizedExchAdj класса CustVendExchAdjustment_W
есть выборка
X++:
***************************************
while select  forupdate custVendSettlement
        where custVendSettlement.SettleAmountCur                    &&
              custVendSettlement.TransRecId == _custVendTrans.RecId &&
              custVendSettlement.TransDate > _postingDate           &&
              custVendSettlement.CanBeReversed
        join forupdate custVendSettlementOffset
            where custVendSettlementOffset.TransRecId  == custVendSettlement.OffsetRecId &&
                  custVendSettlementOffset.OffsetRecId == custVendSettlement.TransRecId  &&
                  custVendSettlementOffset.TransDate   == custVendSettlement.TransDate   &&
                  custVendSettlementOffset.CanBeReversed
{
*************************************************
}
    {
в моем понимании данный запрос всегда должен обрабатывать Одну строку (проверял на своих данных).
Но в некотрых случаях в недрах происходит добавление строки в таблицу сопоставлений и выборка идет по более чем одной строке. В результате получаем сообщение об ошибке, так как одна строка сопоставления Update несколько раз.
Сам Update происходит в методе reverseSettlement класса CustVendReversePosting.

X++:
public void reverseSettlement()
{
    // create reverse custVendSettlement for the original settled
    CustVendSettlement  reverseCustVendSettlement = custVendSettlement.data();
    ;
    reverseCustVendSettlement.CanBeReversed       = NoYes::No;
    reverseCustVendSettlement.SettleAmountCur     = - custVendSettlement.SettleAmountCur;
    reverseCustVendSettlement.SettleAmountMST     = - custVendSettlement.SettleAmountMST;
    reverseCustVendSettlement.UtilizedCashDisc    = - custVendSettlement.UtilizedCashDisc;
    reverseCustVendSettlement.ExchAdjustment      = - custVendSettlement.ExchAdjustment;
    if (isConfigurationkeyEnabled(configurationkeynum(ReverseSettlementDatePrinciple_RU)))
    {
        reverseCustVendSettlement.TransDate       = transactionDate;
    }
    custVendSettlement.CanBeReversed              = NoYes::No;
    reverseCustVendSettlement.insert();
    if (custVendSettlement.TransDate != transactionDate)
    {
        custVendSettlement.ReversedRecId_RU        = reverseCustVendSettlement.RecId;
        reverseCustVendSettlement.ReversedRecId_RU = custVendSettlement.RecId;
        reverseCustVendSettlement.ReverseTrans_RU  = NoYes::Yes;
        reverseCustVendSettlement.update();
    }
    [COLOR=red]custVendSettlement.update();[/COLOR]
[COLOR=red][/COLOR]}

Для исправление поставил firstonly (пока в тестовой базе).

Как считаете корректно ли такое исправление? Может кто по другому решил данную проблему.

Последний раз редактировалось ena_ax; 19.03.2010 в 11:33.