Автоматизация обработки возвратов 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С-Битрикс

Автоматизация возвратов нужна там, где объём выше 20–30 заявок в день и менеджер тратит существенное время на рутинные операции: проверить оплату заказа, создать возврат в 1С, провести возврат денег, отправить письмо покупателю. Каждое из этих действий можно запустить автоматически при смене статуса заявки — через обработчики событий модуля sale и агенты Битрикс.

Наша команда за 8 лет работы с платформой реализовала более 40 автоматизаций возвратов для интернет-магазинов различного масштаба. Мы обеспечиваем полную интеграцию с 1С и платёжными шлюзами, что сокращает среднее время обработки одной заявки с 15 минут до 2 минут. Экономия для магазина с потоком 50 возвратов в день составляет около 10 часов работы менеджера в неделю — это высвобождает ресурсы на более важные задачи. Также автоматизация исключает человеческие ошибки при возврате денежных средств и работе с 1С.

Событийная модель возвратов

Модуль sale генерирует события при работе с возвратами. Ключевые точки для автоматизации:

  • OnSaleOrderReturnSaved — создание или обновление заявки
  • OnSaleOrderReturnStatusChange — смена статуса
  • OnSalePaymentCollectionReturnAdd — добавление возврата платежа

Регистрируем обработчики в /local/php_interface/init.php:

$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandler('sale', 'OnSaleOrderReturnSaved',
    [\Local\Returns\AutoProcessor::class, 'onReturnSaved']);

$eventManager->addEventHandler('sale', 'OnSaleOrderReturnStatusChange',
    [\Local\Returns\AutoProcessor::class, 'onStatusChange']);

Автоматические действия при создании заявки

namespace Local\Returns;

class AutoProcessor
{
    public static function onReturnSaved(\Bitrix\Main\Event $event): void
    {
        $return = $event->getParameter('ENTITY');
        if (!$return instanceof \Bitrix\Sale\OrderReturn) return;

        // Только при создании (не при обновлении)
        if (!$event->getParameter('IS_NEW')) return;

        $returnId = $return->getId();

        // 1. Назначаем ответственного по ротации
        self::assignResponsible($returnId);

        // 2. Отправляем подтверждение покупателю
        Notifications::sendToCustomer($returnId, 'RETURN_CREATED');

        // 3. Уведомляем менеджера
        Notifications::sendToManager($returnId, 'NEW_RETURN');

        // 4. Если сумма возврата небольшая — автоодобряем
        self::tryAutoApprove($return);
    }

    public static function onStatusChange(\Bitrix\Main\Event $event): void
    {
        $returnId  = $event->getParameter('RETURN_ID');
        $newStatus = $event->getParameter('NEW_STATUS_ID');
        $oldStatus = $event->getParameter('OLD_STATUS_ID');

        $handler = new self();
        $handler->handleStatusTransition($returnId, $oldStatus, $newStatus);
    }

    private function handleStatusTransition(int $returnId, string $from, string $to): void
    {
        match ($to) {
            'APPROVED' => $this->onApproved($returnId),
            'RECEIVED' => $this->onReceived($returnId),
            'REJECTED' => $this->onRejected($returnId),
            'REFUND'   => $this->onRefunded($returnId),
            default    => null,
        };
    }
}

Автоодобрение мелких возвратов

Возвраты до определённой суммы (конфигурируемый порог) не требуют ручной проверки:

private static function tryAutoApprove(\Bitrix\Sale\OrderReturn $return): void
{
    $autoApproveLimit = (float)\Bitrix\Main\Config\Option::get(
        'local.returns', 'auto_approve_limit', 500
    );

    $returnAmount = (float)$return->getField('REFUND_AMOUNT');

    if ($returnAmount <= 0 || $returnAmount > $autoApproveLimit) {
        return;
    }

    // Проверяем: покупатель без истории спорных возвратов
    $userId = $return->getOrder()->getUserId();
    if (self::hasDisputeHistory($userId)) {
        return;
    }

    // Автоматически меняем статус на APPROVED
    $return->setField('STATUS_ID', 'APPROVED');
    $return->setField('MANAGER_COMMENT', 'Автоодобрено: сумма до ' . $autoApproveLimit . ' руб.');
    $result = $return->save();

    if ($result->isSuccess()) {
        \CEventLog::Add([
            'SEVERITY'      => 'INFO',
            'AUDIT_TYPE_ID' => 'RETURN_AUTO_APPROVED',
            'MODULE_ID'     => 'local.returns',
            'DESCRIPTION'   => "Return #{$return->getId()} auto-approved, amount: {$returnAmount}",
        ]);
    }
}

private static function hasDisputeHistory(int $userId): bool
{
    // Считаем отклонённые возвраты за последние 6 месяцев
    $dateFrom = new \Bitrix\Main\Type\Date();
    $dateFrom->add('-180 days');

    $result = \Bitrix\Sale\OrderReturnTable::getList([
        'filter' => [
            '=ORDER.USER_ID' => $userId,
            'STATUS_ID'      => 'REJECTED',
            '>=DATE_INSERT'  => $dateFrom,
        ],
        'select' => ['ID'],
    ]);

    return (bool)$result->fetch();
}

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

При переходе в статус «Одобрен» — автоматически инициируем возврат через API платёжной системы:

private function onApproved(int $returnId): void
{
    $return = \Bitrix\Sale\OrderReturn::loadById($returnId);
    if (!$return) return;

    $order    = $return->getOrder();
    $payments = $order->getPaymentCollection();

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

        $psHandler = \Bitrix\Sale\PaySystem\Manager::getObjectById(
            $payment->getPaymentSystemId()
        );

        if (!$psHandler) continue;

        $supportsRefund = method_exists($psHandler, 'refund');
        if (!$supportsRefund) {
            // Платёжная система не поддерживает автовозврат — ставим в очередь для ручной обработки
            $this->flagForManualRefund($returnId, 'PS does not support auto refund');
            continue;
        }

        $refundAmount = (float)$return->getField('REFUND_AMOUNT');
        $result       = $psHandler->refund($payment, $refundAmount);

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

            Notifications::sendToCustomer($returnId, 'RETURN_REFUNDED');
        } else {
            $this->flagForManualRefund($returnId, implode('; ', $result->getErrorMessages()));
        }
    }
}

Автоматическая проверка получения товара через трекинг

Если покупатель отправляет товар назад по трекинг-номеру, можно автоматически отслеживать доставку:

class TrackingWatcher
{
    // Агент, запускаемый каждые 2 часа
    public static function checkPendingReturns(): string
    {
        $returns = \Bitrix\Sale\OrderReturnTable::getList([
            'filter' => [
                'STATUS_ID'  => 'APPROVED',
                'UF_TRACKING' => ['!=', '', false], // заявки с трекинг-номером
            ],
            'select' => ['ID', 'UF_TRACKING', 'UF_CARRIER'],
        ]);

        $checker = new \Local\Delivery\TrackingChecker();

        while ($row = $returns->fetch()) {
            $status = $checker->getStatus($row['UF_TRACKING'], $row['UF_CARRIER'] ?? 'pochta');

            if ($status === 'delivered') {
                $return = \Bitrix\Sale\OrderReturn::loadById($row['ID']);
                $return->setField('STATUS_ID', 'RECEIVED');
                $return->save();
            }
        }

        return 'checkPendingReturns();'; // перезапуск агента
    }
}

Эскалация просроченных заявок

Агент для контроля SLA по возвратам:

class SlaWatcher
{
    private const SLA_HOURS = [
        'WAIT'   => 24,  // рассмотреть в течение 24 часов
        'REVIEW' => 48,  // принять решение в течение 48 часов
    ];

    public static function checkOverdue(): string
    {
        foreach (self::SLA_HOURS as $statusId => $maxHours) {
            $deadline = new \Bitrix\Main\Type\DateTime();
            $deadline->add('-' . $maxHours . ' hours');

            $overdueReturns = \Bitrix\Sale\OrderReturnTable::getList([
                'filter' => [
                    'STATUS_ID'    => $statusId,
                    '<=DATE_STATUS' => $deadline,
                ],
                'select' => ['ID', 'RESPONSIBLE_ID', 'ORDER_ID'],
            ]);

            while ($row = $overdueReturns->fetch()) {
                Notifications::escalate($row['ID'], $row['RESPONSIBLE_ID'], $statusId, $maxHours);
            }
        }

        return 'checkOverdue();';
    }
}

Состав работ

  • Обработчики событий: OnSaleOrderReturnSaved, OnSaleOrderReturnStatusChange
  • Логика автоодобрения по сумме и истории покупателя
  • Автовозврат денег через API платёжных систем (ЮKassa, Тинькофф и др.)
  • Агент трекинга входящих посылок (Почта России, СДЭК, Boxberry)
  • Агент SLA-мониторинга с эскалацией просроченных заявок
  • Email-автоматика: шаблоны под каждый статус

Сроки: базовая автоматизация (уведомления + автовозврат денег) — 2–3 недели. Полный стек со SLA-мониторингом и трекингом — 4–6 недель.

Детальное описание процесса

Интеграция требует тщательного планирования и анализа текущих процессов в вашей компании. Мы проводим аудит существующих систем, определяем точки интеграции и возможные конфликты. На каждом этапе предоставляем подробную документацию и проводим тестирование на staging-среде перед запуском в production. Наши решения разработаны с учётом лучших практик индустрии и позволяют значительно снизить операционные затраты.

Наша гарантия качества

Мы берём на себя полную ответственность за качество выполненной работы. В течение 12 месяцев после завершения проекта исправляем любые обнаруженные проблемы абсолютно бесплатно. Техническая поддержка включает консультации, обучение вашей команды и помощь при возникновении вопросов. Каждый проект завершается итоговым отчётом с описанием реализованного функционала, рекомендациями по оптимизации и планом развития системы.

Примеры успешных проектов

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

Преимущества нашего подхода

Мы обеспечиваем комплексное решение, а не отдельные исправления. Каждый проект включает документирование, тестирование и обучение команды. Нашим клиентам нравится, что мы не просто выполняем работу, но и объясняем каждый шаг процесса, давая возможность вашей команде в будущем самостоятельно поддерживать систему. Со своей стороны, мы гарантируем помощь в течение года после завершения проекта.

Контакты и следующие шаги

Если ваша компания столкнулась с описанной проблемой, свяжитесь с нами для бесплатной консультации. Проведём анализ вашей системы и предложим оптимальное решение. Стоимость проекта зависит от сложности и объёма работ, но для типовых решений мы всегда предоставляем точную смету на основе предварительного анализа требований.

Технологии и инструменты

В нашей работе мы используем современный стек: обработчики событий D7, ORM Bitrix для операций с базой данных, кеширование через модуль main, интеграции с внешними API через Guzzle HTTP-клиент. Для платёжных шлюзов применяем официальные SDK банков и платёжных систем — это гарантирует стабильность и безопасность операций возврата денег. Тестирование проводится на staging-стенде с полной копией production-данных перед выкаткой изменений в боевую среду.

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

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