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

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

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

Полный обмен против разностного

Полная выгрузка отправляет на сайт весь каталог целиком: все позиции, все остатки, все цены. Разностная — только то, что изменилось с прошлой сессии. Разница не в аккуратности, а в физике: полный обмен каталога на 5 000 позиций — это минуты работы и заметная нагрузка на учётную систему, поэтому чаще раза в час его обычно и не запускают. Разностный обмен на том же каталоге возит 30–80 позиций и укладывается в секунды.

ПараметрПолный обменРазностный обмен
Что уезжает за сессиюВесь каталог: 5 000 позицийТолько изменившиеся: обычно 30–80 позиций
Разумная частота1–4 раза в сутки, чаще — нагрузка на учёт и на сайтКаждые 5–15 минут без заметной нагрузки
Риск затереть правку на сайтеВысокий: перезаписывается всё, включая поля, которые вели вручнуюНизкий: трогаются только изменённые позиции
Что происходит при пропуске сессииНичего страшного: следующая выгрузка привезёт всёПозиция может «залипнуть» со старым значением, пока не изменится снова
Что требуется от учётной системыНичего особенногоОтметка изменения по позиции: план обмена, дата последнего изменения или журнал

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

сравнениеobmen-ostatkami-i-tsenami-s-saytom--01
Сравнение полного и разностного обмена: объём, частота, риск затирания правок

Сравнение в две колонки. Слева «Полный обмен»: 5 000 позиций за сессию, 1–4 раза в сутки, высокий риск затирания правок, устойчив к пропуску сессии. Справа «Разностный обмен»: 30–80 позиций, каждые 5–15 минут, низкий риск затирания, но позиция «залипает» при пропуске. Внизу общая полоса-вывод «Гибрид: разностный часто + полный раз в сутки как страховка». Чертёжная манера, подписи по-русски.

Гибрид: разностный обмен каждые 5–15 минут плюс полная выгрузка раз в сутки как страховка

Резерв: почему физический остаток нельзя выгружать на витрину

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

Что это значитРезерв

Количество товара, физически лежащее на складе, но уже обещанное конкретным покупателям: принятые и неотгруженные заказы всех каналов — сайта, площадок, розницы, опта. Резерв вычитается из физического остатка вместе со страховым буфером под пересортицу и брак; получившееся число и есть доступный к продаже остаток, который единственный имеет право попасть на витрину.

Считаем цену этой ошибки на модельном магазине: 1 200 активных позиций, 600 заказов в месяц, средний чек 5 400 ₽, валовая маржа 23 % — 1 242 ₽ с заказа. Без вычета резерва доля заказов на уже обещанный товар держится около 2,2 %, то есть 13 заказов в месяц. Каждый из них — не просто минус маржа: деньги надо вернуть, комиссию эквайринга банк при возврате обычно не отдаёт, а менеджер тратит время на разбор и объяснение.

Цена одного месяца без вычета резерва
Двойных продаж в месяц: 2,2 % от 600 заказов13 заказов
Потерянная валовая маржа: 5 400 ₽ × 23 %1 242 ₽ за заказ
Невозвратная комиссия эквайринга при возврате: 5 400 ₽ × 2 %108 ₽ за заказ
Разбор и объяснение: 25 минут менеджера × 700 ₽/час292 ₽ за заказ
Итого на один такой заказ1 642 ₽
В месяц: 13 заказов × 1 642 ₽21 346 ₽
Настройка вычета резерва и страхового буфера: 12–18 ч × 3 000 ₽36 000–54 000 ₽ разово
ИтогоОкупаемость 1,7–2,5 месяца — и это без учёта отзывов и отказов от повторной покупки
Резерв считается по всем каналам сразу, а не по сайту

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

схема процессаobmen-ostatkami-i-tsenami-s-saytom--02
Схема расчёта доступного остатка: физический минус резерв всех каналов минус страховой буфер

Вертикальная схема-вычитание. Верхний блок «Физический остаток — 4 шт». Ниже вычитаемые блоки: «Резерв: сайт», «Резерв: розница», «Резерв: опт», «Резерв: площадки» — общей скобкой подписаны «3 шт уже обещаны», затем «Страховой буфер». Нижний блок выделен рамкой: «Доступный к продаже — 1 шт, только он уезжает на витрину». Сбоку перечёркнутая стрелка от верхнего блока прямо к витрине с подписью «так делать нельзя: 13 двойных продаж в месяц». Чертёжная манера, подписи по-русски.

На витрину имеет право уехать только нижняя цифра — доступный к продаже остаток

Единый источник истины: у остатка и цены разные хозяева

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

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

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

Виды цен и акции: почему скидку нельзя считать на витрине

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

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

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

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

Частота: что покупает доплата за быстрый обмен

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

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

Цена трёх суток со старым прайсом
Заказов в сутки: 600 в месяц ÷ 3020 заказов
За трое суток: 20 × 360 заказов
Выручка по старой цене: 60 × 5 400 ₽324 000 ₽
Подорожание, которое не доехало до витрины6 %
Недополучено: 324 000 ₽ × 6 %19 440 ₽
Перевод выгрузки цен на ежечасный обмен: 8–13 ч × 3 000 ₽24 000–39 000 ₽ разово
ИтогоНастройка окупается со второго такого подорожания — а их обычно 3–6 в год

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

графикobmen-ostatkami-i-tsenami-s-saytom--03
График: трое суток продаж по старой цене и 19 440 ₽ недополученной выручки

График-столбики за трое суток: по 20 заказов в день, каждый столбик разделён на две части — «полученная выручка» и тонкая верхняя полоса «недополученные 6 %». Справа итоговая плашка: «60 заказов, 324 000 ₽ выручки, 19 440 ₽ недополучено». Ниже горизонтальная линия с подписью «перевод на ежечасную выгрузку цен — 24 000–39 000 ₽ разово». Ось X — сутки, ось Y — рубли, значения подписаны. Чертёжная манера, подписи по-русски.

Цены обычно обновляют реже остатков — и теряют на этом тише, но регулярнее

Отчёт расхождений: порог, получатель, реакция

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

  1. 1
    Шаг 1. Две одинаковые выгрузки под утро

    Список «артикул — доступный остаток — цена» с сайта и такой же список из учётной системы, снятые в одну минуту. Формат один, порядок один, сравниваются построчно.

  2. 2
    Шаг 2. Порог, а не факт расхождения

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

  3. 3
    Шаг 3. Первые двадцать строк в письме

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

  4. 4
    Шаг 4. Два получателя и один ответственный

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

  5. 5
    Шаг 5. Проверка на приёмке

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

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

Настройка такой сверки — 12–18 часов работы, то есть 36 000–54 000 ₽, и это самый дешёвый датчик во всём контуре обмена. Он же даёт объективный ответ на вопрос «а обмен точно работает», который иначе решается ощущениями и спорами между подрядчиками. Что ещё стоит поставить рядом — сигнал присутствия и счётчики аномалий — разобрано в опорной статье; здесь достаточно сказать, что сверка результата и сигнал присутствия закрывают разные поломки и заменять одно другим нельзя.

схема процессаobmen-ostatkami-i-tsenami-s-saytom--04
Схема суточной сверки: две выгрузки, порог 1 процент, письмо двум получателям

Схема слева направо: два блока «Выгрузка с сайта: артикул, доступный остаток, цена» и «Выгрузка из учёта: те же поля», оба со стрелками в блок «Построчное сравнение». Далее ромб «Расхождений больше 1 %?» с двумя ветками: «нет — в архив» и «да — письмо с двадцатью худшими строками». От письма две стрелки к получателям: «инженер» и «ответственный со стороны магазина, может остановить продажи». Внизу пометка «настройка 36 000–54 000 ₽». Чертёжная манера, подписи по-русски.

Сверяется результат обмена, а не факт его запуска — это разные вещи

Когда точная синхронизация не нужна

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

  • Товар делается под заказ. Складского остатка не существует в принципе, витрина показывает не наличие, а срок изготовления. Синхронизировать здесь нечего; полезнее автоматизировать расчёт срока и загрузку производства.
  • Глубокий остаток и узкий ассортимент. Если по каждой позиции на складе лежат сотни штук, а продаётся десяток в день, суточной выгрузки достаточно: до нуля позиция не доходит, двойных продаж не возникает. Здесь частый обмен решает проблему, которой нет.
  • Меньше 90–120 заказов в месяц. Разбор двух-трёх отмен в месяц дешевле, чем проект и его поддержка. Рабочий вариант — регламент ручной выгрузки раз в двое суток и письменное правило, кто её делает и что происходит, если он в отпуске.
  • В учёте нет порядка с номенклатурой. Если артикулы задвоены или записаны в свободной форме, сверять витрину не с чем: одна и та же вещь существует в двух карточках с разными остатками. Сначала единый справочник и артикул как ключ, потом обмен — обратный порядок гарантированно даёт проект, который не принимается.

И последнее правило, которое стоит любых настроек. Формула доступного остатка должна быть записана словами и согласована до начала работ: что вычитается, по каким каналам, какой страховой буфер, что происходит во время инвентаризации. Это половина страницы текста и одна встреча — и это же половина всех будущих споров о том, почему на витрине «неправильная» цифра.