Настройка валют и курсов в интернет-магазине 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка валют и курсов в интернет-магазине 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка валют и курсов в интернет-магазине 1С-Битрикс

Модуль currency в 1С-Битрикс отвечает за хранение валют, их курсов и правил форматирования. Без корректной настройки валют невозможна работа каталога, корзины и отчётов — система просто не сможет привести цены к единому знаменателю. Разберём устройство валютной подсистемы, автоматическое обновление курсов и особенности мультивалютного каталога.

Структура хранения валют

Все валюты регистрируются в таблице b_catalog_currency. Каждая запись содержит трёхсимвольный ISO-код (RUB, USD, EUR), сортировку и дату создания. Параметры форматирования — разделители, количество знаков после запятой, шаблон вывода — хранятся отдельно в b_catalog_currency_lang с привязкой к языку сайта. Это позволяет показывать «$100.00» англоязычным пользователям и «100,00 USD» — русскоязычным.

Курсы фиксируются в b_catalog_currency_rate. Каждый курс привязан к паре «валюта → базовая валюта» и дате. Битрикс при конвертации берёт ближайший по дате курс, поэтому важно, чтобы записи обновлялись регулярно.

Базовая валюта задаётся в настройках модуля currency. Все внутренние расчёты — скидки, наценки, отчёты — ведутся именно в ней. Менять базовую валюту на работающем магазине без пересчёта цен — прямой путь к хаосу в заказах.

Автоматическое обновление курсов

Ручное обновление курсов допустимо для магазинов с фиксированными ценами в одной валюте. Во всех остальных случаях нужен агент.

Битрикс из коробки умеет забирать курсы из ЦБ РФ (cbr.ru) и Европейского центрального банка (ECB). Настройка выполняется в разделе Валюты → Обновление курсов. Агент \Bitrix\Currency\CurrencyManager::updateCurrencyRates запускается по расписанию через систему агентов.

Механика работы агента:

  1. Агент обращается к выбранному провайдеру (ЦБ РФ или ECB) по HTTP.
  2. Парсит XML-ответ, извлекая курсы нужных валют.
  3. Записывает новые значения в b_catalog_currency_rate с текущей датой.
  4. Если запрос не удался — курс не обновляется, остаётся предыдущее значение.

Типичные проблемы:

  • Агент не запускается — проверяйте cron для cron_events.php и таблицу b_agent. Без cron агенты выполняются только при хитах, и на малопосещаемых сайтах курсы могут не обновиться сутками.
  • Расхождение часовых поясов — ЦБ РФ публикует курсы на следующий день примерно в 15:00 MSK. Агент, запущенный в 8:00, получит «вчерашний» курс.
  • Нужен нестандартный провайдер (например, НБ РБ или Forex API) — придётся писать свой обработчик, реализующий интерфейс \Bitrix\Currency\RateProvider. Метод getRate() должен вернуть массив курсов в формате, совместимом со стандартным сохранением.

Для продакшн-систем рекомендуется дублировать обновление курсов отдельным cron-скриптом, который пишет лог и отправляет алерт при недоступности провайдера.

Мультивалютный каталог

Мультивалютность в Битрикс работает на двух уровнях: хранение цен и отображение.

На уровне хранения каждый тип цены (b_catalog_price) привязан к конкретной валюте. Можно задать оптовую цену в EUR, а розничную — в RUB. Битрикс конвертирует все цены к базовой валюте при сравнении и сортировке в каталоге.

На уровне отображения компонент catalog.element и catalog.section используют метод CCurrencyLang::CurrencyFormat() для форматирования. Валюта отображения определяется:

  • Явно — через параметр компонента CURRENCY_ID.
  • Автоматически — по настройке сайта или геолокации пользователя.

Конвертация в корзине происходит в момент добавления товара. Объект \Bitrix\Sale\Basket хранит цену в валюте сайта заказа. Если товар имеет цену в USD, а сайт работает в RUB — конвертация выполняется по текущему курсу. После добавления в корзину цена фиксируется и не пересчитывается при изменении курса (если не вызвать пересчёт явно).

Для показа цен в валюте пользователя без реальной конвертации используется JavaScript-пересчёт на клиенте. Серверная цена остаётся в базовой валюте, а на фронте умножается на курс, переданный через BX.Currency.setCurrencyFormat(). Такой подход снижает нагрузку на сервер, но требует аккуратной синхронизации курсов между сервером и клиентом.

Рекомендации по настройке

  • Одна базовая валюта — не меняйте её после запуска магазина.
  • Cron обязателен — не полагайтесь на агенты по хитам для обновления курсов.
  • Округление — задавайте правила округления в настройках валюты, иначе получите расхождение в копейках между каталогом и корзиной.
  • Кэш курсов — модуль currency кэширует курсы. После ручного обновления сбрасывайте кэш через \Bitrix\Currency\CurrencyManager::clearCurrencyCache().