AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.08.2013, 16:18   #1  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
AX 2009 Сводное планирование, планирование операций
При планировании по операциям столкнулся с проблемой, что некоторые заказы на производство растягиваются на месяц. На сколько я понял, это связано с тем, что резервируя время на линии, он не резервирует его непрерывно, и если производство загружено на 100%, последним номенклатурам остается совсем немного свободного времени и оно распределено по дням кусками. Вот и получается, что операция делится на много мелких кусков и размазано на месяц назад от даты потребности. Все бы ничего, но тогда получается что все необходимое для производства сырье планируется практически на месяц раньше.
Может быть есть какой-то способ решения подобных проблем?
Старый 07.08.2013, 09:03   #2  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Цитата:
резервируя время на линии, он не резервирует его непрерывно
вообще-то планирует всегда непрерывно по-возможности...
Цитата:
назад от даты потребности
возможно такая методика планирования создает дыры, так как планирование идет от указанной даты по каждому заказу...
При таком подходе, при планировании одного последнего заказа вполне возможно что заполняются оставшиеся дыры. Возможно необходимо перепланировать не один заказ а несколько всвязке...
Ну и наконец либо дыры, либо менять направление планирования, либо дату потребности...

Система сама не может построить 100% оптимальную загрузку, так как заказы планируются на основе приоритетов (которые ставят "руками") и (или) даты потребности включением сортировки по этим признакам и указанием направления планирования и т.п. и т.д. (если планировать несколько заказов сразу или по-одному и тогда тот кто планирует решает в каком порядке). Прикиньте сами смогли бы вы постороить 100% оптимальный алгоритм...

Для построения близкого к 100% оптимальной загрузке нужен человек, который будет перепланировать заказы, сдвигая их, возможно отменяя планирование одних заказов для перепланирования их позднее и т.п. и т.д.
Старый 12.08.2013, 17:55   #3  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
Спасибо за ответ, таких розливов не много, думаю с ними и правда нужно вручную справляться.
Появился еще один вопрос по резерву мощности. Как резервируются мощности, если в группе 2 рабочих центра, с разной производительностью? Для простоты включил планирование по заданиям, чтобы для каждого пр-ва был назначен свой РЦ. По идее и мощности должны считаться правильно, каждое пр-во ведь на конкретном РЦ стоит со своими настройками. Но не так. Он берет мощность из группы РЦ, при этом настройки каждого РЦ игнорирует.
Если же указывать конкретный РЦ, то получается что второй РЦ не задействуется и планирование вообще осуществляется неправильно.
Можно как-то задать настройки, чтобы мощность бралась из каждого РЦ в группе и планировалась правильно? В результате хочу перейти от планирования заданий на планирование операций и хотелось бы чтобы мощность правильно учитывалась.
Старый 13.08.2013, 09:02   #4  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Цитата:
Для простоты включил планирование по заданиям
Планирование операций использует мощность группы РЦ, а конкретные РЦ не выбираются.
Планирование операций выполняется до планирования заданий, чтобы получить примерное представление о производстве. Длительность операций рассчитывается, но фактические значения времени начала и времени окончания не учитываются (в отличие от случая планирования заданий).

Планирование заданий выполняется после планирования операций.
Планирование заданий разбивает различные операции на конкретные задания, которые подробно планируются для каждого РЦ. При этом если указана группа РЦ, то по каждому заданию планируются конкретные РЦ из группы с учетом настроек по ограничению мощности или группы альтернативных РЦ, если мощности группы заняты. При планировании заданий фиксируется дата/время начала и окончания.

Цитата:
Можно как-то задать настройки, чтобы мощность бралась из каждого РЦ в группе и планировалась правильно? В результате хочу перейти от планирования заданий на планирование операций и хотелось бы чтобы мощность правильно учитывалась.
По-моему несовместимые желания...
За это сообщение автора поблагодарили: ikopyl (5), S.Kuskov (1).
Старый 13.08.2013, 10:07   #5  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
Ок, если по операциям не может мощность каждого РЦ в группе учитывать, а только указанную мощность группы РЦ фиг с ним. Почему когда по заданиям планирую, система конкретному заданию присваивает конкретный РЦ, при этом мощность берется не из конкретного РЦ, а из группы?
Например, есть группа CB300, в ней есть 2 РЦ 307 и 310. Мощность на группе 10 000 шт/ч. На 307 - 7 000 шт/ч, на 310 - 10 000 шт/ч. При планировании по заданиям, которые попадают на 307 РЦ, мощность планируется из расчета 10 000 шт/ч, а не 7 000 шт/ч, как задано в РЦ, т.е. берется из группы, а не из конкретного РЦ.
Старый 13.08.2013, 10:45   #6  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Цитата:
РЦ 307 и 310
В их настройках стоит галка Ограничение по мощности?
При выполнении планирования заданий галка ограничение по мощности стоит?
Если галки стоят, то планирование должно выполнятся с ограничением по мощности, при этом учитываются мощности РЦ и резервирования других производственных заказов.

И еще момент... при планировании с ограничением по мощности не учитывает резервирования, созданные спланированными заказами.
Старый 13.08.2013, 10:52   #7  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Да... надеюсь времена в маршруте настроены... как минимум время выполнения, кол-во процесса, часы/время?
Старый 13.08.2013, 11:36   #8  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
Галки ограничение по мощности стоят на каждом РЦ. Задана мощность, 7 и 10 тыс. соотв. Ед. измерения мощности: действий в час.,
На настройках сводного планирования стоит планирование заданий, и галка ограничения по мощностям.
Также попробовал из спланированных заказов еще раз запустить перепланирование, по заданиям, с галкой учета мощностей. Результат тот же, мощность берет из группы РЦ.
Времена в маршруте настроены, но на сколько я знаю, они используются только при настройке Расчет потребления по формуле "Стандарт". У меня же стоит "Мощность", т.е. настройки берутся из поля мощность на рабочих центрах.

Попробовал еще один вариант, сейчас в маршруте указана группа РЦ, попробовал указать конкретный РЦ и в настройке альтернативный рабочий центр указал группу задач в 307 и 310 линиями. При планировании пр-ва использует 2 РЦ, т.е. настройка альтернативных центров работает, но мощность берет только из РЦ, который указан в маршруте. Т.е. если в маршруте указать 307, то мощность и на 307 и на 310 будет 7тыс. Если же 310 указать, то на оба мощность будет 10 тыс....
Старый 13.08.2013, 11:56   #9  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Да у нас формула "Стандарт"... "Мощность" не использовали... пардон
Хотя смысл планирования все равно упирается во время... расчитывается время процесса от мощности...
Почему у вас так планируется не знаю к сожалению... больше разбирался с планированием в производстве, чем при сводном планировании...
Цитата:
при планировании с ограничением по мощности не учитывает резервирования, созданные спланированными заказами
...возможно при этом не учитываются ограничения по мощности

Последний раз редактировалось ansoft; 13.08.2013 в 12:22.
Старый 13.08.2013, 12:27   #10  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Цитата:
Сообщение от SergeyPal Посмотреть сообщение
Например, есть группа CB300, в ней есть 2 РЦ 307 и 310. Мощность на группе 10 000 шт/ч. На 307 - 7 000 шт/ч, на 310 - 10 000 шт/ч. При планировании по заданиям, которые попадают на 307 РЦ, мощность планируется из расчета 10 000 шт/ч, а не 7 000 шт/ч, как задано в РЦ, т.е. берется из группы, а не из конкретного РЦ.
У нас такая проблема была в 3-ке. Для того, чтобы ее исправить мы импортировали код с 2009. После чего все заработало.
Т.е. либо у вас более ранняя версия 2009, в которой еще нет нужных исправлений, либо у вас проблемы с настройками.

По настройкам:
Для того, чтобы система анализировала мощность конретного РЦ, необходимо, чтобы в настройках маршрута параметр "Формула" был равен Мощность.
Старый 13.08.2013, 13:02   #11  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Посмотрел классы для производства и сводного планирования используются те же...

В настройках модуля на закладке "Спланированные заказы" в группе "Планирование мощности" галка "Производство" стоит?

В настройке сводного плана я так понял галка "Ограничение по мощности стоит"?
Старый 13.08.2013, 14:18   #12  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Цитата:
Для того, чтобы система анализировала мощность конретного РЦ, необходимо, чтобы в настройках маршрута параметр "Формула" был равен Мощность
Формула используется только для расчета времени процесса... в данном случае считать будет от мощности указанной в раб. центре...

На планирование с ограничением по мощности или нет формула никак не влияет
Достаточно взглянуть на этот базовый класс и его потомков:

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);
}
P.S. Если я не прав... поправьте пожалуйста.

Последний раз редактировалось ansoft; 13.08.2013 в 14:36.
Старый 13.08.2013, 15:05   #13  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
И все таки различие в классах есть...
При создании заданий для производства в классе 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);
При создании заданий в классе 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;
В prodJobType.calcWrkCtrHours во втором случае не передается рабочий центр и по умолчанию берется primaryOpr.WrkCtrId... у вас это видно группа РЦ.

Попробуйте покапать в эту сторону.
Старый 13.08.2013, 15:19   #14  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
И еще интересно версия какая у вас?
В 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);
    ...
}
Тоже в RU7:
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  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
Цитата:
Сообщение от Starling Посмотреть сообщение
По настройкам:
Для того, чтобы система анализировала мощность конретного РЦ, необходимо, чтобы в настройках маршрута параметр "Формула" был равен Мощность.
Настройка формула на линии равен "Мощность".

Цитата:
Сообщение от ansoft Посмотреть сообщение
В настройках модуля на закладке "Спланированные заказы" в группе "Планирование мощности" галка "Производство" стоит?
В настройке сводного плана я так понял галка "Ограничение по мощности стоит"?
Да, все так и настроено!

По поводу кусков кода, к сожалению ничего не могу сказать, я не программист, я пользователь) Сейчас попрошу айтишников посмотреть.

Спасибо за активную помощь!!!
Старый 13.08.2013, 17:53   #16  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Похоже, что в рамках наших изменений код в 3-ке поднимали до 2009 RU7.
Во всяком случае RouteCalc_Formula1 выглядит так как пишет ansoft.
Старый 14.08.2013, 10:56   #17  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
У нас:
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  
SergeyPal is offline
SergeyPal
Участник
 
11 / 10 (1) +
Регистрация: 11.06.2013
Да, у нас версия тоже Ru7. Получается что система как-то странно работает, при том что в сводном определяется конкретный РЦ, данные для расчета мощности он берет из РЦ указанном в маршруте. Это в куске кода относящемся к сводному планированию. При этом когда задание передаем уже в производство, там начинает работать другой код, который уже берет мощность из конкретного РЦ.
Может быть можно как-то настройками сделать, чтобы мощность уже при планировании по заданиям в своднике бралась из конкретного РЦ? Или придется код допиливать?
Старый 15.08.2013, 11:20   #19  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Думаю тока код (см. _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;
В prodJobType.calcWrkCtrHours во втором случае не передается рабочий центр и по умолчанию берется primaryOpr.WrkCtrId... у вас это видно группа РЦ.
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;
P.S. Не проверял... неплохо посмотреть в отладчике что будет в _reqRouteJob.WrkCtrId

Последний раз редактировалось ansoft; 15.08.2013 в 11:28.
Теги
ax2009, сводное планирование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Квест: Подружим Dynamics Ax 2009 Sp1 RU7 c SharePoint Foundation 2010 - Этап 2 Blog bot DAX Blogs 0 12.07.2011 14:11
Sample Design Patterns: Complexity tool - Dynamics AX 2009 Blog bot DAX Blogs 0 30.07.2010 15:05
DynamicsAxSCM: Changes in Sales and Transfer Order Picking from Microsoft Dynamics AX 4.0 to Dynamics AX 2009 Blog bot DAX Blogs 0 18.05.2009 02:05
Arijit Basu: AX 2009 Documents Blog bot DAX Blogs 0 30.08.2008 13:05
Dynamics AX: Business Intelligence in Dynamics AX 2009 (Part I) Blog bot DAX Blogs 0 26.06.2008 02:19
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:16.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.