В рознице ассортимент один для всех: любой посетитель видит на витрине один и тот же каталог целиком. В опте так почти не бывает. Здесь состав товаров, доступных клиенту, — результат договора: дилер продаёт только свой бренд, дистрибьютор возит только согласованные категории, эксклюзивный партнёр видит линейку, скрытую от остальных, а региональный клиент — только то, что разрешено поставлять в его регион. Свести это к общему каталогу нельзя — нужна механика, которая покажет каждому контрагенту именно его перечень позиций. В 1С-Битрикс её собирают из групп пользователей, прав на разделы и товары, свойств доступности и обмена с 1С — так строится ассортиментная матрица B2B: персональный каталог клиента и доступный ассортимент по договору.
Эта статья — практический разбор того, как показывать каждому клиенту только доступный ему ассортимент на 1С-Битрикс: что такое ассортиментная матрица и чем она отличается от каталога, какими способами её реализуют, когда товары скрывают полностью, а когда показывают «под запрос», как приходят матрицы из 1С по контрагенту и договору, как устроен персональный каталог в личном кабинете и почему персональную выборку нельзя кэшировать «как обычно». Материал из нашей практики разработки сайтов для B2B-компаний — по делу, без обещаний «гарантированного роста продаж».
Коротко
- В B2B состав доступных товаров у каждого клиента свой — это норма, а не исключение, и сайт должен её отражать.
- Ассортиментная матрица — это выборка из общего каталога, доступная конкретному контрагенту по его договору.
- Реализуют её тремя способами: права на разделы и товары, свойство доступности по клиенту и отдельные каталоги-матрицы — обычно в комбинации.
- Недоступное можно скрыть полностью или показать «под запрос» — без цены и кнопки, как инструмент допродаж; это решение бизнеса.
- Матрицы ведут в 1С и переносят обменом по контрагенту и соглашению, а связь «контрагент ↔ пользователь» решает, чью матрицу показать.
- Персональную выборку нельзя держать в общем кэше — иначе клиент увидит чужой ассортимент; статику кэшируют, доступность считают в динамике.
Зачем B2B-клиенту персональный ассортимент
Розничная модель проста: есть каталог, есть товар, есть кнопка «Купить», и всё это одинаково для каждого посетителя. В опте эта простота ломается на первом же клиенте. Оптовый покупатель приходит не с улицы — за ним стоит договор, дилерское соглашение, согласованный список брендов и категорий, региональные условия поставки. Всё это определяет, что именно он вправе видеть и заказывать. Поэтому «один каталог для всех» в B2B — скорее исключение, чем правило.
Причин, по которым у контрагента складывается свой доступный ассортимент, несколько, и обычно они действуют вместе:
- Дилерский профиль. Дилер продаёт только свой бренд или категорию, и показывать ему весь каталог, включая продукцию конкурентов, бессмысленно и вредно.
- Эксклюзивные линейки. Часть номенклатуры поставляется только конкретному партнёру по эксклюзивному соглашению — остальные её видеть не должны.
- Региональные ограничения. Одни товары разрешены к поставке в один регион и запрещены в другой — из-за логистики, сертификации или дистрибьюторских границ.
- Условия договора. В договоре зафиксирован перечень позиций, доступных клиенту, — это и есть доступный ассортимент по договору.
- Сегмент и роль клиента. Дистрибьютор, розничная сеть, конечный переработчик закупают разную номенклатуру, даже работая с одним поставщиком.
Из этого следует главное для сайта: витрина обязана показывать не абстрактный «весь каталог», а доступный ассортимент конкретного покупателя. Причём показывать так, чтобы клиент А не видел позиции, доступные только клиенту Б, — это часть коммерческой тайны и условий партнёрства. Задача разбивается на две части: во-первых, где хранить и как описывать матрицы (обычно источник — 1С), и во-вторых, как безопасно показать каждому только его перечень. Дальше вся статья — про то, как это устроено в 1С-Битрикс: от понятия ассортиментной матрицы до способов реализации, скрытия товаров и обмена.
Что такое ассортиментная матрица
Прежде чем говорить о реализации, нужно чётко развести два понятия, которые в обиходе путают: каталог и ассортиментная матрица. Каталог — это весь товарный справочник компании: всё, что она в принципе продаёт. Ассортиментная матрица — это выборка из каталога, доступная конкретному контрагенту: список позиций, которые именно он вправе видеть и заказывать. Каталог отвечает на вопрос «что вообще есть», матрица — «что доступно этому клиенту».
У одного контрагента в матрице может быть тысяча позиций, у другого — двести, хотя каталог за спиной у обоих один и тот же. По сути матрица — это фильтр, наложенный на каталог по признаку «кому что доступно». Этот фильтр может строиться на разных основаниях, и от основания зависит способ реализации на сайте.
| Понятие | Отвечает на вопрос | Пример |
|---|---|---|
| Каталог | Что компания вообще продаёт | Весь товарный справочник |
| Ассортиментная матрица | Что доступно этому контрагенту | Товары по договору клиента |
| Признак доступности | Виден ли товар клиенту | Свойство «доступен КА-1» |
| Связь клиент ↔ матрица | Чью матрицу показать вошедшему | Пользователь ↔ контрагент 1С |
Важно понять: матрица — это не отдельная копия каталога, а правило видимости, наложенное поверх единого каталога. Держать по полной копии каталога на каждого клиента невозможно и не нужно: товары, описания и фото одни, меняется только состав того, что доступно конкретному покупателю. Поэтому грамотная архитектура матрицы — это не «сто каталогов», а один каталог и механизм, который для каждого вошедшего клиента отбирает его позиции. В 1С-Битрикс этот механизм собирают из групп, прав, свойств доступности и связи с контрагентом — и об этих способах пойдёт речь дальше.
Кому и зачем ограничивают ассортимент
Ограничение ассортимента — не прихоть и не способ усложнить клиенту жизнь. За каждым сценарием стоит бизнес-логика, и понимать её важно, чтобы правильно спроектировать матрицу. Разберём типичные случаи, ради которых персональный ассортимент вообще затевают.
Дилер продаёт только свой бренд. Дилерская сеть устроена так, что каждый дилер отвечает за конкретную марку или продуктовую линейку. Показывать ему в каталоге продукцию других брендов, которую он не имеет права продавать, — значит путать закупщика и провоцировать заказы, которые придётся отклонять. Матрица оставляет дилеру только его бренд.
Эксклюзив по договору. Часть номенклатуры компания поставляет только одному партнёру на эксклюзивных условиях. Эти позиции нельзя показывать остальным клиентам — ни в каталоге, ни в поиске, ни в файлах выгрузки. Здесь ассортимент ограничивают жёстко, с полным скрытием.
Региональные ограничения. Один и тот же товар может быть разрешён к поставке в одном регионе и запрещён в другом — из-за дистрибьюторских границ, сертификации, логистики или ценовой политики по территориям. Клиент из «закрытого» региона не должен видеть недоступные ему позиции.
Согласованный перечень по договору. В крупных контрактах прямо прописан список товаров, доступных клиенту. Всё, что вне списка, для него не существует — это доступный ассортимент по договору в чистом виде.
- Защита каналов продаж. Разные каналы (розница, опт, тендеры) не должны видеть чужие условия и позиции.
- Упрощение выбора. Закупщику проще работать с сотней релевантных позиций, чем искать их в справочнике на десятки тысяч.
- Соблюдение обязательств. Эксклюзив и региональные границы — это обязательства перед партнёрами, нарушение которых бьёт по отношениям.
- Аккуратные заказы. Клиент не оформит то, что ему не положено, — меньше отклонённых заказов и ручных правок у менеджера.
Во всех этих случаях задача одна: показать клиенту только его матрицу и надёжно скрыть чужое. Дальше разберём, какими способами это делают в 1С-Битрикс и чем они отличаются.
Один каталог — разный ассортимент по клиентам
Ключевая идея, на которой держится вся персонализация ассортимента, звучит так: каталог один, а видимость у каждого своя. Не нужно создавать отдельный магазин для каждого дилера или региона. Правильно — держать единый каталог как источник товаров, описаний и характеристик, а поверх него накладывать правило: кто какие разделы и позиции видит.
Это принципиально меняет архитектуру. Вместо десятков витрин, которые надо синхронизировать, — одна витрина и слой доступности, который для каждого вошедшего клиента отбирает его позиции. Товар редактируется в одном месте, фото загружается один раз, а к какому контрагенту он относится — определяется признаком доступности и правами.
У такого подхода несколько важных следствий, которые нужно держать в голове при проектировании:
- Гость видит либо общий каталог, либо ничего. Пока покупатель не вошёл и не привязан к контрагенту, система не знает, чью матрицу показывать, — обычно ему открывают базовый ассортимент или закрытый раздел с приглашением войти.
- Матрица применяется после авторизации. Персональный ассортимент почти всегда живёт за входом: сайт должен знать, кто клиент и к какому договору он привязан.
- Скрытие работает на всех уровнях. Недоступный товар не должен появляться ни в списке каталога, ни в карточке по прямой ссылке, ни в поиске, ни в фильтрах, ни в файлах выгрузки.
- Состав считается на сервере. Решение «показывать ли эту позицию этому клиенту» принимает серверная логика, а не браузер. Прятать товары стилями — не защита.
Именно поэтому персональный ассортимент — это в первую очередь про закрытый показ, а не про красивую фильтрацию. Механика та же, что и у закрытого оптового раздела: группы, права, проверка на сервере. Подробно принцип «ограничивать доступ, а не прятать элементы» мы разбираем в статье про закрытый оптовый раздел на 1С-Битрикс — для персонального ассортимента он критичен, ведь тут утекает не просто прайс, а сам факт наличия эксклюзивных позиций.
Способ 1: группы пользователей и права на разделы
Первый и самый штатный способ построить матрицу — использовать группы пользователей и права на разделы и товары. Это фундамент, встроенный в платформу, и для многих сценариев его достаточно. Логика простая: покупателей делят на группы по профилю (дилеры бренда А, дилеры бренда Б, регион «Юг», эксклюзивные партнёры), а разделам и элементам каталога выдают права доступа для этих групп.
Когда покупатель заходит на сайт, система смотрит, в каких он группах, какие разделы и товары этим группам доступны, и показывает только их. Раздел, закрытый для группы, не появляется в меню каталога; товар, недоступный группе, не выводится в списке и не открывается по прямой ссылке.
| Уровень прав | Что ограничивает | Пример |
|---|---|---|
| Права на раздел | Видимость целой категории | Бренд Б скрыт от дилеров бренда А |
| Права на товар | Видимость отдельной позиции | Эксклюзив открыт только партнёру |
| Группа пользователей | Профиль доступа покупателя | «Дилеры Юг», «Эксклюзив» |
| Связь группы и клиента | В какие группы входит контрагент | КА-1 → группа «Дилеры бренда А» |
Сильная сторона способа — он родной для платформы, надёжный и не требует доработок для базовых сценариев. Права на разделы отлично решают задачу «этой группе клиентов доступны эти категории», а права на товары закрывают точечные случаи вроде эксклюзива. Слабая сторона проявляется там, где матрица становится по-настоящему индивидуальной: если у каждого крупного клиента свой уникальный список позиций, заводить группу под каждого и раздавать права поштучно нереально. Тогда в дело вступают другие способы.
display:none.
Способ 2: свойство доступности по клиенту
Когда матрица индивидуальна и меняется от контрагента к контрагенту, чистых прав на разделы уже не хватает. Тогда используют второй способ — свойство доступности. Идея в том, что у товара появляется признак, который говорит, каким контрагентам (или сегментам) эта позиция доступна. При показе каталога система фильтрует товары по этому признаку относительно вошедшего клиента.
Свойство доступности реализуют по-разному в зависимости от масштаба и того, как данные ведутся в 1С:
- Список доступных сегментов на товаре. У позиции указано, каким профилям клиентов она открыта. Клиент видит товар, если его профиль есть в списке. Подходит, когда доступность привязана к нескольким сегментам, а не к каждому клиенту лично.
- Список товаров на контрагенте. Наоборот — у контрагента хранится перечень доступных ему позиций (его матрица). При заходе система показывает только товары из этого перечня. Подходит, когда у клиента уникальный список по договору.
- Отдельная таблица соответствий. Связка «контрагент — товар» ведётся в отдельной структуре данных, что удобно для больших матриц и быстрых выборок. Это наиболее масштабируемый вариант.
- Признак по региону. Товар помечен разрешёнными регионами, а клиент привязан к региону — доступность вычисляется по совпадению. Удобно для региональных ограничений.
Плюс этого способа — гибкость: он позволяет собрать сколь угодно индивидуальную матрицу, не плодя группы и не копируя каталог. Минус — он почти всегда требует доработки: штатная фильтрация каталога по «доступности конкретному контрагенту» из коробки не работает, её реализуют под проект. Кроме того, свойство доступности нужно чем-то наполнять — и здесь ключевую роль играет обмен с 1С, откуда матрица и приходит. Об обмене подробно поговорим ниже.
Способ 3: отдельные каталоги и матрицы
Третий способ применяют в крупных проектах со сложной структурой — отдельные каталоги или инфоблоки-матрицы. Здесь для сегмента клиентов или направления бизнеса выделяют самостоятельный каталог, а контрагентов привязывают к нужному. Это тяжёлый инструмент, и берут его не от хорошей жизни, а когда матрицы настолько разные, что общий каталог с фильтром доступности становится неповоротливым.
Типичные ситуации, где оправдан отдельный каталог:
- Принципиально разные направления. Компания ведёт несколько бизнесов с непересекающейся номенклатурой, и каждому каналу нужна своя витрина.
- Разные структуры разделов. У одного сегмента каталог устроен по брендам, у другого — по применению; общей структурой их не описать.
- Изоляция эксклюзива. Эксклюзивную линейку выносят в отдельный закрытый каталог, чтобы гарантированно исключить её появление где-либо ещё.
- Разные условия обмена. Направления выгружаются из разных баз 1С или по разным правилам — их проще держать раздельно.
Обратная сторона — стоимость поддержки. Каждый отдельный каталог — это своя структура, свои права, свой обмен и своя синхронизация. Товар, который есть в двух матрицах, придётся вести в двух местах или настраивать сложную логику переноса. Поэтому отдельные каталоги оправданы, когда матрицы действительно самостоятельны, а не когда просто «у клиентов разный список» — последнее эффективнее решается свойством доступности поверх единого каталога.
На практике три способа не конкурируют, а дополняют друг друга. Типичная архитектура: единый каталог, права на разделы задают крупные ограничения (бренды, направления), свойство доступности отвечает за индивидуальные матрицы по контрагентам, а отдельный каталог выделяют только под действительно изолированные направления. Такой слоёный подход даёт и управляемость, и гибкость.
Сравнение способов реализации
Соберём три способа в одну таблицу, чтобы было видно, когда какой уместен. Выбор зависит от того, насколько индивидуальны матрицы, как они ведутся в 1С и какой объём номенклатуры у вас на витрине.
| Способ | Как работает | Когда подходит | Ограничение |
|---|---|---|---|
| Права на разделы и товары | Группы + доступ к категориям и позициям | Матрица по сегментам, немного профилей | Не масштабируется на уникального клиента |
| Свойство доступности | Признак «кому доступно» + фильтр каталога | Индивидуальные матрицы, много клиентов | Требует доработки выборки и обмена |
| Отдельные каталоги-матрицы | Самостоятельная витрина под сегмент | Изолированные направления, эксклюзив | Дорого поддерживать и синхронизировать |
| Комбинация | Права — крупно, доступность — точечно | Реальный B2B со сложной структурой | Нужен продуманный проект и обмен |
Практический ориентир такой. Если персональность сводится к нескольким профилям (дилеры бренда, регионы, эксклюзив) — начинайте с прав на разделы и товары, этого часто достаточно. Если у клиентов уникальные списки по договору — добавляйте свойство доступности и наполняйте его из 1С. Отдельные каталоги оставляйте на крайний случай, когда направления действительно нельзя объединить. И в любом варианте помните: матрица должна работать одинаково в списке, карточке, поиске, фильтрах и выгрузке, иначе скрытое где-нибудь да всплывёт.
Скрытие недоступных vs показ «под запрос»
Когда часть ассортимента клиенту недоступна, встаёт вопрос: что с ней делать на витрине? Есть два принципиальных сценария, и выбор между ними — решение бизнеса, а не техники. Первый — полностью скрыть недоступное. Второй — показать товар, но без цены и кнопки заказа, с пометкой «под запрос» или «уточняйте у менеджера».
Полное скрытие. Клиент видит только то, что может купить, — витрина «чистая» и релевантная. Недоступные позиции не появляются нигде: ни в списке, ни в поиске, ни по прямой ссылке. Это правильный выбор для эксклюзива, чужих брендов и всего, что клиенту в принципе нельзя показывать. Плюс — фокус и порядок; минус — клиент не узнает о товарах, которые теоретически мог бы захотеть.
Показ «под запрос». Товар виден, но без цены и без кнопки «В корзину»; вместо них — предложение связаться с менеджером или оставить заявку. Это инструмент допродаж: клиент видит, что вы возите нужную ему позицию, и обращается за условиями. Подходит для товаров, которые формально не в матрице клиента, но которые можно продать по отдельной договорённости. Плюс — расширение спроса; минус — так нельзя показывать эксклюзив и то, что скрыто принципиально.
На практике сценарии комбинируют: эксклюзив и чужие бренды скрывают жёстко, а часть смежной номенклатуры показывают «под запрос» как точку роста. Главное правило то же, что и везде в персональном ассортименте: скрытое должно быть скрыто на сервере, а не спрятано стилями, иначе клиент найдёт закрытые позиции в исходном коде страницы.
Что видит клиент в каждом сценарии
Чтобы выбор между скрытием и «под запрос» был осознанным, полезно свести воедино, что именно видит клиент в разных ситуациях. Ниже — сравнение того, как одна и та же недоступная позиция выглядит для покупателя в зависимости от политики показа.
| Ситуация | В списке каталога | В поиске | По прямой ссылке |
|---|---|---|---|
| Доступен по матрице | Виден, с ценой и заказом | Находится | Открывается |
| Полностью скрыт | Не отображается | Не находится | Недоступен (заглушка/404) |
| Показан «под запрос» | Виден, без цены и кнопки | Находится | Открывается без цены |
| Гость (не авторизован) | Базовый ассортимент или вход | По базовым правилам | По базовым правилам |
Из таблицы видно главное: у полного скрытия и показа «под запрос» разный уровень защиты. Скрытый товар недоступен на всех уровнях — его нет в списке, он не ищется и не открывается по ссылке. Товар «под запрос» доступен для просмотра везде, скрыты лишь цена и возможность заказа. Поэтому нельзя реализовывать эксклюзив через «под запрос»: если позицию можно открыть по ссылке и найти поиском, факт её существования уже раскрыт. Для по-настоящему закрытого ассортимента работает только полное скрытие на сервере.
Отдельно стоит продумать поведение для гостя. Пока клиент не вошёл, сайт не знает его матрицы, поэтому обычно показывают либо обезличенный базовый ассортимент без цен, либо закрытую витрину с приглашением авторизоваться. Показывать гостю персональные матрицы нельзя — он не привязан к контрагенту, и любая «угаданная» матрица будет чужой.
Персональный каталог клиента в кабинете
Когда матрица настроена, у клиента появляется персональный каталог — та же витрина, но отфильтрованная под его договор. Для закупщика это рабочий инструмент: он заходит и видит только релевантные позиции, без шума из чужих брендов и недоступных категорий. Естественный дом такого каталога — личный кабинет, где рядом лежат заказы, документы, баланс и персональный прайс.
Что отличает персональный каталог клиента от общего:
- Только доступные разделы. В меню каталога — категории из матрицы клиента, без закрытых для него направлений.
- Только свои позиции. В списках и фильтрах — товары, доступные этому контрагенту, а недоступные либо скрыты, либо помечены «под запрос».
- Свои цены и условия. Рядом с товаром — цена клиента, кратность, минимальная партия и остаток, если это предусмотрено договором.
- Быстрый заказ по матрице. Из персонального каталога удобно набирать заказ, не боясь наткнуться на недоступную позицию.
Технически персональный каталог — это не отдельная копия, а тот же каталог, посчитанный для конкретного вошедшего клиента с применением его матрицы. Он всегда за авторизацией: гость персональный каталог не видит. Собрать такой кабинет с персональным каталогом, правами и обменом — отдельная задача, и её мы решаем как услугу: подробнее о ней — в разделе B2B-порталы и личные кабинеты. Персональный каталог естественно дополняет персональный прайс — о ценах в кабинете речь пойдёт ниже.
Доступный ассортимент по договору
Отдельно разберём самый частый в B2B случай — доступный ассортимент по договору. Это перечень товаров, который контрагент вправе видеть и закупать в рамках конкретного соглашения. По сути это ассортиментная матрица, оформленная как условие сотрудничества: в договоре или в соглашении об условиях продаж прямо зафиксировано, что доступно клиенту.
Ограничение по договору может строиться на разных основаниях, и все они укладываются в понятие матрицы:
- По брендам. Клиенту открыты только марки, которые он имеет право продавать по дилерскому соглашению.
- По категориям. Доступны согласованные группы товаров, а прочие направления закрыты.
- По списку позиций. В договоре прямо перечислены артикулы, доступные клиенту, — самая жёсткая форма матрицы.
- По региону. Доступность определяется территорией поставки, привязанной к договору.
Принципиально важно: матрица рождается в договоре и живёт в 1С, а сайт её показывает. Не нужно вести доступный ассортимент вручную в админке сайта — он разойдётся с учётной системой, и клиент увидит на витрине одно, а менеджер в 1С — другое. Правильно — единый источник истины (1С) и регулярный обмен, который приносит на сайт актуальную матрицу по каждому контрагенту. Когда договор меняется — меняется матрица в 1С, и обмен переносит новый состав на витрину. Это ровно тот же принцип, что и с ценами: доступный ассортимент и договорные цены — две грани одного набора условий по клиенту.
Индивидуальные цены на фоне матрицы
Персональный ассортимент и индивидуальные цены — соседние, но разные слои персонализации. Ассортимент отвечает на вопрос «какие товары клиент видит», цены — «по какой цене он их покупает». Их важно не путать: можно ограничить состав товаров, оставив у видимых общий прайс, а можно показать общий ассортимент, но с персональными ценами. На практике оба механизма обычно работают вместе: клиент видит только свою матрицу и в ней — свои договорные цены.
Как эти два слоя сочетаются на витрине:
| Комбинация | Что видит клиент | Когда применяют |
|---|---|---|
| Матрица + свои цены | Только доступные товары, свои цены | Классический B2B по договору |
| Матрица + общий прайс | Свой ассортимент, единая цена | Ограничен состав, цена одна для всех |
| Общий каталог + свои цены | Весь каталог, персональная цена | Ассортимент общий, цены договорные |
| Матрица + «под запрос» | Часть с ценой, часть без цены | Допродажи вне основной матрицы |
Поскольку слои соседние, их почти всегда настраивают в одной связке: та же связь «контрагент ↔ пользователь», тот же обмен с 1С, те же группы и права. Разница в том, что для ассортимента признак управляет видимостью товара, а для цены — его стоимостью. Тему цен во всех деталях — договорные цены, персональные скидки и наценки, приоритет цен, выгрузка прайса — мы подробно разбираем в отдельной статье про индивидуальные прайс-листы и договорные цены для B2B на 1С-Битрикс. Здесь достаточно держать в голове: матрица и цены приходят вместе как единый пакет условий по клиенту, но отвечают за разное.
Обмен ассортиментных матриц с 1С
Раз матрицы рождаются в договоре и живут в 1С, центральную роль в персональном ассортименте играет обмен. Именно он приносит на сайт не только каталог, но и признак доступности: какому контрагенту какие позиции разрешены. Понимать, как устроен обмен, важно, чтобы матрица на витрине совпадала с тем, что в учётной системе, — иначе клиент увидит не тот состав товаров.
Обмен идёт по формату CommerceML — стандарту выгрузки каталога из 1С в Битрикс. Что в контексте персонального ассортимента передаётся и как это ложится на сайт:
- Каталог и структура. Товары, разделы, свойства и характеристики выгружаются как единый каталог — общая основа для всех матриц.
- Признак доступности. Информация о том, каким контрагентам или сегментам доступны позиции, переносится в свойство доступности или в отдельную структуру связей на сайте.
- Соглашения и сегменты. Результат применения соглашений (какому клиенту какая матрица) выгружается и ложится в связь «контрагент — доступные товары».
- Региональные ограничения. Разрешённые регионы для позиций приходят обменом и применяются к клиенту по его региону.
Матрицу в 1С обычно ведут одним из нескольких способов: через соглашение об условиях продаж с привязанным сегментом номенклатуры, через отдельный список товаров на контрагенте или через классификатор доступности. Какой бы способ ни выбрали, принцип один: матрица — это данные из 1С, а сайт их применяет. Как настроить сам обмен со всеми нюансами сопоставления, мы подробно разбираем в статье про интеграцию магазина с 1С — она хорошо дополняет этот материал.
Ещё один принцип, как и с ценами: обмен приносит состав, но не управляет показом. Обмен отвечает за «что кому доступно по данным», а видимость на витрине — за групповые права и серверную фильтрацию каталога уже на стороне сайта. Эти два слоя нельзя путать: если признак доступности пришёл, но выборка каталога его не учитывает, клиент всё равно увидит чужие позиции.
Связь контрагента и пользователя
Ключевое звено персонального ассортимента — связь «контрагент 1С ↔ пользователь сайта». Без неё сайт не знает, чью матрицу показывать вошедшему клиенту. Признак доступности пришёл обменом и привязан к контрагенту; учётная запись на сайте — к человеку. Связать одно с другим — обязательное условие, без которого вся персонализация не работает.
Как это обычно устроено:
- Регистрация и модерация. Клиент регистрируется, менеджер проверяет заявку и сопоставляет учётную запись с контрагентом в 1С. С этого момента система знает, кто перед ней.
- Определение матрицы. По связи с контрагентом сайт понимает, какая ассортиментная матрица (или сегмент) применима к этому пользователю.
- Применение при заходе. При каждом входе система подставляет матрицу клиента: фильтрует каталог, поиск и фильтры по его доступности.
- Поддержание связи. При изменениях в 1С (новый договор, смена сегмента) связь и матрица обновляются обменом, а не правятся вручную на витрине.
Целостность этой связи критична. Если она потеряна или неверна, возможны два плохих исхода: клиент увидит либо базовый ассортимент вместо своего (и не найдёт нужных позиций), либо — что хуже — чужую матрицу с товарами, которые ему видеть нельзя. Поэтому связь «контрагент ↔ пользователь» проверяют так же тщательно, как и саму матрицу: при регистрации, при обмене и при любых изменениях структуры контрагентов в 1С. Один пользователь может быть связан с одним контрагентом; сотрудники одной компании — с общим контрагентом и его матрицей.
Быстрый заказ по своему ассортименту
Персональный ассортимент раскрывается не только в просмотре каталога, но и в быстром заказе. Закупщик в B2B редко ходит по карточкам — он набирает заказ по спецификации, по артикулам, из истории прошлых закупок. И здесь матрица работает как страховка: в быстрый заказ попадают только доступные клиенту позиции, а недоступные система не пропустит.
Как матрица помогает быстрому заказу:
- Ввод по артикулу в рамках матрицы. Клиент вводит артикул или название — подсказки и результаты ограничены его доступным ассортиментом, чужих позиций в них нет.
- Загрузка спецификации. Если закупщик загружает список для заказа, система принимает только позиции из матрицы, а недоступные помечает как невозможные к заказу.
- Повтор прошлого заказа. При повторении заказа из истории учитывается актуальная матрица: если позиция вышла из доступного ассортимента, клиент это увидит.
- Персональный прайс как основа заказа. Из персонального каталога и прайса удобно набирать позиции пачками — по сути это ускоренный ввод заказа по своей матрице.
Смысл в том, что клиент физически не может заказать то, что ему недоступно, — ни случайно, ни намеренно. Это снимает нагрузку с менеджера: не нужно отклонять заказы с «неправильными» позициями и объяснять, почему их нельзя купить. Быстрый заказ по матрице — это одновременно и удобство для закупщика, и защита от заказов вне договора. Тема быстрого ввода заказа, кратности и спецификаций в B2B обширна, и во многом она пересекается с ассортиментом: доступный состав и правила заказа приходят из 1С вместе.
Поиск и фильтр в рамках доступного
Одна из самых частых дыр в персональном ассортименте — поиск и фильтры. Разработчики закрывают списки каталога, но забывают, что поиск и умный фильтр — это отдельные механизмы выборки, и они тоже должны учитывать матрицу. Если этого не сделать, клиент, набрав название в поиске, найдёт товар, который для него скрыт, — и вся защита рассыпается.
Что нужно учесть, чтобы поиск и фильтры уважали матрицу:
- Поиск в рамках доступного. Поисковая выдача ограничивается ассортиментом клиента: недоступные позиции не находятся, даже если точно совпадает артикул.
- Фильтры по своему составу. Умный фильтр строит значения (бренды, свойства, диапазоны) по доступным клиенту товарам, а не по всему каталогу, — иначе в фильтре появятся бренды, которых у клиента нет.
- Счётчики и пагинация. Количество найденного и число страниц считаются по матрице клиента, а не по общему каталогу.
- Автоподсказки. Подсказки при вводе в строке поиска тоже ограничены доступным ассортиментом.
Технически это означает, что фильтр доступности должен применяться на уровне выборки — и в каталоге, и в поиске, и в фасетном фильтре, — а не «доклеиваться» поверх готового результата. Особенно коварен умный фильтр: если его индекс построен по всему каталогу без учёта матрицы, он выдаст клиенту фасеты и товары вне его ассортимента. Поэтому индекс фильтра и поисковый индекс проектируют с учётом персональной выборки с самого начала. Это тот случай, когда «закрыли список, а забыли про поиск» превращается в утечку: клиент найдёт эксклюзив соседа простым запросом.
Кэш и персональная выборка
Здесь начинается самая коварная часть персонального ассортимента — кэширование. Каталог для скорости кэшируется: страница считается один раз и потом быстро отдаётся всем. Для обычной розницы это идеально. Для персональной матрицы — источник самой опасной ошибки: клиент видит чужой ассортимент из кэша. Контрагент А заходит первым, его список с его матрицей попадает в общий кэш, и следующий клиент Б получает ассортимент А. Это одновременно ошибка навигации и утечка того, что вы возите эксклюзивно для другого партнёра.
Что нужно учитывать при кэшировании персональной выборки:
- Персональная выборка — не в общий кэш. Состав каталога, зависящий от клиента, нельзя держать в кэше, общем для всех. Иначе матрица одного клиента утечёт к другому.
- Динамическая часть на доступность. Признак видимости, цену, кнопку заказа выносят в динамическую область, которая считается для конкретного пользователя. Статику (фото, описание) кэшируют отдельно.
- Кэш с учётом матрицы. Если кэшировать каталог, ключ кэша должен учитывать контрагента или его матрицу (сегмент доступности), а не быть общим для всех.
- Проверка на сервере. Итоговое решение «показывать ли позицию» принимается серверной логикой по вошедшему пользователю, а не только выбором ветки кэша.
Правильная архитектура — разделить страницу на две части: обезличенную статику (описание, характеристики, фото), которую можно смело кэшировать и отдавать композитным сайтом мгновенно, и персональный слой (состав доступного, цена, доступность, кнопка), который считается для конкретного клиента при каждом заходе. Тогда сайт остаётся быстрым, а ассортименты не путаются между клиентами. Это тот случай, когда производительность и безопасность нужно согласовать заранее, на этапе проектирования, а не латать после жалобы «мне показали чужой товар».
Большие матрицы и производительность
Персональный ассортимент дорого обходится производительности, и на больших каталогах это чувствуется. Если у вас десятки тысяч товаров, сотни контрагентов и у каждого своя матрица, наивная фильтрация «отобрать доступные позиции на каждый заход» по всему каталогу положит сайт. Поэтому большие матрицы проектируют с оглядкой на нагрузку с самого начала.
Что помогает держать персональную выборку быстрой на больших объёмах:
- Фильтровать только видимое. Матрицу применяют к товарам, которые клиент реально видит на странице (текущая страница каталога, карточка), а не пересчитывают весь каталог сразу.
- Индекс доступности. Связь «контрагент — доступные товары» хранят в структуре, оптимизированной под быструю выборку, а не перебирают весь справочник при каждом запросе.
- Кэш персонального слоя. Рассчитанную матрицу клиента можно кэшировать на короткое время под конкретного пользователя, чтобы не пересчитывать при каждом клике.
- Предрасчёт при обмене. Состав матрицы, пришедший из 1С, хранят в готовом виде, а не вычисляют формулами на лету при каждом показе.
- Согласованные индексы поиска и фильтра. Поисковый и фасетный индексы строят с учётом доступности, чтобы фильтрация по матрице не превращалась в полный перебор.
Отдельная нагрузка — выгрузка большого персонального каталога или прайса в файл. Матрица на десятки тысяч строк формируется небыстро, поэтому такую выгрузку часто делают фоновой задачей: клиент нажимает «сформировать», файл готовится в фоне, а ссылка приходит, когда он готов. Это лучше, чем держать закупщика с крутящимся индикатором и рисковать таймаутом. На больших B2B-каталогах производительность персональной выборки — не второстепенная деталь, а условие того, что сайтом вообще можно пользоваться.
Реализация персонального ассортимента пошагово
Соберём всё в последовательность. Названия пунктов меню могут отличаться в зависимости от версии и редакции платформы и конфигурации 1С, но порядок общий: от структуры каталога к персональности и заканчивая проверкой под клиентами.
- Опишите ассортиментную политику. Зафиксируйте, кому что доступно и по какому основанию: бренды, категории, списки, регионы, эксклюзив. Это делает бизнес, а не система.
- Спроектируйте матрицы в 1С. Опишите доступный ассортимент в соглашениях, сегментах номенклатуры или списках на контрагентах — так, чтобы матрица велась в одном месте.
- Выберите способ реализации. Права на разделы — для крупных ограничений, свойство доступности — для индивидуальных матриц, отдельный каталог — для изолированных направлений. Обычно комбинация.
- Настройте группы и права. Заведите группы под профили клиентов, выдайте права на разделы и товары — это каркас видимости.
- Настройте обмен и признак доступности. Проверьте, что каталог и признак доступности корректно приходят из 1С и ложатся в свойство или структуру связей на сайте.
- Свяжите контрагентов и пользователей. Настройте связь учётных записей сайта с контрагентами 1С — по ней подставляется матрица вошедшему клиенту.
- Определите политику скрытия. Решите, что скрывать полностью, а что показывать «под запрос», и реализуйте оба режима на сервере.
- Примените матрицу везде. Проверьте, что доступность учитывается в списке, карточке, поиске, фильтрах, быстром заказе и выгрузке — на уровне выборки.
- Настройте кэш персонального слоя. Вынесите состав доступного в динамику, кэшируйте только обезличенную статику — чтобы клиент не увидел чужой ассортимент.
- Проверьте под клиентами. Зайдите под разными контрагентами и убедитесь: каждый видит только свою матрицу, скрытое не находится поиском и не открывается по ссылке, чужой эксклюзив не утекает.
Последний шаг критичен и его часто недооценивают. Персональный ассортимент легко «выглядит правильно» под одним тестовым клиентом, но ломается на деталях: поиск нашёл скрытую позицию; кэш смешал двух покупателей; фильтр показал бренд не из матрицы; связь с контрагентом потерялась. Проверка под несколькими реальными сценариями, включая поиск скрытых позиций и осмотр исходного кода глазами клиента, ловит эти проблемы до того, как эксклюзив одного партнёра окажется на экране у другого.
Частые ошибки
Эти промахи в персональном ассортименте повторяются чаще всего — зная их, вы избежите утечки эксклюзива и показа клиенту чужого ассортимента:
- Кэш показал чужой ассортимент. Персональная выборка попала в общий кэш, и один клиент увидел товары, доступные только другому. И ошибка навигации, и утечка эксклюзива.
- Забыли про поиск и фильтр. Список каталога закрыли, а поиск и умный фильтр по-прежнему находят скрытые позиции — защита рассыпалась.
- Скрытие стилями. Недоступные товары прячут через CSS, а они остаются в коде страницы и открываются по прямой ссылке — это не защита.
- Матрицу ведут и на сайте, и в 1С. Два источника расходятся: на витрине один состав, в 1С другой. Источник истины должен быть один — 1С.
- Потеряна связь контрагента. Учётная запись не связана с контрагентом 1С — клиент видит базовый ассортимент вместо своего или чужую матрицу.
- Эксклюзив показан «под запрос». Закрытую линейку выводят без цены вместо полного скрытия — сам факт наличия позиции уже раскрыт.
- Сотни отдельных каталогов «на каждого». Персональность собирают копиями каталога вместо свойства доступности — витрины становятся неуправляемыми.
- Наивная фильтрация на больших матрицах. Доступность считают перебором всего каталога при каждом заходе — сайт тормозит или падает под нагрузкой.
- Матрица не применяется в быстром заказе. Через ввод артикула или загрузку спецификации клиент оформляет недоступные позиции — менеджеру приходится их отклонять.
Чек-лист
Короткий список для приёмки персонального ассортимента перед запуском:
- Политика описана. Зафиксировано, кому что доступно и по какому основанию: бренды, категории, списки, регионы, эксклюзив.
- Матрицы в 1С готовы. Доступный ассортимент ведётся в 1С через соглашения, сегменты или списки на контрагентах.
- Способ выбран. Права, свойство доступности и отдельные каталоги распределены по задачам — обычно в комбинации.
- Обмен и доступность проверены. Каталог и признак доступности корректно приходят из 1С и ложатся в свойство или связи на сайте.
- Связь клиентов настроена. Учётные записи связаны с контрагентами 1С, матрица подставляется вошедшему клиенту.
- Политика скрытия определена. Ясно, что скрывать полностью, а что показывать «под запрос», и оба режима работают на сервере.
- Матрица применяется везде. Доступность учитывается в списке, карточке, поиске, фильтрах, быстром заказе и выгрузке.
- Кэш безопасен. Персональная выборка не в общем кэше; клиент не видит чужой ассортимент.
- Производительность проверена. Большая матрица отдаётся быстро, выгрузка больших списков вынесена в фон.
- Проверено под клиентами. Витрина проверена под несколькими контрагентами, включая поиск скрытых позиций и осмотр исходного кода — чужой ассортимент не утекает.
Вывод
Персональный ассортимент для B2B-клиента на 1С-Битрикс — это не одна настройка, а слоёная система. В основе — ассортиментная политика: кому что доступно и почему (дилер продаёт свой бренд, эксклюзив закрыт для остальных, регион ограничивает поставки, договор фиксирует список). Эта политика живёт в 1С как матрицы и соглашения, привязанные к контрагенту. Обмен переносит каталог и признак доступности на сайт, права и свойство доступности решают, кто что видит, а связь «контрагент ↔ пользователь» определяет, чью матрицу показать. Клиент в результате видит персональный каталог — только доступный ему ассортимент, с нужными разделами, позициями и, если предусмотрено, своими ценами.
Два принципа держат всю конструкцию. Первый — единый источник истины: матрица рождается в договоре и ведётся в 1С, сайт её показывает, и вручную на витрине состав не дублируют, иначе он разойдётся с учётной системой. Второй — скрывать нужно на сервере, а не оформлением: недоступное не должно уходить в ответ ни в списке, ни в поиске, ни в фильтре, ни по прямой ссылке, ни в выгрузке, а персональную выборку нельзя держать в общем кэше — иначе эксклюзив одного партнёра утечёт к другому. Опишите ассортиментную политику явно, настройте обмен матриц, свяжите клиентов с контрагентами, примените доступность на всех точках входа и вынесите персональную выборку в динамику — и проверьте всё под несколькими клиентами. Разобрать конкретный сценарий под ваш каталог и договоры можно в рамках нашей услуги — начните с сайта для B2B-компании или B2B-портала и личного кабинета, а смежные материалы соберём в рубрике «B2B и опт».