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; 
 | 
    } 
 | 
  *] 
 | 
} 
 |