| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod InitializeNew ( | 
|   MacroPlan owner | 
| ) | 
| { | 
|   Description: '初始化' | 
|   TextBody: | 
|   [* | 
|     // 甄兰鸽 Jun-24-2024 (created) | 
|     owner.FinancialSalesSource( relflush ); | 
|     owner.FSImportData( relflush ); | 
|     products                  := construct( Product_MPs ); | 
|     allunit                   := FinancialSalesReport::GetDefaultAllUnit(); | 
|     ccunit                    := FinancialSalesReport::GetDefaultCCUnit(); | 
|     dlunit                    := FinancialSalesReport::GetDefaultDLUnit(); | 
|     ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC(); | 
|     tjsalessegment            := FinancialSalesReport::GetSalesSegmentTJ(); | 
|     fssalessegment            := FinancialSalesReport::GetSalesSegmentFS(); | 
|     //ccspline                  := FinancialSalesReport::GetStockingPointCCLine(); | 
|     //dlspline                  := FinancialSalesReport::GetStockingPointDLLine(); | 
|     //ccrent                    := FinancialSalesReport::GetStockingPointCCRent(); | 
|      | 
|     source                    := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() ); | 
|     table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false ); | 
|     showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true ); | 
|     startofplanning           := owner.StartOfPlanning().Date(); | 
|     startofyear               := ( startofplanning.StartOfYear() - Duration::Days( 1 ) ).Date(); | 
|     startofnextyear           := ( startofplanning.StartOfNextYear() - Duration::Days( 1 ) ).Date(); | 
|      | 
|     search                    := owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit ); | 
|      | 
|     table.GenerateColumn( owner ); | 
|      | 
|     //首先在forecast界面查找sales segment为长春的所有需求,识别出MLB的所有产品,每个产品按月汇总需求数量 | 
|     traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() <= startofnextyear and forecast.Quantity() <> 0  | 
|               and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){ | 
|       salessegment            := forecast.SalesSegment_MP(); | 
|       parentsalessegments     := salessegment.GetAllParent(); | 
|       stockingpoint           := forecast.StockingPointID(); | 
|       product                 := forecast.Product_MP(); | 
|       //是否属于长春 | 
|       iscc                    := salessegment.Name().StartsWith( ccsalessegment ) or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( ccsalessegment ) ); | 
|       isccrent                := iscc and stockingpoint.EndsWith( '外租库' ) and ( stockingpoint.StartsWith( 'CC' ) or stockingpoint.StartsWith( '长春' ) ); | 
|       isdl                    := salessegment.Name().StartsWith( tjsalessegment ) or salessegment.Name().StartsWith( fssalessegment ) | 
|                                   or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( tjsalessegment ) )  | 
|                                   or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( fssalessegment ) ); | 
|       //Forecast的Sales Segment为长春,识别出MLB的所有产品汇总 | 
|       //大连财务销量:首先在forecast界面查找Sales Segment是天津和佛山的所有需求,每个产品按月汇总需求数量 and forecast.Product_MP().MQBMLB() = 'MLB' )  | 
|       if( ( iscc and product.MQBMLB() = 'MLB' ) or ( isccrent and product.MQBMLB() = 'MQB' ) or isdl ){ | 
|          | 
|         //获取合计行 | 
|         allrow               := table.GetRow( allunit, product ); | 
|         //获取工厂行 | 
|         factoryrow           := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product ); | 
|        | 
|         products.Add( product ); | 
|         traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){ | 
|           dayperiodtime      := psdip.StartDate(); | 
|           dayperiodname      := dayperiodtime.Format( "M2/D2/Y" ); | 
|           periodtime         := psdip.StartDate().StartOfMonth(); | 
|           periodname         := periodtime.Format( "M2/D2/Y" ); | 
|     //      info( '-------------------------', periodname, periodtime ); | 
|           daycolumn          := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() ); | 
|           column             := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() ); | 
|     //      info( '-------------------------', column.Name() ); | 
|           quantity   := [Number]psdip.Quantity();//四舍五入 | 
|            | 
|           factoryrow.Initialize( column, quantity ); | 
|           factoryrow.Initialize( daycolumn, quantity ); | 
|           allrow.Initialize( column, quantity ); | 
|         } | 
|       } | 
|     } | 
|     //从Product planning查找库存点为大连发动机的长春外租库,取New supply字段按月汇总需求数量 | 
|     traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID() = '大连发动机的长春外租库' ){ | 
|         traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() | 
|                   and exists( pisp, ProductInStockingPointInPeriod, pispip, pispip.Period_MP().StartDate() >= startofyear and pispip.Period_MP().StartDate() < startofnextyear  | 
|                               and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//产品为MQB | 
|           product           := pisp.Product_MP(); | 
|           allrow            := table.GetRow( allunit, product ); | 
|           factoryrow        := table.GetRow( dlunit, product ); | 
|           products.Add( product ); | 
|           traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Period_MP().StartDate() >= startofyear | 
|                     and pispip.Period_MP().StartDate() < startofnextyear  | 
|                     and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){ | 
|             dayperiodtime   := ( pispip.Start() + Duration::Days( 1 ) ).Date(); | 
|             dayperiodname   := dayperiodtime.Format( "M2/D2/Y" ); | 
|             periodtime      := dayperiodtime.StartOfMonth(); | 
|             periodname      := periodtime.Format( "M2/D2/Y" ); | 
|             daycolumn       := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() ); | 
|             column          := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() ); | 
|             quantity        := [Number]pispip.NewSupplyQuantity();//四舍五入 | 
|              | 
|             factoryrow.Initialize( column, quantity );//取Total Demand字段按月汇总需求数量 | 
|             factoryrow.Initialize( daycolumn, quantity ); | 
|             allrow.Initialize( column, quantity ); | 
|           } | 
|         } | 
|     //  } | 
|     } | 
|     //startofnextyearlead       := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime(); | 
|     //大连财务销量:长春的需求需要在trip plan里面找到起始库存点为大连装配线边库,目的地为长春外租库的产品,由于需要考虑产品运输lead time,每个月的汇总数据需要推迟两天进行计算 | 
|     //traverse( owner, Unit.Lane.LaneLeg, laneleg ){ | 
|     //  //起始库存点是否是大连装配线边库 | 
|     //  originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() ); | 
|     //  isdlspline            := table.IsInUnit( originsp, dlspline ); | 
|     //  //目的地是否是长春外租库 | 
|     //  destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() ); | 
|     //  isccrent              := table.IsInUnit( destisp, ccrent ); | 
|     //  if( isdlspline and isccrent ){ | 
|     //    traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead and exists( trip, ProductInTrip, pit, pit.Quantity() <> 0 ) ){ | 
|     ////      periodtime        := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date(); | 
|     //      dayperiodtime     := trip.Departure().Date(); | 
|     //      dayperiodname     := dayperiodtime.Format( "M2/D2/Y" ); | 
|     //      periodtime        := trip.Departure().StartOfMonth().Date(); | 
|     //      periodname        := periodtime.Format( "M2/D2/Y" ); | 
|     //       | 
|     //      daycolumn         := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() ); | 
|     //      column            := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() ); | 
|     //      if( not isnull( column ) ){ | 
|     //        traverse( trip, ProductInTrip, pit, pit.Quantity() <> 0 ){ | 
|     //          product       := pit.Product_MP(); | 
|     //          products.Add( product ); | 
|     //          quantity      := [Number]pit.Quantity();//四舍五入 | 
|     //          dlrow         := table.GetRow( dlunit, pit.Product_MP() ); | 
|     //          dlrow.Initialize( column, quantity );//汇总数量 | 
|     //          dlrow.Initialize( daycolumn, quantity ); | 
|     //           | 
|     //          allrow        := table.GetRow( allunit, pit.Product_MP() ); | 
|     //          allrow.Initialize( column, quantity ); | 
|     //        } | 
|     //      } | 
|     //    } | 
|     //  } | 
|     //} | 
|      | 
|     rows := selectsortedset( table, FinancialSalesRow, row, row.Name() ); | 
|     i    := 0; | 
|     traverse( rows, Elements, e ){ | 
|       e.RowNr( i ); | 
|       i := i + 1; | 
|     } | 
|     showtable.Generate( search, products ); | 
|   *] | 
| } |