Интернет-магазин с синхронизацией 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С со статусом, суммой, составом, данными покупателя и, если есть предоплата через эквайринг, с отметкой об оплате.
Я обычно завожу такую схему:
- Покупатель оформляет заказ на сайте, статус “Новый”.
- При успешной оплате через Т‑Банк или ЮKassa сайт меняет статус на “Оплачен” по вебхуку от платёжного шлюза.
- Раз в 10-15 минут (или мгновенно через HTTP-сервис) заказ выгружается в 1С с текущим статусом.
- Менеджер в 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-сервис в этом случае не годится, потому что база физически недоступна снаружи.