Интеграции и учёт · 6 минут
Интеграция с 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» лучше, чем молчаливое устаревшее значение.