Корзина в 1С-Битрикс - добавление товара, количество, пересчёт
Корзина - подтема на 215 вопросов из собранных. Здесь собраны решения по работе с ней из кода.
Что общего у этих задач
Корзина привязана не к пользователю, а к фиксированному покупателю. У гостя это запись, созданная по куке, у авторизованного - своя. Смена авторизации переносит содержимое, и потерянная корзина почти всегда объясняется этим переносом, а не ошибкой в коде.
Цена позиции берётся у провайдера, а не задаётся при добавлении. Провайдер каталога подтягивает цену, название и вес по идентификатору товара. Своя цена живёт только с флагом ручной стоимости, иначе её затрёт ближайший пересчёт.
Корзина и заказ - разные объекты. Заказ забирает корзину при создании, и после сохранения её строки принадлежат уже заказу. Поэтому для покупки в один клик берут новую корзину, а не корзину покупателя.
Решения подтемы
- Работа с корзиной из кода: добавление, количество, пересчёт - добавить товар, поменять количество, применить свою цену.
- Не работает оформление заказа - корзина есть, а на оформлении пусто.
- Добавление в корзину: из списка, из кода, с нужными свойствами - поставщик данных, свойства позиции, количество и пересчёт.
- События корзины: подарки, ограничения, пересчёт - перехват добавления, запрет позиции, подарок и пересчёт.
- Брошенные корзины: поиск, письмо, чистка старых - выборка корзин без заказа, письмо и чистка старых.
- Не работает кнопка «В корзину» - товар без цены, скрипты шаблона, запрос браузера, остатки.
- Корзина гостя и вход покупателя: привязка, слияние, чистка - идентификатор покупателя, слияние при входе, срок жизни, чистка.
- Дополнительные услуги в заказе: упаковка, сборка, страховка - позиция или свойство, цена и налог, вывод на оформлении, обмен.
Частые вопросы
Почему корзина очищается при входе на сайт?
При авторизации содержимое переносится с гостевой записи на пользовательскую. Если у пользователя уже была корзина, поведение зависит от настроек модуля: содержимое либо складывается, либо заменяется.
Можно ли добавить товар в корзину с конкретного склада?
Склад указывается не у позиции корзины, а у отгрузки заказа. В корзине хранится количество, а распределение по складам происходит при создании отгрузки.
Как посчитать итог корзины со скидками?
Через объект заказа: правила корзины применяются на пересчёте заказа, а не самой корзины. Сумма по позициям без этого шага даст цену без скидок.
Почему товар добавляется, а количество не меняется?
Повторное добавление того же товара увеличивает количество существующей позиции, а не создаёт новую. Если нужна отдельная строка, у позиций должны различаться параметры - например, свойства.
Связанные темы
- Каталог и продажи - корзина, заказ и их коллекции
- Цены, скидки и купоны - как считаются скидки корзины
- Заказы - что происходит после оформления
- Оформление заказа - что происходит после корзины
- Правила работы с корзиной: условия, порядок, отладка - откуда берутся скидки в корзине
- Раздел Интернет-магазин