6 ловушек MRP в 1С:ERP, срывающих производственный план

6 ловушек MRP в 1С:ERP, срывающих производственный план

Почему MRP в 1С:ERP не работает так, как ожидается

Модуль планирования потребностей в материалах (MRP) в 1С:ERP Управление предприятием 2 — один из самых мощных инструментов для производственных компаний. Он обещает автоматически рассчитать, сколько сырья нужно закупить, когда запустить производственные заказы и как синхронизировать работу всех подразделений. На практике же картина нередко выглядит иначе: план сформирован, но цех стоит без материалов, склад затоварен невостребованными позициями, а менеджеры по закупкам вручную корректируют то, что система «насчитала».

За годы работы с производственными предприятиями удалось систематизировать шесть наиболее распространённых и разрушительных ловушек при настройке MRP в 1С:ERP. Каждая из них способна в одиночку парализовать производственное планирование. Вместе они превращают дорогостоящую ERP-систему в источник хаоса вместо порядка.

Важно понимать: большинство этих проблем не являются багами системы. Это методологические ошибки в настройке, которые можно и нужно исправлять. Давайте разберём каждую подробно.

Ловушка 1: Некорректные нормы расхода в спецификациях

Симптомы проблемы

Первая и самая фундаментальная ловушка — ошибки в ресурсных спецификациях. MRP строит весь расчёт потребностей на основе нормативных данных: сколько материала A нужно для производства единицы продукта B. Если эти данные неверны, весь последующий расчёт превращается в математически точную ложь.

Типичные проявления этой ловушки:

  • Нормы расхода взяты из устаревших технологических карт и не обновлялись годами
  • В спецификации указан «идеальный» расход без учёта технологических потерь и брака
  • Одна и та же деталь числится под разными номенклатурными позициями в разных спецификациях
  • Не указаны альтернативные материалы, хотя на производстве они используются регулярно
  • Единицы измерения в спецификации не совпадают с единицами учёта на складе

Как проверить и исправить

Первый шаг — сравнительный анализ нормативного и фактического расхода. В 1С:ERP это можно сделать через отчёт «Анализ выполнения производственных заказов», сравнивая плановые и фактические списания материалов. Расхождение более 5% — сигнал для пересмотра спецификации.

Пример запроса для анализа отклонений нормативного расхода от фактического:

// Анализ отклонений расхода материалов по производственным заказам
// Запрос выполняется в контексте внешней обработки или отчёта

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
    ФактическийРасход.Номенклатура КАК Номенклатура,
    ФактическийРасход.ПроизводственныйЗаказ КАК ПроизводственныйЗаказ,
    ФактическийРасход.КоличествоФакт КАК КоличествоФакт,
    НормативныйРасход.КоличествоПлан КАК КоличествоПлан,
    (ФактическийРасход.КоличествоФакт - НормативныйРасход.КоличествоПлан) КАК Отклонение,
    ВЫБОР
        КОГДА НормативныйРасход.КоличествоПлан = 0
            ТОГДА 0
        ИНАЧЕ (ФактическийРасход.КоличествоФакт - НормативныйРасход.КоличествоПлан)
               / НормативныйРасход.КоличествоПлан * 100
    КОНЕЦ КАК ОтклонениеПроцент
ИЗ
    // Фактический расход из регистра накопления
    РегистрНакопления.ВыработкаПодразделений КАК ФактическийРасход
        ЛЕВОЕ СОЕДИНЕНИЕ
    // Нормативный расход из плановых данных заказа
    РегистрНакопления.ПотребностиВМатериалах КАК НормативныйРасход
    ПО ФактическийРасход.ПроизводственныйЗаказ = НормативныйРасход.ПроизводственныйЗаказ
        И ФактическийРасход.Номенклатура = НормативныйРасход.Номенклатура
ГДЕ
    ФактическийРасход.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    И АБС((ФактическийРасход.КоличествоФакт - НормативныйРасход.КоличествоПлан)
        / ВЫБОР КОГДА НормативныйРасход.КоличествоПлан = 0 ТОГДА 1
               ИНАЧЕ НормативныйРасход.КоличествоПлан КОНЕЦ * 100) > 5
УПОРЯДОЧИТЬ ПО
    ОтклонениеПроцент УБЫВ";

Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ТекущаяДата()));

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    // Обработка каждой строки с отклонением
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = СтрШаблон(
        "Номенклатура: %1 | Заказ: %2 | Отклонение: %3%",
        Выборка.Номенклатура,
        Выборка.ПроизводственныйЗаказ,
        Формат(Выборка.ОтклонениеПроцент, "ЧДЦ=1")
    );
    Сообщение.Сообщить();
КонецЦикла;

Практическая рекомендация: введите регламент ежеквартального аудита спецификаций с обязательным участием технологов. Все изменения норм должны проходить через утверждение главного технолога и фиксироваться в системе с датой вступления в силу — 1С:ERP позволяет хранить историю версий спецификаций.

Ловушка 2: Неправильная настройка горизонта планирования и временных буферов

Как горизонт планирования ломает MRP

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

Критически важные параметры, которые часто настраивают неверно:

  • Время выполнения заказа поставщика (Lead Time) — если указано 5 дней вместо реальных 20, система будет формировать заказы слишком поздно
  • Страховой запас — нулевое значение означает, что любая задержка поставки немедленно остановит производство
  • Минимальный размер партии — игнорирование условий поставщика приводит к нереалистичным заказам
  • Кратность партии — заказ 47 единиц при кратности 50 создаст проблемы

Правильная настройка параметров MRP для номенклатуры

В 1С:ERP параметры пополнения задаются в карточке номенклатуры на вкладке «Параметры пополнения» или через специализированный регистр сведений. Ключевой момент — параметры должны отражать реальность, а не желаемое.

// Процедура программной установки параметров пополнения номенклатуры
// Используется для массового обновления через обработку

Процедура УстановитьПараметрыПополнения(Номенклатура, Склад, ПараметрыПополнения)
    
    // Открываем набор записей регистра параметров обеспечения
    НаборЗаписей = РегистрыСведений.ПараметрыОбеспеченияНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);
    НаборЗаписей.Отбор.Склад.Установить(Склад);
    НаборЗаписей.Прочитать();
    
    Если НаборЗаписей.Количество() = 0 Тогда
        // Создаём новую запись если не существует
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Номенклатура = Номенклатура;
        НоваяЗапись.Склад = Склад;
    Иначе
        НоваяЗапись = НаборЗаписей[0];
    КонецЕсли;
    
    // Устанавливаем время выполнения заказа в днях
    НоваяЗапись.ВремяВыполненияЗаказа = ПараметрыПополнения.ВремяВыполнения;
    
    // Страховой запас в единицах хранения
    НоваяЗапись.СтраховойЗапас = ПараметрыПополнения.СтраховойЗапас;
    
    // Минимальный размер заказа
    НоваяЗапись.МинимальныйРазмерЗаказа = ПараметрыПополнения.МинЗаказ;
    
    // Кратность партии поставки
    НоваяЗапись.КратностьПартии = ПараметрыПополнения.Кратность;
    
    // Метод пополнения: MRP, фиксированный заказ, точка перезаказа
    НоваяЗапись.МетодОбеспечения = ПараметрыПополнения.Метод;
    
    // Сохраняем изменения
    НаборЗаписей.Записать();
    
    Сообщить(СтрШаблон("Параметры обновлены для: %1", Номенклатура));
    
КонецПроцедуры

// Пример вызова процедуры
Параметры = Новый Структура;
Параметры.Вставить("ВремяВыполнения", 21);    // 21 рабочий день
Параметры.Вставить("СтраховойЗапас", 150);    // 150 единиц
Параметры.Вставить("МинЗаказ", 500);           // минимум 500 единиц
Параметры.Вставить("Кратность", 100);          // кратно 100
Параметры.Вставить("Метод", Перечисления.МетодыОбеспечения.MRP);

УстановитьПараметрыПополнения(
    Справочники.Номенклатура.НайтиПоНаименованию("Сталь листовая 3мм"),
    Справочники.Склады.НайтиПоНаименованию("Основной склад"),
    Параметры
);

Ловушка 3: Игнорирование незавершённого производства при расчёте MRP

Призраки НЗП в балансе материалов

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

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

Корень проблемы — несвоевременное закрытие производственных заказов и оформление документов передачи материалов в производство. Если кладовщик передал материалы в цех, но документ «Передача материалов в производство» оформлен через неделю, весь этот период MRP работает с неверными данными.

Организационные и технические решения

Технически решение заключается в настройке оперативного учёта НЗП. В 1С:ERP необходимо:

  1. Настроить обязательное оформление документов передачи материалов в день фактической передачи
  2. Использовать мобильные рабочие места для кладовщиков и операторов цеха
  3. Настроить автоматическую проверку актуальности данных НЗП перед запуском расчёта MRP
  4. Ввести регламент ежесменного закрытия этапов производства

Для контроля актуальности данных НЗП можно использовать следующую проверку:

// Функция проверки актуальности данных НЗП перед запуском MRP
// Возвращает список проблемных производственных заказов

Функция ПроверитьАктуальностьНЗП(КоличествоДнейПорога = 3) Экспорт
    
    МассивПроблем = Новый Массив;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
        ПроизводственныеЗаказы.Ссылка КАК ПроизводственныйЗаказ,
        ПроизводственныеЗаказы.Дата КАК ДатаЗаказа,
        ПроизводственныеЗаказы.Статус КАК Статус,
        РАЗНОСТЬДАТ(ПроизводственныеЗаказы.ПлановаяДатаВыпуска,
                    ТЕКУЩАЯДАТА(), ДЕНЬ) КАК ПросрочкаДней,
        НЗП.КоличествоНЗП КАК КоличествоНЗП
    ИЗ
        Документ.ПроизводственныйЗаказ КАК ПроизводственныеЗаказы
            ЛЕВОЕ СОЕДИНЕНИЕ
        (ВЫБРАТЬ
            НЗПОстатки.ПроизводственныйЗаказ КАК ПроизводственныйЗаказ,
            СУММА(НЗПОстатки.КоличествоОстаток) КАК КоличествоНЗП
        ИЗ
            РегистрНакопления.НезавершённоеПроизводство.Остатки КАК НЗПОстатки
        СГРУППИРОВАТЬ ПО
            НЗПОстатки.ПроизводственныйЗаказ) КАК НЗП
        ПО ПроизводственныеЗаказы.Ссылка = НЗП.ПроизводственныйЗаказ
    ГДЕ
        ПроизводственныеЗаказы.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыПроизводственныхЗаказов.ВРаботе),
                                          ЗНАЧЕНИЕ(Перечисление.СтатусыПроизводственныхЗаказов.Выполняется))
        И РАЗНОСТЬДАТ(ПроизводственныеЗаказы.ПлановаяДатаВыпуска,
                      ТЕКУЩАЯДАТА(), ДЕНЬ) > &КоличествоДнейПорога
        И НЗП.КоличествоНЗП > 0
    УПОРЯДОЧИТЬ ПО
        ПросрочкаДней УБЫВ";
    
    Запрос.УстановитьПараметр("КоличествоДнейПорога", КоличествоДнейПорога);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ЗаписьПроблемы = Новый Структура(
            "ПроизводственныйЗаказ, ПросрочкаДней, КоличествоНЗП",
            Выборка.ПроизводственныйЗаказ,
            Выборка.ПросрочкаДней,
            Выборка.КоличествоНЗП
        );
        МассивПроблем.Добавить(ЗаписьПроблемы);
    КонецЦикла;
    
    Возврат МассивПроблем;
    
КонецФункции

Ловушка 4: Конфликт между MRP и ручными резервами

Когда резервы парализуют планирование

Четвёртая ловушка — одна из самых коварных, потому что возникает на стыке работы разных подразделений. Менеджеры по продажам резервируют материалы под конкретные заказы клиентов. Производственные плановщики резервируют полуфабрикаты под критические заказы. Снабженцы резервируют пришедшие партии под уже запущенные производственные заказы.

В результате MRP видит формально достаточный запас на складе, но большая его часть зарезервирована. Система не учитывает эти резервы корректно и либо планирует лишние закупки (если резервы учтены как «занятые»), либо не планирует необходимые (если резервы игнорируются).

Особенно опасны «мёртвые резервы» — резервы под отменённые заказы, которые никто не снял. Они могут годами висеть в системе, искажая картину доступного запаса.

Настройка корректного учёта резервов в MRP

В 1С:ERP необходимо чётко определить политику резервирования:

Тип резерва Как учитывается в MRP Рекомендация
Резерв под заказ клиента Уменьшает доступный остаток Учитывать, срок резерва ограничить
Резерв под производственный заказ Уменьшает доступный остаток Автоматически снимать при закрытии заказа
Страховой резерв Не уменьшает доступный остаток для MRP Настраивать через параметры обеспечения
Ручной резерв без основания Зависит от настройки Запретить или ограничить сроком

Для автоматической очистки устаревших резервов рекомендуется создать регламентное задание:

Найдите специалиста для решения этой задачи на koderion.ru