Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Отфильтровать в каталоге товары по группе участников

Вопрос задан: 28 июня 2026 в 06:00 | Просмотров: 7 Использованные MCP инструменты: searchDocs

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

В 1С-Битрикс отфильтровать товары в каталоге по группе участников (группе пользователей) можно несколькими способами. Ниже приведены основные подходы.

1. Права доступа к инфоблоку (встроенный механизм)

Самый простой способ — настроить права доступа на уровне инфоблока. Если у группы пользователей нет прав на чтение элементов, эти товары не будут отображаться.

Настройка через административный раздел:

  • Перейдите в Контент → Инфоблоки → Типы инфоблоков → [ваш тип] → [ваш инфоблок].
  • На вкладке Доступ выберите группы пользователей и установите уровень доступа (например, R — чтение).
  • Для понижельного/поэлементного управления включите опцию Расширенное управление правами в настройках инфоблока.

Программно при создании инфоблока:

use Bitrix\Main\Loader;
Loader::includeModule('iblock');

$iblock = new \CIBlock;
$result = $iblock->Add([
    'IBLOCK_TYPE_ID' => 'catalog',
    'NAME'           => 'Каталог товаров',
    'CODE'           => 'products',
    'API_CODE'       => 'Products',
    'ACTIVE'         => 'Y',
    'LID'            => ['s1'],
    'GROUP_ID'       => [
        2 => \CIBlockRights::PUBLIC_READ,  // Все пользователи — чтение
        8 => \CIBlockRights::EDIT_ACCESS,  // Контент-редакторы — запись
    ],
]);

Группа 2 — все пользователи (включая неавторизованных). Идентификаторы групп можно узнать в Настройки → Пользователи → Группы пользователей (/bitrix/admin/group_admin.php).

2. Разные типы цен для разных групп (GroupAccessTable)

Можно создать несколько типов цен (розничная, оптовая, партнёрская) и привязать их к разным группам пользователей через Bitrix\Catalog\GroupAccessTable.

Создание типа цены с привязкой к группам:

$wholesalePriceTypeId = \CCatalogGroup::Add([
    'NAME'           => 'WHOLESALE',
    'BASE'           => 'N',
    'SORT'           => 200,
    'USER_GROUP'     => [2],      // группы, которые видят эту цену
    'USER_GROUP_BUY' => [8],      // группы, которые могут покупать по этой цене
    'USER_LANG'      => [
        'ru' => 'Оптовая цена',
        'en' => 'Wholesale price',
    ],
]);

Проверка доступа к типу цены программно:

use Bitrix\Catalog\GroupAccessTable;

$accessRows = GroupAccessTable::getList([
    'select' => ['CATALOG_GROUP_ID', 'GROUP_ID', 'ACCESS'],
    'filter' => ['=CATALOG_GROUP_ID' => $basePriceTypeId],
])->fetchAll();

foreach ($accessRows as $row) {
    if ($row['ACCESS'] === 'ACCESS_VIEW') {
        echo "Группа {$row['GROUP_ID']} видит цену\n";
    }
    if ($row['ACCESS'] === 'ACCESS_BUY') {
        echo "Группа {$row['GROUP_ID']} может покупать по этой цене\n";
    }
}

Компонент bitrix:catalog автоматически выбирает нужный тип цены исходя из групп текущего пользователя. Метод \CCatalogProduct::GetOptimalPrice() также учитывает группы пользователя.

3. Программная фильтрация в result_modifier.php компонента

Если нужно отфильтровать сами товары (не только цены), добавьте код в файл result_modifier.php шаблона компонента bitrix:catalog (или bitrix:catalog.section):

global $USER;
$userGroups = $USER->GetUserGroupArray();

// Например, показываем товары только для группы с ID=8
if (!in_array(8, $userGroups)) {
    // Скрываем определённые товары — фильтруем $arResult
    foreach ($arResult['ITEMS'] as $key => $item) {
        // Ваша логика: скрываем товары по какому-то условию
        // Например, по значению свойства или по ID товара
        if (in_array($item['ID'], $excludedProductIds)) {
            unset($arResult['ITEMS'][$key]);
        }
    }
}

4. Пользовательское свойство инфоблока "Привязка к группам"

Можно создать свойство инфоблока, в котором указывать, для каких групп доступен товар. Затем фильтровать выборку по этому свойству.

Пример создания свойства типа "Список" с вариантами групп:

$property = new \CIBlockProperty;
$propertyId = $property->Add([
    'IBLOCK_ID'      => $iblockId,
    'NAME'           => 'Группы доступа',
    'CODE'           => 'ACCESS_GROUPS',
    'PROPERTY_TYPE'  => 'L',       // список
    'LIST_TYPE'      => 'C',       // флажки (множественный выбор)
    'MULTIPLE'       => 'Y',
    'VALUES'         => [
        ['VALUE' => 'Группа 1', 'XML_ID' => '1', 'SORT' => 100],
        ['VALUE' => 'Группа 2', 'XML_ID' => '2', 'SORT' => 200],
        ['VALUE' => 'Группа 8', 'XML_ID' => '8', 'SORT' => 300],
    ],
]);

Фильтрация при выборке:

global $USER;
$userGroups = $USER->GetUserGroupArray();

$filter = [
    'IBLOCK_ID' => $iblockId,
    'ACTIVE'    => 'Y',
    'PROPERTY_ACCESS_GROUPS' => $userGroups, // фильтр по значению свойства
];

$items = \CIBlockElement::GetList(
    [],
    $filter,
    false,
    false,
    ['ID', 'NAME', 'PROPERTY_ACCESS_GROUPS']
);

5. Скидки для групп пользователей

Метод \CCatalogDiscount::GetDiscountByProduct() позволяет получать скидки для конкретного товара с учётом групп пользователя:

global $USER;
$userGroups = $USER->GetUserGroupArray();

$discounts = \CCatalogDiscount::GetDiscountByProduct(
    $productId,
    $userGroups,
    'N',
    [$basePriceTypeId],
    SITE_ID
);

Рекомендация

Выбор подхода зависит от задачи:

  • Скрыть товары целиком — используйте права доступа к инфоблоку (способ №1).
  • Показать разные цены разным группам — используйте типы цен + GroupAccessTable (способ №2).
  • Гибкая фильтрация — используйте свойство инфоблока + программную фильтрацию (способы №3, №4).

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс