Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Initialize ( 
 | 
  MacroPlan owner, 
 | 
  InterfaceDataset interface 
 | 
) 
 | 
{ 
 | 
  Description: '初始化' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // 甄兰鸽 Jun-24-2024 (created) 
 | 
    owner.InventorySummarySource( relflush ); 
 | 
    products                  := construct( Product_MPs ); 
 | 
    allunit                   := InventorySummaryReport::GetDefaultAllUnit(); 
 | 
    ccunit                    := InventorySummaryReport::GetDefaultCCUnit(); 
 | 
    dlunit                    := InventorySummaryReport::GetDefaultDLUnit(); 
 | 
     
 | 
    source                    := owner.InventorySummarySource( relnew, ID := InventorySummaryReport::GetDefaultName(), Name := InventorySummaryReport::GetDefaultName() ); 
 | 
    table                     := source.InventorySummaryReport( relnew, ID := source.Name(), Name := source.Name() ); 
 | 
    showtable                 := source.InventorySummaryReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsShow := true ); 
 | 
    startofplanning           := owner.StartOfPlanning(); 
 | 
    startofyear               := startofplanning.StartOfYear(); 
 | 
    startofnextyear           := startofplanning.StartOfNextYear(); 
 | 
     
 | 
    search                    := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() ); 
 | 
     
 | 
    table.GenerateColumn( owner, 'All', startofyear, startofnextyear ); 
 | 
    //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) ); 
 | 
    //库存数量为Actual inventories里面的点Planned inventories字段库存量加总 
 | 
    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and not isnull( pisp.StockingPoint_MP() ) and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){ 
 | 
      unit := pisp.StockingPoint_MP().UnitID(); 
 | 
      product := pisp.Product_MP(); 
 | 
    //  info( '-----------------------------------', unit, product.ID() ); 
 | 
      weekpispips := construct( ProductInStockingPointInPeriods ); 
 | 
      monthpispips := construct( ProductInStockingPointInPeriods ); 
 | 
      nextweek := startofplanning.StartOfNextWeek(); 
 | 
      nextmonth := startofplanning.StartOfNextMonth(); 
 | 
       
 | 
      unitrow := table.GetRow( unit, product.ID() ); 
 | 
      allrow     := table.GetRow( allunit, product.ID() ); 
 | 
      pispips := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() ); 
 | 
    //  info( '-----------------------------------', isnull( allrow ), pispips.Size() ); 
 | 
      traverse( pispips, Elements, pispip, pispip.Start() = startofplanning ){ 
 | 
    //    info( '-----------------------------------', pispip.Start() ); 
 | 
        period     := pispip.Period_MP(); 
 | 
        periodtime := period.Start().Date(); 
 | 
        periodname := periodtime.Format( "M2/D2/Y" ); 
 | 
        //天,选择日颗粒度时,期末库存,最小库存,最大库存和平均库存的数值保持一致 
 | 
        daycolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Day() ); 
 | 
        info( daycolumn.Name(), daycolumn.Period(), daycolumn.TimeUnit() ); 
 | 
        unitrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() ); 
 | 
        allrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() ); 
 | 
         
 | 
        //周,选择周时,期末库存为每一周最后一天的汇总库存信息,最小库存为这一周库存量最小的一天的数值,最大库存为这一周库存量最大的一天的数值,平均库存为该周的平均值 
 | 
        if( period.Start() < nextweek ){ 
 | 
          weekpispips.Add( pispip ); 
 | 
           
 | 
          weekend := nextweek - Duration::Days( 1 ); 
 | 
          if( period.Start() = weekend ){ 
 | 
            weekcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Week() ); 
 | 
             
 | 
            maxinventory := max( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() ); 
 | 
            mininventory := min( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() ); 
 | 
            aveinventory := average( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() ); 
 | 
            unitrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); 
 | 
            allrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); 
 | 
          } 
 | 
        }else{ 
 | 
          weekpispips.Flush(); 
 | 
          weekpispips.Add( pispip ); 
 | 
          nextweek := nextweek.StartOfNextWeek(); 
 | 
        } 
 | 
         
 | 
        //月,选择月时,期末库存为每一月最后一天的汇总库存信息,最小库存为这一个月库存量最小的一天的数值,最大库存为这一个月库存量最大的一天的数值,平均库存为该月的平均值 
 | 
        if( period.Start() < nextmonth ){ 
 | 
          monthpispips.Add( pispip ); 
 | 
           
 | 
          monthend := nextmonth - Duration::Days( 1 ); 
 | 
          if( period.Start() = monthend ){ 
 | 
            monthcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Month() ); 
 | 
             
 | 
            maxinventory := max( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() ); 
 | 
            mininventory := min( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() ); 
 | 
            aveinventory := average( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() ); 
 | 
            unitrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); 
 | 
            allrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory ); 
 | 
          } 
 | 
        }else{ 
 | 
          monthpispips.Flush(); 
 | 
          monthpispips.Add( pispip ); 
 | 
          nextmonth := nextmonth.StartOfNextMonth(); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
    //首先在Entities里识别父级Unit为长春/大连的所有库存点 
 | 
    //长春库存点 
 | 
    ccsps := construct( Strings ); 
 | 
    //大连库存点 
 | 
    dlsps := construct( Strings ); 
 | 
    allsps := construct( Strings ); 
 | 
    traverse( owner, Unit, unit, unit.ID() = ccunit or unit.ID() = dlunit ){ 
 | 
      if( unit.ID() = ccunit ){ 
 | 
        ccsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ); 
 | 
      } 
 | 
      if( unit.ID() = dlunit ){ 
 | 
        dlsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ); 
 | 
      } 
 | 
      allsps := allsps.Union( selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ) ); 
 | 
    } 
 | 
    //再在库存更新的子界面库存点选择中找到这些库存点所关联的已勾选库位 
 | 
    selections := selectset( interface, InventoryPointSelection, selection, allsps.Find( selection.StockpoingPoint() ) >= 0 and selection.IsIncluded() ); 
 | 
    productids := selectuniquevalues( selections, Elements, selection, selection.ProductID() ); 
 | 
    //最后将这些库位中零件号的数量进行加总 
 | 
    traverse( table, InventorySummaryColumn, column, column.Period() < startofplanning.Date() ){ 
 | 
      traverse( productids, Elements, productid ){ 
 | 
        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){//天 
 | 
          column.GenerateCell( selections, ccsps, dlsps, table, column.Period(), column.Period(), productid, allunit, ccunit, dlunit ); 
 | 
        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){//周 
 | 
          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfWeek(), column.Period(), productid, allunit, ccunit, dlunit ); 
 | 
        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Month() ){//月 
 | 
          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfMonth(), column.Period(), productid, allunit, ccunit, dlunit ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
       
 | 
         
 | 
    rows := selectsortedset( table, InventroySummaryRow, row, row.Name() ); 
 | 
    i    := 0; 
 | 
    traverse( rows, Elements, e ){ 
 | 
      e.RowNr( i ); 
 | 
      i := i + 1; 
 | 
    } 
 | 
    showtable.Generate( search, products ); 
 | 
  *] 
 | 
} 
 |