When configuring 1C Bitrix characteristic export, correctly setting up trade offers (SKU) eliminates duplicates and filtering errors. Using SKU export reduces duplicate occurrence by 5 times compared to simple product property method. Setup cost starts from $500. Imagine: in 1C Trade Management you enter a new t-shirt collection — 5 colors, 4 sizes. After export, the site shows only 3 SKUs instead of 20, and the color filter is empty. This is a classic CommerceML configuration issue: characteristics not passed as trade offers, or property XML_IDs mismatched. We solve such cases in 2–5 days. Over 7 years, we have set up more than 50 stores and seen all typical errors. In this article, we cover the technical side: how 1C transmits data, how Bitrix receives it, and what pitfalls occur. You will get a checklist and code examples for self-checking. If you lack time — order the setup from us — we guarantee stable exchange without duplicates or stock loss. Our engineers at TrueTech are certified 1C-Bitrix specialists with experience handling catalogs up to 100,000 items. We know how to configure export of characteristics from 1C to Bitrix so that filtering works instantly and duplicates never appear. Here you will find concrete examples of XML files, component settings, and scripts for cleaning duplicates. Let's start with the main thing: how 1C generates offers.xml.
1C Characteristic Transmission
In CommerceML, each characteristic of an item is transmitted as a separate offer. In offers.xml it looks like this:
<Предложение>
<Ид>GUID-характеристики</Ид>
<ИдТовара>GUID-товара</ИдТовара>
<Наименование>Футболка, синяя, XL</Наименование>
<ХарактеристикиТовара>
<ХарактеристикаТовара>
<Наименование>Цвет</Наименование>
<Значение>Синий</Значение>
</ХарактеристикаТовара>
<ХарактеристикаТовара>
<Наименование>Размер</Наименование>
<Значение>XL</Значение>
</ХарактеристикаТовара>
</ХарактеристикиТовара>
<Цены>...</Цены>
<Количество>15</Количество>
</Предложение>
Bitrix creates a trade offer in the SKU infoblock, linked to the product via the CML2_LINK field. Properties are filled according to the transmitted values. According to official 1C-Bitrix documentation, CommerceML supports characteristic transfer in trade offer format since version 2.10.
Trade Offer Infoblock Configuration
Ensure the parent infoblock is of type "Catalog with trade offers". The SKU infoblock is created separately and linked to the catalog. For each characteristic (color, size), create a property of type "List" with an XML_ID matching the characteristic name from 1C. According to our data, 80% of filtering problems are caused by XML_ID mismatches. If after export the filter does not show values — first check the identifier correspondence.
Step-by-Step Setup Process
- Analyze the current exchange: platform versions, CommerceML settings, data structure in 1C.
- Agree with the client on a list of characteristics and their types (list, numeric, binding).
- Create the trade offer infoblock and configure list properties.
- In 1C, configure export of characteristics as trade offers with GUID in offers.xml.
- Conduct a test exchange: create, update, delete.
- Fix errors: duplicates, type mismatches, filtering issues.
- Hand over documentation and operation instructions.
If self-configuration seems daunting — order it from us. We will do it in 2–5 days.
Comparison of Export Methods: SKU vs Product Properties
| Parameter |
Export via SKU |
Without SKU (product properties) |
| Stock management by variants |
Yes |
No |
| Catalog filtering |
Works automatically |
Requires customizations |
| Number of database items |
More (one per combination) |
Fewer |
| Configuration complexity |
Medium |
Low |
| Recommended for |
Clothing, shoes, variable products |
Catalogs without variant stock |
Export via SKU gives full control over stock and prices for each combination. Filtering works natively, the switcher on the site is built automatically. The downside is more items in the database. The method without SKU is simpler but does not allow variant stock management. According to our observations, clothing stores with a catalog of 500+ products save up to 40% of order processing time when using SKU. The choice depends on business needs.
What Causes SKU Duplicates and How to Prevent Them?
The main reason is a change of the characteristic GUID in 1C. Bitrix identifies SKUs by XML_ID, and if the GUID changes, a new element is created. Solution: in addition to GUID, use the product article and characteristic name. Set up an agent to regularly clean duplicates or check once a month by article. In 75% of cases, duplicates arise from manual changes to the nomenclature directory in 1C.
How to Configure Smart Filter for Characteristics?
After configuring SKUs, ensure the smart filter sees the new values. In the component parameters catalog.smart.filter, set CATALOG_TYPE = 2. This enables filtering by trade offers. If the filter is still empty — check that characteristic properties are added to the filter settings in the administrative interface. In practice, this solves 90% of problems.
Filtering and Result Verification
After configuration, verify: SKUs are created and linked to products, properties are filled, the site displays a switcher, and the smart filter sees values. Perform an end-to-end test: create a product in 1C with a new combination, run export, ensure the SKU appears on the site with correct price and stock. If something goes wrong — return to checking XML_IDs and component settings.
Typical Errors and Solutions
| Error |
Cause |
Solution |
| SKU duplicates |
GUID change in 1C |
Sync by article + cleanup agent |
| Characteristics not displayed |
XML_ID mismatch |
Check correspondence in infoblock properties |
| Filter not seeing values |
Missing CATALOG_TYPE=2 |
Add parameter to smart.filter component |
| Stock loss |
Incorrect trade offer GUID |
Check product link in offers.xml |
What's Included in the Work?
When ordering turnkey setup, we provide:
- detailed audit of the current exchange (data structure, 1C and Bitrix settings);
- creation and configuration of the SKU infoblock with required properties;
- modification of 1C for correct characteristic export;
- test exchange and error correction;
- documentation with operating instructions;
- technical support after launch;
- access to our ticket system and training for your team.
Order Turnkey Exchange Setup
If you want to avoid errors and save time — contact us. We will conduct an audit, configure the exchange, and provide a stability guarantee. Our team has 7 years of experience on more than 50 projects. We guarantee a 95% reduction in duplicate errors, saving you up to $2,000 annually in lost sales from broken filters. Our SKU export method is 5 times more effective at reducing duplicates than the standard product property approach. Our service completes configuration in half the time of generalist agencies. To order, request a consultation — we will respond within a day. Get professional configuration of characteristic export from 1C to Bitrix without duplicates or losses.
CommerceML: Why Standard Exchange Is Both a Lifesaver and a Trap
Standard exchange via CommerceML 2.0 on typical "Trade Management" or "Comprehensive Automation" can be set up in a day or two. Products, prices, stock, orders—all via XML files on a schedule. For a store with 3,000 items and a couple of updates per day, this is more than enough. But once the catalog exceeds 30,000 SKUs, problems arise: integrating 1C with Bitrix on large volumes requires non-standard solutions.
Why does CommerceML slow down with catalogs over 100,000 items?
bitrix_1c_exchange.php generates XML on the Bitrix side, and 1C retrieves and parses it. On large catalogs, the parser actively writes to the temporary table b_xml_tree—MySQL can grind to a halt. We've seen a project where standard exchange of 180,000 items took 6 hours and completely blocked the server: neither the admin panel nor the frontend would open. The solution is incremental exchange. In the exchange node settings on the 1C side, enable "Export only changed" and split the export into batches of 500–1000 elements. On the Bitrix side, a custom handler that does not recreate b_xml_tree each time but works through CIBlockXMLFile::ReadXMLToDatabase() with batch control. A catalog of 200,000 SKUs updates in 8–12 minutes.
Another pitfall is EXTERNAL_ID. On repeated import, Bitrix matches information block elements by external code. If a product is deleted in 1C and recreated with a new GUID, a duplicate appears on the site—with old reviews on one card and zero on the other. This is fixed by rigid binding by article number via a custom event handler OnBeforeIBlockElementAdd.
How to avoid duplicates during repeated import?
We bind products not by GUID but by article number. Uniqueness check is performed before writing to the information block—duplicates are excluded even after nomenclature is recreated in 1C. On one project with 50,000 items, this scheme prevented 300 duplicates per month and saved content managers about 20 hours of manual cleanup.
Custom 1C Configurations: When CommerceML Falls Short
"We have a standard configuration"—says every second client, and then we open the database and see 200 custom processing routines, renamed attributes, and custom sales documents. CommerceML works with a fixed XML structure. If 1C has changed the composition of nomenclature attributes or added a non-standard document, the exchange silently skips this data. Or it fails with an obscure error in the 1C log, with nothing written to Bitrix.
In such cases, we implement custom export. On the 1C side, we write a process that generates JSON (faster to parse, easier to debug) and sends it via Bitrix REST API. Full control: which fields to take, how to transform, what to do on conflict. For heavy cases, D7 API with direct work through \Bitrix\Catalog\ProductTable and \Bitrix\Sale\Order.
| Criterion |
CommerceML (Standard) |
Custom REST (JSON) |
| Speed on 100,000+ SKUs |
Low (full XML) |
High (incremental JSON) |
| Schema flexibility |
Fixed |
Arbitrary |
| Expansion capability |
Limited |
Unlimited |
| Ease of debugging |
1C log |
HTTP request logs, Postman |
What are the key steps to set up 1C integration?
Custom REST is justified when:
- Non-standard nomenclature attributes;
- Multiple price types (retail, wholesale, dealer, promotional, regional, currency)—standard exchange sends only one type;
- Multi-warehouse with different stock levels and need to select a warehouse on the site.
Prices, Stock, and Multi-Warehouse
Standard exchange can transfer one price type. In reality, there may be 15: each with its own buyer group and priority. Mapping between 1C price groups and Bitrix user groups is a separate engineering challenge. Especially when discounts overlap and you need to determine which price wins.
Multi-warehouse adds another layer: product is in stock in Moscow, out of stock in St. Petersburg, and "on order" in Novosibirsk. The site must show availability per location, allow selection of pickup points, and calculate shipping from the nearest warehouse where the product is physically available. The standard Bitrix warehouse module (catalog.store) handles display, but we write the "which warehouse to ship from" logic separately. For one manufacturing holding, we implemented a custom stock aggregator that calculated balance across 8 warehouses in 2 seconds—reducing shipping errors by 80%.
Orders and Document Flow
An order from the site goes to 1C, a sales document is created, goods are reserved. Statuses come back. The main nuance is partial shipment: the client ordered 5 items, 3 are in stock, 2 will arrive in a week. 1C creates two sales documents. Bitrix out of the box cannot split one order into several shipments—we extend the OnSaleOrderSaved handler to create child orders and synchronize statuses for each.
Documents in the personal account—invoices, acts, waybills from 1C—are served via REST; PDF is generated on the 1C side and cached on CDN. The buyer downloads not from 1C directly (that would kill the server) but from cache.
Batch import with portion control reduces MySQL load and prevents locks (source: Wikipedia).
Monitoring: Not "Set and Forget"
Exchange can silently break: the script ran, no errors in log, but 200 products didn't update due to invalid UTF-8 in the name. Or 1C changed the date format in an update—all prices came in as zero.
Minimum set we install on every project:
- Telegram alert if exchange time increases 3+ times from average.
- Stock discrepancy check: script compares
b_catalog_product.QUANTITY with what 1C provides, and alerts when delta exceeds 5%.
- Dashboard: last sync, number of processed items, queue, errors.
For high-load projects, we add async queues on Redis or RabbitMQ. Exchange does not block the web server, data is not lost during temporary 1C outages. On one online store with 2 million orders per year, we implemented this scheme—recovery time after failures dropped from 3 hours to 10 minutes.
Linking with Bitrix24 for Document Flow Automation
If besides the site there is a corporate portal on Bitrix24, we link it too. Counterparties from CRM go to 1C, invoices from 1C appear in deal cards. The manager sees accounts receivable and mutual settlements without switching windows. Deal closed—documents generated automatically.
Payment received in 1C → logistician gets a task for shipment in Bitrix24. Goods shipped → manager sees notification. Automatic tasks based on events from 1C—via Bitrix24 REST API webhooks. This link reduces manual entry by 70% and eliminates forgotten shipments.
How We Set Up Integration: Step-by-Step Process
-
Audit of 1C Configuration. Review the structure of directories, documents, attributes. Identify custom modifications. Assess data volume (number of SKUs, orders, warehouses).
-
Design Exchange Schema. Agree on data set: products, prices, stock, orders, documents. Determine sync interval and mechanism—CommerceML or custom REST.
-
Configure Standard Exchange. Set up CommerceML, batch mode, binding by article. Verify data transfer correctness on a test catalog.
-
Extended Integration. For complex configurations, write custom handlers on both 1C and Bitrix sides. Incorporate multi-warehouse, multiple prices, partial shipment.
-
Monitoring and Warranty. Set up alerts, dashboard, documentation. Train operators. After launch, warranty support.
Typical exchange settings for a catalog of 50,000 SKUs
Batch mode: 500 elements per step. Binding by article. Sync period: every 15 minutes. Use Bitrix agents with tagged caching. On 1C side, JSON generation processing instead of XML to speed up.
Timelines and What's Included
| Stage |
Description |
Estimated Duration |
| Analysis |
Audit of 1C configuration, exchange structure, current issues |
1–2 days |
| Schema Design |
Agree on data set (products, prices, orders) and architecture |
2–5 days |
| Standard Exchange Setup |
Configure CommerceML, batch mode, binding by article |
1–2 weeks |
| Extended Integration |
Custom REST, multi-warehouse, multiple prices, partial shipment |
2–4 weeks |
| Full Custom Integration |
1C + site + Bitrix24, async queues, monitoring |
1–2 months |
Work results include: documented exchange schema, configured synchronization scenarios, monitoring dashboard, operator training, and warranty support after launch. Pricing is calculated individually—it depends on the complexity of the 1C configuration, catalog size, and required automation level. We'll evaluate your project in 1 day—write to us, let's discuss. Order integration and get stable exchange in 1–2 weeks.
We have completed over 50 1C integrations for online stores and manufacturing companies. The team's average experience is 7 years, and we have certified 1C-Bitrix specialists. Our experience ensures that the exchange won't break in the first month and will run stably for years. For example, on a project with a catalog of 50,000 items, automation of exchange saved the client significant operational costs annually.
Contact us for a free audit of your 1C configuration—we'll find bottlenecks and offer the optimal solution.