За последний год у меня было десяток проектов, где интеграция 1С с интернет-магазином делалась не для галочки, а потому что менеджер руками переносил по 40-60 заказов в день в учётную систему и регулярно путал остатки. Обмен между сайтом и 1С снимает эту рутину: цены и остатки подтягиваются в магазин автоматически, а заказы падают в 1С без участия человека. Ниже разбираю, как это устроено технически, какие способы обмена подходят под разные платформы и сколько такая настройка стоит на практике.
По теме статьи
Готовое решение
Подарочные сертификаты Тильда без процента с продаж
Покупатель оплачивает сертификат как обычный товар, получает код на почту и гасит его в корзине. Работает на вашем хостинге, без процента с продаж.
от30 000 ₽
Интернет-магазин
Интернет-магазин под ключ
Интернет-магазин под ключ — на Tilda, WordPress + WooCommerce, Next.js Commerce или кастомный бэкенд. Подберу платформу под бюджет, ассортимент и
от80 000 ₽
Как устроен обмен данными между 1С и сайтом
В основе большинства решений лежит формат CommerceML, протокол обмена коммерческой информацией, который 1С понимает «из коробки» ещё с версии 8.1. Каталог, цены и остатки выгружаются из 1С в виде XML-файлов import.xml и offers.xml, сайт их разбирает и обновляет карточки товаров. Обратно, из сайта в 1С, идёт файл orders.xml с новыми заказами и покупателями.
Есть два варианта передачи этих файлов. Файловый обмен: 1С кладёт XML в сетевую папку или на FTP, сайт периодически их забирает. Работает надёжно, но задержка обычно 15-30 минут. HTTP-обмен: тот же CommerceML, но поверх HTTP-запросов, без промежуточной папки, так работает нативный обмен 1С-Битрикса и большинства готовых модулей для WooCommerce.
Для самописного бэкенда и для Tilda в сценариях сверх штатной синхронизации по CommerceML я обычно ухожу от классического CommerceML и поднимаю HTTP-сервис или OData в самой базе 1С:Предприятие 8.3. Это свой REST API поверх учётной системы: сайт дергает конкретные методы и получает только нужные поля, без лишнего веса файлового обмена.
curl -u exchange_user:exchange_pass \
"https://1c.example.ru/base/hs/stock/v1/remains?sku=SKU-10245"
Ответ приходит в JSON с остатком по складам, и уже логика на сайте решает, показывать товар в наличии или нет.
Синхронизация каталога, остатков и цен
Полная выгрузка всего каталога имеет смысл раз в сутки, ночью, когда нагрузка на сервер минимальна. Остатки и цены меняются чаще, поэтому под них делаю частичный, дифференциальный обмен: 1С отдаёт только то, что изменилось с прошлой синхронизации. На среднем магазине в 3-5 тысяч позиций это сокращает время выгрузки с нескольких минут до 10-15 секунд.
Расписание чаще всего строю так: остатки и цены обновляются каждые 15-30 минут через cron или планировщик заданий 1С, а заказы из сайта в 1С уходят почти в реальном времени, по событию создания заказа, без ожидания расписания.
Отдельно слежу за идентификаторами товаров. Если сопоставление между базами идёт по названию, а не по артикулу или GUID, после первой же смены названия в 1С на сайте появляется задвоенная карточка. Поэтому всегда завязываю связку на уникальный код номенклатуры, а не на текст.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Выгрузка заказов из интернет-магазина в 1С
Заказ на сайте создаёт документ в 1С обычно в статусе «Новый» или «Ожидает оплаты». Дальше приходят события, которые меняют статус: оплата через эквайринг, у меня чаще всего это связка T‑Bank и WooCommerce, переводит заказ в «Оплачен», а после передачи в доставку трек-номер и стоимость от СДЭК записываются в карточку заказа отдельными полями.
Важный момент - идемпотентность. Если обмен запускается повторно после сбоя сети, заказ не должен продублироваться в 1С. Решаю это либо через номер заказа сайта как уникальный ключ поиска, либо через отдельное поле «ID заказа на сайте» в справочнике заказов 1С, по которому проверяю, был ли документ уже создан.
Персональные данные покупателей, телефон, адрес, email, в этой цепочке нигде не должны оседать во внешних облачных таблицах вроде Google Sheets, только сама 1С и сервер на площадке в РФ. Это не только вопрос удобства, но и требование 152-ФЗ по хранению персональных данных.
Настройка обмена на популярных платформах
Готовность к обмену у разных движков разная, и от этого сильно меняется объём работы.
1С-Битрикс
Здесь CommerceML встроен и на стороне сайта, и на стороне 1С:Управление торговлей. Обычно моя работа - настроить сопоставление свойств каталога, расписание и фильтры, например не выгружать снятые с продажи позиции, а не писать обмен с нуля.
WordPress и WooCommerce
Нативного обмена нет, но есть плагины уровня WP-CommerceML, которые разбирают те же XML-файлы. В большинстве проектов плагин приходится дорабатывать под конкретную структуру каталога в 1С: свои характеристики, несколько складов, нестандартные единицы измерения.
Tilda и самописные сайты
У Tilda HTTP-обмен CommerceML есть штатно: в разделе «Товары» магазина включается «Синхронизация через CommerceML», 1С:Управление торговлей (10.3.4 и выше) выгружает туда товары, цены и остатки и забирает заказы, склад при этом один, а по CommerceML одновременно подключается либо 1С, либо МойСклад. Обмен через HTTP-сервис 1С и n8n строю сверх этого: когда складов несколько, конфигурация нетиповая или облачная без доступа к узлу обмена, либо данные нужно обогащать. Тогда n8n забирает остатки из 1С по расписанию, собирает из них offers.xml и отдаёт файл в тот же приёмник CommerceML Тильды по стандартному протоколу обмена 1С, а Tilda API для этого не подходит, он работает только на чтение. Если самостоятельно поднимать такую связку некогда, настройку обмена 1С с сайтом можно заказать отдельно.
Ошибки, из-за которых обмен 1С и сайта ломается
На практике причины сбоев почти всегда одни и те же:
- Рассинхронизация остатков при резком всплеске заказов: сайт продал больше, чем реально осталось на складе, потому что обмен ещё не подтянул актуальные цифры
- Смешение CommerceML 2 и 3: готовый плагин ждёт одну версию схемы, 1С выгружает другую, и часть полей, например характеристики товара, теряется
- Таймауты на больших выгрузках: при каталоге от 20-30 тысяч позиций полная синхронизация не укладывается в лимит выполнения скрипта на хостинге, обмен рвётся на середине
- Кодировка windows-1251 вместо utf‑8 в файлах от старых версий 1С: тексты характеристик превращаются в кракозябры на сайте
- Тихие сбои без уведомлений: обмен упал ночью, а заметили это только через два дня по жалобам клиентов на несуществующий товар
Последний пункт закрываю проще всего: ставлю в n8n или в сам скрипт обмена проверку кода ответа и телеграм-бота, обычно на aiogram, который присылает сообщение в рабочий чат при первом же сбое, а не постфактум.
Сколько стоит и сколько занимает интеграция 1С с интернет-магазином
Цена зависит от того, что уже готово на стороне 1С и сайта, и от объёма данных, которые гоняются туда-обратно. Ориентиры по моим проектам:
| Задача | Цена | Срок |
|---|---|---|
| Кастомный скрипт обмена для Tilda (каталог, остатки, заказы, статусы оплаты) | от 40 000 ₽ | 7-10 дней |
| Обмен через n8n без изменения кода сайта | от 25 000 ₽ | 5-7 дней |
| Свой модуль CommerceML на Python (файловый обмен) | от 20 000 ₽ | 5-10 дней |
| Интернет-магазин под ключ с готовой интеграцией 1С | от 80 000 ₽ | от 3 недель |
| Техподдержка обмена (мониторинг, донастройка) | от 15 000 ₽/мес | - |
На рынке за похожую доработку под Tilda или WooCommerce часто просят 60 000-120 000 ₽ у студий, потому что закладывают время на разбор чужой архитектуры 1С с нуля. У меня цена ниже за счёт того, что часть модулей обмена, парсинг CommerceML, шаблон HTTP-сервиса, я переиспользую и адаптирую под конкретную базу, а не пишу заново.
Частые вопросы
Какой формат обмена лучше - CommerceML или свой HTTP-сервис?
Если сайт уже поддерживает CommerceML, как 1С-Битрикс или готовые плагины WooCommerce, использую его, переписывать нет смысла. Свой HTTP-сервис оправдан, когда сайт кастомный или нужны нестандартные поля, которых в CommerceML просто нет.
Можно ли настроить обмен 1С с Tilda?
Да, и коробочное решение есть у самой Tilda: «Синхронизация через CommerceML» в разделе «Товары» для 1С:Управление торговлей. Обмен через HTTP-сервис 1С и n8n собираю, когда штатного не хватает: несколько складов, нетиповая или облачная 1С, обогащение данных; прослойка приводит данные к формату CommerceML и отдаёт их в штатный приёмник Тильды.
Что делать, если после синхронизации задвоились товары?
Почти всегда причина в сопоставлении по названию вместо уникального кода. Проверяю, на каком поле завязан поиск совпадений в скрипте обмена, и переключаю его на артикул или GUID номенклатуры из 1С.
Как часто должны обновляться остатки на сайте?
Для магазина с активными продажами - каждые 15-30 минут. А для заказов в обратную сторону, из сайта в 1С, такая задержка не годится: тут нужна передача сразу по событию, иначе менеджер увидит новый заказ позже клиента, который уже написал в поддержку.