| | |
| | | Quintiq file version 2.0 |
| | | #parent: #root |
| | | StaticMethod Initialize ( |
| | | MacroPlan owner |
| | | MacroPlan owner, |
| | | InterfaceDataset interface |
| | | ) |
| | | { |
| | | Description: '初始化' |
| | |
| | | |
| | | search := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() ); |
| | | |
| | | table.GenerateColumn( owner ); |
| | | |
| | | //从Product planning查找库存点为长春装配线边库的所有MQB产品,取Total Demand字段按月汇总需求数量 |
| | | 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 ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){ |
| | | unit := pisp.StockingPoint_MP().UnitID(); |
| | | product := pisp.Product_MP(); |
| | | traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning |
| | | and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ){ |
| | | periodtime := pispip.Start().StartOfMonth().Date(); |
| | | periodname := periodtime.Format( "M2/D2/Y" ); |
| | | column := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname and column.Period() = periodtime ); |
| | | ccrow := table.GetRow( ccunit, product.ID(), startofyear, startofnextyear ); |
| | | ccrow.Initialize( column, pispip );//取Total Demand字段按月汇总需求数量 |
| | | // 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 ){ |
| | | 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() ); |
| | | unitrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() ); |
| | | allrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() ); |
| | | |
| | | //周,选择周时,期末库存为每一周最后一天的汇总库存信息,最小库存为这一周库存量最小的一天的数值,最大库存为这一周库存量最大的一天的数值,平均库存为该周的平均值 |
| | | if( period.Start() < nextweek ){ |
| | | weekpispips.Add( pispip ); |
| | | |
| | | allrow := table.GetRow( allunit, product.ID(), startofyear, startofnextyear ); |
| | | allrow.Initialize( column, 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 ){ |