| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod Initialize ( | 
|   MacroPlan owner | 
| ) | 
| { | 
|   TextBody: | 
|   [* | 
|     // 甄兰鸽 Jun-24-2024 (created) | 
|     owner.EnginePipelineSource( relflush ); | 
|     //ccunit                    := EnginePipelineReport::GetDefaultCCUnit(); | 
|     //dlunit                    := EnginePipelineReport::GetDefaultDLUnit(); | 
|     productparent             := EnginePipelineReport::GetDefaultProductParent(); | 
|     ccalineunit               := EnginePipelineReport::GetDefaultCCALineUnit(); | 
|     dlalienunit               := EnginePipelineReport::GetDefaultDLALineUnit() | 
|     ccmplineunit              := EnginePipelineReport::GetDefaultCCMPLineUnit() | 
|     dlmplineunit              := EnginePipelineReport::GetDefaultDLMPLineUnit(); | 
|     //allunit                   := EnginePipelineReport::GetDefaultAllUnit(); | 
|     source                    := owner.EnginePipelineSource( relnew, Name := EnginePipelineReport::GetDefaultName() ); | 
|     table                     := source.Report( relnew, ID := source.Name(), Name := source.Name() ); | 
|     showtable                 := source.Report( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsShow := true ); | 
|      | 
|     search                    := source.Search( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() ); | 
|      | 
|     products                  := construct( Product_MPs ); | 
|     //初始化列 | 
|     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() ); | 
|     endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() ); | 
|      | 
|     //生成生产和库存数据 | 
|     traverse( owner, StockingPoint_MP, stockingpoint ){ | 
|       unit                    := stockingpoint.Unit(); | 
|       parentunits             := unit.GetAllParent(); | 
|       //是否属于长春工厂 | 
|       iscc         := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit ); | 
|       //是否属于大连工厂 | 
|       isdl         := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit ); | 
|        | 
|       traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem()  | 
|                 and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent )  | 
|                 and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 ) ) ){ | 
|         weekstart           := owner.StartOfPlanning().Date(); | 
|         pispips             := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()  | 
|                                                     and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() ); | 
|         row := table.GetRow( pisp.ProductID() ); | 
|         traverse( pispips, Elements, pispip ){ | 
|           //天 | 
|           daycolumn         := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() ); | 
|           //周 | 
|           weekcolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(),  pispip.Start().Date() ); | 
|           supplyquantity    := [Number]pispip.NewSupplyQuantity();//四舍五入 | 
|           inventoryquantity := [Number]pispip.PlannedInventoryLevelEnd();//四舍五入 | 
|           //产量是加总 | 
|           if( iscc or isdl ){ | 
|             row.SetCellProductionValue( daycolumn, iscc, [Real]supplyquantity ); | 
|             row.SetCellProductionValue( weekcolumn, iscc, [Real]supplyquantity ); | 
|           } | 
|           //库存需要取最后一天 | 
|           row.SetCellInventoryValue( daycolumn, [Real]inventoryquantity ); | 
|        | 
|           if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){ | 
|             weekstart       := ( weekstart + Duration::Days( 7 ) ).Date(); | 
|                | 
|             row.SetCellInventoryValue( weekcolumn, [Real]inventoryquantity ); | 
|           }  | 
|         } | 
|       } | 
|     } | 
|      | 
|     //生成需求数据 | 
|     traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < endperiod.StartDate() and forecast.Quantity() <> 0  | 
|               and exists( forecast.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent ) | 
|               and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){ | 
|       row                 := table.GetRow( forecast.ProductID() ); | 
|     //  weekstart           := owner.StartOfPlanning().Date(); | 
|       traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){ | 
|         //天 | 
|         daycolumn         := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), psdip.StartDate() ); | 
|         //周 | 
|         weekcolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), psdip.StartDate() ); | 
|            | 
|         if( not isnull( daycolumn ) ){ | 
|           row.SetCellDemandValue( daycolumn, forecast.SalesSegmentName(), forecast.Quantity() ); | 
|         } | 
|         if( not isnull( weekcolumn ) ){ | 
|           row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() ); | 
|         } | 
|     //    if( psdip.StartDate() = ( weekstart + Duration::Days( 6 ) ).Date() or psdip.PeriodStart() = endperiod.StartDate() ){ | 
|     //      weekstart       := ( weekstart + Duration::Days( 7 ) ).Date(); | 
|     //    }  | 
|       } | 
|     } | 
|      | 
|     rows := selectsortedset( table, Row, row, row.Name() ); | 
|     i    := 0; | 
|     traverse( rows, Elements, e ){ | 
|       e.RowNr( i ); | 
|       i := i + 1; | 
|     } | 
|     showtable.Generate( search, products ); | 
|   *] | 
| } |