• Sign in to follow this  
    Followers 0

    Округление НДС в Предложениях/Счетах в 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  
    Followers 0


    User Feedback


    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