27.02.2015, 17:47 | #1 |
Участник
|
Сопоставление проводок по клиенту. Странная Ошибка
Уважаемые господа, добрый день,
У нас возникла следующая проблема. Акс 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; } Последний раз редактировалось Aquarius; 27.02.2015 в 17:49. |
|
27.02.2015, 18:34 | #2 |
NavAx
|
|
|
|
За это сообщение автора поблагодарили: Aquarius (1). |
02.03.2015, 11:28 | #3 |
Участник
|
Спасибо за ответ. Но мне кажется у нас другая ситуация.
поле "Максимально допустимое расхождение" у нас уже стоит 0. т.е. в соответствии с этой ссылкой у нас просто должна остаться открытая проводка на 0,01 копейку в валюте проводки ( рублях) Но у нас выдается ошибка:"Обновление операции ED-AA01577 отменено во избежание избыточного сопоставления. Сопоставляемое сальдо поставщика или клиента не должно превышать суммы проводки при данной проводке." Мы по возможности хотели бы избежать проводки по списанию копейки на системный счет. Я заметила, что в другом случае, если есть полностью открытые проводки -5,01 и 5,02 в рублях ( валюта компании доллар, курс проводок одинаковый), то они успешно сопоставляются между собой полностью: не остается открытой суммы 0,01 рубля нет никаких доп проводок по списанию 0,01 рубля на системный счет. |
|
02.03.2015, 18:51 | #4 |
Участник
|
Добрый день,
подскажите ,пожалуйста, как еще можно исправить мою ситуацию? Я попробовала выставить поле "Максимально допустимое расхождение" 0,01 в параметрах модуля Расчеты с клиентами,как посоветовали. восстановила условие if (custVendTransCredit.AmountMST == custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst) // в классе CustVendSettle в методе calcSettleAmountCurForCredit Для случая, описанного в сообщении 1 ничего не изменилось, все также выдается сообщение об ошибке "Обновление операции ED-AA01577 отменено во избежание избыточного сопоставления. Сопоставляемое сальдо поставщика или клиента не должно превышать суммы проводки при данной проводке." |
|
|
|