Concurrent capacities

Suppose there are 10 workers assigned to a specific task; of these, 2 are working on Production Order A, 2 on Prod. Order B, and 6 on Prod. Order C. I would like to model this with a Machine Center with Capacity 10, and use Concurrent Capacities of 2, 2 and 6 for the different Production Orders. But Navision is only assigning the MC to one Production Order at a time. Any ideas would be appreciated.

Alastair, Following are the remarks. 1) Pl. mention what is your capacity unit of measure. 2) Assigning concurrent Capacities increases the Total Capacity available from a m/c Center. In your case, The Available Capacities for relevent Production orders will be 20,20 & 60. This does not make the planning worksheet to divide and allocate capacities between production orders. 3) Ideal mapping cud be: Use finite capacities for the Machine center and also give proper start & End times for your production Orders. This will solve the problem. I feel if your start and end timings and the routings are proper than you can do this w/o Finit Capacities also. Regards, Dharmendra B. Desai

Dharmendra, thanks for your reply. I’ll be looking at it next week, as today I’m busy with other customisations. Have a good weekend.

Hi Alastair, I have solved this problem for one of our customers. In cu 99000774 Calculate routing line there are two functions, FinitelyLoadCapBack and FinitelyLoadCapForward. A small modification in both did the job. IF AvailCap > 0 THEN BEGIN ProdEndingDateTime := DatetimeMgt.Datetime CalendarEntry.Date,EndTime); LastProdOrderCapNeed.SETFILTER( "Ending Date-Time",'>= %1 & < %2',CalendarEntry."Starting Date-Time",ProdEndingDateTimeAddOneDay); LastProdOrderCapNeed.SETFILTER("Starting Date-Time",'>= %1 & < %2',CalendarEntry."Starting Date-Time",ProdEndingDateTime); // added 2 lines + LastProdOrderCapNeed.SETRANGE(Status,ProdOrder.Status); LastProdOrderCapNeed.SETRANGE("Prod. Order No.",ProdOrder."No."); // added 2 lines - IF LastProdOrderCapNeed.FIND('+') THEN Probably needless to say that this can have significant influence on the way the planning is working. What is a good solution for my customer is not necessary a good one for yours. Extensive testing is advised.

Hi Dharmendra, Willy, many thanks for your replies. I have been working on other customisations and taking some holidays, and have only got round to this again this week. Sorry for the long delay. I seem to get the desired results just by setting the InitValue for Concurr. Cap. to 0 (i.e. maximum) in Routing Line and Prod. Order Routing Line [always assuming finite capacities, i.e. the MC is capacity constrained]. If the user wants to reduce the Concurr. Cap. for a particular operation, they can do this from the Planning Worksheet after accessing the Routing line. I tried implementing your changes to the Planning Engine (I modified codeunit (99000810 Calculate Planning Route Line), but the change is quite similar):


IF AvailCap > 0 THEN BEGIN ProdEndingDateTime := DateTimeMgt.Datetime(CalendarEntry.Date,EndTime); LastProdOrderCapNeed.SETFILTER( “Ending Date-Time”,’>= %1 & < %2’,CalendarEntry.“Starting Date-Time”,ProdEndingDateTimeAddOneDay); LastProdOrderCapNeed.SETFILTER( “Starting Date-Time”,’>= %1 & < %2’,CalendarEntry.“Starting Date-Time”,ProdEndingDateTime); LastProdOrderCapNeed.SETRANGE(Active,TRUE); // IBS v1.0 ******************************************************************************* IF (ReqLine.“Ref. Order Type” = ReqLine.“Ref. Order Type”::“Prod. Order”) THEN BEGIN LastProdOrderCapNeed.SETRANGE(Status,ReqLine.“Ref. Order Status”); LastProdOrderCapNeed.SETRANGE(“Prod. Order No.”,ReqLine.“Ref. Order No.”); END; // **************************************************************************************** IF LastProdOrderCapNeed.FIND(’+’) THEN

As a result, the planning engine scheduled all 10 workers to Prod. Order A in the morning, and also to Prod. Order B at the same time. The available capacity for that day was not exceeded, but the schedule cannot be implemented - the 10 workers would need to work on A in the morning, and on B in the afternoon. So I think that I’ll just use standard Navision, with one modification (ConcurrCap defaulting to 0, not 1). There are some other changes that I have made (or want to make), These do not affect the functionality, they are only for the user’s convenience: 1. When users change the capacity of a Machine Center or Work Center, the new capacity will only take effect after the calendar has been calculated. I have now made a message to remind them of this when they change the capacity. 2. I will insert a FlowField in Prod. Order Routing Line to show the (max.) available Capacity between the Start- and End-dates. [edit: This cannot be done easily with a FlowField, so I wrote a function to calculate it.] 3. Put validation in Prod. Order Routing Line to prevent Concurr. Cap. from exceeding available Capacity at any point in time. Ideally, the total Concurr. Cap. should not exceed the Capacity. I think that might not work well with Willy’s code, but it might be OK with standard Navision. 4. When the Routing line end-time changes, the Req. Line and Prod. Order end-time is not updated. If I have time, I might fix that as it’s a nuisance.

Dharmendra, The Unit of Measure of my Work Centers is minutes (Machine Centers have no UoM field). Incidentally, I found that if the WC have Consolidated Calendar = No and Capacity = 1, then there is no point giving the associated MC large Capacity (when I did that, and increased the Concurrent Capacity, the Routing actually took longer to complete, which does not make sense to me). I do not agree that “Assigning concurrent Capacities increases the Total Capacity available from a m/c Center.” Navision help says that “You must not enter a Concurrent Capacity] that is greater than the Capacity.” (this is for Machine Centers). I seem to be getting good results just by making ConcurrCap default to 0 on the planning routing lines, though I still need to test it more.