Показать сообщение отдельно
Старый 27.02.2015, 17:47   #1  
Aquarius is offline
Aquarius
Участник
 
139 / 29 (1) +++
Регистрация: 08.02.2007
Адрес: Одесса
Сопоставление проводок по клиенту. Странная Ошибка
Уважаемые господа, добрый день,
У нас возникла следующая проблема.
Акс 2009. Sp 5.

При ручном (или автоматическом) сопоставлении проводок по клиенту в валюте рубль ( при основной валюте доллар) с разным курсом возникает ошибка:
"Обновление операции ED-AA01577 отменено во избежание избыточного сопоставления. Сопоставляемое сальдо поставщика или клиента не должно превышать суммы проводки при данной проводке."
Проводки по клиенту см приложение
Сначала успешно сопоставляются проводки ED-AA01577 и ED-AA01576 (с разными курсами валют) ,но при сопоставлении оставшейся открытой части проводки ED-AA01577 и ED-AA01578(с разными курсами валют) возникает вышеуказанное сообщение об ошибке
Обнаружили что в в классе CustVendSettle в методе calcSettleAmountCurForCredit
При обработке сопоставления открытых проводок ED-AA01577 и ED-AA01578 не выполняется условие, и именно из-за него возникает ошибка
if (custVendTransCredit.AmountMST //-0.15 для нашего случая
==
custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst) //-0.08+0+-0.08 для нашего случая

Пришли к выводу что для правильной работы нужно в условии" >= " вместо "=="
if (custVendTransCredit.AmountMST
>=
custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst)
Проверили как работает сопоставление на этом и других случаях.Вроде все отрабыватывает корректно.
Правильно ли сделано ли такое исправление? Есть ли случаи, когда важно было чтобы в данном условии был именно знак равенства?

protected AmountCur calcSettleAmountCurForCredit(AmountCur _settleAmountCurDebit)
{
AmountCur settleAmountCur;
AmountCur roundedSettleAmountCur;
AmountCur remainingAmount;
AmountMST settleAmountMst;
AmountMST roundedSettleAmountMst;
CurrencyExchHelper currencyHelper;
;
settleAmountCur = -(_settleAmountCurDebit / paymToInvoiceRate);
currencyHelper = CurrencyExchHelper::newCurrency(custVendTransCredit.company(), custVendTransCredit.CurrencyCode);
roundedSettleAmountCur = currencyHelper.roundAmount(settleAmountCur);
remainingAmount = custVendTransCredit.AmountCur - custVendTransCredit.SettleAmountCur - roundedSettleAmountCur;//remainingAmount =0.01 длянашегослучая
if (remainingAmount != 0)
{
// when not fully settled in transaction currency, check if it will be fully settled in mst
settleAmountMst = this.calcSettleAmountMstForCredit(settleAmountCur, false);
currencyHelper.parmCurrency(creditCompanyCurrency);
roundedSettleAmountMst = currencyHelper.roundAmount(settleAmountMst);
if (custVendTransCredit.AmountMST //-0.15 для нашего случая
==
custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst) //-0.08+0+-0.08 для нашего случая
{
// The remaining amount is converted to mst and then rounded, and if it is then equal to zero,
// adjust the settleAmountCur to be equal to the unsettled amount.
currencyHelper.parmCurrency(custVendTransCredit.CurrencyCode);
currencyHelper.parmExchRate(custVendTransCredit.exchRateCurToMst());
currencyHelper.parmIsTriangulated(UnknownNoYes::No);
remainingAmount = currencyHelper.calculateAmountCurToMst(remainingAmount, true);
if (remainingAmount == 0)
{
settleAmountCur = custVendTransCredit.AmountCur - custVendTransCredit.SettleAmountCur;
}
}
}

return settleAmountCur;
}
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 246
Размер:	22.0 Кб
ID:	9195  

Последний раз редактировалось Aquarius; 27.02.2015 в 17:49.