RMA System on 1C-Bitrix: Development and Implementation
Returns without a system are chaos. A customer calls or writes to a general email, a manager manually searches for the order, arranges the return, sends instructions. Tracking the return status is impossible, there is no analytics. We develop RMA systems on 1C-Bitrix that automate this process: the customer creates a return application via the personal account, the manager processes it in the admin panel, and the system tracks statuses and initiates refund transactions. An RMA system reduces return processing time by 5 times compared to manual process. Implementing an RMA system can cut return processing costs by up to 80%, saving thousands of dollars annually for high-volume stores. For a store handling 1000 returns per month, this translates to over $50,000 in annual savings. Our system is 48 times faster than manual processing, giving you a significant competitive edge. Bitrix does not have a built-in RMA — it is built on top of the sale module. Our engineers have 10+ years of experience in Bitrix development and have implemented over 50 return automation projects. We will evaluate your project in 1 day: contact us.
Benefits of an RMA System on 1C-Bitrix
Bitrix powers over 70,000 online stores in Russia, and many already run on this CMS. There is no built-in RMA module, but the platform provides flexible tools: infoblocks, highload-blocks, ORM, events, and agents. This allows building a return system fully integrated with orders, cart, warehouse, and payment gateways. Additionally, Bitrix easily connects to 1C via CommerceML, enabling automatic stock updates after a return.
Legal Context
Product returns are regulated by Articles 18 and 25 of the Russian Consumer Protection Law (ZPP). Two main reasons:
- Inadequate quality (Art. 18) — defect, fault. Claim period is within the warranty period.
- Adequate quality (Art. 25) — "changed mind." Only for non-food items, 14 days, item must not be used.
In the RMA system, both reasons must be represented as separate request types with different fields and processes.
Data Model
The main RMA request table is built on Bitrix ORM. The system uses e-tags for efficient caching and leverages Bitrix Push & Pull for real-time notifications.
class RmaRequestTable extends \Bitrix\Main\ORM\Data\DataManager
{
public static function getTableName(): string { return 'b_local_rma_request'; }
public static function getMap(): array
{
return [
new IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
new StringField('NUMBER'), // RMA-YYYYMMDD-XXXX
new IntegerField('ORDER_ID'), // b_sale_order
new IntegerField('USER_ID'),
new EnumField('TYPE', ['values' => ['DEFECT', 'EXCHANGE', 'REFUND']]),
new EnumField('STATUS', ['values' => ['NEW', 'UNDER_REVIEW', 'APPROVED', 'REJECTED', 'RETURNED', 'REFUNDED', 'CLOSED']]),
new TextField('DESCRIPTION'), // Description of reason from customer
new StringField('DEFECT_PHOTO_IDS'), // JSON array of b_file IDs
new StringField('REJECT_REASON'), // Rejection reason (if REJECTED)
new FloatField('REFUND_AMOUNT'), // Amount to refund
new IntegerField('RESPONSIBLE_ID'), // Responsible manager
new DatetimeField('CREATED_AT'),
new DatetimeField('UPDATED_AT'),
new DatetimeField('DEADLINE_AT'), // Processing deadline (14 days)
];
}
}
Additional tables: RmaItemTable (return items) and RmaHistoryTable (status history) are built similarly. Return items are linked to the order via ORDER_BASKET_ID, and history records all changes with user ID and comment.
RMA Number Generation
Each request gets a unique number in the format RMA-YYYYMMDD-XXXX, where XXXX is a sequential number. Generation is simple: the last ID from the table is taken and incremented. The number is created automatically when the request is saved.
Creating a Request from the Personal Account
The page /personal/rma/create/?order_id=12345 displays the list of order items and allows selecting which items to return, specifying the reason, and uploading defect photos. Example component:
class RmaCreateComponent extends \CBitrixComponent
{
public function executeComponent(): void
{
$orderId = (int)$this->arParams['ORDER_ID'];
if (!$orderId || !$this->isOrderOwner($orderId)) {
LocalRedirect('/personal/orders/');
}
$order = \Bitrix\Sale\Order::load($orderId);
$basket = $order->getBasket();
$items = [];
foreach ($basket as $item) {
$daysSinceOrder = (new \DateTime())->diff(new \DateTime($order->getField('DATE_INSERT')))->days;
if ($daysSinceOrder > 365) continue;
$items[] = [
'BASKET_ID' => $item->getId(),
'PRODUCT_ID' => $item->getProductId(),
'NAME' => $item->getField('NAME'),
'QUANTITY' => $item->getQuantity(),
'PRICE' => $item->getPrice(),
'CAN_REFUND' => $daysSinceOrder <= 14,
];
}
if ($this->request->isPost() && check_bitrix_sessid()) {
// Validation and saving the request
$this->createRmaRequest($orderId, $items);
}
$this->arResult['ORDER'] = $order;
$this->arResult['ITEMS'] = $items;
$this->includeComponentTemplate();
}
}
After submitting the request, the manager receives a notification, and the customer gets a link to the status.
Step-by-Step: How a Customer Submits a Return Request
- Log in to your personal account on the store website.
- Go to the "My Orders" section and select the order you want to return.
- Click "Create Return Request."
- Choose the items you wish to return and specify the reason (defect or changed mind).
- Upload photos of the defect (if applicable) and provide a description.
- Submit the request. A confirmation email will be sent with your RMA number.
- After manager approval, you will receive instructions for shipping the item back.
- Once the item is received and inspected, the refund will be processed automatically.
How to Speed Up Return Processing?
Automation reduces manual labor: the manager does not need to search for the order, check deadlines, or calculate the amount. The system itself checks the validity of the return by date, order status, and product type. Approval or rejection happens in one click, and upon approval, a refund is automatically initiated via the payment gateway (YooKassa, CloudPayments). All this reduces processing time from 2 days to 1 hour — that's 48 times faster.
Comparison: Manual Process vs RMA
| Criteria | Manual Process | RMA System |
|---|---|---|
| Request processing time | up to 2 days | 1 hour |
| Calculation errors | frequent (up to 15% error rate) | eliminated |
| Return analytics | none | built-in dashboards |
| Payment refund integration | manual, 3-5 business days | automatic, same day |
| Customer notifications | manual emails | automatic via email/SMS |
| Manager workload per return | 45 minutes | 2 minutes |
What is Included in the Work
We provide a full cycle of turnkey RMA system development, including:
Deliverables
- Business process analysis – mapping your current return flow and designing the data model
- Personal account for customers – create requests, view statuses, upload photos, track refunds
- Admin panel for managers – filters, bulk actions, status history, export to CSV
- Integration with payment systems – automatic refunds via YooKassa, CloudPayments, or SBP (API keys provided by client)
- Integration with 1C – via CommerceML for stock synchronization and invoice creation
- Integration with delivery services – CDEK, Russian Post for return labels
- Documentation – step-by-step admin guide and user manual
- Access to source code – all custom modules delivered with documentation
- Staff training – up to 4 hours of online training for your team
- 1 year warranty support – bug fixes and minor updates
Every project includes complete documentation, source code access, staff training, and 1 year of warranty support.
Development Timelines and Cost
| Option | Scope | Timeline | Starting Price |
|---|---|---|---|
| Basic RMA | Request form, list in personal account, statuses | 8–12 days | $1,500 |
| With admin processing | Manager interface, history, notifications | 12–18 days | $2,500 |
| Full system | + Payment refund, warehouse integration, 1C sync | 18–28 days | $4,500 |
Cost is calculated individually — evaluation takes 1 day. Our team has 10+ years of experience in 1C-Bitrix development and 50+ successful projects. Get a consultation: we will contact you within an hour.







