Розничная и оптовая цена, скидка для постоянных клиентов, особые условия для B2B-партнёров — всё это решается через типы цен и их привязку к группам пользователей в модуле "Каталог". Разберём, как это устроено и как настроить наценки без ручного пересчёта каждой цены отдельно.
Типы цен как основа
Раздел Магазин → Настройки →
Типы цен определяет доступные группы цен —
базовая розничная, оптовая, для дилеров и так далее. Каждый товар
может иметь отдельную запись CPrice для каждого
настроенного типа, как разобрано в материале про
CCatalogProduct и CPrice.
Привязка типа цены к группе пользователей
В настройках самого типа цены указывается, каким группам пользователей он доступен для просмотра, — покупатель видит только те типы цен, к которым у него есть доступ через свою группу. Это позволяет показывать разным категориям пользователей разные цены на один и тот же товар без создания отдельных дублирующихся карточек товара для розницы и опта.
Нужна помощь с Битрикс?
Наценка вместо отдельного ввода каждой цены
Вместо ручного ввода значения для каждого дополнительного типа цены на каждый товар, система поддерживает настройку наценки — процентной или фиксированной — от базовой цены для остальных типов. Это заметно экономит время при большом каталоге: изменение базовой розничной цены автоматически пересчитывает связанные типы цен, настроенные через наценку, без необходимости вручную обновлять каждый тип отдельно.
Групповые скидки как альтернатива отдельным типам цен
Для сценария "постоянный клиент получает скидку 5% на весь каталог" не обязательно заводить отдельный тип цены — тот же результат достигается через правило скидки с условием по принадлежности пользователя к определённой группе, разобранное в материале про скидки. Выбор между отдельным типом цены и правилом скидки зависит от того, нужна ли принципиально другая структура цены (например, другая валюта или совсем другая логика расчёта) или просто процентная скидка от той же базовой цены.
Программный расчёт цены для конкретной группы
<?php
use Bitrix\Main\Loader;
Loader::includeModule('catalog');
function getPriceForUserGroup(int $productId, array $userGroups): ?array
{
$priceTypeId = getPriceTypeIdForGroups($userGroups); // своя логика сопоставления
$price = CPrice::GetList(
[], ['PRODUCT_ID' => $productId, 'CATALOG_GROUP_ID' => $priceTypeId]
)->Fetch();
return $price ?: null;
}
При написании собственной логики вывода цены (например, в кастомном компоненте) важно явно определить нужный тип цены для групп текущего пользователя, а не полагаться на то, что штатный вывод компонента автоматически подберёт правильную цену без явного указания контекста в нестандартном сценарии использования.
Приоритет типов цен при нескольких доступных группах
Пользователь может состоять сразу в нескольких группах, каждой из которых доступен свой тип цены, — в этом случае нужна явная логика приоритета (например, самая выгодная цена показывается автоматически, или приоритет отдаётся более специфичной группе вроде "VIP" над общей "Зарегистрированные"), поскольку без явного правила порядок применения может оказаться непредсказуемым.
Наценка и минимальная маржинальность
При настройке автоматической наценки от базовой цены стоит учитывать, что процентная наценка на очень дешёвые товары может давать абсолютную сумму наценки ниже реальных операционных издержек, — для каталогов с широким разбросом цен товаров иногда требуется комбинированная логика (процент плюс минимальная фиксированная сумма), а не единая простая процентная наценка для всего каталога без исключений.
Частые ошибки
- Дублирование карточки товара под розницу и опт вместо типов цен. Избыточное дублирование данных вместо штатного механизма нескольких цен на один товар.
- Нет явного приоритета при нескольких доступных группах цен. Непредсказуемое поведение при показе цены пользователю, состоящему в нескольких группах одновременно.
- Простая процентная наценка без учёта минимальной маржинальности. Убыточные позиции на дешёвых товарах при широком разбросе цен каталога.
Итог
Типы цен, привязанные к группам пользователей, с настроенной наценкой от базовой цены закрывают сценарий розницы и опта без дублирования карточек товара и без ручного пересчёта каждой цены при изменении базовой. Для простой скидки от базовой цены без изменения структуры расчёта чаще уместнее правило скидки по группе, чем создание отдельного типа цены.
