В рознице цена одна для всех: ценник на витрине одинаков и для случайного покупателя, и для постоянного. В опте так почти не бывает. Здесь цена — результат переговоров, объёмов и истории отношений, поэтому у каждого контрагента она своя. Один и тот же товар одному партнёру продаётся по одной цене, другому — по другой, а третьему вообще по договорной, зафиксированной в отдельном соглашении. Свести это к общему прайсу нельзя — нужна механика, которая покажет каждому клиенту именно его цифру. В 1С-Битрикс её собирают из типов цен, групп пользователей, персональных скидок и обмена с 1С — так строятся индивидуальные цены B2B: персональный прайс и договорные цены по контрагенту.
Эта статья — практический разбор того, как показывать каждому клиенту свою цену на 1С-Битрикс: где заканчивается базовый механизм цен по группам и начинается настоящая персональность, как приходят договорные цены и соглашения из 1С, как устроен персональный прайс-лист с выгрузкой в Excel и PDF, как расставить приоритет между акцией и договорной ценой и почему персональные цены нельзя кэшировать «как обычно». Материал из нашей практики разработки сайтов для B2B-компаний — по делу, без обещаний «гарантированного роста продаж».
Коротко
- В B2B цена у каждого клиента своя — это норма, а не исключение, и сайт должен её отражать.
- Базовый механизм — типы цен и группы: он даёт цены по категориям покупателей, но не уникальную цену на каждого.
- Настоящая персональность приходит из 1С: договорные цены и соглашения об условиях продаж, привязанные к контрагенту.
- Поверх базы работают персональные скидки и наценки — точечная корректировка под конкретного клиента.
- Клиент видит «свою цену» в каталоге, карточке и личном кабинете, а прайс выгружает в Excel или PDF в своей цене.
- Приоритет цен (акция vs договорная) описывают явно, а персональные цены нельзя держать в общем кэше — иначе клиент увидит чужую цену.
Почему в B2B у каждого клиента своя цена
Розничная модель проста: есть товар, есть цена, есть кнопка «Купить». В опте эта простота ломается на первом же клиенте. Оптовый покупатель приходит не с улицы — за ним стоит договор, история закупок, согласованный объём и переговоры менеджеров. Всё это выливается в конкретную цену, которая справедлива именно для него и не обязана совпадать с ценой соседа по рынку. Поэтому «одна цена для всех» в B2B — скорее исключение, чем правило.
Причин, по которым у каждого контрагента складывается своя цена, несколько, и обычно они действуют вместе:
- Объём закупок. Тот, кто берёт вагонами, платит меньше того, кто берёт коробками. Цена привязана к обороту клиента.
- История отношений. Давний партнёр с безупречной платёжной дисциплиной получает условия лучше, чем новичок.
- Договорённости и договор. В договоре может быть зафиксирована конкретная цена или формула на весь срок — это договорная цена, которую нельзя «перебить» общей акцией.
- Сегмент и роль клиента. Дилер, дистрибьютор, розничная сеть и конечный переработчик покупают по-разному, даже один и тот же товар.
- Условия оплаты. Предоплата, отсрочка, факторинг — всё это отражается в цене как надбавка или скидка.
Из этого следует главное для сайта: витрина обязана показывать не абстрактную «оптовую цену», а цену конкретного покупателя. Причём показывать так, чтобы клиент А не видел цену клиента Б — это коммерческая тайна. Задача разбивается на две части: во-первых, где хранить и как считать индивидуальные цены (обычно источник — 1С), и во-вторых, как безопасно показать каждому только его цифру. Дальше вся статья — про то, как это устроено в 1С-Битрикс: от базового механизма цен до договорных цен, персональных прайсов и обмена.
Базовый механизм: типы цен и группы
Прежде чем говорить о персональности, нужно понять фундамент, на котором она строится. В 1С-Битрикс за «разные цены разным покупателям» отвечают две связанные сущности: типы цен и группы пользователей. Это тот самый базовый механизм, из которого потом вырастают и договорные цены, и персональные прайсы.
Тип цены — это отдельный прайс в торговом каталоге. У одного товара может быть несколько цен разных типов: розничная, оптовая, дилерская. Каждый тип цены — как отдельная колонка в общей таблице цен. Группа пользователей — это категория покупателя: гость, розница, оптовик, дилер. Связываются они правами: у каждого типа цены указано, какие группы могут его видеть и покупать по нему. Оптовая цена открыта только группе оптовиков, дилерская — только дилерам.
| Сущность | Отвечает на вопрос | Пример |
|---|---|---|
| Тип цены | Сколько стоит товар в этом прайсе | Розничная, Оптовая, Дилерская |
| Группа пользователей | Кто этот покупатель | Гость, Опт, Дилеры, VIP |
| Права на тип цены | Какая группа видит какой прайс | Оптовая → только группе «Опт» |
| Приоритет типа цены | Какую цену показать, если доступно несколько | Оптовая важнее розничной |
Когда покупатель заходит на сайт, система смотрит, в каких он группах, какие типы цен этим группам доступны, и показывает подходящую цену — с учётом приоритета, если доступно несколько. Это надёжно решает задачу «цены по категориям»: все оптовики видят оптовый прайс, все дилеры — дилерский. Подробно эту связку мы разбираем в отдельной статье про оптовые цены по группам клиентов в 1С-Битрикс — она хороший фундамент для этого материала.
Где групп мало, а нужна персональность
Механизм типов цен и групп прекрасно работает, пока клиенты делятся на несколько понятных категорий. Проблема начинается, когда персональность становится по-настоящему индивидуальной. Представьте: у вас двести дилеров, и у каждого по договору своя цена на ключевые позиции. Завести двести типов цен и двести групп — путь в тупик: это двести прайсов, которые нужно поддерживать, синхронизировать и защищать правами. Система формально позволит, но управлять этим станет невозможно.
Вот граница, за которой чистый механизм «типы цен + группы» перестаёт масштабироваться:
- Уникальная цена у каждого клиента. Не «у всех дилеров −20%», а «у этого дилера на этот товар ровно такая цифра по договору».
- Персональные позиции. Клиенту согласован спеццена только на часть номенклатуры, а на остальное действует общий прайс.
- Частые изменения. Договорные цены меняются по переговорам, и держать их вручную в типах цен нереально.
- Условия из учётной системы. Цена рождается в 1С — в договоре, соглашении, из формулы, — и сайт должен её отражать, а не пересчитывать заново.
Ответ на все эти случаи один: персональность не «эмулируют» сотнями типов цен, а берут из 1С. Учётная система — родное место для договорных цен, соглашений и индивидуальных условий. Сайт получает готовый результат обменом и показывает его нужному покупателю. При этом базовый механизм типов цен никуда не девается — он остаётся каркасом, на который ложатся персональные корректировки. Дальше разберём, как именно это устроено: сначала персональные цены по контрагенту, затем договорные цены и соглашения, потом скидки и наценки.
Персональные цены по контрагенту
Персональная цена по контрагенту — это цена, привязанная не к группе «вообще», а к конкретному покупателю (юрлицу, договору, клиенту из 1С). Один и тот же товар в одной и той же группе «Дилеры» может стоить для двух разных контрагентов по-разному, потому что у каждого свой договор. Это и есть шаг от «цен по категориям» к настоящей индивидуальности.
На практике персональные цены по контрагенту реализуют несколькими способами, и выбор зависит от того, насколько уникальны цены и как их ведут в 1С:
| Подход | Как работает | Когда подходит |
|---|---|---|
| Узкие типы цен | Отдельный тип цены под сегмент или крупного клиента | Немного уровней, редкие изменения |
| Персональные скидки | База + индивидуальная скидка/наценка на клиента | Цена = общий прайс ± корректировка |
| Цены по соглашению из 1С | Цена приходит привязанной к контрагенту/договору | Договорные цены, много клиентов |
| Расчёт в личном кабинете | Цена считается для вошедшего клиента на лету | Сложные формулы, большие прайсы |
В реальных проектах эти подходы комбинируют. Типичная архитектура такая: групповые типы цен задают базу («опт», «дилер»), а поверх на конкретного контрагента накладываются персональные скидки или договорные цены из 1С на отдельные позиции. Клиент видит итог — свою цену, — не задумываясь, из чего она сложилась. Важно, что персональная цена всегда привязана к авторизованному покупателю: пока человек не вошёл под своей учётной записью, связанной с контрагентом, система не знает, чью цену показывать, и даёт базовую или «цену по запросу».
Договорные цены и соглашения из 1С
Договорная цена — это цена, зафиксированная в договоре или соглашении с конкретным контрагентом. Её особенность в том, что она «защищённая»: пока действует договор, клиент покупает именно по ней, и общие изменения прайса или акции её, как правило, не касаются. Родное место таких цен — учётная система, то есть 1С. Там они живут в двух формах.
Отдельный тип цены под договор. В 1С заводят тип цены, который применяется к конкретному контрагенту или группе договоров. При обмене он выгружается на сайт и сопоставляется с типом цены каталога. Плюс — простота и наглядность. Минус — если таких договоров много, типов цен становится слишком много.
Соглашение об условиях продаж. Это более гибкий объект 1С, где для контрагента или сегмента описаны условия: какой тип цены применять, какие скидки и наценки, валюта, кратность, отсрочка. Соглашение — как «карточка правил» с конкретным партнёром. Меняются условия — правят соглашение, а не десятки цен. На сайт обменом приходит результат применения соглашения: персональный тип цены и/или персональные скидки для этого покупателя.
| Форма в 1С | Что фиксирует | Как приходит на сайт |
|---|---|---|
| Тип цены под договор | Конкретные цены для контрагента | Отдельный тип цены каталога |
| Соглашение об условиях продаж | Тип цены + скидки + условия | Персональная цена и скидки клиента |
| Скидки в соглашении | Процент или сумма корректировки | Персональная скидка на покупателя |
| Условия отгрузки | Кратность, минимальная партия | Ограничения в корзине |
Ключевой принцип: цены рождаются в 1С, сайт их показывает. Не нужно дублировать договорную цену вручную в админке сайта — она разойдётся с учётной системой, и клиент в корзине увидит одно, а в счёте из 1С другое. Правильно — единый источник истины (1С) и регулярный обмен, который приносит на сайт актуальные договорные цены и соглашения. Как настроить сам обмен, мы подробно разбираем в статье про интеграцию магазина с 1С.
Персональные скидки и наценки
Не всегда персональность — это отдельная цена. Часто клиенту согласована не новая цифра, а корректировка к общему прайсу: «этому дилеру −7% ко всему оптовому прайсу», «этому клиенту +3% за срочную отгрузку». Это персональные скидки и наценки — механизм, который экономит силы там, где заводить отдельный тип цены избыточно.
Логика простая: есть база (групповой тип цены), а поверх неё для конкретного покупателя применяется его личная корректировка. Итоговая цена = база ± персональная скидка/наценка. Плюс подхода в том, что база остаётся единой и управляется централизованно, а персональность добавляется точечно, не размножая прайсы.
- Персональная скидка на клиента. Процент или сумма, которая применяется ко всем (или к части) товаров для конкретного контрагента. Приходит из 1С вместе с соглашением.
- Наценка за условия. Например, надбавка за отсрочку платежа или срочную доставку — тоже персональная, привязанная к договору.
- Скидка на категорию. Клиенту дают −10% на конкретный бренд или раздел, а на остальное — общий прайс.
- Накопительная логика. Скидка зависит от оборота клиента и пересчитывается по данным из 1С — сайт получает уже готовый процент.
Важный нюанс — как складываются несколько скидок. Если клиенту одновременно положены персональная скидка, акционная и скидка за объём, нужно заранее решить: они суммируются, перемножаются или применяется только максимальная? Это правило должно быть одинаковым на сайте и в 1С, иначе цена в корзине разойдётся с ценой в счёте. Правило комбинирования скидок — такая же часть ценовой политики, как и сами цены, и его формулируют явно, а не оставляют «на усмотрение системы».
Индивидуальный прайс-лист: просмотр
Когда у клиента своя цена на сотни позиций, ему нужен не только ценник в карточке, но и персональный прайс-лист — единый список всех доступных ему товаров с его ценами. Это рабочий инструмент закупщика: по нему он планирует заказы, сверяет цены, готовит спецификации. На сайте персональный прайс живёт в личном кабинете как отдельная страница «Мой прайс» или «Прайс-лист».
Что показывает персональный прайс на витрине:
- Только доступные товары. В прайсе — номенклатура, которую этот клиент может купить, с учётом его сегмента и договора. Лишнего он не видит.
- Его цены. Каждая строка — с индивидуальной ценой клиента: договорной, оптовой со скидкой, персональной. Не абстрактный прайс «вообще».
- Кратность и остатки. Рядом с ценой — минимальная партия, кратность упаковки и наличие, чтобы закупщик сразу понимал условия.
- Быстрый заказ. Из прайса удобно добавлять позиции в корзину пачками — по сути это ускоренный ввод заказа по спецификации.
Технически персональный прайс — это тот же каталог, но отфильтрованный и посчитанный для конкретного вошедшего клиента. Он всегда за авторизацией: гость персональный прайс не видит в принципе. Часто прайс делают в виде компактной таблицы с поиском и фильтром по разделам — закупщику важнее скорость и полнота, чем красивые карточки. Персональный прайс — естественная часть личного кабинета дилера, где рядом лежат история заказов, документы и баланс. Как устроен такой кабинет, мы разбираем в статье про личный кабинет дилера на 1С-Битрикс.
Выгрузка прайса в Excel и PDF
Просмотр прайса на сайте — половина дела. Закупщику часто нужен файл: чтобы согласовать внутри компании, загрузить в свою систему, распечатать или отправить директору. Поэтому персональный прайс почти всегда дополняют выгрузкой в Excel и PDF. И здесь есть тонкость, на которой многие спотыкаются: выгрузка тоже должна быть персональной и безопасной.
Как правильно организовать выгрузку персонального прайса:
- Генерируйте файл на лету. Прайс формируется в момент запроса — в цене конкретного вошедшего клиента, с актуальными остатками и кратностью. Не заранее подготовленный статический файл.
- Проверяйте права на сервере. Обработчик выгрузки сначала определяет, кто запрашивает файл, и формирует прайс именно в его цене. Чужую цену клиент получить не должен.
- Не отдавайте прайс по прямой ссылке. Если файл лежит по известному URL и доступен всем, кто знает адрес, — это утечка. Отдавайте через обработчик со сверкой прав.
- Выбирайте формат под задачу. Excel — для дальнейшей работы с данными (сортировка, загрузка в систему клиента). PDF — для согласования и печати, где важен неизменный вид.
- Указывайте актуальность. В шапке файла — дата формирования и имя контрагента, чтобы было видно, чей это прайс и на какой момент.
Excel обычно делают в виде таблицы: артикул, название, единица, кратность, остаток, цена клиента. Такой файл закупщик легко обработает у себя. PDF — оформленный документ с логотипом и реквизитами, пригодный для отправки и печати. Оба формируются из одних и тех же данных — персонального прайса клиента, — просто в разной «обёртке». Главное правило то же, что и для показа цен: в файл попадает только цена того, кто его запросил, и никак иначе.
Закрытый показ цен: только своя
Индивидуальные цены неотделимы от безопасности. Если у каждого клиента своя договорная цена, то показать её нужно так, чтобы клиент А ни при каких условиях не увидел цену клиента Б. Договорная цена — коммерческая тайна, и её утечка к конкуренту или соседу по рынку бьёт по отношениям с партнёром. Поэтому персональные цены всегда живут за закрытым показом.
Что это означает на практике:
- Цена — только после входа. Пока покупатель не авторизован и не привязан к контрагенту, персональной цены он не видит: ему показывают базовую, «цену по запросу» или приглашение войти.
- Только своя цена в ответе сервера. В HTML и JS страницы попадает исключительно цена вошедшего клиента. Чужие цены не должны «на всякий случай» уходить в браузер — их оттуда достанут.
- Прайс и выгрузка под правами. Персональный прайс и его файлы доступны только своему клиенту, с серверной проверкой прав.
- Никакого «скрытия стилями». Спрятать чужую цену через CSS — не защита: она есть в коде страницы. Правильно вообще не выводить чужие цены в ответ.
По сути закрытый показ индивидуальных цен — это частный случай закрытого оптового раздела, только закрывается не «опт вообще», а «цена конкретного контрагента от всех остальных». Механика та же: группы, права, проверка на сервере. Подробно принцип «ограничивать, а не прятать» мы разбираем в статье про закрытый оптовый раздел на 1С-Битрикс — для индивидуальных цен он критичен вдвойне, потому что тут утекает не общий прайс, а персональные условия каждого клиента.
Кратность, минимальная партия, условия
Индивидуальная цена в B2B почти никогда не ходит одна — с ней связаны условия отгрузки: кратность упаковки, минимальная партия, единица измерения. Клиент видит не просто «цена 100 рублей», а «100 рублей за штуку, продаётся коробками по 5, минимальный заказ — 2 коробки». Всё это тоже часто индивидуально и тоже приходит из соглашения в 1С.
| Условие | Что задаёт | Как влияет на заказ |
|---|---|---|
| Кратность упаковки | Товар продаётся кратно упаковке | Корзина округляет количество до кратного |
| Минимальная партия | Нижний порог заказа позиции | Меньше нельзя оформить |
| Единица измерения | Шт, упаковка, кг, метр | Цена и остаток считаются в этой единице |
| Минимальная сумма заказа | Порог по всей корзине | Заказ не оформить ниже суммы |
Почему это важно для персональных цен: у разных контрагентов условия могут отличаться так же, как цены. Одному дилеру товар отгружают коробками по 5, другому — паллетами по 100, и цена за единицу у них разная именно из-за объёма партии. Поэтому кратность и минимальную партию нельзя жёстко «зашить» в товар — они приходят из соглашения вместе с ценой и применяются к конкретному клиенту. В корзине эти условия должны соблюдаться: система не даст оформить некратное количество или партию меньше минимальной.
Тема кратности, упаковок и заказа по спецификации в B2B-каталоге обширна и заслуживает отдельного разбора — как её реализуют на 1С-Битрикс, мы показываем в статье про B2B-каталог: кратность, остатки и заказ по спецификации. Здесь достаточно запомнить: индивидуальная цена и индивидуальные условия отгрузки — это единый пакет условий по клиенту, и приходят они вместе.
Приоритет цен: акция vs договорная
Один из самых коварных вопросов индивидуального ценообразования: какая цена победит, если их несколько? В B2B у одного товара для одного клиента могут одновременно существовать базовая цена, персональная договорная и акционная. Система должна знать, какую показать как итоговую — и это решение нельзя оставлять «на самотёк», иначе цена в корзине окажется неожиданной и для клиента, и для менеджера.
Типичный конфликт: у клиента договорная цена на товар, и одновременно на этот товар запущена общая акция. Что показать? Однозначного ответа нет — всё зависит от политики компании. Возможны разные правила:
| Правило приоритета | Что показывается клиенту | Когда применяют |
|---|---|---|
| Договорная защищена | Всегда договорная, акция игнорируется | Цена по договору зафиксирована жёстко |
| Акция важнее | Акционная, если она ниже договорной | Стимулирование спроса, распродажа |
| Минимальная из доступных | Самая низкая из всех цен клиента | Клиенту всегда выгодная цена |
| Приоритет по типу цены | Цена типа с высшим приоритетом | Настройка приоритетов типов цен |
Каждое правило по-своему логично, но выбрать нужно одно — и оно должно работать одинаково на сайте и в 1С. Если сайт показывает акционную цену, а 1С в счёте выставляет договорную, клиент справедливо возмутится. Поэтому приоритет цен — это не техническая мелочь, а часть ценовой политики, которую формулирует бизнес и одинаково реализуют по обе стороны обмена.
В 1С-Битрикс инструментом расстановки приоритетов служат сами типы цен (у них есть настройка приоритета) и правила работы с корзиной (скидки, наценки, правила пересчёта). Договорную цену обычно делают «защищённой» — задают ей высокий приоритет или выносят из-под действия общих акций, чтобы согласованная с партнёром цифра не менялась внезапно. Главное — сформулировать правило явно и проверить его на пересекающихся случаях.
Обмен с 1С: типы цен и соглашения
Раз цены рождаются в 1С, центральную роль в индивидуальном ценообразовании играет обмен. Именно он приносит на сайт типы цен, договорные цены, соглашения и скидки. Понимать, как устроен обмен, важно, чтобы персональные цены на витрине совпадали с тем, что в учётной системе, — иначе клиент увидит одно, а в счёте получит другое.
Обмен идёт по формату CommerceML — стандарту выгрузки каталога и цен из 1С в Битрикс. Что в контексте индивидуальных цен передаётся и как это ложится на сайт:
- Типы цен. Розничная, оптовая, дилерская и договорные типы выгружаются и сопоставляются один к одному с типами цен торгового каталога сайта.
- Значения цен. Для каждого товара приходят цены всех типов. Персональные и договорные — как значения соответствующих типов цен.
- Соглашения и скидки. Результат применения соглашений (какому клиенту какой тип цены и какая скидка) переносится на сайт — обычно как персональная цена и скидка на контрагента.
- Условия отгрузки. Кратность, единицы измерения, минимальные партии тоже приходят обменом и применяются к товару и клиенту.
Критически важно правильно сопоставить типы цен при настройке обмена: если оптовая цена 1С «приедет» не в тот тип цены сайта, она откроется не той группе и клиент увидит чужую цифру. Это одна из самых частых причин расхождения цен. Поэтому сопоставление типов цен проверяют вручную после настройки обмена и после каждого изменения структуры цен в 1С.
Ещё один принцип: обмен приносит цифры, но не управляет доступом. Кто какую цену видит — решают права на типы цен уже на стороне сайта. 1С передаёт значения, а видимость настраивается в Битриксе. Эти два слоя нельзя путать: обмен отвечает за «сколько стоит», права — за «кто видит». Как настроить сам обмен со всеми нюансами, мы подробно разбираем в статье про интеграцию магазина с 1С.
Выгрузка цен по клиенту из 1С
Отдельно стоит разобрать самый «персональный» сценарий обмена — выгрузку цен по конкретному клиенту. Когда договорных цен много и они уникальны, выгружать всем всё нерационально: файл обмена раздувается, а на сайт попадают чужие цены, которые потом надо прятать правами. Более аккуратный подход — передавать персональные цены адресно, привязанными к контрагенту.
Как это обычно устроено:
- Привязка цены к контрагенту. В 1С договорная цена или скидка привязана к контрагенту (или договору). При обмене она передаётся вместе с признаком, к кому относится.
- Связь контрагента и пользователя сайта. Учётная запись на сайте связана с контрагентом из 1С. По этой связи система понимает, чьи персональные цены показывать вошедшему пользователю.
- Хранение персональных цен. На сайте персональные цены хранятся привязанными к покупателю — как отдельные значения цен, скидки или расчётные правила для конкретного контрагента.
- Показ на лету. При заходе клиента система подставляет его персональные цены поверх базового прайса — в каталоге, карточке и прайсе.
Ключевое звено здесь — связь «контрагент 1С ↔ пользователь сайта». Без неё сайт не знает, чью цену показывать. Эту связь настраивают при регистрации и модерации клиента: менеджер сопоставляет учётную запись с контрагентом в 1С, и с этого момента обмен адресно приносит персональные цены нужному пользователю. Если связь потеряна или неверна, клиент увидит либо базовую цену вместо своей, либо — что хуже — чужую. Поэтому целостность этой связи проверяют так же тщательно, как и сами цены.
Отображение «ваша цена» в каталоге и ЛК
Когда персональные цены посчитаны и привязаны к клиенту, остаётся показать их так, чтобы закупщику было удобно и понятно. «Ваша цена» должна встречать клиента везде, где он видит товар: в списке каталога, в карточке товара, в корзине и в личном кабинете. И желательно — с явной пометкой, что это именно его, персональная цена.
Где и как показывают персональную цену:
- Список каталога. В плитке или строке товара — цена клиента с пометкой «ваша цена» или «по договору», а не общий прайс. Так закупщик сразу видит свои условия.
- Карточка товара. Крупно — персональная цена, рядом можно показать базовую зачёркнутой, чтобы была видна выгода. Тут же — кратность и остаток.
- Корзина и оформление. Цены пересчитываются в персональные, применяются скидки и наценки, соблюдается кратность. Итог корзины = то, что будет в счёте.
- Личный кабинет. Вкладка «Мой прайс» со всеми ценами клиента, история заказов в его ценах, документы.
Пометка «ваша цена» — не косметика, а элемент доверия. Закупщик должен понимать, что видит именно свои договорные условия, а не случайную цифру. Особенно это важно, когда персональная цена заметно ниже базовой: явная пометка «по договору» или «персональная цена» снимает вопросы и подчёркивает ценность партнёрства. И наоборот — если клиент не понимает, его это цена или общая, он лишний раз позвонит менеджеру, а то и усомнится в корректности сайта.
Личный кабинет — естественный дом для всей персональной картины: цены, прайс, заказы, документы, баланс в одном месте. Собрать такой кабинет под ключ — отдельная услуга, а как он устроен внутри, мы показываем в разборе личного кабинета дилера на 1С-Битрикс.
Кэш и персонализация: осторожно с ценами
Здесь начинается самая коварная часть индивидуальных цен — кэширование. Каталог для скорости кэшируется: страница считается один раз и потом быстро отдаётся всем. Для обычной розницы это идеально. Для персональных цен — источник самой опасной ошибки: клиент видит чужую цену из кэша. Контрагент А заходит первым, его страница с его договорной ценой попадает в общий кэш, и следующий клиент Б получает цену А. Это одновременно ошибка и утечка коммерческих условий.
Что нужно учитывать при кэшировании индивидуальных цен:
- Персональные цены — не в общий кэш. Цену, которая зависит от клиента, нельзя держать в кэше, общем для всех. Иначе она утечёт между покупателями.
- Динамическая часть на цену. Персональную цену, скидку, кнопку заказа выносят в динамическую область, которая считается для конкретного пользователя. Статику (фото, описание) кэшируют отдельно.
- Кэш с учётом клиента. Если кэшировать каталог с ценами, ключ кэша должен учитывать покупателя (или его тип цены/соглашение), а не быть общим.
- Проверка на сервере. Итоговое решение «чью цену показать» принимается серверной логикой по вошедшему пользователю, а не только выбором ветки кэша.
Правильная архитектура — разделить страницу на две части: обезличенную статику (описание, характеристики, фото), которую можно смело кэшировать и отдавать композитным сайтом мгновенно, и персональный слой (цена, скидка, доступность, кнопка), который считается для конкретного клиента при каждом заходе. Тогда сайт остаётся быстрым, а цены не путаются между клиентами. Это тот случай, когда производительность и безопасность нужно согласовать заранее, на этапе проектирования, а не латать после жалобы «мне показали чужую цену».
Большие прайсы и производительность
Индивидуальные цены дорого обходятся производительности, и на больших каталогах это чувствуется. Если у вас десятки тысяч товаров, сотни контрагентов и у каждого свои цены и скидки, наивный расчёт «посчитать все персональные цены на каждый заход» положит сайт. Поэтому большие прайсы проектируют с оглядкой на нагрузку с самого начала.
Что помогает держать персональные цены быстрыми на больших объёмах:
- Считать только видимое. Персональные цены вычисляют для товаров, которые клиент реально видит на странице (текущая страница каталога, карточка), а не для всего каталога сразу.
- Кэш персонального слоя. Рассчитанные персональные цены клиента можно кэшировать на короткое время под конкретного пользователя, чтобы не пересчитывать при каждом клике.
- Предрасчёт при обмене. Персональные цены и скидки, пришедшие из 1С, хранят в готовом виде, а не пересчитывают формулами на лету при каждом показе.
- Пагинация и ленивая подгрузка. Персональный прайс на тысячи строк не отдают одной страницей — используют постраничную выдачу и подгрузку по мере прокрутки.
- Индексы и структура хранения. Персональные цены хранят так, чтобы выборка «цены этого клиента на эти товары» была быстрой, а не перебором всего.
Отдельная нагрузка — выгрузка большого прайса в Excel или PDF. Файл на десятки тысяч строк формируется небыстро, поэтому такую выгрузку часто делают фоновой задачей: клиент нажимает «сформировать прайс», файл готовится в фоне, а ссылка на скачивание приходит, когда он готов. Это лучше, чем держать клиента с крутящимся индикатором и рисковать таймаутом. На больших B2B-каталогах производительность персональных цен — не второстепенная деталь, а условие того, что сайтом вообще можно пользоваться.
Модель данных: как всё связано
Соберём разрозненные механизмы в единую картину. Индивидуальные цены — это не один переключатель, а связка нескольких сущностей, каждая из которых отвечает за свой аспект. Понимание модели данных помогает не запутаться, где что настраивать и почему цена вышла именно такой.
| Сущность | Где живёт | За что отвечает |
|---|---|---|
| Контрагент | 1С | Кто клиент, его договоры и соглашения |
| Соглашение об условиях | 1С | Тип цены, скидки, условия по клиенту |
| Тип цены | 1С ↔ Сайт | Отдельный прайс, сопоставляется обменом |
| Пользователь и группа | Сайт | Учётная запись, связь с контрагентом |
| Права на тип цены | Сайт | Кто видит какую цену |
| Персональная скидка | 1С → Сайт | Корректировка к базе для клиента |
| Приоритет цен | Сайт (по политике) | Какая цена итоговая при пересечении |
Читается эта модель так: контрагент и его условия описаны в 1С (соглашение, договорные цены, скидки), обмен переносит результат на сайт (типы цен, значения, скидки), учётная запись пользователя связана с контрагентом, права на типы цен решают, кто что видит, а правило приоритета выбирает итоговую цену. Всё вместе даёт «вашу цену» для конкретного вошедшего клиента.
Главная мысль модели — разделение ответственности. 1С отвечает за «сколько стоит и по каким условиям», обмен — за «перенести это на сайт», а сайт — за «показать нужному клиенту и никому больше». Каждая сущность на своём месте: цены не ведут вручную на сайте (иначе разойдутся с 1С), доступ не настраивают в 1С (это дело прав на сайте), приоритет описывают явно (иначе цена непредсказуема). Когда эта модель в голове ясна, настройка индивидуальных цен перестаёт быть магией и становится последовательностью понятных шагов.
Реализация индивидуальных цен пошагово
Соберём всё в последовательность. Названия пунктов меню могут отличаться в зависимости от версии и редакции платформы и конфигурации 1С, но порядок общий: от базы к персональности и заканчивая проверкой под клиентами.
- Настройте базовый механизм. Заведите типы цен (розничная, оптовая, дилерская) и группы пользователей, свяжите их правами — это каркас, на который ляжет персональность.
- Опишите ценовую политику. Зафиксируйте, где цена групповая, где договорная, как считаются скидки и наценки и какое правило приоритета (акция vs договорная). Это делает бизнес, а не система.
- Настройте соглашения в 1С. Для контрагентов с индивидуальными условиями создайте соглашения об условиях продаж: тип цены, скидки, кратность, отсрочка.
- Настройте обмен и сопоставление. Проверьте, что типы цен 1С корректно сопоставлены с типами цен сайта, а персональные цены и скидки приходят привязанными к контрагенту.
- Свяжите контрагентов и пользователей. Настройте связь учётных записей сайта с контрагентами 1С — по ней подставляются персональные цены вошедшему клиенту.
- Доработайте показ «вашей цены». В списке, карточке, корзине и кабинете выводите персональную цену с пометкой, соблюдайте кратность и условия.
- Сделайте персональный прайс и выгрузку. Вкладка «Мой прайс» в кабинете, выгрузка в Excel и PDF в цене клиента с проверкой прав на сервере.
- Настройте кэш персонального слоя. Вынесите персональные цены в динамику, кэшируйте только обезличенную статику — чтобы клиент не увидел чужую цену.
- Проверьте под клиентами. Зайдите под разными контрагентами и убедитесь: каждый видит только свою цену, прайс и выгрузка персональны, чужие цены не утекают, корзина совпадает со счётом 1С.
Последний шаг критичен и его часто недооценивают. Индивидуальные цены легко «выглядят правильно» под одним тестовым клиентом, но ломаются на пересечениях: у клиента и договорная цена, и акция; кэш смешал двух покупателей; связь с контрагентом потерялась. Проверка под несколькими реальными сценариями, включая осмотр исходного кода глазами клиента, ловит эти проблемы до того, как договорная цена одного партнёра окажется на экране у другого.
Частые ошибки
Эти промахи в индивидуальном ценообразовании повторяются чаще всего — зная их, вы избежите утечки договорных условий и расхождения цен с 1С:
- Кэш показал чужую цену. Персональная цена попала в общий кэш, и один клиент увидел договорную цену другого. И ошибка, и утечка коммерческих условий.
- Цены ведут и на сайте, и в 1С. Два источника расходятся: в корзине одна цена, в счёте из 1С другая. Источник истины должен быть один — 1С.
- Неверно сопоставлены типы цен. При обмене оптовая цена «приехала» не в тот тип цены и открылась не той группе — клиент видит чужую цифру.
- Приоритет цен не описан. При пересечении акции и договорной цены система выбирает непредсказуемо; клиент и менеджер видят разное.
- Сотни типов цен «на каждого». Персональность пытаются собрать на типах цен вместо соглашений и скидок — прайсы становятся неуправляемыми.
- Прайс по прямой ссылке. Файл персонального прайса лежит статикой по известному URL и скачивается без проверки прав — договорная цена утекает.
- Потеряна связь контрагента. Учётная запись не связана с контрагентом 1С — клиент видит базовую цену вместо своей или чужую.
- Наивный расчёт на больших прайсах. Персональные цены считают на весь каталог при каждом заходе — сайт тормозит или падает под нагрузкой.
- Нет пометки «ваша цена». Клиент не понимает, персональная это цена или общая, — лишние звонки менеджеру и сомнения в корректности.
Чек-лист
Короткий список для приёмки индивидуальных цен перед запуском:
- Базовый механизм настроен. Типы цен и группы заведены и связаны правами — есть каркас под персональность.
- Политика описана. Зафиксировано, где цена групповая, где договорная, как складываются скидки и какое правило приоритета.
- Соглашения в 1С готовы. Для клиентов с индивидуальными условиями созданы соглашения: тип цены, скидки, кратность.
- Обмен и сопоставление проверены. Типы цен 1С корректно сопоставлены с сайтом, персональные цены приходят по контрагенту.
- Связь клиентов настроена. Учётные записи связаны с контрагентами 1С, персональные цены подставляются вошедшему.
- «Ваша цена» видна везде. В списке, карточке, корзине и кабинете — персональная цена с пометкой, с кратностью и условиями.
- Прайс и выгрузка персональны. «Мой прайс» и выгрузка в Excel/PDF формируются в цене клиента с проверкой прав, без прямых ссылок.
- Кэш безопасен. Персональные цены не в общем кэше; клиент не видит чужую цену.
- Приоритет и корзина сходятся. Итог корзины совпадает со счётом 1С на пересекающихся случаях (акция + договорная).
- Проверено под клиентами. Витрина проверена под несколькими контрагентами, включая осмотр исходного кода — чужие цены не утекают.
Вывод
Индивидуальные цены B2B на 1С-Битрикс — это не одна настройка, а слоёная система. В основе — базовый механизм типов цен и групп, который даёт цены по категориям покупателей. Поверх него ложится настоящая персональность из 1С: договорные цены, соглашения об условиях продаж, персональные скидки и наценки, привязанные к контрагенту. Обмен переносит это на сайт, права решают, кто что видит, а правило приоритета выбирает итоговую цену. Клиент в результате видит «свою цену» в каталоге, карточке и личном кабинете и выгружает персональный прайс в Excel или PDF.
Два принципа держат всю конструкцию. Первый — единый источник истины: цены рождаются в 1С, сайт их показывает, и вручную на сайте их не дублируют, иначе они разойдутся со счётом. Второй — персональная цена принадлежит только своему клиенту: её нельзя держать в общем кэше, отдавать статическим файлом или прятать стилями, иначе договорные условия одного контрагента утекут к другому. Опишите ценовую политику и приоритет явно, настройте обмен соглашений, свяжите клиентов с контрагентами, вынесите персональные цены в динамику — и проверьте всё под несколькими клиентами. Разобрать конкретный сценарий под ваш каталог и условия работы с контрагентами можно в рамках нашей услуги — начните с сайта для B2B-компании или изучите смежные материалы в рубрике «B2B и опт».