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

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

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

Почему поломку почти всегда замечает покупатель

В связке магазина и учёта три звена и четыре стыка. Учётная система формирует данные, шлюз обмена их передаёт, сайт принимает и показывает. Стыки — выход из учёта, канал передачи, приём на стороне сайта и отображение на витрине. Ошибка на любом из четырёх выглядит с витрины одинаково: «на сайте не то, что в учёте». Именно поэтому разбор без журналов превращается в спор между двумя подрядчиками, каждый из которых честно показывает, что у него всё хорошо.

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

Что это значитСигнал присутствия

Отдельная проверка, которая раз в интервал спрашивает не «были ли ошибки», а «когда обмен последний раз отработал успешно». Если ответ старше порога, уходит алерт. Это единственный механизм, который ловит поломку «ничего не происходит», и он же — самый дешёвый в связке: 4–6 часов работы.

карта связейoshibki-obmena-magazina-i-ucheta--01
Схема связки: учёт, шлюз обмена и сайт с четырьмя подписанными стыками между ними

Горизонтальная карта из трёх блоков: «Учётная система» слева, «Шлюз обмена» в центре, «Сайт» справа. Между ними и внутри крайних блоков подписаны четыре стыка с номерами: 1 «Выход из учёта — что выгружено», 2 «Канал — дошло ли», 3 «Приём на сайте — что записано», 4 «Витрина — что показано». Под каждым стыком мелкая подпись, чем он доказывается: «журнал выгрузки», «коды ответов и тайминги», «журнал приёма», «карточка товара». Внизу общая подпись: «С витрины все четыре ошибки выглядят одинаково». Чертёжная манера, надписи по-русски.

Четыре стыка — четыре разные зоны ответственности, и с витрины они выглядят одинаково

Четыре поломки, которые видно на витрине

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

  1. 1
    1. Рассинхрон артикулов: в каталоге две карточки одного товара

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

  2. 2
    2. Остаток без вычета резерва: продаём то, что уже обещано

    Симптом: доля отмен «нет в наличии» выше 2 %, и отмены концентрируются на ходовых позициях. Причина: на витрину уезжает физический остаток склада, а не доступный — не вычитаются неотгруженные заказы. Проверка: возьмите позицию с расхождением и сравните три числа — физический остаток в учёте, количество в неотгруженных заказах по ней и цифру на сайте. Если сайт равен физическому остатку, вопрос закрыт: лечится формула расчёта, а не частота обмена. Подробно эта развилка разобрана в статье про обмен остатками и ценами с сайтом.

  3. 3
    3. Цена без указания вида: витрина торгует не по той цене

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

  4. 4
    4. Кодировка и переименования: крякозябры в названиях, товары в «Без группы»

    Симптом: «Кружка Ø90» превращается в «Кружка ?90», часть товаров после очередной сессии оказывается в категории «Без группы» или в новой ветке-дубле. Причина: разные кодировки на стыке выгрузки и приёма либо переименование группы в учёте, которое на сайте создало новую категорию вместо переноса товаров. Проверка: отсортируйте каталог по дате изменения и просмотрите 20 последних карточек. И то и другое видно сразу, а после переименования групп в учёте такую проверку стоит делать всегда.

Четыре поломки, которые не видно ниоткуда

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

  1. 1
    5. Обмен встал молча

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

  2. 2
    6. Задвоенные заказы

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

  3. 3
    7. Обмен работал во время инвентаризации

    Симптом: в день пересчёта витрина показывала нули или странно большие остатки, а через сутки всё нормализовалось, и восстановить картину уже нельзя. Причина: обмен исправно передавал остатки, пока учётная система была временно неправа. Проверка: спросите у склада даты последних пересчётов и наложите их на график отмен «нет в наличии» по дням. Совпадение пиков — диагноз. Лечится кнопкой паузы обмена в интерфейсе, а не звонком подрядчику в выходной.

  4. 4
    8. Журнала обмена нет вообще

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

Инвентаризация и полная выгрузка — две операции, которые нельзя совмещать

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

сравнениеoshibki-obmena-magazina-i-ucheta--02
Две колонки поломок обмена: четыре видимые на витрине и четыре без внешних признаков

Сравнение в две колонки. Левая «Видно на витрине»: «дубли карточек», «остаток без вычета резерва», «не тот вид цены», «кодировка и переименование групп», под каждым мелко «проверка: 10 минут». Правая «Не видно ниоткуда»: «обмен встал молча», «задвоенные заказы», «выгрузка во время инвентаризации», «нет журнала», под каждым мелко «обнаруживает датчик или покупатель». Внизу общая подпись: «Из восьми поломок пять не попадают в журнал ошибок». Чертёжная манера, все надписи по-русски.

Половина поломок обнаруживается глазами, вторая половина — только датчиком

Кто виноват на стыке: сайт, учёт или канал

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

Что наблюдаемЧья зона по умолчаниюЧем закрывается спор
Данные вышли из учёта неверными: не тот вид цены, физический остаток вместо доступногоСторона учётной системыФайл или тело выгрузки за конкретную сессию, сохранённые в журнале
Из учёта вышло верное, на витрине неверноеСторона сайтаТело принятого запроса в журнале приёма и запись о результате обработки
Выгрузка не запускалась вообщеСторона учётной системы и администратор сервераОтметка о запуске регламентного задания и его расписание
Запрос ушёл, ответа нет или он пришёл слишком поздноКанал: сеть, шлюз, таймаутыКоды ответов и время каждой попытки за сутки
Обе стороны показывают, что у них всё в порядкеЗона не определена — значит, нет журналаПункт договора о журналировании; до этого спор неразрешим

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

Обмен без журнала не сломан и не исправен. Он в третьем состоянии: о нём нельзя ничего доказать.

Минимальный мониторинг: четыре метрики и правило алерта

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

МетрикаНорма для магазина на 60 заказов в суткиПорог алерта
Время с последней успешной сессии обменаДо 15 минут45 минут — три пропущенных цикла подряд
Доля позиций с расхождением остатка за суткиДо 0,4 % каталога1 % каталога или рост три дня подряд
Доля заказов, не доехавших в учёт0 %Любой заказ старше 60 минут без документа в учёте
Длина очереди необработанных сообщений0–5 сообщений50 сообщений или рост на трёх замерах подряд

Правило алерта важнее самих порогов: письмо или сообщение уходит владельцу и подрядчику одновременно. Мониторинг, который видит только подрядчик, защищает подрядчика, а не магазин. Второе правило — алерт должен содержать не «ошибка обмена», а конкретное число: «последняя успешная сессия 47 минут назад при пороге 45». По такому тексту дежурный решает, будить ли программиста, за пять секунд.

этапыoshibki-obmena-magazina-i-ucheta--03
Две ленты времени: сутки без мониторинга и те же сутки с алертом через 45 минут

Две горизонтальные ленты времени на одни сутки. Верхняя «Без мониторинга»: 23:40 — последняя успешная сессия; 08:15 — первый заказ на товар, которого нет; 11:40 — звонок покупателя; 14:00 — подрядчик начал разбор; 18:30 — обмен восстановлен; справа итог «24 050 ₽». Нижняя «С мониторингом»: 23:40 — последняя успешная сессия; 00:25 — алерт «45 минут без обмена» владельцу и подрядчику; 09:10 — обмен восстановлен; справа итог «около 3 000 ₽». Чертёжная манера, все надписи по-русски.

Одна и та же поломка стоит 24 050 ₽ без датчика и около 3 000 ₽ с датчиком

Сколько стоят сутки молчащего обмена

Вводные модельного примера: магазин на 60 заказов в сутки, средний чек 4 500 ₽, валовая маржа 25 % — то есть 1 125 ₽ с заказа. Ставка сотрудника магазина 700 ₽/час, ставка подрядчика 3 000 ₽/час. Обмен встал ночью и был восстановлен к вечеру следующего дня. Считаем не упущенную выручку — она частично возвращается, — а прямые потери и работу, которой не должно было быть.

Сутки без обмена: магазин на 60 заказов в день
Ручной перенос 60 заказов в учёт: 60 × 6 мин = 6 ч × 700 ₽4 200 ₽
Отмены «нет в наличии»: 5 заказов вместо обычного одного, разница 4 × 1 125 ₽ маржи4 500 ₽
Заказы по неактуальной цене: 12 заказов × 180 ₽ недополученной наценки2 160 ₽
Разбор, ручная сверка и повторная выгрузка подрядчиком: 4 ч × 3 000 ₽12 000 ₽
Обращения покупателей по отменам: 4 × 25 мин = 1,7 ч × 700 ₽1 190 ₽
Итого24 050 ₽ за одни сутки. Обмен встал вечером пятницы и обнаружен в понедельник — 72 150 ₽

Теперь сравните с ценой датчиков. Мониторинг из четырёх метрик с сигналом присутствия и суточной сверкой остатков — это 18 часов работы, 54 000 ₽ по ставке 3 000 ₽/час. Он окупается за 2,25 суток простоя, то есть при первом же серьёзном молчании обмена. Дальше он работает бесплатно. Это редкий случай, когда решение о покупке принимается не по окупаемости за месяцы, а по вопросу «сколько раз за три года у вас встанет обмен» — и ответ всегда больше одного.

графикoshibki-obmena-magazina-i-ucheta--04
Столбец потерь за сутки простоя 24 050 рублей и линия стоимости мониторинга 54 000 рублей

Составной вертикальный столбец «Сутки без обмена — 24 050 ₽» с подписанными сегментами: «ручной перенос заказов 4 200», «отмены «нет в наличии» 4 500», «продажи по старой цене 2 160», «часы подрядчика 12 000», «обращения покупателей 1 190». Справа три столбца поменьше: «1 сутки 24 050 ₽», «2 суток 48 100 ₽», «3 суток 72 150 ₽». Через все столбцы проходит горизонтальная штриховая линия «мониторинг 54 000 ₽ разово» с подписью точки пересечения «2,25 суток». Оси: рубли. Чертёжная манера, надписи по-русски.

Мониторинг дороже одних суток простоя и дешевле трёх — поэтому его берут один раз

Что записать в договор с подрядчиком про обмен

Пять пунктов, которые превращают обмен из «работает, пока работает» в эксплуатируемую систему. Они добавляют к смете 10–15 % и снимают почти все споры при первом же инциденте. Формулировки стоит переносить в договор дословно, а не пересказывать: общие слова про «качественную поддержку» в разборе не помогают, а состав регламентной поддержки описан у нас отдельной страницей.

  1. 1Журнал обмена: тело запроса и ответа, время, код результата, хранение не менее 30 дней, доступ у заказчика, а не только у подрядчика. Без этого пункта остальные четыре не работают.
  2. 2Повторная отправка: любое сообщение, не доставленное с первого раза, ставится в очередь и повторяется автоматически по нарастающему интервалу, а не теряется. В договоре указывается число попыток и что происходит после последней.
  3. 3Идемпотентность приёма: заказ с уже известным внешним идентификатором не создаёт второй документ. Это одна строка в договоре и главная защита от задвоенных заказов.
  4. 4Срок реакции: время на подтверждение обращения и время на начало работ — раздельно, с разными числами для рабочего дня и выходного. «Реагируем оперативно» сроком не является.
  5. 5Пауза обмена на стороне заказчика: кнопка, которой склад останавливает выгрузку остатков на время инвентаризации, с автоматическим возвратом в работу.

Когда мониторинг обмена не нужен

Если в магазине до 5–7 заказов в сутки и обмен идёт раз в день, отдельный мониторинг за 54 000 ₽ не окупится. Сутки простоя в таком магазине стоят 2 000–3 000 ₽, а поломку заметит менеджер, который в любом случае каждое утро открывает список новых заказов. Достаточно письменного регламента: утренняя проверка времени последней сессии и телефон подрядчика на видном месте. Порог, за которым мониторинг начинает окупаться в разумный срок, — примерно 25–30 заказов в сутки.

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

И последнее исключение: если у вас нет журнала обмена, мониторинг покупать рано. Датчик сообщит, что связка встала, но разобрать причину будет всё так же нечем, и каждый инцидент будет стоить тех же четырёх часов подрядчика. Правильный порядок — сначала журнал, потом идемпотентность приёма, потом датчики. Это же и порядок возрастания цены: журнал 12–18 часов, защита от повторов 8–14 часов, мониторинг 18 часов.