lazhen
2024-10-18 9e7f6bf445c0cc04a2626596a6f2ee7b80f51ee6
库存汇总下载查询条件位置调整
已修改2个文件
已添加8个文件
516 ■■■■■ 文件已修改
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement0.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement#817.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement#822.qbl 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement0.qbl 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl 235 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_Download0.qbl 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InventorySummarySource/StaticMethod_GetSearchRows.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
@@ -115,7 +115,7 @@
      ccsvaluesum           := ccsvaluesum + ccsvalue;
    }
    sumcolumn                 := table.FinancialWeeklyColumn( relnew, Name := 'SUM' );
    //cumulantcolumn            := table.FinancialWeeklyColumn( relnew, Name := '累计量' );
    cumulantcolumn            := table.FinancialWeeklyColumn( relnew, Name := '累计量' );
    proportioncolumn          := table.FinancialWeeklyColumn( relnew, Name := '占比' );
    //SUM
    totalpcellsum           := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]( [Number]totalpvaluesum ) );
@@ -131,18 +131,18 @@
    ccscellsum              := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluesum );
    ccsales.FinancialWeeklyCell( relinsert, ccscellsum );
    //累计量
    //totalpcellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalpvaluecumulant );
    //totalproduction.FinancialWeeklyCell( relinsert, totalpcellcumulant );
    //dlpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlpvaluecumulant );
    //dlproduction.FinancialWeeklyCell( relinsert, dlpcellcumulant );
    //ccpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccpvaluecumulant );
    //ccproduction.FinancialWeeklyCell( relinsert, ccpcellcumulant );
    //totalscellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalsvaluecumulant );
    //totalsales.FinancialWeeklyCell( relinsert, totalscellcumulant );
    //dlscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlsvaluecumulant );
    //dlsales.FinancialWeeklyCell( relinsert, dlscellcumulant );
    //ccscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluecumulant );
    //ccsales.FinancialWeeklyCell( relinsert, ccscellcumulant );
    totalpcellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalpvaluecumulant );
    totalproduction.FinancialWeeklyCell( relinsert, totalpcellcumulant );
    dlpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlpvaluecumulant );
    dlproduction.FinancialWeeklyCell( relinsert, dlpcellcumulant );
    ccpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccpvaluecumulant );
    ccproduction.FinancialWeeklyCell( relinsert, ccpcellcumulant );
    totalscellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalsvaluecumulant );
    totalsales.FinancialWeeklyCell( relinsert, totalscellcumulant );
    dlscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlsvaluecumulant );
    dlsales.FinancialWeeklyCell( relinsert, dlscellcumulant );
    ccscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluecumulant );
    ccsales.FinancialWeeklyCell( relinsert, ccscellcumulant );
    //占比
    totalpvalueproportion   := guard( ( totalpvaluecumulant / totalpvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
    totalpcellproportion    := proportioncolumn.FinancialWeeklyCell( relnew, Value := totalpvalueproportion );
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateCellElement (
  XMLDOMDocument xmlDOM,
  XMLDOMElement columnelement,
  String value
)
{
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    cellElement          := xmlDOM.CreateElement( "cell" );
    cellElement.SetAttribute( "value", value );
    columnelement.AppendChild( cellElement );
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateCellElement (
  XMLDOMDocument xmlDOM,
  XMLDOMElement columnelement,
  String value,
  Number rowsize
)
{
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    for( j := 0; j < rowsize; j := j + 1 ){
      cellElement          := xmlDOM.CreateElement( "cell" );
      cellElement.SetAttribute( "value", value );
      columnelement.AppendChild( cellElement );
    }
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement#817.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateColumnElement (
  XMLDOMElement xmltable,
  XMLDOMDocument xmlDOM,
  String name
) as XMLDOMElement
{
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    columnelement           := xmlDOM.CreateElement( "column" );
    nameelement             := xmlDOM.CreateElement( "name" );
    typeelement             := xmlDOM.CreateElement( "type" );
    nameelement.TextContent( name );
    typeelement.TextContent( "String" );
    columnelement.AppendChild( nameelement );
    columnelement.AppendChild( typeelement );
    xmltable.AppendChild( columnelement );
    return columnelement;
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement#822.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateColumnElement (
  XMLDOMElement xmltable,
  XMLDOMDocument xmlDOM,
  String value,
  String name,
  Number rowsize
) as XMLDOMElement
{
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    columnelement           := InventorySummarySource::CreateColumnElement( xmltable, xmlDOM, name );
    InventorySummarySource::CreateCellElement( xmlDOM, columnelement, value );
    for( i := 1; i < rowsize; i := i + 1 ){
      InventorySummarySource::CreateCellElement( xmlDOM, columnelement, '' );
    }
    return columnelement;
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateColumnElement (
  XMLDOMElement xmltable,
  XMLDOMDocument xmlDOM,
  Strings values,
  String name,
  Number rowsize
) as XMLDOMElement
{
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    columnelement           := InventorySummarySource::CreateColumnElement( xmltable, xmlDOM, name );
    for( i := 0; i < rowsize; i := i + 1 ){
      if( i < values.Size() ){
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, values.Element( i ) );
      }else{
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, '' );
      }
    }
    return columnelement;
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateColumnElement (
  XMLDOMElement xmltable,
  XMLDOMDocument xmlDOM,
  String name,
  Number rowsize
) as XMLDOMElement
{
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    columnelement           := InventorySummarySource::CreateColumnElement( xmltable, xmlDOM, '' );
    for( i := 0; i < rowsize; i := i + 1 ){
      InventorySummarySource::CreateCellElement( xmlDOM, columnelement, '' );
    }
    InventorySummarySource::CreateCellElement( xmlDOM, columnelement, name );
    return columnelement;
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
@@ -12,116 +12,67 @@
  Description: '下载财务报表数据'
  TextBody:
  [*
    //获取查询行数
    searchrowsize               := InventorySummarySource::GetSearchRows( factorys, generations, powers, mlbmqls );
    table                       := selectobject( macroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
    
    xmlDOMI                     := XMLDOMImplementation::Create();
    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 );
    //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 );
    //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 );
    //Attribute
    attricolumnelement          := xmlDOM.CreateElement( "column" );
    attrinameelement            := xmlDOM.CreateElement( "name" );
    attritypeelement            := xmlDOM.CreateElement( "type" );
    attrinameelement.TextContent( 'Attribute' );
    attritypeelement.TextContent( "String" );
    attricolumnelement.AppendChild( attrinameelement );
    attricolumnelement.AppendChild( attritypeelement );
    //Product/Unit
    factoryvalues               := selectuniquevalues( factorys, Elements, factory, factory.Name() );
    productcolumnelement        := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, factoryvalues, 'Unit', searchrowsize );
    InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, 'Product' );
    //Unit/Generation
    generationvalues            := selectuniquevalues( generations, Elements, generation, generation.Generation() );
    unitcolumnelement           := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, generationvalues, 'Generation', searchrowsize );
    InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, 'Unit' );
    //Attribute/Power
    powervalues                 := selectuniquevalues( powers, Elements, power, power.Power() );
    attricolumnelement          := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, powervalues, 'Power', searchrowsize );
    InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, 'Attribute' );
    //MLBMQBS
    mlbmqbvalues                := selectuniquevalues( mlbmqls, Elements, mlbmqb, mlbmqb.MLBMQB() );
    mlbmqlcolumnelement         := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, mlbmqbvalues, 'MLBMQB', searchrowsize );
    //Start date
    startcolumnelement          := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, search.StartDate().Format( 'M2/D2/Y' ), 'Start date', searchrowsize );
    //End date
    endcolumnelement            := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, search.EndDate().Format( 'M2/D2/Y' ), 'End date', searchrowsize );
    //Period
    periodcolumnelement         := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, search.Category(), 'Period', searchrowsize );
    
    tableElement.AppendChild( searchcolumnelement );
    tableElement.AppendChild( productcolumnelement );
    tableElement.AppendChild( unitcolumnelement );
    tableElement.AppendChild( attricolumnelement );
    searchtotal                 := factorys.Size() + generations.Size() + powers.Size() + mlbmqls.Size() + 10 ;
    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 );
    }
    searchstartdateElement      := xmlDOM.CreateElement( "cell" );
    searchstartdateElement.SetAttribute( "value", 'Start date' );
    searchcolumnelement.AppendChild( searchstartdateElement );
    searchstartdatecellElement  := xmlDOM.CreateElement( "cell" );
    searchstartdatecellElement.SetAttribute( "value", search.StartDate().Format( 'M2/D2/Y' ) );
    searchcolumnelement.AppendChild( searchstartdatecellElement );
    searchenddateElement        := xmlDOM.CreateElement( "cell" );
    searchenddateElement.SetAttribute( "value", 'End date' );
    searchcolumnelement.AppendChild( searchenddateElement );
    searchenddatecellElement    := xmlDOM.CreateElement( "cell" );
    searchenddatecellElement.SetAttribute( "value", search.EndDate().Format( 'M2/D2/Y' ) );
    searchcolumnelement.AppendChild( searchenddatecellElement );
    searchperiodElement         := xmlDOM.CreateElement( "cell" );
    searchperiodElement.SetAttribute( "value", 'Periods' );
    searchcolumnelement.AppendChild( searchperiodElement );
    searchperiodcellElement     := xmlDOM.CreateElement( "cell" );
    searchperiodcellElement.SetAttribute( "value", search.Category() );
    searchcolumnelement.AppendChild( searchperiodcellElement );
    for( i := searchtotal; i < table.InventroySummaryRow( relsize ) * 4; i := i + 1 ){
      searchcellElement         := xmlDOM.CreateElement( "cell" );
      searchcellElement.SetAttribute( "value", '' );
      searchcolumnelement.AppendChild( searchcellElement );
    searchcolumn                := 7 ;
    rowsize                     := table.InventroySummaryRow( relsize ) * 4;
    for( i := table.InventorySummaryColumn( relsize ); i < searchcolumn - 3; i := i + 1 ){
      if( i = 0 ){
        InventorySummarySource::CreateCellElement( xmlDOM, mlbmqlcolumnelement, '', rowsize );
      }else if( i = 1 ){
        InventorySummarySource::CreateCellElement( xmlDOM, startcolumnelement, '', rowsize );
      }else if( i = 2 ){
        InventorySummarySource::CreateCellElement( xmlDOM, endcolumnelement, '', rowsize );
      }else if( i = 3 ){
        InventorySummarySource::CreateCellElement( xmlDOM, periodcolumnelement, '', rowsize );
      }
    }
    
    traverse ( table, InventorySummaryColumn, column ) {
      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             := null( XMLDOMElement );
      if( column.Index() = 0 ){
        columnelement           := mlbmqlcolumnelement;
        InventorySummarySource::CreateCellElement( xmlDOM, mlbmqlcolumnelement, column.Name() );
      }else if( column.Index() = 1 ){
        columnelement           := startcolumnelement
        InventorySummarySource::CreateCellElement( xmlDOM, startcolumnelement, column.Name() );
      }else if( column.Index() = 2 ){
        columnelement           := endcolumnelement;
        InventorySummarySource::CreateCellElement( xmlDOM, endcolumnelement, column.Name() );
      }else if( column.Index() = 3 ){
        columnelement           := periodcolumnelement;
        InventorySummarySource::CreateCellElement( xmlDOM, periodcolumnelement, column.Name() );
      }else{
        columnelement           := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, column.Name(), rowsize );
      }
      
      cells                     := selectsortedset( column, InventorySummaryCell, cell, cell.InventroySummaryRow().RowNr() );
    
@@ -129,86 +80,36 @@
        if( column.Index() = 0 ){
          row                   := c.InventroySummaryRow();
          //Product
          productcellElement1   := xmlDOM.CreateElement( "cell" );
          productcellElement1.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement1 );
          productcellElement2   := xmlDOM.CreateElement( "cell" );
          productcellElement2.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement2 );
          productcellElement3   := xmlDOM.CreateElement( "cell" );
          productcellElement3.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement3 );
          productcellElement4   := xmlDOM.CreateElement( "cell" );
          productcellElement4.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement4 );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          //Unit
          unitcellElement1      := xmlDOM.CreateElement( "cell" );
          unitcellElement1.SetAttribute( "value", row.Unit() );
          unitcolumnelement.AppendChild( unitcellElement1 );
          unitcellElement2      := xmlDOM.CreateElement( "cell" );
          unitcellElement2.SetAttribute( "value", row.Unit() );
          unitcolumnelement.AppendChild( unitcellElement2 );
          unitcellElement3      := xmlDOM.CreateElement( "cell" );
          unitcellElement3.SetAttribute( "value", row.Unit() );
          unitcolumnelement.AppendChild( unitcellElement3 );
          unitcellElement4      := xmlDOM.CreateElement( "cell" );
          unitcellElement4.SetAttribute( "value", row.Unit() );
          unitcolumnelement.AppendChild( unitcellElement4 );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          //Attribute
          //期末库存
          endcellElement        := xmlDOM.CreateElement( "cell" );
          endcellElement.SetAttribute( "value", '期末库存' );//EndingInventory
          attricolumnelement.AppendChild( endcellElement );
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '期末库存' );//EndingInventory
          //最小库存
          mincellElement        := xmlDOM.CreateElement( "cell" );
          mincellElement.SetAttribute( "value", '最小库存' );//MinimumInventory
          attricolumnelement.AppendChild( mincellElement );
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '最小库存' );//MinimumInventory
          //最大库存
          maxcellElement        := xmlDOM.CreateElement( "cell" );
          maxcellElement.SetAttribute( "value", '最大库存' );//MaximumInventory
          attricolumnelement.AppendChild( maxcellElement );
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '最大库存' );//MaximumInventory
          //平均库存
          avecellElement        := xmlDOM.CreateElement( "cell" );
          avecellElement.SetAttribute( "value", '平均库存' );//AverageInventory
          attricolumnelement.AppendChild( avecellElement );
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '平均库存' );//AverageInventory
    
        }
        //期末库存
        endcellElement          := xmlDOM.CreateElement( "cell" );
        endcellElement.SetAttribute( "value", [String]c.EndingInventory() );
        columnelement.AppendChild( endcellElement );
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.EndingInventory() );
        //最小库存
        mincellElement          := xmlDOM.CreateElement( "cell" );
        mincellElement.SetAttribute( "value", [String]c.MinimumInventory() );
        columnelement.AppendChild( mincellElement );
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.MinimumInventory() );
        //最大库存
        maxcellElement          := xmlDOM.CreateElement( "cell" );
        maxcellElement.SetAttribute( "value", [String]c.MaximumInventory() );
        columnelement.AppendChild( maxcellElement );
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.MaximumInventory() );
        //平均库存
        avecellElement          := xmlDOM.CreateElement( "cell" );
        avecellElement.SetAttribute( "value", [String]c.AverageInventory() );
        columnelement.AppendChild( avecellElement );
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.AverageInventory() );
      }
      for( i := cells.Size() * 4; i < searchtotal; i := i + 1 ){
        searchcellElement       := xmlDOM.CreateElement( "cell" );
        searchcellElement.SetAttribute( "value", '' );
        columnelement.AppendChild( searchcellElement );
        if( column.Index() = 0 ){
          productcellElement    := xmlDOM.CreateElement( "cell" );
          productcellElement.SetAttribute( "value", '' );
          productcolumnelement.AppendChild( productcellElement );
          unitcellElement       := xmlDOM.CreateElement( "cell" );
          unitcellElement.SetAttribute( "value", '' );
          unitcolumnelement.AppendChild( unitcellElement );
          endcellElement        := xmlDOM.CreateElement( "cell" );
          endcellElement.SetAttribute( "value", '' );//EndingInventory
          attricolumnelement.AppendChild( endcellElement );
        }
      }
      tableElement.AppendChild( columnelement );  
    }
    
_Main/BL/Type_InventorySummarySource/StaticMethod_Download0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Download0 (
  MacroPlan macroPlan,
  Factorys factorys,
  ProductGenerations generations,
  ProductPowers powers,
  ProductMLBMQBs mlbmqls,
  InventorySummarySearch search
) as BinaryValue
{
  Description: '下载财务报表数据'
  TextBody:
  [*
    //获取查询行数
    searchrowsize               := InventorySummarySource::GetSearchRows( factorys, generations, powers, mlbmqls );
    table                       := selectobject( macroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
    xmlDOMI                     := XMLDOMImplementation::Create();
    xmlDOM                      := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
    tableElement                := xmlDOM.GetElementByTagName( "table", 0 );
    //Product
    productcolumnelement        := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Product' );
    //Unit
    unitcolumnelement           := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Unit' );
    //Attribute
    attricolumnelement          := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, 'Attribute' );
    traverse ( table, InventorySummaryColumn, column ) {
      columnelement             := InventorySummarySource::CreateColumnElement( tableElement, xmlDOM, column.Name() );
      cells                     := selectsortedset( column, InventorySummaryCell, cell, cell.InventroySummaryRow().RowNr() );
      traverse ( cells, Elements, c ) {
        if( column.Index() = 0 ){
          row                   := c.InventroySummaryRow();
          //Product
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          InventorySummarySource::CreateCellElement( xmlDOM, productcolumnelement, row.Name() );
          //Unit
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          InventorySummarySource::CreateCellElement( xmlDOM, unitcolumnelement, row.Unit() );
          //Attribute
          //期末库存
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '期末库存' );//EndingInventory
          //最小库存
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '最小库存' );//MinimumInventory
          //最大库存
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '最大库存' );//MaximumInventory
          //平均库存
          InventorySummarySource::CreateCellElement( xmlDOM, attricolumnelement, '平均库存' );//AverageInventory
        }
        //期末库存
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.EndingInventory() );
        //最小库存
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.MinimumInventory() );
        //最大库存
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.MaximumInventory() );
        //平均库存
        InventorySummarySource::CreateCellElement( xmlDOM, columnelement, [String]c.AverageInventory() );
      }
      tableElement.AppendChild( columnelement );
    }
    searchxmlDOM                := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + 'Search' + '</name></table>' );
    searchElement               := searchxmlDOM.GetElementByTagName( "table", 0 );
    //Unit
    factoryvalues               := selectuniquevalues( factorys, Elements, factory, factory.Name() );
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, factoryvalues, 'Unit', searchrowsize );
    //Generation
    generationvalues            := selectuniquevalues( generations, Elements, generation, generation.Generation() );
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, generationvalues, 'Generation', searchrowsize );
    //Power
    powervalues                 := selectuniquevalues( powers, Elements, power, power.Power() );
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, powervalues, 'Power', searchrowsize );
    //MLBMQBS
    mlbmqbvalues                := selectuniquevalues( mlbmqls, Elements, mlbmqb, mlbmqb.MLBMQB() );
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, mlbmqbvalues, 'MLBMQB', searchrowsize );
    //Start date
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, search.StartDate().Format( 'M2/D2/Y' ), 'Start date', searchrowsize );
    //End date
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, search.EndDate().Format( 'M2/D2/Y' ), 'End date', searchrowsize );
    //Period
    InventorySummarySource::CreateColumnElement( searchElement, searchxmlDOM, search.Category(), 'Period', searchrowsize );
    xmlString                   := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
    tableGroupHandle            := TableGroupHandle::Create( InventorySummaryReport::GetDefaultName() );
    tableHandle                 := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
    tableGroupHandle.Add( tableHandle );
    searchxmlString                   := xmlDOMI.CreateSerializer().WriteToString( searchxmlDOM );
    searchtableHandle                 := TableHandle::ImportXML( BinaryValue::Construct( searchxmlString ) );
    tableGroupHandle.Add( searchtableHandle );
    binaryData                  := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    return binaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_InventorySummarySource/StaticMethod_GetSearchRows.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetSearchRows (
  Factorys factorys,
  ProductGenerations generations,
  ProductPowers powers,
  ProductMLBMQBs mlbmqls
) as Number
{
  Description: '获取查询条件行数'
  TextBody:
  [*
    // ç”„兰鸽 Oct-18-2024 (created)
    searchrows                  := construct( Numbers );
    searchrows.Add( factorys.Size() );
    searchrows.Add( generations.Size() );
    searchrows.Add( powers.Size() );
    searchrows.Add( mlbmqls.Size() );
    searchrowsize               := max( searchrows, Elements, e, e );
    return searchrowsize;
  *]
}