Двусторонняя синхронизация каталога с 1С — настройка обмена данными

Когда цены и остатки в 1С меняются, а сайт живёт своей жизнью, начинаются потери: устаревшие данные, срывы заказов и ручная рутина. Мы настраиваем двусторонний обмен данными между 1С и вашим сайтом, проектируя правила синхронизации и источники правды для каждого поля. Наша команда реализует интеграцию под ключ — от аудита до поддержки, чтобы каталог всегда был актуален и работал как единый механизм.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Двусторонняя синхронизация каталога с 1С — настройка обмена данными
Сложный
~2-4 недели
Часто задаваемые вопросы

Реализация двусторонней синхронизации каталога товаров с 1С

Представьте: менеджер обновил цену в 1С, но на сайте она висит прежняя три дня. Или товар сняли с продажи в учётной системе, а он всё ещё доступен для заказа. Двусторонняя синхронизация каталога с 1С — не просто импорт и экспорт. Это проектирование системы правил, которая разрешает конфликты данных, когда информация меняется в обеих системах одновременно. Без чёткого определения источника правды синхронизация превращается в хаос: данные затираются, возникают дубли, теряются заказы.

Типичная ситуация: в 1С изменили цену и остаток, а на сайте отредактировали описание. Если обмен настроен как односторонний импорт, описание может быть затёрто. Наш подход — двусторонний обмен с разделением полей на мастер-системы. Мы проектируем логику так, чтобы сайт и 1С оставались согласованными без ручного вмешательства.

Определение источников правды

Первый шаг — зафиксировать для каждого поля, какая система является мастером:

Поле Мастер Логика
Название товара 1С 1С — система номенклатуры
Артикул / SKU 1С Артикул задаётся в учётной системе
Описание Сайт Маркетинговые тексты пишутся редактором
Цена 1С Ценообразование в учётной системе
Остатки 1С Реальный учёт на складах
Изображения Сайт Фото обрабатываются отдельно
SEO-поля Сайт meta title/description — на стороне сайта
Статус активности Обе 1С может снять с продажи, сайт тоже

Как разрешаются конфликты при синхронизации?

Конфликт: поле active_site было выставлено оператором сайта в false (снят с публикации), но следующая выгрузка из 1С содержит active = true. По правилам таблицы выше — 1С является мастером для active_1c, но active_site не трогается. Итог: active_1c = true, active_site = false → товар не отображается. Оператор сайта сохраняет контроль. Для каждого поля мы определяем систему-мастер и правило мержа. Это гарантирует целостность данных и исключает потерю информации.

Схема базы данных

CREATE TABLE products (
    id BIGSERIAL PRIMARY KEY,
    onec_guid UUID UNIQUE, -- идентификатор 1С
    sku TEXT, -- Поля из 1С (перезаписываются при каждой синхронизации)
    name_1c TEXT,
    price_1c NUMERIC(12,2),
    stock_1c INTEGER,
    category_guid UUID,
    active_1c BOOLEAN DEFAULT true, -- Поля сайта (не перезаписываются синхронизацией)
    description TEXT,
    meta_title TEXT,
    meta_description TEXT,
    images JSONB,
    active_site BOOLEAN DEFAULT true, -- Мета синхронизации
    last_sync_1c TIMESTAMPTZ,
    sync_hash_1c CHAR(64) -- хеш данных из 1С для детекции изменений
);
-- Итоговый статус: товар активен только если активен и в 1С, и на сайте
CREATE VIEW products_active AS
SELECT * FROM products
WHERE active_1c = true AND active_site = true;

Алгоритм синхронизации из 1С → сайт

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]);
            // Пропускаем, если данные не изменились
            if ($product->exists && $product->sync_hash_1c === $syncHash) {
                $result->skipped++;
                continue;
            }
            // Обновляем ТОЛЬКО поля из 1С (не трогаем description, images и т.д.)
            $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++;
        }
        // Товары, которые 1С больше не выгружает — деактивируем
        $syncedGuids = $data->products->pluck('guid');
        Product::whereNotIn('onec_guid', $syncedGuids)
            ->update(['active_1c' => false]);
        return $result;
    }
}

Синхронизация сайт → 1С

Сайт передаёт в 1С только то, что изменилось на сайте и имеет значение для 1С: новые заказы, возвраты, отзывы об оплате.

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

Почему важно выбрать правильный формат обмена?

CommerceML — отраслевой стандарт для интеграции с 1С, но REST API даёт больше контроля. Сравнение:

Критерий CommerceML REST API
Скорость развёртывания Быстро (из коробки) Требует разработки
Гибкость Ограниченная схема Полный контроль над полями
Поддержка версионирования Нет Да (через заголовки)
Детализация ошибок Общие коды HTTP-статусы + тело ответа
Производительность Парсинг XML JSON, быстрее

Мы выбираем подход под конкретную задачу. Для малого бизнеса часто достаточно CommerceML, для крупного каталога с highload — REST API.

Мониторинг синхронизации

-- Последние статусы синхронизации
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;

Как часто должна происходить синхронизация?

Интервал зависит от интенсивности изменений и нагрузки. Для интернет-магазина с 10 000 товаров оптимально обновлять цены и остатки каждые 15-30 минут. Для крупного маркетплейса (100 000+ позиций) — раз в 5 минут в пиковые часы и реже ночью. Всегда настраиваем регулируемое расписание с возможностью ручного запуска.

Типичные ошибки при настройке синхронизации

  • Отсутствие хеширования данных: каждая выгрузка перезаписывает все поля, даже если данные не изменились. Решение — хранить хеш последней синхронизации и сравнивать.
  • Игнорирование статуса активности: если товар недоступен ни в одной из систем, он всё равно отображается на сайте. Использовать логику AND между active_1c и active_site.
  • Неправильный порядок обработки: сначала импорт из 1С, потом экспорт заказов — иначе возможны коллизии. Соблюдать последовательность.

Что входит в работу

  • Аудит текущей схемы данных — выявляем несоответствия и точки роста.
  • Проектирование правил синхронизации — определяем источники правды и логику разрешения конфликтов.
  • Реализация обмена — пишем код синхронизации с использованием CommerceML или REST API.
  • Тестирование на реальных данных — проверяем на боевой конфигурации, устраняем ошибки.
  • Документация и обучение — передаём инструкции по эксплуатации.
  • Поддержка после запуска — гарантируем стабильную работу, исправляем инциденты.

Сроки

Двусторонняя синхронизация каталога с 1С, включая тестирование на реальной конфигурации: 14–20 рабочих дней. Свяжитесь с нами для аудита вашей текущей схемы синхронизации. Получите консультацию по настройке обмена данными — оценим объём работ и предложим оптимальное решение.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060