Когда завод впервые внедряет ERP, у руководства часто возникает иллюзия всемогущества: «Мы сейчас заведем в систему каждый станок, каждую дрель и каждый верстак как Рабочий Центр (WorkCenter). И будем назначать задачи конкретному станку!»
Знаете, чем это заканчивается через месяц? Сварщик Иванов сегодня варит деталь на посту №1, а завтра пост №1 сломался, и он перешел на пост №3. В реальности деталь делается, но в системе она висит в статусе «Просрочено» на посту №1. Мастеру цеха нужно зайти в ERP и вручную перебросить задачу с одного WorkCenter на другой. Естественно, мастер этого не делает. Система превращается в мертвый архив.
Удаляем лишнее: Код не врет
В ядре ModernERP Pro мы приняли волевое архитектурное решение: мы полностью удалили сущность `WorkCenter`. Вы можете убедиться в этом, заглянув в исходный код нашей Техкарты (`TechCardOperation`):
#[ORM\ManyToOne(targetEntity: Operation::class)]
private ?Operation $operation = null;
// Ссылка на ЦЕХ, где выполняется операция
#[ORM\ManyToOne(targetEntity: ProductionSection::class)]
private ?ProductionSection $section = null;
// #[ORM\ManyToOne(targetEntity: WorkCenter::class)]
// private ?WorkCenter $workCenter = null;
Как видите, код закомментирован. Мы оставили только две жесткие привязки:
- Участок/Цех (ProductionSection): Зона ответственности конкретного мастера (Сварочный участок, Заготовительный цех).
- Тип операции (Operation): Что именно нужно сделать (Лазерная резка, Сварка аргоном).
Как мы знаем, где находится заказ?
Если мы не отслеживаем станки, как директор видит загрузку завода? Секрет кроется в динамической генерации заданий (`ProductionTask`).
Когда вы запускаете Производственный Заказ (ProductionOrder), система берет Техкарту и нарезает её на отдельные Задания для каждого цеха. Каждое задание получает свой `sequence` (порядковый номер в очереди) и ложится в виртуальный лоток (Бэклог) конкретного Участка (`ProductionSection`).
Жизненный цикл операции в цеху:
- Деталь поступает в Заготовительный цех. Автоматически генерируется `ProductionTask` со статусом PENDING (Ожидает).
- Любой свободный рабочий на лазерном станке (неважно на каком именно!) подходит к Планшету мастера, сканирует штрихкод и нажимает «Начать». Статус меняется на IN_PROGRESS (В работе). Поле `$worker` заполняется его ФИО.
- По завершении он нажимает «Сдать деталь». Статус меняется на COMPLETED.
- Магия: Система видит, что `sequence 10` (Резка) завершен, и автоматически переводит `sequence 20` (Сварка) в Сварочном цеху в статус READY (Готово к началу).
🛠 Идеальная прозрачность без бюрократии
Нам не нужно знать инвентарный номер станка. Нам нужно знать, что "Заказ №401 находится на Сварочном участке, операция 'Сварка рамы' выполняется рабочим Сидоровым, статус IN_PROGRESS, прошло 45 минут из 60 плановых". Этой информации достаточно для 100% контроля сроков и себестоимости.
Интерактивная модель маршрута (Routing)
Посмотрите, как заказ движется по заводу без привязки к станкам. Нажимайте на статусы операций, чтобы увидеть, как завершение задачи в одном цеху разблокирует работу в следующем.
Маршрутная карта (Routing)
Заказ: Вентилятор ВР-80 (PO-1042)
Lean Push/Pull
Бизнес-результат
Отказавшись от микроменеджмента станков, мы добились феноменальной выживаемости системы на реальных заводах. В ModernERP Pro мастерам не нужно тратить время на перетаскивание задач между Рабочими Центрами. Они управляют потоком создания ценности, а система автоматически собирает себестоимость и начисляет сдельную зарплату.