Surrika

Дубли остатков по артикулам и месяцам: как проверить выгрузку

Дубль остатка это две и более строки с одним артикулом в остатках на одну и ту же дату. Проверить выгрузку можно без поиска конкретного товара: сравните по каждому месяцу число строк и число уникальных артикулов. Разница между ними и есть количество лишних строк.

Отчеты и данные

Как считать

  1. Берем остатки на последний день месяца за последние 12 снимков.
  2. Внутри каждого месяца считаем число строк и число уникальных артикулов.
  3. Разница между ними показывает, сколько строк лишние.
  4. Суммируем штуки и стоимость остатка, чтобы видеть размер искажения.
  5. Сравниваем месяцы между собой и находим первый снимок, где появился повтор.

Расчет на выгрузках магазина

Пример посчитан на выгрузках вымышленного мебельного магазина: продажи сайта и трех маркетплейсов, реклама, сделки CRM и остатки за 2024-2025 годы.

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

Проверка дублей остатков по месяцам

Месяц Строк остатков Уникальных артикулов Лишних строк Доля лишних строк Штук на складе Стоимость остатка, руб.
2025-01-31 20 20 0 0 % 2 415 19 285 102 ₽
2025-02-28 20 20 0 0 % 2 808 20 165 168 ₽
2025-03-31 20 20 0 0 % 3 053 22 833 348 ₽
2025-04-30 20 20 0 0 % 2 991 22 553 002 ₽
2025-05-31 20 20 0 0 % 2 702 19 721 951 ₽
2025-06-30 20 20 0 0 % 2 297 18 401 912 ₽
2025-07-31 20 20 0 0 % 2 230 17 140 528 ₽
2025-08-31 20 20 0 0 % 2 700 20 062 742 ₽
2025-09-30 20 20 0 0 % 3 066 22 898 690 ₽
2025-10-31 20 20 0 0 % 3 491 26 055 968 ₽
2025-11-30 20 20 0 0 % 3 383 26 421 494 ₽
2025-12-31 20 20 0 0 % 3 708 28 658 954 ₽

SQL, по которому посчитано

WITH base AS (
  SELECT
    date,
    sku,
    units,
    value
  FROM stock
  WHERE date >= (SELECT date_trunc('month', max(date)) - INTERVAL '11 months' FROM stock)
),
monthly AS (
  SELECT
    date,
    count(*) AS row_count,
    count(DISTINCT sku) AS sku_count,
    count(*) - count(DISTINCT sku) AS extra_rows,
    sum(units) AS units_total,
    sum(value) AS value_sum
  FROM base
  GROUP BY date
)
SELECT
  date,
  row_count,
  sku_count,
  extra_rows,
  round(extra_rows::DOUBLE / row_count, 4) AS extra_share,
  units_total,
  round(value_sum, 0) AS value_total
FROM monthly
ORDER BY date

Где взять остатки для проверки дублей по артикулам

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

Почему один артикул стоит в остатках двумя строками

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

Как прочитать проверку дублей остатков по месяцам

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

Что делать с найденными дублями остатков

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

Частые ошибки

Группировка без даты снимка

Остатки снимают на конец каждого месяца, поэтому один артикул в 12 снимках это норма. Если искать повторы только по артикулу, дублями станет весь каталог, а настоящая пара строк внутри одного месяца потеряется в списке.

Проверка по названию товара

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

Нулевые строки в проверке

Строки с нулевым количеством часто остаются в выгрузке и выглядят как повторы, хотя остаток они не завышают. Уберите нули перед проверкой, иначе настоящая пара строк с одинаковыми штуками потеряется среди пустых.

Вопросы

Сколько лишних строк в остатках считается нормой?

Ноль. В одном снимке на конец месяца у артикула одна строка, если товар лежит на одном складе. Несколько строк допустимы только при разделении по складам или партиям, и штуки в них не должны совпадать.

Чем дубль остатка отличается от отрицательного остатка?

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

Как часто проверять остатки на дубли?

Раз в месяц после закрытия снимка и после каждой массовой загрузки номенклатуры или смены учетной системы.

Посчитайте это на своих выгрузках

Бросьте выгрузки на доску Surrika и задайте вопрос обычными словами. Ответ придет графиком, а под ним будет SQL, по которому он посчитан.

14 дней бесплатно, карта не нужна.

По теме

Все задачи