Наткнулся на эту проблему. При анализе определил следующее: в методе 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 (пока в тестовой базе).
Как считаете корректно ли такое исправление? Может кто по другому решил данную проблему.