Surrika

Пропуски остатков по артикулам по месяцам: проверка полноты выгрузки

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

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

Как считать

  1. Период это последние 12 месяцев в данных остатков, сетка строится по всем артикулам, которые встречались на складе.
  2. Для каждой пары месяц и артикул проверяется наличие снимка остатка.
  3. Пропуском считается отсутствие строки, нулевой остаток остается фактом.
  4. По каждому артикулу считается число пропущенных месяцев и доля закрытых месяцев.
  5. Результат сортируется по числу пропусков, вверху оказываются артикулы с самым рваным рядом.

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

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

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

Пропущенные месяцы остатков по артикулам

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

WITH bounds AS (
    SELECT date_trunc('month', max(date)) AS max_month
    FROM stock
),
months AS (
    SELECT CAST(b.max_month - (n.i * INTERVAL '1 month') AS DATE) AS month
    FROM bounds b
    CROSS JOIN (SELECT unnest(range(0, 12)) AS i) AS n
),
skus AS (
    SELECT sku, max(category) AS category
    FROM stock
    GROUP BY sku
)
SELECT
    s.sku,
    s.category,
    count(m.month) AS months_expected,
    count(st.date) AS months_present,
    count(m.month) - count(st.date) AS months_missing,
    round(count(st.date) * 1.0 / count(m.month), 2) AS completeness
FROM skus s
CROSS JOIN months m
LEFT JOIN stock st
    ON st.sku = s.sku
    AND date_trunc('month', st.date) = m.month
GROUP BY s.sku, s.category
ORDER BY months_missing DESC, s.sku
LIMIT 30

Почему появляются пропуски остатков по артикулам

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

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

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

Как читать результат проверки остатков по артикулам

Артикул с 12 ожидаемыми месяцами и 9 найденными имеет 3 пропуска. Сверьте пропущенные месяцы с продажами: если товар в это время продавался, остаток был, значит потеряна запись выгрузки. Новый артикул без продаж в первых месяцах пропуском не считается, его просто еще не завели в учете. Артикул, который исчез из остатков в конце периода, скорее снят с продажи, и восстанавливать его ряд не нужно.

Что делать с пропусками в остатках по артикулам

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

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

Месяцы берут из самой выгрузки

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

Средний остаток считают по найденным месяцам

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

Артикулы склеивают по названию товара

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

Вопросы

За какой период проверять пропуски остатков по артикулам?

Берите 12 месяцев: за год видно и сезонные товары, и артикулы, снятые с продажи. На коротком периоде пропуски у товаров, которые продаются раз в сезон, не проявятся.

Можно ли проверить полноту остатков по категориям, а не по артикулам?

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

Как часто делать такую проверку?

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

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

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

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

По теме

Все задачи