Налаштування автоматичного перерахунку цін за курсом валют 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С-Bitrix

Базові ціни в каталозі зберігаються в одній валюті, а курс змінюється щодня. Якщо ціни зафіксовані у EUR, а покупець платить у BYN — без автоматичного перерахунку менеджер буде щоутра вручну оновлювати тисячі позицій. Модуль currency у Bitrix розв'язує задачу конвертації на льоту, але реальний перерахунок збережених цін вимагає додаткового налаштування.

Конвертація на льоту 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 — дата, старий курс, новий курс, кількість оновлених позицій. При розборі розбіжностей у замовленнях цей лог буде єдиним джерелом істини.