Ознакомьтесь с обновлениями продуктов, которые мы анонсировали! Смотрите, что нового.

/

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

О статье

Дата актуальностиАктуальна с 25 мая 2026 года
Связанные задачи
Связанные статьи
Ключевые слова

Общая информация

URL страницыhttps://semena.ru/order/
Компонентbitrix:sale.order.ajax
Путь к шаблону/local/templates/semena/components/bitrix/sale.order.ajax/custom-ahv/

Условия и функции

Функции в файле template.js

Ниже представлены два раздела с

SaleOrderStoreList

НаименованиеОписание
isZeroCoordsФункция-проверка на нулевые координаты (широта, долгота).
getDefaultCoordsВыставляет дефолтные координаты – Москва. Связан с проверкой на нулевые координаты
initИнициализирует карту Yandex Maps после готовности API (ymaps.ready). Определяет стартовые координаты (из delivery.COORDS или дефолтные), создаёт карту и запускает построение кластеров магазинов.
interceptОбрабатывает клики внутри карты/балуна.Закрывает список магазинов при клике вне элемента Обрабатывает выбор магазина (store_list__selector) Обновляет выбранный магазин в родительском компоненте и пересоздаёт обработчики взаимодействия
createPlacemarkСоздаёт метку для конкретного магазина на карте. Формирует содержимое: название, адрес, график работы, телефон, описание и кнопку выбора магазина.
createClustererСоздаёт кластер объектов карты.
updateОбновляет состояние карты при изменении данных доставки.Проверяет валидность карты Центрирует карту Очищает старые объекты Пересоздаёт кластеры магазинов

SaleOrderAjax

НаименованиеОписание
validateПроверяет обязательные поля формы перед оформлением заказа. Формирует список ошибок, если какие-то поля из VALIDATION не заполнены. Для пункта BUYER_STORE дополнительно учитывает тип доставки. При ошибках добавляет их в ERROR_LIST и прокручивает страницу вверх.
sendОтправляет AJAX-запрос на сервер через BX.ajax. Собирает данные формы, добавляет системные параметры Bitrix и переданные payload-данные. Вызывает callback с ответом сервера.
applyOrderDataОбновляет данные заказа после ответа сервера. Проверяет корзину на запрещённые товары, сохраняет их и включает флаг hasForbiddenItems для определенного типа корзины. Формирует слепок корзины для последующего сравнения. Также обновляет списки доставки, оплаты, итоговую сумму и свойства заказа. При необходимости автоматически переключает доступный способ доставки.
updateПроверяет, можно ли оформить заказ: заполнены ли обязательные поля, выбрана ли доставка и оплата. После этого делает запрос на сервер для обновления данных заказа и применяет полученный результат через applyOrderData.
saveФинальная проверка перед оформлением заказа. Проверяет согласие пользователя, минимальную сумму и валидность формы. Затем обновляет данные заказа и сравнивает текущую корзину с сохранённым состоянием. Если всё корректно – запускает финальное сохранение через executeFinalSave.
executeFinalSaveОтправляет финальный запрос на оформление заказа. Если сервер возвращает ошибки (связанные со стоимостью корзины – ниже порогового значения) – выводит их пользователю. Если заказ успешно создан – перенаправляет пользователя на страницу результата.
selectedPaySystemВозвращает выбранную платежную систему из списка, у которой стоит флаг CHECKED.
selectedDeliveryВозвращает выбранный способ доставки из списка, у которого стоит флаг CHECKED.
visiblePaySystemsФильтрует список платежных систем. Скрывает определённые варианты оплаты в зависимости от выбранной доставки и прав администратора.
filteredDeliveryListВозвращает список доставок, исключая запрещённую доставку, если в корзине есть запрещённые товары.Связан с выводом под определенный тип корзины.

Путь: /local/templates/semena/components/bitrix/sale.order.ajax/custom-ahv/template.php

Название поляОписание
COUPON_LISTСписок применённых или доступных купонов. Используется для отображения скидок и их применения к заказу. Может быть пустым, если купонов нет.
PERSON_TYPE_LISTСписок типов плательщика (например, физлицо или юрлицо). Определяет, какие поля формы и правила оформления будут доступны пользователю.
DELIVERY_LISTОбъект со всеми доступными способами доставки. Каждый элемент содержит данные о доставке (ID, название, стоимость, выбран ли сейчас и т.д.). Используется для отображения и выбора доставки.
DELIVERY_LIST_SORTМассив с порядком отображения доставок. Хранит ID доставок в нужной последовательности, чтобы не зависеть от порядка в DELIVERY_LIST.
PAY_SYSTEM_LISTСписок доступных способов оплаты. Каждый элемент содержит информацию об оплате (ID, название, выбран ли и др.). Используется для выбора пользователем способа оплаты.
CURRENT_BUDGET_FORMATEDОтформатированный баланс пользователя (например, бонусный счёт или внутренний кошелёк). Используется, если доступна оплата с внутреннего счёта.
PROPERTY_LISTСписок свойств заказа (поля формы). Это имя, телефон, адрес и другие данные, которые пользователь должен заполнить. Используется для генерации формы оформления заказа.
TOTALОбъект с итоговой информацией по заказу. Содержит сумму заказа, скидки, количество товаров, минимальную сумму и другие финансовые параметры. Используется для отображения итогов и проверок перед оформлением.
VALIDATIONОбъект правил валидации. Ключ — это поле формы, значение — текст ошибки. Используется в методе validate для проверки заполненности обязательных полей.
ERROR_LISTСписок текущих ошибок при оформлении заказа. Заполняется при валидации или ответах сервера и отображается пользователю.
SHOW_DELIVERY_PRICEФлаг, показывать ли стоимость доставки. Меняется в зависимости от выбранного способа оплаты.
IS_AUTHORIZEDФлаг авторизации пользователя. Показывает, залогинен ли пользователь, влияет на доступные действия и данные.
IS_ADMINФлаг администратора. Даёт дополнительные права, например доступ к определённым способам оплаты или доставки.
FORBIDDEN_SECTION_IDSСписок ID разделов (категорий), товары из которых запрещены для определённых условий. Используется для проверки корзины и ограничения доставки.
userCanBuyФлаг, можно ли оформить заказ. Становится true, если заполнены обязательные поля и выбраны доставка и оплата.
basketSnapshotСтрока-снимок текущей корзины (ID товаров и количество). Используется для проверки, не изменилась ли корзина перед оформлением заказа.
hasForbiddenItemsФлаг наличия запрещённых товаров в корзине. Влияет на доступные способы доставки.
forbiddenItemsNamesСписок названий запрещённых товаров. Используется для уведомления пользователя о проблемных позициях.

В файле custom-ahv/components/

Папка location.selector/

ФайлОписание
template.phpОсновной шаблон выбора местоположения. Содержит текстовое поле для ввода города или адреса, скрытое поле с кодом выбранной локации и список подсказок. Используется для поиска и выбора местоположения через автодополнение.
script.jsСкрипт выпадающего списка вариантов местоположения. Получает список найденных локаций через items и отображает их пользователю.

Папка order.delivery/

ФайлОписание
template.phpШаблон отображения способа доставки. Выводит карточку доставки с выбором, стоимостью, сроками и пунктами выдачи.
script.jsОбрабатывает выбор способа доставки, открытие списка пунктов выдачи и обновление оформления заказа после изменений.

Папка order.paysystem/

ФайлОписание
template.phpВыводит карточку оплаты с radio-кнопкой, логотипом, названием и описанием платёжной системы.
script.jsОбрабатывает выбор платёжной системы и запускает обновление оформления заказа для пересчёта зависимых данных.

Папка order.property/

ФайлОписание
template.phpВыводит поля формы оформления заказа: текстовые поля, email, телефон, адрес, radio/checkbox свойства и скрытое поле локации.
script.jsОбрабатывает работу полей формы, автоподсказки адреса через DaData, определение локации Bitrix, выбор адреса, генерацию атрибутов полей и работу enum-свойств (radio/checkbox).

Дополнения в файле init.php :

Для случаев, когда требуется добавить значение или свойство в данные для фронтенда, то необходимо указать будет их в событии, срабатывающем каждый раз для SaleOrderAjax

EventManagerНаименование событияОписание
OnSaleComponentOrderJsDataIdentifyBasketTypeОбработчик события OnSaleComponentOrderJsData, который срабатывает при формировании данных заказа для фронтенда. Проходит по свойствам товаров в корзине и ищет свойство BASKET_TYPE. Если находит — записывает его значение в JS_DATA.TOTAL.BASKET_TYPE. Дополнительно по этому типу получает минимальную сумму заказа через Basket::getData и сохраняет её в JS_DATA.TOTAL.BASKET_MIN_PRICE. Используется для определения типа корзины и применения соответствующих ограничений (например, минимальной суммы заказа).









Для тестировщика

Данный пункт служит для проверки корректности полного сценария работы страницы оформления заказа: от заполнения информации о покупателе и выбора адреса доставки до успешного оформления заказа по кнопке подтверждения.

Блок №1. Информация о клиенте

ПолеОбязательноеАвтозаполнениеПримечание
ФамилияДаДа. Берет значения из личного кабинета пользователя, либо из профиля покупателя.Поля не объединяются в единое значение (раньше было единое поле «ФИО покупателя») и записываются по отдельности в информации о заказе:
ИмяДа
ОтчествоДа
Телефон (мобильный)ДаНе принимает иные символы, кроме числовых значений.
ИндексДаЗаполняется после выбора «Адреса доставки», либо из профиля покупателя.
Адрес доставкиДаЕсли выбрана доставка с выбором ПВЗ, то заполняется после выбора через кнопку.
Комментарий к заказуНетНет
EmailНетНет

Блок №2. Способ доставки

Таблица правил работы с корзиной + внутренних настроек корзины для каждого из типов корзины:

Тип корзиныМинимальная пороговая стоимостьБесплатная доставкаДоставка
P1 – Семенаот 1000 ₽от 3000 ₽300 ₽
P2, P3, P4, P5 – Саженцыот 10000 ₽790 ₽
P6 – Саженцыот 0 ₽

Таблица отображения кнопки «Выбрать пункт выдачи» у службы доставки и её профиля:

Служба доставкиТип доставкиПод какие типы корзин?
Почта Россиибез выбора ПВЗВсе
с выбором ПВЗ (скрыт)
СДЭКс выбором ПВЗ
5Postс выбором ПВЗP1 – Семена
BoxBerry

При выборе пункта доставки, если не заполнено поле «Адрес доставки», то по дефолту карта отображает г. Москва. Если же поле заполнено, то карта по возможности центрируется по указанному городу.





Блок №3. Способ оплаты

Стоимость доставки выводится тогда, когда покупатель имеет корзину на сумму меньше, чем пороговая стоимость для бесплатной доставки. Таблица с пороговым значением для бесплатной доставки указана в заголовке выше [Блок №2. Способ доставки]

Под какие типы корзин?Наименование оплатыСтоимость доставки
P1 – СеменаСовкомБанк300 ₽
Наложенный платежРасчет при получении (0 ₽)
Плати частями300 ₽
ЮКасса300 ₽
P2, P3, P4, P5, P6 – СаженцыСовкомБанк790 ₽
Наложенный платежРасчет при получении (0 ₽)
Плати частями790 ₽
ЮКасса790 ₽


Боковой блок оформления заказа

Условия работы кнопки офомления заказа

Ниже перечислены пункты условий…

ОписаниеЧто делает?
1Сравнение стоимости заказа с минимально допустимым значением стоимости заказа. Вывод сообщения ошибки
2Проверка на заполненность обязательных полейВывод сообщения ошибки
3Сравнение актуального типа корзины на странице оформления заказа и активного типа корзины на странице корзиныПерезагружает компоненты на странице оформления заказа и загружает новые данные
4Пользователь не дал согласие на обработку данныхВывод сообщения ошибки

После нажатия кнопки срабатывают все указанные проверки. Большинство оповещают пользователя сообщением об ошибке:

Основные правила работы с корзиной

Ниже перечислены основные правила работы с корзиной, влияющие на оформление заказа:

IDНаименованиеОписание
110Бесплатная доставка СЕМЕНА (P1)Если общая стоимость без учета доставки больше или равно 3000₽, то доставка бесплатная
114Доставка Семена - 300рубТовары для P1 – доставка 300₽
113Доставка при Наложенном платеже (Саженцы)Применяет для всех 100% скидку при выбранном способе оплаты – «Наложенный платеж»
115 Доставка саженцы - 790 рублейЕсли общая стоимость без учета доставки меньше 12000₽, то доставка = 790₽ для всех типов корзин, кроме P1
116Доставка Наложенный платеж СеменаПрименяет для всех 100% скидку при выбранном способе оплаты – «Наложенный платеж»
117Доставка рассады цветов – 790 рублейПрименяет для типа корзины P6 стоимость доставки = 790₽