Как настроить план производства по фактической потребности в 1С:ERP и избежать отрицательных значений в расчетах?

Бизнес-аналитик 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

В процессе внедрения и эксплуатации подсистемы бюджетирования и планирования в 1С:ERP Управление предприятием (версий 2.4 и 2.5) пользователи часто сталкиваются с задачей построения чистого плана производства. Под "чистым" планом понимается производство только того объема продукции, который действительно необходим для покрытия фактического спроса за вычетом уже имеющихся складских остатков.

На первый взгляд, задача выглядит тривиально: достаточно из планового объема продаж или заказов клиентов вычесть свободные остатки на складах. Однако при попытке реализовать эту схему на практике через стандартный механизм заполнения планов по формулам аналитики и пользователи сталкиваются с неприятными техническими нюансами. В сформированных документах планирования начинают появляться отрицательные значения (минусы), либо система заполняет документ огромным количеством "нулевых" строк по всей номенклатуре предприятия. В этой статье мы подробно разберем, почему так происходит, и пошагово настроим систему для корректного расчета.

Выясняем причину: почему при расчете формулы «План - Остаток» лезут минусы и нули?

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

[ПланыПродаж] - [СвободныеОстатки]

Математически эта формула абсолютно верна, но логика СУБД при расчете в 1С:ERP работает иначе. Рассмотрим стандартную ситуацию на складе и в планах продаж:

  1. По позиции "Товар А" запланированы продажи в количестве 10 штук. На остатках склада числится 4 штуки. Расчет: 10 - 4 = 6. Система предлагает произвести 6 штук. Это корректный результат.
  2. По позиции "Товар Б" запланированы продажи в количестве 5 штук. На остатках склада лежит 12 штук. Расчет: 5 - 12 = -7. Нам не нужно ничего производить, но система записывает в документ планирования значение -7.
  3. По позиции "Товар В" продаж вообще не планируется (значение равно 0). Однако этот товар лежит на складе в количестве 50 штук. Расчет: 0 - 50 = -50. В документ планирования попадает строка с количеством -50.

Попытки пользователей обойти эту проблему с помощью логических условий в редакторе формул 1С, например, используя конструкцию ?([ПланыПродаж] <> 0, [ПланыПродаж] - [СвободныеОстатки], 0), часто приводят ко второй проблеме — "заполнению нулями по всему справочнику".

Это происходит из-за того, что система пытается рассчитать формулу для каждой номенклатурной позиции, у которой есть данные хотя бы по одному из операндов. Если у вас на складе лежит 5000 наименований товаров, по которым нет никаких планов продаж, система все равно рассчитает для них формулу и заполнит документ 5000 строк с нулевым значением. Работать с таким документом становится невозможно.

---

Решение №1: Использование функции Макс() для исключения отрицательных значений

Для того чтобы система не записывала отрицательные числа в документ, нам нужно принудительно ограничить нижнюю границу расчета нулем. В редакторе формул 1С:ERP для этого предусмотрена стандартная математическая функция Макс(Параметр1, Параметр2), которая возвращает наибольшее из двух значений.

Перепишем нашу формулу следующим образом:

Макс([ПланыПродаж] - [СвободныеОстатки], 0)

Давайте посмотрим, как теперь система обработает наши тестовые ситуации:

Логически эта схема работает безупречно и описывается следующим алгоритмом:


Если (ПланыПродаж - СвободныеОстатки) > 0 Тогда
    Результат = ПланыПродаж - СвободныеОстатки;
Иначе
    Результат = 0;
КонецЕсли;

---

Решение №2: Настройка правильного режима заполнения состава плана

Использование функции Макс() решило проблему с минусами, но в документе все еще могут оставаться лишние строки с нулевым количеством. Чтобы избавиться от них и не перегружать базу данных лишней информацией, нам необходимо правильно настроить Режим заполнения состава в правиле заполнения плана.

Выполним настройку по шагам:

  1. Откроем документ "План производства" и перейдем к заполнению спецификации (кнопка "Заполнить продукцию").
  2. В открывшемся окне настройки правил выберем вариант заполнения по источникам или формуле.
  3. Обратим внимание на важную настройку: "Режим заполнения состава". По умолчанию там может быть установлен режим "Из формулы". Нам необходимо переключить его в положение "Из плана" (или выбрать в качестве опорного источника "Планы продаж").

Как это работает?
Когда установлен режим "Из плана", система сначала собирает только те позиции номенклатуры, которые физически присутствуют в исходном документе-источнике (в нашем случае — в документе "План продаж"). И только для этого ограниченного списка позиций система начинает рассчитывать формулу с вычитанием остатков. Номенклатура, по которой не планируется никаких продаж, даже не попадет в расчет, что полностью исключит появление пустых или нулевых строк.

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

---

Решение №3: Переход на фактическую потребность по заказам клиентов

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

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

  1. В настройках источника данных планирования выберем предопределенный источник "Заказы клиентов".
  2. Настроим формулу планирования производства:

    Макс([ЗаказыКлиентов] - [СвободныеОстатки], 0)

  3. Укажем в правилах отбор по статусу заказов (например, учитывать только заказы в статусе "К обеспечению" или "К производству"), чтобы не брать в расчет черновые или отмененные сделки.

Такой подход позволяет автоматизировать классическую схему "Производство под заказ" в рамках объемно-календарного планирования.

---

Альтернативный вариант: "Тянущая" схема через обеспечение потребностей

Рассмотрим ситуацию шире. Если ваше предприятие работает в режиме жесткого позаказного производства ("day-to-day"), то классические документы планирования (Планы продаж, Планы производства) могут оказаться избыточным бюрократическим барьером. В 1С:ERP реализован мощный альтернативный механизм — Обеспечение потребностей, который работает без формул планирования.

Проанализируем, как работает эта "тянующая" схема:

  1. Менеджер регистрирует в системе документ Заказ клиента. В строках спецификации для продукции устанавливается вариант обеспечения "Обеспечивать обособленно" или просто "К обеспечению".
  2. Система автоматически фиксирует возникновение фактической потребности в этой номенклатуре.
  3. Снабженец или диспетчер производства открывает специальное интерактивное рабочее место "Формирование заказов по потребностям".
  4. На первом шаге обработка предлагает выбрать склад и методы обеспечения. Система сама анализирует текущие свободные остатки на складах, резервы под другие заказы, а также ожидаемые поступления (например, продукцию, которая уже выпускается в текущей смене).
  5. На выходе система рассчитывает чистый дефицит и автоматически формирует заполненные документы Заказ на производство ровно на недостающее количество продукции.

Использование рабочего места "Формирование заказов по потребностям" позволяет полностью уйти от ручного написания сложных формул, исключает человеческий фактор при расчете остатков и позволяет производству гибко реагировать на ежедневные изменения в портфеле заказов компании.

← На главную