Округление цен в 1С-Битрикс — это не одна галочка, а несколько независимых механизмов, которые легко перепутать. Одно округление живёт в настройках валюты и влияет только на отображение, другое применяется при расчёте цен по типам, третье приходит из 1С при обмене. Если их не согласовать, покупатель видит одну сумму на карточке, а в корзине или заказе — другую.
Где в Битрикс вообще есть округление
Прежде чем что-то настраивать, важно понимать, что за «округление цены» в 1С-Битрикс отвечают сразу несколько подсистем, и работают они на разных этапах.
- Округление в настройках валюты — параметр
DEC_POINT_DELIMITERи число знаков после запятой в формате валюты. Это визуальное округление при выводе цены на витрине. - Правила округления по типам цен — раздел
Магазин → Настройки → Цены → Правила округления. Здесь округляется сама величина цены при её расчёте и сохранении. - Округление в скидках и наценках — при расчёте итоговой цены после применения скидки модуль
catalogможет округлять результат по тем же правилам. - Округление на стороне 1С — цена может прийти уже округлённой из обмена
CommerceML, и Битрикс её не пересчитывает.
Округление в формате валюты (визуальное)
Самый простой уровень — количество знаков после запятой в настройках валюты. Откройте Магазин → Настройки → Валюты, выберите нужную валюту и посмотрите на поле Формат. Строка вида # означает вывод без копеек, #.## — с двумя знаками.
Ключевой момент: этот параметр управляет форматированием через функцию CurrencyFormat($price, $currency). Она математически округляет значение до заданного числа знаков только для показа. В базе данных, в таблице b_catalog_price, по-прежнему хранится исходная цена, например 1499.90, даже если на витрине вы видите 1500.
Отсюда типовой баг: в каталоге цена показана как 1500 ₽, а в корзине пересчёт по количеству даёт 1499.90 × 3 = 4499.70, и покупатель замечает расхождение. Если вам нужно, чтобы цена была ровной по-настоящему, форматом валюты этого не добиться — нужны правила округления.
Правила округления по типам цен
Настоящее округление величины цены задаётся в разделе Магазин → Настройки → Цены → Правила округления (в старых версиях — вкладка «Округление» в настройках модуля sale). Здесь вы создаёте правило для конкретного типа цены и валюты.
Правило состоит из двух параметров:
- Точность округления — до какого разряда округлять: до копеек, до рублей, до десятков или сотен. Например, точность
1округляет до целого рубля,10— до десятков. - Способ округления — математически (по правилу 0,5), всегда вверх или всегда вниз.
Округление применяется в момент, когда модуль каталога отдаёт цену: при выводе в каталоге, при добавлении в корзину и при формировании заказа. Важно, что оно распространяется на цену со скидкой — если товар стоит 1000 ₽ и на него действует скидка 7%, промежуточный результат 930 будет округлён по правилу выбранного типа цены.
Пример: округление розницы до рубля
Разберём типовую задачу: убрать копейки из розничных цен, чтобы витрина выглядела аккуратно, а суммы в корзине сходились.
- Перейдите в
Магазин → Настройки → Цены → Правила округления. - Нажмите Добавить правило, выберите тип цены
BASE(или ваш розничный) и валютуRUB. - Установите точность округления
1(до целого рубля). - Выберите способ — обычно математическое округление, чтобы цены не «уезжали» слишком сильно.
- Сохраните и сбросьте кэш каталога:
Настройки → Настройки продукта → Автокэшированиеили черезbitrix/admin/cache.php.
После этого товар с базовой ценой 1499.90 будет выводиться и попадать в заказ как 1500. Дополнительно приведите формат валюты к # без копеек, чтобы визуальное и фактическое округление совпадали.
Округление и обмен с 1С
Если каталог и цены приезжают из «1С:Управление торговлей» по протоколу CommerceML, помните: Битрикс сохраняет цену ровно такой, какой она пришла в XML. Правила округления в этом случае применяются уже поверх импортированного значения — при выводе и расчёте, а не при записи.
Это порождает две частые ситуации:
| Где округлять | Плюсы | Минусы |
|---|---|---|
| В 1С (до выгрузки) | Единая цена в учёте и на сайте, нет расхождений в отчётах | Нужна доработка в 1С, менеджеры видят округлённые суммы |
| В Битрикс (правила округления) | Гибкая настройка под витрину без правок в учётной системе | Цена в 1С и на сайте может отличаться, сверки усложняются |
Частые ошибки и как их избежать
Округление цен — благодатная почва для трудноуловимых багов, потому что расхождение в один рубль легко проходит мимо тестирования.
- Округление только в формате валюты. Витрина ровная, но корзина и заказ считают по «грязной» цене. Лечится добавлением правила округления.
- Забытый тип цены. Правило заведено для
BASE, а опт продаётся по типуOPTбез правила — оптовые цены с копейками. Проверьте все типы цен вМагазин → Настройки → Цены → Типы цен. - Двойное округление. Цена округлена в 1С и ещё раз правилом Битрикс с другим шагом — итог «пляшет». Выберите один источник истины.
- Не сброшен кэш. После изменения правил старые цены остаются в кэше комплексных компонентов и в HTML-кэше. Сбросьте кэш и, если включён, композитный кэш страниц.
- Округление до применения скидки. Проверьте порядок: сначала считается цена со скидкой, потом округление, а не наоборот — иначе итог в чеке разойдётся с ожиданием.
Как проверить, что округление работает
Не полагайтесь только на вид карточки товара — проверяйте цену на всех этапах покупки, потому что округление применяется в разных местах кода.
- Откройте карточку товара и запомните цену.
- Добавьте товар в корзину и сверьте цену за единицу и за несколько штук.
- Оформите тестовый заказ и посмотрите цену в
Магазин → Заказы— именно здесь фиксируется сумма для оплаты. - В базе выполните запрос к
b_catalog_priceдля этого товара, чтобы увидеть исходное хранимое значение.
Если все четыре значения согласованы (с поправкой на осознанное визуальное округление), настройка выполнена корректно. Расхождение между корзиной и заказом почти всегда означает пропущенное правило для одного из типов цен.
Итог
Правильное округление в 1С-Битрикс — это согласование трёх уровней: формата валюты (визуал), правил округления по типам цен (реальная величина) и источника цены из 1С (обмен). Начните с решения, где округлять — в учётной системе или на сайте, — заведите правила для всех типов цен и валют, сбросьте кэш и проверьте сумму на карточке, в корзине и в заказе.
Если магазин мультивалютный, работает с несколькими типами цен и обменом с 1С, ошибки в округлении складываются в заметные расхождения и споры с покупателями. Мы в B2Bsite настраиваем ценообразование и обмен с 1С так, чтобы цена была одинаковой в учёте, на витрине и в чеке — от правил округления до корректной синхронизации остатков и заказов.
Частые вопросы
В чём разница между округлением в формате валюты и правилами округления?
Формат валюты меняет только отображение цены на витрине, а в базе значение остаётся прежним. Правила округления меняют саму величину цены при расчёте, поэтому она попадает округлённой в корзину и заказ.
Почему цена в каталоге и в корзине отличается?
Чаще всего округление задано только в формате валюты, поэтому витрина показывает ровную сумму, а корзина считает по исходной цене с копейками. Нужно добавить правило округления для соответствующего типа цены.
Где в админке находятся правила округления?
В разделе Магазин → Настройки → Цены → Правила округления. В старых версиях округление настраивалось на отдельной вкладке в параметрах модуля торгового каталога.
Нужно ли заводить правило для каждого типа цены?
Да, правило привязано к паре «тип цены плюс валюта». Если у вас есть розница, опт и партнёрские цены, для каждого типа и каждой валюты нужно отдельное правило.
Как округление работает при обмене с 1С?
Битрикс сохраняет цену такой, какой она пришла в XML CommerceML, и не пересчитывает её при импорте. Правила округления применяются уже поверх этого значения при выводе и расчёте.
Округляется ли цена со скидкой?
Да, сначала рассчитывается цена с учётом скидки, а затем результат округляется по правилу выбранного типа цены. Важно проверить именно этот порядок, чтобы итог в чеке совпадал с ожидаемым.
Почему после настройки округления цены не изменились?
Скорее всего, не сброшен кэш каталога и страниц. После изменения правил очистите кэш комплексных компонентов и, если включён, композитный кэш.
Где лучше округлять — в 1С или в Битрикс?
Для розничной витрины удобнее правила Битрикс, они гибче и не требуют правок в учёте. Для опта и работы с НДС надёжнее округлять в 1С, чтобы цена и налоговая база оставались согласованными с бухгалтерией.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.