Мультивалютный магазин на 1С-Битрикс — это не отдельный модуль, а грамотная связка модуля «Валюты», типов цен каталога и настроек вывода. Ниже разбираем, как хранить цены, пересчитывать их по курсу и давать покупателю выбор валюты, не ломая оформление заказа.
Как Битрикс работает с несколькими валютами
В 1С-Битрикс за валюты отвечает отдельный модуль currency, а цены товаров живут в модуле catalog. Ключевая идея: у каждой цены есть своя валюта, но в системе всегда существует одна базовая валюта — та, в которой ведётся учёт и к которой привязаны курсы остальных.
Есть два принципиально разных сценария «мультивалютности», и их важно не путать:
- Хранение цен в разных валютах — у товаров реально заведены цены в USD, EUR, RUB. Пересчёт между ними идёт по курсу.
- Отображение одной цены в разных валютах — цена хранится в одной валюте, а покупателю показывается пересчёт на лету по текущему курсу.
Чаще всего магазину нужен именно второй сценарий: учёт в рублях, а витрина умеет показать «эквивалент» в другой валюте. Первый сценарий оправдан, когда закупка и продажа идут в валюте контракта.
Базовая валюта и её роль
Базовая валюта задаётся в списке валют (Магазин → Настройки → Валюты) флагом «Базовая». Её курс всегда равен 1, и относительно неё Битрикс хранит курсы всех прочих валют.
Когда покупатель оформляет заказ, Битрикс фиксирует сумму в валюте заказа, но для внутренней аналитики пересчитывает её в базовую. Поэтому корректный курс — не косметика, а основа правильных цифр в отчётах.
Типы цен как основа мультивалютности
Цены товара в Битрикс задаются через типы цен (Магазин → Настройки → Типы цен): «Розница», «Опт», «Дилер» и т. д. У каждой цены товара указывается тип и валюта. Именно на уровне типов цен удобно разграничить валюты.
Типовая схема для B2B-магазина с валютной закупкой:
| Тип цены | Валюта | Назначение |
|---|---|---|
| Розница | RUB | Продажа частным клиентам |
| Опт (валютная) | USD | Цена контракта, привязана к закупке |
| Сайт | RUB | Итоговая цена витрины после пересчёта |
Если цена заведена в USD, а покупателю нужно показать рубли, Битрикс автоматически пересчитает её по курсу USD, заданному в модуле «Валюты». Никакого ручного труда: обновился курс — обновилась рублёвая цена на витрине.
Курсы и автообновление
Курс каждой валюты задаётся вручную в карточке валюты или подтягивается автоматически. В Битрикс встроен агент загрузки курсов ЦБ РФ — включается в настройках модуля «Валюты» и работает на агентах/cron.
- Проверьте, что агенты выполняются регулярно (лучше через
cron, а не «на хитах»), иначе курс застынет. - Задайте курс за единицу корректно: для валют вроде японской иены нередко используют номинал 100, и это надо учесть.
- Для валютной наценки закладывайте свой коэффициент, если продаёте не по «голому» курсу ЦБ.
Выбор валюты покупателем на витрине
Чтобы посетитель мог переключать валюту, в стандартном ядре нет готового «переключателя из коробки» для каталога — его собирают из штатных механизмов. Практичные варианты:
- Компонент вывода цен с указанием валюты. Компоненты каталога (
catalog.section,catalog.element) выводят цену в валюте типа цены; для «эквивалента» используют функции пересчёта. - Пересчёт через API. Метод
\Bitrix\Currency\CurrencyManagerиCCurrencyRates::ConvertCurrency($sum, $from, $to)переводят сумму между валютами по актуальному курсу. - Хранение выбора в сессии. Выбранную валюту кладут в сессию или cookie и применяют ко всем ценам в шаблоне.
Важно решить, влияет ли выбор валюты только на отображение, или на валюту заказа. Если покупатель платит в выбранной валюте, это нужно пробросить в оформление заказа и в платёжную систему.
Корзина, заказ и платёжные системы
Корзина и заказ в Битрикс оперируют одной валютой заказа. Смешать в одном заказе позиции в USD и EUR штатно нельзя — все позиции приводятся к валюте заказа по курсу на момент оформления.
Что проверить перед запуском:
- Валюта платёжной системы. Эквайринг обычно принимает рубли; если показываете цену в USD, на оплату всё равно уйдёт рублёвый эквивалент. Убедитесь, что сумма к оплате пересчитана корректно.
- Округление после пересчёта. Настройте правила округления для итоговой валюты, иначе в корзине появятся «некрасивые» дробные суммы.
- Фиксация курса. Курс на момент заказа сохраняется в заказе — при возврате или доработке заказа не пересчитывайте его задним числом по новому курсу.
Обмен с 1С и валютные цены
Если каталог и цены приходят из 1С по стандартному обмену (CommerceML), валюта цены тоже передаётся в выгрузке. Здесь чаще всего и возникают ошибки мультивалютного магазина.
USD, 840) должен совпадать с символьным кодом валюты в Битрикс. Иначе цены либо не загрузятся, либо встанут не в ту валюту.Практические правила стабильного обмена:
- Заведите в Битрикс все валюты, которые фигурируют в выгрузке 1С, с корректными символьными кодами.
- Сопоставьте типы цен 1С и Битрикс — валюта должна совпадать по обе стороны.
- Решите, кто «владеет» курсом: если курс ведётся в 1С, отключите автозагрузку ЦБ в Битрикс, чтобы не было конфликта.
Итог
Мультивалютный магазин на Битрикс — это дисциплина, а не отдельная кнопка: одна базовая валюта, чёткое разделение типов цен по валютам, аккуратный пересчёт по курсу и согласованность с 1С и платёжной системой. Ошибки почти всегда живут на стыках — в двойном пересчёте курса, в несовпадении кодов валют при обмене и в округлении итоговой суммы.
Если нужно собрать такую схему без сюрпризов в корзине и отчётах, мы в B2Bsite настраиваем валюты, типы цен и обмен с 1С как единый механизм — от базовой валюты до эквайринга. Это избавляет магазин от расхождений в цифрах и ручного пересчёта.
Частые вопросы
Можно ли в Битрикс продавать сразу в нескольких валютах?
Да, цены товаров можно заводить в разных валютах через типы цен, а витрине показывать эквивалент по курсу. Но один заказ всегда оформляется в одной валюте.
Что такое базовая валюта и зачем она нужна?
Это валюта учёта с курсом, равным единице, к которой привязаны курсы остальных валют. От неё зависят отчёты, скидки и обмен с 1С, поэтому менять её на работающем магазине нельзя.
Как показать покупателю цену сразу в его валюте?
Цена пересчитывается по текущему курсу функциями конвертации, а выбранная валюта хранится в сессии или cookie. Нужно решить заранее, влияет ли выбор только на отображение или и на валюту заказа.
Откуда Битрикс берёт курсы валют?
Курс задаётся вручную в карточке валюты или подгружается автоматически из ЦБ РФ встроенным агентом. Для стабильной работы автообновление лучше запускать по cron.
Можно ли в одном заказе смешать товары в USD и EUR?
Штатно нет: все позиции приводятся к единой валюте заказа по курсу на момент оформления. Смешанные валюты в рамках одного заказа не поддерживаются.
Почему после пересчёта в цене появляются странные копейки?
Это результат деления на курс без округления. Нужно настроить правила округления для итоговой валюты, чтобы суммы выглядели аккуратно.
Как валюты работают при обмене с 1С?
Валюта цены передаётся в выгрузке CommerceML, и её символьный код должен совпадать с кодом валюты в Битрикс. Иначе цены загрузятся не в ту валюту или не загрузятся вовсе.
Курс лучше вести в 1С или в Битрикс?
Выберите один источник истины. Если курс ведётся в 1С, автозагрузку ЦБ в Битрикс стоит отключить, чтобы избежать двойного пересчёта и расхождений.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.