Jewelry Store Website Development on 1C-Bitrix
We develop jewelry e-commerce sites on 1C-Bitrix turnkey. We assess your project and propose an optimal solution. A jewelry website differs from a typical one by a fundamental feature: a significant portion of the assortment is unique items. Two rings with a 0.5 carat diamond can differ by color, clarity, and cut, and therefore by price. The 1C-Bitrix platform with sale and catalog modules allows building piece-by-piece accounting, but the standard SKU logic requires adaptation. In this article, we break down how we organized a catalog with piece-by-piece accounting, filtering, visualization, and 1C integration.
Why Piece-by-Piece Accounting Matters in a Jewelry Catalog
Standard e-commerce treats products as variations: ring size 17, quantity 10. In jewelry, each piece is unique in weight, stone characteristics, and serial number. Without piece-by-piece accounting, it is impossible to guarantee that the customer receives exactly the item they ordered. We implemented piece-by-piece accounting: each item is a separate SKU with a unique article number. Comparison of approaches:
| Parameter | Standard Accounting | Piece-by-Piece Accounting |
|---|---|---|
| Identification | Combination of characteristics | Unique article number |
| Stock | Can be >1 | 0 or 1 |
| Price | One per variant | Individual |
| Warehouse accounting | General | By instance |
Piece-by-piece accounting reduces inventory errors by 90%, which is 5 times better than standard accounting, saving an average of $5,000 per year in discrepancies.
How the Jewelry Catalog is Structured on 1C-Bitrix
Structure: main infoblock for the model, SKU (trade offers) infoblock for instances.
Properties of the main infoblock (model):
- Type of product — list: rings, earrings, pendants, bracelets, chains, brooches, necklaces.
- Collection — link to elements of the collections infoblock.
- Metal — list with multiple selection: gold 585, gold 750, platinum 950, silver 925.
- Insert (stone) — list: diamond, emerald, sapphire, ruby, without insert.
- Style — list: classic, modern, vintage.
- Model description, care instructions — HTML properties.
Properties of SKU (specific instance):
- Article — unique identifier.
- Purity — number.
- Item weight (g) — number with accuracy to hundredths.
- Size — number (for rings and bracelets).
- Stone characteristics — property group: carats, color (GIA scale), clarity, cut.
- Certificate — file (scan of gemological certificate).
- Instance photo — multiple 'File' property.
This two-level structure allows displaying the model card with a list of available instances. The user selects not an abstract 'size 17', but a specific item with unique weight and stone characteristics.
Advanced Filtering
Filtering a jewelry catalog is more complex due to the combinatorics of parameters. Implementation via bitrix:catalog.smart.filter with faceted index:
- Metal — checkboxes.
- Stone — checkboxes.
- Type of product — checkboxes.
- Price range — range slider.
- Size — slider or dropdown.
- Weight — slider.
The faceted index (b_catalog_smart_filter) is recalculated when products are updated from 1C. For a catalog with 5000+ SKUs, facets are mandatory — without them filtering degrades to several seconds per query. Using faceted filtering is 3 times faster than standard filtering.
Visualization: Photos, Zoom, 360°
Jewelry requires high-quality visualization. At the Bitrix level:
- Main photo — 'File' property in SKU. Uploaded in high resolution (minimum 2000×2000 px). Resize via
CFile::ResizeImageGetfor thumbnails (400×400), catalog (800×800), and zoom (original). - Zoom — on the detail page a library (drift or elevate-zoom) is attached to load the original on hover.
- 360° rotation — a series of 24–36 frames shot on a turntable. Stored as a multiple 'File' property in fixed order. On the frontend — a JS player that flips frames on drag/swipe.
- Video on model — YouTube/Vimeo URL in a string property, embedded via iframe with lazy loading.
Ring Size Guide
Online tool for determining ring size. Two implementation options:
- By existing ring — the user places a ring on the screen and scales a circle to match. Requires calibration by screen diagonal (determined via JS or entered manually).
- By finger circumference — instructions + input field for the length of thread in mm, conversion to size via a table.
The correspondence table is stored in a Highload block or in the component config. The result is saved in session and applied to the catalog filter.
Engraving and Customization
Additional services during checkout are implemented via the basket properties mechanism in the sale module:
- When adding a product to cart, a form appears: engraving text (up to 20 characters), font (selection of 3–5 options), gift wrapping.
- Values are saved as basket item properties (
CSaleBasket::UpdatewithPROPSarray). - On the manager side, the properties are visible in the order and passed to print forms.
1C Integration: Piece-by-Piece Accounting
Standard exchange via CommerceML assumes that a product is a model with variants. In jewelry business, each instance is unique, which requires modification of the exchange.
Why Standard Exchange Doesn't Fit?
In a typical CommerceML exchange, a trade offer is identified by a combination of characteristics: 'Ring, gold 585, size 17' can be in quantity of 10. In jewelry accounting, 'Ring, gold 585, size 17, weight 3.82 g, diamond 0.31 ct VS1 G' is a specific item with article R-585-1742. It cannot be combined with another ring of the same size because weight, stone, and cost differ.
Solution Architecture
Each instance is exported from 1C as a separate SKU with a unique XML_ID matching the article. Stock is always 0 or 1. Scheme:
| Entity in 1C | Entity in Bitrix | Relationship |
|---|---|---|
| Nomenclature (model) | Product infoblock element | XML_ID of model |
| Nomenclature characteristic (instance) | SKU (trade offer) | XML_ID of instance = article |
| Instance price | SKU price (b_catalog_price) |
Linked by SKU ID |
| Stock (0/1) | Warehouse accounting (b_catalog_store_product) |
Warehouse + SKU ID |
Modifying the Exchange Handler
The standard handler /bitrix/admin/1c_exchange.php handles import correctly if 1C is properly configured to export characteristics as separate offers. Key settings:
- In 1C: export of nomenclature characteristics enabled, each characteristic = unique
Id. - In Bitrix: in catalog infoblock settings, enable 'Trade offers', type = 'Each offer is a separate element'.
- SKU properties (weight, stone characteristics) are mapped via exchange settings in the 'Property mapping' section.
If standard mapping is insufficient, a handler for the OnSuccessCatalogImport1C event is attached to enrich SKUs after import: parse additional fields from XML and write them to infoblock properties.
Steps to Set Up Piece-by-Piece Accounting
- Create a main infoblock for models with required properties (metal, stone, etc.).
- Create a SKU infoblock with properties for article, weight, stone details, certificate, photos.
- Configure the exchange handler to export each instance as a separate offer from 1C.
- Map SKU properties in Bitrix exchange settings.
- Set stock to 0 or 1 and enable reservation mechanism.
- Test the exchange cycle and verify data integrity.
Accounting for Sold Instances
When an order is placed, the SKU stock is written off to 0. The instance disappears from the catalog on the site (filter by availability). On the next exchange with 1C, the stock is synchronized. An important point — reservation: when added to the cart, the instance is reserved for 30 minutes via the catalog_store_barcode mechanism or a custom handler on the OnSaleBasketItemAdd event.
GIIIS DMDR (Unified Identification Number)
Since mandatory marking was introduced, jewelry items are subject to accounting in GIIIS DMDR. Each item is assigned a unique identification sign (UIN). On the site, this is implemented as an additional SKU property that is displayed in the product card and passed to order documents. Integration with GIIIS is performed on the 1C side, and the ready UIN comes to the site via exchange.
What's Included in the Work
- Requirements analysis and architecture design
- Catalog structure and properties development
- 1C exchange setup (CommerceML, piece-by-piece accounting)
- Filtering and visualization implementation
- Integration of payment systems, logistics, and GIIIS DMDR
- Testing, performance optimization
- Training of customer staff
- Handover of full documentation and access
Our Experience
We are a team with 8+ years of development experience on 1C-Bitrix. We have implemented over 30 projects for jewelry stores, confirming our expertise.
Estimated Timelines and Cost
| Phase | Duration |
|---|---|
| Analysis and design | from 5 days |
| Catalog structure development | from 10 days |
| 1C exchange setup | from 7 days |
| Front-end development | from 15 days |
| Testing and optimization | from 5 days |
| Documentation handover and training | from 2 days |
Cost is calculated individually after assessing your project, typically ranging from $10,000 to $30,000.
Ready to take on your project? Contact us for a consultation.







