lazhen
2024-10-23 4bb71bc32df6a2ce847b5dc1853dea732e2d0253
_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl
@@ -2,6 +2,7 @@
#parent: #root
Method GenerateShow (
  FinancialSalesReport table,
  FinancialSalesColumn yearcolumn,
  Strings productids,
  String factory
)
@@ -9,41 +10,62 @@
  TextBody:
  [*
    // 甄兰鸽 Oct-12-2024 (created)
    //年汇总
    yearcolumn          := this.FinancialSalesColumn( relnew, Name := '汇总', Period := this.FinancialSalesSource().MacroPlan().StartOfPlanning().StartOfNextYear().Date() );
    sumrow              := this.FinancialSalesRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( 'SUM' ), Factory := factory );
    sumyearcell         := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
    allunit := FinancialProductionReport::GetDefaultAllUnit();
    sumrow                    := this.FinancialSalesRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( 'SUM' ), Factory := factory );
    sumyearcell               := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
    sumrow.FinancialSalesCell( relinsert, sumyearcell );
    traverse( table, FinancialSalesRow, row, row.Unit() = factory ){
      productid         := construct( Strings );
    //error( '-----------------', productids.Size(), selectset( table, FinancialSalesRow, row, factory = allunit or row.Unit() = factory ).Size() );
    traverse( table, FinancialSalesRow, row, factory = allunit or row.Unit() = factory ){
      productid               := construct( Strings );
      productid.Add( row.Name() );
      
      if( productids.ContainsAll( productid ) ){
        showrow         := this.FinancialSalesRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( row.Name() ), Unit := row.Unit(), Factory := factory );
        row.Product_MP().FinancialSalesRow( relinsert, showrow );
        yearcell        := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
        showrow.FinancialSalesCell( relinsert, yearcell );
        isupdate              := false;
        showrow               := selectobject( this, FinancialSalesRow, fprow, fprow.Name() = factory.Format( 'S(Len(10))' ).Concat( row.Name() ) and fprow.Unit() = factory and factory = factory );
        if( isnull( showrow ) ){
          showrow             := this.FinancialSalesRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( row.Name() ), Unit := factory, Factory := factory );
          row.Product_MP().FinancialSalesRow( relinsert, showrow );
        }
        yearcell              := selectobject( yearcolumn, FinancialSalesCell, fpcell, fpcell.FinancialSalesRow() = showrow );
        if( isnull( yearcell ) ){
          yearcell            := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
          showrow.FinancialSalesCell( relinsert, yearcell );
        }
        
        traverse( row, FinancialSalesCell, cell, not cell.FinancialSalesColumn().IsDay() ){
          column        := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() and not column.IsDay());
          if( isnull( column ) ){
            column            := this.FinancialSalesColumn( relnew, Name := cell.FinancialSalesColumn().Name(), Period := cell.FinancialSalesColumn().Period() );
          }
          sumcell       := selectobject( column, FinancialSalesCell, c, c.FinancialSalesRow() = sumrow );
          if( isnull( sumcell ) ){
            sumcell     := column.FinancialSalesCell( relnew, Value := '0' );
            sumrow.FinancialSalesCell( relinsert, sumcell );
          }
          
          showcell      := column.FinancialSalesCell( relnew, Value := cell.Value(), IsUpdate := cell.IsUpdate()  );
          showrow.FinancialSalesCell( relinsert, showcell );
          showcell            := selectobject( showrow, FinancialSalesCell, fpcell, fpcell.FinancialSalesColumn() = column );
          if( isnull( showcell ) ){
            showcell          := column.FinancialSalesCell( relnew, Value := '0', IsUpdate := cell.IsUpdate()  );
            showrow.FinancialSalesCell( relinsert, showcell );
          }
          if( cell.IsUpdate() ){
            isupdate          := true;
            showcell.IsUpdate( cell.IsUpdate() );
          }
          showcell.Value( [String]( [Real]showcell.Value() + [Real]cell.Value() ) );
          yearcell.Value( [String]( [Real]yearcell.Value() + [Real]cell.Value() ) );
          sumyearcell.Value( [String]( [Real]sumyearcell.Value() + [Real]cell.Value() ) );
          value         := [Real]cell.Value() + [Real]sumcell.Value();
          sumcell.Value( [String]value );
        }
        if( isupdate ){
          yearcell.IsUpdate( isupdate );
        }
      }
    }
    traverse( this, FinancialSalesColumn, column ){
      if( exists( column, FinancialSalesCell, cell, cell.IsUpdate() ) ){
      if( exists( column, FinancialSalesCell, cell, cell.IsUpdate() and cell.FinancialSalesRow().Factory() = factory ) ){
        sumcell         := selectobject( sumrow, FinancialSalesCell, sumcell, sumcell.FinancialSalesColumn() = column );
        sumcell.IsUpdate( true );
      }