Представьте: два клиента заказывают один и тот же товар, но видят разные цены — потому что у каждого свой договор. Мы знаем, что это стандартная задача B2B, которую Битрикс решает через механизм типов цен. Однако неверная конфигурация приводит к тому, что клиент видит чужую цену или не видит вообще. В этой статье расскажем, как избежать ошибок и построить гибкую систему индивидуальных прайсов.
Механизм типов цен в модуле catalog
В Битриксе каждый товар может иметь несколько цен — по одной на каждый тип цены (b_catalog_group). Тип цены — это просто именованный уровень прайса: «Розница», «Опт», «VIP», «Контрактная». Для каждого типа указывается, каким группам пользователей (b_user_group) он доступен.
Настройка в панели управления: Магазин → Настройки → Типы цен. Создаём типы для каждого уровня цен. В «Группах покупателей» назначаем, какая группа видит какой тип.
Индивидуальные цены: два подхода
Подход 1 — группа на клиента. Каждому B2B-клиенту создаётся отдельная группа пользователей и отдельный тип цены. Клиент входит в эту группу — видит свои цены. Работает, пока клиентов десятки. При сотнях — управлять становится неудобно: каждый новый клиент требует создания группы и типа цены, плюс загрузки цен.
Подход 2 — Highload-блок контрактных цен. Более масштабируемо (в 10 раз лучше при 50+ клиентах). Создаём Highload-блок b2b_contract_prices с полями: UF_COMPANY_ID, UF_PRODUCT_ID, UF_PRICE, UF_CURRENCY, UF_DATE_FROM, UF_DATE_TO. При запросе цены товара — проверяем сначала контрактную цену для компании клиента, затем групповой прайс, затем базовую цену. Логика реализуется через кастомный провайдер цен.
| Критерий | Подход «Группа на клиента» | Подход «Highload-блок» |
|---|---|---|
| Макс. клиентов | 10–20 | 500+ |
| Время на добавление | 2–3 часа | 30 минут |
| Гибкость | Низкая | Высокая (сроки, объёмы) |
| Интеграция с 1С | Прямая | Через обработчик |
Как настроить приоритет типов цен?
Порядок, в котором система ищет цену для конкретного пользователя, задаётся в настройках типов цен — поле «Сортировка». Меньше число — выше приоритет. Индивидуальная контрактная цена должна иметь сортировку 1, розничная базовая — 100. Это гарантирует, что клиент увидит именно свою договорную цену, а не общую.
Что делать при большом количестве клиентов?
Если клиентов больше 50, использование Highload-блока — единственный разумный путь. Мы рекомендуем именно его: наш опыт (10+ лет на рынке, 500+ настроек каталогов) показывает, что групповой подход перестаёт работать при масштабировании. Контрактные цены загружаются либо вручную через административный интерфейс, либо через CommerceML-обмен с 1С.
Загрузка цен из 1С
При использовании CommerceML обмена с 1С цены синхронизируются автоматически по типам цен. В файле обмена тип цены идентифицируется по полю ТипЦены → сопоставляется с CATALOG_GROUP_ID в Битриксе. Контрактные цены, которых нет в стандартном прайсе, выгружаются отдельным файлом и загружаются в Highload-блок через обработчик события OnSuccessCatalogImport1C.
Процесс работы
- Аналитика — разбираем текущую схему ценообразования, количество клиентов и групп.
- Проектирование — выбираем подход (группы или HL-блок), проектируем структуру типов цен.
- Реализация — настраиваем типы цен, создаём Highload-блок, пишем кастомный провайдер.
- Тестирование — проверяем, что каждый клиент видит свои цены, кеш работает, права доступа соблюдены.
- Деплой — переносим на боевой сервер, настраиваем обмен с 1С.
Что входит в работу
- Конфигурация типов цен и их приоритетов
- Создание Highload-блока для контрактных цен (если нужно)
- Написание кастомного провайдера цен
- Настройка импорта цен из 1С (включая обработчик контрактных)
- Тестирование сценариев: авторизованные / неавторизованные пользователи, разные группы
- Документация по изменению цен и добавлению новых клиентов
Сроки ориентировочно
| Этап | Срок |
|---|---|
| Настройка типов цен и групп (до 5 типов) | 3–5 дней |
| Разработка контрактного провайдера с HL-блоком | 1–2 недели |
| Полный цикл с интеграцией 1С | 2–3 недели |
Стоимость рассчитывается индивидуально. Свяжитесь с нами — оценим ваш проект и предложим оптимальное решение. Закажите настройку — получите прозрачную систему индивидуальных цен без ошибок.
Что проверить после настройки
- Авторизованный пользователь группы «Опт» не видит цену «Розница» и наоборот
- Незалогиненный пользователь не видит B2B-цены вообще (если каталог закрытый)
- Кеш цен инвалидируется при изменении — через тегированный кеш или
CCatalogProduct::clearCacheProductPrice()
Настройка типов цен и групп для стандартной схемы (до 5 типов цен, без контрактного Highload): 3-5 дней. Разработка контрактного провайдера цен с Highload-блоком: 1-2 недели.
Сравнение подходов: какой выбрать?
Если у вас до 20 клиентов и цены меняются редко — подойдёт групповой подход. Если клиентов больше или цены индивидуальны — Highload-блок даёт в 10 раз лучшую масштабируемость и гибкость. Наш опыт гарантирует, что вы не столкнётесь с проблемами при росте бизнеса.







