Оптовый магазин: свои цены для клиентов и минимальные партии
Оптовый магазин отличается от розничного тем, что цены у него нет в единственном числе. Одна и та же позиция стоит по-разному для трёх клиентов, продаётся только упаковками и доступна не всем. Ниже — как этот механизм устроен внутри и в каком порядке он выполняется.
Цена как результат вычисления, а не как поле
В розничном магазине цена лежит в карточке товара. В оптовом она получается из цепочки правил, и карточка хранит только базу.
Правил обычно четыре типа. Ценовой уровень клиента — «опт-1», «опт-2», «дилер». Персональное соглашение по конкретным позициям или категориям. Объёмная шкала — от 100 штук минус три процента, от 500 минус семь. Акции с ограниченным сроком.
Из этого следует, что кэшировать цену на витрине нельзя без учёта того, кто смотрит. Страница каталога для анонимного посетителя и для дилера — это два разных набора чисел на одном шаблоне.
Порядок применения правил
Порядок здесь не деталь, а бизнес-решение, и его нужно зафиксировать письменно до разработки.
Рабочая последовательность: берём базовую цену, применяем ценовой уровень клиента, затем перекрываем её персональным соглашением там, где оно есть, потом применяем объёмную шкалу, потом акцию, и в конце проверяем нижний порог — цену, ниже которой продавать нельзя.
Ключевое слово здесь «перекрываем». Персональная цена не складывается с уровнем, она его заменяет. Если правила начнут суммироваться, вы через месяц обнаружите позиции с отрицательной маржой.
Нижний порог стоит завести отдельным полем у товара. Он работает как предохранитель: любая комбинация скидок, опустившая цену ниже порога, останавливается на пороге и пишет запись в журнал.
Кратность и минимальная партия
Оптовая позиция редко продаётся штуками. Есть упаковка, есть коробка, есть паллета, и заказать 17 штук при кратности 12 невозможно.
Технически у товара хранятся три числа: минимальное количество, шаг кратности и единица отображения. Корзина не позволяет ввести некратное значение, а округляет вверх и показывает это явно.
Отдельная сущность — минимальная сумма заказа. Она может отличаться по клиенту и по региону доставки. Проверка идёт на этапе корзины, а не при оформлении, иначе клиент собирает заказ и упирается в отказ на последнем шаге.
Ещё один узел, который часто забывают, — остаток с резервом. В опте между заказом и отгрузкой проходят дни, и позиция должна резервироваться в момент подтверждения, а не в момент отгрузки.
Кто что видит
Опт устроен ролями плотнее, чем розница. Со стороны клиента есть закупщик, который собирает заказ, и руководитель, который его утверждает. Со стороны поставщика — менеджер направления, склад и бухгалтерия.
Это тот же принцип, что и в остальных наших проектах: сборщик видит заказы, но не деньги; менеджер — клиентов, но не настройки. В опте к нему добавляется второй контур — клиентская компания внутри своего кабинета тоже имеет роли.
Практический вывод: сущность «пользователь» здесь всегда связана с сущностью «организация», а права выдаются на пересечении. Один человек может быть закупщиком в одной компании и наблюдателем в другой.
Заказ как документ, а не как корзина
В рознице заказ — это факт покупки. В опте это документ, у которого есть жизненный цикл: черновик, отправлен на согласование, подтверждён поставщиком, зарезервирован, отгружен, оплачен, закрыт.
На каждом переходе меняется набор доступных действий и набор видимых полей. Черновик клиент правит свободно, подтверждённый заказ — только через запрос на изменение.
Отдельно живут повторные заказы. Закупщик редко собирает корзину с нуля — он берёт прошлый заказ, меняет количества и отправляет. Кнопка «повторить» в опте приносит больше, чем любой фильтр в каталоге.
Спецификация и счёт формируются из заказа автоматически. Если менеджер выписывает счёт руками в другой программе, портал не сокращает работу, а добавляет её.
Что связывать с учётной системой и в каком порядке
Первым делом — остатки и цены. Портал, который показывает вчерашние остатки, порождает больше звонков, чем принимает заказов.
Вторым — заказы в обратную сторону, чтобы подтверждённый заказ появлялся в учёте без ручного переноса.
Третьим — взаиморасчёты: долг, отсрочка, лимит. Именно эта связка позволяет автоматически блокировать оформление, когда клиент вышел за лимит, вместо того чтобы менеджер помнил это в голове.
Документы и закрывающие — последними. Они полезны, но не влияют на способность принимать заказы.
Прайс-лист как отдельная функция
Оптовый клиент часто хочет не витрину, а файл. Закупщик выгружает прайс, считает у себя в таблице и возвращается с готовым списком артикулов.
Значит, портал должен уметь две вещи: отдать персональный прайс файлом с ценами именно этого клиента и принять обратно список артикулов с количествами, превратив его в корзину.
Загрузка заказа файлом — самая недооценённая функция в опте. Она экономит закупщику полчаса на каждом заказе и привязывает его к вашему порталу сильнее любой скидки.
Обработка при этом должна быть терпимой к грязным данным: лишние пробелы, разные регистры, артикулы с дефисами и без. Строгий разбор, отвергающий файл целиком из-за одной строки, никто использовать не станет.
Что показывать в карточке товара оптовику
Розничная карточка построена вокруг картинки и описания. Оптовая — вокруг чисел: цена по вашему уровню, остаток, кратность, срок поставки при отсутствии, вес и объём упаковки.
Вес и объём нужны не для красоты. Закупщик считает, войдёт ли партия в машину, и без этих полей он позвонит менеджеру.
Полезно показывать и историю: когда этот артикул заказывали в прошлый раз и в каком количестве. Это ускоряет повторный заказ сильнее, чем рекомендации похожих товаров.
Кому оптовый портал не нужен
Если у вас двадцать постоянных клиентов, которые звонят менеджеру и присылают заявку файлом, портал изменит немного. Дешевле навести порядок в прайсе и шаблоне заявки.
Если ассортимент меньше сотни позиций и цена у всех одна, вам нужен обычный магазин с закрытым разделом, а не механика уровней.
И если учётная система не может отдать остатки наружу, начинать надо с неё. Портал поверх недоступных данных превращается в красивую форму обратной связи.
Сколько это стоит
Каталог с закрытым доступом, уровнями цен и кратностью — сайт с админкой от 100 000 ₽ и 7–14 дней. Полноценный портал с кабинетом организации, ролями, документами и обменом с учётом — платформа от 150 000 ₽ и от 14 дней.
Порядок запуска, который редко подводит: сначала каталог с правильными ценами и кратностью, потом заказ как документ, потом обмен с учётом, потом документы. Обратный порядок даёт красивый кабинет с неверными ценами.
Коротко
Оптовый магазин — это движок цен, а не витрина. Цена вычисляется по фиксированному порядку правил с предохранителем в виде нижнего порога, количество ограничивается кратностью и минимальной партией, а заказ живёт как документ с состояниями и согласованием. Роли раздаются на пересечении человека и организации. Начинать нужно с корректных цен и остатков — всё остальное надстраивается позже без переделки основы.
Первый разговор — разбор задачи: нужна ли вам система или хватит одной страницы. Без обязательств и без счёта.
Частые вопросы
Можно ли просто скрыть цены и показывать их после регистрации?
Так делают, но это отсекает поиск и первичный интерес. Практичнее показывать розничную или базовую оптовую цену всем, а персональную — после входа. Тогда каталог остаётся видимым, а условия остаются закрытыми.
Как быть, если у менеджера есть право дать цену ниже прайса?
Право оформляется как ограниченная скидка с потолком и обязательным комментарием, а не как свободное поле суммы. Каждое отклонение попадает в журнал с автором и причиной. Это защищает и компанию, и самого менеджера.
Нужен ли обмен с учётной системой сразу?
Остатки и цены — да, желательно с первого дня, иначе портал будет продавать по устаревшим условиям. Документы и взаиморасчёты можно подключить вторым этапом. Начинать с документов, не закрыв цены, — распространённая и дорогая ошибка.
Те, что не помогают, мы переписываем — по этой кнопке и решаем, какие именно.
Ещё по теме
Справка о составе чека, разграничении зон ответственности между сайтом, кассой и бухгалтерией и порядке проверки перед запуском.
тем, кто заказывает «Жук и Плут»: детский бренд ушёл с маркетплейсов на свой сайтИстория магазина детских товаров — что мы построили, что пошло не так и почему бренд встал первым в Яндексе на третий день.
тем, кто заказывает «С этим покупают»: где ставить блоки допродажКарта мест на сайте, где допродажа работает, и что показывать в каждом — от карточки товара до письма после доставки.
тем, кто заказывает