-10%Переходите к нам от другого подрядчика — дадим скидку на первый этап работ

B2B-портал для дилерской сети: как разграничить цены, склады и контент между дилерами

B2B-портал для дилерской сети на 1С-Битрикс: разграничение цен и остатков между дилерами, общий каталог и партнёрские выплаты

Один дилер в Новосибирске случайно увидел в личном кабинете остатки и цены дилера из Екатеринбурга — просто изменив номер в адресной строке. Инцидент невелик по масштабу, но по сути — это провал всей идеи дилерской сети: каждый партнёр должен быть уверен, что его коммерческие условия и объёмы закупок видны только ему и головной компании, а не соседям по сети, с которыми он формально не конкурирует, но которым точно не обязан показывать свою экономику.

Ниже разбираем, как устроен B2B-портал для дилерской сети на 1С-Битрикс: общий каталог, управляемый централизованно, и строго изолированные данные каждого дилера — цены, остатки, заказы, статистика; иерархия дилеров и субдилеров; партнёрские бонусы и выплаты. Материал фокусируется именно на слое сети из многих дилеров — если нужен разбор функциональности одного кабинета, см. отдельную статью «Личный кабинет дилера на 1С-Битрикс: закрытый опт и повторные заказы». Материал обобщает практику по разработке B2B-порталов для дилерских сетей на 1С-Битрикс.

Коротко

  • Портал дилерской сети — это общий каталог и контент, управляемые централизованно, поверх строго изолированных данных каждого дилера.
  • Разграничение данных должно быть встроено в каждый запрос к базе, а не только скрывать элементы интерфейса — иначе прямой запрос по идентификатору вскроет чужие данные.
  • Иерархия «дилер → субдилер» требует продумать, чьи данные и в каком объёме видны на каждом уровне.
  • Партнёрские бонусы считаются по объёму закупок и должны опираться на данные из учётной системы, а не на ручной пересчёт.
  • Разделяйте общий контент товара и коммерческие данные (цена, остаток) архитектурно с самого начала — это не мешает расти сети без переделки структуры.

Чем портал сети отличается от кабинета одного дилера

Личный кабинет одного дилера решает задачу «дилер видит свою цену, свою историю заказов, может оформить повторную закупку». Это важная, но локальная задача — она не решает вопрос, что происходит, когда таких дилеров становится пятьдесят, они работают из разных городов, часть из них имеет собственных субдилеров, а головная компания хочет централизованно управлять каталогом и контентом, при этом не давая ни одному дилеру доступа к коммерческим условиям другого.

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

Общий каталог карточки, контент, фото Дилер А своя цена свой остаток Дилер Б своя цена свой остаток Дилер В своя цена свой остаток данные изолированы друг от друга
Схема: карточка товара и контент общие для всей сети, а цена и остаток — отдельный слой данных, изолированный по каждому дилеру.

Архитектура: общий каталог и изолированные данные дилера

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

Коммерческий слой — это данные, которые различаются по дилерам: цена (обычно через тип цен, привязанный к группе дилера или конкретному контрагенту), остаток (привязан к складу дилера или региональному распределительному центру), статус заказов дилера, история его закупок. Технически коммерческий слой хранится отдельно от карточки товара — либо как отдельные свойства с привязкой к дилеру, либо, при большом числе дилеров, в отдельных таблицах или highload-блоках, где каждая запись явно содержит идентификатор дилера-владельца.

Такое разделение — не архитектурная прихоть, а прямое следствие требования безопасности: если цена и остаток хранятся прямо в карточке товара без привязки к дилеру, значит, они одни на всех, и персонализация становится невозможной в принципе. Разделение слоёв нужно закладывать на старте — переносить уже работающий каталог на новую модель данных, когда сеть выросла до полусотни дилеров, заметно дороже, чем спроектировать это с первого дня.

Разграничение прав: как один дилер не видит другого

Скрыть чужие данные в интерфейсе — недостаточная мера защиты. Если дилер А физически не может видеть ссылку на заказ дилера Б в меню, но при этом прямой запрос к странице заказа по известному или подобранному идентификатору отдаёт данные без проверки владельца, — это уязвимость, а не защита. Такие случаи (доступ к чужим данным по прямому URL с изменённым числовым идентификатором) — одна из самых частых практических утечек в самодельных B2B-порталах.

Правильная модель — проверка владельца записи на уровне каждого обращения к данным, а не только на уровне пунктов меню. Практически это означает: любой компонент или обработчик, который отдаёт заказ, остаток, историю или документ, должен сначала проверить, что текущий авторизованный пользователь имеет право на именно эту запись (по совпадению ID дилера в записи и в сессии пользователя), и только потом отдавать данные. Такую проверку стоит вынести в общий слой — единую точку, через которую проходит любой доступ к коммерческим данным дилера, — чтобы не дублировать логику проверки в каждом отдельном компоненте и не рисковать забыть её где-то одном месте.

Важно: тестируйте разграничение прав не только позитивными сценариями («дилер А видит свои данные»), но и явными негативными — попыткой дилера А открыть URL с идентификатором заказа дилера Б. Если такой запрос успешно отдаёт данные — это критическая уязвимость, которую нужно закрыть до запуска, а не после первого инцидента.

Иерархия сети: дилеры и субдилеры второго уровня

У части дилерских сетей структура двухуровневая: дилер первого уровня закупает у головной компании и перепродаёт дальше своим субдилерам — более мелким партнёрам в своём регионе. Портал в такой структуре должен поддерживать не два, а фактически три роли одновременно: головная компания видит всю сеть, дилер первого уровня видит свои данные и данные своих субдилеров (но не других дилеров первого уровня и их субдилеров), а субдилер видит только свои данные в рамках витрины своего дилера.

УровеньЧто видитЧего не видит
Головная компанияВсю сеть: всех дилеров, всех субдилеров, все цены и объёмы—
Дилер 1-го уровняСвои данные, данные своих субдилеровДанные других дилеров 1-го уровня и их субдилеров
Субдилер 2-го уровняТолько свои данные в рамках витрины своего дилераДанные дилера 1-го уровня и других субдилеров

Технически такая иерархия реализуется через явное поле «родительский дилер» у каждого субдилера и рекурсивную (или заранее развёрнутую) проверку принадлежности при выдаче данных. Важно решить заранее, видит ли дилер первого уровня закупочную цену, по которой субдилер берёт товар (обычно да, поскольку это его наценка), и видит ли субдилер цену, по которой дилер первого уровня закупает у головной компании (как правило нет — это уже не его уровень коммерческой информации).

Свои цены и остатки для каждого дилера

Цена для дилера в 1С-Битрикс реализуется через типы цен каталога, привязанные к группе пользователей дилера или конкретному контрагенту — тот же механизм, что применяется для персональных цен в обычном личном кабинете B2B. Особенность сети в том, что типов цен становится не один-два (розница/опт), а десятки — по числу групп дилеров с разными условиями, и управление этим множеством типов цен само по себе требует продуманной структуры, иначе список типов цен в админке превращается в нечитаемую простыню.

Остатки для сети дилеров — отдельная сложность, если у дилеров есть собственные региональные склады или распределительные центры, а не единый склад головной компании. В этом случае каталог должен показывать остаток не «вообще», а именно на складе, релевантном конкретному дилеру, — а это уже не просто тип цены, а привязка остатков к комбинации «товар + склад дилера», которая должна корректно приходить из учётной системы по каждому складу отдельно.

Централизованный контент и локальные витрины

Головная компания обычно хочет управлять контентом централизованно — единые описания товаров, актуальные фото, маркетинговые баннеры — чтобы не зависеть от того, насколько аккуратно каждый дилер ведёт свою часть каталога. При этом дилеру часто важно иметь узнаваемую витрину: свой логотип, контакты, иногда — свой поддомен вида dealer-name.company.ru.

Технически это разделяется на два независимых слоя: общий контент товаров (инфоблок, редактируется централизованно) и брендирование витрины конкретного дилера (шаблон, логотип, контакты, привязанные к его учётной записи или поддомену). Дилер, как правило, не должен иметь возможность редактировать сам контент товара — иначе один дилер сможет случайно или намеренно исказить описание, которое увидят клиенты другого дилера через общий каталог, если карточка действительно общая для всех.

Партнёрские выплаты и бонусная программа

Многие дилерские сети строят мотивацию не только на скидке от прайса, но и на бонусной программе — дополнительной выплате или начислении, зависящем от объёма закупок дилера за период. Формула обычно прогрессивная: чем больше объём за квартал, тем выше процент бонуса, иногда с разными ставками по категориям товаров.

Для портала это означает отдельный раздел личного кабинета дилера — «Бонусы» или «Партнёрская программа» — с текущим накопленным объёмом за период, прогнозом бонуса при сохранении текущего темпа закупок, и историей уже начисленных и выплаченных сумм. Данные для расчёта (фактический объём отгрузок и оплат) должны приходить из учётной системы обменом, а сам расчёт формулы бонуса может выполняться либо в 1С с последующей выгрузкой готовой суммы, либо на стороне портала по синхронизированным данным об объёме — оба варианта рабочие, но правило должно быть одно и применяться последовательно, без расхождений между тем, что видит дилер на портале, и тем, что реально начисляет бухгалтерия.

Как это выглядит в админке 1С-Битрикс

Структура дилерской сети настраивается через группы пользователей с иерархией «родитель — потомок» и привязкой типов цен и складов к каждой группе. Схематично карточка дилера в админке выглядит так:

Дилер: ООО «Уралтехснаб» (субдилер) Группа Субдилер 2-го уровня Родительский дилер ООО «Дилер-Урал» Склад/регион РЦ Екатеринбург Доступ к данным ✓ Свои заказы и остатки — Данные родительского дилера (нет) — Данные других субдилеров (нет) Бонусная программа за квартал Объём 2,1 млн ₽ · ставка бонуса 4% · начислено из 1С
Схема: карточка дилера хранит группу, родительского дилера (для субдилеров), привязанный склад и данные бонусной программы. Реальные подписи зависят от реализации проекта.

Связь с 1С: откуда берутся цены и остатки по дилерам

Как и в обычном личном кабинете B2B, источником истины для цен, остатков и объёма закупок по каждому дилеру должна быть учётная система, а не ручной ввод на портале. Специфика сети в том, что обмен должен учитывать не один набор цен и остатков, а множество — по числу групп дилеров и, если есть, по числу региональных складов.

На практике это означает, что структура обмена (CommerceML или иной формат) должна явно передавать привязку «тип цены/склад → дилер», а не просто общий прайс. Если в 1С уже настроена работа с несколькими организациями, складами или сегментами клиентов, интеграция во многом опирается на эту существующую структуру; если в 1С такого разделения ещё нет, его придётся сначала выстроить там, прежде чем переносить на портал, — обмен не может передать данные, которых в учётной системе просто не существует в нужном разрезе.

Риски утечки данных между дилерами и как их закрыть

Стоит отдельно перечислить типичные векторы утечки данных между дилерами в портале сети — практический опыт показывает, что почти все инциденты укладываются в короткий список.

Единственный надёжный способ закрыть все эти векторы — не полагаться на разрозненные проверки в разных местах кода, а провести отдельный аудит безопасности перед запуском портала сети, целенаправленно проверяя каждый экран и каждый метод API негативными сценариями «а что если запросить чужие данные напрямую».

Частые ошибки при проектировании портала сети

Мини-FAQ. Нужен ли отдельный домен каждому дилеру или достаточно поддомена на общем? Для большинства сетей достаточно поддомена (dealer.company.ru) — он проще в администрировании и не требует отдельного SSL-сертификата и DNS-настроек на стороне дилера. Отдельный домен имеет смысл только для крупных дилеров с собственным сильным брендом, которым важно полностью скрыть связь с головной компанией в адресной строке.

Чек-лист перед стартом проекта

  1. Структура сети описана. Число уровней иерархии (дилеры, субдилеры), число групп с разными коммерческими условиями.
  2. Разделение контента и коммерческих данных заложено. Ясно, что общее для всех (карточка товара), а что индивидуально по дилеру (цена, остаток).
  3. Модель прав спроектирована на уровне данных. Проверка владельца записи предусмотрена для каждого типа данных — заказы, документы, остатки, — а не только для экранов интерфейса.
  4. Источник цен и остатков по дилерам определён. Ясно, как 1С передаёт привязку «тип цены/склад → дилер» через обмен.
  5. Формула бонусной программы зафиксирована. Если бонусы есть — понятно, откуда берутся данные для расчёта и кто их проверяет.
  6. Запланирован аудит безопасности. Перед запуском предусмотрена проверка разграничения прав негативными сценариями.

Вывод

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

Частые вопросы

Чем портал дилерской сети отличается от обычного личного кабинета дилера?

Личный кабинет дилера решает задачу одного дилера — его цены, его заказы, его документы. Портал дилерской сети — это надстройка над множеством таких кабинетов с общей инфраструктурой: единый каталог и контент управляются централизованно из головной компании, а данные каждого дилера (цены, остатки, заказы, статистика) строго изолированы друг от друга на уровне прав доступа. Если нужен разбор функциональности одного кабинета — модерация регистрации, персональные прайсы, заказ по артикулу, — это отдельная тема, разобранная в статье «Личный кабинет дилера на 1С-Битрикс».

Как физически гарантируется, что один дилер не увидит данные другого?

На уровне архитектуры это разграничение должно быть встроено в каждый запрос к данным, а не в отдельные экраны интерфейса. Каждая запись — заказ, остаток, цена — на уровне базы данных привязана к конкретному дилеру (или его группе), и любая выборка данных для отображения проходит через обязательную фильтрацию по этой привязке. Скрыть ссылку в интерфейсе недостаточно: если прямой запрос к данным не проверяет владельца записи, дилер может получить чужие данные, зная или подобрав прямой идентификатор записи (например, номер заказа в URL).

Можно ли дать региональному дилеру собственный домен или поддомен?

Да, это частый сценарий для крупных дилерских сетей — например, dealer-name.company.ru или отдельный домен, который дилер использует для работы со своими клиентами. Портал при этом остаётся одной системой с общим каталогом и логикой, а поддомен — это витрина с фирменным оформлением дилера поверх общих данных. Важно не путать это с полноценной мультирегиональностью (разные цены и склады по городам для розничной сети) — здесь задача другая: витрина одного дилера, а не сайт с региональными версиями.

Как считаются партнёрские бонусы и выплаты дилерам?

Обычно по формуле, зависящей от объёма закупок дилера за период (месяц, квартал), иногда с прогрессивной шкалой — чем больше объём, тем выше процент бонуса. Данные для расчёта (сумма отгрузок, оплаты) должны приходить из учётной системы, а сам расчёт и начисление бонуса отражаются в личном кабинете дилера как отдельный раздел с историей начислений. Ручной пересчёт бонусов вне системы по итогам месяца — источник ошибок и повод для споров с дилерами, поэтому имеет смысл автоматизировать расчёт даже при относительно простой формуле.

Что делать с общим контентом (карточки товара, баннеры), если каталог у всех дилеров общий, а цены разные?

Разделяйте контент и коммерческие данные на уровне архитектуры с самого начала: карточка товара, описание, фото и характеристики — это общий инфоблок, который управляется централизованно и одинаков для всех; цена, остаток на конкретном складе, доступность — это данные, привязанные к конкретному дилеру или его региону, которые подставляются поверх общей карточки в момент отображения. Смешение этих двух слоёв (например, хранение цены прямо в свойствах товара без разбивки по дилеру) быстро упирается в потолок, когда дилерская сеть растёт.

Сколько стоит разработка портала для дилерской сети на 1С-Битрикс?

Стоимость определяется в первую очередь числом уровней иерархии (просто дилеры или ещё и субдилеры второго уровня), сложностью расчёта партнёрских бонусов и глубиной интеграции с учётной системой по ценам и остаткам на нескольких складах. Портал для сети из нескольких десятков дилеров с единым уровнем иерархии и базовым набором функций обойдётся дешевле, чем многоуровневая сеть с субдилерами, собственными витринами и сложной формулой бонусов. Точная оценка требует брифа по структуре дилерской сети конкретной компании.

Поделиться: Telegram ВКонтакте WhatsApp

Растёт дилерская сеть, а данные партнёров пересекаются?

Спроектируем портал с общим каталогом и строго изолированными ценами, остатками и бонусами по каждому дилеру.

Редакция B2Bsite

Редакция студии B2Bsite. С 2014 года команда проектирует и оптимизирует интернет-магазины на 1С-Битрикс: SEO-структуру каталога, микроразметку Schema.org, умный фильтр и связку с обменом 1С для среднего и крупного бизнеса.

← Все статьи блога