AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.03.2017, 12:47   #1  
AK9 is offline
AK9
Участник
 
38 / 10 (1) +
Регистрация: 02.06.2005
Адрес: Томск
Валютная проводка закрывается из-за полного сопоставления рублевой суммы?
Добрый день всем.
Предисловие... 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;
        }
в итоге накладная закрывается полностью и в последнем сопоставлении сумма сопоставления ставится 19 691,92 евро.
Как этот кусок кода объяснить логически? Клиент заплатил нам 20 тысяч евро, а мы ему сделали работ на 15 и сказали, что "извините, курс поменялся, достатошно"?
Старый 07.03.2017, 10:44   #2  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
У нас на стандарте 2012 код выглядит так:
if (custVendTransDebit.AmountMST ==
custVendTransDebit.SettleAmountMST + roundedSettleAmountMst - custVendTransDebit.ExchAdjustmentRealized - realizedExchAdjAmount)

Его смысл в том, как я понимаю, что хотя есть что сопоставлять в валюте, не закрылась ли проводка в основной валюте. Наверное что то подобное рассматривалось и у Вас, но у вас стоит знак больше, то есть а что если сумма уже сопоставленного в MST больше исходной суммы в MST, то есть проводка бы закрыта и даже более того.
Старый 07.03.2017, 10:55   #3  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Если у вас приложение давно не обновлялось, то я бы посмотрел как этот код выглядит сейчас, а если обновлялось то наоборот, что было изначально. Может быть не совсем правильно учитывать курсовую для определения что проводка полностью закрыта, или правильно, только для одного сценария(например копеек каких нибудь, или суммовой) но неправильно если проводки в одной валюте.
Старый 07.03.2017, 11:25   #4  
AK9 is offline
AK9
Участник
 
38 / 10 (1) +
Регистрация: 02.06.2005
Адрес: Томск
целиком этот 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;
        }
общий смысл я примерно таким же образом понимаю, но почему это так - непонятно раньше такая ситуация не появлялась, похоже, потому что не было такого снижения курса евро. ну ок, курс евро снизился и получается в рублях, как бы правильнее сказать "перезачет", но в евро то накладная почему должна автоматом сопоставиться полностью? загадошно...
Старый 07.03.2017, 12:33   #5  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Предположу что этот код для случая когда валюты проводок отличаются, например когда накладную в долларах оплачивают рублями. Поскольку если валюты одинаковые, то, наверное, очевидно что оплаченная часть(сумма сопоставления в валюте) это сколько таки заплатили.
Ещё - этот 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.
Старый 07.03.2017, 12:41   #6  
AK9 is offline
AK9
Участник
 
38 / 10 (1) +
Регистрация: 02.06.2005
Адрес: Томск
да, наверно так и есть. странно, что эту проблему не исправили до сих пор. я думал в 2012 может иначе
Старый 07.03.2017, 14:00   #7  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Может и исправили. Может даже для 2009 исправили, смотреть надо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Неверная сумма в проводке по отмене сопоставления с предоплатой АХ2009 ksenia DAX: Функционал 5 29.09.2016 17:33
Корректировка рублевой суммы накладной по заказу в валюте Serge_DD DAX: Функционал 9 13.03.2012 11:45
Ошибка при сопост-ии - "Проводка уже отмечена для сопоставления!" bm DAX: Функционал 35 08.07.2010 15:23
Валютная переоценка ОС CaliforniA DAX: Функционал 0 22.05.2007 18:29
Откуда проводка 60опл - 60аванс без суммы во вторичной валюте Arahnid DAX: Функционал 4 14.01.2006 16:16

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:48.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.