Вебформат

Главная/Как мы построили обмен с 1С/Технический разбор

Технический разборГлава 6 из 87 мин

Поведение обмена при сбоях

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

Поведение при сбоях
Поведение при сбоях

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

Принцип

Обмен построен на трёх правилах:

  • 01Ни один сбой не приводит к потере данных.
  • 02Восстановление происходит автоматически, без участия человека.
  • 03Если вмешательство всё же нужно, проблема видна администратору, а не обнаруживается по звонку клиента.

Ниже - шесть типовых сценариев и поведение обмена в каждом из них.

Сценарий 1. Сайт недоступен, 1С не может передать данные

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

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

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

Простой любой длительности не требует ручного вмешательства.

Сценарий 2. Остановлен сервис синхронизации

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

Приём выгрузок выполняет сайт, а не сервис синхронизации. Поэтому для 1С ничего не меняется: выгрузки принимаются и накапливаются в очереди со статусом "ожидает обработки".

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

Сценарий 3. Сбой посреди обработки выгрузки

Сбой посреди обработки выгрузки
Обработчик очереди
Взял выгрузку в работу, записал часть данных
Работа прервана: сбой или перезапуск сервера
отметка "обработана" ставится только после завершения
Журнал обмена
Статус выгрузки не изменился - она по-прежнему "ожидает обработки"
через несколько секунд
Обработчик очереди
Снова берёт выгрузку в работу - данные записываются заново
Повтор безопасен: каждая запись привязана к своему коду из 1С - система обновляет её, а не добавляет вторую такую же
обработка дошла до конца
Журнал обмена
Отметка "обработана" - без дубликатов и потерь
Итог: восстановление происходит само, без дубликатов и потерь. Две обработки одновременно исключены - работает только один обработчик.

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

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

Сценарий 4. Получена только часть большой выгрузки

Получена только часть большой выгрузки
1С:ERP
Передаёт большую выгрузку из 12 частей
Части 1-7 приняты, на части 8 связь оборвалась
проверка очереди
Обработчик очереди
Собраны не все части - выгрузка ждёт, в работу не идёт
Обработать неполную выгрузку - значит показать покупателю каталог, из которого пропала половина товаров
7 из 12
связь восстановилась
1С:ERP
Передаёт недостающие части 8-12
очередная проверка очереди
Обработчик очереди
Выгрузка собрана целиком и идёт в работу
12 из 12
Итог: каталог обновляется только целиком. Незавершённая выгрузка просто ждёт свои части.

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

Каталог, собранный из половины выгрузки, невозможен по самому устройству обмена.

Сценарий 5. Внутри выгрузки встретились ошибочные записи

Внутри выгрузки встретились ошибочные записи
Выгрузка из 1С
записей в одной выгрузке
В трёх записях ошибка: цена указана для товара, которого нет в каталоге
250 000
одна плохая строка не останавливает выгрузку
Обработчик очереди
Ошибочные записи попадают в протокол
Остальные 249 997 обрабатываются дальше
итог фиксируется в журнале обмена
Отметка "обработана, есть замечания"
Плюс протокол с перечнем ошибок
журнал обмена в панели управления сайтом
Администратор магазина
Видит, какая выгрузка прошла, сколько в ней ошибок и какие именно
Итог: проблема не остаётся незамеченной. Причина ошибок видна сразу, а после исправления данных в 1С выгрузку можно обработать повторно.

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

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

Сценарий 6. 1С была недоступна и не узнала о заказе

1С была недоступна и не узнала о заказе
Покупатель
Оформляет заказ на сайте
заказ сохранён на сайте
Реестр пометок "что передать в 1С"
Пометка "заказ не передан" - это запись в базе данных сайта
Уведомление в 1С не дошло: 1С недоступна
1С снова работает
1С:ERP
Плановый опрос: "что ещё не передано?"
Получает список непереданных заказов и заявок
Забирает каждый заказ целиком
заказы переданы
Реестр пометок
Пометки сняты - непереданного не осталось
Итог: заказ не может потеряться между системами. Даже если уведомления не будет вовсе, 1С заберёт заказ плановым опросом.

Уведомление о новом заказе лишь ускоряет передачу. Гарантия - реестр пометок: пока 1С не забрала заказ, он числится непереданным.

Вернувшись в работу, 1С запрашивает список непереданного и забирает всё разом. Заказ не может потеряться между системами, даже если уведомление не дойдёт вовсе.

Сводная таблица

Что сломалосьЧто происходит с даннымиЧто нужно сделать людям
Сайт недоступенОстаются в 1С, передаются повторноНичего
Сервис синхронизации остановленНакапливаются в очереди до запускаНичего
Сбой посреди обработкиВыгрузка обрабатывается зановоНичего
Получена часть выгрузкиВыгрузка ждёт остальные частиНичего
Ошибочные записи в выгрузкеОстальные записи обработаны, ошибки в протоколеИсправить данные в 1С
1С недоступнаЗаказы ждут в реестре пометокНичего

Обзорная версия - статья про обмен целиком, весь проект - кейс B2B-платформы.

Нужен такой же обмен с вашей 1С?

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