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

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка автоматического пересчета цен по курсу валют 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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С-Битрикс

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

Конвертация на лету vs. пересчёт хранимых цен

Это две принципиально разные стратегии.

Конвертация на лету — цена хранится в исходной валюте (EUR), а при показе пользователю конвертируется по текущему курсу из b_catalog_currency_rate. Метод CCurrencyRates::ConvertCurrency(100, 'EUR', 'BYN') делает это в одну строку. Преимущество: не нужно ничего пересчитывать. Недостаток: цена «плавает», покупатель видит разные суммы в разное время дня.

Пересчёт хранимых цен — агент забирает курс и обновляет значения в b_catalog_price для целевого типа цены. Покупатель видит стабильную цену до следующего пересчёта. Подходит для B2B, где контрагенты ожидают фиксированный прайс-лист на день.

Настройка обновления курсов

Прежде чем пересчитывать цены, убедитесь, что курсы обновляются автоматически. Модуль currency поддерживает провайдеры ЦБ РФ и ECB. Для НБ РБ (nbrb.by) и других банков нужен кастомный провайдер — класс, реализующий \Bitrix\Currency\RateProvider.

Агент обновления курсов: \Bitrix\Currency\CurrencyManager::updateCurrencyRates(). Запускается через cron (cron_events.php). Без cron агент выполняется только при хитах — на ненагруженном B2B-портале курс может не обновиться до обеда.

Реализация пересчёта через агент

Создайте агент, который после обновления курса пересчитывает целевой тип цены:

  1. Получить текущий курс: CCurrencyRates::GetConvertFactor('EUR', 'BYN').
  2. Выбрать товары с ценами в исходной валюте: запрос к \Bitrix\Catalog\PriceTable::getList() с фильтром по CATALOG_GROUP_ID (тип цены) и CURRENCY.
  3. Рассчитать новую цену: умножить базовую цену на курс, округлить по правилам валюты.
  4. Записать в целевой тип цены: \Bitrix\Catalog\PriceTable::update() для существующих записей.

Округление — задаётся в настройках валюты. Для BYN обычно до копеек (2 знака). Для оптовых цен может потребоваться округление до целых рублей: round($price, 0).

Агент должен работать пакетно — по 500 товаров за итерацию, чтобы не упереться в max_execution_time. Используйте \Bitrix\Main\Application::getConnection()->startTransaction() для атомарности обновления.

Контроль и уведомления

Добавьте проверку аномалий: если курс изменился более чем на 5% за сутки — не обновляйте цены автоматически, а отправьте уведомление администратору через \Bitrix\Main\Mail\Event::send(). Это защитит от ошибочных данных провайдера курсов.

Лог пересчёта записывайте в \Bitrix\Main\Diag\FileLogger — дата, старый курс, новый курс, количество обновлённых позиций. При разборе расхождений в заказах этот лог будет единственным источником правды.