WordPress · 7 мин чтения

Интернет-магазин с синхронизацией 1С: как настроить обмен данными

Интернет-магазин с синхронизацией 1С - это когда каталог, остатки, цены и заказы гоняются между сайтом и учётной системой без ручного экспорта в Excel и импорта обратно. Я настраивал такие связки на Tilda, WooCommerce и кастомных SPA-магазинах, и почти везде принцип общий: 1С отдаёт номенклатуру и остатки, сайт отдаёт заказы и статусы оплаты, а где-то между ними - либо штатный протокол обмена, либо своя прослойка на API.

Какие способы обмена данными между сайтом и 1С существуют

Вариантов на практике три, и выбор зависит от того, на чём сделан магазин.

  • Штатный обмен CommerceML - модуль есть в 1С:Управление торговлей, 1С:Розница, 1С:УНФ. Работает по протоколу CommerceML 2.х или 3.х, выгружает XML-файлы с товарами, ценами, остатками и принимает заказы в обратную сторону.
  • REST/HTTP-сервисы 1С - публикуются через 1С:Предприятие в режиме веб-сервиса, магазин обращается к ним через HTTP-запросы, можно синхронизировать в реальном времени, а не по расписанию.
  • Прослойка через n8n или собственный скрипт - актуально, когда 1С стоит на сервере без публичного доступа или когда нужно свести несколько систем сразу (1С, сайт, СДЭК, эквайринг).

Для Tilda и Битрикс24-магазинов чаще беру первый вариант - он предсказуем и не требует программиста 1С на каждый чих. Для WordPress и кастомных магазинов на React или Vue почти всегда выбираю HTTP-сервис, потому что там проще встроить обмен в существующую бэкенд-логику.

Синхронизация каталога и остатков: CommerceML и не только

CommerceML 2.х выгружает данные тремя типами файлов: import.xml (номенклатура, характеристики, картинки), offers.xml (цены и остатки по складам) и orders.xml (заказы обратно в 1С). Файлы кладутся в папку на сайте по расписанию - обычно раз в 15-30 минут для остатков и раз в сутки для полного каталога с картинками, потому что гонять фотографии каждые 15 минут бессмысленно и грузит сервер.

На практике самое узкое место - не сам протокол, а объём выгрузки. Если в 1С 20 000 товаров с характеристиками (цвет, размер, модификация), полная выгрузка может идти 10-15 минут и класть сайт по нагрузке на процессор в момент импорта. Поэтому я всегда развожу полную выгрузку каталога и частичную выгрузку только остатков - она весит в разы меньше и гоняется чаще.

Пример cron-задачи для регулярного запуска обработчика обмена на сервере с WordPress:

*/20 * * * * curl -s "https://shop.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=offers" > /var/log/1c_sync.log 2>&1

Если магазин собран без штатного модуля обмена (например, самописный каталог на Laravel), под CommerceML пишу отдельный обработчик, который парсит XML и складывает данные в базу магазина через транзакцию - чтобы при обрыве связи с 1С каталог не остался в наполовину обновлённом состоянии.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Как настроить передачу заказов из магазина в 1С

Обратный поток - заказы из магазина в 1С - устроен проще по данным, но капризнее по логике. Заказ должен прийти в 1С со статусом, суммой, составом, данными покупателя и, если есть предоплата через эквайринг, с отметкой об оплате.

Я обычно завожу такую схему:

  1. Покупатель оформляет заказ на сайте, статус “Новый”.
  2. При успешной оплате через Т‑Банк или ЮKassa сайт меняет статус на “Оплачен” по вебхуку от платёжного шлюза.
  3. Раз в 10-15 минут (или мгновенно через HTTP-сервис) заказ выгружается в 1С с текущим статусом.
  4. Менеджер в 1С резервирует товар, передаёт в СДЭК или другую службу доставки, статус долета обратно на сайт.

Отдельная головная боль - синхронизация статусов доставки. Если магазин интегрирован со СДЭК напрямую (а не через 1С), возникает развилка: кто источник правды по статусу “Доставлено” - сайт или учётка. Я в таких случаях делаю 1С источником правды по товарным остаткам и оплате, а статус доставки тяну напрямую из СДЭК API на сайт, без прогона через 1С - так меньше задержка для клиента в личном кабинете.

Когда обмен идёт через HTTP-сервис 1С

Здесь заказ уходит не файлом, а POST-запросом сразу при оформлении. Это удобно, если у вас интернет-магазин с высокой частотой заказов и ждать 15-минутного окна недопустимо - например, товар с ограниченным остатком, который надо зарезервировать в 1С немедленно, иначе его продадут дважды.

WooCommerce и 1С: практическая связка

На WooCommerce обмен с 1С почти всегда собираю через готовые плагины (1C-Bitrix Commerce, WP All Import с расширением 1С-Обмен) плюс доработки под конкретную структуру номенклатуры клиента - стандартные плагины редко покрывают нетиповые характеристики товаров без правок.

Типовые проблемы, с которыми сталкивался:

Проблема Причина Решение
Дублируются товары после каждого обмена 1С меняет GUID при пересоздании номенклатуры Матчинг по артикулу, а не только по GUID
Остатки не обновляются на сайте Кэш WooCommerce/WP-Rocket не сбрасывается после импорта Принудительный flush кэша в конце скрипта обмена
Заказы зависают в статусе “Новый” в 1С Формат orders.xml не совпадает с версией CommerceML в 1С Синхронизировать версию протокола на обеих сторонах
Обмен падает при 5000+ товарах Таймаут PHP на импорт большого XML Разбивка выгрузки на пакеты по 500‑1000 позиций

Если у клиента магазин собран на связке Tilda + отдельный бэкенд, штатного модуля обмена нет вообще, и я пишу интеграцию с нуля под конкретный набор сущностей - обычно это уже не “доработка”, а полноценная интеграция с CRM, эквайрингом и 1С, для готовых заготовок под такие сценарии у меня есть готовые скрипты обмена с 1С, которые ускоряют старт вместо разработки с чистого листа.

Частые проблемы при обмене данными с 1С и как их избежать

За несколько лет таких интеграций накопился список того, что ломается чаще всего.

Расхождение остатков между складами. Если в 1С несколько складов, а на сайте один общий остаток, легко продать товар, которого физически нет в нужном месте. Решение - либо агрегировать остатки по правилу приоритета складов, либо показывать доступность по регионам отдельно.

Обрыв обмена без уведомления. Файловый обмен по CommerceML не всегда падает с явной ошибкой - он может просто перестать обновляться, и через пару дней на сайте продаются товары, которых уже нет в наличии. Я обычно ставлю мониторинг: если файл обмена не обновлялся дольше 2 часов, скрипт шлёт уведомление в Telegram через бота на aiogram - дешевле, чем терять заказы на несуществующий товар.

Дублирование заказов при повторной отправке. Если 1С не подтвердила приём заказа (нет ответа от веб-сервиса), сайт может попытаться отправить его повторно. Нужна идемпотентность - заказ передаётся с уникальным ID, и 1С игнорирует повтор с тем же идентификатором.

Разные единицы измерения и округления цен. Особенно у B2B-магазинов, где 1С считает в упаковках, а сайт - в штуках. Это лечится один раз на этапе настройки маппинга, но если пропустить, всплывает через месяц на живых заказах.

Сколько стоит настройка синхронизации интернет-магазина с 1С

Цена зависит от того, что уже есть у клиента и что нужно построить с нуля.

Штатная настройка CommerceML-обмена для готового магазина на Tilda со скриптовой интеграцией - от 40 000 ₽, это уже комплексная работа с эквайрингом, СДЭК и учёткой, а не косметическая правка. Интернет-магазин под ключ с синхронизацией остатков и заказов из коробки - от 80 000 ₽. Если нужна автоматизация обмена через n8n между несколькими сервисами (1С, сайт, склад, курьерка) без прямой интеграции - от 25 000 ₽ за workflow. Дальнейшее сопровождение обмена (мониторинг, правки при изменении структуры каталога в 1С) обычно беру в рамках техподдержки - от 15 000 ₽/мес.

На рынке у студий похожая интеграция 1С с сайтом стоит в среднем от 60 000 до 150 000 ₽ в зависимости от сложности каталога и версии 1С - это ориентир по рынку, не моя цена, но полезно для сравнения при выборе исполнителя.

Перед стартом всегда прошу доступ к тестовой базе 1С и выгрузку примера XML с реальными товарами - это экономит неделю на этапе оценки, потому что нетиповые характеристики номенклатуры вскрываются именно на этом шаге, а не после старта работ.

Интернет-магазин под ключ

Интернет-магазин

от 80 000 ₽

Подробнее →

Частые вопросы

Можно ли синхронизировать интернет-магазин с 1С без программиста?

Если магазин на 1С-Битрикс с типовым модулем обмена и структура каталога в 1С стандартная, базовую настройку можно сделать по документации самостоятельно. Как только появляются нетиповые характеристики, несколько складов или свои статусы заказов - без доработки скриптов обмена не обойтись.

Как часто обновляются остатки при синхронизации с 1С?

Обычно ставлю интервал 15-30 минут для остатков через файловый обмен CommerceML. Если нужна синхронизация в реальном времени - например, для товаров с единичным остатком - использую HTTP-сервис 1С вместо файлового обмена, тогда резерв происходит мгновенно при оформлении заказа.

Подходит ли CommerceML для WooCommerce и других не-1С-Битрикс движков?

Да, протокол не привязан к конкретной CMS, важно только, чтобы на стороне сайта был обработчик, который умеет принимать и парсить эти XML-файлы. Для WooCommerce такие обработчики есть в виде плагинов, но под нетиповые сценарии их почти всегда приходится дорабатывать.

Что делать, если 1С стоит локально и не имеет выхода в интернет?

Здесь без файлового обмена не обойтись - 1С выгружает XML в локальную папку, а отдельный агент на компьютере с доступом к 1С синхронизирует эту папку с сайтом по FTP или через промежуточный сервис вроде n8n. Прямой HTTP-сервис в этом случае не годится, потому что база физически недоступна снаружи.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно