14.06.2011, 12:56 | #1 |
Участник
|
Фиксированный курс в накладной по закупке и сумма налога
DAX2009 SP1 RU6
Закупка в валюте. При разноске накладной по закупке задаю фиксированный курс, обрабатываю, вываливаются ошибки про несбалансированный документ ГК, анализ показывает, что сумма НДС в рублях пересчитана не по фиксированному, а по текущему на дату курсу. Все остальные суммы (по 10-ке и 60-му) пересчитаны верно по фиксированному курсу. Кто-нибудь сталкивался с этим? Как заставить систему пересчитывать сумму НДС также по фикс. курсу? |
|
|
За это сообщение автора поблагодарили: Logger (3). |
14.06.2011, 14:01 | #2 |
Участник
|
Это оказывается не всегда происходит, повторить сходу не получилось, будем разбираться.
|
|
14.06.2011, 14:35 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Bega (3). |
14.06.2011, 16:38 | #4 |
Участник
|
Вроде разобрался. В методе TaxPurch::calc() где идет расчет суммы налога, происходит следующее:
1. Рассчитываются суммы налога. 2. Если это валютная накладная, вызывается adjustAmount, где сумма в рублях рассчитывается по фиксированному курсу. 3. Выясняется, сходится ли формула Сумма без НДС + Сумма НДС = Сумма с НДС. В моем случае накладная включает НДС и получается разница в 1 копейку в валюте. Система запускает коррекцию сумм в валюте и при этом пересчитывает сумму в рублях не по фиксированному курсу, а по текущему (метод adjustPennyDiff). X++: if (amountsInclTaxExist) { while select sum(SourceTaxAmountCur) from taxWorkTrans group by SourceRecId where taxWorkTrans.SourceTableId == purchLineTableId && taxWorkTrans.TaxDirection != TaxDirection::UseTax && taxWorkTrans.TaxOrigin != TaxOrigin::TaxReversed { amountInclTax.insert(taxWorkTrans.SourceRecId, sourceCurrency.amount_Instance(amountInclTax.lookup(taxWorkTrans.SourceRecId))); if (amountInclTax.lookup(taxWorkTrans.SourceRecId) && amountExclTax.lookup(taxWorkTrans.SourceRecId) + taxWorkTrans.SourceTaxAmountCur != amountInclTax.lookup(taxWorkTrans.SourceRecId)) { counterMax++; adjustRecId[counterMax] = taxWorkTrans.SourceRecId; pennyDiff[counterMax] = amountExclTax.lookup(taxWorkTrans.SourceRecId) + taxWorkTrans.SourceTaxAmountCur - amountInclTax.lookup(taxWorkTrans.SourceRecId); } } if (counterMax) { for (counter = 1; counter <= counterMax; counter++) this.adjustPennyDiff(pennyDiff[counter], adjustRecId[counter]); } } X++: if (taxCalculateTotal) { if (purchFormLetter.exchRate(taxDate) != Currency::exchRate(sourceCurrencyCode, taxDate) || purchFormLetter.exchRateSecondary(taxDate) != Currency::exchRateSecond(sourceCurrencyCode, taxDate) || purchFormLetter.triangulation(taxDate) != Currency::triangulation(sourceCurrencyCode, taxDate)) { this.adjustAmount(purchFormLetter.exchRate(taxDate),purchFormLetter.exchRateSecondary(taxDate)); } this.adjustTaxInCostPrice(0); } РЕШЕНИЕ мое такое: нужно в вышеприведенном коде закоментировать строку if (taxCalculateTotal): X++: //TODO //if (taxCalculateTotal) { if (purchFormLetter.exchRate(taxDate) != Currency::exchRate(sourceCurrencyCode, taxDate) || purchFormLetter.exchRateSecondary(taxDate) != Currency::exchRateSecond(sourceCurrencyCode, taxDate) || purchFormLetter.triangulation(taxDate) != Currency::triangulation(sourceCurrencyCode, taxDate)) { this.adjustAmount(purchFormLetter.exchRate(taxDate),purchFormLetter.exchRateSecondary(taxDate)); } this.adjustTaxInCostPrice(0); } Последний раз редактировалось Bega; 14.06.2011 в 16:41. |
|
30.06.2011, 12:02 | #5 |
Участник
|
Посмотрите, настроены ли у вас системные счета, на которые относятся ошибки округлений.
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг |
|