Корзина кажется простой: добавил товар, увидел сумму, оформил заказ. Но именно в ней сходятся самые чувствительные вещи магазина — актуальные цены, скидки, остатки, права клиента и деньги. Ошибка в архитектуре корзины оборачивается заказами по неверной цене, товарами, которых нет на складе, и потерянными отложенными позициями. Поэтому вопрос «где живёт корзина — на сервере, на клиенте или между ними» не технический каприз, а фундаментальное решение.
Разберём три модели корзины — серверную, клиентскую и гибридную — применительно к интернет-магазину на 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-интерфейс.
- Зафиксируйте источник истины. Цены и остатки — из 1С, финальный пересчёт — на сервере.
- Настройте обмен. Актуальные цены по группам и наличие по складам приходят и инвалидируют кэш.
- Продумайте слияние. Гостевая и клиентская корзины объединяются при входе без потерь.
- Заложите B2B-правила. Кратность, минимальная сумма, быстрый заказ, сохранённые корзины.
- Оптимизируйте отклик. Асинхронные проверки, идемпотентность, разумный кэш.
- Проверьте на данных. Реальные цены, остатки, скидки, слияние корзин и оформление заказа.
Частые ошибки
- Доверяют клиентской корзине. Цену и наличие считают в браузере, заказы уходят по неверным цифрам.
- Гостевая корзина затирает сохранённую. Клиент теряет отложенные товары при входе.
- Устаревшие данные из-за плохого обмена. Корзина показывает цены и остатки, которых уже нет.
- Всё синхронно. Каждая тяжёлая проверка блокирует интерфейс, корзина тормозит.
- Игнорируют B2B-правила. Нет кратности, минимальной суммы и быстрого заказа для опта.
- Нет идемпотентности. Повторные клики и запросы задваивают позиции.
Чек-лист проектирования
- Модель выбрана. Гибрид: серверная корзина на sale.order плюс отзывчивый AJAX-интерфейс.
- Источник истины — сервер. Цены, скидки и наличие подтверждаются на сервере по данным 1С.
- Обмен настроен. Актуальные цены по группам и остатки по складам, кэш инвалидируется.
- Слияние работает. Гостевая и клиентская корзины объединяются при входе без потерь.
- B2B-правила учтены. Кратность, минимальная сумма, быстрый заказ, сохранённые корзины.
- Отклик быстрый. Асинхронные проверки, идемпотентные действия, разумный кэш.
- Проверено на данных. Реальные цены, остатки, скидки и оформление заказа отработаны.
Вывод
Корзина — узел, где сходятся цены, скидки, остатки и права клиента, поэтому её архитектура определяет достоверность всего магазина. Чистая клиентская корзина проигрывает во всём, что связано с деньгами; серверная надёжна, но требует ускорения. Практический ответ — гибрид: отзывчивый интерфейс поверх серверного состояния на sale.order.
Какую бы модель вы ни выбрали, источник истины по ценам и наличию — сервер на данных из 1С, а не браузер. Настройте качественный обмен, продумайте слияние корзин и B2B-правила — и корзина будет считать деньги правильно, оставаясь при этом быстрой и удобной.