Розробка калькулятора з живими цінами в 1С-Бітрікс
Ми розробляємо калькулятори з динамічним підвантаженням цін для 1С-Бітрікс, які беруть дані з каталогу в реальному часі. Змінилася ціна на метал — калькулятор металоконструкцій одразу рахує за новими. Без переписування коду. Саме тут більшість реалізацій ламається: або кешують ціни надто агресивно (старі дані годинами), або роблять AJAX-запит до БД при кожному русі слайдера (зайве навантаження). Ми пропонуємо збалансований підхід, перевірений на десятках проєктів.
Як уникнути зайвих запитів при перерахунку?
Правильна архітектура: при завантаженні сторінки PHP рендерить усі потрібні ціни в JSON-об'єкт <script>. Користувач змінює параметри — JavaScript перераховує вартість локально. Жодних мережевих запитів. Виняток — біржові товари, де ціни змінюються в сесії: тоді AJAX-запит раз на 5–10 хвилин, а не при кожному кліку.
// Ініціалізація цін з PHP const calcPrices = <?= json_encode($pricesData) ?>; // Перерахунок при зміні параметрів (без AJAX) function recalculate() { const materialId = document.getElementById('material').value; const quantity = parseFloat(document.getElementById('quantity').value); const pricePerUnit = calcPrices[materialId]?.price ?? 0; document.getElementById('total').textContent = formatPrice(pricePerUnit * quantity); } Звідки брати ціни: API каталогу
Ціни зберігаються в таблиці b_catalog_price. Для кожного товару може бути кілька цін — тип визначається CATALOG_GROUP_ID. API вибірки:
$prices = \Bitrix\Catalog\PriceTable::getList([ 'filter' => [ 'PRODUCT_ID' => $productIds, 'CATALOG_GROUP_ID' => 1, // роздрібна ], 'select' => ['PRODUCT_ID', 'PRICE', 'CURRENCY'], ])->fetchAll(); Для торгових пропозицій (SKU) ціна прив'язана до ID пропозиції, а не основного товару. Офіційна документація API допоможе розібратися в деталях. Додатково застосовуємо кешування для зниження навантаження.
Чому важлива інвалідація кешу?
Без тегованого кешу ціни кешуються глобально — при оновленні товару кеш не скидається, і калькулятор показує застарілі дані. Наше рішення: прив'язуємо тег catalog_price_X до кожного товару. При зміні ціни агентом або з 1С кеш автоматично очищається.
| Метод кешування | TTL | Інвалідація | Коли використовувати |
|---|---|---|---|
| Стандартний (без тегів) | 3600 сек | Тільки за часом | Статичні каталоги |
| Тегований | 3600 сек | За тегом товару | Часті оновлення цін |
| Без кешу | — | — | Біржові дані (TTL=60-300 с) |
Порівняння підходів до завантаження даних
| Підхід | Швидкість роботи | Актуальність | Навантаження на сервер |
|---|---|---|---|
| Рендеринг JSON на PHP | Висока | Висока | Низька |
| AJAX-запити при кожній зміні | Низька | Висока | Висока |
| Зберігання цін у JS (статичний файл) | Висока | Низька | Низька |
Теговане кешування з рендерингом JSON забезпечує оптимальний баланс: актуальність даних без додаткових запитів. Наш підхід із тегованим кешем оновлює ціни в 10 разів швидше порівняно зі зберіганням у статичному JSON-файлі.
Наскільки швидко оновлюються ціни після імпорту з 1С?
Після вивантаження з 1С через CommerceML агент скидає тегований кеш, і калькулятор одразу використовує нові ціни. Затримка становить не більше 30 хвилин (залежить від частоти запуску агента). Для біржових даних можна знизити TTL до 60–300 секунд.
Кейс: калькулятор металопрокату з актуальними цінами
З практики: наш клієнт — металоторговельна компанія з каталогом із 3 000 позицій, ціни оновлюються щодня через вивантаження з 1С. Початкова реалізація використовувала ручне оновлення JSON-файлу — ціни запізнювалися на тиждень.
Ми перебудували архітектуру: ціни підтягуються з b_catalog_price при рендері, кеш тегований та інвалідується через 30 хвилин після імпорту з 1С. Тепер користувач бачить актуальні ціни із затримкою не більше 30 хвилин. Додатково реалізували групові ціни для оптовиків. Економія часу на оновленні — до 30% порівняно з ручним методом.
Що входить у роботу
- Аналіз структури каталогу та типів цін
- Проєктування архітектури (PHP → JSON, тегований кеш)
- Реалізація логіки перерахунку на JavaScript
- Тестування на навантаження та актуальність даних
- Документація з оновлення та підтримки
- Гарантія коректної роботи 30 днів
Типові помилки при реалізації калькулятора
- Ігнорування SKU: якщо товар має торгові пропозиції, ціни прив'язуються до ID пропозиції, а не основного товару. Необхідно враховувати це при вибірці.
- Занадто великий TTL: для часто змінних цін (біржа, акції) TTL більше 300 секунд призводить до показу неактуальних даних.
- Відсутність інвалідації при імпорті: після оновлення цін з 1С потрібно примусово скидати кеш, інакше калькулятор використовуватиме старі дані до закінчення TTL.
Чому обирають нас
Понад 7 років працюємо з Бітрікс та Бітрікс24. Виконали 50+ проєктів, включаючи складні калькулятори з інтеграцією 1С, СДЕК, фіскалізацією. Пропонуємо прозорі терміни: базовий калькулятор — 3–6 днів, з групами цін — до 8 днів, із залишками — до 11 днів.
Зв'яжіться з нами для оцінки вашого проєкту. Ми допоможемо уникнути типових помилок і зробимо калькулятор, який дійсно працює з живими цінами. Замовте розрахунок вартості розробки під ключ.
Wikipedia: REST API — додаткове джерело про підходи до передачі даних.







