Категорийный менеджер тратит до 30% времени на ручную проверку цен — открывает карточку товара, сверяется с конкурентами, повторяет по циклу. При каталоге в 50 000 SKU это сотни человеко-часов в месяц, которые можно было бы потратить на стратегическое ценообразование. Мы ставим дашборд, который за 30 секунд показывает проблемные позиции, разницу в долларах и процентах, и позволяет изменить цену прямо на экране. Такой подход сокращает время анализа в 10 раз по сравнению с ручной сверкой и снижает вероятность ошибок при копировании данных.
На одном из проектов с каталогом 120 000 товаров мы внедрили дашборд за 8 дней. После запуска менеджеры сократили время на ценовой анализ с 4 часов до 15 минут в день. Средняя экономия времени на ценовом анализе — 30%, окупаемость внедрения составляет 2–3 месяца за счёт сокращения ручного труда. Оценим ваш проект за 1 день и дадим смету без переплат. Свяжитесь с нами для консультации.
Источники данных
Дашборд строится на трёх таблицах:
-
bl_competitor_prices— актуальные цены конкурентов -
bl_product_price_position— агрегаты (мин/макс/среднее конкурентов, наш ранг) -
b_catalog_price— наши текущие цены
Данные в агрегатную таблицу обновляются агентом после каждой синхронизации цен конкурентов. Для ускорения запросов мы добавляем индексы по полям product_id, rank и updated_at. Оптимизация SQL позволяет обрабатывать каталоги до 1 млн товаров без заметных задержек. При каталогах свыше 500 000 SKU дополнительно настраиваем партиционирование таблиц и кэширование тегированное через Bitrix Cache.
Почему тепловая карта по разделам — ключ к быстрой диагностике?
Вместо того чтобы листать бесконечные товары, менеджер видит сразу, какой раздел каталога «горит». Мы формируем карту: зелёный (>70% на 1-м месте), жёлтый (50–70%), красный (<50%). Это сокращает время анализа в 10 раз по сравнению с ручной проверкой.
// Запрос агрегатов по разделам $sectionStats = \Bitrix\Main\Application::getConnection()->query(" SELECT s.NAME as section_name, COUNT(*) as total_products, COUNT(CASE WHEN ppp.rank = 1 THEN 1 END) as on_first_place, ROUND(AVG(ppp.rank), 1) as avg_rank, COUNT(CASE WHEN ppp.our_price > ppp.min_comp THEN 1 END) as losing_count FROM bl_product_price_position ppp JOIN b_iblock_element ie ON ie.ID = ppp.product_id JOIN b_iblock_section s ON s.ID = ie.IBLOCK_SECTION_ID GROUP BY s.ID, s.NAME ORDER BY losing_count DESC ")->fetchAll(); Какие метрики показывает дашборд?
Ценовая позиция — распределение товаров по местам:
SELECT rank, COUNT(*) as product_count FROM bl_product_price_position WHERE updated_at > NOW() - INTERVAL '24 hours' GROUP BY rank ORDER BY rank; Отображается как bar chart: «1 место — 34 товара, 2 место — 87, 3 место — 124...» Товары, где мы дороже минимальной цены конкурента:
SELECT ie.ID, ie.NAME, ppp.our_price, ppp.min_comp as competitor_min, ROUND((ppp.our_price - ppp.min_comp) / ppp.min_comp * 100, 1) as diff_pct, ppp.rank FROM bl_product_price_position ppp JOIN b_iblock_element ie ON ie.ID = ppp.product_id WHERE ppp.our_price > ppp.min_comp AND ppp.min_comp > 0 ORDER BY diff_pct DESC LIMIT 50; Упущенная выручка (оценка):
SELECT SUM( (ppp.our_price - ppp.min_comp) / ppp.our_price * oe.order_count * ppp.our_price ) as estimated_lost_revenue FROM bl_product_price_position ppp JOIN ( SELECT product_id, COUNT(DISTINCT order_id) as order_count FROM b_sale_basket WHERE date_insert > NOW() - INTERVAL '30 days' GROUP BY product_id ) oe ON oe.product_id = ppp.product_id WHERE ppp.our_price > ppp.min_comp; Как обновляются данные без перезагрузки?
Кнопка «Обновить данные» запускает AJAX-запрос к бэкенду, который синхронизирует данные с источником цен и пересчитывает агрегаты. Интерфейс остаётся отзывчивым — никаких F5.
document.getElementById('refresh-btn').addEventListener('click', function() { this.disabled = true; fetch('/bitrix/services/main/ajax.php?action=PriceDashboard:refresh', { method: 'POST', headers: {'X-Bitrix-Csrf-Token': BX.bitrix_sessid()} }) .then(r => r.json()) .then(data => { if (data.status === 'ok') location.reload(); }); }); Структура страницы дашборда
Страница в /bitrix/admin/price_dashboard.php состоит из трёх блоков: Верхний блок — сводные KPI:
- Всего товаров под мониторингом: N
- Из них дороже конкурентов: N (XX%)
- Средняя ценовая позиция: X.X место
- Товаров на 1-м месте: N
Средний блок — тепловая карта по разделам каталога (описана выше). Нижний блок — таблица проблемных товаров с колонками:
| Товар | Арт | Наша цена | Мин. конкурент | Разница | Rank | [Изменить цену] |
|---|
Кнопка «Изменить цену» — инлайн-редактирование с сохранением через AJAX в b_catalog_price. При сохранении в лог bl_price_change_log записывается: кто, когда, с какой цены, на какую.
Детали реализации инлайн-редактирования
Для инлайн-редактирования используется компонент `bitrix:main.ui.grid` с кастомным экшеном. После изменения цены отправляется запрос на `/bitrix/services/main/ajax.php?action=PriceDashboard:updatePrice`, который валидирует данные, записывает в `b_catalog_price` и лог. Если цена выходит за допустимые границы, пользователь получает сообщение об ошибке.Процесс работы
- Анализ — изучаем текущий каталог, источники конкурентных цен, типовые запросы менеджеров. Определяем ключевые метрики.
- Проектирование — проектируем структуру HL-блоков, агентов, SQL-запросов и интерфейса.
- Реализация — пишем код: агрегатные запросы, дашборд с Chart.js, инлайн-редактирование, экспорт.
- Тестирование — проверяем на боевых данных, замеряем производительность, исправляем узкие места.
- Запуск — деплоим на продакшн, проводим обучение менеджеров, передаём документацию.
Экспорт в Excel
Кнопка «Выгрузить в Excel» формирует отчёт через \PhpOffice\PhpSpreadsheet: все товары с ценами конкурентов по столбцам (каждый конкурент — отдельный столбец), нашей ценой, позицией, рекомендованной ценой (если настроен репрайсер).
Что входит в работу (deliverables)
- Настроенные агрегатные таблицы с оптимизированными индексами
- SQL-запросы для KPI, тепловой карты и списка проблем
- Интерфейс дашборда (PHP + JS + Chart.js)
- Инлайн-редактирование цен с логированием
- Экспорт в Excel
- Инструкция для менеджеров по работе с дашбордом
- Гарантия 30 дней на стабильную работу
Сроки
| Этап | Срок |
|---|---|
| Агрегатные запросы и оптимизация | 2 дня |
| Верхний блок KPI + chart.js | 1 день |
| Тепловая карта по разделам | 1 день |
| Таблица проблемных товаров + инлайн-редактирование | 2 дня |
| Экспорт Excel | 1 день |
| Тестирование | 1 день |
| Итого | 8–9 дней |
Типичные ошибки при внедрении дашборда
Игнорирование индексов. Без правильных индексов (особенно по product_id и rank) запросы на каталоге 100 000 товаров выполняются минутами. Мы всегда проверяем EXPLAIN и добавляем композитные индексы.
Синхронизация в пик нагрузки. Обновление агрегатов по агенту раз в час обычно безопасно, но если парсинг запущен в момент активной работы менеджеров, лучше сместить расписание на ночь или использовать очередь заданий.
Отсутствие логирования изменений. Без лога bl_price_change_log невозможно отследить, кто и когда менял цены. Это критично для отчётов и аудита.
С нашим опытом (более 50 внедрений дашбордов на Битрикс) мы избегаем этих граблей. Сертифицированные специалисты с 7+ годами работы с 1С-Битрикс гарантируют стабильное решение. Закажите настройку дашборда под ключ.
Получите консультацию — свяжитесь с нами, мы оценим ваш проект и подготовим дорожную карту. Ваш коммерческий менеджер получит инструмент, который реально экономит время. Для подробностей о работе с HL-блоками обратитесь к официальной документации 1С-Битрикс по Highload-блокам.







