Как мы создаём калькулятор с живыми ценами в 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 — дополнительный источник о подходах к передаче данных.







