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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.06.2011, 17:44   #1  
Aleks_K is offline
Aleks_K
MCTS
Сотрудник Innoware
MCBMSS
 
48 / 13 (1) ++
Регистрация: 06.11.2007
? Одна проводка в двух валютах
Уважаемые коллеги, возникла необходимость выполнять проводку одновременно в 2-х валютах - с банковского счета списывать национальную, а по поставщику закрывать иностранную (эквивалент по текущему курсу).

Это можно реализовать 2-мя строками журнала, но система не может откорреспондировать такую проводку. Вручную также откорреспондировать невозможно - "Некритическая ошибка корреспонденции: остались неоткорреспондированные проводки. Установлена неверная корреспонденция. Корреспонденция будет отменена."

Кто сталкивался с подобной проблемой? Напишите, пожалуйста, варианты решения.

Спасибо
Старый 15.06.2011, 17:55   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Aleks_K Посмотреть сообщение
Напишите, пожалуйста, варианты решения.
прогать
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 23.06.2011 в 09:25. Причина: добавил ссылку на проект
За это сообщение автора поблагодарили: Aleks_K (1).
Старый 15.06.2011, 18:07   #3  
Aleks_K is offline
Aleks_K
MCTS
Сотрудник Innoware
MCBMSS
 
48 / 13 (1) ++
Регистрация: 06.11.2007
Цитата:
Сообщение от mazzy Посмотреть сообщение
прогать
А хоть в какую степь (класс ) идти, часом не подскажете?
Старый 16.06.2011, 08:16   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
не помню уже. вроде все в тот же LedgerVoucher

как искать источник ошибки
http://axapta.mazzy.ru/lib/exploreerror/

или так
http://axapta.mazzy.ru/lib/xref/#060
__________________
полезное на axForum, github, vk, coub.
Старый 16.06.2011, 09:21   #5  
wef is offline
wef
Наблюдатель
Самостоятельные клиенты AX
 
14 / 15 (1) ++
Регистрация: 24.01.2005
Адрес: Москва
Цитата:
Сообщение от Aleks_K Посмотреть сообщение
Уважаемые коллеги, возникла необходимость выполнять проводку одновременно в 2-х валютах - с банковского счета списывать национальную, а по поставщику закрывать иностранную (эквивалент по текущему курсу).

...
Спасибо
А нельзя сделать двумя проводками?
С банковского счета на промежуточный в одной валюте, а с промежуточного на поставщика в другой?
__________________
Ax 3.0 SP3
Старый 16.06.2011, 10:18   #6  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
А что это за операция с финансовой точки зрения?
Исходя из описания в топике это обычные расчеты в УЕ. При платеже будет закрытие задолженности перед поставщиком в рублях, а в момент сопоставления закроется сумма в валюте с начислениями курсовых.
Или описание в топике не полное и это что-то другое?
Старый 20.06.2011, 14:47   #7  
Mabo is offline
Mabo
Участник
 
10 / 11 (1) +
Регистрация: 24.04.2009
Aleks_k
вы не упомянули еще о паре возникших с этой ситуацией проблем))

При совершении этой операции, еще бывают случаи отведения курсовой разницы

Операция возникает, когда при совершении банковской операции, один из банков автоматически выполнят перевод из одной валюты в другую.

для решения, мы использовали промежуточного поставщика "конвертация" с профилем разноски на 57 счете (денежные средства в пути). и далее как и прочие операции конвертации.

Во время импорта банковской выписки проводка разносится на поставщика конвертация, а уже с него бухгалтера растаскивают операции в нужной валюте

мое мнение: Корреспондирование разновалютных проводок ни к чему хорошему привести не может.
Старый 27.03.2012, 13:24   #8  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Вдруг кому интересно - проблему победили (еще тогда, все никак руки не доходили написать).
Насколько правильно вообще использовать такие проводки и степень полезности такого функционала оставим за кадром.

Проблема, как и можно было догадаться - в классах LedgerBond*
Есть такая табличка, TmpLedgerBondWorkTable_RU, которая собирает информацию о всех проводках к корреспонденции.
Так вот у нее есть поля сумм для дебета и кредита в валюте. Т.е. корреспонденция в разных валютах предполагалась изначально. Но по какой-то причине в классе LedgerBondServer_RU в методе splitTrans об этом забыли.

В результате внутренний метод doSplit содержит строку
X++:
    amountCur = resSign * abs(tmpBond.AmountCurDebit);
т.е. на кредитовую валютную сумму просто забили

Перепишем метод следующим образом
X++:
// SOI -->
/*
void doSplit
*/
void doSplit(DebCredUnknown_RU _direction = DebCredUnknown_RU::Unknown)
// SOI <--
{
    // ... // 

    // SOI -->
    /*
    amountCur = resSign * abs(tmpBond.AmountCurDebit);
    */
    switch(_direction)
    {
        case DebCredUnknown_RU::Credit:
            amountCur = resSign * abs(tmpBond.AmountCurCredit);
            break;
        case DebCredUnknown_RU::Debit:
        default:
            amountCur = resSign * abs(tmpBond.AmountCurDebit);                    
    }
   // SOI <--

    // ... //
}
Ну и везде по методу splitTrans добавляем передачу соответствующего параметра (4 вызова - по 2 на дебет и кредит).
Это решает проблему подсчета сумм корреспонденции при проверке.

Далее, в том же методе splitTrans производим замену
X++:
    // SOI -->
    /*
     _ledgerTrans.calcCrediting();
    */
    _ledgerTrans.calcCreditingBond();
    // SOI <--
// SOI <--
где
X++:
public void calcCreditingBond()
{
    Amount tmpAmount = this.AmountCur ? thisAmountcur : 
                                                   this.AmountMST ? this.AmountMST :
                                                   this.AmountMSTSecond;
    ;
    
    this.Crediting = (tmpAmount < 0);
}
Использование тут стандартного метода определения кредитования, мягко говоря, непонятно. Нам при корреспонденции нужно знать реальный знак операции, а не была ли это прямая или обратная проводка.
Это исправление исключает проблему нескорреспондированных операций (до этого были операции, которые из-за галки "коррекция" оставались на одной стороне).

И, наконец, ручная корреспонденция.
Точно так же - забыли про корреспонденцию в разных валютах.
Перед корреспонденцией и непосредственно после нее идет суммирование дебитовых и кредитовых сумм корреспондируемых проводок во всех валютах (! опять-таки, предполагалась корреспонденция в разных валютах). Это происходит для контроля корректности (что сальдо операции до и после не изменилось).

Подсчет сумм для контроля в случае одной валюты даст 0 UAH (дебет = кредит). И сколько бы раз мы его не запускали, будет 0 (при условии если в самом деле суммы совпадают, конечно).
В случае с разными валютами, получаем -200 UAH, +20 EUR. После непосредственно корреспонденции проверка запускается еще раз (на той же мапе) и получаем +200 UAH, -10 EUR, что в сумме дает те же нули.

А вот ручная корреспонденция запускает проверку 3 раза . До, после корреспонденции. И еще раз явно - при загрузке проводок в форму корреспонденции. Зачем - неясно, но это порождает ошибку расхождения сумм. Убираем.
LedgerBondServerManual_RU.loadUnbondedTrans
X++:
    this.insTransList(originalTransList, ledgerTrans);
    // SOI -->
    /*
    this.addCheckBalance(ledgerTrans);
    */
    // SOI <--
В результате ошибок нет. Все корреспондируется, все счастливы.
__________________
If it ain't broke, take it apart and find out why (с)
За это сообщение автора поблагодарили: mnt_dx (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Одна открытая транзакция - одна запись в журнале DenisR DAX: Программирование 4 09.03.2017 14:27
Бух проводка по складскому журналу Eldar9x DAX: Функционал 5 12.04.2010 12:31
Сопоставление в разных валютах Blondinka_N DAX: Функционал 2 21.11.2009 09:04
Корректирующая проводка Roman777 DAX: Программирование 10 12.04.2006 07:25
Продажа ОС - проводка по себестоимости RBA DAX: Функционал 2 17.11.2005 22:16

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:41.