Вебформат

Главная/Блог/Сайты и e-commerce

Сайты и e-commerce9 июля 20269 мин

Корзина с двумя контурами: магазин не теряет спрос, которого нет на складе

Клиенту нужно 500 домкратов, а доступно 309. Типовой магазин продаст 309 и молча потеряет остальной спрос - здесь корзина сама делит запрос на два контура: доступное уходит заказом, остальное - предзаказом в 1С. Три рубежа сверки не дают заказу уйти по устаревшим ценам, а 65% позиций предзаказа покупатели создают ещё до регистрации.

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

В оптовой торговле оборудованием запрошенное количество регулярно превышает остаток: клиенту нужно 500 домкратов, а на складах сейчас 309. Типовой интернет-магазин в этой ситуации предлагает купить столько, сколько есть, - и молча теряет остальной спрос. Клиент уходит договариваться по телефону, а магазин даже не узнаёт, что у него только что спросили ещё 191 штуку.

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

Требовалось решение, при котором ни спрос, ни доверие клиента не теряются.

Решение

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

Корзина состоит из двух контуров. "В наличии" - то, что можно купить и оформить заказом прямо сейчас. "Предзаказ" - то, чего сейчас нет: он уходит в 1С отдельной заявкой, и с клиентом связывается менеджер.

Одна корзина - два контура: спрос не теряется
Клиент запросил 500 домкратов
Доступно сейчас - 309: склад плюс товары в пути
система сама провела границу и сообщила покупателю
В наличии
Оформляется заказом прямо сейчас
Цена зафиксирована при добавлении и сверяется с актуальной при каждом открытии корзины
309 шт
Предзаказ
Излишек сверх доступного перенесён сюда автоматически
Уходит в 1С отдельной заявкой - с клиентом связывается менеджер
191 шт
оба контура сходятся в 1С
Заказ - штатным оформлением, предзаказ - отдельной заявкой
Отдел продаж видит весь спрос, включая неудовлетворённый
Ни одна единица запрошенного не потерялась: 309 уходят заказом, 191 - предзаказом. Сценарий с домкратами - иллюстративный, механика - рабочая.

Граница между контурами проводится автоматически. Клиент запросил 500 - система сама отнесла 309 к контуру "в наличии", 191 - к предзаказу, и сообщила об этом покупателю. Ни одна единица запрошенного не потерялась: весь спрос, включая неудовлетворённый, передан в 1С и виден отделу продаж.

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

Корзина, которой можно верить

Сверка цен и остатков стоит на трёх рубежах: при каждом открытии корзины, при входе в оформление и в момент создания заказа. Заказ физически не может уйти в 1С с устаревшей ценой или несуществующим остатком - даже если корзину собирали неделю.

На каждом рубеже к каждой позиции применяются четыре правила:

Четыре правила сверки позиции корзины
Позиция корзины
Запрошенное количество, зафиксированная цена
на каждом рубеже - один из четырёх исходов
Всё в порядке
Цена действует, остатка хватает - позиция остаётся без изменений
Цена изменилась
Обновляется на актуальную - покупатель платит по действующему прайс-листу
Остатка не хватает
В корзине остаётся доступное количество, излишек переносится в предзаказ - и прибавляется к уже лежащему там, а не создаёт дубль
Товар недоступен
Позиция целиком переносится в предзаказ с понятным объяснением - намерение купить сохраняется
"Доступное количество" - это склад плюс товары в пути. Спрос не теряется: всё, что нельзя купить сейчас, становится предзаказом - и уходит в 1С.

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

Продажа начинается до регистрации

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

Гость начинает покупку до регистрации - и ничего не теряет при входе
Гость
Собирает предзаказ без регистрации - позиции копятся на анонимном идентификаторе покупателя
вход в личный кабинет
Слияние
Анонимные позиции переходят в личный кабинет
Товар уже был в предзаказе - количества складываются; не было - позиция переносится целиком
кнопка "Отправить предзаказ"
Документ предзаказа
Создаётся одной транзакцией: документ и все позиции разом - либо целиком, либо никак
Каждый шаг фиксируется в журнале
документ немедленно помечен к передаче
Заявка у отдела продаж - менеджер связывается с клиентом

Насколько это востребовано, показывают данные рабочего сервера: из 526 позиций контура предзаказа 344 - примерно две трети - добавлены гостями, до входа в личный кабинет. Если бы предзаказ требовал регистрации, большая часть этого спроса не дошла бы до отдела продаж вовсе.

Отправка предзаказа устроена как финансовая операция: документ и все его позиции создаются одной транзакцией - либо целиком, либо никак, половинчатых состояний не существует. Каждый шаг фиксируется в журнале, а созданный документ немедленно помечается к передаче в 1С.

Excel вместо ручного набора

Снабженцы ведут заявки в своих учётных системах, и заставлять их перебивать 30 позиций руками - значит терять заказы. Поэтому корзина понимает Excel в обе стороны.

Файл "артикул - наименование - количество" загружается в корзину целиком: строки распознаются по артикулу, затем по названию, найденное добавляется с проверкой цены и остатков, по нераспознанным строкам выдаётся понятный отчёт. Выгрузка корзины обратно даёт файл того же формата - его можно править в Excel и загружать снова, круг замыкается.

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


Как это устроено внутри

Общая картина - на схеме: сервис сверки стоит в центре, оба контура сходятся в 1С.

Устройство двухконтурной корзины: кто с кем взаимодействует
Корзина на сайте
Контур "в наличии" плюс контур "предзаказ"
Заявка загружается Excel-файлом и выгружается в том же формате
каждое открытие корзины, оформление и создание заказа
Сервис сверки
Один и тот же - на трёх рубежах
Берёт актуальную цену из прайс-слоя сегмента, доступность - склад плюс товары в пути
излишек и недоступное - в предзаказ, с суммированием
Контур предзаказа
Копилка позиций: у гостя - на анонимной сессии, при входе сливается в личный кабинет
Отправка - одной транзакцией, каждый шаг в журнале
заказ - штатным оформлением, предзаказ - пометкой к передаче
1С:ERP
Заказы и предзаказы; реестр пометок "что передать" - 1С забирает сама
Сервис сверки - единственная точка, где встречаются цены, остатки и намерение покупателя. Оба контура сходятся в 1С: заказ - штатным оформлением, предзаказ - отдельной заявкой.
РешениеКак сделано
Два контура"В наличии" - штатная корзина платформы с зафиксированными ценами; предзаказ - собственное хранилище (документ + позиции), не зависящее от механики заказов
Три рубежаОдин сервис пересчёта вызывается из корзины, из оформления и непосредственно перед созданием заказа - последний вызов делает устаревшие данные в заказе невозможными
Правила сверкиЦена из собственного прайс-слоя (персональные цены сегмента покупателя), остаток - склад плюс товары в пути; четыре исхода: оставить, обновить цену, перенести излишек, перенести позицию целиком
Перенос излишкаИзлишек прибавляется к существующей позиции предзаказа, а не дублирует её; после слияния при входе первый пересчёт пропускается - защита от задвоения
Гостевой контурПозиции живут на анонимном идентификаторе покупателя; при авторизации сливаются в личный кабинет с суммированием по товарам
Отправка предзаказаТранзакция БД: создание документа и деактивация позиций - атомарно; пошаговый журнал; событийная пометка к экспорту в 1С срабатывает на уровне ядра при любом способе создания документа
Excel-импортДо 10 МБ, распознавание по точному артикулу с запасным поиском по названию, проверка доступности каждой строки, отчёт "всего / найдено / добавлено / ошибки"
Excel-выгрузкаФормат выгрузки полностью совпадает с форматом загрузки - файл проходит цикл "сайт → Excel → сайт" без преобразований

Что это дало бизнесу

РаньшеСтало
Спрос сверх остатка терялся молчаВесь запрошенный объём уходит в 1С: доступное - заказом, остальное - предзаказом
Заказ мог уйти по устаревшей ценеТри рубежа сверки: заказ не может уйти в 1С с устаревшей ценой или несуществующим остатком
Предзаказ - только звонком менеджеруКлиент собирает заявку сам; две трети позиций предзаказа появляются ещё до регистрации
Гостевая корзина пропадала при входеСлияние с суммированием по товарам: ничего не теряется и не дублируется
30 позиций - 30 раз "добавить в корзину"Заявка загружается из Excel одним файлом - и выгружается обратно в том же формате
Долгое согласование - пересбор корзины зановоСохранённые корзины хранятся три месяца - с пересчётом по актуальным ценам при возврате

В цифрах

ПоказательЗначение
Позиций в контуре предзаказа526, из них 423 активны прямо сейчас
Позиций предзаказа, созданных гостями до регистрации65%
Оформленных предзаказов32, до 21 позиции в заявке
Рубежей сверки цен и остатков3: корзина, оформление, создание заказа
Позиций в активных корзинах749 у 231 покупателя
Хранение сохранённых корзин3 месяца, с пересчётом цен при возврате
Размер Excel-файла заявкидо 10 МБ

Двухконтурная корзина - часть большой B2B-платформы: каталог, дилерский кабинет и двусторонний обмен с 1С. Что вошло в проект целиком - в кейсе B2B e-commerce платформы.

Ваш магазин теряет спрос, которого нет на складе?

Расскажите, как у вас устроены заказы и предзаказы. Покажем двухконтурную корзину на живом проекте и оценим, как перенести её логику в ваш магазин.