Custom Reports for 1C-Bitrix E-commerce
Standard reports in the sale module provide a fixed set of metrics: revenue, order count, conversion. When you need customer segmentation by managers including returns, or margin breakdown by categories, you end up manually exporting data to Excel. On nearly every project, the client first spends weeks on manual analytics and then asks for automation.
We develop bespoke reports using D7 ORM that give you full control over the data: arbitrary grouping, cross-tables, automatic export. After implementing such a report, one client reduced their monthly reporting time from two days to one hour—saving approximately €2,500 per month in labor costs—and stopped making errors in the numbers.
What problems do custom reports solve?
Standard reports from the sale module do not support cross-tables. For stores with turnover of several thousand orders per month, they are insufficient. Custom reports on D7 ORM provide flexibility not available in the off-the-shelf functionality.
Standard reports: what exists and what is missing
The sale module offers several built-in reports via the bitrix:sale.report.construct component. Their limitations:
- Fixed set of groupings—cannot add custom fields
- No cross-tables (pivot)—cannot build a "product × region" matrix
- No cohort analysis or RFM analysis
- Export only to CSV with limited formatting
- No composite metrics (LTV, average order value including returns)
ORM queries via OrderTable and related entities
The foundation of custom analytics is Bitrix D7 ORM. Key tables:
| ORM Class |
Purpose |
Key Fields |
\Bitrix\Sale\Internals\OrderTable |
Orders |
ID, DATE_INSERT, USER_ID, PRICE, STATUS_ID, RESPONSIBLE_ID |
\Bitrix\Sale\Internals\BasketTable |
Basket items |
ORDER_ID, PRODUCT_ID, QUANTITY, PRICE, DISCOUNT_PRICE |
\Bitrix\Sale\Internals\ShipmentTable |
Shipments |
ORDER_ID, DELIVERY_ID, STATUS_ID, DATE_DEDUCTED |
\Bitrix\Sale\Internals\PaymentTable |
Payments |
ORDER_ID, PAY_SYSTEM_ID, SUM, PAID, DATE_PAID |
\Bitrix\Sale\Internals\OrderPropsValueTable |
Order properties |
ORDER_ID, ORDER_PROPS_ID, VALUE |
ORM allows building queries with JOINs, grouping, and aggregate functions without raw SQL. A custom report on D7 ORM processes a summary of 100,000 orders 3 times faster than an equivalent report using agents.
Example ORM query with grouping
$result = OrderTable::getList([
'select' => [
'MONTH' => new ExpressionField('MONTH', "DATE_TRUNC('month', %s)", ['DATE_INSERT']),
'RESPONSIBLE_ID',
'TOTAL' => new ExpressionField('TOTAL', 'SUM(%s)', ['PRICE']),
'CNT' => new ExpressionField('CNT', 'COUNT(%s)', ['ID']),
],
'filter' => [
'>=DATE_INSERT' => DateTime::createFromPhp(new \DateTime('last year')),
'!STATUS_ID' => 'F',
],
'group' => ['MONTH', 'RESPONSIBLE_ID'],
'order' => ['MONTH' => 'ASC'],
]);
Why ORM is more efficient than standard reports?
ORM queries provide arbitrary grouping: by periods, products, managers, regions. For complex queries with subqueries, we use $DB->Query() directly.
Visualization and export
Typical visualization set: line chart for trends, bar chart for comparison, doughnut for shares, heatmap for activity. Export to Excel via PhpSpreadsheet:
cd /home/bitrix/www/local
composer require phpoffice/phpspreadsheet
PhpSpreadsheet generates files with formatting, formulas, and multiple sheets—accounting departments use them without modifications.
Deep-dive: RFM analysis report
RFM analysis segments customers by three parameters: Recency, Frequency, Monetary. Each parameter is scored from 1 to 5 (quintiles). 125 segments are grouped into categories: "loyal", "sleeping", "lost", "new prospects".
Algorithm:
- Select customers with completed orders in the last 12 months.
- For each, calculate last order date, order count, total amount.
- Distribute into quintiles via
NTILE(5) OVER (ORDER BY ...).
- Assign segment based on R-F-M combination.
SQL query for metrics:
SELECT
o.USER_ID,
MAX(o.DATE_INSERT) AS last_order_date,
EXTRACT(DAY FROM NOW() - MAX(o.DATE_INSERT)) AS recency_days,
COUNT(o.ID) AS frequency,
SUM(o.PRICE) AS monetary
FROM b_sale_order o
WHERE o.STATUS_ID NOT IN ('F', 'CA')
AND o.DATE_INSERT >= NOW() - INTERVAL '12 months'
AND o.PAYED = 'Y'
GROUP BY o.USER_ID
Segment mapping:
| Segment |
R |
F |
M |
Action |
| Champions |
5 |
5 |
5 |
Loyalty program |
| Loyal |
3-5 |
3-5 |
3-5 |
Upsell, referrals |
| Promising newbies |
5 |
1 |
1-3 |
Onboarding |
| Sleeping |
2-3 |
2-3 |
2-3 |
Reactivation |
| At risk |
1-2 |
3-5 |
3-5 |
Urgent reactivation |
| Lost |
1 |
1-2 |
1-2 |
Win-back |
The RFM report is displayed as a table with filtering and treemap visualization. Data is cached—recalculation for 50,000 customers takes 10-15 seconds.
What is included in the work
After agreeing on the layout and metrics, we:
- Design queries and optimize indexes.
- Implement a dashboard with filters and visualization.
- Configure export to Excel/CSV.
- Prepare documentation on data structure and algorithms.
- Conduct employee training on using the reports.
- Provide 30 days of free support after launch.
Additionally, you receive full admin panel access, a development repository (if desired), and a performance guarantee: reports load in under 3 seconds for up to 100,000 orders.
Development stages
| Stage |
Content |
Duration |
| Analytics |
Define metrics, slices, dashboard layout |
2-3 days |
| Query design |
ORM queries, index optimization |
3-5 days |
| Visualization |
Dashboard layout, Chart.js graphs, filters |
3-4 days |
| Export |
PhpSpreadsheet, formatting |
1-2 days |
| Testing |
Verification on large volumes, load testing |
2-3 days |
Timelines and cost
Timelines start from 5 business days for a simple report (starting at €1,200), from 15 days for a comprehensive dashboard with RFM and cohorts (starting at €3,500). Cost is calculated individually after analyzing your database and requirements. The time saved on report preparation pays back the development investment within a couple of months. For example, one client saves €2,500/month after a €3,500 investment. We have 7+ years of experience in 1C-Bitrix development and have completed over 50 custom report projects. Contact us — we will design a report tailored to your task.
Guarantees and trust
- 30 days free support after launch
- Performance guarantee: dashboards load in <3 seconds for up to 100k orders
- Certified Bitrix developers with proven expertise
- We provide a detailed project plan and timeline upfront
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:
- Analytics (1–2 weeks) — business requirements, catalog structure, integrations, technical specification
- Design (2–3 weeks) — prototypes, design system, layouts
- Development (4–8 weeks) — components, templates, integrations, content
- Testing (1–2 weeks) — functional, load, acceptance
- 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.