Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method CreateSupportData ( 
 | 
  LibOpt_Task task, 
 | 
  RunContextForCapacityPlanning runcontext 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    starttime := OS::PrecisionCounter();  
 | 
    optimization := this.Optimization().astype( Optimization );  
 | 
    macroplan := optimization.MacroPlan();  
 | 
     
 | 
    macroplan.IsOptimizerRunning( true ); // will generate propagation for estimated improvement scores 
 | 
     
 | 
    optimization.StorePreviousPlanningSpecificationValuesForShelfLife();  
 | 
     
 | 
    optimization.SetOptimizerPuzzle( task.Scope().GetOptimizerPuzzleInOptimizerRun(), optimization.GetOptimizerPeriods( runcontext.FirstPeriod_MP(), runcontext.LastPeriod_MP() ) );  
 | 
     
 | 
    lanelegs_foroptimization := selectset( macroplan.GetUnits(), Elements.AllChildren.AsChildren.LaneLegForOptimization, laneleg, true ); 
 | 
     
 | 
    // Clean forbidden disaggregated sdips 
 | 
    macroplan.SynchronizeDisaggregatedSalesDemandInPeriod( true );  
 | 
     
 | 
    if ( runcontext.UseCampaignSequenceOptimizer() )  
 | 
    { 
 | 
      optimization.GenerateCampaignCombis();  
 | 
    } 
 | 
     
 | 
    this.MetaOptimizerCreateSupportDataShiftOptimizer( macroplan, task.Scope().GetOptimizerPuzzleInOptimizerRun(), runcontext );  
 | 
     
 | 
    // Select the instances for optimization 
 | 
    if ( not runcontext.IsSmartPlan() ) // for smart plan we do not need to create objects ( these are created on the fly searching upstream/downstream, also adding period for shelf life) 
 | 
    { 
 | 
      periods := selectset( macroplan, Period_MP, period, true, period.IsInOptimizerPuzzle() );  
 | 
       
 | 
      updatedtrips := construct( Trips ); 
 | 
      // Create all possible combi of trips as optimizer input 
 | 
      optimization.CreateTrips( lanelegs_foroptimization, periods, updatedtrips ); 
 | 
       
 | 
      if ( runcontext.IsMetaIteration() )  
 | 
      { 
 | 
        optimization.CreatePeriodTaskOperations( periods );  
 | 
      } 
 | 
      optimization.ShelfLifeExtendHistoricalPeriods( false, null(  ProductInStockingPoint_MPs, owning ) ); // temporarily add period to accomodate shelf life if needed 
 | 
    } 
 | 
     
 | 
    Transaction::Transaction().Propagate(); // need relations for created data. Need it in same transaction because of pit pruning 
 | 
       
 | 
    endtime := OS::PrecisionCounter();  
 | 
    durationsec := ( endtime - starttime ) / OS::PrecisionCounterFrequency();  
 | 
    debuginfo( 'Time for creating support data ( incl. propagation):', durationsec, 'sec' ); 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |