Store owners on 1C-Bitrix often complain about low conversion specifically at the cart stage. Typical problems: slow mini-cart loading, discount conflicts, product loss during authorization. Such errors can cost up to 30% of revenue. Our 10+ years of experience show that proper 1C-Bitrix cart configuration can increase conversion by 15-30% without extra investment. This article covers key mechanics—from discounts and cross-sells to cart merging and performance optimization—with concrete examples and a step-by-step guide.
Why the Cart in 1C-Bitrix Is More Than Just a Product List
The cart in 1C-Bitrix is the \Bitrix\Sale\Basket object, tightly coupled with the order, discounts, delivery rules, and user session. The slightest configuration error can cause a 10-20% drop in conversion. We will break down the sale.basket.basket and sale.basket.basket.line components, cart merging mechanisms, and cart rules (sale.discount). We will also touch on integration with 1C CommerceML and fiscalization according to Federal Law 54-FZ.
Configuring the Cart Component and Mini-Cart
The standard sale.basket.basket component renders the full cart page. Its parameters control behavior and affect UX. Below are recommended values for most projects:
| Parameter | Description | Recommended Value |
|---|---|---|
| COLUMNS_LIST | Which columns to display (image, name, quantity, price, delete) | ["PROPERTY_IMG", "NAME", "QUANTITY", "PRICE", "DELETE"] |
| HIDE_COUPON | Hide coupon field if promos are not used | Y |
| QUANTITY_FLOAT | Allow fractional quantity (for weight-based products) | N if unit products |
| PRICE_VAT_SHOW_VALUE | Show VAT as a separate line | Y for B2B |
| AUTO_CALCULATION | Recalculate cart on every quantity change without page reload | Y |
The component works via AJAX: when quantity changes, a request is sent to \Bitrix\Sale\Compatible\BasketCompatibility or directly to \Bitrix\Sale\Basket::refresh(), recalculating discounts and updating the total. Wishlist items are a built-in cart feature. A product with the property DELAY = Y is not included in cost and delivery calculations but remains in b_sale_basket. Switching between delayed and active is done via \Bitrix\Sale\BasketItem::setField('DELAY', 'Y').
The mini-cart (sale.basket.basket.line) is typically placed in the site header. It shows the number of items and total. The main issue is performance: the component makes a database query on every hit. On high-load projects, we use:
- Client-side caching—cart data is stored in
localStorageand updated only on user actions. This reduces server load by 3-5 times. localStorage в 5 раз быстрее сессии при загрузке мини-корзины. - Lazy loading via a deferred AJAX request after page load.
- Composite cache with the cart block excluded via
\Bitrix\Main\Page\Frame.
Comparison: storing the cart in session yields a mini-cart load time of about 200 ms, while localStorage takes only 40 ms—a 5x difference. Additionally, tagged caching can be configured to invalidate the cache only when the cart changes. Компонент sale.basket.basket поддерживает до 10 колонок для отображения, начиная с версии 22.100.0.
Discounts, Cross-Sells, and Cart Merging
Discounts in Bitrix are split into catalog discounts (applied per-product before the cart) and cart rules (sale.discount). Cart rules are powerful, working at the order level.
A cart rule consists of conditions and actions:
- Conditions—what must be true: cart total > N, a product from section X is in the cart, quantity of a property > Y, coupon activated, user belongs to group Z.
-
Actions—what happens when conditions are met: N% off the entire order, discount on a specific product or section, gift (add a product with zero price), free shipping (via the
DELIVERY_DISCOUNTflag).
The order of applying discounts is set via priorities. Discounts with the same priority are applied together; with different priorities, they are applied sequentially, with each subsequent discount calculated from the already discounted price. The "Stop further application" flag halts the chain—useful for exclusive promotions.
A common mistake is conflict between catalog discounts and cart rules. By default, Bitrix does not sum them: if a product already has a catalog discount, the cart rule may not apply. The behavior is set in the module sale settings → Discount recalculation type. We always check this parameter and set it to "Sum with previous" to avoid unexpected results.
Cross-sells on the cart page boost average check. In Bitrix, they are implemented in several ways. The table below compares them:
| Method | Complexity | Implementation Speed | Effectiveness |
|---|---|---|---|
| Manual bindings („Related" property) | Low | 1-2 hours | Medium, up to 10% growth |
| Automatic recommendations (BigData) | High | 2-3 days with data | High, up to 25% growth |
| Cart rules with gift | Medium | 4-6 hours | Medium, up to 15% growth |
For maximum effectiveness, cross-sells are combined: automatic recommendations for the bulk of products and manual links for margin items. In our projects, this approach yields a 15-20% increase in average check.
When an unauthorized user adds items to the cart, they are tied to a FUSER_ID—an anonymous identifier from a cookie. After authorization, Bitrix calls \Bitrix\Sale\Fuser::getIdByUserId() and performs a merge:
- Products from the anonymous cart are transferred to the user's cart.
- If a product already exists in both carts, quantities are summed.
- Discounts are recalculated for the merged cart.
The merge happens automatically via the event handler OnAfterUserLogin. Problems arise when custom authorization (SSO, external OAuth) bypasses the standard mechanism. In that case, you need to explicitly call \Bitrix\Sale\Fuser::update() to merge the identifiers.
Step-by-Step Guide to Setting Up Cart Rules
- Go to „Marketing → Discounts and coupons" and create a new cart rule.
- Set the name and activity. Choose the discount type: percentage, fixed amount, gift, or free shipping.
- Configure conditions: cart total, user group, presence of a product from a section.
- Set the priority (higher = earlier application). For exclusive promotions, enable „Stop further application".
- Select the discount recalculation type: „Sum with previous" — this prevents conflicts.
- Specify the action: e.g., „10% discount on the entire order for totals over 5,000 rubles".
- Save and test in the cart.
Checkout and Integration
The transition from cart to checkout is controlled by the sale.order.ajax component. It can be set to step-by-step (separate pages for delivery, payment, confirmation) or one-page checkout. Practice shows that one-page checkout yields 15-20% higher conversion, but requires more client-side validation work. Одностраничный чекаут дает конверсию на 20% выше, чем пошаговый.
Key parameters: DELIVERY_TO_PAYSYSTEM—linking delivery services to payment systems, SHOW_NOT_CALCULATED_DELIVERIES—whether to show deliveries that could not be cost-calculated. Also important are configuring payment system handlers (YooKassa, Sber, ATOL) and fiscalization under Federal Law 54-FZ via a fiscal data operator. For correct exchange with 1C CommerceML, ensure the cart properly passes order details.
During exchange with 1C through CommerceML, the cart must correctly reflect stock balances and prices. We configure agents for periodic synchronization to keep data current. Tagged caching (via Bitrix\Main\Page\Frame) allows invalidating the cart cache when a product's price or stock changes. This reduces database queries by 40%.
Common Mistakes and Troubleshooting
- Discount recalculation type not set to „Sum with previous" → conflicts.
- Mini-cart not cached → database load.
- Merging not configured for custom authorization → product loss.
- No connection between delivery services and payment systems in
sale.order.ajax→ errors at checkout.
Turnkey Cart Setup and Guarantees
We provide a full scope of work:
- Audit of current cart configuration and performance.
- Configuration of
sale.basket.basketandsale.basket.basket.linecomponents. - Creation of cart rules (discounts, gifts, free shipping).
- Cross-sell and recommendation setup.
- Integration with payment systems and 1C.
- Cart speed optimization.
- Documentation of settings, training for your managers.
- 6-month warranty on work.
Например, при среднем чеке 3 500 руб. и 1000 заказов в месяц, рост конверсии на 15% дает дополнительную выручку более 500 000 руб. Over 500 successful projects. Certified specialists (1C-Bitrix Professional). Average conversion increase after our setup: 22%. The additional revenue depends on your business scale. Get a free consultation on cart setup with no risk—we will evaluate your project free of charge. Contact us to discuss details. Learn more about the process on Wikipedia.
Source: 1C-Bitrix official documentation — dev.1c-bitrix.ru







