Здравствуйте уважаемые форумчане.
У меня проблема с округлением в корзине для товаров со скидкой.
Предположим в корзине есть товар с ценой 1,50 и скидкой 5% (1,50 - 5% = 1,425)
Что делает Битрикс - он просто обрезает (не округляет) до двух знаков после запятой, т.е. 1,425 = 1,42 (а не 1,43 как это будет математически правильно), но не в этом дело. Если бы все крутилось только на сайте, то проблем бы не было, но у меня связка с 1С, а в 1С скидки на товар уже расчитываются на сумму строки. Например я хочу заказать 100 шт товара из примера выше, получаем:
- расчеты в Битриксе : 1,50 - 5% = 1,42 * 100 = 142
- расчеты в 1С : 1,50 * 100 = 150 - 5% = 142,5
Погрешность небольшая (всего 50 копеек украинских, для России это 2 рубля), но если заказать 1000, 10000 и т.д. то погрешность уже большая.
Проблему можно решить увеличив разрядность расчетов в Битриксе, ну например до 5 знаков.
- тогда расчеты в Битриксе : 1,50 - 5% = 1,42500 * 100 = 142,50 (с 1С все будет совпадать)
Увеличить разрядность для вывода в шаблоны труда не составило. Для этого правим ядро Битрикса в двух файлах (то что править ядро это плохо - знаю, но мне обновление не грозит, поэтому готов пойти на это)
файл 1: bitrix\modules\sale\include.php строка Define("SALE_VALUE_PRECISION", 2); меняем "2" на "5"
файл 2: bitrix\modules\sale\catalog.php строка Define("CATALOG_VALUE_PRECISION", 5); меняем "2" на "5"
Ну и в настройках валюты выставить "Количество десятичных знаков" с вашего значения на "5"
Теперь в корзине все выглядит как надо (для товара из примера цена = 1,42500), но почему-то в базе для этого товара все-равно хранится значение "1,42", т.е. с двумя знаками после запятой, поэтому в поле "сумма" в корзине будет показываться неправильное значение.
Вопрос: где еще выставить в Битриксе разрядность чтобы в базе цены участвовали тоже с пятью знаками после запятой?
У меня проблема с округлением в корзине для товаров со скидкой.
Предположим в корзине есть товар с ценой 1,50 и скидкой 5% (1,50 - 5% = 1,425)
Что делает Битрикс - он просто обрезает (не округляет) до двух знаков после запятой, т.е. 1,425 = 1,42 (а не 1,43 как это будет математически правильно), но не в этом дело. Если бы все крутилось только на сайте, то проблем бы не было, но у меня связка с 1С, а в 1С скидки на товар уже расчитываются на сумму строки. Например я хочу заказать 100 шт товара из примера выше, получаем:
- расчеты в Битриксе : 1,50 - 5% = 1,42 * 100 = 142
- расчеты в 1С : 1,50 * 100 = 150 - 5% = 142,5
Погрешность небольшая (всего 50 копеек украинских, для России это 2 рубля), но если заказать 1000, 10000 и т.д. то погрешность уже большая.
Проблему можно решить увеличив разрядность расчетов в Битриксе, ну например до 5 знаков.
- тогда расчеты в Битриксе : 1,50 - 5% = 1,42500 * 100 = 142,50 (с 1С все будет совпадать)
Увеличить разрядность для вывода в шаблоны труда не составило. Для этого правим ядро Битрикса в двух файлах (то что править ядро это плохо - знаю, но мне обновление не грозит, поэтому готов пойти на это)
файл 1: bitrix\modules\sale\include.php строка Define("SALE_VALUE_PRECISION", 2); меняем "2" на "5"
файл 2: bitrix\modules\sale\catalog.php строка Define("CATALOG_VALUE_PRECISION", 5); меняем "2" на "5"
Ну и в настройках валюты выставить "Количество десятичных знаков" с вашего значения на "5"
Теперь в корзине все выглядит как надо (для товара из примера цена = 1,42500), но почему-то в базе для этого товара все-равно хранится значение "1,42", т.е. с двумя знаками после запятой, поэтому в поле "сумма" в корзине будет показываться неправильное значение.
Вопрос: где еще выставить в Битриксе разрядность чтобы в базе цены участвовали тоже с пятью знаками после запятой?