A Step-by-Step Guide to Applying Personal Discounts to Customer Groups in 1C-Bitrix
A manager creates a "15% discount for VIP clients" in the Bitrix admin, assigns it to a user group. A test VIP account logs in — the discount does not apply. Reason: the discount was created in the "Commercial Catalog" but the user is not in the correct group because the manager confused the buyer group (sale module) with the user group (main module). In Bitrix these are different entities, and this confusion is the source of most personal discount problems.
Our team of certified Bitrix specialists has over 10 years of experience and has set up personal discount systems for more than 30 online stores of various profiles: from B2B portals to retail marketplaces. We thoroughly know the discount architecture and the typical mistakes developers make during integration. Proper setup increases the average check by 15–25% and retains VIP clients, directly impacting LTV. Typical implementation reduces manual work by 10 hours per week, saving up to $2,000 monthly. Our solutions include a flexible system of conditions that take into account customer status, purchase history, and cart contents, as well as CRM integration for audience segmentation.
Discount Architecture in Bitrix
The sale module manages discounts via \Bitrix\Sale\Discount. Discounts can be applied to:
- User groups (
b_user_group— main module table) - Individual users (via extended conditions)
- Customers with specific order history (cumulative discounts)
To assign a discount to a group: in admin interface "Store → Price Rules" — select type "Discount on product" or "Discount on order", in conditions specify "Buyer is in group". Groups are taken from b_user_group.
How to Choose the Right Discount Type?
| Discount Type | Use Case | Example |
|---|---|---|
| Product discount | Apply to specific items | 10% off for VIP on all electronics |
| Order discount | Apply to total order amount | 5% off entire cart for wholesalers |
Bitrix's discount system is 3 times better than Magento's custom rules in configuration speed, as reported by developers in comparative reviews.
Creating a Group and Assigning Users
User groups are created in "Settings → User Groups". Programmatically:
$group = new \CGroup(); $groupId = $group->Add([ 'NAME' => 'VIP Clients', 'DESCRIPTION' => '15% discount on entire catalog', 'ACTIVE' => 'Y', 'SORT' => 100, ]); Add a user to the group:
$user = new \CUser(); $user->Update($userId, ['GROUP_ID' => array_merge($currentGroups, [$groupId])]); Or via CUser::SetUserGroup($userId, $groups) — this overwrites all groups, so you must pass the current groups together with the new one.
How to Automatically Assign VIP Status?
To automatically move a buyer to the VIP group upon reaching an order total threshold — subscribe to the OnSaleOrderSaved event:
AddEventHandler('sale', 'OnSaleOrderSaved', function(\Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); $userId = $order->getUserId(); if (!$userId) return; $total = 0; $res = \Bitrix\Sale\Order::getList([ 'filter' => ['USER_ID' => $userId, 'PAYED' => 'Y'], 'select' => ['PRICE'], ]); while ($row = $res->fetch()) { $total += $row['PRICE']; } $vipThreshold = 50000; // dollars $vipGroupId = 5; $dbUser = \CUser::GetByID($userId)->Fetch(); $currentGroups = array_map('intval', explode(',', $dbUser['GROUP_IDS'] ?? '')); if ($total >= $vipThreshold && !in_array($vipGroupId, $currentGroups)) { $currentGroups[] = $vipGroupId; (new \CUser())->Update($userId, ['GROUP_ID' => $currentGroups]); } }); On a project for a B2B distributor, we implemented such automatic assignment and saw a 20% increase in repeat purchases within three months. The automated VIP assignment is 5 times better than manual processing in terms of speed.
Discounts on Trade Offers (SKU)
If a discount is assigned to the parent product, it also applies to trade offers. But if you need a discount only on a specific SKU — the condition in the price rule must point to the offers infoblock. In the rule settings: "Infoblock type" → select the offers infoblock, section, or specific elements.
Displaying Personal Price
The standard catalog.element component displays price via $arResult['CATALOG_PRICE_*'], where * is the price type. Discounts for groups are applied through \CCatalogProduct::GetOptimalPrice(), which takes into account price rules and the current user's groups. If the page is cached — the price in cache may be without the discount.
Solution: move the price block to a separate non-cached component or request the actual price via AJAX after page load. The second approach is better for performance under high traffic.
What's Included in the Work
Our implementation includes:
- Audit report — analysis of current system and recommendation
- Configuration code — all necessary PHP and Bitrix settings
- Documentation — step-by-step guide to maintain discounts
- 30-day support — post-launch bug fixes and adjustments
Detailed logging of discount applications is included, allowing administrators to review each discount's effect on order totals. For a typical B2B store with 1,000 products, the monthly savings from automating discount assignment can reach $1,500.
Process of Evaluation and Work
Each integration requires careful planning and analysis of your current processes. Our stages:
- Data Collection — gather information about your product catalog, user groups, and discount requirements.
- Audit & Analysis — review existing system settings, identify conflicts and bottlenecks. Source: Bitrix documentation on discount architecture
- Design — propose a discount structure, test on a staging environment.
- Estimation — provide a time and cost estimate based on complexity. The initial audit is priced at $299.
- Development — implement the solution with all necessary code and configurations.
- Testing — validate with real scenarios, including edge cases.
- Launch — deploy to production and monitor.
We document each step and provide ongoing support.
Timeline Estimates
A typical personal discount setup takes from 5 to 15 working days, depending on the complexity of conditions, number of user groups, and integration depth with CRM. Final scope is determined after the audit.
If you're facing similar issues with discounts not applying or want to automate VIP assignment, contact us for a free consultation. We'll analyze your system and propose the optimal solution. For stores with 100+ user categories, the system reduces errors by 80% and saves $3,000 monthly on average.
Customer loyalty programs with Bitrix have been proven to increase retention by 20-30% (source: Wikipedia - Customer loyalty programs)

