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

Обмен заказами с 1С: чтобы статусы не расходились с сайтом

Обмен заказами с 1С у многих сводится к выгрузке заказов в учётную систему раз в сутки по расписанию, и первый же клиент, который спрашивает «где мой заказ», видит в личном кабинете статус «в обработке», хотя на складе его уже упаковали и отдали в СДЭК три часа назад. Я настраивал такие интеграции и для Tilda-магазинов, и для WooCommerce на T‑Bank-эквайринге, и почти всегда причина расхождения одна: сайт и 1С обмениваются данными о заказе, но не договорились, кто и когда меняет статус.

Почему статусы заказа на сайте и в 1С расходятся

Типовая картина: заказ создаётся на сайте, попадает в 1С через выгрузку или вручную менеджером, дальше кладовщик меняет статус внутри 1С на «собран» и «отгружен», а сайт об этом не знает, потому что обмен настроен только в одну сторону, от 1С к сайту, или вообще только для номенклатуры и остатков, а не для статусов заказов. Обратная ситуация тоже частая: клиент оплачивает картой через T‑Bank, вебхук об оплате приходит на сайт, а в 1С заказ висит неоплаченным до следующей выгрузки по расписанию.

Вторая причина, менее очевидная, это отсутствие сквозного идентификатора заказа. Если на сайте заказ №4821, а в 1С ему присвоили внутренний номер СИТ-000482 без явной связи между ними, любая автоматизация статусов превращается в сопоставление по имени клиента и сумме, что регулярно даёт коллизии при повторных заказах в один день.

Как устроен обмен заказами с 1С: CommerceML, HTTP-сервисы и вебхуки

Классический вариант для 1С-Битрикс и похожих CMS - это обмен по стандарту CommerceML: 1С формирует XML-файлы с заказами и статусами, сайт их забирает по расписанию, обычно раз в 10-15 минут через cron. Схема рабочая, но с задержкой, и для магазина с оплатой на сайте эта задержка означает, что клиент десять минут видит неверный статус оплаты.

Более гибкий способ - открыть в 1С собственный HTTP-сервис на встроенном сервере 1С и обмениваться с ним заказами и статусами по REST в реальном времени. Сайт или промежуточный сервер отправляет запрос сразу при смене статуса, а не ждёт следующего цикла обмена. Пример обращения к такому сервису при смене статуса на «отгружен»:

curl -X POST https://1c.example.ru/exchange/hs/orders/status \
  -u api_user:api_pass \
  -H "Content-Type: application/json" \
  -d '{"order_id": "4821", "status_1c": "Отгружен", "date": "2026-08-30T14:20:00"}'

У Tilda в этой схеме особое место. Штатная синхронизация через CommerceML в разделе «Товары» умеет передавать в 1С сами заказы: как только покупатель оформляет заказ на сайте, он автоматически уходит в 1С:Управление торговлей без единой строчки кода. Но справка Тильды описывает только эту передачу, заказ ушёл в 1С, и ничего не говорит про обратный канал: как статус, который кладовщик проставил внутри 1С, должен вернуться на сайт и показаться покупателю в личном кабинете. Такого канала в интерфейсе Тильды нет, поэтому для полноценного маппинга статусов туда и обратно я ставлю прослойку, которая слушает изменения в 1С и обновляет статус на сайте отдельным вебхуком.

Способ обмена Скорость обновления статуса Когда использовать
CommerceML (XML) Раз в 10-15 минут по расписанию 1С-Битрикс, большие каталоги, обмен уже настроен из коробки
HTTP-сервис 1С В реальном времени, по запросу WooCommerce, кастомные сайты, нужна мгновенная синхронизация оплаты и сборки
Прослойка на n8n и вебхуки От нескольких секунд до минуты Tilda и другие конструкторы - когда нужен возврат статуса из 1С на сайт, версия 1С вне протестированного Тильдой диапазона или слот CommerceML занят другим сервисом

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

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

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

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

Маппинг статусов: единая модель для сайта и 1С

Сайт и 1С почти никогда не используют одинаковый набор статусов, и попытка синхронизировать их напрямую по названию заканчивается тем, что в 1С заказ «На сборке», а на сайте он всё ещё «Оплачен», потому что такого статуса в справочнике сайта просто нет. Перед настройкой обмена я всегда свожу статусы в одну таблицу и фиксирую, какая система является источником для каждого перехода.

Статус на сайте Статус в 1С Кто инициирует переход
Новый Новый Сайт при оформлении заказа
Оплачен Оплата получена Вебхук от T‑Bank, статус меняется на сайте и в 1С одновременно
В сборке На сборке Кладовщик в 1С, сайт подтягивает статус в течение минуты
Передан в доставку Отгружен 1С создаёт заказ в СДЭК и передаёт трек-номер на сайт
Доставлен Закрыт Вебхук от СДЭК, 1С обновляется автоматически
Отменён Аннулирован Любая сторона, вторая обязана принять и не откатывать статус назад

Последняя строка на практике самая проблемная: если менеджер отменяет заказ в 1С, а сайт продолжает слать клиенту письма про сборку, доверие к магазину падает быстрее, чем от любой другой ошибки в интерфейсе.

Обмен заказами с 1С на Tilda и WooCommerce: разница в подходах

На WooCommerce задача обычно решается через готовые модули обмена по CommerceML или через собственный REST-коннектор к HTTP-сервису 1С, и в этом случае можно завязать смену статуса заказа WooCommerce на хук woocommerce_order_status_changed и отправлять его сразу в 1С, не дожидаясь расписания. Оплату через T‑Bank в такой схеме проще всего заводить отдельным событием: вебхук об успешном платеже сразу меняет статус в WooCommerce, а тот уже триггерит отправку в 1С.

На Tilda штатный обмен заказами с 1С есть, но он рассчитан на конкретный набор условий: модуль «Каталог товаров» подключён, версия 1С попадает в диапазон, который Тильда заявляет протестированным (1С:Управление торговлей 10.3.4 и выше, версии после 11.2 не тестировались), и слот CommerceML не занят МойСкладом, подключить оба сервиса одновременно нельзя. Если все условия сходятся, заказы из Tilda уходят в 1С сами. Если нет, или если нужна как раз обратная синхронизация статуса из 1С на сайт, ставлю серверный скрипт, который слушает вебхук Tilda при создании заказа, приводит поля к формату 1С и дальше работает с HTTP-сервисом 1С, плюс отдельный канал, который читает статус в 1С и обновляет его на сайте.

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

Автоматизация синхронизации статусов через n8n

Для прослойки между сайтом и 1С я обычно беру n8n, а не пишу отдельный сервис с нуля: вебхук от сайта, от T‑Bank или от СДЭК приходит на входную точку n8n, нода HTTP Request обращается к HTTP-сервису 1С, а результат логируется и при необходимости уходит уведомлением менеджеру. Такой workflow можно собрать за 1-2 дня, если формат данных в 1С уже описан, и он не требует держать отдельный сервер под кастомный код.

Важная деталь, которую часто упускают: если 1С временно недоступна, например идёт регламентное обслуживание базы, вебхук не должен просто теряться. В n8n для этого ставится нода с повторными попытками и очередью, чтобы событие о смене статуса подождало и ушло, как только 1С снова ответит, а не потерялось безвозвратно.

Уведомления о смене статуса удобно заводить не только на почту, но и в Telegram: у меня в паре проектов уведомления менеджеру о новом заказе или об ошибке обмена шлёт aiogram-бот, а не общий чат, потому что так проще фильтровать сообщения по типу события и не пропускать сбои обмена среди обычной переписки. Логи обмена и данные клиентов при этом храню на сервере в РФ, а не во внешних no-code таблицах, это касается персональных данных заказчиков напрямую.

Ошибки, из-за которых обмен заказами с 1С ломается

За несколько внедрений я стабильно вижу одни и те же промахи, которые потом всплывают уже на живых заказах:

  • Обмен раз в сутки или по ночному регламенту вместо обмена в реальном времени, из-за чего статус на сайте всегда врёт в течение дня
  • Нет сквозного идентификатора заказа, сопоставление идёт по имени и сумме и путается при повторных заказах
  • Обмен настроен только в одну сторону, обычно из 1С на сайт, и оплата или отмена с сайта не долетает обратно
  • Время сервера сайта и сервера 1С расходится без единого часового пояса, и статусы применяются не в том порядке
  • Повторный вебхук от T‑Bank или СДЭК обрабатывается как новое событие, и статус заказа откатывается назад
  • Частичные отмены и возвраты вообще не описаны в маппинге статусов и обрабатываются вручную

Последний пункт закрывает идемпотентность: каждое входящее событие должно проверяться по идентификатору и не применяться повторно, иначе через пару месяцев эксплуатации статусы начнут скакать сами по себе без видимой причины.

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

Сколько занимает настройка обмена заказами с 1С для интернет-магазина?

Если 1С уже настроена и есть доступ к базе, прослойка на n8n с обменом статусами через HTTP-сервис собирается за 3-5 рабочих дней. Если нужно ещё подключать СДЭК, эквайринг и продумывать полный маппинг статусов с нуля, срок растягивается до 2-3 недель.

Можно ли синхронизировать статусы в реальном времени, а не по расписанию?

Можно, если отказаться от классического CommerceML-обмена по cron в пользу HTTP-сервиса 1С и вебхуков с сайта. Тогда статус меняется за секунды, а не ждёт следующего цикла выгрузки.

Что делать, если 1С временно недоступна?

Входящие события не должны теряться. В n8n или любом другом обработчике ставится очередь с повторными попытками, событие ждёт восстановления связи и применяется, как только 1С снова отвечает, без ручного восстановления пропущенных заказов.

Нужно ли менять типовую конфигурацию 1С для обмена?

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

Есть задача?

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

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

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