Доброе время суток!
Возникла у меня в одном проекте из-за 1 копейки реальная проблема… Кажется, что такое копейка? Сегодня у нас и на гривну не много можно купить, а тут копейка! «К чему бы это он?», - спросите Вы. Объясню подробно.
В проекте, в разделе [Счета], используется двойное налогообложение продукта: Цена + НДС 20% + ННР 0,5% (или 0,1%). Попробуем математически рассчитать (округляем до второго знака после запятой):
Сумма с налогами: 300 грн
НДС 20%:
300*20/(100+20+0,5) = 49,79253112033195020746887966805
(49 грн 79 коп)
ННР 0,5%:
300*0,5/(100+20+0,5) = 1,2448132780082987551867219917012
(1 грн 24 коп)
Если мы воспользуемся стандартной функцией Math.Round() или System.Round() ( http://community.terrasoft.ua/node/1847 )
В поле ННР 0,5% увидим 1 грн 24 коп, что и стоило ожидать!
Но, внимание, если следовать расчетам бухгалтера (со ссылкой на 1С), то должно быть 1 грн 25 коп!!!
Вот эта одна копейка и испортила всю идиллию интересного проекта. Какая здесь логика?
1,2448 => 1,245 => 1,25
Прошу прощения, но тогда нужно начинать с бесконечности… А это, согласитесь, многовато.
Что бы угодить клиенту, пришлось наложить заплатку на расчет налогов:
М-да-а, вот такая история…
А у Вас бывали похожие казусы?
--
γνῶθι σεαυτόν
Так может ошибка в 1С :) Почему от точности 4 к точности 2 ножно идти через точность 3?
Тайна веков :) Ну, как говорится жираф большой, ему виднее :)
Вообще, отсутствие единого стандарта на округление - это извечная головная боль.
У всех свои алгоритмы, в итоге бывает очень сложно ввести приходную накладную, выписанную в другой системе.
При этом для бухгалтерии отклонение в 1 копейку - это свидетельство о возможном отклонение в миллион.
Копейка играет огромную роль в debt collection и составлении искового заявления. Если не сходятся суммы даже на копейку судья может отклонить дело по взысканию задолженности с неплательщика до предоставления "корректной информации"
Не знаю принципа расчета Вашей суммы в 1C и в бухгалтерии, почему получается итоговая сумма 1.25.
Предлагаю по своему опыту следующее решение проблемы - расчитывайте все налоги, а на последний налог отнесите сумму, равную разнице общей суммы налога и суммы уже расчитанных налогов. Недостающая копейка будет отнесена на последний налог.
Насколько мне известно в 1С бухгалтерии идет расчет сумм от цены без НДС. То есть на нее накручивается и НДС и налог на рекламу. Это соответствует методики выписки Налоговой накладной.
При попытке вести обратный расчет (от сумм с НДС) вполне может возникнуть данная проблема.
"Ковалишин Виталий aka samael" написал:1,2448 => 1,245 => 1,25
Что бы угодить клиенту, пришлось наложить заплатку на расчет налогов:
Math.round(100* Math.round( TaxAmount *1000)/1000) / 100
Это Вы созря. Могу почти гарантировать что 1С так не считает, разве что так написал какой-то безумный программист. А "Расчет налога на рекламу" как правило - это дописанные конфигурации.
Впрочем Вы сами можете посмотреть бизнесс-логику расчета в конфигурации 1С бухгалтерии. Она же есть открыта для просмотра.