From 9e7f6bf445c0cc04a2626596a6f2ee7b80f51ee6 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期五, 18 十月 2024 21:03:54 +0800
Subject: [PATCH] 库存汇总下载查询条件位置调整

---
 _Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement.qbl       |   16 +
 _Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement#822.qbl |   24 ++
 _Main/BL/Type_InventorySummarySource/StaticMethod_GetSearchRows.qbl           |   22 ++
 _Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement#817.qbl |   23 ++
 _Main/BL/Type_InventorySummarySource/StaticMethod_Download0.qbl               |  104 +++++++++++
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl               |   26 +-
 _Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement.qbl     |   26 ++
 _Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement0.qbl    |   21 ++
 _Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl                |  235 +++++++------------------
 _Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement0.qbl      |   19 ++
 10 files changed, 336 insertions(+), 180 deletions(-)

diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
index 6bcfb2a..f9b03a6 100644
--- a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
+++ b/_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 );
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement.qbl
new file mode 100644
index 0000000..6099ad5
--- /dev/null
+++ b/_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 );
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement0.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateCellElement0.qbl
new file mode 100644
index 0000000..509d7b3
--- /dev/null
+++ b/_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 );
+    }
+  *]
+}
diff --git "a/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement\043817.qbl" "b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement\043817.qbl"
new file mode 100644
index 0000000..3060af4
--- /dev/null
+++ "b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement\043817.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;
+  *]
+}
diff --git "a/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement\043822.qbl" "b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement\043822.qbl"
new file mode 100644
index 0000000..690264a
--- /dev/null
+++ "b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement\043822.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;
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement.qbl
new file mode 100644
index 0000000..e1d08e3
--- /dev/null
+++ b/_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;
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement0.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_CreateColumnElement0.qbl
new file mode 100644
index 0000000..e018a3e
--- /dev/null
+++ b/_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;
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
index c989643..d18d397 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
+++ b/_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 );  
     }
     
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Download0.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Download0.qbl
new file mode 100644
index 0000000..36a27c4
--- /dev/null
+++ b/_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();
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_GetSearchRows.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_GetSearchRows.qbl
new file mode 100644
index 0000000..b8deb38
--- /dev/null
+++ b/_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;
+  *]
+}

--
Gitblit v1.9.3