B2B-портал з 15 000 товарів: ціни в євро, контрагенти платять у долларах. Курс змінюється щодня. Ручне оновлення 15 000 позицій займає 8 годин із імовірністю помилки 30%. Ми автоматизуємо цей процес — агент перерахунку справляється за 2 хвилини, що в 12 разів швидше ручного введення. Замовте аудит поточної системи — займе не більше години.
Чому звичайна конвертація не підходить для B2B?
Конвертація на льоту через CCurrencyRates::ConvertCurrency() створює невизначеність: ціна змінюється кожен запит. Для B2B із фіксованими прайс-листами потрібен перерахунок збережених цін через агент. Це дає стабільну ціну на день і на 70% менше запитів до бази.
| Підхід | Стабільність цін | Навантаження на сервер | Контроль |
|---|---|---|---|
| Конвертація на льоту | Низька | Висока (кожен запит) | Відсутній |
| Агент перерахунку | Висока (фіксація на день) | Низька (пакетна обробка) | Повний лог |
Як захистити дані від аномалій курсу?
Курси з публічних API не ідеальні: можуть прийти нулі, застарілі значення або тимчасові стрибки. В агент перерахунку вбудовано механізм захисту від аномалій: якщо новий курс відрізняється від попереднього більш ніж на 5%, оновлення блокується. Адміністратор отримує повідомлення через \Bitrix\Main\Mail\Event::send(), а в лог записується подія з вихідними та відхиленими значеннями. Це запобігає збиткам від помилкового ціноутворення — у нашій практиці врятувало клієнта від втрати значної суми за один день.
Як налаштувати автоматичний перерахунок цін за курсом валют?
Налаштування автоматичного перерахунку цін за курсом валют в 1С-Бітрікс включає три етапи: вибір провайдера курсів, автооновлення курсів та агент перерахунку. Порівняно з ручним оновленням, автоматизація скорочує час у 4 рази та знижує ймовірність помилок до нуля. Типовий проект економить значні кошти на зарплаті менеджера.
Вибір провайдера курсів
Для BYN використовуємо API НБ РБ, для EUR/GBP — ЄЦБ. Порівняння провайдерів:
| Провайдер | Валюта | Частота оновлення | Особливості |
|---|---|---|---|
| НБ РБ | BYN | Раз на добу | Офіційний курс, XML |
| ЦБ РФ | USD | Щодня | JSON API, обов'язковий для РФ |
| ЄЦБ | EUR/USD/GBP | Двічі на день | Безкоштовний, XML |
Для стандартних валют використовуємо вбудовані провайдери, для нестандартних — напишемо клас на основі \Bitrix\Currency\RateProvider.
Агент перерахунку
Агент розбитий на пакети по 500 товарів, щоб укластися в max_execution_time. Приклад коду:
// Приклад: агент перерахунку цін для типу ціни 'Роздрібна' (ID=1) \Bitrix\Main\Loader::includeModule('catalog'); $factor = CCurrencyRates::GetConvertFactor('EUR', 'BYN'); $prices = \Bitrix\Catalog\PriceTable::getList([ 'filter' => ['=CATALOG_GROUP_ID' => 1, '=CURRENCY' => 'EUR'], 'limit' => 500 ])->fetchAll(); foreach ($prices as $price) { $newPrice = round($price['PRICE'] * $factor, 2); \Bitrix\Catalog\PriceTable::update($price['ID'], ['PRICE' => $newPrice, 'CURRENCY' => 'BYN']); } Округлення задається в налаштуваннях валюти. Для BYN — до копійок, для оптових цін — до цілих рублів.
Журнал агента ведеться за допомогою FileLogger. Запис містить: ID ціни, старе та нове значення, коефіцієнт, час. Файл ротується за розміром 10 MB.
Офіційна документація 1С-Бітрікс: «Агенти — це функції, які виконуються за розкладом».
Параметри агента: що налаштовуємо
| Параметр | Рекомендація |
|---|---|
| Інтервал запуску | 1 раз на добу (00:00) |
| Розмір пакета | 500 товарів |
| Допустиме відхилення курсу | 5% |
| Логування | FileLogger з ротацією |
Як ми реалізуємо перерахунок: компоненти та код
Наша команда налаштовує повний цикл: від провайдера курсів до агента з логуванням.
-
Провайдер курсів. Якщо потрібно нестандартне джерело (наприклад, НБ РБ), пишемо клас, що реалізує
\Bitrix\Currency\RateProvider. Для типових (ЦБ РФ, ЄЦБ) — готове рішення. -
Автооновлення курсів. Налаштовуємо cron-завдання
cron_events.phpіз викликом\Bitrix\Currency\CurrencyManager::updateCurrencyRates(). Без cron оновлення виконується тільки при хітах — на порталі з 10 000+ товарів курс може не оновитися до полудня. -
Агент перерахунку. Код розбитий на пакети по 500 товарів, щоб не виходити за ліміт
max_execution_time. Докладніше про агентів.
Процес роботи: від аналізу до підтримки
- Аналіз. Вивчаємо структуру каталогу: які типи цін, у яких валютах, які групи користувачів. Визначаємо провайдера курсів і правила округлення.
- Проектування. Розробляємо ТЗ на агент: інтервал запуску, пакетна обробка, аномалії (відхилення >5% — блокування та повідомлення).
- Реалізація. Пишемо код провайдера (якщо потрібен), агента, логера. Використовуємо transactions для атомарності.
- Тестування. Перевіряємо на копії порталу: імітуємо стрибки курсу, дивимося логи. Гарантуємо, що агент відпрацює без збоїв.
- Деплой та навчання. Розгортаємо на бойовому сервері, документуємо роботу, навчаємо адміністратора.
Типові помилки при налаштуванні
- Відсутність cron: оновлення тільки за хітами, затримка до кількох годин.
- Неправильне округлення: ціни з великою кількістю знаків після коми.
- Агент без пакетної обробки: тайм-аут на каталогах від 10 000 товарів.
Що входить у послугу
- Розробка кастомного провайдера курсів (НБ РБ, ЦБ та ін.).
- Агент перерахунку з пакетною обробкою та захистом від аномалій.
- Налаштування cron-завдань та логування (
FileLogger). - Документація з інтеграції та інструкція для адміністратора.
- Гарантія 30 днів на безвідмовну роботу агента.
Чек-лист перевірки агента
- Агент запускається по cron щодня о 00:00.
- Розмір пакета — 500 товарів.
- Допустиме відхилення курсу — 5%.
- Логування налаштовано, файл ротується при 10 MB.
- Повідомлення адміністратору при аномаліях.
Замовте безкоштовний аудит вашого каталогу — оцінимо обсяг робіт. Отримайте консультацію інженера з Бітрікс — це безкоштовно. Досвід нашої команди — понад 10 років у розробці на Бітрікс. Ми працюємо з порталами будь-якого масштабу: від 1 000 до 100 000 товарів.







