![]() |
#1 |
Участник
|
Валютная проводка закрывается из-за полного сопоставления рублевой суммы?
Добрый день всем.
Предисловие... Ax 2009. Основная валюта - рубли. Есть накладная на 177 933,53 евро, которая была зачтена с несколькими авансами на 158 241,61 евро. Из-за разницы курсов получилось что в рублях накладная из 10 899 656,45 рублей (AmountCurMST) зачтена на 10 839 581,93 (SettleAmountCurMST). Сумма курсовой разницы и реализованной курсовой разницы одинаковая 1 146 191,45 (ExchAdjustment и CustExchAdjustmentRealized). Теперь сопоставляем открытые проводки, где одна из проводок авансовый платеж на 14 558,39 евро и описанную выше накладную. Казалось бы, по накладной должна остаться открытая сумма в 5 133,53 евро... Но в методе CustVendSettle.calcSettleAmountCurForDebit() срабатывает кусок Код: else if (abs(custVendTransDebit.SettleAmountMST + custVendTransDebit.ExchAdjustmentRealized + roundedSettleAmountMst) > abs(custVendTransDebit.AmountMST)) { settleMSTDiffDebit = abs(custVendTransDebit.AmountMST) - abs(custVendTransDebit.SettleAmountMST + custVendTransDebit.ExchAdjustmentRealized + roundedSettleAmountMst); settleAmountCur = custVendTransDebit.AmountCur - custVendTransDebit.SettleAmountCur; } Как этот кусок кода объяснить логически? Клиент заплатил нам 20 тысяч евро, а мы ему сделали работ на 15 и сказали, что "извините, курс поменялся, достатошно"? ![]() |
|
![]() |
#2 |
Участник
|
У нас на стандарте 2012 код выглядит так:
if (custVendTransDebit.AmountMST == custVendTransDebit.SettleAmountMST + roundedSettleAmountMst - custVendTransDebit.ExchAdjustmentRealized - realizedExchAdjAmount) Его смысл в том, как я понимаю, что хотя есть что сопоставлять в валюте, не закрылась ли проводка в основной валюте. Наверное что то подобное рассматривалось и у Вас, но у вас стоит знак больше, то есть а что если сумма уже сопоставленного в MST больше исходной суммы в MST, то есть проводка бы закрыта и даже более того. |
|
![]() |
#3 |
Участник
|
Если у вас приложение давно не обновлялось, то я бы посмотрел как этот код выглядит сейчас, а если обновлялось то наоборот, что было изначально. Может быть не совсем правильно учитывать курсовую для определения что проводка полностью закрыта, или правильно, только для одного сценария(например копеек каких нибудь, или суммовой) но неправильно если проводки в одной валюте.
|
|
![]() |
#4 |
Участник
|
целиком этот if выглядит у нас так
Код: if (custVendTransDebit.AmountMST == custVendTransDebit.SettleAmountMST + custVendTransDebit.ExchAdjustmentRealized + roundedSettleAmountMst) { // 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(custVendTransDebit.CurrencyCode); currencyHelper.parmExchRate(custVendTransDebit.exchRateCurToMst()); currencyHelper.parmIsTriangulated(UnknownNoYes::No); remainingAmount = currencyHelper.calculateAmountCurToMst(remainingAmount, true); if (remainingAmount == 0) { settleAmountCur = custVendTransDebit.AmountCur - custVendTransDebit.SettleAmountCur; } } else if (abs(custVendTransDebit.SettleAmountMST + custVendTransDebit.ExchAdjustmentRealized + roundedSettleAmountMst) > abs(custVendTransDebit.AmountMST)) { settleMSTDiffDebit = abs(custVendTransDebit.AmountMST) - abs(custVendTransDebit.SettleAmountMST + custVendTransDebit.ExchAdjustmentRealized + roundedSettleAmountMst); settleAmountCur = custVendTransDebit.AmountCur - custVendTransDebit.SettleAmountCur; } ![]() ![]() |
|
![]() |
#5 |
Участник
|
Предположу что этот код для случая когда валюты проводок отличаются, например когда накладную в долларах оплачивают рублями. Поскольку если валюты одинаковые, то, наверное, очевидно
![]() Ещё - этот if if (remainingAmount == 0) { settleAmountCur = custVendTransDebit.AmountCur - custVendTransDebit.SettleAmountCur; } отработает только тогда когда валюта компании больше Cur, например MST = USD, Cur = RUB. Поскольку он отрабатывает только тогда когда remainingCur != 0, а remainingMST = 0. Либо ещё сценарий что в результате каких то округлений, сопоставленная сумма получилась больше исходной суммы проводки.Тогда корректируется и сумма сопоставления в MST и в Cur. Последний раз редактировалось VORP; 07.03.2017 в 12:40. |
|
![]() |
#6 |
Участник
|
да, наверно так и есть. странно, что эту проблему не исправили до сих пор. я думал в 2012 может иначе
|
|
![]() |
#7 |
Участник
|
Может и исправили. Может даже для 2009 исправили, смотреть надо.
|
|
|
|