Скрытие цен в 1С-Битрикс: кнопка «Узнать цену» и права доступа

Скрытие цен с кнопкой «Узнать цену»: архитектура и реализация Оптовый клиент заходит в каталог, видит розничную цену и уходит — решив, что дорого. Или конкурент мониторит ваши цены через парсер. Скрытие цен с кнопкой «Узнать цену» решает обе проблемы: B2B-клиент оставляет заявку, а парсер получае
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Скрытие цен в 1С-Битрикс: кнопка «Узнать цену» и права доступа
Простой
~1 день

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    996
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    735
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

Скрытие цен с кнопкой «Узнать цену»: архитектура и реализация

Оптовый клиент заходит в каталог, видит розничную цену и уходит — решив, что дорого. Или конкурент мониторит ваши цены через парсер. Скрытие цен с кнопкой «Узнать цену» решает обе проблемы: B2B-клиент оставляет заявку, а парсер получает пустое поле вместо числа.

Мы в команде настраивали скрытые цены для проекта с 15 000+ товаров и 4 типами дилеров. Подход оказался не таким тривиальным — пришлось комбинировать права на типы цен, свойства инфоблоков и кастомную форму запроса. Ниже делимся архитектурой и гарантируем, что решение впишется в ваш каталог за срок от 2 часов.

Как хранятся цены в 1С-Битрикс?

Цена товара лежит в таблице b_catalog_price, привязана к типу цены (b_catalog_group). Компонент catalog.element использует CCatalogProduct::GetOptimalPrice() — выбирает доступный тип цены для текущего пользователя. Если ни один тип цены не разрешён, метод возвращает пустой массив. Это и есть точка для скрытия.

Уровни скрытия цены

  1. Уровень шаблона компонента. Проще всего: в template.php проверяете условие и вместо цены выводите кнопку. Условия: группа пользователя, свойство инфоблока HIDE_PRICE, наличие определённого типа цены.

  2. Уровень типа цены. Создаёте отдельный тип цены «По запросу» в Магазин → Настройки → Типы цен. Товарам, для которых цена скрыта, не назначаете розничную цену. CCatalogProduct::GetOptimalPrice() не находит цену — обрабатываете в шаблоне.

  3. Уровень свойства инфоблока. Добавляете свойство PRICE_ON_REQUEST типа «Список» (Да/Нет). В шаблоне проверяете значение свойства и подменяете блок цены на форму запроса. Этот способ удобен для массового управления через CommerceML.

Реализация кнопки «Узнать цену»

Кнопка должна открывать форму с минимумом полей: имя, телефон/email, автоматически подставленный артикул товара. Основные варианты:

Вариант Скорость внедрения Дополнительные возможности
bitrix:form.result.new 2–3 часа Готовые шаблоны, событийная модель
BX.SidePanel 4–6 часов Не уводит со страницы, можно встроить CRM-форму
AJAX-запрос 3–5 часов Минимальная форма, полный контроль над дизайном

Заявка должна попадать в CRM (если Битрикс24) или отправляться на email менеджеру. Для CRM используйте crm.lead.add через REST API или событие OnAfterResultAdd веб-формы с обработчиком создания лида. На одном проекте через событие создавали не только лид, но и сделку с привязкой к товару через crm.item.add — клиенты получали предложение с актуальной скрытой ценой.

Почему важно проверять корзину?

Если цена скрыта на странице товара, но товар можно добавить в корзину и оформить заказ, смысл скрытия теряется. Нужно переопределить CatalogBasketProvider или проверять цену в OnBeforeBasketAdd. Это частая ошибка: забывают настроить корзину, и клиенты видят цену только на этапе оформления.

Как организовать массовое обновление признака скрытия?

Для каталогов от 1000 товаров используйте свойство инфоблока PRICE_ON_REQUEST и импорт из CSV или обмен с 1С (CommerceML). Мы пишем скрипт-агент, который за 1-2 дня обходит все товары и устанавливает флаг. Также возможна групповая установка через API инфоблоков.

Скрытие цен по группам пользователей

Для B2B-сценария: авторизованные дилеры видят цену, гости — кнопку запроса. Проверка через $USER->GetUserGroupArray() в шаблоне компонента. Или через права доступа к типу цены — в настройках типа цены задаёте, какие группы пользователей имеют доступ. Метод CCatalogGroup::GetGroupsList() возвращает разрешённые группы.

Сценарий Подход Срок настройки
Скрытие для всех, кнопка «Узнать цену» Свойство инфоблока + доработка шаблона 2–4 часа
Скрытие для гостей, показ для дилеров Права на тип цены + проверка группы 4–6 часов
Массовое управление (1000+ товаров) Свойство + импорт из CSV/1С 1–2 дня

Как мы настраивали скрытие цен в проекте с 4 уровнями дилеров

Конкретный кейс: интернет-магазин запчастей. 4 группы дилеров, у каждой своя цена на один и тот же товар. Розничная цена показывается только гостевым пользователям, дилеры видят свою групповую цену. Задача: скрыть розничную цену и для гостей, и для дилеров, потому что поставщик запретил публиковать цены.

Решение: создали тип цены «По запросу» без привязки к группам. Всем товарам назначили этот тип цены с нулём. В шаблоне catalog.element добавили проверку: если тип цены «По запросу» и цена равна 0, то выводим кнопку «Узнать цену». Для дилеров — дополнительная проверка: если пользователь в группе дилеров, то вместо кнопки показываем его цену (хранится в отдельном свойстве инфоблока). Форму реализовали через BX.SidePanel с формой на bitrix:form.result.new. Заявки уходят в лиды через REST, менеджер видит товар и группу клиента — сразу может ответить.

Какие ошибки допускают чаще всего

  • Забывают настроить права на тип цены — тогда GetOptimalPrice() может вернуть другую доступную цену, и скрытие не сработает.
  • Не проверяют пустую цену — кнопка «Узнать цену» показывается даже если цена фактически есть (равна 0).
  • Не учитывают корзину — если цена скрыта, но товар можно добавить в корзину и оформить заказ, смысл скрытия теряется.
Права доступа к типам цен Метод `CCatalogGroup::GetGroupsList()` возвращает массив разрешённых групп для каждого типа цены. Если ни одна группа не указана, цена видна всем. Убедитесь, что для скрытого типа цены не заданы группы-исключения.

Что входит в работу по настройке скрытых цен

  • Анализ текущей структуры каталога и типов цен.
  • Проектирование логики отображения (по группам, свойствам, условиям).
  • Реализация шаблона компонента с кнопкой и формой.
  • Настройка интеграции с CRM (лиды/сделки).
  • Тестирование на 10+ сценариях (гость, дилер, парсер).
  • Документация по дальнейшему управлению.

Оценим ваш проект за 1 рабочий день. Свяжитесь с нами — подготовим точный план работ и сроки.