Если остаток на сайте не совпадает с учётом, причина почти всегда одна из четырёх: на витрину уезжает физический остаток вместо доступного, потому что не вычитаются резервы; обмен идёт полной выгрузкой и не успевает за изменениями; у остатка или у цены оказалось два хозяина, и они переписывают друг друга; витрина сама считает акционную цену, а продажа проводится в учёте по другой. Все четыре — следствие решений, принятых на старте проекта, и все четыре чинятся, если знать, какое именно решение было принято неверно.
Важно, что расхождение не выглядит как поломка. Сайт открывается, товары на месте, заказы идут. Обмен в журнале отмечен как успешный. Просто в корзину попадает то, чего нет, и по цене, которой уже нет — а узнаёте вы об этом от покупателя, через отмену и возврат денег.
Дальше — разбор по частям: чем разностный обмен отличается от полного и когда какой уместен, как считается доступный остаток и во что обходится его отсутствие, кто имеет право менять остаток и цену, что делать с видами цен и акциями, сколько стоят сутки жизни со старым прайсом и как устроен ежедневный отчёт расхождений. Общая механика связи витрины и учёта — четыре способа обмена, их цена и сроки — разобрана в опорной статье раздела; здесь мы идём вглубь одного контура.
Полный обмен против разностного
Полная выгрузка отправляет на сайт весь каталог целиком: все позиции, все остатки, все цены. Разностная — только то, что изменилось с прошлой сессии. Разница не в аккуратности, а в физике: полный обмен каталога на 5 000 позиций — это минуты работы и заметная нагрузка на учётную систему, поэтому чаще раза в час его обычно и не запускают. Разностный обмен на том же каталоге возит 30–80 позиций и укладывается в секунды.
| Параметр | Полный обмен | Разностный обмен |
|---|---|---|
| Что уезжает за сессию | Весь каталог: 5 000 позиций | Только изменившиеся: обычно 30–80 позиций |
| Разумная частота | 1–4 раза в сутки, чаще — нагрузка на учёт и на сайт | Каждые 5–15 минут без заметной нагрузки |
| Риск затереть правку на сайте | Высокий: перезаписывается всё, включая поля, которые вели вручную | Низкий: трогаются только изменённые позиции |
| Что происходит при пропуске сессии | Ничего страшного: следующая выгрузка привезёт всё | Позиция может «залипнуть» со старым значением, пока не изменится снова |
| Что требуется от учётной системы | Ничего особенного | Отметка изменения по позиции: план обмена, дата последнего изменения или журнал |
Рабочая схема почти всегда гибридная, и её стоит закладывать сразу. Разностный обмен работает часто и возит остатки и цены. Полная выгрузка запускается раз в сутки ночью и служит страховкой: она подтягивает всё, что разностный обмен мог пропустить из-за сбоя, обрыва связи или пропущенной отметки изменения. Стоит эта страховка нескольких часов настройки и снимает целый класс проблем, при которых одна позиция месяцами висит со старым остатком, а никто этого не замечает.
Сравнение в две колонки. Слева «Полный обмен»: 5 000 позиций за сессию, 1–4 раза в сутки, высокий риск затирания правок, устойчив к пропуску сессии. Справа «Разностный обмен»: 30–80 позиций, каждые 5–15 минут, низкий риск затирания, но позиция «залипает» при пропуске. Внизу общая полоса-вывод «Гибрид: разностный часто + полный раз в сутки как страховка». Чертёжная манера, подписи по-русски.
Резерв: почему физический остаток нельзя выгружать на витрину
Самая частая и самая дорогая ошибка контура остатков. На складе лежит четыре коробки, но три из них уже обещаны покупателям: заказы приняты, оплачены, но ещё не отгружены. Свободна одна. Если на сайт уезжает физический остаток, витрина честно показывает четыре — и продаёт ещё три, которых нет.
Количество товара, физически лежащее на складе, но уже обещанное конкретным покупателям: принятые и неотгруженные заказы всех каналов — сайта, площадок, розницы, опта. Резерв вычитается из физического остатка вместе со страховым буфером под пересортицу и брак; получившееся число и есть доступный к продаже остаток, который единственный имеет право попасть на витрину.
Считаем цену этой ошибки на модельном магазине: 1 200 активных позиций, 600 заказов в месяц, средний чек 5 400 ₽, валовая маржа 23 % — 1 242 ₽ с заказа. Без вычета резерва доля заказов на уже обещанный товар держится около 2,2 %, то есть 13 заказов в месяц. Каждый из них — не просто минус маржа: деньги надо вернуть, комиссию эквайринга банк при возврате обычно не отдаёт, а менеджер тратит время на разбор и объяснение.
Типичный сбой выглядит так: вычет резерва настроили, но в него попадают только заказы сайта. Розничная продажа в магазине, отгрузка оптовому клиенту и сборочное задание с маркетплейса резерв не создают — а контур площадок мы разбирали отдельной статьёй, и там та же формула работает ещё и на распределение остатка между витринами. В результате витрина показывает доступный остаток честно — но по одному каналу из четырёх, а расхождение возвращается в прежнем объёме. Формула доступного остатка пишется один раз и на все каналы, и это первое, что нужно зафиксировать письменно до начала работ.
Вертикальная схема-вычитание. Верхний блок «Физический остаток — 4 шт». Ниже вычитаемые блоки: «Резерв: сайт», «Резерв: розница», «Резерв: опт», «Резерв: площадки» — общей скобкой подписаны «3 шт уже обещаны», затем «Страховой буфер». Нижний блок выделен рамкой: «Доступный к продаже — 1 шт, только он уезжает на витрину». Сбоку перечёркнутая стрелка от верхнего блока прямо к витрине с подписью «так делать нельзя: 13 двойных продаж в месяц». Чертёжная манера, подписи по-русски.
Единый источник истины: у остатка и цены разные хозяева
Правило звучит просто: у каждого поля ровно один владелец, который имеет право его менять. Нарушается оно почти всегда одинаково — не злым умыслом, а из удобства. Маркетолог поправил цену прямо в админке сайта, потому что «быстрее». Кладовщик подкрутил остаток на витрине, потому что «там неправильно». Обе правки живут до ближайшей сессии обмена, после чего исчезают, и люди перестают доверять системе.
| Поле | Владелец | Правка на сайте | Что бывает при нарушении |
|---|---|---|---|
| Остаток по складам | Складской учёт | Запрещена всегда | Витрина и склад расходятся необратимо: сверить их уже нечем |
| Базовая цена и виды цен | Тот, кто отвечает за наценку — коммерческий отдел в учётной системе | Запрещена | Продажа проводится по одной цене, а покупатель видел другую; разбирается вручную |
| Акционная цена и скидка | Учёт, если акция влияет на документ продажи; маркетинг — если это только оформление витрины | Допустима, только если поле явно исключено из обмена | Обмен перезатирает акцию посреди распродажи |
| Описание, фотографии, SEO-поля | Контент-редактор на стороне сайта | Разрешена | Полная выгрузка затирает правки редактора, если поля не исключены из обмена |
Практический вывод: список полей, которые обмен не трогает, — это часть технического задания, а не настройка «по ходу дела». Он пишется на бумаге, согласуется с маркетологом и контент-редактором и проверяется на приёмке: заводим тестовую правку в каждое исключённое поле, прогоняем полную выгрузку и убеждаемся, что правка выжила. Пять минут проверки экономят месяцы взаимных обвинений между подрядчиком по сайту и подрядчиком по учёту. Если подрядчиков действительно двое, разграничение зон ответственности стоит записать и в договор на поддержку — как это формулируется, мы разбирали на странице о поддержке.
Виды цен и акции: почему скидку нельзя считать на витрине
В учётной системе цена — это не одно число, а несколько видов цен: розничная, оптовая, для постоянных клиентов, закупочная, цена с НДС и без. На витрину должен уезжать конкретный вид, названный в техническом задании, а не «цена». Половина проблем с ценами начинается с того, что вид цены не был назван явно, и обмен привёз то, что нашёл первым, — например, цену без НДС.
Рядом с видом цены живёт вопрос НДС, и он решается ровно один раз в техническом задании: витрина показывает цену с налогом, а в учёте вид цены может храниться и так, и иначе. Договориться нужно не о том, «как правильно», а о том, кто пересчитывает: обмен на выходе из учёта или сайт на входе. Оба варианта рабочие, невыносим только третий — когда пересчёт делают оба, и цена на витрине отличается от учётной на ставку налога. Проверяется это одной позицией на приёмке и стоит пяти минут; необнаруженное, оно живёт до первой сверки кассы.
Отдельный случай — акции и скидки. Соблазн понятен: пусть витрина сама считает минус 15 % от базовой цены, это проще, чем заводить акцию в учёте. Проблема в том, что продажа проводится не на витрине. Документ создаётся в учётной системе, и если она не знает про эти 15 %, то реализация пройдёт по базовой цене, а разница всплывёт при закрытии месяца как расхождение между кассой и учётом. Если скидка при этом ещё и ограничена по времени, расхождение будет разным в разные дни, и разбирать его придётся вручную по каждому заказу.
- Акция влияет на документ продажи — ведём её в учёте и выгружаем отдельным видом цены. Дороже на старте, зато учёт остаётся единственным источником правды, а закрытие месяца не превращается в расследование.
- Акция — только оформление витрины, скидка потом всё равно применяется в учёте по правилам программы лояльности — можно считать на сайте, но поле обязано быть исключено из обмена явным правилом.
- Смешивать два подхода на одном каталоге нельзя. Если часть акций ведётся в учёте, а часть на витрине, никто через полгода не помнит, где какая, и первая же полная выгрузка снимает половину акций посреди распродажи.
- Автоматическая переоценка по правилам — отдельная тема со своими ограничителями по марже и журналом изменений; здесь важно только то, что её результат тоже обязан приезжать на витрину из учёта, а не считаться на ней.
Частота: что покупает доплата за быстрый обмен
Про остатки логика известна: чем реже обмен, тем дольше витрина показывает то, чего уже нет, и тем выше доля отмен «нет в наличии». Зависимость доли отмен от частоты и цена перехода на быстрый канал разобраны в опорной статье раздела. А вот про цены считают редко, хотя здесь потери прямые и их легко проверить.
Ситуация обычная: поставщик поднял цены с первого числа, магазин пересчитал прайс в учёте в тот же день, а на сайт новые цены уехали через трое суток, потому что выгрузка цен была настроена «раз в неделю по понедельникам». Всё это время товар продавался по старой цене, а закупался уже по новой.
Разумные ориентиры частоты для магазина среднего размера: остатки — каждые 10–15 минут разностным обменом, цены — раз в час или по событию изменения прайса, номенклатура и характеристики — раз в сутки, полная выгрузка-страховка — ночью. Единственное исключение, где стоит идти медленнее: период инвентаризации. Пока склад пересчитывается, остатки в учёте временно неверны, и выгружать их на витрину нельзя — обмен остатками на это время ставится на паузу вручную, а не оставляется «как есть».
График-столбики за трое суток: по 20 заказов в день, каждый столбик разделён на две части — «полученная выручка» и тонкая верхняя полоса «недополученные 6 %». Справа итоговая плашка: «60 заказов, 324 000 ₽ выручки, 19 440 ₽ недополучено». Ниже горизонтальная линия с подписью «перевод на ежечасную выгрузку цен — 24 000–39 000 ₽ разово». Ось X — сутки, ось Y — рубли, значения подписаны. Чертёжная манера, подписи по-русски.
Отчёт расхождений: порог, получатель, реакция
Мониторинг, который следит только за ошибками обмена, ловит половину проблем. Вторая половина — это когда обмен исправно идёт по расписанию, но возит неправду: выпал один склад из выборки, потерялась часть номенклатуры, не применился вычет резерва. Такой сбой не даёт ни одной ошибки в журнале. Ловится он сверкой результата, а не процесса.
- 1Шаг 1. Две одинаковые выгрузки под утро
Список «артикул — доступный остаток — цена» с сайта и такой же список из учётной системы, снятые в одну минуту. Формат один, порядок один, сравниваются построчно.
- 2Шаг 2. Порог, а не факт расхождения
Единичные расхождения бывают всегда: заказ прошёл между двумя снимками. Порог обычно 1 % позиций; при превышении письмо уходит автоматически, ниже порога отчёт просто складывается в архив.
- 3Шаг 3. Первые двадцать строк в письме
В письме — не ссылка на отчёт, а сразу двадцать худших расхождений с артикулами и обеими цифрами. Отчёт, который надо открыть и выгрузить, чтобы понять масштаб, не читают уже через две недели.
- 4Шаг 4. Два получателя и один ответственный
Письмо уходит инженеру и человеку со стороны магазина, который может остановить продажи по проблемной группе товаров. Схема, при которой алерт получает только подрядчик, а он в отпуске, — это не мониторинг.
- 5Шаг 5. Проверка на приёмке
Искусственно ломаем обмен по одной товарной группе и убеждаемся, что отчёт это увидел, письмо ушло обоим и в нём видно, какая именно группа расходится. Без этой проверки вы принимаете отчёт, который никто ни разу не видел в работе.
Отдельный вопрос — что делать с расхождением, которое уже накопилось. Выравнивать его руками по строкам бессмысленно: пока менеджер правит первые сто позиций, расходятся следующие. Рабочая процедура другая. Сначала останавливается обмен и фиксируется причина — иначе выравнивание просто повторится через сутки. Затем запускается полная выгрузка с признанием учётной системы единственным источником: витрина принимает всё как есть, включая нули. И только после этого включается разностный обмен, а первая суточная сверка после выравнивания смотрится вручную целиком, а не по порогу.
Настройка такой сверки — 12–18 часов работы, то есть 36 000–54 000 ₽, и это самый дешёвый датчик во всём контуре обмена. Он же даёт объективный ответ на вопрос «а обмен точно работает», который иначе решается ощущениями и спорами между подрядчиками. Что ещё стоит поставить рядом — сигнал присутствия и счётчики аномалий — разобрано в опорной статье; здесь достаточно сказать, что сверка результата и сигнал присутствия закрывают разные поломки и заменять одно другим нельзя.
Схема слева направо: два блока «Выгрузка с сайта: артикул, доступный остаток, цена» и «Выгрузка из учёта: те же поля», оба со стрелками в блок «Построчное сравнение». Далее ромб «Расхождений больше 1 %?» с двумя ветками: «нет — в архив» и «да — письмо с двадцатью худшими строками». От письма две стрелки к получателям: «инженер» и «ответственный со стороны магазина, может остановить продажи». Внизу пометка «настройка 36 000–54 000 ₽». Чертёжная манера, подписи по-русски.
Когда точная синхронизация не нужна
Есть четыре ситуации, в которых вкладываться в частый и точный обмен остатками не стоит, и лучше признать это до начала работ.
- Товар делается под заказ. Складского остатка не существует в принципе, витрина показывает не наличие, а срок изготовления. Синхронизировать здесь нечего; полезнее автоматизировать расчёт срока и загрузку производства.
- Глубокий остаток и узкий ассортимент. Если по каждой позиции на складе лежат сотни штук, а продаётся десяток в день, суточной выгрузки достаточно: до нуля позиция не доходит, двойных продаж не возникает. Здесь частый обмен решает проблему, которой нет.
- Меньше 90–120 заказов в месяц. Разбор двух-трёх отмен в месяц дешевле, чем проект и его поддержка. Рабочий вариант — регламент ручной выгрузки раз в двое суток и письменное правило, кто её делает и что происходит, если он в отпуске.
- В учёте нет порядка с номенклатурой. Если артикулы задвоены или записаны в свободной форме, сверять витрину не с чем: одна и та же вещь существует в двух карточках с разными остатками. Сначала единый справочник и артикул как ключ, потом обмен — обратный порядок гарантированно даёт проект, который не принимается.
И последнее правило, которое стоит любых настроек. Формула доступного остатка должна быть записана словами и согласована до начала работ: что вычитается, по каким каналам, какой страховой буфер, что происходит во время инвентаризации. Это половина страницы текста и одна встреча — и это же половина всех будущих споров о том, почему на витрине «неправильная» цифра.
