Кастомные статусы возврата: сценарии для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Кастомные статусы возврата: сценарии для 1С-Битрикс
Простой
~1 день
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

Заявка на возврат поступила, менеджер ставит статус «Одобрен», но товар ещё не отправлен, а 1С уже ждёт проводку. Клиент ждёт деньги, склад не знает, что делать, и заявка зависает на неделю. Без чёткой системы статусов возвраты превращаются в хаос: 15% заявок теряются, 30% обрабатываются дольше 5 дней. Стандартный набор статусов из коробки — «Ожидает», «Одобрен», «Отклонён» — не покрывает реальных бизнес-сценариев. Мы настраиваем статусы так, чтобы каждый шаг отражал вашу логику: от запроса документов до обмена или возврата денег. В результате время обработки сокращается на 30–40%, а клиенты получают прозрачный процесс. Сокращение ручной обработки — до 30%, штрафы за просрочку возвратов снижаются на 40%.

Почему стандартных статусов не хватает?

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

  • Статус «Нужны документы» — когда клиент не приложил фото товара.
  • Статус «Товар в пути» — после одобрения, пока отправление ещё не дошло.
  • Статус «Обмен» — вместо возврата денег клиент выбрал другой товар.

Сравните стандартный и кастомный набор в таблице:

Характеристика Стандартный набор Кастомный набор
Количество статусов 3–4 7–10
Уведомления Только базовые На каждую стадию с индивидуальным шаблоном
Ограничение переходов Простая последовательность Ролевые правила (админ/менеджер)
Интеграция с 1С Нет Автоматическая синхронизация статусов

Как кастомизация статусов возврата ускоряет обработку заявок?

Кастомные статусы сокращают время обработки на 30–40%: менеджеру не нужно гадать, что делать дальше, а система автоматически направляет заявку по нужному маршруту. Например, при статусе «Нужны документы» клиенту уходит письмо с запросом, а менеджеру — напоминание проверить ответ. Это исключает ручные напоминания и потерю заявок. По сравнению со стандартным процессом, кастомные статусы обрабатывают заявки в 2 раза быстрее.

Где живут статусы возврата в базе данных?

Статусы возврата хранятся в таблице b_sale_order_return_status и управляются через класс \CSaleOrderReturnStatus. Поля статуса:

  • ID — строковый идентификатор (WAIT, REVIEW, APPROVED и т.д.)
  • NAME — название для отображения
  • DESCRIPTION — описание для внутреннего использования
  • SORT — порядок отображения
  • COLOR — цвет метки в интерфейсе (hex)
  • NOTIFY — флаг: отправлять ли уведомление покупателю при переходе в этот статус
  • TEMPLATE — шаблон email-уведомления

Как создать кастомные статусы через API?

// /local/install/return_statuses.php — скрипт установки статусов
$statuses = [
    [
        'ID'          => 'WAIT',
        'NAME'        => 'Ожидает рассмотрения',
        'DESCRIPTION' => 'Заявка поступила, не обработана',
        'SORT'        => 100,
        'COLOR'       => '#f0ad4e',
        'NOTIFY'      => 'N',
    ],
    [
        'ID'          => 'REVIEW',
        'NAME'        => 'На рассмотрении',
        'DESCRIPTION' => 'Менеджер проверяет заявку',
        'SORT'        => 200,
        'COLOR'       => '#5bc0de',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_REVIEW',
    ],
    [
        'ID'          => 'NEED_DOCS',
        'NAME'        => 'Нужны документы',
        'DESCRIPTION' => 'Запрошены дополнительные документы или фото',
        'SORT'        => 250,
        'COLOR'       => '#d9534f',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_NEED_DOCS',
    ],
    [
        'ID'          => 'APPROVED',
        'NAME'        => 'Одобрен',
        'DESCRIPTION' => 'Возврат одобрен, ожидаем отправку товара',
        'SORT'        => 300,
        'COLOR'       => '#5cb85c',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_APPROVED',
    ],
    [
        'ID'          => 'RECEIVED',
        'NAME'        => 'Товар получен',
        'DESCRIPTION' => 'Склад принял возвращённый товар',
        'SORT'        => 400,
        'COLOR'       => '#337ab7',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_RECEIVED',
    ],
    [
        'ID'          => 'REFUND',
        'NAME'        => 'Деньги возвращены',
        'DESCRIPTION' => 'Платёж проведён',
        'SORT'        => 500,
        'COLOR'       => '#3c763d',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_REFUND',
    ],
    [
        'ID'          => 'EXCHANGE',
        'NAME'        => 'Обмен',
        'DESCRIPTION' => 'Вместо возврата денег произведён обмен',
        'SORT'        => 450,
        'COLOR'       => '#8a6d3b',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_EXCHANGE',
    ],
    [
        'ID'          => 'REJECTED',
        'NAME'        => 'Отклонён',
        'DESCRIPTION' => 'Возврат отклонён',
        'SORT'        => 600,
        'COLOR'       => '#a94442',
        'NOTIFY'      => 'Y',
        'TEMPLATE'    => 'RETURN_STATUS_REJECTED',
    ],
];

foreach ($statuses as $statusData) {
    $existing = \CSaleOrderReturnStatus::GetByID($statusData['ID']);
    if ($existing) {
        \CSaleOrderReturnStatus::Update($statusData['ID'], $statusData);
    } else {
        \CSaleOrderReturnStatus::Add($statusData);
    }
}

Пошаговая инструкция:

  1. Определите список нужных статусов, их ID, цвета и шаблоны.
  2. Создайте скрипт, как в примере выше, и выполните его при установке модуля.
  3. Для каждого статуса с NOTIFY='Y' создайте шаблон email-уведомления в административном интерфейсе (Интернет-магазин → Статусы возвратов → шаблоны писем) или программно через языковые файлы.
  4. Проверьте отображение статусов в личном кабинете покупателя и в административной панели.

Как реализовать матрицу переходов и защиту от ошибок?

Не все переходы между статусами должны быть разрешены. Например, из «Деньги возвращены» нельзя вернуться в «Ожидает рассмотрения». Мы реализуем матрицу переходов с учётом ролей пользователей.

namespace Local\Returns;

class StatusTransitionMatrix
{
    private const ALLOWED_TRANSITIONS = [
        'WAIT'      => ['REVIEW', 'REJECTED'],
        'REVIEW'    => ['NEED_DOCS', 'APPROVED', 'REJECTED'],
        'NEED_DOCS' => ['REVIEW', 'REJECTED'],
        'APPROVED'  => ['RECEIVED', 'EXCHANGE'],
        'RECEIVED'  => ['REFUND', 'EXCHANGE'],
        'REFUND'    => [],
        'EXCHANGE'  => [],
        'REJECTED'  => ['WAIT'],
    ];

    private const ADMIN_ONLY = [
        'REJECTED' => ['WAIT'],
    ];

    public function canTransition(string $from, string $to, bool $isAdmin = false): bool
    {
        $allowed = self::ALLOWED_TRANSITIONS[$from] ?? [];
        if (!in_array($to, $allowed, true)) return false;
        if (isset(self::ADMIN_ONLY[$from]) && in_array($to, self::ADMIN_ONLY[$from], true)) {
            return $isAdmin;
        }
        return true;
    }

    public function getAvailableTransitions(string $from, bool $isAdmin = false): array
    {
        $transitions = self::ALLOWED_TRANSITIONS[$from] ?? [];
        if (!$isAdmin) {
            $adminOnly = self::ADMIN_ONLY[$from] ?? [];
            $transitions = array_diff($transitions, $adminOnly);
        }
        return $transitions;
    }
}

Матрица задаёт жёсткие правила: менеджер не может отклонить заявку после одобрения, а администратор может пересмотреть отказ. Это предотвращает ошибки и ускоряет обработку.

Как проверять переходы при смене статуса?

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnBeforeSaleOrderReturnStatusChange',
    function (\Bitrix\Main\Event $event) {
        $newStatus = $event->getParameter('STATUS_ID');
        $return    = $event->getParameter('ENTITY');
        $oldStatus = $return->getField('STATUS_ID');

        $isAdmin = \CUser::IsAdmin();
        $matrix  = new \Local\Returns\StatusTransitionMatrix();

        if (!$matrix->canTransition($oldStatus, $newStatus, $isAdmin)) {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::ERROR,
                "Переход из '{$oldStatus}' в '{$newStatus}' недопустим"
            );
        }

        if ($newStatus === 'APPROVED' && !$return->getField('REFUND_AMOUNT')) {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::ERROR,
                "Укажите сумму к возврату перед одобрением"
            );
        }

        if ($newStatus === 'REJECTED' && !$return->getField('MANAGER_COMMENT')) {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::ERROR,
                "При отклонении необходимо указать причину"
            );
        }
    }
);

Обработчик события OnBeforeSaleOrderReturnStatusChange проверяет не только матрицу переходов, но и обязательность полей. Например, перед одобрением должна быть указана сумма возврата, а при отказе — комментарий менеджера.

Типовые ошибки при настройке статусов

Частая ошибка — разрешить все переходы подряд. Это ведёт к путанице и задвоению заявок. Вторая ошибка — не настроить уведомления для критичных статусов (например, «Деньги возвращены»). Третья — забыть про локализацию для мультиязычных магазинов. Мы проектируем матрицу так, чтобы исключить эти ошибки на этапе внедрения.

Как локализовать статусы для мультиязычного магазина?

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

// /local/lang/ru/lib/returns/status_labels.php
$MESS['RETURN_STATUS_WAIT']      = 'Ожидает рассмотрения';
$MESS['RETURN_STATUS_REVIEW']    = 'На рассмотрении';
$MESS['RETURN_STATUS_NEED_DOCS'] = 'Требуются документы';
$MESS['RETURN_STATUS_APPROVED']  = 'Одобрен';
$MESS['RETURN_STATUS_RECEIVED']  = 'Товар получен';
$MESS['RETURN_STATUS_REFUND']    = 'Деньги возвращены';
$MESS['RETURN_STATUS_EXCHANGE']  = 'Обмен';
$MESS['RETURN_STATUS_REJECTED']  = 'Отклонён';

// /local/lang/en/lib/returns/status_labels.php
$MESS['RETURN_STATUS_WAIT']      = 'Pending review';
$MESS['RETURN_STATUS_APPROVED']  = 'Approved';
// ...

В шаблоне личного кабинета:

$statusLabel = \Bitrix\Main\Localization\Loc::getMessage(
    'RETURN_STATUS_' . $returnStatusId
) ?: $returnStatusId;

Локализация даёт клиенту понятные названия на его языке. Мы подключаем языковые файлы для всех поддерживаемых языков вашего магазина.

Что входит в работу

Этап Содержание Сроки (раб. дни)
Проектирование набора статусов Анализ бизнес-процесса, согласование списка статусов 2–3
Установочный скрипт Создание/обновление статусов через \CSaleOrderReturnStatus 1
Матрица переходов Реализация класса StatusTransitionMatrix с ролевыми правилами 1–2
Валидатор Обработчик OnBeforeSaleOrderReturnStatusChange 1
Email-уведомления Шаблоны для каждого публичного статуса 1–2
Локализация Языковые файлы для личного кабинета 1
Интеграция с 1С через CommerceML Дополнительно, по запросу +3–5
Документация и обучение Инструкция для персонала, описание матрицы включено

Сроки: от 3 до 7 рабочих дней на базовый набор, до 2 недель с интеграцией 1С. Стоимость рассчитывается индивидуально, исходя из сложности.

Закажите настройку статусов возврата — свяжитесь с нами для расчёта стоимости. Получите консультацию инженера по статусам возврата. За 5+ лет мы реализовали 20+ проектов по настройке возвратов для интернет-магазинов разного масштаба. Инженеры сертифицированы по 1С-Битрикс. Гарантируем прозрачную документацию и поддержку после запуска.

Официальная документация 1С-Битрикс: Работа со статусами возвратов

Как настроить возврат товаров на 1С-Битрикс?

Типичная картина: менеджер открывает заказ в /bitrix/admin/sale_order_view.php, вручную меняет статус, звонит на склад, потом лезет в 1С формировать документ «Возврат товаров от покупателя». На один возврат — 20–30 минут. При 15 возвратах в день один человек занят только этим. Наш подход ускоряет цикл в 8 раз: от кнопки «Оформить возврат» в личном кабинете до проводки в 1С и чека возврата по 54-ФЗ.

Почему стандартный процесс возврата неэффективен?

В Битриксе из коробки нет отдельной сущности «возврат». Есть статусы заказа в b_sale_status, есть отмена через CSaleOrder::CancelOrder(), но полноценного workflow с частичными возвратами, обменами и обратной логистикой — нет. Приходится строить.

  • Частичный возврат — клиент хочет вернуть 2 из 5 позиций. Стандартный CancelOrder отменяет заказ целиком. Нужна кастомная логика через CSaleBasket и пересчёт CSaleOrder::Update.
  • Остатки разъезжаются — товар приехал на склад, но в b_catalog_store_product его нет, потому что менеджер забыл оприходовать. На сайте — «Нет в наличии», хотя коробка стоит на полке.
  • Возврат денег — ЮKassa, CloudPayments, Тинькофф — у каждого свой метод рефанда, свои таймауты, своя обработка ошибок. Ручной рефанд через личный кабинет платёжки — рутина.
  • 54-ФЗ — чек возврата с признаком расчёта ВОЗВРАТ ПРИХОДА должен уйти на ОФД. Без автоматизации менеджер формирует его вручную в кассовом ПО.

Что мы строим

Личный кабинет покупателя — self-service возврат

Кастомный раздел в /personal/returns/, интегрированный с sale.personal.order.list. Покупатель делает всё сам:

  • выбирает заказ из b_sale_order, видит список позиций из b_sale_basket;
  • отмечает конкретные товары, указывает причину из справочника (свойство инфоблока RETURN_REASONS) или пишет свободный текст;
  • загружает фото через CFile::SaveFile() — брак, повреждения при доставке;
  • выбирает способ возврата: курьер (СДЭК API), ПВЗ, Почта России;
  • указывает куда вернуть деньги: на карту (рефанд через платёжку), на внутренний счёт (CSaleUserAccount), обмен на другой товар;
  • видит статус заявки в реальном времени — через кастомные статусы в b_sale_status_lang.

Админка менеджера — без лишних кликов

Отдельный раздел на базе \Bitrix\Main\Engine\Controller:

  • очередь заявок с фильтрами: статус, сумма, причина, дата, менеджер. Грид на CAdminList или кастомный React-компонент;
  • вся информация по заявке на одном экране: заказ, клиент, история переписки, фото, документы;
  • действия в один клик: одобрить, отклонить, запросить фото, передать на согласование;
  • маршрутизация: возврат свыше порога (настраивается в b_option) уходит руководителю через бизнес-процесс модуля bizproc;
  • автогенерация акта возврата и возвратной накладной — PDF через mPDF или TCPDF.

Автоматизация — минимум ручных операций

  • Возврат до настраиваемого порога (например, 3000 ₽) — автоодобрение через обработчик события OnSaleOrderSaved.
  • Чек возврата 54-ФЗ: вызов \Bitrix\Sale\Cashbox\Manager::addChecks() с типом Check::RETURN_TYPE. Уходит на ОФД автоматически.
  • Цепочка уведомлений: email через CEvent::Send(), SMS через SMS-шлюз, push.
  • После приёмки на складе — автоматическое оприходование через CCatalogStoreDocsBarcode и обновление b_catalog_store_product.
  • Синхронизация с 1С: документ «Возврат товаров от покупателя» создаётся автоматически при обмене через \Bitrix\Sale\Exchange.
  • Бонусные баллы, начисленные за покупку — списание через CSaleUserAccount::UpdateAccount() с отрицательной суммой.
  • Агенты обрабатывают очередь заявок, эпилог шаблона подгружает статусы в личный кабинет в реальном времени.

Как настроить интеграцию с платежными системами без ошибок?

Каждая платёжка — свой API рефанда, свои ограничения по срокам, свои коды ошибок. Опыт сертифицированных разработчиков Битрикс позволяет обработать все сценарии:

  • ЮKassaPOST /v3/refunds, полный и частичный рефанд. Важно: рефанд возможен только в течение 365 дней после платежа. Автоматический чек возврата через receipt API.
  • CloudPayments — метод refund по TransactionId. Рефанд на карту за 1-5 рабочих дней. Если 3DS-платёж — рефанд может занять до 30 дней на стороне банка.
  • Тинькофф ЭквайрингCancel по PaymentId. Если оплата в рассрочку — рефанд пересчитывает график, и это отдельная логика в обработчике sale.paysystem.handler.
  • Apple Pay / Google Pay — рефанд идёт через тот же эквайринг, токен привязан к транзакции.
  • Наложенный платёж — рефанд невозможен через платёжку, нужны банковские реквизиты покупателя. Отдельная форма в ЛК.
  • Внутренний счётCSaleUserAccount::Pay() с зачислением суммы. Мотивируем повышенным коэффициентом (x1.1) — 10% бонус за выбор возврата на баланс вместо карты.

Гарантируем корректную обработку каждого кода ошибки через кастомные обработчики sale.paysystem.handler.

Соответствие законодательству — без вариантов

  • ЗоЗПП, ст. 26.1 — дистанционная продажа: отказ в любой момент до получения, 7 дней после. Система контролирует сроки автоматически и предупреждает менеджера о приближении дедлайна. Подробнее о законе — статья 26.1 ЗоЗПП.
  • 14 дней — возврат товара надлежащего качества. Проверка: date_insert заказа + дата доставки из трекинга + 14 дней. Если просрочено — заявка отклоняется с пояснением.
  • 54-ФЗ — чек возврата обязателен. Федеральный закон №54-ФЗ.
  • Документооборот — акт возврата, заявление покупателя, акт приёмки — шаблоны в системе, заполняются автоматически из данных заказа.

Аналитика возвратов — данные для принятия решений

Кастомный дашборд в админке, данные из b_sale_order + кастомная таблица возвратов:

  • процент возвратов по категориям, брендам, менеджерам, периодам;
  • топ причин возврата. Если «Не соответствует описанию» в топ-3 — проблема в карточках товара, а не в клиентах;
  • финансовый срез: сумма возвратов, средний чек возврата, соотношение рефанд/обмен/баланс;
  • алерты: если процент возвратов по конкретному SKU превысил 15% — уведомление категорийному менеджеру.

Обмен и замена — сохраняем продажу

Не каждый возврат — потерянная выручка. Обмен через CSaleOrder::Update с пересчётом корзины:

  • замена на тот же товар другого размера/цвета — новая позиция в b_sale_basket, старая — на возврат;
  • обмен на другой товар с доплатой — автоматический расчёт разницы, допплата через тот же платёжный метод;
  • генерация накладной на отправку обменного товара через API службы доставки.

Обратная логистика — интеграции

  • СДЭКPOST /v2/orders с type: 2 (возврат). Автоматическая заявка на забор, трекинг через webhook.
  • Boxberry — API парсельшопов для выбора ПВЗ возврата.
  • Почта России — формирование обратной накладной через API отправлений.
  • Трекинг обратной посылки в личном кабинете — статусы подтягиваются через агента на cron.

Как проходит настройка под ключ

  1. Аудит текущего процесса — анализируем бизнес-логику, фиксируем статусы и интеграции.
  2. Проектирование workflow — схема статусов, правила автоодобрения, маршрутизация.
  3. Разработка ЛК покупателя и админки — компоненты, гриды, формы, REST-контроллеры.
  4. Интеграция с платёжками и 1С — настройка каждого обработчика, тест рефандов.
  5. Автоматизация 54-ФЗ и уведомлений — подключение ОФД, шаблонов писем, SMS.
  6. Интеграция служб доставки — СДЭК, Boxberry, Почта России.
  7. Тестирование — полный цикл: заказ → возврат → рефанд → чек → 1С.
  8. Обучение сотрудников и передача документации.

Результаты внедрения

Блок Что получаете
Документация Техническое задание, описание workflow, схему интеграций
Код и конфигурация Готовые компоненты, настройки инфоблоков, HL-блоков, статусов, прав
Интеграция с платежками Подключение ЮKassa, CloudPayments, Тинькофф, Apple Pay/Google Pay
Обмен с 1С Настройка CommerceML, документ возврата в 1С
Автоматизация 54-ФЗ Чек возврата через ОФД, фискализация
Обучение Видеоинструкции для менеджеров и администраторов
Поддержка 1 месяц гарантийного сопровождения после внедрения

Чек-лист проверки перед запуском

  • Проверен рефанд через каждую платёжку (частичный и полный).
  • Тест 54-ФЗ: чек возврата корректен, уходит в ОФД.
  • Обмен с 1С: документ «Возврат товаров от покупателя» создаётся без ошибок.
  • ЛК покупателя: все поля, загрузка фото, выбор способа возврата.
  • Автоодобрение до порога срабатывает.
  • Уведомления (email/SMS/push) приходят.
  • Остатки после приёмки обновляются.
  • Аналитика считает метрики корректно.

Сроки внедрения

Компонент Сроки
ЛК покупателя (форма + статусы) 3-5 дней
Админка менеджера (грид + действия) 3-5 дней
Интеграция с платёжными системами 2-3 дня
Обмен с 1С (документ возврата) 3-5 дней
Автоматизация (54-ФЗ, уведомления, остатки) 2-3 дня
Обратная логистика (СДЭК, Boxberry) 2-3 дня
Итого 2-4 недели

Почему это окупается за месяц?

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

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