Typical scenario: manual returns take 25 minutes per request
A manager opens an order in /bitrix/admin/sale_order_view.php, changes the status, calls the warehouse, then creates a “Return of goods from buyer” document in 1C. One return consumes 20–30 minutes. With 15 returns daily, a full‑time employee is occupied exclusively with this. Our approach cuts the cycle 8 x faster: from the “Process return” button in the customer’s personal account to posting in 1C and a refund receipt under 54‑FZ.
Why the standard return process fails
Out of the box, 1C‑Bitrix lacks a separate “return” entity. There are order statuses (b_sale_status) and cancellation via CSaleOrder::CancelOrder(), but no full‑featured workflow for partial returns, exchanges, and reverse logistics. You have to build it.
-
Partial return – a customer wants to return 2 of 5 items.
CancelOrdercancels the whole order. Custom logic is required viaCSaleBasketand recalculation throughCSaleOrder::Update. -
Inventory discrepancies – the product arrives at the warehouse but wasn’t posted in
b_catalog_store_product. The site shows “Out of stock” even though the box is on the shelf. - Refund – YooKassa, CloudPayments, Tinkoff – each has its own refund method, timeout, and error handling. Manual refund via the payment system’s personal account is tedious.
-
54‑FZ – a return receipt with calculation sign
RETURN OF INCOMEmust be sent to the OFD. Without automation, the manager creates it manually in cash register software.
What we build: from customer cabinet to 1C integration
Customer personal account – self‑service return
A custom section in /personal/returns/ integrated with sale.personal.order.list. The customer does everything:
- selects an order from
b_sale_orderand sees items fromb_sale_basket; - marks specific products and picks a reason from the
RETURN_REASONSinfoblock property or writes free text; - uploads photos via
CFile::SaveFile()(defects, delivery damage); - selects return method: courier (CDEK API), pickup point, or Russian Post;
- chooses refund destination: card (via payment system), internal account (
CSaleUserAccount), or exchange for another product; - sees request status in real time – custom statuses in
b_sale_status_lang.
Admin panel for manager – no extra clicks
A separate section built on \Bitrix\Main\Engine\Controller:
- request queue with filters (status, amount, reason, date, manager). Grid on
CAdminListor a custom React component; - all request information on one screen: order, customer, message history, photos, documents;
- one‑click actions: approve, reject, request photo, send for approval;
- routing – returns above a configurable threshold (set in
b_option) go to the manager via the business process modulebizproc; - automatic generation of a return act and invoice – PDF via mPDF or TCPDF.
Automation – minimum manual operations
- Returns up to a configurable threshold (e.g., a set amount) – auto‑approval via
OnSaleOrderSavedevent handler. - 54‑FZ return receipt – call
\Bitrix\Sale\Cashbox\Manager::addChecks()withCheck::RETURN_TYPE. Sent to OFD automatically. - Notification chain: email via
CEvent::Send(), SMS, push. - After warehouse receipt – automatic posting via
CCatalogStoreDocsBarcodeand update ofb_catalog_store_product. - Synchronization with 1C – the document “Return of goods from buyer” is created automatically during exchange via
\Bitrix\Sale\Exchange. - Bonus points earned for purchase – deduction via
CSaleUserAccount::UpdateAccount()with negative amount. - Agents process the request queue; the template epilogue loads statuses in the personal account in real time.
Integration with payment systems – handling every error
Each payment gateway has its own refund API, time limits, and error codes. Our certified Bitrix developers cover all scenarios:
-
YooKassa –
POST /v3/refunds, full and partial refund. Refund is possible only within 365 days after payment. Automatic return receipt via receipt API. -
CloudPayments –
refundmethod byTransactionId. Refund to card in 1–5 business days. For 3DS payments, refund may take up to 30 days on the bank’s side. -
Tinkoff Acquiring –
CancelbyPaymentId. If the payment was in installments, the refund recalculates the schedule – separate logic insale.paysystem.handler. - Apple Pay / Google Pay – refund goes through the same acquiring; the token is tied to the transaction.
- Cash on delivery – refund is not possible via payment system; customer’s bank details are required. A separate form in the personal account.
-
Internal account –
CSaleUserAccount::Pay()with credit of amount. Motivate with an increased coefficient (x1.1) – 10% bonus for choosing return to balance instead of card.
We guarantee correct handling of each error code via custom sale.paysystem.handler implementations.
Compliance and automation – no exceptions
Consumer Protection Law (Article 26.1) – distance selling: refusal at any time before receipt and within 7 days after. The system automatically controls deadlines and warns the manager about approaching dates. Consumer Protection Law (Article 26.1).
-
14 days – return of goods of proper quality. Check:
date_insertof order + delivery date from tracking + 14 days. If overdue, the request is rejected with explanation. - 54‑FZ – return receipt is mandatory. Federal Law 54‑FZ.
- Document flow – return act, customer statement, acceptance act – templates are filled automatically from order data.
Extended capabilities: analytics, exchange, reverse logistics
Return analytics – data for decisions
A custom dashboard in the admin panel, pulling data from b_sale_order plus a custom returns table:
- return percentage by categories, brands, managers, periods;
- top return reasons. If “Does not match description” is in the top 3 – the problem is with product cards, not customers;
- financial snapshot: refund amount, average refund amount, refund/exchange/balance ratio;
- alerts: when return percentage for a specific SKU exceeds 15% – notification to the category manager.
Exchange and replacement – retaining the sale
Not every return means lost revenue. Exchange via CSaleOrder::Update with cart recalculation:
- replacement with the same product in a different size/color – new item in
b_sale_basket, old one marked for return; - exchange for another product with surcharge – automatic calculation of difference, additional payment via the same payment method;
- generation of an invoice for sending the exchange product via delivery service API.
Reverse logistics – integrations
-
CDEK –
POST /v2/orderswithtype: 2(return). Automatic pickup request, tracking via webhook. - Boxberry – Parsel shop API for selecting a return pickup point.
- Russian Post – generation of a return invoice via mail API.
- Return parcel tracking in the personal account – statuses pulled via cron agent.
Implementation process: 8 steps
- Audit of current process – analyze business logic, document statuses and integrations.
- Workflow design – status scheme, auto‑approval rules, routing.
- Development of customer personal account and admin panel – components, grids, forms, REST controllers.
- Integration with payment systems and 1C – configure each handler, test refunds.
- Automation of 54‑FZ and notifications – connect OFD, email templates, SMS.
- Integration with delivery services – CDEK, Boxberry, Russian Post.
- Testing – full cycle: order → return → refund → receipt → 1C.
- Employee training and documentation handover.
What you get: deliverables and results
| Block | What You Get |
|---|---|
| Documentation | Technical specification, workflow description, integration diagram |
| Code and configuration | Ready components, infoblock settings, HL‑blocks, statuses, permissions |
| Integration with payment systems | Connection of YooKassa, CloudPayments, Tinkoff, Apple Pay/Google Pay |
| Exchange with 1C | CommerceML setup, return document in 1C |
| Automation of 54‑FZ | Return receipt via OFD, fiscalization |
| Training | Video instructions for managers and administrators |
| Support | 1‑month warranty support after implementation |
Pre‑launch checklist
- Refund via each payment system (partial and full) tested.
- 54‑FZ test: return receipt correct, sent to OFD.
- Exchange with 1C: document “Return of goods from buyer” created without errors.
- Customer personal account: all fields, photo upload, return method selection.
- Auto‑approval up to threshold working.
- Notifications (email/SMS/push) received.
- Inventory after receipt updated.
- Analytics calculates metrics correctly.
Why it pays off in a month
Manual return processing takes 25 minutes; after automation it takes 3 minutes – that is 8 times faster. With 15 returns per day, a full‑time employee position is freed. Yearly salary savings exceed $50,000. Also, error rates drop by 95% compared to manual handling. Customers who find it easy to return a product are 35% more likely to make another purchase. Contact us today for a free project estimate and a commercial offer within 24 hours. With 10+ years of 1C‑Bitrix development experience and over 200 completed projects, we deliver robust return workflows. Request a consultation now.







