E-commerce Cart Setup: Discounts, Cross-Sells, Optimization

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Showing 1 of 1All 1626 services
E-commerce Cart Setup: Discounts, Cross-Sells, Optimization
Simple
~1 day
Frequently Asked Questions

Our competencies:

Development stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1356
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Website development for FIXPER company
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    828
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    1073

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 localStorage and 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_DISCOUNT flag).

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:

  1. Products from the anonymous cart are transferred to the user's cart.
  2. If a product already exists in both carts, quantities are summed.
  3. 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

  1. Go to „Marketing → Discounts and coupons" and create a new cart rule.
  2. Set the name and activity. Choose the discount type: percentage, fixed amount, gift, or free shipping.
  3. Configure conditions: cart total, user group, presence of a product from a section.
  4. Set the priority (higher = earlier application). For exclusive promotions, enable „Stop further application".
  5. Select the discount recalculation type: „Sum with previous" — this prevents conflicts.
  6. Specify the action: e.g., „10% discount on the entire order for totals over 5,000 rubles".
  7. 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.basket and sale.basket.basket.line components.
  • 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

Why is 1C-Bitrix the flagship of e-commerce?

A faceted index on a catalog of 200,000 SKUs is not built — bitrix:catalog.smart.filter takes 4 seconds instead of 200 ms, and the customer leaves. Our online store development on 1C-Bitrix eliminates such scenarios: from infoblock architecture and price types to cluster balancing under peak loads. With over 12 years of experience and 200+ completed e-commerce projects, we have solved every performance bottleneck.

Two-way synchronization with 1C via CommerceML — catalog, prices, balances, orders, and statuses. Configured from the admin panel via the catalog module -> 'Exchange with 1C'. Export to marketplaces via YML feeds (catalog.export) for Yandex.Market, Google Shopping, Ozon, Wildberries. According to Wikipedia, 1C-Bitrix is used by more than 70,000 commercial sites in Russia and the CIS (https://en.wikipedia.org/wiki/1C-Bitrix). Contact us to evaluate your current architecture.

How do we solve key performance problems?

bitrix:catalog.smart.filter without faceted index generates queries that bring down MySQL. Solution: build b_catalog_iblock_index — response time drops from 4 seconds to 100–200 ms. For SEO filters, we use catalog.seo.filter — indexable filter intersection pages with unique meta tags.

Composite cache (bitrix:main.composite) speeds up page loading by 3–5 times compared to regular. Goal — product card TTFB < 200 ms. For sessions we use Redis (SESSION_SAVE_HANDLER = redis in .settings.php). Lazy load images, CDN for static, SQL optimization (especially JOINs on b_iblock_element_property). As noted in the official Bitrix documentation, composite cache delivers a page from HTML, bypassing PHP execution and database requests, giving a speed advantage of up to 5x.

Why is caching critical for an online store?

Each second of page load delay reduces conversion by an average of 7%. At TTFB > 400 ms, 32% of users leave the site. Composite cache delivers a page from HTML, bypassing PHP execution and database requests — this gives a speed advantage of up to 5 times. For product cards with frequent price and stock changes, we use tagged caching: invalidation occurs only for affected entities. In practice, we have reduced TTFB from 1.2 seconds to 180 ms. Time savings on catalog loading — up to 60%.

Store types and their features

Store type Key modules Features
B2C retail catalog.smart.filter, catalog.compare.list, reviews, ratings Faceted index, conversion funnel from card to payment
B2B wholesale dealer prices (b_catalog_group), min. lots, credit limits Personal accounts, quick order by SKU, PDF invoices
Digital goods licenses, subscriptions, files OnSaleOrderPaid -> automatic access granting
Marketplace "Marketplace" module or custom Multiple sellers, separate accounting, commission model
PWA / mobile Progressive Web App, React Native + REST API Offline catalog, push notifications

Integrations: payment systems, delivery, CRM, marketplaces

Payment systems. Handlers in sale.handlers: YooKassa, CloudPayments, Tinkoff, Sberbank, Apple Pay, Google Pay, installment. Callback sale.payment.notify for status confirmation. Delivery. Handlers sale.delivery for CDEK, Boxberry, Russian Post, DPD — real-time cost calculation via API, tracking. Warehouse management. Reservation (RESERVED = Y in b_sale_basket), automatic write-off upon shipment, notifications when stock falls below threshold, pre-order for goods in transit. CRM. Bitrix24 or amoCRM — orders from b_sale_order are sent automatically, client base is synchronized. Triggers: abandoned cart, review request, reactivation. Marketplaces. Export via YML to Ozon, Wildberries, Yandex.Market. Orders flow into a single system. Analytics and marketing. GA4, Yandex.Metrica, email newsletters (Unisender, SendPulse). Logistics. MyWarehouse, Antor — labels, picking lists.

Migration from other CMS

Migration from OpenCart, WooCommerce, Shopify, MODX: transfer of catalog (elements, properties, sections, images, SEO-URLs), migration of client base (b_user) and order history (b_sale_order), 301 redirects via urlrewrite.php. Parallel operation during the transition period — old site sells, new one is accepted. Team experience — 50+ migration projects.

Example migration: from OpenCart with 50,000 products We transferred all data, including custom attributes and review history, in two weeks with zero downtime. The new store was tested in parallel before switching DNS. Result: 25% faster page load and 15% increase in sales.

What is included in the work (deliverables)

Deliverable Description
Technical specification Business requirements, catalog structure, integrations, cart logic
Infoblock architecture Price types, properties, sections, HL-blocks, ORM entities
Components and templates Custom or adapted standard (Component 2.0)
Integrations Payments, delivery, CRM, marketplaces, 1C
Documentation Content filling instructions, REST API, DB schema
Team training Working with admin panel, exports, updates
Warranty Free support 3 months after launch, bug fixes

Stages and timelines

Average project duration — 2 to 4 months:

  1. Analytics (1–2 weeks) — business requirements, catalog structure, integrations, technical specification
  2. Design (2–3 weeks) — prototypes, design system, layouts
  3. Development (4–8 weeks) — components, templates, integrations, content
  4. Testing (1–2 weeks) — functional, load, acceptance
  5. Launch (2–3 days) — deployment, monitoring, operational support

Budget range: from $10,000 for a basic store to $60,000+ for a complex marketplace with multiple integrations. Clients typically see a 20–30% increase in conversion after optimization. Contact us for a precise estimate — we tailor the solution to your specific catalog size and business logic.

Loyalty program and conversion

Bonus system: points for purchases, reviews, recommendations. Accrual rules by categories, points payment limit, expiration period — all in personal account. VIP levels (bronze, silver, gold, platinum) with increased cashback and free shipping. Recommendations 'You may also like', 'Complete your purchase' — built-in Bitrix tools + RetailRocket or Mindbox. Triggers: birthday discount, promo code for return, interest chain. Personalization via catalog.recommended.products and catalog.viewed.products. A/B testing of two card variants on real traffic. Enhanced E-commerce in GA4 and Yandex.Metrica — full path from click to return visit.

Request a free technical audit of your current store. Our engineers will identify performance bottlenecks and migration risks. Order turnkey online store development — get a ready solution with warranty and support.