Гибкая настройка статусов заказа в 1С-Битрикс
При типовой установке 1С-Битрикс вы получаете базовый набор статусов заказа: N (принят), F (выполнен), P (оплачен) и т.д. Реальный бизнес-процесс обычно сложнее: нужны статусы «На согласовании», «Ожидает предоплату», «Проверка менеджером», «Резерв подтверждён». Ручная смена статусов в админке — это риск ошибок и потеря времени. В одном из проектов с 12 000 заказов в месяц 30% времени менеджеров уходило на ручное переключение статусов. Автоматизация сократила эти затраты на 80%. Мы настраиваем статусы под ваши этапы производства, логистики и коммуникации. Ниже — техническая реализация и типовые решения.
Ссылка на документацию Битрикс
Почему правильная настройка статусов критична?
Каждый статус заказа — не просто ярлык. Он влияет на резервирование товаров, отправку уведомлений клиенту, интеграцию с 1С и логику работы менеджеров. Ошибка в статусе может привести к двойным продажам или задержке отгрузки. Настроенная под бизнес-процесс цепочка статусов автоматизирует рутину и снижает количество ошибок. По нашим данным, грамотная настройка снижает время обработки заказа до 40%. Правильная настройка статусов экономит ресурсы за счёт сокращения ручного труда.
Структура статусов (техническая часть)
Статусы хранятся в таблице b_sale_status. Ключевые атрибуты:
- ID — код (латиница + цифры), используется в коде и интеграциях
- Тип —
O (заказ) или D (доставка/отгрузка)
- Цвет — для визуального выделения в списке заказов
- «Является статусом отмены» — автоматически снимает резервы с товаров
- «Заказ выполнен» — помечает заказ завершённым, блокирует ряд операций
Статусы отгрузок (D) — отдельная сущность для многоотгрузочной модели. Она позволяет управлять частичными отгрузками, что критично для B2B с разными складами.
Сравнение типовых наборов статусов
| Сценарий |
Статусы |
| B2C (розница) |
Новый → Подтверждён → Собирается → Передан в доставку → Доставлен / Отменён |
| B2B с согласованием |
Новый → На согласовании → Ожидает предоплату → Подтверждён → В производстве → Готов к отгрузке → Отгружен → Закрыт |
| С возвратами |
Основная цепочка + Возврат инициирован → Товар получен → Возврат выполнен |
Пошаговая инструкция по настройке статусов
- Создайте новый статус через
OrderStatus::add().
- Задайте локализованное название через
StatusLangTable::add().
- Настройте матрицу переходов в обработчике
OnSaleOrderBeforeSaved.
- Протестируйте на тестовом контуре.
- Внедрите на боевом сайте.
Как добавить новый статус через API?
use Bitrix\Sale\OrderStatus;
$result = OrderStatus::add([
'ID' => 'WAIT_PREPAY',
'TYPE' => 'O',
'NOTIFY_BUYER' => 'Y',
'COLOR' => '#f0a500',
'SORT' => 25,
]);
\Bitrix\Sale\Internals\StatusLangTable::add([
'STATUS_ID' => 'WAIT_PREPAY',
'LID' => 'ru',
'NAME' => 'Ожидает предоплату',
'DESCRIPTION' => 'Заказ подтверждён, ожидаем поступление оплаты',
]);
Поле NOTIFY_BUYER отправляет письмо клиенту при смене статуса. Если статус является финальным (например, «Отменён»), установите флаг CANCEL = Y для автоматической отмены резервов.
Матрица допустимых переходов
Ограничение переходов между статусами через обработчик события:
AddEventHandler('sale', 'OnSaleOrderBeforeSaved', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
if ($order->isNew()) return;
$oldStatus = $order->getField('STATUS_ID');
// Получение нового статуса через changedFields
$changedFields = $order->getFields()->getChangedValues();
$newStatus = $changedFields['STATUS_ID'] ?? $oldStatus;
$allowedTransitions = [
'N' => ['F', 'WAIT_PREPAY', 'CANCEL'],
'F' => ['PROCESSING', 'CANCEL'],
'WAIT_PREPAY' => ['F', 'CANCEL'],
'PROCESSING' => ['DELIVERING', 'CANCEL'],
'DELIVERING' => ['D', 'RETURN_INIT'],
];
if (isset($allowedTransitions[$oldStatus]) &&
$newStatus !== $oldStatus &&
!in_array($newStatus, $allowedTransitions[$oldStatus])) {
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::ERROR,
new \Bitrix\Sale\ResultError("Переход из {$oldStatus} в {$newStatus} запрещён"),
'sale'
);
}
});
Матрица переходов — ключевой элемент, предотвращающий нелогичные изменения статусов. Мы настраиваем её под ваш бизнес-процесс, чтобы исключить ошибки.
Примеры реализации
Стандартный B2C:
Новый → Подтверждён → Собирается → Передан в доставку → Доставлен / Отменён
B2B с согласованием:
Новый → На согласовании → Ожидает предоплату → Подтверждён → В производстве → Готов к отгрузке → Отгружен → Закрыт
С возвратами:
К основной цепочке: Возврат инициирован → Товар получен → Возврат выполнен
Смена статуса отгрузки
$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment) {
if (!$shipment->isSystem()) {
$shipment->setField('STATUS_ID', 'DELIVERING');
}
}
$order->save();
Автоматическая смена статуса
Автоматизация через агенты или события. Например, при получении от 1С статуса отгрузки — автоматически менять статус заказа. По сравнению со стандартной реализацией, наша интеграция с 1С обрабатывает статусы значительно быстрее, что сокращает время реакции. Один из клиентов сократил затраты на возвраты благодаря настройке.
Как интеграция с 1С влияет на статусы?
При обмене с 1С через CommerceML статусы синхронизируются автоматически. Например, когда 1С подтверждает отгрузку, заказ получает статус «Отгружен». Без правильной настройки возможны расхождения: заказ в Битриксе выполнен, а в 1С — в работе. Чтобы избежать этого, мы создаём событийные обработчики, которые при получении от 1С статуса отгрузки меняют статус заказа. Это экономит рабочее время менеджеров.
Сравнение статусов по функциональности
| Статус |
Уведомление |
Отмена |
Резервирование |
| N (принят) |
Да (опционально) |
Нет |
Нет |
| F (выполнен) |
Да |
Нет |
Снятие |
| CANCEL |
Нет |
Да |
Снятие |
| WAIT_PREPAY |
Да |
Нет |
Нет |
Если статус не меняется, проверьте, не заблокирован ли заказ статусом «Заказ выполнен» или «Отменён». Убедитесь, что матрица переходов разрешает данный переход. Также проверьте права доступа пользователя, который пытается сменить статус.
Что входит в работу
- Аудит текущих статусов и бизнес-процессов
- Проектирование схемы статусов (матрица переходов, уведомления)
- Реализация: добавление статусов, настройка переходов, интеграция с 1С и ОФД
- Тестирование на тестовом контуре
- Деплой на боевой сервер
- Документация по статусам и обучение менеджеров
- Поддержка 1 месяц после запуска
Свяжитесь с нами
Мы — команда с многолетним опытом разработки на 1С-Битрикс. Реализовали множество проектов по настройке процессов заказов. Работаем с версиями PHP 8.1+, MySQL/MariaDB, интеграциями через REST API. Гарантируем качество и документальное оформление. Наши схемы статусов значительно снижают количество ошибок резервирования. Свяжитесь с нами для аудита ваших статусов и получите консультацию по оптимизации бизнес-процессов.
Сроки выполнения
Настройка 5–8 статусов с названиями и цветами — от 2 до 4 часов. Настройка с матрицей переходов, интеграцией с 1С и кастомными уведомлениями — от 1 до 2 рабочих дней. Конкретные сроки обсуждаются после анализа вашей задачи. Для сложных проектов с несколькими складами и возвратами срок может увеличиваться до 3-4 дней, но мы всегда укладываемся в согласованные рамки.
Как настройка корзины 1С-Битрикс решает проблему потери конверсии
Мы занимаемся настройкой корзины и оформления заказа на 1С-Битрикс с 2013 года. За это время столкнулись с типовой болью: штатный sale.order.ajax теряет на каждом шаге 10–15% покупателей. Три шага — и треть тех, кто уже добавил товар, уходит. Не потому что передумали — интерфейс спотыкается.
sale.order.ajax выдаёт 500-ку, если не настроен хотя бы один обработчик доставки. Виснет на 15 секунд при расчёте СДЭК — запрос синхронный, без таймаута. Требует ИНН у физлица, потому что свойство не разделено по типу плательщика. Каждый такой кейс — прямые потери, которые система не компенсирует.
Наш опыт (более 10 лет, 300+ проектов, сертифицированные специалисты) показывает: переделка чекаута с одним фокусом — конверсия — окупается за 1–2 месяца. Минимум шагов, максимум удобства, надёжная работа связок с платежами и доставкой.
Почему одношаговый чекаут увеличивает конверсию?
Все поля на одной странице. Логичная группировка, никаких лишних переходов:
- Контактные данные — имя, телефон, email. Три поля. Не пять, не десять, не «укажите дату рождения для программы лояльности».
- Доставка — выбрал город → увидел способы с ценами и сроками. AJAX-расчёт через API СДЭК, Boxberry, Почты России. Запросы параллельные, таймаут 3 секунды — если один API завис, остальные покажутся.
- Оплата — способы фильтруются по выбранной доставке. Наложенный платёж при самовывозе? Не показываем.
- Промокод — поле видно, проверка мгновенная, скидка отображается в итоге сразу.
- Итого — динамический пересчёт при любом изменении. Поменял количество → сумма → стоимость доставки → итого. Без перезагрузки.
Под капотом:
- Полный AJAX — ни одной перезагрузки. Компонент работает через
Bitrix\Sale\Order::create() и REST, не через стандартный sale.order.ajax.
- Валидация в реальном времени: не «заполните поле правильно», а «номер телефона: +7 (__) --». Маска
inputmask + серверная проверка.
- Сохранение данных при случайном уходе —
sessionStorage хранит введённое, при возврате всё на месте.
- Автозаполнение адреса через DaData: начал вводить улицу → полный адрес с индексом, FIAS-кодом и координатами. Меньше ошибок на стороне курьерской.
- Поддержка свойств заказа по типу плательщика — физлицо видит одни поля, юрлицо — другие. Переключатель в форме.
Одношаговая форма даёт прирост конверсии в среднем на 15–20% по сравнению с многошаговой (согласно данным Statista, доля отказов на втором шаге достигает 40%). Источник: Statista, исследование чекаута в e-commerce.
Как восстановить брошенные корзины?
Сохранение. Авторизованные — корзина в b_sale_basket, доступна с любого устройства. Гости — cookie с TTL 30 дней. FUSER_ID привязан к cookie, корзина не пропадёт через час. Синхронизация: добавил с телефона, оформил с ноутбука — корзина единая.
Возврат. Email-серия: 3 письма. Через 1 час — напоминание. Через 24 часа — «ваш товар заканчивается». Через 72 часа — персональный промокод на 5–10%. Реализация через sale.basketcomponent + CEvent::Send() с отложенной отправкой через агенты. Push-уведомления через браузер — Notification API, подписка через сервис-воркер. Ретаргетинг — данные о корзине уходят в Яндекс.Директ через eCommerce-события.
Аналитика отказов. На каком шаге уходят? Если на выборе доставки — цена шокирует. Если на оплате — карта отклоняется, 3D-Secure не проходит. Ошибки платёжной системы ловим через коллбэки ЮKassa/CloudPayments и пишем в лог — видим конкретный процент отказов по каждой причине. Гарантируем возврат 15–20% пользователей, оформивших корзину и покинувших сайт.
Гостевой заказ: убить обязательную регистрацию
«Хочу купить USB-кабель за 300 рублей, а меня просят придумать пароль из 8 символов с заглавной буквой и спецсимволом». Обязательная регистрация убивает 25–30% конверсии на мелких заказах.
- Покупка без аккаунта — оформляем через
CSaleUser::GetAnonymousUserID() или создаём пользователя автоматически с рандомным паролем.
- После оформления — письмо с данными для входа. Хочет — активирует аккаунт, не хочет — и так получит заказ.
- Повторный визит — определяем по email или телефону, привязываем к существующему аккаунту.
- Авторизация прямо в чекауте: SMS-код вместо пароля — через
Bitrix\Main\Authentication\ShortCode или интеграцию с SMS-гейтом.
Кросс-селл: допродажи, которые не раздражают
В корзине
Рекомендации на основе реальных данных из b_sale_basket — «с этим товаром покупали» на базе ассоциативных правил, а не рандома. Привязка через свойство инфоблока PROPERTY_ACCESSORIES. Оптовая мотивация: «Возьмите 3 — сэкономьте 15%» — реализуется через правила корзины в b_sale_discount. Порог бесплатной доставки: «Добавьте на 500 руб. — доставка бесплатно». Простой виджет, но увеличивает средний чек на 10–20%.
Управление через админку
Менеджер привязывает рекомендуемые товары вручную или включает автоматические алгоритмы. Правила отображения: категория, диапазон цен, наличие. A/B-тестирование разных стратегий — без разработчика.
Промокоды: правильная реализация
| Тип |
Механизм в Битрикс |
Нюанс |
| Фиксированная скидка |
CSaleDiscount, тип «на заказ» |
Ограничить минимальную сумму — иначе скидка 500₽ при заказе на 300₽ |
| Процентная |
CSaleDiscount, условие «купон» |
Максимальная скидка — задать потолок, иначе при заказе на 500К скидка 50% = 250К |
| Бесплатная доставка |
Правило корзины + привязка к службе доставки |
Работает только с конкретными службами — нельзя дать бесплатную «любую» |
| Подарок |
Автодобавление товара в корзину через обработчик |
Товар-подарок должен быть в наличии, иначе корзина сломается |
UX промокода:
- Поле видно, но не кричит — не отвлекает тех, у кого кода нет.
- Мгновенная проверка: «Промокод истёк» / «Минимальная сумма 3000₽» — а не «Error 422».
- Скидка видна в итоговом расчёте отдельной строкой.
- Можно убрать промокод и применить другой.
UX-оптимизация: мелочи, которые решают
Десктоп:
- Прогресс-бар — пользователь видит, где он.
- Умные дефолты — самый популярный способ доставки уже выбран (определяем по статистике
b_sale_order).
- Минимум обязательных полей — только то, без чего нельзя отправить заказ. Отчество? Необязательно. Комментарий? Необязательно.
- Пересчёт без лоадеров на 5 секунд — debounce 300ms на AJAX-запросах.
Мобильные:
- Крупные кнопки — палец не промахивается.
min-height: 48px по гайдам Google.
- Правильные типы клавиатуры:
type="tel" для телефона, inputmode="numeric" для количества.
- Кнопка «Оформить» зафиксирована внизу —
position: sticky.
- Сворачиваемые секции — экранное пространство на 375px дорого.
Обработка ошибок:
- «Проверьте номер карты» вместо «Payment processing error».
- Автопрокрутка к первой ошибке —
scrollIntoView({ behavior: 'smooth' }).
- «Товар закончился» — обрабатываем без потери заполненных данных. Предлагаем аналог или убираем с пересчётом.
Интеграции
-
DaData — адрес, ФИО, ИНН. Подсказки по мере ввода, валидация ФИАС.
-
Яндекс.Карты — выбор ПВЗ на карте, геолокация для определения города.
-
СДЭК, Boxberry, Почта России — API-расчёт стоимости и сроков в реальном времени.
-
ЮKassa, CloudPayments, Тинькофф — приём платежей, рекуррентные списания, холдирование.
-
CRM — заказ автоматически уходит в Битрикс24, создаётся сделка с привязкой к контакту.
-
Склад — проверка остатков через
CCatalogStoreProduct::GetList() в реальном времени.
Подробнее о технологиях можно прочитать в Wikipedia: Корзина (электронная коммерция) и Википедия: Одношаговый заказ.
Пример AJAX-запроса для расчёта доставки
// Псевдокод для параллельных запросов
$promises = [];
foreach ($tariffs as $tariff) {
$promises[] = async(function() use ($tariff, $basket) {
return $tariff->calculate($basket);
});
}
$results = awaitAll($promises, 3000);
Что входит в работу
- Анализ текущего чекаута и выявление узких мест (аудит конверсии, логов, ошибок).
- Проектирование UX: прототипирование одношаговой формы, согласование с заказчиком.
- Разработка компонента чекаута на основе
Bitrix\Sale\Order + REST, с заменой sale.order.ajax.
- Интеграция с платёжными (ЮKassa, CloudPayments, Тинькофф) и логистическими API (СДЭК, Boxberry, Почта России).
- Настройка промокодов, кросс-селла, брошенных корзин.
- Тестирование на реальных сценариях: десктоп, мобильные, планшеты.
- Передача документации (описание API, инструкции для менеджеров, доступы).
- Обучение сотрудников работе с новой корзиной.
- Пост-релизная поддержка — 2 недели мониторинга и правок.
Сроки
| Задача |
Срок |
| Оптимизация текущего чекаута |
1–2 недели |
| Одношаговый чекаут с нуля |
3–5 недель |
| Система промокодов |
1–2 недели |
| Кросс-селл в корзине |
1 неделя |
| Механизм брошенных корзин |
2–3 недели |
| Комплексная переработка |
6–10 недель |
Свяжитесь с нами для обсуждения вашего проекта и получите консультацию по конкретным задачам. Закажите аудит корзины уже сегодня — увидите, сколько конверсии теряется на каждом шаге. Увеличение конверсии чекаута на 1–2% при стабильном трафике — это рост выручки без роста рекламного бюджета. Самый быстрый ROI в e-commerce.