# Планирование запасов

> Источник: https://wiki.virtualpos.ru/hc/purchase/demandcalculation  
> Обновлено: 2026-10-05  
> Где в программе: Запасы → Товарные запасы → карточка товара → Параметры планирования

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

## Общее описание

Параметры планирования задаются для каждого товара в каждой точке продаж — в разделе [Товарные запасы](https://wiki.virtualpos.ru/hc/stock/onhand).

1. **Оборачиваемость** — Система по истории продаж считает, за сколько дней продаётся одна единица товара. Значение можно задать и вручную.
1. **Алгоритм и уровни** — Для товара выбирается алгоритм — «Теория ограничений Голдратта» или «Минимакс» — и рассчитываются его уровни: целевой, минимальный и максимальный.
1. **Планируемый запас** — По алгоритму система считает, сколько товара должно быть в точке продаж.
1. **Потребность** — Планируемый запас минус остаток и товар в пути — столько нужно докупить. Это значение показывается в карточке запаса как «Рекомендовано к закупке».
1. **Заявка** — Потребность переносится в [заявку на пополнение](https://wiki.virtualpos.ru/hc/purchase/requisition), по ней создаются [заказы поставщикам](https://wiki.virtualpos.ru/hc/purchase/purchase_order).

> Цель планирования — закупать то, что нужно, и столько, сколько нужно.

## Основные понятия

- **Оборачиваемость расчётная** — За сколько дней продаётся одна единица товара по фактическим продажам в этой точке. Дни, когда товара не было в наличии, не учитываются. Показывается как «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 — закупка не требуется.

> **Примечание:**
> Для вашей компании могут быть настроены и другие алгоритмы расчёта — они появятся в том же списке «Алгоритм расчёта планируемого запаса».

## Параметры товара

Откройте **Запасы → Товарные запасы**, выберите точку продаж и нажмите на товар. Блок **«Параметры планирования»** находится под общей информацией.

![Параметры планирования в карточке запаса](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/card-planning.png)

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

### Изменение параметров

Кнопка **«Изменить параметры»** открывает окно, где можно задать планируемый запас вручную, пользовательскую оборачиваемость, алгоритм и его уровни.

![Изменение параметров планирования товара](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/params-edit.png)

После смены алгоритма или уровней нажмите **«рассчитать»** у планируемого запаса — иначе в карточке и заявке останется прежнее значение.

### Расчёт уровней для одного товара

Если выбран алгоритм Голдратта или Минимакс, в карточке есть кнопка **«Рассчитать целевой уровень»** или **«Рассчитать уровни min/max»**:

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

![Расчёт целевого уровня для одного товара](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/goldratt-single.png)

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

Кнопка **«История изменений»** показывает все рассчитанные значения уровня с датами и оборачиваемостью, на которой они были посчитаны.

![История изменений целевого уровня](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/history.png)

## Светофор уровня запаса

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

![Товары с параметрами планирования в списке запасов](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/list-planning.png)

| Цвет | Значение |
| --- | --- |
| Зелёный | Остаток равен планируемому запасу |
| Серый | Остаток больше планируемого — избыток |
| Жёлтый | Остаток меньше планируемого, но больше неснижаемого запаса |
| Красный | Остаток не больше неснижаемого запаса (если неснижаемый не задан — остатка нет) |
| Пустой кружок | Планируемый запас не задан |

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

Колонки «Планируемый запас» и «Неснижаемый запас» показываются по умолчанию. Максимальный запас, оборачиваемость, алгоритм, даты расчёта и параметры планирования 1–6 включаются через **«Действия» → Настроить колонки...**.

## Массовые операции

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

### Массовое изменение параметров

**«Действия» → Массовое изменение параметров...** задаёт алгоритм, уровни и пользовательскую оборачиваемость сразу для всех отобранных товаров. Поля со значением «(не менять)» не изменяются; чтобы очистить значение, укажите знак `-`. Планируемый запас можно только очистить.

![Массовое изменение параметров планирования](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/mass-update.png)

### Копирование с другой точки продаж

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

![Копирование параметров планирования](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/copy-params.png)

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

- *Копирование* **Не копировать** — Значение в текущей точке не меняется.
- *Копирование* **Копировать всегда** — Значение заменяется значением из точки-образца.
- *Копирование* **Заполнить только пустые** — Значение копируется, только если в текущей точке оно не задано.

Если алгоритм копируется, можно скопировать и его уровни: поле **«Копировать параметры алгоритма расчета»**.

### Загрузка через таблицу

**«Действия» → Загрузить через таблицу...** загружает параметры сразу по многим товарам. Добавьте нужные столбцы: «Алгоритм расчета планируемого запаса» (название алгоритма, как в списке), «Планируемый запас», «Неснижаемый запас», «Максимальный запас», «Параметр планирования 1–6», «Оборачиваемость пользовательская (дней)». Правила загрузки — в статье [Товарные запасы](https://wiki.virtualpos.ru/hc/stock/onhand#загрузка_остатков_через_таблицу).

### Расчёты

- **Рассчитать оборачиваемость** — Пересчитывает расчётную оборачиваемость отобранных товаров по истории продаж. Запускается кнопкой «Рассчитать» в окне, показывает ход расчёта; его можно прервать
- **Рассчитать планируемый запас...** — Пересчитывает планируемый запас по алгоритму каждого товара. Товары без алгоритма пропускаются
- **Рассчитать уровни планирования запасов → для алгоритма Голдратта... / для алгоритма Минимакс...** — Массово рассчитывает уровни по формулам выше для отобранных товаров с этим алгоритмом и известной оборачиваемостью
- **Сформировать заявку на пополнение** — Создаёт [заявку](https://wiki.virtualpos.ru/hc/purchase/requisition) на текущую точку продаж и заполняет её товарами, по которым есть потребность

![Массовый расчёт уровней для алгоритма Минимакс](https://wiki.virtualpos.ru/_media/hc/purchase/demandcalculation/minimax-levels.png)

В окнах расчёта уровней поле **«Пересчитать уровни»** ограничивает расчёт: «(пересчитать все)», «(пересчитать пустые)» или только уровни, которые рассчитывались больше N дней назад. Дата берётся из истории изменений уровней.

## Порядок действий перед заявкой

1. Проверьте [заказы поставщикам](https://wiki.virtualpos.ru/hc/purchase/purchase_order) точки: завершите полученные и отмените ненужные, чтобы «в пути» учитывался только товар, который действительно придёт.
1. Запустите **«Действия» → Рассчитать оборачиваемость** — она обновится с учётом последних продаж. При большом ассортименте расчёт удобно запускать накануне.
1. При необходимости пересчитайте уровни: **«Действия» → Рассчитать уровни планирования запасов**.
1. Запустите **«Действия» → Рассчитать планируемый запас...**.
1. Нажмите **«Действия» → Сформировать заявку на пополнение** или создайте заявку с автозаполнением в разделе [Заявки на пополнение](https://wiki.virtualpos.ru/hc/purchase/requisition).

## Права доступа

- `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` — Формирование заявки на пополнение из товарных запасов

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

| Сообщение или ситуация | Причина | Что делать |
| --- | --- | --- |
| Не задан алгоритм расчета планируемого запаса. Выберите его кнопкой «Изменить параметры». | У товара не выбран алгоритм | Выберите алгоритм в «Изменить параметры» |
| Нет данных об оборачиваемости — расчёт невозможен | У товара нет продаж в этой точке и не задана пользовательская оборачиваемость | Задайте пользовательскую оборачиваемость или уровни вручную |
| Массовый расчёт уровней обработал не все товары | Уровни считаются только для товаров с этим алгоритмом и известной оборачиваемостью | Задайте алгоритм и оборачиваемость или выберите «(пересчитать все)» |
| «Рекомендовано к закупке» не изменилось после смены уровней | Планируемый запас не пересчитан | Нажмите «рассчитать» у планируемого запаса или запустите массовый расчёт |
| Минимакс не предлагает закупку при остатке ниже минимума | Остаток вместе с товаром в пути не меньше минимального уровня | Проверьте заказы поставщикам в статусе «В пути» |
| Потребность занижена | В пути числятся заказы, товар по которым уже получен | Завершите полученные заказы поставщикам |

## Связанные разделы

- [Общие сведения о закупках](https://wiki.virtualpos.ru/hc/purchase/overview) — Обзор процесса, первоначальная настройка и сценарии работы
- [Товарные запасы](https://wiki.virtualpos.ru/hc/stock/onhand) — Остатки товаров, карточка запаса и загрузка параметров через таблицу
- [Заявки на пополнение запасов](https://wiki.virtualpos.ru/hc/purchase/requisition) — Заявки, в которые попадает рассчитанная потребность
- [Заказы поставщикам](https://wiki.virtualpos.ru/hc/purchase/purchase_order) — Заказы, товар по которым учитывается как «в пути»
- [Приёмка товара](https://wiki.virtualpos.ru/hc/stock/inflow) — Поступление заказанного товара на склад
