| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod GenerateData ( | 
|   MacroPlan macroPlan, | 
|   InterfaceDataset interfaceDataset | 
| ) | 
| { | 
|   Description: '生成计划库存存档数据' | 
|   TextBody: | 
|   [* | 
|     //interfaceDataset.InventoryPlanArchiveVersion( relflush ); | 
|     info( '-------------------------Start---------------------'); | 
|     allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit(); | 
|     name                   := InventoryPlanArchiveVersion::GetDefaultName(); | 
|     search                 := interfaceDataset.InventoryPlanArchiveVersionSearch( relnew, Product := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() ); | 
|     table                  := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, not version.IsShow() ); | 
|     if( isnull( table ) ){ | 
|       table                := interfaceDataset.InventoryPlanArchiveVersion( relnew, ID := name, Name := name ); | 
|     } | 
|     showtable              := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, version.IsShow() ); | 
|     if( isnull( showtable ) ){  | 
|       showtable               := interfaceDataset.InventoryPlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true ); | 
|     } | 
|     periods                := selectuniquevalues(  macroPlan, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day() | 
|                                                    and not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = period.StartDate() ), period.StartDate() ); | 
|     if( periods.Size() > 0 ){ | 
|       table.GenerateColumn( periods, false ); | 
|     } | 
|     actinventorytree       := NamedValueTree::Create(); | 
|     inventoryqrys          := construct( Reals ); | 
|     inventoryindex         := 0; | 
|     traverse( interfaceDataset,InterfaceLoginfo.MachineStockData, actinventory ){ | 
|       inventoryqrys.Add( actinventory.Total() ); | 
|       actinventoryKey      := actinventory.MaterialNo() + actinventory.DDay().AsQUILL(); | 
|       actinventoryhandle   := actinventorytree.GetHandle( actinventoryKey ); | 
|       actinventorytree.Root().AddChild( actinventoryhandle,inventoryindex );  | 
|       inventoryindex       := inventoryindex + 1; | 
|     } | 
|     traverse( interfaceDataset,InterfaceLoginfo.FinishedEngineInventory,actinventory ){ | 
|       product               := selectobject( macroPlan, Product_MP, product, product.Notes() = actinventory.FourCode() ); | 
|       if( not isnull( product ) ){ | 
|         inventoryqrys.Add( actinventory.Total() ); | 
|         actinventoryKey     := actinventory.FourCode() + actinventory.DDay().AsQUILL(); | 
|         actinventoryhandle  := actinventorytree.GetHandle( actinventoryKey ); | 
|         actinventorytree.Root().AddChild( actinventoryhandle,inventoryindex );  | 
|         inventoryindex      := inventoryindex + 1; | 
|       } | 
|     } | 
|     traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pispmp, not pispmp.IsSystem() and pispmp.IsLeaf() ) { | 
|       unit                 := ifexpr( pispmp.StockingPointID().Regex( "大连" ) or pispmp.StockingPointID().Regex( "DL" ), FinancialProductionReport::GetDefaultDLUnit(), FinancialProductionReport::GetDefaultCCUnit() ); | 
|       inventoryrow         := table.GetRowByUnit( pispmp.Product_MP(), unit ); | 
|       traverse ( pispmp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, not pispippl.IsPeriodFrozen() ) { | 
|         startdate          := pispippl.Start().Date(); | 
|         daycolumn          := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), startdate ); | 
|         weekcolumn         := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), startdate ); | 
|         monthcolumn        := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), startdate ); | 
|         actinventoryKey    := pispmp.ProductID() + startdate.AsQUILL(); | 
|         actinventoryhandle := actinventorytree.GetHandle( actinventoryKey ); | 
|         actinventoryindex  := guard( actinventorytree.Root().Child( actinventoryhandle ),null( NamedValue )); | 
|          | 
|         actinventoryqty    := 0.0; | 
|         if( not isnull( actinventoryindex )){ | 
|           actinventoryqty  := inventoryqrys.Element( actinventoryindex.GetValueAsNumber() ); | 
|         } | 
|         inventoryrow.SetQuantity( daycolumn, pispippl.InventoryLevelEnd(), actinventoryqty ); | 
|         inventoryrow.SetQuantity( weekcolumn, pispippl.InventoryLevelEnd(), actinventoryqty ); | 
|         inventoryrow.SetQuantity( monthcolumn, pispippl.InventoryLevelEnd(), actinventoryqty ); | 
|      | 
|       } | 
|     } | 
|      | 
|     info( '-------------------------End---------------------'); | 
|     showtable.Generate( search ); | 
|   *] | 
| } |