Все материалы

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

Инженерный разбор интеграции с 1С: источник истины, обмен каталогом и заказами, идемпотентность, очереди, мониторинг и безопасный запуск.

Сначала определите источник истины

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

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

Обмен должен переживать повтор и паузу

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

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

Защитите боевую базу и окно продаж

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

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

Запускайте интеграцию по контуру

Начните с одного типа объекта и ограниченной группы заказов. Сверьте количество записей, суммы, статусы и повторные операции до включения всего каталога.

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

Технический способ выбирают после контракта

OData, HTTP-сервисы, EnterpriseData, CommerceML или шина — это инструменты, а не архитектура сами по себе. Выбор зависит от объёма, допустимой задержки, версии 1С, режима работы и ответственности за данные.

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

Сверка должна быть частью продукта

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

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

Безопасность включает процесс изменений

Ограничьте доступ к endpoint, используйте отдельные учётные данные и проверяйте подписи webhook. Не передавайте лишние персональные поля и не храните секреты в логах.

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

Критерий успеха — не нулевая ошибка

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

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

Сначала уточните контур 1С и режим эксплуатации

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

Зафиксируйте, кто отвечает за конфигурацию и релизы 1С. Без владельца с той стороны невозможно гарантировать совместимость контракта.

Разделяйте онлайн-операции и регламентные обмены

Цену и доступность товара можно обновлять очередью, а подтверждение заказа иногда нужно получить сразу. Для каждого объекта определите допустимую задержку, повтор и способ сверки.

Так архитектура не пытается сделать весь обмен синхронным и сохраняет устойчивость при окне обслуживания 1С.

Сделайте словарь объектов до первого endpoint

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

Так команда не пытается сопоставлять похожие названия на лету. Словарь становится общей точкой для владельца 1С, backend и оператора поддержки.

Выберите направление записи для каждого поля

В одних полях 1С является источником истины, в других — сайт или CRM. Если обе системы могут менять одно значение, задайте приоритет, версию и правило разрешения конфликта.

Отдельно решите, что происходит при удалении или архивировании. «Не передавать удаление» часто оставляет в витрине устаревший товар или активного контрагента.

Тестовый контур должен повторять опасные данные

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

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

Запуск планируйте как обратимую операцию

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

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

Учитывайте обновления конфигурации 1С

Обмен может работать месяцами и сломаться после обновления конфигурации или расширения. Добавьте проверку контракта в регламент релиза 1С и храните тестовые данные для повторной проверки. Совместимость — это процесс, а не разовая настройка endpoint.

Не превращайте 1С в единственный журнал ошибок

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

Согласуйте окно консистентности

Для остатков может быть допустима задержка в несколько минут, для оплаты — нет. Запишите это в продуктовых требованиях и показывайте пользователю честный статус. Явное обещание «обновлено в 12:04» лучше, чем молчаливое устаревшее значение.