06.08.2013, 16:18 | #1 |
Участник
|
AX 2009 Сводное планирование, планирование операций
При планировании по операциям столкнулся с проблемой, что некоторые заказы на производство растягиваются на месяц. На сколько я понял, это связано с тем, что резервируя время на линии, он не резервирует его непрерывно, и если производство загружено на 100%, последним номенклатурам остается совсем немного свободного времени и оно распределено по дням кусками. Вот и получается, что операция делится на много мелких кусков и размазано на месяц назад от даты потребности. Все бы ничего, но тогда получается что все необходимое для производства сырье планируется практически на месяц раньше.
Может быть есть какой-то способ решения подобных проблем? |
|
07.08.2013, 09:03 | #2 |
Участник
|
Цитата:
резервируя время на линии, он не резервирует его непрерывно
Цитата:
назад от даты потребности
При таком подходе, при планировании одного последнего заказа вполне возможно что заполняются оставшиеся дыры. Возможно необходимо перепланировать не один заказ а несколько всвязке... Ну и наконец либо дыры, либо менять направление планирования, либо дату потребности... Система сама не может построить 100% оптимальную загрузку, так как заказы планируются на основе приоритетов (которые ставят "руками") и (или) даты потребности включением сортировки по этим признакам и указанием направления планирования и т.п. и т.д. (если планировать несколько заказов сразу или по-одному и тогда тот кто планирует решает в каком порядке). Прикиньте сами смогли бы вы постороить 100% оптимальный алгоритм... Для построения близкого к 100% оптимальной загрузке нужен человек, который будет перепланировать заказы, сдвигая их, возможно отменяя планирование одних заказов для перепланирования их позднее и т.п. и т.д. |
|
12.08.2013, 17:55 | #3 |
Участник
|
Спасибо за ответ, таких розливов не много, думаю с ними и правда нужно вручную справляться.
Появился еще один вопрос по резерву мощности. Как резервируются мощности, если в группе 2 рабочих центра, с разной производительностью? Для простоты включил планирование по заданиям, чтобы для каждого пр-ва был назначен свой РЦ. По идее и мощности должны считаться правильно, каждое пр-во ведь на конкретном РЦ стоит со своими настройками. Но не так. Он берет мощность из группы РЦ, при этом настройки каждого РЦ игнорирует. Если же указывать конкретный РЦ, то получается что второй РЦ не задействуется и планирование вообще осуществляется неправильно. Можно как-то задать настройки, чтобы мощность бралась из каждого РЦ в группе и планировалась правильно? В результате хочу перейти от планирования заданий на планирование операций и хотелось бы чтобы мощность правильно учитывалась. |
|
13.08.2013, 09:02 | #4 |
Участник
|
Цитата:
Для простоты включил планирование по заданиям
Планирование операций выполняется до планирования заданий, чтобы получить примерное представление о производстве. Длительность операций рассчитывается, но фактические значения времени начала и времени окончания не учитываются (в отличие от случая планирования заданий). Планирование заданий выполняется после планирования операций. Планирование заданий разбивает различные операции на конкретные задания, которые подробно планируются для каждого РЦ. При этом если указана группа РЦ, то по каждому заданию планируются конкретные РЦ из группы с учетом настроек по ограничению мощности или группы альтернативных РЦ, если мощности группы заняты. При планировании заданий фиксируется дата/время начала и окончания. Цитата:
Можно как-то задать настройки, чтобы мощность бралась из каждого РЦ в группе и планировалась правильно? В результате хочу перейти от планирования заданий на планирование операций и хотелось бы чтобы мощность правильно учитывалась.
|
|
|
За это сообщение автора поблагодарили: ikopyl (5), S.Kuskov (1). |
13.08.2013, 10:07 | #5 |
Участник
|
Ок, если по операциям не может мощность каждого РЦ в группе учитывать, а только указанную мощность группы РЦ фиг с ним. Почему когда по заданиям планирую, система конкретному заданию присваивает конкретный РЦ, при этом мощность берется не из конкретного РЦ, а из группы?
Например, есть группа CB300, в ней есть 2 РЦ 307 и 310. Мощность на группе 10 000 шт/ч. На 307 - 7 000 шт/ч, на 310 - 10 000 шт/ч. При планировании по заданиям, которые попадают на 307 РЦ, мощность планируется из расчета 10 000 шт/ч, а не 7 000 шт/ч, как задано в РЦ, т.е. берется из группы, а не из конкретного РЦ. |
|
13.08.2013, 10:45 | #6 |
Участник
|
Цитата:
РЦ 307 и 310
При выполнении планирования заданий галка ограничение по мощности стоит? Если галки стоят, то планирование должно выполнятся с ограничением по мощности, при этом учитываются мощности РЦ и резервирования других производственных заказов. И еще момент... при планировании с ограничением по мощности не учитывает резервирования, созданные спланированными заказами. |
|
13.08.2013, 10:52 | #7 |
Участник
|
Да... надеюсь времена в маршруте настроены... как минимум время выполнения, кол-во процесса, часы/время?
|
|
13.08.2013, 11:36 | #8 |
Участник
|
Галки ограничение по мощности стоят на каждом РЦ. Задана мощность, 7 и 10 тыс. соотв. Ед. измерения мощности: действий в час.,
На настройках сводного планирования стоит планирование заданий, и галка ограничения по мощностям. Также попробовал из спланированных заказов еще раз запустить перепланирование, по заданиям, с галкой учета мощностей. Результат тот же, мощность берет из группы РЦ. Времена в маршруте настроены, но на сколько я знаю, они используются только при настройке Расчет потребления по формуле "Стандарт". У меня же стоит "Мощность", т.е. настройки берутся из поля мощность на рабочих центрах. Попробовал еще один вариант, сейчас в маршруте указана группа РЦ, попробовал указать конкретный РЦ и в настройке альтернативный рабочий центр указал группу задач в 307 и 310 линиями. При планировании пр-ва использует 2 РЦ, т.е. настройка альтернативных центров работает, но мощность берет только из РЦ, который указан в маршруте. Т.е. если в маршруте указать 307, то мощность и на 307 и на 310 будет 7тыс. Если же 310 указать, то на оба мощность будет 10 тыс.... |
|
13.08.2013, 11:56 | #9 |
Участник
|
Да у нас формула "Стандарт"... "Мощность" не использовали... пардон
Хотя смысл планирования все равно упирается во время... расчитывается время процесса от мощности... Почему у вас так планируется не знаю к сожалению... больше разбирался с планированием в производстве, чем при сводном планировании... Цитата:
при планировании с ограничением по мощности не учитывает резервирования, созданные спланированными заказами
Последний раз редактировалось ansoft; 13.08.2013 в 12:22. |
|
13.08.2013, 12:27 | #10 |
Участник
|
Цитата:
Сообщение от SergeyPal
Например, есть группа CB300, в ней есть 2 РЦ 307 и 310. Мощность на группе 10 000 шт/ч. На 307 - 7 000 шт/ч, на 310 - 10 000 шт/ч. При планировании по заданиям, которые попадают на 307 РЦ, мощность планируется из расчета 10 000 шт/ч, а не 7 000 шт/ч, как задано в РЦ, т.е. берется из группы, а не из конкретного РЦ.
Т.е. либо у вас более ранняя версия 2009, в которой еще нет нужных исправлений, либо у вас проблемы с настройками. По настройкам: Для того, чтобы система анализировала мощность конретного РЦ, необходимо, чтобы в настройках маршрута параметр "Формула" был равен Мощность. |
|
13.08.2013, 13:02 | #11 |
Участник
|
Посмотрел классы для производства и сводного планирования используются те же...
В настройках модуля на закладке "Спланированные заказы" в группе "Планирование мощности" галка "Производство" стоит? В настройке сводного плана я так понял галка "Ограничение по мощности стоит"? |
|
13.08.2013, 14:18 | #12 |
Участник
|
Цитата:
Для того, чтобы система анализировала мощность конретного РЦ, необходимо, чтобы в настройках маршрута параметр "Формула" был равен Мощность
На планирование с ограничением по мощности или нет формула никак не влияет Достаточно взглянуть на этот базовый класс и его потомков: X++: static RouteCalcConsumption construct(RouteFormula formula = RouteFormula::Formula0) { switch(formula) { case (RouteFormula::Formula0) : return new RouteCalc_Formula0(); // Стандарт case (RouteFormula::Formula1) : return new RouteCalc_Formula1(); // Мощность case (RouteFormula::Formula2) : return new RouteCalc_Formula2(); case (RouteFormula::Formula3) : return new RouteCalc_Formula3(); } return new RouteCalc_Formula0(); } X++: // Стандарт Hours calcWrkCtrProcessTime(BOMCalcData calc, RouteMap primaryRoute, RouteOprMap primaryOpr, RouteMap secondaryRoute = primaryRoute, RouteOprMap secondaryOpr = primaryOpr, WrkCtrId wrkCtrId = primaryOpr.WrkCtrId ) { if (!primaryRoute.RecId || !primaryOpr.RecId || primaryRoute.OprPriority != RouteOprPriority::Primary ) { throw error("@SYS17275"); } return decround((calc.seriesSize() * (primaryRoute.AccError > 1 ? primaryRoute.AccError : 1) * (primaryOpr.ProcessTime/ minOne(primaryOpr.ProcessPerQty)) * minOne(primaryOpr.ToHours)),decimals); } X++: // Мощность Hours calcWrkCtrProcessTime(BOMCalcData calc, RouteMap primaryRoute, RouteOprMap primaryOpr, RouteMap secondaryRoute = primaryRoute, RouteOprMap secondaryOpr = primaryOpr, WrkCtrId wrkCtrId = primaryOpr.WrkCtrId ) { WrkCtrTable wrkCtrTable; RouteOprTime processTime; InventQty processNumOf; ; if (!primaryRoute.recId || !primaryOpr.recId || primaryRoute.oprPriority != RouteOprPriority::Primary) throw error("@SYS17275"); wrkCtrTable = WrkCtrTable::find(wrkCtrId); processTime = primaryOpr.processTime; processNumOf = primaryOpr.processPerQty; if (! wrkCtrTable.checkValid()) throw error("@SYS19457"); if (primaryOpr.formulaFactor1 > 0 && wrkCtrTable.capacity > 0 && primaryOpr.toHours > 0) { processTime = 1 / primaryOpr.toHours; processNumOf = wrkCtrTable.capacity / primaryOpr.formulaFactor1; } return decround((calc.seriesSize() * (primaryRoute.accError > 1 ? primaryRoute.accError : 1) * (processTime/ minOne(processNumOf)) * minOne(primaryOpr.toHours)),decimals); } Последний раз редактировалось ansoft; 13.08.2013 в 14:36. |
|
13.08.2013, 15:05 | #13 |
Участник
|
И все таки различие в классах есть...
При создании заданий для производства в классе WrkCtrJobLinkData_ProdJob методе load стоит такой кусочек: X++: _prodJobType = ProdJobType::construct(_prodRouteJob.JobType); _calcTime = _prodJobType.calcWrkCtrHours(masterData.bomCalcData(), _prodRoute, _prodRoute, _prodRoute, _prodRoute, '', '', _prodRouteJob.WrkCtrId) * 3600; _jobTime = _prodJobType.calcJobSchedJobTime(_prodRouteJob,_prodRoute,_calcTime); X++: _prodJobType = ProdJobType::construct(_reqRouteJob.JobType); _calcTime = _prodJobType.calcWrkCtrHours(masterData.BOMCalcData(), routeData.route(), _routeOpr, routeData.route(), _routeOpr, _reqTrans.ItemId, _reqTrans.CovInventDimId ) * 3600; _jobTime = _calcTime; Попробуйте покапать в эту сторону. |
|
13.08.2013, 15:19 | #14 |
Участник
|
И еще интересно версия какая у вас?
В 2009 RU5 RouteCalc_Formula1: X++: Hours calcWrkCtrProcessTime(BOMCalcData calc, RouteMap primaryRoute, RouteOprMap primaryOpr, RouteMap secondaryRoute = primaryRoute, RouteOprMap secondaryOpr = primaryOpr ) { WrkCtrTable wrkCtrTable; ... wrkCtrTable = WrkCtrTable::find(primaryOpr.wrkCtrId); ... } X++: Hours calcWrkCtrProcessTime(BOMCalcData calc,
RouteMap primaryRoute,
RouteOprMap primaryOpr,
RouteMap secondaryRoute = primaryRoute,
RouteOprMap secondaryOpr = primaryOpr,
WrkCtrId wrkCtrId = primaryOpr.WrkCtrId // УПС
)
{
WrkCtrTable wrkCtrTable;
...
wrkCtrTable = WrkCtrTable::find(wrkCtrId);
...
} |
|
13.08.2013, 16:46 | #15 |
Участник
|
Цитата:
Цитата:
По поводу кусков кода, к сожалению ничего не могу сказать, я не программист, я пользователь) Сейчас попрошу айтишников посмотреть. Спасибо за активную помощь!!! |
|
13.08.2013, 17:53 | #16 |
Участник
|
Похоже, что в рамках наших изменений код в 3-ке поднимали до 2009 RU7.
Во всяком случае RouteCalc_Formula1 выглядит так как пишет ansoft. |
|
14.08.2013, 10:56 | #17 |
Участник
|
У нас:
Kernel version:5.0.1500.4570 Application version: 5.0.1550.6491 Solution version: RU HRP 5.0.1500.6491.16 |
|
15.08.2013, 11:06 | #18 |
Участник
|
Да, у нас версия тоже Ru7. Получается что система как-то странно работает, при том что в сводном определяется конкретный РЦ, данные для расчета мощности он берет из РЦ указанном в маршруте. Это в куске кода относящемся к сводному планированию. При этом когда задание передаем уже в производство, там начинает работать другой код, который уже берет мощность из конкретного РЦ.
Может быть можно как-то настройками сделать, чтобы мощность уже при планировании по заданиям в своднике бралась из конкретного РЦ? Или придется код допиливать? |
|
15.08.2013, 11:20 | #19 |
Участник
|
Думаю тока код (см. _reqRouteJob.WrkCtrId с комментариями)...
Цитата:
При создании заданий в классе WrkCtrJobLinkData_ReqJob методе load стоит такой кусочек:
X++: _prodJobType = ProdJobType::construct(_reqRouteJob.JobType); _calcTime = _prodJobType.calcWrkCtrHours(masterData.BOMCalcData(), routeData.route(), _routeOpr, routeData.route(), _routeOpr, _reqTrans.ItemId, _reqTrans.CovInventDimId ) * 3600; _jobTime = _calcTime; X++: _prodJobType = ProdJobType::construct(_reqRouteJob.JobType); _calcTime = _prodJobType.calcWrkCtrHours(masterData.BOMCalcData(), routeData.route(), _routeOpr, routeData.route(), _routeOpr, _reqTrans.ItemId, _reqTrans.CovInventDimId // Здесь должен быть передан РЦ // из спланированного задания как-то так // { , _reqRouteJob.WrkCtrId // } // по аналогу проиводства _prodRouteJob.WrkCtrId ) * 3600; _jobTime = _calcTime; Последний раз редактировалось ansoft; 15.08.2013 в 11:28. |
|
Теги |
ax2009, сводное планирование |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|