Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
  • Sign in to follow this  

    Округление НДС в Предложениях/Счетах в SuiteCRM: проблема одной копейки


    SpravkaCRM.ru

    Столкнулся с некорректным вычислением НДС и суммы без и с НДС в Счетах в SuiteCRM. Когда для конечного клиента по той или иной позиции показывают цену без НДС, то все считается превосходно: 40 000 + 18% = 47 200

    А вот в случаях, когда озвучиваемая клиенту цена уже содержит в себе НДС, то при составлении Счетов по таким позициям возможны некоторые математические ошибки на одну копейку:

    Допустим конечная цена для клиента на позицию = 40 000

    тогда стоимость по прайсу: 40 000 / 1.18 = 33 898.305

    но дело в том, что в Счетах при редактировании позиций можно указывать цифры только с двумя знаками после запятой. А пятерка на конце цифры 33 898.305 дает некоторую неопределенность в округлении - толи вверх, толи в низ. Из-за этого происходит нарушение расчетов в функции calculateLine в файле modules/AOS_Products_Quotes/line_items.js при вычислении размера налога.

    Если в поле "Стоимость по прайсу" ввести значение 33 898.305, то все будет подсчитано корректно. НО! три знака после запятой не сохранится! Сохранится только два! А это значит, что при последующем редактировании в это поле будет подставлено значение 33 898.30. а это приведет к тому, что конечная цена с НДС будет не 40 000 а 39,999.99

    Если же в поле ввести 33,898.31, то это тоже даст погрешность в одну копейку: 

    5680edf772944_2015-12-2811-08-10SuiteCRM

    Решением этой проблемы является округление "вверх" при расчете суммы налога:

    Найдите в функции calculateLine строки:

    var vat = unformatNumber(document.getElementById(key + 'vat' + ln).value,',','.');
    
    var productTotalPrice = productQty * productUnitPrice;
    
    var totalvat=(productTotalPrice * vat) /100;

     

    и добавьте к ним еще одну строчку, чтобы получилось вот так:

    var vat = unformatNumber(document.getElementById(key + 'vat' + ln).value,',','.');
    
    var productTotalPrice = productQty * productUnitPrice;
    
    var totalvat=(productTotalPrice * vat) /100;
    totalvat = Math.ceil(totalvat*100)/100;

    Тем самым мы строкой totalvat = Math.ceil(totalvat*100)/100; приводим промежуточное значение налога к двум знакам после запятой с округлением "вверх". В итоге НДС будет рассчитан правильно:

    5680eecf96758_2015-12-2811-11-49SuiteCRM

    Фикс бага проверялся на SuiteCRM 7.3.2, но, думаю будет актуален и для более ранних и более поздних версий SuiteCRM. Так же баг наблюдается во всех модулях SuiteCRM, использующих набор продуктов при помощи модуля AOS_Products_Quotes: Счета, Предложения

    Edited by SpravkaCRM.ru

    Sign in to follow this  


    User Feedback

    Recommended Comments

    There are no comments to display.



    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

×