lazhen
2024-10-21 b02a3586a97064c94087c0e3ca2eac36cd9d9b42
_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -1,11 +1,7 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Download (
  MacroPlan macroPlan,
  Factorys factorys,
  ProductGenerations generations,
  ProductPowers powers,
  ProductMLBMQBs mlbmqls
  MacroPlan macroPlan
) as BinaryValue
{
  Description: '下载财务报表数据'
@@ -18,123 +14,42 @@
    xmlDOM                        := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
    
    tableElement                  := xmlDOM.GetElementByTagName( "table", 0 );
    //Search
    searchcolumnelement           := xmlDOM.CreateElement( "column" );
    searchnameelement             := xmlDOM.CreateElement( "name" );
    searchtypeelement             := xmlDOM.CreateElement( "type" );
    searchnameelement.TextContent( 'Search' );
    searchtypeelement.TextContent( "String" );
    searchcolumnelement.AppendChild( searchnameelement );
    searchcolumnelement.AppendChild( searchtypeelement );
    //Factory
    searchunitcolumn              := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Unit' );
    //Generation
    generationcolumn              := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Generation' );
    //Power
    powercolumn                   := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Power' );
    //MLBMQBS
    mlbmqbcolumn                  := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'MLBMQB' );
    //Product
    productcolumnelement          := xmlDOM.CreateElement( "column" );
    productnameelement            := xmlDOM.CreateElement( "name" );
    producttypeelement            := xmlDOM.CreateElement( "type" );
    productnameelement.TextContent( 'Product' );
    producttypeelement.TextContent( "String" );
    productcolumnelement.AppendChild( productnameelement );
    productcolumnelement.AppendChild( producttypeelement );
    productcolumnelement          := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Product' );
    //Unit
    unitcolumnelement             := xmlDOM.CreateElement( "column" );
    unitnameelement               := xmlDOM.CreateElement( "name" );
    unittypeelement               := xmlDOM.CreateElement( "type" );
    unitnameelement.TextContent( 'Unit' );
    unittypeelement.TextContent( "String" );
    unitcolumnelement.AppendChild( unitnameelement );
    unitcolumnelement.AppendChild( unittypeelement );
    unitcolumnelement             := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Unit' );
    
    tableElement.AppendChild( searchcolumnelement );
    tableElement.AppendChild( productcolumnelement );
    tableElement.AppendChild( unitcolumnelement );
    searchtotal                   := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 4 ;
    searchunitElement             := xmlDOM.CreateElement( "cell" );
    searchunitElement.SetAttribute( "value", 'Unit' );
    searchcolumnelement.AppendChild( searchunitElement );
    traverse( factorys, Elements, factory ){
      searchunitcellElement       := xmlDOM.CreateElement( "cell" );
      searchunitcellElement.SetAttribute( "value", factory.Name() );
      searchcolumnelement.AppendChild( searchunitcellElement );
    }
    searchgenerationElement       := xmlDOM.CreateElement( "cell" );
    searchgenerationElement.SetAttribute( "value", 'Generation' );
    searchcolumnelement.AppendChild( searchgenerationElement );
    traverse( generations, Elements, generation ){
      generationcellElement       := xmlDOM.CreateElement( "cell" );
      generationcellElement.SetAttribute( "value", generation.Generation() );
      searchcolumnelement.AppendChild( generationcellElement );
    }
    searchpowerElement            := xmlDOM.CreateElement( "cell" );
    searchpowerElement.SetAttribute( "value", 'Power' );
    searchcolumnelement.AppendChild( searchpowerElement );
    traverse( powers, Elements, power ){
      searchpowercellElement      := xmlDOM.CreateElement( "cell" );
      searchpowercellElement.SetAttribute( "value", power.Power() );
      searchcolumnelement.AppendChild( searchpowercellElement );
    }
    searchmlbmqlElement           := xmlDOM.CreateElement( "cell" );
    searchmlbmqlElement.SetAttribute( "value", 'MQBMLB' );
    searchcolumnelement.AppendChild( searchmlbmqlElement );
    traverse( mlbmqls, Elements, mlbmql ){
      searchmlbmqlcellElement     := xmlDOM.CreateElement( "cell" );
      searchmlbmqlcellElement.SetAttribute( "value", mlbmql.MLBMQB() );
      searchcolumnelement.AppendChild( searchmlbmqlcellElement );
    }
    for( i := searchtotal; i < table.FinancialSalesRow( relsize ); i := i + 1 ){
      searchcellElement           := xmlDOM.CreateElement( "cell" );
      searchcellElement.SetAttribute( "value", '' );
      searchcolumnelement.AppendChild( searchcellElement );
    }
    minindex        := min( table, FinancialSalesColumn, column, not column.IsDay(), column.Index() );
    minindex                      := min( table, FinancialSalesColumn, column, not column.IsDay(), column.Index() );
    traverse ( table, FinancialSalesColumn, column, not column.IsDay() ) {
      columnelement               := xmlDOM.CreateElement( "column" );
      nameelement                 := xmlDOM.CreateElement( "name" );
      typeelement                 := xmlDOM.CreateElement( "type" );
      nameelement.TextContent( column.Name() );
      typeelement.TextContent( "String" );
      columnelement.AppendChild( nameelement );
      columnelement.AppendChild( typeelement );
      columnelement               := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, column.Name() );
      
      cells := selectsortedset( column, FinancialSalesCell, cell, cell.FinancialSalesRow().RowNr() );
    
      traverse ( cells, Elements, c ) {
        if( column.Index() = minindex ){
          row                     := c.FinancialSalesRow();
          //Factory
          InventorySummarySource::CreateCellElement( xmlDOM, searchunitcolumn, row.Factory() );
          //Generation
          InventorySummarySource::CreateCellElement( xmlDOM, generationcolumn, row.Product_MP().Generation() );
          //Power
          InventorySummarySource::CreateCellElement( xmlDOM, powercolumn, row.Product_MP().Power() );
          //MLBMQBS
          InventorySummarySource::CreateCellElement( xmlDOM, mlbmqbcolumn, row.Product_MP().MQBMLB() );
          //Product
          productcellElement      := xmlDOM.CreateElement( "cell" );
          productcellElement.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          //Unit
          unitcellElement         := xmlDOM.CreateElement( "cell" );
          unitcellElement.SetAttribute( "value", row.Unit() );
          unitcolumnelement.AppendChild( unitcellElement );
          if( cells.Size() > searchtotal ){
            for( i := searchtotal; i < cells.Size(); i := i + 1 ){
              searchcellElement1  := xmlDOM.CreateElement( "cell" );
              searchcellElement1.SetAttribute( "value", '' );
              searchcolumnelement.AppendChild( searchcellElement1 );
            }
          }
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
        }
        cellElement               := xmlDOM.CreateElement( "cell" );
        cellElement.SetAttribute( "value", c.Value() );
        columnelement.AppendChild( cellElement );
      }
      for( i := cells.Size(); i < searchtotal; i := i + 1 ){
        searchcellElement         := xmlDOM.CreateElement( "cell" );
        searchcellElement.SetAttribute( "value", '' );
        columnelement.AppendChild( searchcellElement );
        if( column.Index() = minindex ){
          productcellElement      := xmlDOM.CreateElement( "cell" );
          productcellElement.SetAttribute( "value", '' );
          productcolumnelement.AppendChild( productcellElement );
          //Unit
          unitcellElement         := xmlDOM.CreateElement( "cell" );
          unitcellElement.SetAttribute( "value", '' );
          unitcolumnelement.AppendChild( unitcellElement );
        }
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, c.Value() );
      }
      tableElement.AppendChild( columnelement );  
    }