| 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; | 
|   *] | 
| } |