Налаштування автоматичної обробки повернень 1С-Битрикс

Налаштування автоматичної обробки повернень 1С-Битрикс Автоматизація повернень потрібна там, де обсяг понад 20–30 заявок на день і менеджер витрачає суттєвий час на рутинні операції: перевірити оплату замовлення, створити повернення в 1С, провести повернення грошей, відправити листа покупцю. Кожн
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування автоматичної обробки повернень 1С-Битрикс
Простий
~1 день

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • 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
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1161

Налаштування автоматичної обробки повернень 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 тижнів.

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

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