From 46f580350af9ee2bbccfa88fea8532b129564ce0 Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期一, 30 九月 2024 17:28:12 +0800
Subject: [PATCH] 修复一些bug

---
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl                                                  |   50 ---
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhTable_OnDataChanged.def |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bExportTemplate_OnClick.def      |   18 +
 _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_dhXMLDataListener_OnDataChanged.def           |   22 ++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def                                 |   36 +++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhXMLDataListener_OnDataChanged.def  |   22 ++
 _Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl                                                   |   77 +++----
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl                                                   |    8 
 _Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetTableName.qbl                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bExport_OnClick#891.def              |   18 +
 _Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelDemandComparison.def                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhTable_OnDataChanged.def                       |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon820_OnClick#71.def    |    6 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetTableName.qbl                                                  |   10 
 _Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl                                                                         |   41 +++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def                |    1 
 _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction#633.def                                      |   12 -
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison#634.def                      |    2 
 _Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl                                                       |   14 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhXMLDataListener_OnDataChanged#648.def            |   22 ++
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bExport_OnClick.def                                |   18 +
 _Main/UI/MacroPlannerWebApp/Component_Form701/_ROOT_Component_FormOfflinePlanChanges#701.def                                 |    1 
 _Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl                                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504#801.def                                               |   52 ++++
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def               |   21 +
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bImportOutput_OnClick.def        |    6 
 /dev/null                                                                                                                    |   32 --
 _Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def                                                     |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon206#478.def                             |   38 +++
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon_OnClick#88.def       |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322#88.def                              |   41 ++
 36 files changed, 436 insertions(+), 188 deletions(-)

diff --git a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
index d30416e..f87cb3f 100644
--- a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
+++ b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
@@ -10,14 +10,18 @@
   [*
     // rislai Jun-21-2024 (created)
     manager := select( owner,ExportXMLManager,manager,manager.Name() = tableName );
-    if( isnull( manager )){
-      manager := owner.ExportXMLManager( relnew,Name := tableName,SheetName := tableName );
-    }else{
-      manager.ExportXMLData( relflush );
+    if( not isnull( manager )){
+      manager.Delete();
     }
+    manager := owner.ExportXMLManager( relnew,Name := tableName,SheetName := tableName );
     traverse( columnXMLData,Elements,element,element.TrimBoth() <> "" ){
        data := manager.ExportXMLData( relnew, XML := element);
-       data.Priority( data.CalculatePriority( ));
+       try{
+         data.Priority( data.CalculatePriority( ));
+       }onerror{
+         info( element );
+       }
+         
     }
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl
index d19420b..588f44b 100644
--- a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_AsyncExport.qbl
@@ -12,21 +12,21 @@
     // rislai Jun-20-2024 (created)
     sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
     
-    attributeNames := LocalCell_DemandComparison::GetAttributeNames();
+    attributeNames := LocalCell_OfflinePlanComparison::GetAttributeNames();
     
     columnstring := emit( "" );
     flag := true;
     traverse( sortColumns,Elements,sortColumn ){
       if( flag ){
-        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
+        attributeXML := rows -> LocalCell_OfflinePlanComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
         columnstring := columnstring.Merge( attributeXML )
         flag := false;
       }
       
-      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
+      cellxml := rows -> LocalCell_OfflinePlanComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
       columnstring := columnstring.Merge( cellxml);
     }
      
-    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,LocalCell_OfflinePlanComparison::GetTableName() );
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl
index 16f2c4d..30a7609 100644
--- a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_Compared.qbl
@@ -9,7 +9,7 @@
   TextBody:
   [*
     // rislai Jun-20-2024 (created)
-    table := recycleBin.LocalTable( relnew,Name := "涓嬬嚎璁″垝鎶ヨ〃瀵规瘮");
+    table := recycleBin.LocalTable( relnew,Name := LocalCell_OfflinePlanComparison::GetTableName());
     
     localColumns := construct( LocalColumns );
     localColumnIndexTree := NamedValueTree::Create();
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl
index 6d45dc4..1de038a 100644
--- a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetColumnXML.qbl
@@ -13,14 +13,14 @@
     // rislai Jun-21-2024 (created)
     // rislai Jun-20-2024 (created)
     columnXML := "";
-    cells := selectsortedset( column, LocalCell.astype( LocalCell_DemandComparison ), cell,
+    cells := selectsortedset( column, LocalCell.astype( LocalCell_OfflinePlanComparison ), cell,
                                   exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
     if( type = "data" ){
       columnXML := "";
       if( column.IsAttrbuteColumn() ){
         columnXML := "<column><name>" + column.Name() + "</name><type>String</type>"; 
       }else{
-        columnXML := "<column><name>" + column.Name() + "</name><type>Number</type>"; 
+        columnXML := "<column><name>" + column.Date().Format( "Y/M2/D2") + "</name><type>Number</type>"; 
       }
       traverse ( cells, Elements, cell ) {
         traverse( attributeNames ,Elements,e ){
@@ -31,12 +31,12 @@
       columnXML := columnXML + "</column>";
     }
     if( type = "attribute" ){
-      columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
-      columnXML0_2 := "<column><name>Generation</name><type>String</type>";
-      columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
-      columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
+    //  columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
+    //  columnXML0_2 := "<column><name>Generation</name><type>String</type>";
+    //  columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
+    //  columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
       
-      columnXML1 := "<column><name>Product ID</name><type>String</type>";
+      columnXML1 := "<column><name>Line</name><type>String</type>";
       columnXML2 := "<column><name>Attribute</name><type>String</type>";
       
       traverse ( cells, Elements, cell ) {
@@ -46,50 +46,16 @@
             cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
             columnXML1 := columnXML1 + cellXML;
             
-            salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "浜у湴");
-            if( not isnull( salesSegment )){
-              cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "绌�",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
-              columnXML0_1 := columnXML0_1 + cellXML0_1;
-            }else{
-              cellXML0_1 := '<cell value="  "/>'
-              columnXML0_1 := columnXML0_1 + cellXML0_1;
-            }
-            
-            product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
-            if( not isnull( product )){
-              cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
-              cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
-              cellXML0_4 := '<cell value="' + product.Power() + '"/>';
-              columnXML0_2 := columnXML0_2 + cellXML0_2;
-              columnXML0_3 := columnXML0_3 + cellXML0_3;
-              columnXML0_4 := columnXML0_4 + cellXML0_4;
-            }else{
-              cellXML0_2 := '<cell value="  "/>';
-              cellXML0_3 := '<cell value="  "/>';
-              cellXML0_4 := '<cell value="  "/>';
-              columnXML0_2 := columnXML0_2 + cellXML0_2;
-              columnXML0_3 := columnXML0_3 + cellXML0_3;
-              columnXML0_4 := columnXML0_4 + cellXML0_4;
-            }
-            
             flag := false;
           }else{
             cellXML := '<cell value="  "/>'
             columnXML1 := columnXML1 + cellXML;
-            cellXML0_1 := '<cell value="  "/>'
-            cellXML0_2 := '<cell value="  "/>';
-            cellXML0_3 := '<cell value="  "/>';
-            cellXML0_4 := '<cell value="  "/>';
-            columnXML0_1 := columnXML0_1 + cellXML0_1;
-            columnXML0_2 := columnXML0_2 + cellXML0_2;
-            columnXML0_3 := columnXML0_3 + cellXML0_3;
-            columnXML0_4 := columnXML0_4 + cellXML0_4;
           }
           cellXML := '<cell value="' + e + '"/>'
           columnXML2 := columnXML2 + cellXML;
         }
       }
-      columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
+      columnXML := columnXML1 + "</column>" + columnXML2 + "</column>";
     }
      
     return columnXML;
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetTableName.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetTableName.qbl
new file mode 100644
index 0000000..809a3b7
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/StaticMethod_GetTableName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetTableName () const declarative remote as String
+{
+  TextBody:
+  [*
+    // Akari Sep-30-2024 (created)
+    return "涓嬬嚎璁″垝鎶ヨ〃瀵规瘮";
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
index d19420b..5f37cc2 100644
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
@@ -12,21 +12,21 @@
     // rislai Jun-20-2024 (created)
     sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
     
-    attributeNames := LocalCell_DemandComparison::GetAttributeNames();
+    attributeNames := LocalCell_ProductionComparison::GetAttributeNames();
     
     columnstring := emit( "" );
     flag := true;
     traverse( sortColumns,Elements,sortColumn ){
       if( flag ){
-        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
+        attributeXML := rows -> LocalCell_ProductionComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
         columnstring := columnstring.Merge( attributeXML )
         flag := false;
       }
       
-      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
+      cellxml := rows -> LocalCell_ProductionComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
       columnstring := columnstring.Merge( cellxml);
     }
-     
-    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
+    
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,LocalCell_ProductionComparison::GetTableName() );
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
index 6d45dc4..e8d52d5 100644
--- a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
@@ -10,17 +10,16 @@
 {
   TextBody:
   [*
-    // rislai Jun-21-2024 (created)
-    // rislai Jun-20-2024 (created)
+     // rislai Jun-21-2024 (created)
     columnXML := "";
-    cells := selectsortedset( column, LocalCell.astype( LocalCell_DemandComparison ), cell,
+    cells := selectsortedset( column, LocalCell.astype( LocalCell_ProductionComparison ), cell,
                                   exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
     if( type = "data" ){
       columnXML := "";
       if( column.IsAttrbuteColumn() ){
         columnXML := "<column><name>" + column.Name() + "</name><type>String</type>"; 
       }else{
-        columnXML := "<column><name>" + column.Name() + "</name><type>Number</type>"; 
+        columnXML := "<column><name>" + column.Date().Format( "Y/M2/D2") + "</name><type>Number</type>"; 
       }
       traverse ( cells, Elements, cell ) {
         traverse( attributeNames ,Elements,e ){
@@ -31,12 +30,12 @@
       columnXML := columnXML + "</column>";
     }
     if( type = "attribute" ){
-      columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
-      columnXML0_2 := "<column><name>Generation</name><type>String</type>";
-      columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
-      columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
+    
+    //  columnXML0_2 := "<column><name>Generation</name><type>String</type>";
+    //  columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
+    //  columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
       
-      columnXML1 := "<column><name>Product ID</name><type>String</type>";
+      columnXML1 := "<column><name>Line</name><type>String</type>";
       columnXML2 := "<column><name>Attribute</name><type>String</type>";
       
       traverse ( cells, Elements, cell ) {
@@ -45,51 +44,41 @@
           if( flag ){
             cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
             columnXML1 := columnXML1 + cellXML;
-            
-            salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "浜у湴");
-            if( not isnull( salesSegment )){
-              cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "绌�",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
-              columnXML0_1 := columnXML0_1 + cellXML0_1;
-            }else{
-              cellXML0_1 := '<cell value="  "/>'
-              columnXML0_1 := columnXML0_1 + cellXML0_1;
-            }
-            
-            product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
-            if( not isnull( product )){
-              cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
-              cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
-              cellXML0_4 := '<cell value="' + product.Power() + '"/>';
-              columnXML0_2 := columnXML0_2 + cellXML0_2;
-              columnXML0_3 := columnXML0_3 + cellXML0_3;
-              columnXML0_4 := columnXML0_4 + cellXML0_4;
-            }else{
-              cellXML0_2 := '<cell value="  "/>';
-              cellXML0_3 := '<cell value="  "/>';
-              cellXML0_4 := '<cell value="  "/>';
-              columnXML0_2 := columnXML0_2 + cellXML0_2;
-              columnXML0_3 := columnXML0_3 + cellXML0_3;
-              columnXML0_4 := columnXML0_4 + cellXML0_4;
-            }
+    
+    //        product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
+    //        if( not isnull( product )){
+    //          cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
+    //          cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
+    //          cellXML0_4 := '<cell value="' + product.Power() + '"/>';
+    //          columnXML0_2 := columnXML0_2 + cellXML0_2;
+    //          columnXML0_3 := columnXML0_3 + cellXML0_3;
+    //          columnXML0_4 := columnXML0_4 + cellXML0_4;
+    //        }else{
+    //          cellXML0_2 := '<cell value="  "/>';
+    //          cellXML0_3 := '<cell value="  "/>';
+    //          cellXML0_4 := '<cell value="  "/>';
+    //          columnXML0_2 := columnXML0_2 + cellXML0_2;
+    //          columnXML0_3 := columnXML0_3 + cellXML0_3;
+    //          columnXML0_4 := columnXML0_4 + cellXML0_4;
+    //        }
             
             flag := false;
           }else{
             cellXML := '<cell value="  "/>'
             columnXML1 := columnXML1 + cellXML;
-            cellXML0_1 := '<cell value="  "/>'
-            cellXML0_2 := '<cell value="  "/>';
-            cellXML0_3 := '<cell value="  "/>';
-            cellXML0_4 := '<cell value="  "/>';
-            columnXML0_1 := columnXML0_1 + cellXML0_1;
-            columnXML0_2 := columnXML0_2 + cellXML0_2;
-            columnXML0_3 := columnXML0_3 + cellXML0_3;
-            columnXML0_4 := columnXML0_4 + cellXML0_4;
+    //        cellXML0_2 := '<cell value="  "/>';
+    //        cellXML0_3 := '<cell value="  "/>';
+    //        cellXML0_4 := '<cell value="  "/>';
+    //        columnXML0_2 := columnXML0_2 + cellXML0_2;
+    //        columnXML0_3 := columnXML0_3 + cellXML0_3;
+    //        columnXML0_4 := columnXML0_4 + cellXML0_4;
           }
           cellXML := '<cell value="' + e + '"/>'
           columnXML2 := columnXML2 + cellXML;
         }
       }
-      columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
+      // columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" +
+      columnXML :=  columnXML1 + "</column>" + columnXML2 + "</column>";
     }
      
     return columnXML;
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetTableName.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetTableName.qbl
new file mode 100644
index 0000000..d1a68a7
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetTableName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetTableName () const declarative remote as String
+{
+  TextBody:
+  [*
+    // Akari Sep-30-2024 (created)
+    return "浜ч噺瀵规瘮鎶ヨ〃";
+  *]
+}
diff --git a/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl b/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
index 6c22eaa..d187c45 100644
--- a/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
+++ b/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
@@ -9,7 +9,7 @@
   [*
     // rislai Jul-17-2024 (created)
     macroPlan := this.MacroPlan();
-    table := recycleBin.LocalTable( relnew,Name := "浜ч噺瀵规瘮鎶ヨ〃");
+    table := recycleBin.LocalTable( relnew,Name := LocalCell_ProductionComparison::GetTableName());
     
     actualDailyProductionDatas := selectset( archive,ActualDailyProductionData,data,true );
     actualDailyProductionDataIndexTree := NamedValueTree::Create();
@@ -31,7 +31,7 @@
     
     traverse( this,OfflinePlanRow,row,row.Type() = "1" ){
       productID := row.ProductID();
-      productLine := row.ProductionLine();
+      // productLine := row.ProductionLine();
       localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID );
       traverse( row,OfflinePlanCell,cell,cell.OfflinePlanColumn().ColumnDate() >= macroPlan.StartOfPlanning().Date() ){
         localColumnHandle := localColumnIndexTree.GetHandle( cell.OfflinePlanColumn().ColumnDate().AsQUILL() );
@@ -57,6 +57,43 @@
         column.Delete(); 
       } 
     }
+    // maxCellCount := table.LocalRow( relsize );  
+    
+    //traverse( table,LocalColumn,column ){
+    //  cellIndexTree := NamedValueTree::Create();
+    //  columnKey := column.CustomDate().AsQUILL();
+    //  count := 0;
+    //  traverse( column,LocalCell,cell ){
+    //    rowKey := cell.LocalRow().CustomName();
+    //    cellHandle := cellIndexTree.GetHandle( rowKey + columnKey );
+    //    cellIndexTree.Root().AddChild( cellHandle,count );
+    //    count++;
+    //  }
+    //  traverse( table,LocalRow,row ){
+    //    rowKey := row.CustomName();
+    //    cellHandle := cellIndexTree.GetHandle( rowKey + columnKey );
+    //    cellCount := guard( cellIndexTree.Root().Child( cellHandle ),null( NamedValue ));
+    //    if( isnull( cellCount )){
+    //      row.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := column,
+    //                     Plan := 0,Actual := 0 );
+    //    }
+    //  }
+    //}
+    
+    traverse( table,LocalRow,row ){
+      cellCountTree := NamedValueTree::Create();
+      traverse( row,LocalCell,cell ){
+        cellHandle := cellCountTree.GetHandle( cell.LocalColumn().CustomDate().AsQUILL());
+        cellCountTree.Root().AddChild( cellHandle,0 );
+      }
+      traverse( table,LocalColumn,column ){
+        cellHandle := cellCountTree.GetHandle( column.CustomDate().AsQUILL());
+        cell := guard( cellCountTree.Root().Child( cellHandle ),null( NamedValue ));
+        if( isnull( cell )){
+          row.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := column,Plan := 0,Actual := 0 );
+        }
+      } 
+    }
     
     return table;
   *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def
index 6d90515..d565641 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_MatrixEditor.def
@@ -18,7 +18,7 @@
           Properties:
           [
             DataType: 'LocalTable'
-            Source: 'dhComparisonData'
+            Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalRow.LocalCell.astype(LocalCell_OfflinePlanComparison)'
           ]
@@ -47,7 +47,7 @@
             DataType: 'LocalTable'
             FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanChanges.dhFinelProduct'
             FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
-            Source: 'dhComparisonData'
+            Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalRow'
           ]
@@ -75,7 +75,7 @@
             DataType: 'LocalTable'
             FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanChanges.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanChanges.dhEndDate'
             FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() '
-            Source: 'dhComparisonData'
+            Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalColumn'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelDemandComparison.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelDemandComparison.def
index d41af93..5e92fdf 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelDemandComparison.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelDemandComparison.def
@@ -5,7 +5,7 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component dhComparisonData
+    Component dhTable
     {
       #keys: '[412672.1.78210541]'
       BaseType: 'WebDataHolder'
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def"
index 28e3804..0b818cc 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def"
@@ -18,10 +18,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'structured[MacroPlan]'
-            Source: 'dhMacroPlans'
+            DataType: 'structured[OfflinePlanTable]'
+            Source: 'dhOfflinePlanTables'
             Taborder: 0
-            Transformation: 'Elements.OfflinePlanTable'
+            Transformation: 'Elements'
           ]
         }
       ]
@@ -55,10 +55,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'structured[MacroPlan]'
-            Source: 'dhMacroPlans'
+            DataType: 'structured[OfflinePlanTable]'
+            Source: 'dhOfflinePlanTables'
             Taborder: 0
-            Transformation: 'Elements.OfflinePlanTable'
+            Transformation: 'Elements'
           ]
         }
       ]
@@ -69,16 +69,52 @@
         Taborder: 1
       ]
     }
-    Component dhMacroPlans id:dhMacroPlans_891
+    Component dhOfflinePlanTables
     {
       #keys: '[414996.1.103241339]'
       BaseType: 'WebDataHolder'
-      Databinding: 'structured[MacroPlan]*'
+      Databinding: 'structured[OfflinePlanTable]*'
       Properties:
       [
         Taborder: 3
       ]
     }
+    Component bExport
+    {
+      #keys: '[414996.1.104721685]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 4
+      ]
+    }
+    Component dhXMLDataListener
+    {
+      #keys: '[414996.1.104721708]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ExportXMLManager]*'
+      Children:
+      [
+        Component DataExtractor510
+        {
+          #keys: '[414996.1.104721709]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'RecycleBin'
+            FixedFilter: 'object.Name() = LocalCell_OfflinePlanComparison::GetTableName()'
+            Source: 'RecycleBin'
+            Taborder: 0
+            Transformation: 'ExportXMLManager'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhComparisonData_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhTable_OnDataChanged.def
similarity index 65%
rename from _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhComparisonData_OnDataChanged.def
rename to _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhTable_OnDataChanged.def
index b236fb4..35546db 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhComparisonData_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelDemandComparison_dhTable_OnDataChanged.def
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
-#parent: PanelDemandComparison/dhComparisonData
-Response OnDataChanged () id:Response_PanelDemandComparison_dhComparisonData_OnDataChanged
+#parent: PanelDemandComparison/dhTable
+Response OnDataChanged () id:Response_PanelDemandComparison_dhTable_OnDataChanged
 {
   #keys: '[412672.1.78210528]'
   CanBindMultiple: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
index d361d10..da3570f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
@@ -12,7 +12,7 @@
       baseVersion := ddlBaseOfflinePlanTable.Data();
       compareVersion := ddlCompareOfflinePlanTable.Data();
       
-      dhComparisonData.Data( LocalCell_OfflinePlanComparison::Compared( RecycleBin,baseVersion,compareVersion ));
+      dhTable.Data( LocalCell_OfflinePlanComparison::Compared( RecycleBin,baseVersion,compareVersion ));
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bExport_OnClick.def
new file mode 100644
index 0000000..b79df21
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bExport_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504_801/bExport
+Response OnClick () id:Response_PanelRibbon504_bExport_OnClick
+{
+  #keys: '[414996.1.104721684]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      rows := selectset( dhTable.Data(),LocalRow,row,exists( dhFinelProduct.Data(),Elements,product,product.ID() = row.Name()) );
+      columns := selectset( dhTable.Data( ),LocalColumn,column,true );
+      LocalCell_OfflinePlanComparison::AsyncExport( RecycleBin, rows, columns, MacroPlan );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhMacroPlans_OnCreated\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhMacroPlans_OnCreated\04357.def"
deleted file mode 100644
index 485814d..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhMacroPlans_OnCreated\04357.def"
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelRibbon504_801/dhMacroPlans_891
-Response OnCreated () id:Response_PanelRibbon322_dhMacroPlans_OnCreated_57
-{
-  #keys: '[414996.1.103241337]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
-      this.Data( &macroPlans );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def"
new file mode 100644
index 0000000..fec74d0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def"
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504_801/dhOfflinePlanTables
+Response OnCreated () id:Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated_57
+{
+  #keys: '[414996.1.103241337]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
+      offlinePlanTables := selectset( macroPlans,Elements.OfflinePlanTable,table,true );
+      traverse( macroPlans,Elements,element ){
+        info( element.MDSID() ); 
+      }
+      this.Data( &offlinePlanTables );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhXMLDataListener_OnDataChanged\043648.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhXMLDataListener_OnDataChanged\043648.def"
new file mode 100644
index 0000000..1bcf365
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhXMLDataListener_OnDataChanged\043648.def"
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504_801/dhXMLDataListener
+Response OnDataChanged () id:Response_PanelRibbon504_dhXMLDataListener_OnDataChanged_648
+{
+  #keys: '[414996.1.104721706]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( dhXMLDataListener.Data(),Elements,element ){
+        binaryValue := element.Export();
+      
+        Application.Download( element.Name() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+      
+        element.Delete();
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/_ROOT_Component_FormOfflinePlanChanges\043701.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/_ROOT_Component_FormOfflinePlanChanges\043701.def"
index 9af7819..9c19aa0 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form701/_ROOT_Component_FormOfflinePlanChanges\043701.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/_ROOT_Component_FormOfflinePlanChanges\043701.def"
@@ -12,6 +12,7 @@
   ]
   Properties:
   [
+    Description: '鐢熶骇璁″垝鍙樻洿鎶ヨ〃'
     Image: 'DOCUMENT_CENTER'
     Title: '鐢熶骇璁″垝鍙樻洿鎶ヨ〃'
   ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
index 9fe94ea..3bb08ff 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
@@ -18,7 +18,7 @@
           Properties:
           [
             DataType: 'LocalTable'
-            Source: 'dhComparisonData'
+            Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalRow.LocalCell.astype(LocalCell_ProductionComparison)'
           ]
@@ -47,7 +47,7 @@
             DataType: 'LocalTable'
             FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanComparison.dhFinelProduct'
             FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
-            Source: 'dhComparisonData'
+            Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalRow'
           ]
@@ -75,7 +75,7 @@
             DataType: 'LocalTable'
             FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison.dhEndDate'
             FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date()'
-            Source: 'dhComparisonData'
+            Source: 'dhTable'
             Taborder: 0
             Transformation: 'LocalColumn'
           ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def"
index d1923c2..4400667 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def"
@@ -6,7 +6,7 @@
   Children:
   [
     #child: MatrixEditor_988
-    Component dhComparisonData
+    Component dhTable
     {
       #keys: '[412672.1.61940683]'
       BaseType: 'WebDataHolder'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
index abb2e55..395d971 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
@@ -52,6 +52,42 @@
         Taborder: 2
       ]
     }
+    Component bExport id:bExport_298
+    {
+      #keys: '[414996.1.108480376]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 3
+      ]
+    }
+    Component dhXMLDataListener id:dhXMLDataListener_273
+    {
+      #keys: '[414996.1.108480431]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ExportXMLManager]*'
+      Children:
+      [
+        Component DataExtractor510 id:DataExtractor510_384
+        {
+          #keys: '[414996.1.108480432]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'RecycleBin'
+            FixedFilter: 'object.Name() = LocalCell_ProductionComparison::GetTableName()'
+            Source: 'RecycleBin'
+            Taborder: 0
+            Transformation: 'ExportXMLManager'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhTable_OnDataChanged.def
similarity index 79%
rename from _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhTable_OnDataChanged.def
index 0142a22..5d0c78b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhTable_OnDataChanged.def
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
-#parent: PanelDemandComparison_634/dhComparisonData
-Response OnDataChanged () id:Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged
+#parent: PanelDemandComparison_634/dhTable
+Response OnDataChanged () id:Response_PanelDemandComparison_634_dhTable_OnDataChanged
 {
   #keys: '[412672.1.61940670]'
   CanBindMultiple: false
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def"
index 7e11636..4cdfee6 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def"
@@ -11,7 +11,7 @@
     [*
       opt := ddlOfflinePlanTable.Data();
       
-      dhComparisonData.Data( opt.Comparison( RecycleBin,Archive ));
+      dhTable.Data( opt.Comparison( RecycleBin,Archive ));
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bExport_OnClick\043891.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bExport_OnClick\043891.def"
new file mode 100644
index 0000000..15ae8fb
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bExport_OnClick\043891.def"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/bExport_298
+Response OnClick () id:Response_pOperaction_bExport_OnClick_891
+{
+  #keys: '[414996.1.108480375]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      rows := selectset( dhTable.Data(),LocalRow,row,exists( dhFinelProduct.Data(),Elements,product,product.ID() = row.Name()) );
+      columns := selectset( dhTable.Data( ),LocalColumn,column,true );
+      LocalCell_ProductionComparison::AsyncExport( RecycleBin, rows, columns, MacroPlan );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhXMLDataListener_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhXMLDataListener_OnDataChanged.def
new file mode 100644
index 0000000..3bcabcb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_dhXMLDataListener_OnDataChanged.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/dhXMLDataListener_273
+Response OnDataChanged () id:Response_PanelRibbon504_dhXMLDataListener_OnDataChanged
+{
+  #keys: '[414996.1.106110528]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( dhXMLDataListener.Data(),Elements,element ){
+        binaryValue := element.Export();
+      
+        Application.Download( element.Name() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+      
+        element.Delete();
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
index 064466f..ddaf769 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
@@ -12,6 +12,7 @@
   ]
   Properties:
   [
+    Description: '浜ч噺瀵规瘮鎶ヨ〃'
     Image: 'DOCUMENT_INFO'
     Title: '浜ч噺瀵规瘮鎶ヨ〃'
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def
index 3b9186a..d6119fe 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def
@@ -5,8 +5,8 @@
   BaseType: 'WebPanel'
   Children:
   [
-    #child: PanelRibbon504
     #child: PanelRibbon322_88
+    #child: PanelRibbon206_478
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon206\043478.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon206\043478.def"
new file mode 100644
index 0000000..530d5f2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon206\043478.def"
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+Component PanelRibbon206 id:PanelRibbon206_478
+{
+  #keys: '[414996.1.108919103]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bExportTemplate
+    {
+      #keys: '[414996.1.108919104]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Label: '瀵煎嚭妯℃澘'
+        Taborder: 0
+      ]
+    }
+    Component bImportOutput
+    {
+      #keys: '[414996.1.108919105]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Label: '瀵煎叆'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Orientation: 'horizontal'
+    Taborder: 1
+    Title: 'output'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def"
index fd12ece..ebe43ed 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def"
@@ -14,7 +14,7 @@
         Checked: true
         Description: '鐝'
         Label: '鐝'
-        Taborder: 0
+        Taborder: 2
       ]
     }
     Component cbWorkday
@@ -26,7 +26,7 @@
         Checked: true
         Description: '宸ヤ綔鏃�'
         Label: '宸ヤ綔鏃�'
-        Taborder: 1
+        Taborder: 3
       ]
     }
     Component cbCapacity
@@ -38,7 +38,7 @@
         Checked: true
         Description: '浜ц兘'
         Label: '浜ц兘'
-        Taborder: 2
+        Taborder: 4
       ]
     }
     Component cbOutput
@@ -50,7 +50,7 @@
         Checked: true
         Description: '浜ч噺'
         Label: '浜ч噺'
-        Taborder: 3
+        Taborder: 5
       ]
     }
     Component dsStartDate id:dsStartDate_438
@@ -60,7 +60,7 @@
       Properties:
       [
         Label: 'Start Date'
-        Taborder: 4
+        Taborder: 6
       ]
     }
     Component dhStartDate id:dhStartDate_891
@@ -70,7 +70,7 @@
       Databinding: 'Date*'
       Properties:
       [
-        Taborder: 5
+        Taborder: 7
       ]
     }
     Component dsEndDate id:dsEndDate_963
@@ -81,7 +81,7 @@
       [
         Date: 9999-12-31
         Label: 'End Date'
-        Taborder: 6
+        Taborder: 8
       ]
     }
     Component dhEndDate id:dhEndDate_384
@@ -91,7 +91,7 @@
       Databinding: 'Date*'
       Properties:
       [
-        Taborder: 7
+        Taborder: 9
       ]
     }
     Component bExport
@@ -101,7 +101,7 @@
       Properties:
       [
         Image: 'EXPORT1'
-        Taborder: 8
+        Taborder: 10
       ]
     }
     Component dhXMLDataListener
@@ -127,7 +127,28 @@
       ]
       Properties:
       [
-        Taborder: 9
+        Taborder: 11
+      ]
+    }
+    Component ButtonRibbon820 id:ButtonRibbon820_836
+    {
+      #keys: '[414996.1.104721255]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'CreateFullTable'
+        Taborder: 1
+      ]
+    }
+    Component ButtonRibbon id:ButtonRibbon_338
+    {
+      #keys: '[414996.1.104721297]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Create'
+        Taborder: 0
+        Visible: false
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def
deleted file mode 100644
index 1b62091..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def
+++ /dev/null
@@ -1,69 +0,0 @@
-Quintiq file version 2.0
-Component PanelRibbon504
-{
-  #keys: '[412672.1.94122024]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component bExportTemplate
-    {
-      #keys: '[412672.1.94122267]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭output妯℃澘'
-        Taborder: 4
-      ]
-    }
-    Component bImportOutput
-    {
-      #keys: '[412672.1.94122280]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'IMPORT1'
-        Label: '瀵煎叆output'
-        Taborder: 2
-      ]
-    }
-    Component ButtonRibbon
-    {
-      #keys: '[412672.1.94151012]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Label: 'Create'
-        Taborder: 0
-        Visible: false
-      ]
-    }
-    Component ButtonRibbon820
-    {
-      #keys: '[412672.1.97441173]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Label: 'CreateFullTable'
-        Taborder: 1
-      ]
-    }
-    Component npYear
-    {
-      #keys: '[412672.1.98957184]'
-      BaseType: 'WebNumberPicker'
-      Properties:
-      [
-        Label: '瀵煎嚭妯℃澘鏃堕棿鑼冨洿'
-        Taborder: 3
-      ]
-    }
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 1
-    Title: '浜у嚭瀵煎叆'
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bExportTemplate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bExportTemplate_OnClick.def
new file mode 100644
index 0000000..a1ea5ad
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bExportTemplate_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelRibbon206_478/bExportTemplate
+Response OnClick () id:Response_PanelRibbon206_478_bExportTemplate_OnClick
+{
+  #keys: '[414996.1.108919102]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      data := MP_Cell_ScheduleSummary::ExportOutputTemplate( Date::ActualDate().Year() );
+      
+      Application.Download( "浜у嚭瀵煎叆妯℃澘.xlsx",data.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bImportOutput_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bImportOutput_OnClick.def
similarity index 90%
rename from _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bImportOutput_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bImportOutput_OnClick.def
index 6f0a968..a00e5c0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bImportOutput_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon206_478_bImportOutput_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelRibbon504/bImportOutput
-Response OnClick () id:Response_PanelRibbon504_bImportOutput_OnClick
+#parent: PanelRibbon206_478/bImportOutput
+Response OnClick () id:Response_PanelRibbon206_478_bImportOutput_OnClick
 {
-  #keys: '[412672.1.96362099]'
+  #keys: '[414996.1.108919101]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon820_OnClick\04371.def"
similarity index 83%
rename from _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def
rename to "_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon820_OnClick\04371.def"
index 9d82f9b..4715969 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon820_OnClick\04371.def"
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelRibbon504/ButtonRibbon820
-Response OnClick () id:Response_PanelRibbon504_ButtonRibbon820_OnClick
+#parent: PanelRibbon322_88/ButtonRibbon820_836
+Response OnClick () id:Response_PanelRibbon504_ButtonRibbon820_OnClick_71
 {
-  #keys: '[412672.1.97441221]'
+  #keys: '[414996.1.104721254]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   QuillAction
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon_OnClick\04388.def"
similarity index 80%
rename from _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def
rename to "_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon_OnClick\04388.def"
index 440221e..994e6d2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_ButtonRibbon_OnClick\04388.def"
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelRibbon504/ButtonRibbon
-Response OnClick () id:Response_PanelRibbon504_ButtonRibbon_OnClick
+#parent: PanelRibbon322_88/ButtonRibbon_338
+Response OnClick () id:Response_PanelRibbon504_ButtonRibbon_OnClick_88
 {
-  #keys: '[412672.1.94151032]'
+  #keys: '[414996.1.104721296]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   QuillAction
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def
deleted file mode 100644
index c661ea7..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelRibbon504/bExportTemplate
-Response OnClick () id:Response_PanelRibbon504_bExportTemplate_OnClick
-{
-  #keys: '[412672.1.94122418]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      data := MP_Cell_ScheduleSummary::ExportOutputTemplate( [Number]npYear.Number() );
-      
-      Application.Download( "浜у嚭瀵煎叆妯℃澘.xlsx",data.AsBinaryData() );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_npYear_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_npYear_OnCreated.def
deleted file mode 100644
index 82c8067..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_npYear_OnCreated.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelRibbon504/npYear
-Response OnCreated () id:Response_PanelRibbon504_npYear_OnCreated
-{
-  #keys: '[412672.1.97870619]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  GroupServerCalls: true
-  QuillAction
-  {
-    Body:
-    [*
-      date := Date::ActualDate();
-      this.Number( date.Year() );
-    *]
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction\043633.def" "b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction\043633.def"
index 2162fa1..ef6c371 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction\043633.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Component_pOperaction\043633.def"
@@ -67,16 +67,6 @@
         Taborder: 5
       ]
     }
-    Component bDownload
-    {
-      #keys: '[412672.1.106502003]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'DOWNLOAD'
-        Taborder: 6
-      ]
-    }
     Component dhXMLDataListener
     {
       #keys: '[412672.1.106502023]'
@@ -100,7 +90,7 @@
       ]
       Properties:
       [
-        Taborder: 7
+        Taborder: 6
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bDownload_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bDownload_OnClick.def
deleted file mode 100644
index a657040..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_bDownload_OnClick.def
+++ /dev/null
@@ -1,32 +0,0 @@
-Quintiq file version 2.0
-#parent: pOperaction/bDownload
-Response OnClick () id:Response_PanelOperation_568_bDownload_OnClick
-{
-  #keys: '[412672.1.106502002]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    flag := true;
-    feedback := ""; 
-    if( dhXMLDataListener.Data().Size() = 0 ){
-      flag := false;
-      feedback := "褰撳墠鏃犱笅杞芥暟鎹紝鐐瑰嚮瀵煎嚭鍒涘缓涓嬭浇鏁版嵁銆�"
-    }
-    return flag;
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      traverse( dhXMLDataListener.Data(),Elements,element ){
-        binaryValue := element.Export();
-      
-        Application.Download( element.Name() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
-      
-        element.Delete();
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_dhXMLDataListener_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_dhXMLDataListener_OnDataChanged.def
new file mode 100644
index 0000000..30330c3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_dhXMLDataListener_OnDataChanged.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pOperaction/dhXMLDataListener
+Response OnDataChanged () id:Response_pOperaction_dhXMLDataListener_OnDataChanged
+{
+  #keys: '[414996.1.108480536]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( dhXMLDataListener.Data(),Elements,element ){
+        binaryValue := element.Export();
+      
+        Application.Download( element.Name() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+      
+        element.Delete();
+      }
+    *]
+    GroupServerCalls: false
+  }
+}

--
Gitblit v1.9.3