Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья8 мин чтенияПросмотры7

Остаток в 1С и на сайте не совпадает: где должна жить окончательная цифра

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

Комментарии 0

Альбина сверяет складской лист с товарами и данными сканера
В этой статье

В 1С у товара осталось три штуки, на сайте показано пять, а четвёртый заказ уже оформлен. Это может быть ошибка обмена, но не обязательно. Между учётной системой, сайтом и складом почти всегда есть задержка, а слово «остаток» в этих системах может означать разные величины.

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

Разделите физический, доступный и показываемый остаток

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

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

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

Физический остаток 10 уменьшается на два резерва и одну страховую единицу до семи доступных
Учебный пример: физическое, доступное и показываемое количество могут различаться по согласованному правилу.

Не выбирайте один источник истины для всех событий

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

Полезнее назначить владельца каждому событию:

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

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

Посчитайте окно рассинхронизации

Допустим, полная выгрузка остатков идёт каждые 15 минут. У популярного товара в пике бывает четыре попытки покупки в минуту. За интервал между выгрузками сайт может принять до 60 попыток. Это не означает 60 потерянных заказов: часть товаров есть в запасе, часть корзин не будет оплачена, локальное резервирование может сработать. Расчёт показывает верхнюю границу нагрузки на правило согласования.

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

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

Между обменами в 10:00 и 10:15 при четырёх попытках в минуту возможно до 60 событий
Расчёт показывает нагрузку на правило согласования, а не прогноз потерянных заказов.

Полная и частичная выгрузка решают разные задачи

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

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

Полная выгрузка тоже не должна бездумно побеждать локальные события. Если файл был сформирован в 10:00, заказ создан в 10:03, а импорт закончился в 10:05, слепое присваивание значения из снимка может вернуть зарезервированную единицу. Важны время состояния и правило применения, а не время окончания загрузки.

Согласуйте ключи товаров и складов

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

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

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

Определите поведение при конфликте

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

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

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

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

Проверьте интеграцию сценариями, а не одной цифрой

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

  • Оформите два заказа на последнюю единицу почти одновременно и проверьте, где возникает отказ.
  • Отмените неоплаченный заказ до и после передачи в 1С; резерв должен освободиться ровно один раз.
  • Повторно доставьте тот же пакет и убедитесь, что остаток не меняется второй раз.
  • Пропустите один частичный пакет, затем выполните контрольную сверку.
  • Измените остаток конкретного торгового предложения и проверьте соседние варианты карточки.
  • Проверьте склад, который не обслуживает выбранный регион.
  • Сопоставьте время события, формирования файла, начала и окончания импорта.

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

Наблюдайте задержку, а не только ошибки задания

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

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

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.