Склад · Пополнение

Автозаказ: классификация ABC/XYZ, прогноз спроса, страховой запас и оптимальный поставщик

Каждое утро система собирает рекомендации к закупке. Алгоритм проходит больше десятка шагов: агрегирует продажи за последние 90 дней, собирает остатки складов и общие остатки по фирме, считает скользящее среднее и тренд продаж по последним 16 неделям, разбивает товары на классы по обороту (топовые A, средние B, длинный хвост C) и по стабильности спроса (стабильный X, переменный Y, нерегулярный Z), рассчитывает сезонный коэффициент текущего месяца, строит карту сроков доставки у поставщиков по категориям, для каждого товара выбирает поставщика с самым коротким сроком, собирает итоговые рекомендации с учётом страхового запаса (для стабильных товаров 3 дня, для переменных 7, для нерегулярных 14), сезонности и тренда. Каждой рекомендации присваивается оценка срочности — сверху списка те товары, по которым нужно действовать прямо сейчас. Готовый список выгружается в Excel: сгруппированный по поставщикам, с цветными заливками по срочности — закупщик отправляет каждому свой блок одной операцией.

9
классов ABC×XYZ
16
недель в WMA
3/7/14
safety stock дней
1064 строки
размер сервисов
Все возможности
Преимущества

Что получает бизнес от модуля

Классификация ABC и XYZ

Товары автоматически разбиваются на два независимых класса. По обороту: топовые (первые 80% выручки), средние (следующие 15%), длинный хвост (последние 5%). По стабильности спроса: стабильный (продажи ровные), переменный (есть колебания), нерегулярный (всплески и провалы). Девять сочетаний — у каждого своя стратегия пополнения: топовые стабильные заказываются часто маленькими партиями, длинный хвост нерегулярных — редко и с большим запасом.

Страховой запас по классу товара

Для стабильного спроса достаточно 3 дней страхового запаса — спрос предсказуем, риск нехватки минимальный. Для переменного — 7 дней. Для нерегулярного — 14 дней, потому что в любой момент возможен всплеск. Формула рекомендации: средняя продажа в день умножается на срок поставки плюс страховой запас, из этого вычитается текущий остаток. Класс товара автоматически меняет стратегию — менеджеру не нужно вспоминать, какой запас держать.

Прогноз по последним 16 неделям

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

Учёт тренда

По тем же 16 неделям строится тренд — растёт спрос или падает. На карточке рекомендации видна стрелка «↑ +18% за квартал» или «↓ −22%». Менеджер видит не только текущий момент, но и динамику: новый хит, по которому спрос разгоняется, или отмирающий товар, по которому продажи падают. Растущий тренд даёт приоритет — нужно заказать больше, иначе быстро уйдём в пустую полку.

Сроки поставки по поставщикам

У одного поставщика разные сроки доставки на разные категории — бытовую технику он может привезти за 3 дня, мебель — за 14. Система хранит эту карту и для каждого товара выбирает поставщика с самым коротким сроком. Если самый быстрый временно недоступен — закупщик переключается на следующего, и система это учтёт. Если по товару нет данных о сроке — берётся стандартное значение 7 дней.

Сезонный коэффициент

Для каждого товара считается коэффициент текущего месяца: продажи этого месяца исторически делятся на среднее по всем месяцам. Если в августе товар продаётся в 2,5 раза лучше среднего — коэффициент 2,5. Этот коэффициент применяется к расчёту прогноза: «обычно 3 в день, но сейчас сезон — закупаем на 7,5». Купальники приходят к маю, а не к августу. Обогреватели — к октябрю, а не к январю.

Срочность и сортировка

Каждой рекомендации присваивается численная оценка срочности. Формула учитывает класс по обороту (топовые приоритетнее), класс по стабильности, текущий остаток против прогнозируемого потребления за срок поставки плюс страховой запас, сезонность и тренд. Список сортируется — сверху те товары, по которым нужно действовать прямо сейчас. Закупщик видит сначала самое важное, не пролистывая тысячи позиций.

Точечные фильтры

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

Выгрузка в Excel для закупщика

Готовые рекомендации выгружаются в Excel: артикул, название, классы по обороту и стабильности, текущий остаток, дней до конца, средняя продажа в день, прогноз, рекомендуемое количество, поставщик, срок поставки, сумма заказа. Сгруппировано по поставщикам — закупщик отправляет каждому свой блок. Цветные заливки по срочности (красный — горит, жёлтый — на грани, белый — норма). Один файл — все заявки за день.

Возможности модуля

Что входит в Пополнение

  1. 01

    Параметры запроса рекомендаций

    Параметры: какие склады считаются центральными для рассчёта пополнения, период анализа продаж (по умолчанию 90 дней), фильтры по категориям, типам товара, производителям, поставщикам, по срочности, по классам ABC и XYZ, текстовый поиск, минимальный порог продаж за период (по умолчанию 2 — товары с одной случайной продажей не попадают в рекомендации). На выходе — структурированный список рекомендаций, отсортированный по срочности.

  2. 02

    Как устроен расчёт

    Модуль пополнения координирует работу четырёх блоков: классификация (ABC, XYZ и сезонность), прогноз спроса (скользящее среднее и тренд), формирование рекомендаций (с учётом страхового запаса, сезонности и тренда), агрегаты для сводок и дашбордов. Один запрос возвращает полный набор данных, готовый для интерфейса.

  3. 03

    Классификация ABC по обороту

    Товары сортируются по общему обороту за период, копится накопительная доля. Первые товары, чья доля собрала 80% выручки — топовые (класс A). Следующие, до 95% — средние (B). Последние 5% — длинный хвост (C). Каждому товару присваивается класс. Это позволяет дать топовым приоритет в рекомендациях и закупать их чаще и точнее.

  4. 04

    Классификация XYZ по стабильности спроса

    Для каждого товара берутся продажи по месяцам, считается коэффициент вариации (стандартное отклонение к среднему). Меньше 10% — стабильный спрос (X), от 10 до 25% — переменный (Y), больше 25% — нерегулярный (Z). Если данных меньше двух месяцев — по умолчанию нерегулярный (мало истории — высокий риск). Класс напрямую определяет величину страхового запаса.

  5. 05

    Прогноз: скользящее среднее на 16 неделях

    Берутся продажи по неделям за последние 16 недель. Для каждого товара считается взвешенное среднее: вес недели растёт линейно от 1 (старая) до 16 (свежая). Свежие данные доминируют, старые «выветриваются». Это даёт реалистичный прогнозный среднедневной — система ловит реальный темп продаж, а не средние цифры по давно прошедшим месяцам.

  6. 06

    Расчёт тренда

    По тем же 16 неделям строится линейный тренд: процент изменения от первой недели к последней. +50% значит, что недельные продажи выросли в полтора раза за квартал. −30% — упали на треть. Тренд влияет на срочность рекомендации: товары с растущим трендом получают приоритет, отмирающие — кандидаты на снятие с ассортимента.

  7. 07

    Страховой запас по классу

    Для стабильного спроса — 3 дня, для переменного — 7, для нерегулярного — 14. Формула рекомендации: средняя продажа в день, умноженная на (срок поставки плюс страховой запас), минус текущий остаток. Стабильному запас минимальный — спрос предсказуем. Нерегулярному — больше, потому что в любой момент возможен всплеск. Класс товара напрямую меняет сумму закупки.

  8. 08

    Карта сроков доставки

    Хранится карта «поставщик → категория → дней доставки». У одного поставщика разные сроки на разные категории: бытовую технику он может привезти за 3 дня, мебель — за 14, электронику — за 5. Карта обновляется из справочника поставщиков и прайс-листов. Если по категории нет данных — берётся стандартное значение 7 дней.

  9. 09

    Выбор оптимального поставщика

    Для каждого товара система проходит всех поставщиков, у которых он есть, считает срок доставки по нужной категории и выбирает самого быстрого. На карточке рекомендации видно: «лучший поставщик — Альфа, доставка 3 дня». Закупщик не перебирает Excel-файлы — система сама нашла оптимум. Если самый быстрый временно недоступен, закупщик переключается на следующего, система это не блокирует.

  10. 10

    Сезонный коэффициент

    Для каждого товара по помесячным данным считается коэффициент текущего месяца: продажи этого месяца исторически делятся на среднее по всем месяцам. Купальники в мае — коэффициент 4,5, в феврале — 0,2. Этот коэффициент применяется к расчёту прогноза. Купальники закупаются в феврале — за 30+ дней до сезона, чтобы коллекция собралась к маю. Обогреватели — к октябрю.

  11. 11

    Порог минимальных продаж

    По умолчанию 2. Товары с продажами меньше двух штук за весь период (90 дней) пропускаются в рекомендациях. Это убирает «случайные» товары — те, что были проданы один раз случайно за квартал. Для аналитического сценария «покажи всё» порог можно опустить до нуля через параметр запроса.

  12. 12

    Три уровня срочности

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

  13. 13

    Производительность на больших каталогах

    Все запросы к базе делаются пачкой: продажи за период одним запросом с группировкой, остатки одним запросом, недельные продажи за 16 недель одним запросом, помесячные данные тоже одним. Никаких отдельных обращений к базе на каждый товар. Внутри расчёта данные индексируются по товару для мгновенного доступа. На каталоге в 50 000 товаров расчёт занимает 3–5 секунд, а не минуты.

  14. 14

    Кэширование

    Результат расчёта рекомендаций кэшируется по комбинации параметров запроса. При изменении остатков или товаров кэш автоматически сбрасывается. Повторный запрос отдаётся за миллисекунды из кэша. На больших каталогах это даёт ускорение в 10–50 раз — полный пересчёт по всей сети делается раз в час по расписанию или по событию изменения.

  15. 15

    Выгрузка в Excel

    Готовые рекомендации выгружаются в Excel. Колонки: артикул, название, классы по обороту и стабильности, текущий остаток на складе, общий остаток по фирме, дней до пустой полки, средняя продажа в день, прогноз, рекомендуемое количество, поставщик, срок поставки, сумма заказа. Сгруппировано по поставщикам — закупщик отправляет каждому свой блок. Цветные заливки по срочности: красный для горящих, жёлтый для пограничных, белый для нормы.

  16. 16

    Мониторинг остатков сети

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

  17. 17

    Связь со справочником поставщиков

    Сроки доставки и наличие товара у поставщиков берутся из справочника контрагентов и связанных с ними категорий. Неактивные поставщики не попадают в карту — они не предлагаются в рекомендациях. Когда обновляется прайс-лист поставщика (новые цены, новые сроки) — кэш рекомендаций автоматически инвалидируется, следующий запрос пересчитает с учётом изменений.

Интерфейс

Как это выглядит в системе

Рекомендации к закупке: класс, остаток, дни до конца, поставщик, к заказу
Продажи по неделям, прогноз и тренд
Сезонный коэффициент текущего месяца по категориям
Карточка рекомендации: срочность, классы, страховой запас
Сроки доставки: по поставщикам и категориям
Фильтры: склады, срочность, классы, поставщики, поиск
FAQ

Частые вопросы

Какие классы товаров считает система?

Девять через сочетание ABC × XYZ. ABC — классы по обороту: A — первые 80% выручки (топ-продажи), B — следующие 15% (середняки), C — последние 5% (длинный хвост). XYZ — классы по стабильности спроса: X — стабильный (разброс по месяцам меньше 10%), Y — переменный (10–25%), Z — нерегулярный (больше 25%). На стыке получается матрица 3×3: AX — стабильный топ, CZ — редко продаваемые с непредсказуемыми всплесками, и так далее. Каждый класс требует своей стратегии закупки, и система это учитывает.

Как считается страховой запас?

Класс XYZ напрямую задаёт количество дней страхового запаса. Для X-товаров (стабильный спрос — риск нехватки минимален) — 3 дня. Для Y — 7 дней. Для Z (нерегулярный спрос, могут быть всплески) — 14 дней. Рекомендация считается так: средние продажи в день × (срок поставки + страховые дни) − текущий остаток. На Z-товары запас всегда выше, чтобы амортизировать скачки.

Что такое взвешенное скользящее среднее?

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

Как считается тренд?

По тем же 16 неделям продаж строится линейная регрессия — насколько недельные продажи растут или падают. Возвращается процент изменения: +18% значит, что недельные продажи выросли почти в полтора раза за квартал; −30% — упали на треть. На карточке рекомендации видно «спрос растёт +18% за квартал». Это влияет на приоритет: товары с растущим трендом получают повышенную срочность — закупить больше, чем по плоскому среднему.

Что такое приоритет рекомендации?

Численная оценка срочности. В формуле учитывается: класс ABC (A важнее B, B важнее C), класс XYZ, текущий запас против ожидаемого расхода за срок поставки + страховой запас, сезонный коэффициент и тренд. Все рекомендации сортируются по приоритету по убыванию: вверху — те, что критичны (закончатся не дожидаясь поставки). Закупщик закрывает топ списка — и попадает в самое важное.

Как выбирается поставщик?

Для каждого товара система проходит всех поставщиков, у которых он есть, узнаёт срок поставки конкретно по категории этого товара и запоминает поставщика с минимальным сроком. Если у одного поставщика товар в нескольких категориях с разными сроками — берётся срок для нужной категории. Если данных по сроку нет — подставляется значение по умолчанию (7 дней). Закупщик видит «лучший поставщик: такой-то, доставка 3 дня» — без ручного перебора.

Что такое карта сроков поставки?

Двумерная таблица «поставщик × категория → срок доставки в днях». У одного поставщика разные сроки на разные категории — это реальность: у дистрибьютора бытовая техника может ехать 3 дня (склад рядом), мебель — 14 (заказывается под клиента), электроника — 5. Система держит всю карту в оперативной памяти, чтобы для каждой рекомендации мгновенно выбрать срок без обращения в базу.

Как работает сезонность?

По каждому товару берутся помесячные продажи за всю историю. Сезонный коэффициент текущего месяца = продажи_этого_месяца / среднее_по_всем_месяцам. Если в августе товар продаётся в 2,5 раза лучше среднего — коэффициент 2,5. Средние продажи в день умножаются на этот коэффициент: «обычно 3 в день, но сейчас сезон — закупаем на 7,5». Так купальники в мае попадают в рекомендации заранее, а не «уже поздно».

Можно ли отфильтровать рекомендации?

Да. Доступные фильтры: по поставщикам (показать только этого), по срочности (высокая/средняя/низкая), по классу ABC (A/B/C), по классу XYZ (X/Y/Z), по поиску (название или артикул). Фильтры комбинируются. Один параметр с тремя значениями даёт «срочные A-товары от такого-то поставщика» — и закупщик работает только с этим срезом.

Зачем нужен порог минимальных продаж?

По умолчанию — 2 продажи за анализируемый период (90 дней). Товары с продажами ниже порога в рекомендации не попадают — это случайные продажи, по которым прогноз построить нельзя. Если нужен аналитический сценарий «покажи всё» — порог можно опустить до 0 параметром запроса. Это страховка от шумных рекомендаций «закупить эту экзотику, продалась один раз за квартал».

Какие данные собираются для расчёта?

Больше десятка источников за один проход: агрегированные продажи за анализируемый период, остатки по складам пополнения, общий остаток по фирме, понедельные продажи за 16 недель (для прогноза и тренда), помесячные продажи (для XYZ-классификации и сезонности), сроки поставки по поставщикам и категориям, поставщики каждого товара, справочная информация по товарам. Из этого строятся классификации, прогнозы и рекомендации с приоритетом.

Как это работает на больших каталогах?

Все данные собираются пачечными запросами — один обращение в базу за продажами всех товаров, одно за остатками, одно за понедельными данными за 16 недель и т.д. Вместо тысяч маленьких запросов — десяток крупных. Внутри расчёта данные сгруппированы в карты «товар → данные» для мгновенного доступа. На каталоге 50 000 артикулов полный пересчёт укладывается в 3–5 секунд, повторный запрос из кэша — миллисекунды.

Как экспортировать в Excel?

Отдельная операция выгрузки в XLSX с теми же параметрами, что и обычная сводка. В файле колонки: артикул, название, ABC, XYZ, текущий остаток, дни до нуля, средние продажи в день, прогноз, рекомендуемое количество, поставщик, срок поставки, сумма заказа. Строки залиты цветом по срочности: красный — закончится не дожидаясь поставки, жёлтый — на грани, белый — запас в норме. Группировка по поставщикам — закупщик отправляет каждому свой блок.

Сколько уровней срочности?

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

Как обновляются сроки поставщиков?

Сроки хранятся в справочнике «поставщик + категория → дней до поставки». Обновляются вручную закупщиком или автоматически — при импорте прайс-листов поставщиков, где указаны сроки. После обновления кэш рекомендаций сбрасывается, и следующий запрос пересчитывает по новым срокам.

Какие операции в модуле?

Основная сводка с рекомендациями (с фильтрами по складам, периоду, категориям, типам, брендам, поставщикам, срочности, классам ABC/XYZ, поиску, порогу минимальных продаж) и выгрузка в Excel с теми же параметрами. Плюс отдельный модуль оперативного мониторинга остатков с собственной сводкой, справочниками складов и ценовых типов, настройками отображения пользователя, ручной правкой бонусов на товары и экспортом.

Что в модуле мониторинга остатков?

Это отдельный инструмент: сводная таблица остатков по всей сети, с настройками пользователя (какие колонки показывать, какая сортировка). Справочники складов и ценовых типов для фильтров. Точечная правка ручного бонуса на товар (используется в мотивации сотрудников). Экспорт. Это про оперативный контроль над массивом остатков сети, а не про рекомендации к закупке — задачу пополнения решает основной модуль.

Почему именно 16 недель?

Эмпирический выбор: 4 месяца — достаточно, чтобы поймать сезонные циклы внутри квартала, и не слишком много, чтобы устаревшие данные не глушили свежие тенденции. На меньшем периоде классификация XYZ становится неустойчивой — нужно минимум 8–12 точек, чтобы разброс посчитался значимо. Глубину можно адаптировать под отрасль, но в коробке — 16 недель.

Что подставляется по умолчанию?

Если у поставщика нет данных по сроку для категории — берётся 7 дней. Целевая оборачиваемость по умолчанию (для случаев, когда нет помесячных данных) — 14 дней. Эти значения дают предсказуемое поведение даже при неполных справочниках: новый поставщик без заполненных сроков не выпадает из рекомендаций, а считается по 7 дней, пока вы не уточните.

Кэшируются ли результаты?

Да. Ключ кэша строится из всех параметров запроса (склады, период, фильтры). При изменении остатков или товаров кэш сбрасывается, следующий запрос пересчитывает заново. На больших каталогах кэш даёт ускорение в десятки раз — классификация ABC/XYZ не пересчитывается на каждый запрос пользователя, а только при изменении исходных данных.

Кейсы

Что меняется на реальной сети

Сеть бытовой техники
24 магазина · 8 000 SKU · ежемесячный отчёт по нехваткам
Было
Закупщик каждый день вручную проверял остатки топ-100 товаров и решал «заказывать или нет». Решения принимались на чутье: «вроде помню, что хорошо продавался». Раз в месяц находили 30-50 SKU с нулевыми остатками неделями — упускали продажи. Параллельно складывались излишки по другим товарам.
Сделали
Перевели закупку на автоматические рекомендации. Каждое утро система выдаёт список с приоритетом: вверху — критичные позиции (A-товары с заканчивающимся запасом и небыстрой поставкой). Закупщик видит классы ABC/XYZ, текущий остаток, средние продажи в день, дни до нуля, лучшего поставщика и количество к заказу — всё одним списком, без разбора Excel.
Стало
Пустая полка по A-товарам исчезла. Излишки по C-товарам тоже — у них приоритет низкий, и они не заказываются «на всякий случай». Закупщик тратит 15 минут утром на топ рекомендаций вместо 2 часов разбора Excel.
0
out-of-stock на A-товарах
−47%
излишков по C
−87%
времени закупщика
Маркетплейс одежды
12 000 SKU с разной сезонностью
Было
Зимние и летние коллекции жили разной жизнью. Закупщик помнил про основные категории, но «забывал» о сезонных. Купальники в феврале не заказывали (явно — лето далеко), но в мае оказывалось, что коллекция собралась слишком поздно. Каждый сезон — упущенные продажи.
Сделали
Сезонный коэффициент текущего месяца. По каждому товару система берёт помесячные продажи за всю историю: продажи_этого_месяца / среднее_по_всем_месяцам. Купальники в мае — коэффициент 4,5, в феврале — 0,2. Этот коэффициент умножается на средние продажи в день при расчёте рекомендации. В феврале система рекомендует закупить купальников «сейчас, на сезон» с учётом срока поставки 30+ дней — чтобы коллекция подоспела к маю.
Стало
Сезонные товары приходят к нужному моменту. К началу сезона коллекция собрана. Закупщик не помнит каждую сезонность вручную — система сама учитывает помесячные данные. Сезонные продажи выросли.
+34%
сезонных продаж
×3
своевременных коллекций
< 5 мин
на сезонный анализ
Опт стройматериалов
4 склада · 6 000 SKU · скачки спроса
Было
Спрос на металлопрокат скачет: на одной неделе тонна в день, на следующей — 200 кг. Закупщик заказывал «как обычно» — либо излишек на месяцы, либо дефицит при всплеске. Нерегулярность спроса не учитывалась.
Сделали
Классификация XYZ по помесячным данным. Металлопрокат с разбросом продаж по месяцам больше 25% попадает в класс Z. Для Z-товаров система держит страховой запас 14 дней (против 3 дней для стабильных X-товаров). Рекомендация считается как: средние продажи × (срок поставки + 14 дней) − текущий остаток. На Z-товары запас всегда выше — амортизирует скачки спроса.
Стало
Из-за всплесков нет пустой полки. Излишки тоже под контролем — 14 дней страхового запаса, не «годовой запас на всякий случай». Закупщик видит «класс Z — стратегия запаса 14 дней» прямо в карточке рекомендации, понимает, почему так считается.
0
out-of-stock при всплесках
−38%
избыточных запасов Z
+18%
оборачиваемости
Электроника с несколькими поставщиками
32 магазина · 8 поставщиков с разными сроками
Было
Один и тот же iPhone был у трёх поставщиков с разными сроками: Distrib-A — 3 дня, Distrib-B — 7 дней, Distrib-C — 14 дней. Закупщик вручную выбирал в Excel, у кого что заказать. Часто выбирал по привычке Distrib-B, хотя у Distrib-A был тот же товар быстрее.
Сделали
Система автоматически выбирает поставщика с минимальным сроком поставки. Для каждого товара проходит всех поставщиков, у которых он есть, узнаёт срок именно по нужной категории и запоминает самого быстрого. На карточке рекомендации видно «лучший поставщик: Distrib-A, доставка 3 дня» — без ручного перебора.
Стало
Заказы автоматически уходят самому быстрому поставщику. Срок выполнения сократился на треть. Если самый быстрый временно недоступен (срок поставки вырос из-за форс-мажора) — система автоматически переключается на следующего по скорости.
−42%
среднего срока поставки
8
поставщиков под контролем
0
ошибок выбора
Розничная сеть с трендами
11 магазинов · меняющийся ассортимент
Было
Появлялись новые товары с растущим спросом — но средние продажи за период включали начальные «нулевые» недели. Закупщик видел среднее 1 штука в день, заказывал по этому, а реальный текущий темп был 5 в день. Через месяц получали дефицит, заказ задерживался.
Сделали
Расчёт линейного тренда по 16 неделям продаж. Если в новом товаре первые 8 недель было 0–1 продажа, а последние 8 — 5–7 в день, тренд получается +250%. Приоритет рекомендации включает этот тренд — рекомендация бьёт тревогу «спрос растёт, увеличить заказ», а не повторяет «как обычно».
Стало
Тренды улавливаются за 2–3 недели роста, не через 2 месяца. Новые «хиты» закупаются по правильному прогнозу с самого начала. Покупатель находит товар на складе — конверсия в покупку растёт.
< 3 нед
до улавливания тренда
+24%
конверсии новых товаров
0
пропущенных хитов
Региональная сеть DIY
9 магазинов · еженедельная закупка
Было
Раз в неделю закупщик собирал заявку для всех поставщиков. Открывал каждый файл Excel, разбирал, что у кого заказать. День работы — на одну закупку. К следующей неделе данные устаревали, заказы шли с задержкой.
Сделали
Выгрузка рекомендаций в Excel одним файлом, сгруппированным по поставщикам. Колонки: артикул, название, классы ABC/XYZ, текущий остаток, дни до нуля, рекомендуемое количество, поставщик, срок поставки, сумма. Строки залиты цветом по срочности — красные сразу бросаются в глаза. Один экспорт — все заявки за раз.
Стало
Закупка занимает 30 минут вместо дня. Все рекомендации в одном файле, сгруппированы по поставщикам — закупщик отправляет каждому свой блок. Заказы уходят в день получения рекомендаций — не через неделю.
30 мин
вместо дня
×16
ускорения закупок
< 1 ч
от рекомендации до заказа
Подробнее

Как модуль помогает розничной сети

Как устроен модуль автозаказа

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

Внутри модуль разбит на четыре зоны ответственности: классификация товаров (ABC по обороту и XYZ по стабильности, плюс сезонность), прогноз спроса (взвешенное среднее и тренд по 16 неделям), построение рекомендаций (формула страхового запаса, выбор поставщика, расчёт срочности), аналитика для сводных панелей. Каждая зона делает одну вещь и делает её хорошо — но снаружи это выглядит как один цельный инструмент.

Параметры запроса — широкие: на каких центральных складах считаем пополнение, за какой период анализируем продажи (по умолчанию 90 дней), какие категории, типы, бренды, поставщики интересны, нужно ли фильтровать по срочности или классам ABC/XYZ, есть ли поиск по названию или артикулу, какой минимальный порог продаж включать. Это позволяет одному инструменту обслуживать и общий обзор «вся сеть, всё подряд», и точечные срезы «срочные A-товары от такого-то поставщика».

Последовательность работы: сначала собираются продажи, остатки на складах пополнения и общий остаток по фирме. Параллельно — понедельные продажи за 16 недель для прогноза и тренда, помесячные продажи для XYZ-классификации и сезонности. Затем загружаются сроки поставщиков и привязки товаров к поставщикам — строится карта «товар → лучший поставщик». На все товары рассчитывается класс ABC. Дальше — главное: формирование рекомендаций с приоритетом, фильтрация по запросу и сортировка по срочности. На выходе — массив рекомендаций, готовый для отображения и для выгрузки в Excel.

Классификация ABC и XYZ: как товары делятся на категории

Классификация ABC — по обороту. Алгоритм простой: товары сортируются по продажам сверху вниз, потом проходим по списку и считаем накопительную долю от общей выручки. Первые товары, чья суммарная доля собрала 80% выручки, становятся классом A — это топ-продажи. Следующие, до 95%, — класс B (середняки). Остальные (последние 5% выручки) — класс C, длинный хвост. На реальной сети класс A — это обычно 5–10% ассортимента, который даёт 80% денег.

Классификация XYZ — по стабильности спроса. По каждому товару берутся помесячные продажи (12 значений за год) и считается разброс относительно среднего: насколько сильно продажи скачут от месяца к месяцу. Если разброс меньше 10% — класс X, стабильный спрос. 10–25% — класс Y, переменный. Больше 25% — класс Z, нерегулярный. Если истории меньше 2 месяцев — по умолчанию Z (мало данных = высокий риск).

Сезонный коэффициент текущего месяца считается по тем же помесячным данным: продажи_этого_месяца / среднее_по_всем_месяцам. Если в августе товар продаётся в 2,5 раза лучше среднего — коэффициент 2,5. Этот коэффициент умножается на средние продажи в день: «обычно 3 в день, но сейчас сезон — увеличиваем до 7,5». Купальники в мае попадают в рекомендации заранее, а не «уже поздно».

На стыке ABC и XYZ — матрица 3×3, девять классов: AX, AY, AZ, BX, BY, BZ, CX, CY, CZ. Каждый класс требует своей стратегии. AX (топ-продажи со стабильным спросом) — заказывать часто, малыми партиями, страховой запас минимальный. CZ (длинный хвост с нерегулярным спросом) — заказывать редко или вовсе снять с ассортимента; если заказываем — со страховым запасом побольше. Класс товара напрямую влияет на алгоритм рекомендации и на размер страхового запаса.

Прогноз спроса: взвешенное среднее и тренд

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

Почему именно 16 недель — это эмпирический выбор. 4 месяца достаточно, чтобы поймать сезонные циклы внутри квартала, и не слишком много, чтобы устаревшие данные не глушили свежие тенденции. На меньшем периоде классификация XYZ становится неустойчивой: разброс рассчитывается на минимум 8–12 точках, чтобы быть статистически значимым. На большем — теряется чувствительность к свежим переменам. Глубину можно подкрутить под отрасль, но в коробке — 16 недель.

Тренд считается по тем же 16 неделям — линейная регрессия недельных продаж. Возвращается процент изменения от первой недели к последней. +50% значит, что недельные продажи выросли в полтора раза за квартал. −30% — упали на треть. Это критично для двух категорий товаров: новых хитов (растущий тренд — нужно увеличить заказ, пока не словили дефицит) и отмирающих позиций (падающий тренд — повод снять с ассортимента, не закупать впрок).

На карточке рекомендации видно сразу три цифры: «обычно столько-то в день, прогноз столько-то, тренд +18% за квартал». Менеджер понимает, не просто что заказывать, но и почему именно столько. Если прогноз сильно отличается от плоского среднего — это видно, и решение принимается осознанно.

Формула рекомендации: страховой запас по XYZ и выбор поставщика

Размер страхового запаса задаётся классом XYZ. X-товары — 3 дня (стабильный спрос, риск нехватки минимален, страховка только на случай задержки поставки). Y — 7 дней (переменный спрос, нужен буфер). Z — 14 дней (нерегулярный, могут быть всплески, которые надо амортизировать). Если по товару нет XYZ-классификации (например, новый товар без истории) — подставляется 7 дней. Если у поставщика нет данных по сроку поставки для нужной категории — подставляется срок по умолчанию 7 дней. Эти значения дают предсказуемое поведение даже при неполных данных.

Для каждого товара алгоритм такой. Сначала проверяется порог минимальных продаж: если за период продано меньше двух штук — товар отсеивается. Берётся текущий остаток и общий остаток по фирме. Считаются средние продажи в день. Выбирается поставщик с минимальным сроком поставки. Подставляются страховые дни по классу XYZ. Применяется сезонный коэффициент: средние продажи умножаются на коэффициент текущего месяца. Применяется тренд: прогноз = взвешенное среднее × (1 + тренд%/100).

Дальше — собственно рекомендация. Целевой запас = прогноз × (срок поставки + страховые дни). Рекомендуемое количество = максимум из нуля и (целевой запас − текущий остаток). Если запас уже достаточный — рекомендация ноль, товар в список не попадает. Если не хватает — попадает с конкретной цифрой «закупить столько-то у такого-то поставщика».

Срочность считается по дням до нуля. Если товар закончится за срок поставки — высокая срочность (заказ опаздывает, надо закупать срочно). Если закончится за срок поставки плюс страховой запас — средняя (на грани). Если запас выше — низкая, можно отложить. Приоритет в общем списке — численная оценка, учитывающая класс ABC (A важнее B), класс XYZ, дни до нуля, сезонность и тренд. Все рекомендации сортируются по приоритету: вверху самое критичное.

Карта сроков поставки и выбор оптимального поставщика

У одного поставщика разные сроки на разные категории — это реальность. Дистрибьютор может работать с бытовой техникой за 3 дня (склад рядом, договор по основной номенклатуре), с мебелью — за 14 (заказывается от производителя), с электроникой — за 5. Система держит карту «поставщик + категория → срок» — двумерную таблицу, к которой можно мгновенно обратиться без обращения в базу.

Для каждого товара система проходит всех поставщиков, у которых он есть, и узнаёт срок именно по нужной категории. Если у поставщика есть товар в нескольких категориях с разными сроками — берётся срок для категории конкретного товара. Если данных вовсе нет — подставляется срок по умолчанию (7 дней). Из всех вариантов запоминается поставщик с минимальным сроком — это и есть «лучший» для данного товара.

Это критично для корректной рекомендации. Срок поставки напрямую входит в формулу страхового запаса. Если выбрать не самого быстрого, рекомендация раздуется: «подстраховаться на 14 дней» вместо «на 3 дня». Лишние закупки, лишние деньги в складских остатках. С автоматическим выбором быстрого поставщика этого не происходит.

На карточке рекомендации видно: «лучший поставщик: такой-то, доставка 3 дня». Закупщик понимает, к кому отправлять заказ, без ручного перебора прайсов. Если у выбранного поставщика временно нет данной позиции — закупщик переключается на следующего из списка, система это не блокирует. Сроки в карте обновляются вручную закупщиком или автоматически при импорте прайс-листов с указанными сроками.

Производительность: расчёт на 50 000 артикулов за секунды

Расчёт пополнения по большой сети — задача не из лёгких. Если делать наивно (для каждого товара отдельные запросы за продажами, остатками, поставщиками) — на 50 000 артикулов получится сотни тысяч обращений в базу. Минуты ожидания. Чтобы такого не было, все данные собираются пачечными запросами: один запрос за продажами всех товаров с группировкой, один за остатками на складах пополнения, один за общими остатками, один за понедельными продажами за 16 недель, один за помесячными.

Внутри расчёта данные сгруппированы для мгновенного доступа. Остатки разложены по карте «товар → остаток», помесячные продажи — по карте «товар → список месяцев», поставщики и сроки — в уже описанной карте «поставщик + категория». Когда основной цикл проходит по товарам, он не делает запросы — он берёт данные из памяти по ключу за константное время.

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

Полный пересчёт по всей сети можно запускать раз в час по расписанию или по событию (крупная приёмка, массовое списание). Закупщик утром получает уже посчитанные рекомендации без задержки. На дашборде директора процент актуальности виден в реальном времени без перегрузки базы.

Выгрузка в Excel и оперативный мониторинг остатков

Выгрузка в Excel — отдельная операция с теми же параметрами, что и обычная сводка. На выходе — XLSX-файл с колонками: артикул, название, классы ABC и XYZ, текущий остаток на складе, остаток по фирме, дни до нуля, средние продажи в день, прогноз, рекомендуемое количество, поставщик, срок поставки, сумма заказа. Строки залиты цветом по срочности: красный для высокой, жёлтый для средней, белый для низкой. Закупщик с одного взгляда видит, что закрывать первым.

Файл сгруппирован по поставщикам: сначала весь блок одного поставщика, потом следующего. Закупщик отправляет каждому поставщику его блок отдельным сообщением или сразу несколькими письмами. Один экспорт — все недельные заявки за раз, без раскопок Excel по одному файлу на поставщика.

Кроме модуля автозаказа есть отдельный модуль оперативного мониторинга остатков. Это другой инструмент с другой задачей — не про закупку, а про оперативный контроль массива остатков сети. Сводная таблица остатков по всем складам с настройками пользователя: какие колонки показывать, какая сортировка, какие фильтры по умолчанию. Справочники складов и ценовых типов. Точечная правка ручного бонуса на товар (используется в мотивации сотрудников). Экспорт в Excel.

Эти два модуля дополняют друг друга. Модуль автозаказа отвечает на вопрос «что заказать у поставщика, чтобы не словить дефицит». Мониторинг остатков — на вопрос «как у нас сейчас по остаткам в сети, всё ли в порядке, нет ли где провисания». Закупщик использует первый, директор и руководитель направления — второй. Вместе они закрывают и тактический, и оперативный контур работы с запасами.

Готовы автоматизировать?

Покажем модуль на ваших данных и подключим за 1–2 недели.