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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування валют та курсів в інтернет-магазині 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Настройка валют і курсів в інтернет-магазині 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().