Quintiq file version 2.0 
 | 
#parent: #root 
 | 
MethodOverride CollectData () as owning structured_Object 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Retrieve all the PlanningSalesDemandInPeriod, exclude demand in higher level 
 | 
    data := selectsortedset( this.GetMacroPlan(), SalesDemand.PlanningSalesDemandInPeriod, sdip, 
 | 
                             not sdip.MasterSalesDemand().IsSoftDeleted()  
 | 
                             and sdip.ProductInStockingPoint_MP().IsLeaf()  
 | 
                             and sdip.FulfilledQuantity() >0.0,// only interested on fulfilled sdip 
 | 
                             sdip.SalesSegmentName(), sdip.StockingPointID(), sdip.ProductID() ); 
 | 
     
 | 
     
 | 
     
 | 
    // pass only unique BaseSalesDemandInPeriod 
 | 
    uniqueData := construct( BaseSalesDemandInPeriods ); 
 | 
     
 | 
    // initialize pointers 
 | 
    pointerSalesSegment  := ''; 
 | 
    pointerStockingPoint := ''; 
 | 
    pointerProduct       := ''; 
 | 
     
 | 
    traverse( data, Elements, sdip ) 
 | 
    { 
 | 
      if( pointerSalesSegment  <> sdip.SalesSegmentName() or 
 | 
          pointerStockingPoint <> sdip.StockingPointID()  or 
 | 
          pointerProduct       <> sdip.ProductID() ) 
 | 
      { 
 | 
        uniqueData.Add( sdip ); 
 | 
     
 | 
        // update pointers 
 | 
        pointerSalesSegment  := sdip.SalesSegmentName(); 
 | 
        pointerStockingPoint := sdip.StockingPointID(); 
 | 
        pointerProduct       := sdip.ProductID(); 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return &uniqueData; 
 | 
  *] 
 | 
} 
 |