| Quintiq file version 2.0 | 
| #parent: #root | 
| Method Generate ( | 
|   EnginePipelineSearch search, | 
|   Product_MPs products | 
| ) | 
| { | 
|   TextBody: | 
|   [* | 
|     // 甄兰鸽 Jun-25-2024 (created) | 
|     table                   := selectobject( this, Source.Report, report, not report.IsShow() ); | 
|     //清空之前存储的显示数据 | 
|     this.Clear( search.TimeUnit(), search.StartDate(), search.EndDate() ); | 
|     Transaction::Transaction().Propagate( attribute( EnginePipelineColumn, Index ) ); | 
|     Transaction::Transaction().Propagate( attribute( EnginePipelineCell, ProductionQuantity ) ); | 
|     Transaction::Transaction().Propagate( attribute( EnginePipelineCell, DemandQuantity ) ); | 
|     //过滤后的产品id | 
|     productids              := selectuniquevalues( products, Elements, product, true, product.ID() ); | 
|     rows                    := selectsortedset( table, Row, row, row.RowNr() ); | 
|     models                  := selectuniquevalues( table, Column.Cell.Demand, demand, demand.Model() ); | 
|     cellnr                  := 5 + models.Size(); | 
|     //合计行 | 
|     sumname                 := 'SUM'; | 
|     sumstr                  := sumname.Format( 'S(Len(10))' ); | 
|     sumrowproduction        := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '总产量' ), sumname, '', rows.Size() * cellnr ); | 
|     sumrowdlproduction      := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '大连产量' ), sumname, '', sumrowproduction.RowNr() + 1 ); | 
|     sumrowccproduction      := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '长春产量' ), sumname, '', sumrowdlproduction.RowNr() + 1  ); | 
|     sumrowdemand            := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '总需求' ), sumname, '', sumrowccproduction.RowNr() + 1 ); | 
|     sumdemandrows           := construct( EnginePipelineRows ); | 
|     rowno                   := sumrowdemand.RowNr() + 1; | 
|     traverse( models, Elements, model ){ | 
|       sumdemandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( model.Concat( '需求' ) ), sumname, model, rowno ) );  | 
|       rowno                 := rowno + 1; | 
|     } | 
|     sumrowinventory         := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '库存' ), sumname, '', rowno ); | 
|      | 
|     //行计数 | 
|     rownr                   := 0; | 
|     traverse( rows, Elements, row, productids.Find( row.Name() ) >= 0 ){ | 
|       rowname               := row.Name().Format( 'S(Len(10))' ); | 
|       showrowproduction     := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '总产量' ), row.Name(), '', rownr ); | 
|       showrowdlproduction   := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '大连产量' ), row.Name(), '', showrowproduction.RowNr() + 1 ); | 
|       showrowccproduction   := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '长春产量' ), row.Name(), '', showrowdlproduction.RowNr() + 1 ); | 
|       showrowdemand         := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '总需求' ), row.Name(), '', showrowccproduction.RowNr() + 1 ); | 
|       rownr                 := showrowdemand.RowNr() + 1; | 
|       modelsnr              := showrowdemand.RowNr() + 4; | 
|       uniquemodels          := selectuniquevalues( row, Cell.Demand, demand, true, demand.Model() ); | 
|       demandrows            := construct( EnginePipelineRows ); | 
|       traverse( uniquemodels, Elements, e ){ | 
|      | 
|         if( rownr < modelsnr ){ | 
|           demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( e.Concat( '需求' ) ), row.Name(), e, rownr ) );  | 
|           rownr             := rownr + 1; | 
|         } | 
|       } | 
|      | 
|       for( rownr := rownr; rownr < modelsnr; rownr ++ ){ | 
|      | 
|         demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '' ), row.Name(), '', rownr ) );  | 
|       } | 
|       showrowinventory      :=  EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '库存' ), row.Name(), '', rownr ); | 
|      | 
|       traverse( this, Column, column ){ | 
|         daycells            := selectset( row, Cell, cell, cell.Column().TimeUnit() = Translations::MP_GlobalParameters_Day() and | 
|                                             cell.Column().StartDate() >= column.StartDate() and  | 
|                                             cell.Column().StartDate() <= column.EndDate() ); | 
|          | 
|         //生产 | 
|         productionqty       := [Number]sum( daycells, Elements, cell, cell.ProductionQuantity() ); | 
|         production          := selectobject( column, CellValue, c, c.Row() = showrowproduction ); | 
|         production.Value( [String]productionqty ); | 
|         sumproduction       := selectobject( column, CellValue, c, c.Row() = sumrowproduction ); | 
|         sumproduction.Value( [String]( [Real]sumproduction.Value() + productionqty ) ); | 
|         //大连产量 | 
|         dlproductionqty     := [Number]sum( daycells, Elements.Production, cellproduction, cellproduction.DLProduction() ); | 
|         dlproduction        := selectobject( column, CellValue, c, c.Row() = showrowdlproduction ); | 
|         dlproduction.Value( [String]dlproductionqty ); | 
|         sumdlproduction     := selectobject( column, CellValue, c, c.Row() = sumrowdlproduction ); | 
|         sumdlproduction.Value( [String]( [Real]sumdlproduction.Value() + dlproductionqty ) ); | 
|         //长春产量 | 
|         ccproductionqty     := [Number]sum( daycells, Elements.Production, cellproduction, cellproduction.CCProduction() ); | 
|         ccproduction        := selectobject( column, CellValue, c, c.Row() = showrowccproduction ); | 
|         ccproduction.Value( [String]ccproductionqty ); | 
|         sumccproduction     := selectobject( column, CellValue, c, c.Row() = sumrowccproduction ); | 
|         sumccproduction.Value( [String]( [Real]sumccproduction.Value() + ccproductionqty ) ); | 
|         //需求 | 
|         totaldemandqty      := [Number]sum( daycells, Elements, cell, cell.DemandQuantity() ); | 
|         totaldemand         := selectobject( column, CellValue, c, c.Row() = showrowdemand ); | 
|         totaldemand.Value( [String]totaldemandqty ); | 
|         sumdemand           := selectobject( column, CellValue, c, c.Row() = sumrowdemand ); | 
|         sumdemand.Value( [String]( [Real]sumdemand.Value() + totaldemandqty ) ); | 
|         //具体需求 | 
|         traverse( demandrows, Elements, demandrow ){ | 
|           demandqty         :=  [Number]sum( daycells, Elements.Demand, celldemand, celldemand.Model() = demandrow.Demand(), celldemand.Quantity() ); | 
|           demandcell        := selectobject( column, CellValue, c, c.Row() = demandrow ); | 
|           demandcell.Value( [String]demandqty ); | 
|           sumdemandrow      := selectobject( sumdemandrows, Elements, r, r.Demand() = demandrow.Demand() ); | 
|           if( not isnull( sumdemandrow ) ){ | 
|             sumdemandcell   := selectobject( column, CellValue, c, c.Row() = sumdemandrow ); | 
|             sumdemandcell.Value( [String]( [Real]sumdemandcell.Value() + demandqty ) ); | 
|           } | 
|         } | 
|         //库存 | 
|         inventroyqty        := [Number]maxobject( daycells, Elements, e, e.Column().StartDate() ).InventoryQuantity(); | 
|         inventory           := selectobject( column, CellValue, c, c.Row() = showrowinventory ); | 
|         inventory.Value( [String]inventroyqty ); | 
|         suminventory        := selectobject( column, CellValue, c, c.Row() = sumrowinventory ); | 
|         suminventory.Value( [String]( [Real]suminventory.Value() + inventroyqty ) ); | 
|       } | 
|     } | 
|     traverse( this, Column, column ){ | 
|       for( demandr := sumrowdemand.RowNr() + 1; demandr < sumrowinventory.RowNr(); demandr := demandr + 1 ){ | 
|         demandrow           := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = sumname ); | 
|     //    info( '------------------14----------------' ); | 
|         if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){ | 
|           demandcell        := column.CellValue( relnew, Value := '' ); | 
|           demandrow.CellValue( relinsert, demandcell ); | 
|         } | 
|       } | 
|     } | 
|      | 
|     rows                    := selectsortedset( this, Row, row, row.Name(), row.RowNr() ); | 
|     i                       := 0; | 
|     traverse( rows, Elements, e ){ | 
|       e.RowNr( i ); | 
|       i                     := i + 1; | 
|     } | 
|   *] | 
| } |