![]() |
#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. |
|