В 1С-Битрикс цена — это не одно поле у товара, а набор типов цен, каждый из которых имеет собственные права. Именно поэтому один и тот же товар может показывать рознице одну сумму, оптовику — другую, а гостю — вовсе ничего. Разберём, где эти права задаются и как выстроить корректную модель доступа для B2B-магазина.
Как устроены права на цены
Ключевое, что нужно понять: доступ к цене в 1С-Битрикс регулируется не правами на инфоблок каталога, а отдельными правами у каждого типа цен. Тип цены — это сущность модуля catalog (розница, опт, дилерская и т.д.), и у него есть свой список доступа для групп пользователей.
Для каждой пары «тип цены — группа пользователей» задаётся один из трёх уровней:
- Нет доступа — группа не видит эту цену вообще, компонент каталога её не выводит;
- Просмотр — цена показывается на витрине и в детальной карточке, но недоступна для редактирования в админке;
- Просмотр и изменение — полный доступ, включая правку в карточке товара и групповые операции.
Итоговое право пользователя — максимальное из прав всех групп, в которые он входит. Это важно: если менеджер состоит и в «Контент-редакторах» без доступа к оптовой цене, и в отдельной группе с правом изменения, он получит изменение.
Где задаются права типа цены
Права привязаны к конкретному типу цены. Открываем Магазин → Настройки → Цены → Типы цен (в старых сборках — Магазин → Типы цен). Выбираем нужный тип, например «Оптовая», переходим на вкладку «Права доступа» (или «Доступ»).
Здесь для каждой группы пользователей выставляется уровень из выпадающего списка. Именно эта таблица определяет, кто увидит опт, а кто — только розницу. Настройка выполняется отдельно для каждого типа цены, общего рубильника «показать все цены» нет.
После сохранения права применяются к компонентам каталога (catalog.section, catalog.element) автоматически: они запрашивают только те типы цен, к которым у текущего пользователя есть хотя бы просмотр.
Группы пользователей как основа разграничения
Права на цены работают только вместе с продуманной структурой групп. Управляются они в разделе Настройки → Пользователи → Группы пользователей. Для типового B2B-каталога обычно достаточно нескольких групп:
| Группа | Розничная цена | Оптовая цена |
|---|---|---|
| Все пользователи (гости) | Просмотр | Нет доступа |
| Зарегистрированные (розница) | Просмотр | Нет доступа |
| Оптовые клиенты (B2B) | Просмотр | Просмотр |
| Контент-менеджеры | Изменение | Изменение |
Группа «Все пользователи» — это неавторизованные посетители (гости). Управляя её правами на типы цен, вы решаете, что видит анонимный посетитель. Ниже об этом отдельно.
Клиента переводят в оптовую группу вручную либо автоматически — например, привязкой группы к свойству профиля или через обмен с 1С по значению из карточки контрагента.
Права на модуль каталога и роли
Права типов цен отвечают за то, какие цены видны. Но за возможность вообще редактировать товары и цены в админке отвечает уровень доступа к модулю «Торговый каталог». Он настраивается в Настройки → Настройки продукта → Права доступа либо на вкладке «Доступ» группы пользователей.
Основные уровни модуля catalog:
- Демо-доступ — только чтение служебных данных;
- Просмотр каталога — видит данные, но не меняет;
- Изменение — может редактировать цены, наценки, единицы измерения;
- Полный доступ — включая настройки модуля и типов цен.
На практике право менять цены складывается из двух условий одновременно: изменение на модуле каталога плюс «просмотр и изменение» на нужном типе цены. Если менеджеру дали доступ к модулю, но не дали право на оптовый тип цены, поле оптовой цены в карточке он не увидит.
Скрытие цен от гостей и неавторизованных
Частая B2B-задача — не показывать цену тем, кто не вошёл в систему. Решается это на уровне прав: у типа цены снимаем доступ для группы «Все пользователи». После этого компонент каталога перестаёт получать цену для гостя, и в шаблоне остаётся пустое место или кнопка «Цена по запросу».
/bitrix/cache/) и убедитесь, что в кэше компонента включён учёт прав и групп, а страница не отдаётся из композитного кэша одинаково всем.Технически скрытие через права надёжнее, чем прятать цену версткой (CSS/JS): при верстке значение всё равно попадает в HTML и доступно через исходный код. Права же не дают компоненту вытащить сумму из базы вовсе. Отдельный сценарий «цена по запросу» удобно совмещать со скрытием — об этом в связанной статье.
Практические нюансы и типовые ошибки
Несколько моментов, о которые чаще всего спотыкаются при настройке прав на цены:
- Максимум прав, а не минимум. Пользователь получает наибольший доступ из всех своих групп — закрыть цену «отзывом» из одной группы не выйдет, если он открыт в другой.
- Обмен с 1С. При импорте цен по стандартному обмену типы цен создаются автоматически и получают дефолтные права. После первой загрузки обязательно проверьте вкладку «Права доступа» у новых типов, иначе опт может «утечь» гостям.
- Групповые операции. Массовое изменение и групповое управление ценами доступны только при праве «просмотр и изменение» на соответствующем типе — иначе колонка цены в списке недоступна.
- API. Программная выборка через
\CCatalogProduct::GetOptimalPrice()и компоненты учитывает права; но прямое чтение таблицыb_catalog_priceправа не проверяет — в кастомном коде это нужно контролировать самому.
Отдельно закладывайте разграничение и для админов-контент-менеджеров: не всем нужен доступ к закупочным или дилерским ценам, а лишние права — это лишний риск утечки коммерческих условий.
Итог
Права на цены в 1С-Битрикс держатся на трёх опорах: типы цен с индивидуальными списками доступа, группы пользователей и права на модуль каталога. Скрытие цен от гостей делается снятием доступа у группы «Все пользователи», а B2B-разграничение — открытием оптовых типов только целевым группам. Всегда учитывайте, что итоговое право — максимальное из групп, и не забывайте про кэш и права новых типов после обмена с 1С.
Если модель прав в вашем магазине разрослась, права путаются между обменом и ручными правками, а оптовые цены рискуют попасть не в те руки — мы наведём порядок: спроектируем группы, настроим типы цен и увяжем всё с обменом 1С без утечек и лишнего доступа.
Частые вопросы
Где в 1С-Битрикс настраиваются права на конкретную цену?
На вкладке «Права доступа» самого типа цены в разделе Магазин → Настройки → Цены → Типы цен. Для каждой группы пользователей выбирается уровень: нет доступа, просмотр или просмотр и изменение.
Как скрыть цену от неавторизованных посетителей?
Уберите доступ к типу цены для группы «Все пользователи». После этого компонент каталога перестанет получать цену для гостя. Не забудьте очистить кэш компонентов.
Почему менеджер не видит поле оптовой цены в карточке товара?
Право менять цену складывается из двух условий: изменение на модуле «Торговый каталог» и право «просмотр и изменение» на нужном типе цены. Если второго нет, поле в карточке не появится.
Что будет, если пользователь входит в несколько групп с разными правами?
Он получит максимальный уровень доступа из всех своих групп. Ограничение в одной группе не отменит открытый доступ, выданный в другой.
Достаточно ли спрятать цену стилями или скриптом?
Нет. При верстке значение всё равно попадает в HTML и видно в исходном коде страницы. Надёжно скрывает только снятие прав, потому что компонент тогда не получает сумму из базы.
Наследуются ли права типов цен при обмене с 1С?
Новые типы цен, созданные при обмене, получают права по умолчанию. После первой загрузки обязательно проверьте их вкладку «Права доступа», иначе оптовые цены могут стать видны гостям.
Учитывает ли программная выборка права на цены?
Штатные компоненты и метод CCatalogProduct::GetOptimalPrice() учитывают права. А прямое чтение таблицы b_catalog_price права не проверяет, поэтому в кастомном коде доступ нужно контролировать вручную.
Как разграничить розничные и оптовые цены между клиентами?
Создайте отдельную группу для оптовиков и откройте ей просмотр оптового типа цены, оставив рознице только розничный. Перевод клиента в оптовую группу можно автоматизировать через обмен с 1С.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.