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

Проектирование корзины: серверная, клиентская или гибридная

Проектирование корзины интернет-магазина на 1С-Битрикс: серверная, клиентская и гибридная модели

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

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

Коротко

  • Штатная корзина 1С-Битрикс серверная: состав заказа хранится в базе через модуль «Интернет-магазин» и sale.order.
  • Клиентская корзина быстра, но её данным нельзя доверять для цен и остатков.
  • Гибридная модель даёт мгновенный отклик на клиенте и авторитетный пересчёт на сервере.
  • Источник истины по ценам и наличию — сервер на данных из 1С, а не браузер.

Корзина как узел архитектуры

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

Ключевой вопрос проектирования — где хранится авторитетное состояние. От ответа зависят скорость, надёжность, поведение при входе в аккаунт и устойчивость к сбоям. Дальше разберём три модели и покажем, почему на практике выигрывает гибрид с серверным источником истины.

Серверная корзина

В серверной модели состав корзины хранится на сервере — в базе данных, привязанным к пользователю (в том числе анонимному). Именно так устроена штатная корзина 1С-Битрикс: она опирается на модуль «Интернет-магазин», а заказ формируется через sale.order с полноценным пересчётом цен, скидок и остатков на сервере.

Обратная сторона — каждое действие требует обращения к серверу, и без оптимизации интерфейс может ощущаться медленным. Эту проблему и решает гибридный слой поверх серверной корзины.

Оформление заказа по шагам КорзинатоварыДанныеконтактыДоставкаспособ, адресОплатаспособ оплатыСпасибозаказ созданЧем короче и понятнее шаги оформления, тем меньше брошенных корзин.
Схема: Чем короче и понятнее шаги оформления, тем меньше брошенных корзин.

Клиентская корзина

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

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

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

Гибридная корзина

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

Именно так работает штатный AJAX-компонент корзины в 1С-Битрикс: он обновляет состав и итог без полной перезагрузки, но окончательный пересчёт идёт на сервере через sale.order. Пользователь получает отзывчивость клиентской корзины и достоверность серверной. Для большинства интернет-магазинов это и есть правильный выбор — быстрый интерфейс поверх авторитетного серверного состояния.

Сравнение подходов

КритерийСервернаяКлиентскаяГибридная
Достоверность цен/остатковВысокаяНизкаяВысокая
Скорость откликаСредняяВысокаяВысокая
Устойчивость к сбоямВысокаяНизкаяВысокая
Сохранение между устройствамиДа (при входе)НетДа (при входе)
Сложность реализацииНизкаяСредняяВыше

Вывод из таблицы простой: чистая клиентская корзина проигрывает по всему, что связано с деньгами. Реальный выбор — между серверной «из коробки» и гибридной с ускоренным интерфейсом. Для проектов, где важна и скорость, и достоверность, оптимален гибрид.

Источник истины: цены и остатки из 1С

Какую бы модель вы ни выбрали, авторитетные цены и остатки должны приходить из 1С. Цена в B2B зависит от группы клиента, скидки — от правил, наличие — от складов и меняется в реальном времени. Всё это знает учётная система, и корзина при пересчёте обязана опираться на её данные, а не на кэш в браузере.

Если обмен настроен плохо и данные устаревают, корзина показывает неверные цифры, а заказы уходят по ценам, которых уже нет. Поэтому достоверность корзины напрямую упирается в качество интеграции. Наведение порядка в обмене ценами и остатками — задача, которую мы решаем через аудит и оптимизацию 1С, а современный доступ к данным каталога в коде — тема статьи про D7 и ORM в 1С-Битрикс.

Слияние гостевой и клиентской корзины

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

В 1С-Битрикс корзина привязана к пользователю, включая анонимного, поэтому механику слияния важно продумать заранее. Пользователь не должен терять отложенные позиции при входе, а собранная гостем корзина не должна исчезать. Это особенно чувствительно для B2B, где корзина — это часто заготовка крупной спецификации, собиравшаяся не один визит.

Особенности B2B-корзины

Оптовая корзина сложнее розничной, и это надо учитывать на этапе проектирования. Типичные требования B2B:

Штатный механизм это поддерживает, но под конкретные правила бизнеса корзину обычно дорабатывают. Такую логику удобно выносить в отдельный модуль поверх стандартного механизма — как устроена разработка собственного модуля, мы разбирали в статье про разработку своего модуля для 1С-Битрикс.

Производительность и надёжность

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

Под нагрузкой всё это упирается в инфраструктуру: быстрый бэкенд и правильное окружение. Требования к серверу и масштабированию под интернет-магазин мы разбирали в статье про хостинг и инфраструктуру для 1С-Битрикс.

Реализация в 1С-Битрикс

Проектирование корзины на практике сводится к понятной последовательности решений:

  1. Определите модель. Для реального магазина — гибрид: серверная корзина на sale.order плюс AJAX-интерфейс.
  2. Зафиксируйте источник истины. Цены и остатки — из 1С, финальный пересчёт — на сервере.
  3. Настройте обмен. Актуальные цены по группам и наличие по складам приходят и инвалидируют кэш.
  4. Продумайте слияние. Гостевая и клиентская корзины объединяются при входе без потерь.
  5. Заложите B2B-правила. Кратность, минимальная сумма, быстрый заказ, сохранённые корзины.
  6. Оптимизируйте отклик. Асинхронные проверки, идемпотентность, разумный кэш.
  7. Проверьте на данных. Реальные цены, остатки, скидки, слияние корзин и оформление заказа.

Частые ошибки

Чек-лист проектирования

  1. Модель выбрана. Гибрид: серверная корзина на sale.order плюс отзывчивый AJAX-интерфейс.
  2. Источник истины — сервер. Цены, скидки и наличие подтверждаются на сервере по данным 1С.
  3. Обмен настроен. Актуальные цены по группам и остатки по складам, кэш инвалидируется.
  4. Слияние работает. Гостевая и клиентская корзины объединяются при входе без потерь.
  5. B2B-правила учтены. Кратность, минимальная сумма, быстрый заказ, сохранённые корзины.
  6. Отклик быстрый. Асинхронные проверки, идемпотентные действия, разумный кэш.
  7. Проверено на данных. Реальные цены, остатки, скидки и оформление заказа отработаны.

Вывод

Корзина — узел, где сходятся цены, скидки, остатки и права клиента, поэтому её архитектура определяет достоверность всего магазина. Чистая клиентская корзина проигрывает во всём, что связано с деньгами; серверная надёжна, но требует ускорения. Практический ответ — гибрид: отзывчивый интерфейс поверх серверного состояния на sale.order.

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

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

Что значит серверная, клиентская и гибридная корзина?

Серверная корзина хранит состав заказа на сервере (в базе), клиентская — в браузере пользователя, гибридная сочетает оба подхода: быстрый отклик на клиенте плюс авторитетное состояние на сервере. В 1С-Битрикс штатная корзина серверная и опирается на модуль «Интернет-магазин» и sale.order, но интерфейс поверх неё может работать по гибридной схеме.

Почему нельзя доверять корзине, которая живёт только в браузере?

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

Зачем корзине вообще серверная часть, если можно всё считать на клиенте?

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

Как сделать корзину быстрой без ущерба достоверности?

Гибридно: интерфейс мгновенно реагирует на действия (добавил товар — счётчик обновился сразу), а сервер асинхронно подтверждает цену, скидки и наличие. Пользователь не ждёт, но итоговые цифры остаются авторитетными. Штатный AJAX-компонент корзины в 1С-Битрикс как раз работает по такой схеме, обновляя итог без полной перезагрузки.

Что происходит с корзиной при входе в аккаунт?

Гостевая корзина должна слиться с корзиной пользователя, а не затереть её. При входе товары из анонимной сессии объединяются с сохранёнными, дубли схлопываются, количество суммируется по правилам. В 1С-Битрикс корзина привязана к пользователю (в том числе анонимному), и логику слияния важно продумать заранее, чтобы клиент не терял отложенные товары.

Как корзина связана с остатками и ценами из 1С?

Цены и остатки приходят на сайт обменом с 1С. Корзина при пересчёте опирается на актуальные значения: цену по группе клиента и наличие по складу. Если обмен настроен плохо и данные устаревают, корзина будет показывать неверные цифры. Поэтому достоверность корзины напрямую зависит от качества интеграции с 1С.

Нужна ли отдельная корзина для B2B?

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

Как избежать потери корзины при сбоях?

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

Поделиться:

Нужна корзина, которая считает деньги правильно?

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

Редакция B2Bsite

Команда B2Bsite. С 2014 года разрабатываем интернет-магазины и порталы на 1С-Битрикс: корзина и оформление, обмен ценами и остатками с 1С, B2B-логика для среднего и крупного бизнеса.

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