15.06.2011, 17:44 | #1 |
MCTS
|
Одна проводка в двух валютах
Уважаемые коллеги, возникла необходимость выполнять проводку одновременно в 2-х валютах - с банковского счета списывать национальную, а по поставщику закрывать иностранную (эквивалент по текущему курсу).
Это можно реализовать 2-мя строками журнала, но система не может откорреспондировать такую проводку. Вручную также откорреспондировать невозможно - "Некритическая ошибка корреспонденции: остались неоткорреспондированные проводки. Установлена неверная корреспонденция. Корреспонденция будет отменена." Кто сталкивался с подобной проблемой? Напишите, пожалуйста, варианты решения. Спасибо |
|
15.06.2011, 17:55 | #2 |
Участник
|
Последний раз редактировалось mazzy; 23.06.2011 в 09:25. Причина: добавил ссылку на проект |
|
|
За это сообщение автора поблагодарили: Aleks_K (1). |
15.06.2011, 18:07 | #3 |
MCTS
|
|
|
16.06.2011, 08:16 | #4 |
Участник
|
не помню уже. вроде все в тот же LedgerVoucher
как искать источник ошибки http://axapta.mazzy.ru/lib/exploreerror/ или так http://axapta.mazzy.ru/lib/xref/#060 |
|
16.06.2011, 09:21 | #5 |
Наблюдатель
|
Цитата:
С банковского счета на промежуточный в одной валюте, а с промежуточного на поставщика в другой?
__________________
Ax 3.0 SP3 |
|
16.06.2011, 10:18 | #6 |
Участник
|
А что это за операция с финансовой точки зрения?
Исходя из описания в топике это обычные расчеты в УЕ. При платеже будет закрытие задолженности перед поставщиком в рублях, а в момент сопоставления закроется сумма в валюте с начислениями курсовых. Или описание в топике не полное и это что-то другое? |
|
20.06.2011, 14:47 | #7 |
Участник
|
Aleks_k
вы не упомянули еще о паре возникших с этой ситуацией проблем)) При совершении этой операции, еще бывают случаи отведения курсовой разницы Операция возникает, когда при совершении банковской операции, один из банков автоматически выполнят перевод из одной валюты в другую. для решения, мы использовали промежуточного поставщика "конвертация" с профилем разноски на 57 счете (денежные средства в пути). и далее как и прочие операции конвертации. Во время импорта банковской выписки проводка разносится на поставщика конвертация, а уже с него бухгалтера растаскивают операции в нужной валюте мое мнение: Корреспондирование разновалютных проводок ни к чему хорошему привести не может. |
|
27.03.2012, 13:24 | #8 |
Участник
|
Вдруг кому интересно - проблему победили (еще тогда, все никак руки не доходили написать).
Насколько правильно вообще использовать такие проводки и степень полезности такого функционала оставим за кадром. Проблема, как и можно было догадаться - в классах 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 производим замену 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). |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|