Pugofka Logo
Разработка 7 мин 2026-09-15

Как сделать интеграцию интернет-магазина с 1С/ERP устойчивой

Как сделать интеграцию интернет-магазина с 1С/ERP устойчивой

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

Поэтому хорошая интеграция — это не просто настроенный обмен. Это механизм, который должен стабильно работать при изменениях, нагрузке и отдельных сбоях, а проблемы в нём должны обнаруживаться раньше, чем их заметит покупатель или менеджер.

Сначала определить, какая система за что отвечает

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

Поэтому ещё до разработки нужно определить источник истины для каждого типа данных. Например:

  • номенклатура и артикулы — ERP;
  • остатки — складская или учётная система;
  • базовые и персональные цены — ERP;
  • маркетинговые описания и SEO-поля — CMS;
  • заказы — создаются на сайте и передаются в учётную систему;
  • актуальный статус заказа — возвращается из ERP.

Конкретное распределение может быть другим. Важно не то, где именно хранить каждый объект, а чтобы для него существовал однозначный владелец данных. Он же будет считаться первоисточником и "эталоном" в спорных ситуациях.

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

Не передавать всё каждый раз

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

Для улучшения устойчивости лучше строить обмен так, чтобы системы могли работать с изменениями: передавать только новые или изменённые данные, разбивать большие объёмы на части, использовать очереди и обрабатывать операции независимо друг от друга.

Это снижает нагрузку и одновременно уменьшает последствия сбоя. Если ошибка возникла на одном участке обмена, не приходится запускать весь процесс с самого начала.

Интеграция должна уметь переживать сбои

Сеть может пропасть. ERP может временно не отвечать. Один товар может содержать некорректные данные. Сервер может перезапуститься во время обмена.

Сам факт такого сбоя не означает, что интеграция спроектирована плохо. Проблема начинается, если после него система оказывается в неопределённом состоянии.

Например, сайт отправил заказ в ERP, но не получил подтверждения. Что делать при следующей попытке? Если просто отправить заказ повторно, в учётной системе могут появиться два одинаковых заказа. Если считать первую передачу успешной, заказ может вообще потеряться.

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

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

Ошибка одного объекта не должна останавливать весь обмен

Представим выгрузку из 20 000 товаров. В одном из них отсутствует обязательное поле или передано неожиданное значение.

Плохой сценарий — весь импорт останавливается на 8 347-й позиции. В результате остальные данные не обновляются, хотя проблема относится только к одному товару.

Более устойчивый вариант — зафиксировать ошибочный объект, продолжить обработку остальных данных и отдельно сообщить о проблеме.

То же относится к заказам, остаткам, ценам и другим сущностям. Интеграция должна уметь локализовать ошибку, а не превращать единичную некорректную запись в отказ всей системы.

Нужна не только интеграция, но и контроль её состояния

Фраза «обмен работает автоматически» звучит хорошо до первого случая, когда он автоматически перестаёт работать в пятницу вечером или накануне праздников. Это кошмар работников техподдержки. Если о проблеме становится известно от клиента, который не смог заказать товар, или от менеджера, который не нашёл заказ в 1С, контроль интеграции фактически отсутствует.

Поэтому для важных обменов нужны мониторинг и журналирование. Полезно видеть:

  • когда последний раз успешно прошёл обмен;
  • сколько объектов обработано;
  • какие операции завершились ошибкой;
  • сколько элементов находится в очереди;
  • сколько времени занимает обработка;
  • есть ли повторяющиеся ошибки;
  • когда данные в системах последний раз синхронизировались.

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

Нужно различать техническую и бизнес-ошибку

HTTP 500 или недоступность сервера заметить относительно просто. Гораздо опаснее ситуации, когда технически обмен завершился успешно, но данные оказались неправильными. Например, интеграция получила ответ 200 OK, однако:

  • остаток товара стал отрицательным;
  • цена обнулилась;
  • из каталога неожиданно исчезли тысячи позиций;
  • заказ получил неизвестный статус;
  • количество обновлённых товаров резко отличается от обычного;
  • новая выгрузка содержит в несколько раз меньше данных, чем предыдущая.

Поэтому мониторить нужно не только доступность API и наличие технических ошибок, но и аномалии в самих данных.

Иногда простая бизнес-проверка вроде «обычно обновляется 100 000 товаров, а сегодня пришло 4 000» позволяет обнаружить проблему быстрее сложной системы технического мониторинга.

Формат данных должен быть договорённостью, а не предположением

Интеграция связывает системы, которые развиваются независимо. В ERP появляется новое поле, разработчик меняет формат статуса, в CMS обновляется модуль — и обмен, который несколько лет работал без вмешательства, внезапно начинает вести себя иначе.

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

Если используется API, изменения его структуры желательно версионировать. Новая версия одной системы не должна неожиданно ломать другую.

Для крупных проектов такие договорённости становятся частью документации интеграционного контура, а не знаниями конкретного разработчика.

Масштабирование нужно проверять заранее

Интеграция может прекрасно работать при 500 заказах и начать задерживаться при 5 000. Каталог из 50 000 товаров обновляется за несколько минут, а после роста до миллиона позиций обмен уже не успевает завершиться до следующего запуска.

Поэтому производительность нужно оценивать не только на сегодняшних объёмах. Стоит заранее понимать:

  • сколько товаров и предложений будет передаваться;
  • как часто меняются цены и остатки;
  • сколько заказов приходится на обычный и пиковый день;
  • насколько быстро данные должны появляться во второй системе;
  • какой рост бизнеса ожидается;
  • что произойдёт во время сезонной нагрузки.

Это влияет на выбор архитектуры: периодический пакетный обмен, API-запросы, очереди сообщений или комбинацию нескольких механизмов.

Интеграцию нужно тестировать не только в идеальных условиях

Проверить успешную передачу товара и заказа недостаточно. Нужно посмотреть, что произойдёт в сценариях, которые обычно считаются исключениями.

Что будет, если ERP недоступна десять минут? Если один запрос отправится дважды? Если во время большого импорта оборвётся соединение? Если заказ изменится одновременно на сайте и в учётной системе? Если в обязательном поле появится неожиданное значение?

Такие тесты позволяют найти проблемы до того, как их создадут реальные пользователи и реальные данные. Особенно важны проверки после обновлений CMS, ERP, модулей обмена и собственного кода интеграции.

Устойчивость — это возможность понять и исправить проблему

Даже хорошо спроектированная интеграция когда-нибудь столкнётся с ошибкой. Поэтому важный критерий качества — не обещание «она никогда не сломается», а то, насколько быстро команда сможет ответить на три вопроса:

  • Что произошло?
  • Какие данные затронуты?
  • Как безопасно восстановить работу?

Если для этого приходится вручную сравнивать базы, искать потерянные заказы и разбираться в нескольких гигабайтах технических логов, интеграцию трудно назвать устойчивой. Хорошая архитектура оставляет след каждой важной операции, позволяет повторно обработать проблемные данные и показывает состояние обмена без длительного расследования.

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