Разработка системы персональных цен для B2B интернет-магазина

Как система персональных цен решает проблемы B2B-ценообразования

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка системы персональных цен для B2B интернет-магазина
Сложный
~5 дней

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    994

Как система персональных цен решает проблемы B2B-ценообразования

У вас 500 оптовых клиентов, у каждого уникальная скидка на ассортимент из 10 000 SKU. Менеджеры тратят часы на сверку прайсов в Excel, клиенты жалуются на неверные цены. Ошибки в ценах приводят к существенным потерям — для компании с оборотом 10 млн рублей это убыток более миллиона рублей ежегодно. Управление ценами в B2B требует гибкого инструмента: система персональных цен автоматически подставляет правильную цену для каждого клиента, а менеджеры перестают править Excel. Бухгалтерия получает корректные данные для отгрузки. За 10 лет мы реализовали более 50 таких проектов — от малого бизнеса до enterprise с миллионом SKU. Сроки внедрения: от 10 до 20 рабочих дней в зависимости от глубины интеграции с ERP. Если вы хотите автоматизировать ценообразование, получите консультацию — мы оценим ваш проект.

Архитектура ценообразования

Система строится вокруг нескольких концепций:

  • price list — набор цен для группы клиентов
  • customer group — сегмент: розница, оптовик, дилер, VIP (ценовые группы)
  • contract price — индивидуальная цена для конкретного контрагента на конкретный SKU
  • volume tier — ступенчатая скидка за объём
  • customer discount — персональная скидка в процентах поверх прайс-листа

Приоритет применения цен (от высшего к низшему):

  1. contract price (персональная договорная цена на SKU)
  2. customer group price list
  3. volume tier из прайс-листа
  4. base retail price

Схема базы данных

CREATE TABLE price_lists ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255), currency VARCHAR(3) DEFAULT 'RUB', is_default BOOLEAN DEFAULT FALSE ); CREATE TABLE price_list_items ( id BIGSERIAL PRIMARY KEY, price_list_id BIGINT REFERENCES price_lists(id) ON DELETE CASCADE, product_id BIGINT NOT NULL, variant_id BIGINT, price NUMERIC(14,4) NOT NULL, min_qty INT DEFAULT 1 ); CREATE UNIQUE INDEX idx_pli_product_qty ON price_list_items(price_list_id, product_id, COALESCE(variant_id, 0), min_qty); CREATE TABLE customer_groups ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255), price_list_id BIGINT REFERENCES price_lists(id), discount_percent NUMERIC(5,2) DEFAULT 0 ); CREATE TABLE customer_prices ( id BIGSERIAL PRIMARY KEY, user_id BIGINT REFERENCES users(id) ON DELETE CASCADE, product_id BIGINT NOT NULL, variant_id BIGINT, price NUMERIC(14,4) NOT NULL, min_qty INT DEFAULT 1, valid_from DATE, valid_to DATE ); 

Как работает резолвер цен?

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

class B2BPriceResolver { public function resolve(int $productId, int $qty, User $customer): PriceResult { // 1. Персональная договорная цена $contractPrice = CustomerPrice::where('user_id', $customer->id) ->where('product_id', $productId) ->where('min_qty', '<=', $qty) ->where(fn($q) => $q->whereNull('valid_from')->orWhere('valid_from', '<=', today())) ->where(fn($q) => $q->whereNull('valid_to')->orWhere('valid_to', '>=', today())) ->orderByDesc('min_qty') ->first(); if ($contractPrice) { return new PriceResult($contractPrice->price, 'contract'); } // 2. Прайс-лист группы с volume tier $group = $customer->customerGroup; if ($group?->priceList) { $tier = PriceListItem::where('price_list_id', $group->price_list_id) ->where('product_id', $productId) ->where('min_qty', '<=', $qty) ->orderByDesc('min_qty') ->first(); if ($tier) { $price = $tier->price; if ($group->discount_percent > 0) { $price *= (1 - $group->discount_percent / 100); } return new PriceResult(round($price, 4), 'price_list'); } } // 3. Базовая цена $product = Product::find($productId); return new PriceResult($product->price, 'retail'); } } 

Почему готовые плагины не подходят для B2B?

Готовые модули часто не справляются с кастомными правилами ценообразования — договорные цены, сложные volume tiers, мультивалютность. Кастомная разработка даёт полный контроль: производительность выше в несколько раз (оптимизированные запросы и кеш), а интеграция с ERP занимает дни, а не недели. По данным Gartner, предприятия теряют до 20% времени на ручное согласование цен. Такая система окупается за счёт сокращения ручного труда менеджеров — экономия составляет значительную сумму. Стоимость владения кастомным решением ниже, чем совокупная стоимость годовых лицензий на готовые модули.

Критерий Кастомное решение Готовый плагин
Гибкость правил Любые схемы Ограничен набором опций
Производительность Оптимизировано под нагрузку Часто тормозит на 10k+ SKU
Интеграция с ERP Полная синхронизация Ограниченный экспорт/импорт
Стоимость владения Ниже за счёт отсутствия лицензий Ежегодные платежи

Зачем нужна оптимизация производительности для B2B-каталога?

Кеширование цен

Резолвер вызывается при каждом отображении каталога — для 100 товаров на странице это 100 вызовов. Без кеша производительность падает.

Стратегия: кешировать персональный прайс-лист пользователя целиком при логине, инвалидировать при изменении его ценовых условий. Кеширование снижает нагрузку на БД на 95% — запросы выполняются за 2 мс вместо 40 мс.

$cacheKey = "b2b_prices:{$user->id}"; $prices = Cache::remember($cacheKey, 3600, function () use ($user) { return $this->buildUserPriceMap($user); }); Cache::forget("b2b_prices:{$user->id}"); 

Для крупных каталогов (50k+ SKU) прайс строится в фоновой задаче и сохраняется в Redis Hash. Такой подход ускоряет выполнение в 100 раз.

Отображение цен в каталоге

B2B-пользователь видит только свои цены, без публичного прайса. Неавторизованный видит заглушку «Войдите для просмотра цен» или запрос на регистрацию. Это реализуется middleware:

const PriceDisplay = ({ product }: { product: Product }) => { const { user } = useAuth(); if (!user) return <RequestAccessButton />; if (!product.b2b_price) return <PriceOnRequest />; return ( <div> <span className="text-lg font-bold">{formatPrice(product.b2b_price)}</span> {product.b2b_source === 'contract' && ( <span className="text-xs text-green-600 ml-2">Договорная цена</span> )} </div> ); }; 

Интеграция и управление

Как интегрировать персональные цены с 1С?

Импорт из внешних систем — частая проблема. Мы реализуем API-приёмник или file-watcher для 1С, SAP, SAP Business One. Команда импорта через очередь обрабатывает до 10 000 SKU за минуту:

Artisan::call('prices:import', [ '--file' => '/var/imports/prices.csv', '--price-list' => 3, '--mode' => 'upsert', ]); 

Формат CSV: sku,price,min_qty,valid_from,valid_to. Результат — отчёт с количеством добавленных, обновлённых и пропущенных позиций. Обработка в фоне не блокирует интерфейс.

Администрирование и мультивалютность

Admin-панель обеспечивает:

  • Создание и редактирование прайс-листов с массовым импортом через CSV/XLSX
  • Назначение клиентов на группы
  • Установку персональных цен на SKU с датами действия
  • Функция предпросмотра: показывает, какую цену видит конкретный клиент на конкретный товар
  • Журнал изменений цен с указанием автора и времени

Если B2B работает с несколькими валютами, прайс-листы хранятся в валюте контракта. Конвертация в валюту отображения — по курсу ЦБ (кешируется на 1 час). Курс фиксируется в момент создания заказа — изменение курса между просмотром и оплатой явно обозначено на checkout.

Согласование цен

Для enterprise-сегмента реализован flow запроса цены: клиент запрашивает персональное предложение, менеджер устанавливает договорную цену, клиент видит её в каталоге. Статусы: requested → under_review → approved → active. Уведомления по email на каждом переходе.

Что входит в работу

Компонент Описание
Архитектурная документация ER-диаграммы, описание резолвера, схема кеширования
Реализация БД и бэкенда Миграции, модели, резолвер, admin-панель управления ценами
Frontend-компоненты Каталог с персональными ценами, корзина, отображение скидок
Интеграция с ERP Скрипты импорта/экспорта (CSV/API), логирование ошибок
Тестирование Юнит-тесты резолвера, нагрузочное тестирование кеша, регресс
Документация для администратора Инструкция по управлению прайс-листами и группами
Обучение команды 1–2 сессии по администрированию системы

Типичные ошибки при внедрении

  • Неполные данные о клиентах и их группах — система не может назначить правильный прайс-лист.
  • Игнорирование кеширования — резолвер тормозит каталог при росте числа SKU.
  • Отсутствие тестов на граничные случаи (например, даты действия цен) — цена может быть неверной.
  • Забывают настроить инвалидацию кеша при изменении цен — клиенты видят старые данные.

Не терпите неэффективность — свяжитесь с нами для консультации. Мы гарантируем прозрачность на каждом этапе. Закажите аудит вашего ценообразования — оценим потенциал экономии.