Управление возвратами товаров на 1С-Битрикс
Типичная картина: менеджер открывает заказ в /bitrix/admin/sale_order_view.php, вручную меняет статус, звонит на склад, потом лезет в 1С формировать документ «Возврат товаров от покупателя». На один возврат — 20-30 минут. При 15 возвратах в день один человек занят только этим. Мы автоматизируем цикл целиком: от кнопки «Оформить возврат» в личном кабинете до проводки в 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 рефанда, свои ограничения по срокам, свои коды ошибок:
-
ЮKassa —
POST /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% бонус за выбор возврата на баланс вместо карты
Соответствие законодательству — без вариантов
- ЗоЗПП, ст. 26.1 — дистанционная продажа: отказ в любой момент до получения, 7 дней после. Система контролирует сроки автоматически и предупреждает менеджера о приближении дедлайна
-
14 дней — возврат товара надлежащего качества. Проверка:
date_insertзаказа + дата доставки из трекинга + 14 дней. Если просрочено — заявка отклоняется с пояснением -
54-ФЗ — чек возврата обязателен.
\Bitrix\Sale\Cashbox\Checkс типомreturnи корректным признаком расчёта - Документооборот — акт возврата, заявление покупателя, акт приёмки — шаблоны в системе, заполняются автоматически из данных заказа
Аналитика возвратов — данные для принятия решений
Кастомный дашборд в админке, данные из b_sale_order + кастомная таблица возвратов:
- Процент возвратов по категориям, брендам, менеджерам, периодам
- Топ причин возврата. Если «Не соответствует описанию» в топ-3 — проблема в карточках товара, а не в клиентах
- Финансовый срез: сумма возвратов, средний чек возврата, соотношение рефанд/обмен/баланс
- Алерты: если процент возвратов по конкретному SKU превысил 15% — уведомление категорийному менеджеру
Обмен и замена — сохраняем продажу
Не каждый возврат — потерянная выручка. Обмен через CSaleOrder::Update с пересчётом корзины:
- Замена на тот же товар другого размера/цвета — новая позиция в
b_sale_basket, старая — на возврат - Обмен на другой товар с доплатой — автоматический расчёт разницы, допплата через тот же платёжный метод
- Генерация накладной на отправку обменного товара через API службы доставки
Обратная логистика — интеграции
-
СДЭК —
POST /v2/ordersсtype: 2(возврат). Автоматическая заявка на забор, трекинг через webhook - Boxberry — API парсельшопов для выбора ПВЗ возврата
- Почта России — формирование обратной накладной через API отправлений
- Трекинг обратной посылки в личном кабинете — статусы подтягиваются через cron-задачу
Сроки внедрения
| Компонент | Сроки |
|---|---|
| ЛК покупателя (форма + статусы) | 3-5 дней |
| Админка менеджера (грид + действия) | 3-5 дней |
| Интеграция с платёжными системами | 2-3 дня |
| Обмен с 1С (документ возврата) | 3-5 дней |
| Автоматизация (54-ФЗ, уведомления, остатки) | 2-3 дня |
| Обратная логистика (СДЭК, Boxberry) | 2-3 дня |
| Итого | 2-4 недели |
Окупаемость: обработка возврата с 25 минут до 3 минут. При 15 возвратах в день — это высвобождение целого менеджера. Плюс рост повторных покупок: клиент, которому легко вернуть товар, приходит снова.







