lazhen
2024-11-01 5e5f64f57af3862ebf7c9241dc848f97572f96b2
_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
@@ -24,11 +24,12 @@
    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, '', sumrowproduction.RowNr() + 2  );
    sumrowdemand            := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '总需求' ), sumname, '', sumrowproduction.RowNr() + 3 );
    rowno                   := sumrowproduction.RowNr() + 4;
    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 ){
      EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( model.Concat( '需求' ) ), sumname, model, rowno );
      sumdemandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( model.Concat( '需求' ) ), sumname, model, rowno ) );
      rowno                 := rowno + 1;
    }
    sumrowinventory         := EnginePipelineRow::CraeteCellValueForRow( this, sumstr.Concat( '库存' ), sumname, '', rowno );
@@ -36,138 +37,93 @@
    //行计数
    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(), '', rownr + 1 );
      showrowccproduction := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '长春产量' ), row.Name(), '', rownr + 2 );
      showrowdemand       := EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '总需求' ), row.Name(), '', rownr + 3 );
      rownr               := rownr + 4;
      modelsnr            := rownr + 3;
      models              := construct( Strings );
      uniquemodels        := selectuniquevalues( row, Cell.Demand, demand, true, demand.Model() );
      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 ){
          EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( e.Concat( '需求' ) ), row.Name(), e, rownr );
          models.Add( e );
          demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( e.Concat( '需求' ) ), row.Name(), e, rownr ) );
          rownr             := rownr + 1;
        }
      }
    
      for( rownr := rownr; rownr < modelsnr; rownr ++ ){
    
        EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '' ), row.Name(), '', rownr );
        demandrows.Add( EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '' ), row.Name(), '', rownr ) );
      }
      showrowinventory    :=  EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '库存' ), row.Name(), '', rownr );
      showrowinventory      :=  EnginePipelineRow::CraeteCellValueForRow( this, rowname.Concat( '库存' ), row.Name(), '', rownr );
    
      traverse( row, Cell, cell, cell.Column().TimeUnit() = search.TimeUnit() ){
        column            := selectobject( this, Column, column, column.StartDate() = cell.Column().StartDate() and column.TimeUnit() = search.TimeUnit() );
      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() );
        
        if( not isnull( column ) ){
          //生产
          production              := column.CellValue( relnew, Value := [String]cell.ProductionQuantity() );
          showrowproduction.CellValue( relinsert, production );
          sumproduction           := selectobject( column, CellValue, c, c.Row() = sumrowproduction );
          if( isnull( sumproduction ) ){
            sumproduction         := column.CellValue( relnew, Value := [String]0 );
            sumrowproduction.CellValue( relinsert, sumproduction );
        //生产
        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 ) );
          }
          sumproduction.Value( [String]( [Real]sumproduction.Value() + cell.ProductionQuantity() ) );
          //大连产量
          dlproductionquantity     := guard( cell.Production().DLProduction(), 0 );
          dlproduction             := column.CellValue( relnew, Value := [String]dlproductionquantity );
          showrowdlproduction.CellValue( relinsert, dlproduction );
          sumdlproduction          := selectobject( column, CellValue, c, c.Row() = sumrowdlproduction );
          if( isnull( sumdlproduction ) ){
            sumdlproduction        := column.CellValue( relnew, Value := [String]0 );
            sumrowdlproduction.CellValue( relinsert, sumdlproduction );
          }
          sumdlproduction.Value( [String]( [Real]sumdlproduction.Value() + dlproductionquantity ) );
          //长春产量
          ccproductionquantity     := guard( cell.Production().CCProduction(), 0 );
          ccproduction             := column.CellValue( relnew, Value := [String]ccproductionquantity );
          showrowccproduction.CellValue( relinsert, ccproduction );
          sumccproduction          := selectobject( column, CellValue, c, c.Row() = sumrowccproduction );
          if( isnull( sumccproduction ) ){
            sumccproduction        := column.CellValue( relnew, Value := [String]0 );
            sumrowccproduction.CellValue( relinsert, sumccproduction );
          }
          sumccproduction.Value( [String]( [Real]sumccproduction.Value() + ccproductionquantity ) );
          //需求
          totaldemand              := column.CellValue( relnew, Value := [String]cell.DemandQuantity() );
          showrowdemand.CellValue( relinsert, totaldemand );
          sumdemand                := selectobject( column, CellValue, c, c.Row() = sumrowdemand );
          if( isnull( sumdemand ) ){
            sumdemand              := column.CellValue( relnew, Value := [String]0 );
            sumrowdemand.CellValue( relinsert, sumdemand );
          }
          sumdemand.Value( [String]( [Real]sumdemand.Value() + cell.DemandQuantity() ) );
          traverse( cell, Demand, demand, exists( models, Elements, model, model = demand.Model() ) ){
            demandrow              := selectobject( this, Row, r, r.Product() = row.Name() and r.Demand() = demand.Model() );
            sumdemandrow           := selectobject( this, Row, r, r.Product() = sumname and r.Demand() = demand.Model() );
            if( not isnull( demandrow ) ){
              demandcell             := column.CellValue( relnew, Value := [String]demand.Quantity() );
              demandrow.CellValue( relinsert, demandcell );
            }
            if( not isnull( sumdemandrow ) ){
            sumdemandcell          := selectobject( column, CellValue, c, c.Row() = sumdemandrow );
            if( isnull( sumdemandcell ) ){
              sumdemandcell        := column.CellValue( relnew, Value := [String]0 );
              sumdemandrow.CellValue( relinsert, sumdemandcell );
            }
            sumdemandcell.Value( [String]( [Real]sumdemandcell.Value() + demand.Quantity() ) );
            }
          }
          for( demandr := showrowdemand.RowNr() + 1; demandr < showrowinventory.RowNr(); demandr := demandr + 1 ){
            demandrow              := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = row.Name() );
            if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){
              demandcell           := column.CellValue( relnew, Value := '' );
              demandrow.CellValue( relinsert, demandcell );
            }
          }
          //库存
          inventory                := column.CellValue( relnew, Value := [String]cell.InventoryQuantity() );
          showrowinventory.CellValue( relinsert, inventory );
          suminventory             := selectobject( column, CellValue, c, c.Row() = sumrowinventory );
          if( isnull( suminventory ) ){
            suminventory           := column.CellValue( relnew, Value := [String]0 );
            sumrowinventory.CellValue( relinsert, suminventory );
          }
          suminventory.Value( [String]( [Real]suminventory.Value() + cell.InventoryQuantity() ) );
        }
        //库存
        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 );
        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 := '' );
          demandcell        := column.CellValue( relnew, Value := '' );
          demandrow.CellValue( relinsert, demandcell );
        }
      }
    }
    
    rows := selectsortedset( this, Row, row, row.Name(), row.RowNr() );
    i    := 0;
    rows                    := selectsortedset( this, Row, row, row.Name(), row.RowNr() );
    i                       := 0;
    traverse( rows, Elements, e ){
      e.RowNr( i );
      i := i + 1;
      i                     := i + 1;
    }
  *]
}