Налаштування автоматичної обробки повернень 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
    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, Тинькофф тощо)
  • Агент трекінгу вхідних посилок (Укрпошта, Нова Пошта, Інтайм)
  • Агент SLA-моніторингу з ескалацією прострочених заявок
  • Email-автоматика: шаблони під кожен статус

Процес оцінки та роботи

  1. Збір даних — аналізуємо поточну конфігурацію магазину, обсяги повернень, інтеграції з 1С та платіжними системами.
  2. Аудит — вивчаємо налаштування модуля sale, статуси заявок, наявні обробники та агенти.
  3. Проєктування — розробляємо архітектуру автоматизації: точки інтеграції, логіку переходів, обробку винятків.
  4. Оцінка — на основі аудиту визначаємо точну вартість та строки.
  5. Розробка — реалізуємо обробники, агенти, шаблони листів, інтеграцію з платіжними шлюзами.
  6. Тестування — проводимо на staging-стенді з повною копією production-даних.
  7. Запуск — викочуємо зміни в бойове середовище, контролюємо перші дні роботи.

Орієнтири за термінами

  • Базова автоматизація (сповіщення + автоповернення грошей) — 2–3 тижні.
  • Повний стек з SLA-моніторингом та трекінгом — 4–6 тижнів.

Точні строки визначаються після аудиту вашої конфігурації. Стоимость проекта зависит от сложности и объёма работ.

Якщо ваша компанія стикнулася з описаною проблемою, зв'яжіться з нами для безкоштовної консультації. Проведемо аналіз вашої системи та запропонуємо оптимальне рішення.

Проблема: повернення вручну займає 25 хвилин

Типова картина: менеджер відкриває замовлення в /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.

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

  • Повернення до налаштовуваного порогу — автосхвалення через обробник події 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. Середня економія на ручному рефанді — до 40 000 ₴ на місяць при 100 поверненнях.

Відповідність законодавству

Дотримуємось вимог Закону України "Про захист прав споживачів" (ст. 26.1) та 54-ФЗ:

  • ЗоЗПП, ст. 26.1 — дистанційний продаж: відмова в будь-який момент до отримання, 7 днів після. Система контролює строки автоматично та попереджає менеджера про наближення дедлайну.
  • 14 днів — повернення товару належної якості. Перевірка: date_insert замовлення + дата доставки з трекінгу + 14 днів. Якщо прострочено — заявка відхиляється з поясненням.
  • 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 поверненнях на день вивільняється ціла ставка менеджера. Економія на зарплаті — значна. Плюс зростання повторних покупок: клієнт, якому легко повернути товар, приходить знову. За нашими підрахунками, впровадження окупається за 3-6 тижнів завдяки економії часу та збільшенню конверсії.

Маємо 7+ років досвіду впровадження рішень на 1С-Бітрікс та понад 120 успішних проектів. Наші клієнти отримують прозорий процес повернень без рутини. Замовте налаштування повернень під ключ у вашому Бітріксі. Зв'яжіться з нами — отримаєте безкоштовну оцінку проекту та комерційну пропозицію протягом дня. Зателефонуйте або напишіть, щоб обговорити деталі вашого бізнесу.