Планирование запасов
Планирование помогает держать в каждой точке продаж столько товара, сколько нужно: система по истории продаж считает, какой запас нужен, сравнивает его с остатком и товаром в пути и подсказывает, сколько докупить. Рассчитанная потребность попадает в заявку на пополнение.
Общее описание
Параметры планирования задаются для каждого товара в каждой точке продаж — в разделе Товарные запасы.
- Оборачиваемость Система по истории продаж считает, за сколько дней продаётся одна единица товара. Значение можно задать и вручную.
- Алгоритм и уровни Для товара выбирается алгоритм — «Теория ограничений Голдратта» или «Минимакс» — и рассчитываются его уровни: целевой, минимальный и максимальный.
- Планируемый запас По алгоритму система считает, сколько товара должно быть в точке продаж.
- Потребность Планируемый запас минус остаток и товар в пути — столько нужно докупить. Это значение показывается в карточке запаса как «Рекомендовано к закупке».
- Заявка Потребность переносится в заявку на пополнение, по ней создаются заказы поставщикам.
Цель планирования — закупать то, что нужно, и столько, сколько нужно.
Основные понятия
| Оборачиваемость расчётная | За сколько дней продаётся одна единица товара по фактическим продажам в этой точке. Дни, когда товара не было в наличии, не учитываются. Показывается как «1 шт. в 36 дней» или «1.67 шт. в день» |
| Оборачиваемость пользовательская | Значение, заданное вручную. Если оно есть, расчёты используют его вместо расчётного. Нужно для новых товаров без продаж или когда спрос заранее известен |
| Планируемый запас | Сколько товара должно быть в точке продаж. Считается выбранным алгоритмом по кнопке «рассчитать» или массовым расчётом; сам не пересчитывается |
| Неснижаемый запас | Нижний порог запаса. У алгоритма Голдратта это поле называется «Целевой уровень запасов», у алгоритма Минимакс — «Минимальный уровень» |
| Максимальный запас | Верхний порог. У алгоритма Минимакс — «Максимальный уровень» |
| Остаток | Сумма остатков товара по всем характеристикам в точке продаж, включая отрицательные |
| В пути | Количество товара в заказах поставщикам этой точки в статусе «В пути» |
| Рекомендовано к закупке | Планируемый запас − (остаток + в пути). Если результат не больше нуля или планируемый запас не задан — «закупка не требуется» |
Алгоритмы расчёта
Теория ограничений Голдратта
Товар всегда дозаказывается до целевого уровня: сколько продали — столько и закупили. Подходит для постоянного ассортимента с регулярными продажами.
- Планируемый запас равен целевому уровню (с округлением вверх).
- Целевой уровень задаётся вручную или рассчитывается по формуле:
Целевой уровень = ⌈ продажи в день × (частота закупок + срок поставки) × (1 + страховой запас % / 100) ⌉
Продажи в день = 1 / оборачиваемость. Пример: оборачиваемость 0,6 дня (1,67 шт. в день), закупки раз в неделю, поставка 7 дней, страховой запас 30 %: 1,67 × (7 + 7) × 1,3 = 30,3 → целевой уровень 31. При остатке 15 и 2 шт. в пути рекомендовано докупить 31 − (15 + 2) = 14.
Минимакс
Товар заказывается, только когда запас опускается ниже минимума, и сразу до максимума. Подходит для товаров, которые выгоднее закупать партиями.
- Если остаток + в пути меньше минимального уровня, планируемый запас равен максимальному уровню.
- Иначе планируемый запас не задаётся — закупка не требуется.
Уровни задаются вручную или рассчитываются:
Минимальный уровень = ⌈ продажи в день × (частота закупок + срок поставки) × (1 + страховой запас % / 100) ⌉
Максимальный уровень = ⌈ продажи в день × (2 × частота закупок + срок поставки) × (1 + страховой запас % / 100) ⌉
Пример: продаётся 1 шт. в день, закупки раз в неделю, поставка 7 дней, страховой запас 30 %: минимум = ⌈1 × 14 × 1,3⌉ = 19, максимум = ⌈1 × 21 × 1,3⌉ = 28. При остатке 6 и пустом «в пути» 6 < 19, поэтому планируемый запас 28 и рекомендовано докупить 22. Если бы в пути было ещё 15 шт., 6 + 15 = 21 ≥ 19 — закупка не требуется.
Для вашей компании могут быть настроены и другие алгоритмы расчёта — они появятся в том же списке «Алгоритм расчёта планируемого запаса».
Параметры товара
Откройте Запасы → Товарные запасы, выберите точку продаж и нажмите на товар. Блок «Параметры планирования» находится под общей информацией.

- Ссылка «рассчитать» у планируемого запаса пересчитывает его по выбранному алгоритму. Если алгоритм не задан, появится сообщение «Не задан алгоритм расчета планируемого запаса. Выберите его кнопкой «Изменить параметры».»
- Ссылка «рассчитать» у расчётной оборачиваемости пересчитывает её по истории продаж.
- Под датами расчёта видно, когда значение считали в последний раз.
Изменение параметров
Кнопка «Изменить параметры» открывает окно, где можно задать планируемый запас вручную, пользовательскую оборачиваемость, алгоритм и его уровни.

После смены алгоритма или уровней нажмите «рассчитать» у планируемого запаса — иначе в карточке и заявке останется прежнее значение.
Расчёт уровней для одного товара
Если выбран алгоритм Голдратта или Минимакс, в карточке есть кнопка «Рассчитать целевой уровень» или «Рассчитать уровни min/max»:
- Укажите частоту закупок, средний срок поставки и страховой запас. Для стабильного спроса подходит страховой запас 20–40 %, для нестабильного — 80–250 %.
- Нажмите «Рассчитать». Под формой появится результат и ход расчёта.
- Проверьте значение и нажмите «Сохранить».
- Нажмите «рассчитать» у планируемого запаса, чтобы он учёл новый уровень.

Если у товара нет ни расчётной, ни пользовательской оборачиваемости, расчёт невозможен: в ходе расчёта будет строка «Нет данных об оборачиваемости — расчёт невозможен».
Кнопка «История изменений» показывает все рассчитанные значения уровня с датами и оборачиваемостью, на которой они были посчитаны.

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

| Цвет | Значение |
|---|---|
| Зелёный | Остаток равен планируемому запасу |
| Серый | Остаток больше планируемого — избыток |
| Жёлтый | Остаток меньше планируемого, но больше неснижаемого запаса |
| Красный | Остаток не больше неснижаемого запаса (если неснижаемый не задан — остатка нет) |
| Пустой кружок | Планируемый запас не задан |
Для алгоритма Голдратта неснижаемый запас равен целевому уровню, поэтому товар ниже целевого уровня сразу отмечается красным.
Колонки «Планируемый запас» и «Неснижаемый запас» показываются по умолчанию. Максимальный запас, оборачиваемость, алгоритм, даты расчёта и параметры планирования 1–6 включаются через «Действия» → Настроить колонки….
Массовые операции
Меню «Действия» в списке товарных запасов. Операции применяются ко всем товарам, отобранным фильтрами таблицы, — сначала отберите товары (например, по группе, производителю или наличию), потом запускайте операцию.
Массовое изменение параметров
«Действия» → Массовое изменение параметров… задаёт алгоритм, уровни и пользовательскую оборачиваемость сразу для всех отобранных товаров. Поля со значением «(не менять)» не изменяются; чтобы очистить значение, укажите знак -. Планируемый запас можно только очистить.

Копирование с другой точки продаж
«Действия» → Скопировать параметры c другой точки продаж… переносит настройки планирования из точки-образца в текущую — удобно при открытии новой точки без истории продаж.

Для каждого параметра — уровня планируемого запаса, пользовательской и расчётной оборачиваемости, алгоритма — выберите вариант:
- Копирование Не копировать Значение в текущей точке не меняется.
- Копирование Копировать всегда Значение заменяется значением из точки-образца.
- Копирование Заполнить только пустые Значение копируется, только если в текущей точке оно не задано.
Если алгоритм копируется, можно скопировать и его уровни: поле «Копировать параметры алгоритма расчета».
Загрузка через таблицу
«Действия» → Загрузить через таблицу… загружает параметры сразу по многим товарам. Добавьте нужные столбцы: «Алгоритм расчета планируемого запаса» (название алгоритма, как в списке), «Планируемый запас», «Неснижаемый запас», «Максимальный запас», «Параметр планирования 1–6», «Оборачиваемость пользовательская (дней)». Правила загрузки — в статье Товарные запасы.
Расчёты
| Рассчитать оборачиваемость | Пересчитывает расчётную оборачиваемость отобранных товаров по истории продаж. Запускается кнопкой «Рассчитать» в окне, показывает ход расчёта; его можно прервать |
| Рассчитать планируемый запас… | Пересчитывает планируемый запас по алгоритму каждого товара. Товары без алгоритма пропускаются |
| Рассчитать уровни планирования запасов → для алгоритма Голдратта… / для алгоритма Минимакс… | Массово рассчитывает уровни по формулам выше для отобранных товаров с этим алгоритмом и известной оборачиваемостью |
| Сформировать заявку на пополнение | Создаёт заявку на текущую точку продаж и заполняет её товарами, по которым есть потребность |

В окнах расчёта уровней поле «Пересчитать уровни» ограничивает расчёт: «(пересчитать все)», «(пересчитать пустые)» или только уровни, которые рассчитывались больше N дней назад. Дата берётся из истории изменений уровней.
Порядок действий перед заявкой
- Проверьте заказы поставщикам точки: завершите полученные и отмените ненужные, чтобы «в пути» учитывался только товар, который действительно придёт.
- Запустите «Действия» → Рассчитать оборачиваемость — она обновится с учётом последних продаж. При большом ассортименте расчёт удобно запускать накануне.
- При необходимости пересчитайте уровни: «Действия» → Рассчитать уровни планирования запасов.
- Запустите «Действия» → Рассчитать планируемый запас….
- Нажмите «Действия» → Сформировать заявку на пополнение или создайте заявку с автозаполнением в разделе Заявки на пополнение.
Права доступа
console.onhands.updatetocparam | Изменение параметров планирования товара, расчёт и сохранение уровней по одному товару |
console.onhands.recalctocbuffer | Расчёт планируемого запаса по одному товару |
console.onhands.recalcturnover | Расчёт оборачиваемости по одному товару |
console.onhands.ajaxcalcturnover | Массовый расчёт оборачиваемости |
console.onhands.ajaxcalcdemand | Массовый расчёт планируемого запаса |
console.onhands.ajaxcalcgoldrattlevels | Массовый расчёт уровней для алгоритма Голдратта |
console.onhands.ajaxcalcminimaxlevels | Массовый расчёт уровней для алгоритма Минимакс |
console.onhands.ajaxmassupdate | Массовое изменение параметров |
console.onhands.ajaxcopytocparams | Копирование параметров с другой точки продаж |
console.onhands.createrequisition | Формирование заявки на пополнение из товарных запасов |
Частые ошибки
| Сообщение или ситуация | Причина | Что делать |
|---|---|---|
| Не задан алгоритм расчета планируемого запаса. Выберите его кнопкой «Изменить параметры». | У товара не выбран алгоритм | Выберите алгоритм в «Изменить параметры» |
| Нет данных об оборачиваемости — расчёт невозможен | У товара нет продаж в этой точке и не задана пользовательская оборачиваемость | Задайте пользовательскую оборачиваемость или уровни вручную |
| Массовый расчёт уровней обработал не все товары | Уровни считаются только для товаров с этим алгоритмом и известной оборачиваемостью | Задайте алгоритм и оборачиваемость или выберите «(пересчитать все)» |
| «Рекомендовано к закупке» не изменилось после смены уровней | Планируемый запас не пересчитан | Нажмите «рассчитать» у планируемого запаса или запустите массовый расчёт |
| Минимакс не предлагает закупку при остатке ниже минимума | Остаток вместе с товаром в пути не меньше минимального уровня | Проверьте заказы поставщикам в статусе «В пути» |
| Потребность занижена | В пути числятся заказы, товар по которым уже получен | Завершите полученные заказы поставщикам |