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

Редактирование корзины прямо на странице оформления

Редактирование состава корзины прямо на странице оформления заказа в 1С-Битрикс

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

Эта статья — о том, как дать покупателю менять состав заказа прямо на странице оформления в 1С-Битрикс: увеличивать и уменьшать количество, удалять позиции, видеть мгновенный пересчёт цен, скидок и итога — без ухода со страницы и без потери заполненных полей. Разберём механику на объекте sale.order, AJAX-обновление и подводные камни с остатками. Если оформление уже подтормаживает, начать стоит с аудита и оптимизации 1С — часто корень в медленном обмене, а не во фронтенде.

Коротко

  • Редактирование корзины на шаге оформления убирает лишние переходы и снижает отказы на финальном экране.
  • Пересчёт делайте через штатный объект Bitrix\Sale\Order, а не считайте суммы и скидки руками на фронте.
  • Обновляйте только блок состава и итогов по AJAX — поля адреса и доставки трогать нельзя.
  • Остаток и кратность проверяйте на сервере в момент правки, иначе заказ уйдёт на несуществующий товар.

Зачем править корзину на шаге оформления

Классический сценарий магазина разводит корзину и оформление на два экрана: сначала правишь состав, потом переходишь к контактам и доставке. Логика понятная, но она предполагает, что на финальном шаге пользователь уже ничего не хочет менять. На практике это не так: именно на оформлении человек внимательно смотрит на итоговую сумму, вспоминает про количество, замечает лишнюю позицию.

Если исправить это можно только возвратом в корзину, вы платите отказами. Каждый переход «назад» — это перезагрузка, риск потерять контекст и лишний повод передумать. Возможность подправить количество и удалить позицию не сходя с места превращает раздражающий тупик в спокойное действие: увидел, поправил, оплатил.

Для B2B это ещё важнее: оптовый заказ часто состоит из десятков позиций, и корректировки на финальном шаге — норма, а не исключение.

Что именно должен уметь пользователь

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

Чего делать не стоит — превращать шаг оформления в полноценную корзину со всеми промо-блоками и рекомендациями. Задача финального экрана — довести до оплаты, а не удерживать. Редактирование должно быть лаконичным.

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

Как устроено оформление в 1С-Битрикс

В редакциях с модулем «Интернет-магазин» за оформление отвечает компонент sale.order.ajax (или его аналоги в готовых решениях). Он выводит форму заказа, состав корзины, выбор доставки и оплаты и уже умеет работать по AJAX — то есть пересчитывать заказ без полной перезагрузки. Это ключевой факт: чаще всего задачу решают не написанием оформления с нуля, а доработкой шаблона этого компонента.

Под капотом лежит объектная модель продаж на D7: Bitrix\Sale\Order как заказ, Basket как коллекция товаров, BasketItem как отдельная позиция. Именно через эти объекты идут добавление, изменение количества, удаление и пересчёт. Понимание, что работа с заказом — это работа с ORM-объектами, а не с прямыми SQL-запросами, экономит массу времени; базовые принципы мы разбирали в статье про D7 ORM в Битрикс.

Пересчёт заказа через sale.order

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

  1. Находим позицию. В коллекции корзины заказа берём нужный BasketItem по его идентификатору.
  2. Меняем количество. Устанавливаем новое значение либо удаляем позицию из коллекции.
  3. Запускаем пересчёт. Заказ пересчитывает суммы позиций, применяет правила работы с корзиной (скидки) и обновляет расчёт доставки.
  4. Сохраняем и отдаём. Сохраняем заказ и возвращаем на фронт новые суммы, скидки и итог.

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

Источник истины — сервер. Фронтенд показывает то, что вернул пересчёт заказа. Никогда не формируйте итоговую сумму на клиенте: скидки, наценки и правила корзины в 1С-Битрикс живут на сервере, и только он знает правильную цифру.

AJAX без перезагрузки страницы

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

Ключевой нюанс — не перерисовывать всю форму. Поля ФИО, адреса, комментария и выбранный способ доставки должны остаться нетронутыми. Поэтому обновляют точечно: заменяют DOM только там, где данные изменились. Если проект использует REST-эндпоинты для взаимодействия фронта с бэком, тем более важно закрыть их авторизацией и валидацией — об этом мы писали в материале про безопасность REST и вебхуков в Битрикс.

Остатки и наличие в момент правки

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

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

Скидки, промокоды и кратность

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

Отдельная тема — кратность. Если товар продаётся упаковками или коробами, количество должно подгоняться под шаг заказа, а не принимать любое число. Это особенно характерно для опта: покупатель не может заказать 7 штук, если фасовка по 5.

Проверяйте пороги скидок вживую. Уменьшив количество, покупатель может «выпасть» из скидки от суммы — и цена вырастет. Это нормально, но пользователь должен видеть, почему изменился итог, иначе он решит, что магазин «накручивает».

UX: сообщения, состояния, мобильные

Техника — половина дела; вторая половина в том, как редактирование ощущается. Несколько принципов:

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

Реализация пошагово

Общий маршрут внедрения выглядит так. Названия пунктов зависят от редакции и решения, но логика единая:

  1. Отталкивайтесь от штатного компонента. Проверьте, что оформление уже на sale.order.ajax и работает по AJAX — это фундамент.
  2. Выведите управление в состав заказа. Добавьте в шаблон кнопки количества и удаления для каждой позиции.
  3. Опишите обработчик изменения. На сервере: найти позицию, изменить количество или удалить, пересчитать заказ, вернуть суммы.
  4. Точечно обновляйте DOM. Меняйте строку позиции, итоги и доставку, не трогая поля формы.
  5. Проверяйте остаток и кратность. На сервере ограничивайте количество доступным и шагом заказа.
  6. Пересчитывайте скидки. На том же ответе, что и суммы, чтобы экран и заказ совпадали.
  7. Прогоните боевые сценарии. Товар кончился, промокод, пороги скидок, кратность, мобильный экран.

Если фронтенд оформления собирается сложным SPA-подходом с частыми деплоями, стоит заранее выстроить процесс выкладки — про это есть отдельный разбор про CI/CD и деплой в Битрикс.

Производительность и кэш

Каждое изменение количества — это запрос к серверу, поэтому важно, чтобы он был лёгким. Несколько принципов держат оформление быстрым:

На высоконагруженных проектах разница между «мгновенным» и «залипающим» оформлением обычно определяется инфраструктурой. Как выжать максимум из окружения на BitrixVM, мы разбирали в статье про хостинг и инфраструктуру BitrixVM.

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

Чек-лист внедрения

  1. Управление в составе заказа. Количество и удаление доступны прямо на шаге оформления.
  2. Пересчёт через объект заказа. Суммы, скидки и доставка считает сервер, а не фронт.
  3. Точечное обновление DOM. Обновляются только позиция и итоги, поля формы не сбрасываются.
  4. Проверка остатка. Количество ограничивается доступным на сервере, с сообщением пользователю.
  5. Кратность соблюдена. Шаг заказа для упаковок учитывается.
  6. Скидки пересчитаны. Экран и реальный заказ всегда показывают одинаковый итог.
  7. Мобильный протестирован. Зоны нажатия крупные, случайные удаления исключены.
  8. Скорость проверена. Ответ пересчёта компактный, статика закэширована.

Вывод

Редактирование корзины прямо на странице оформления — небольшая по описанию, но заметная по эффекту доработка. Она убирает лишние переходы на самом дорогом экране воронки и снимает частую причину отказов: «хочу поправить, а некуда». В 1С-Битрикс всё уже есть под рукой — штатное оформление на AJAX и объектная модель заказа, — задача сводится к аккуратной доработке шаблона и обработчиков.

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

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

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

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

Как в 1С-Битрикс пересчитать заказ при изменении количества?

В основе штатного оформления лежит объект Bitrix\Sale\Order и коллекция корзины (Basket). При изменении количества позиции вызывается пересчёт заказа: обновляются суммы позиций, применяются скидки и правила работы с корзиной, пересчитывается доставка. Правильный подход — не считать цены вручную на фронте, а слать изменение на сервер, получать пересчитанный заказ и обновлять DOM по ответу.

Можно ли обойтись стандартным компонентом sale.order.ajax?

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

Что делать, если во время оформления товара уже нет в наличии?

Остаток нужно проверять на сервере в момент пересчёта, а не только при добавлении в корзину. Если количество превышает доступный остаток, система должна ограничить его и явно показать сообщение, а не молча оформить заказ на несуществующий товар. Актуальность остатков зависит от обмена с учётной системой, поэтому её стоит настроить надёжно.

Не сломает ли редактирование корзины скидки и промокоды?

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

Как не потерять данные форм при обновлении корзины?

Обновляйте только блок состава заказа и итогов, а поля ФИО, адреса и способа доставки не трогайте. При AJAX-подходе это решается точечной заменой части DOM, а не перерисовкой всей страницы. Если используете полную перезагрузку секции, значения полей нужно сохранять и восстанавливать, иначе пользователь будет вводить их заново.

Влияет ли редактирование корзины на скорость страницы оформления?

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

Поделиться:

Оформление теряет покупателей на финальном шаге?

Разберём воронку, доработаем корзину и оформление, свяжем остатки и скидки с 1С. Рассчитаем работу по вашему магазину.

Игорь Воскресенский

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

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