Two-Way Catalog Sync with 1C: Data Exchange Setup

When prices and stock levels change in 1C but the website operates independently, losses occur: outdated data, order failures, and manual routine. We configure two-way data exchange between 1C and your site, designing synchronization rules and sources of truth for each field. Our team delivers turnkey integration—from audit to support—so the catalog stays current and works as a unified mechanism.

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1342
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1304
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1047
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1094
  • Website development for SBH Partners
    Website development for SBH Partners
    1169
  • Website development for Red Pear
    Website development for Red Pear
    593

Two-Way Catalog Synchronization with 1C

Imagine: a manager updated a price in 1C, but the old price lingers on the site for three days. Or a product is discontinued in the accounting system but remains orderable online. Two-way catalog sync with 1C is not just import and export. It's designing a rule system that resolves data conflicts when information changes in both systems simultaneously. Without a clear definition of the source of truth, synchronization turns into chaos: data gets overwritten, duplicates appear, orders are lost.

A typical scenario: price and stock are changed in 1C, while the description is edited on the site. If the exchange is set up as one-way import, the description may be overwritten. Our approach is two-way exchange with field-level master systems. We design the logic so that the site and 1C remain consistent without manual intervention.

Defining Sources of Truth

The first step is to document for each field which system is the master:

Field Master Logic
Product name 1C 1C is the nomenclature system
SKU 1C SKU is set in the accounting system
Description Site Marketing texts are written by the editor
Price 1C Pricing in the accounting system
Stock 1C Real warehouse accounting
Images Site Photos are processed separately
SEO fields Site meta title/description on the site side
Activity status Both 1C can take it off sale, the site can too

How Conflicts Are Resolved During Synchronization

Conflict: the active_site field was set to false by a site operator (unpublished), but the next export from 1C contains active = true. According to the table above, 1C is the master for active_1c, but active_site remains untouched. Result: active_1c = true, active_site = false → product is not displayed. The site operator retains control. For each field, we define a master system and merge rule. This ensures data integrity and prevents information loss.

Database Schema

CREATE TABLE products (
  id BIGSERIAL PRIMARY KEY,
  onec_guid UUID UNIQUE, -- 1C identifier
  sku TEXT, -- Fields from 1C (overwritten on each sync)
  name_1c TEXT,
  price_1c NUMERIC(12,2),
  stock_1c INTEGER,
  category_guid UUID,
  active_1c BOOLEAN DEFAULT true, -- Site fields (not overwritten by sync)
  description TEXT,
  meta_title TEXT,
  meta_description TEXT,
  images JSONB,
  active_site BOOLEAN DEFAULT true, -- Sync metadata
  last_sync_1c TIMESTAMPTZ,
  sync_hash_1c CHAR(64) -- hash of data from 1C for change detection
);
-- Final status: product is active only if active in both 1C and site
CREATE VIEW products_active AS
SELECT * FROM products
WHERE active_1c = true AND active_site = true;

Synchronization Algorithm from 1C to Site

class OnecToSiteSyncService {
    public function sync(CommerceMLData $data): SyncResult {
        $result = new SyncResult();
        foreach ($data->products as $onecProduct) {
            $syncHash = $this->computeHash($onecProduct);
            $product = Product::firstOrNew(['onec_guid' => $onecProduct->guid]);
            // Skip if data hasn't changed
            if ($product->exists && $product->sync_hash_1c === $syncHash) {
                $result->skipped++;
                continue;
            }
            // Update ONLY fields from 1C (do not touch description, images, etc.)
            $product->fill([
                'sku' => $onecProduct->sku,
                'name_1c' => $onecProduct->name,
                'price_1c' => $onecProduct->price,
                'stock_1c' => $onecProduct->stock,
                'category_guid'=> $onecProduct->categoryGuid,
                'active_1c' => $onecProduct->active,
                'last_sync_1c' => now(),
                'sync_hash_1c' => $syncHash,
            ]);
            $product->save();
            $result->updated++;
        }
        // Products no longer exported by 1C are deactivated
        $syncedGuids = $data->products->pluck('guid');
        Product::whereNotIn('onec_guid', $syncedGuids)
            ->update(['active_1c' => false]);
        return $result;
    }
}

Synchronization Site to 1C

The site sends to 1C only what has changed on the site and matters to 1C: new orders, returns, payment notifications.

class SiteToOnecSyncService {
    public function getUnsyncedOrders(): Collection
    {
        return Order::where('sent_to_1c', false)
            ->where('status', '!=', 'draft')
            ->with(['items.product', 'customer'])
            ->get();
    }
}

Why Choosing the Right Exchange Format Matters

CommerceML is the industry standard for integration with 1C, but REST API gives more control. Comparison:

Criterion CommerceML REST API
Deployment speed Fast (out of the box) Requires development
Flexibility Limited schema Full control over fields
Versioning support No Yes (via headers)
Error granularity Generic codes HTTP statuses + response body
Performance XML parsing JSON, faster

We choose the approach for the specific task. For small businesses, CommerceML is often sufficient; for large catalogs with high load, REST API is preferred.

Monitoring Synchronization

-- Last sync statuses
SELECT source,
       COUNT(*) FILTER (WHERE status = 'success') AS success,
       COUNT(*) FILTER (WHERE status = 'error') AS errors,
       MAX(finished_at) AS last_run,
       AVG(EXTRACT(EPOCH FROM (finished_at - started_at))) AS avg_duration_sec
FROM sync_logs
WHERE started_at > NOW() - INTERVAL '7 days'
GROUP BY source;

How Often Should Synchronization Occur?

The interval depends on change intensity and load. For an online store with 10,000 products, it's optimal to update prices and stock every 15-30 minutes. For a large marketplace (100,000+ items) — every 5 minutes during peak hours and less frequently at night. We always set up an adjustable schedule with manual trigger capability.

Typical Mistakes When Setting Up Synchronization

  • Lack of data hashing: each export overwrites all fields even if data hasn't changed. Solution: store the last sync hash and compare.
  • Ignoring activity status: if a product is unavailable in either system, it still appears on the site. Use AND logic between active_1c and active_site.
  • Incorrect processing order: import from 1C first, then export orders — otherwise collisions may occur. Maintain sequence.

What's Included in the Work

  • Audit of current data schema — identify mismatches and growth points.
  • Designing synchronization rules — define sources of truth and conflict resolution logic.
  • Implementing the exchange — write sync code using CommerceML or REST API.
  • Testing with real data — verify on live configuration, fix errors.
  • Documentation and training — provide operation instructions.
  • Post-launch support — guarantee stable operation, resolve incidents.

Timeline

Two-way catalog synchronization with 1C, including testing on a real configuration: 14–20 business days. Contact us for an audit of your current sync scheme. Get a consultation on data exchange setup — we will assess the scope of work and propose the optimal solution.