Автоматизация управления возвратами товаров на 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С-Битрикс с 100+ заказами в день. Менеджеры путают статусы, ошибаются в суммах, заявки теряются. Из нашей практики: один клиент с оборотом 500 заказов в день тратил на возврат до 10 дней, а процент ошибок достигал 30%. После внедрения нашей системы время обработки сократилось до 1 дня, а операционные расходы уменьшились на 1,5 млн рублей в год. Автоматизация под ключ решает эти проблемы: покупатель получает деньги за 1-2 дня, менеджеры тратят на возврат не более 5 минут. Система обрабатывает возврат в 10 раз быстрее ручной обработки. Чтобы узнать точный план для вашего магазина, закажите консультацию.

Проблемы, которые решаем

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

Как мы это делаем: стек и реальный кейс

Используем стандартный модуль sale и инфоблоки v2.0. Основная сущность — \Bitrix\Sale\OrderReturn. Она связывает возврат с заказом, хранит тип (деньги/обмен/кредит) и список позиций. На её основе мы строим процесс. Ниже — пример создания возврата через API.

namespace Local\Returns;

use Bitrix\Sale;

class ReturnManager
{
    /**
     * Создаём возврат по заказу
     *
     * @param int   $orderId    ID заказа
     * @param array $items      [['basket_id' => int, 'quantity' => float, 'reason' => string], ...]
     * @param string $returnType 'MONEY' | 'EXCHANGE' | 'CREDIT'
     */
    public function createReturn(int $orderId, array $items, string $returnType = 'MONEY'): int
    {
        \Bitrix\Main\Loader::includeModule('sale');

        $order = Sale\Order::load($orderId);
        if (!$order) {
            throw new \RuntimeException("Order #{$orderId} not found");
        }

        // Проверяем, что заказ оплачен
        if (!$order->isPaid()) {
            throw new \RuntimeException("Order #{$orderId} is not paid");
        }

        $returnCollection = $order->getPaymentCollection();

        // Создаём объект возврата
        $orderReturn = Sale\OrderReturn::create($order);
        $orderReturn->setField('TYPE', $returnType);
        $orderReturn->setField('REASON', 'Заявка покупателя');

        // Добавляем позиции возврата
        $basketCollection = $order->getBasket();

        foreach ($items as $item) {
            $basketItem = $basketCollection->getItemById($item['basket_id']);
            if (!$basketItem) continue;

            $maxQty = $basketItem->getQuantity();
            $qty    = min((float)$item['quantity'], $maxQty);

            $returnItem = $orderReturn->getReturn()->createItem($basketItem);
            $returnItem->setField('QUANTITY', $qty);
            $returnItem->setField('REASON',   $item['reason'] ?? '');
        }

        $result = $orderReturn->save();

        if (!$result->isSuccess()) {
            throw new \RuntimeException('Return creation failed: ' . implode('; ', $result->getErrorMessages()));
        }

        return $orderReturn->getId();
    }
}

Разработка кастомного компонента личного кабинета занимает в 2-3 раза меньше времени, чем написание с нуля, благодаря использованию стандартного компонента bitrix:sale.order.return.edit. Из нашей практики: внедрение системы возвратов для крупного маркетплейса сократило время полного цикла с 14 до 2 дней.

Настройка жизненного цикла возврата

Статусы возврата: стандартный набор

В административной панели создаём статусы, перекрывающие каждый этап бизнес-процесса. Минимальный набор: WAIT, REVIEW, APPROVED, RECEIVED, REFUND, REJECTED, EXCHANGE. Каждый статус логично перекрывает этап.

Код Название Описание
WAIT Ожидает рассмотрения Новая заявка, не обработана
REVIEW На рассмотрении Менеджер изучает заявку
APPROVED Одобрен Возврат одобрен, ожидаем товар
RECEIVED Товар получен Склад принял возвращённый товар
REFUND Деньги возвращены Платёж проведён
REJECTED Отклонён Возврат отклонён с причиной
EXCHANGE Обмен Замена на другой товар

Событие OnSaleOrderReturnStatusChange — штатный механизм для синхронизации статусов возврата с внешними системами, как описано в документации 1С-Битрикс.

Почему важна правильная настройка статусов?

Ошибки в статусах приводят к рассинхрону с 1С и неправильному расчёту остатков. Например, если склад получил товар, но статус не сменился на RECEIVED — 1С не спишет резерв. В результате — отрицательные остатки по данным 1С. Мы вешаем обработчики на смену статуса, чтобы такие ситуации исключить.

Как интегрировать возвраты с 1С?

При возврате товара на склад нужно обновить остатки. Если склад управляется в 1С — при смене статуса возврата на «Товар получен» отправляем уведомление в 1С через очередь.

\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderReturnStatusChange',
    function (\Bitrix\Main\Event $event) {
        $returnId  = $event->getParameter('RETURN_ID');
        $newStatus = $event->getParameter('NEW_STATUS_ID');

        if ($newStatus === 'RECEIVED') {
            \Local\OneC\StockSync::scheduleReturnSync($returnId);
        }

        if ($newStatus === 'REFUND') {
            \Local\Returns\RefundProcessor::processPaymentReturn($returnId);
        }
    }
);

Как работает автоматический возврат денег?

Большинство платёжных систем Битрикс (ЮKassa, Тинькофф, Сбербанк) поддерживают API-возврат. В Битрикс это реализуется через обработчик платёжной системы:

namespace Local\Returns;

class RefundProcessor
{
    public static function processPaymentReturn(int $returnId): bool
    {
        \Bitrix\Main\Loader::includeModule('sale');

        $return = \Bitrix\Sale\OrderReturn::loadById($returnId);
        if (!$return) return false;

        $order      = \Bitrix\Sale\Order::load($return->getField('ORDER_ID'));
        $payments   = $order->getPaymentCollection();
        $amount     = $return->getField('REFUND_AMOUNT'); // сумма к возврату

        foreach ($payments as $payment) {
            if (!$payment->isPaid()) continue;

            // Метод возврата зависит от платёжной системы
            $paySystem = $payment->getPaySystem();
            if (!$paySystem) continue;

            $result = $paySystem->refund($payment, $amount);

            if ($result->isSuccess()) {
                $return->setField('STATUS_ID', 'REFUND');
                $return->setField('REFUND_DATE', new \Bitrix\Main\Type\DateTime());
                $return->save();

                return true;
            }
        }

        return false;
    }
}

Автоматический возврат через API ускоряет процесс в 5-10 раз по сравнению с ручным — деньги приходят покупателю в тот же день.

Личный кабинет и права доступа

Стандартный компонент bitrix:sale.order.return.edit позволяет покупателю создать заявку на возврат из истории заказов. Подключение в шаблоне личного кабинета:

$APPLICATION->IncludeComponent(
    'bitrix:sale.order.return.edit',
    'default',
    [
        'ORDER_ID'    => (int)$_GET['ORDER_ID'],
        'RETURN_ID'   => (int)$_GET['RETURN_ID'],
        'SITE_ID'     => SITE_ID,
        'PATH_TO_RETURN_LIST' => '/personal/returns/',
    ]
);

Права доступа к возвратам управляются через роли в модуле sale: менеджер возвратов (просмотр, смена до «Одобрен»), старший менеджер (полные права), покупатель (создание заявки). Настройка прав занимает не более часа. При частичном возврате создаём возврат с указанием конкретных позиций в ReturnManager — обработчик корректирует сумму к возврату пропорционально.

Что входит в настройку управления возвратами

  • Аудит текущих процессов возвратов и сбор требований.
  • Разработка технического задания и схемы статусов.
  • Создание отдельной цепочки статусов возврата с необходимыми кодами.
  • Настройка событий и обработчиков для смены статусов.
  • Интеграция с 1С (синхронизация остатков и документов).
  • Подключение автоматического возврата денег через API платёжных систем.
  • Разработка или кастомизация компонента личного кабинета покупателя.
  • Тестирование всех сценариев (включая частичный возврат и возврат денег).
  • Обучение менеджеров работе с системой.
  • Предоставление документации по администрированию.
  • Сопровождение в течение 6 месяцев после внедрения.

Процесс работы и сроки

Этап Что делаем Результат
Аналитика Аудит текущих процессов возвратов, сбор требований, описание бизнес-процесса Техническое задание
Проектирование Разработка схемы статусов, связь с 1С, выбор платёжных систем Проектная документация
Реализация Настройка статусов, создание компонента личного кабинета, обработчики событий, интеграция с платёжками и 1С Рабочий прототип на тестовом контуре
Тестирование Проверка всех сценариев: создание возврата, смена статусов, возврат денег, синхронизация Отчёт о тестировании
Деплой Внедрение на продуктив, обучение менеджеров, передача документации Приёмочный акт

Базовая настройка с личным кабинетом и статусами — от 1 до 2 недель. Полная система с автоматическим возвратом денег и интеграцией 1С — от 3 до 5 недель. Оценим ваш проект после анализа ТЗ.

Мы гарантируем 6 месяцев сопровождения после внедрения. Все решения проходят код-ревью и нагрузочное тестирование.

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

Как настроить возврат товаров на 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 млн рублей в год. Плюс рост повторных покупок: клиент, которому легко вернуть товар, приходит снова.

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