From 08a26d6a64f0800623c1bfb857f46045c4866547 Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期三, 07 八月 2024 17:22:35 +0800
Subject: [PATCH] 添加计划汇总报表

---
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnCreated.def                   |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhFinelEntity_OnCreated.def                      |   16 
 _Main/BL/Type_MP_Column/Attribute_CustomIndex.qbl                                                                                              |    7 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/Attribute_Output.qbl                                                                               |    8 
 _Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl                                                                               |    1 
 _Main/BL/Type_MP_Table/DefaultValue_Name.qbl                                                                                                   |    6 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/StaticMethod_GetAttributeNames.qbl                                                                 |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnCreated.def                |   12 
 _Main/BL/Relations/Relation_ScheduleSummaryOutputLine_Archive_Archive_ScheduleSummaryOutputLine.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbOutput_OnUserChanged.def                          |   16 
 _Main/BL/Type_ScheduleSummaryOutputData/_ROOT_Type_ScheduleSummaryOutputData.qbl                                                               |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelScheduleSummary.def                                             |   70 +
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def                            |   19 
 _Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl                                                                         |    8 
 _Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl                                                   |    1 
 _Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_CreateFullTable.qbl                                                                       |   94 ++
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def                                                      |   16 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/StaticMethod_AsyncExport.qbl                                                                       |   31 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/_ROOT_Type_LocalCell_ScheduleSummary.qbl                                                           |    9 
 _Main/BL/Type_MP_Column/DefaultValue_CustomIndex.qbl                                                                                           |    7 
 _Main/BL/Type_MP_Row/_ROOT_Type_MP_Row.qbl                                                                                                     |    9 
 _Main/BL/Type_MP_Column/Attribute_Index.qbl                                                                                                    |    7 
 _Main/BL/Relations/Relation_MP_Table_MacroPlan_MacroPlan_MP_Table.qbl                                                                          |   23 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/DefaultValue_ShiftPattern.qbl                                                                      |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbWorkday_OnUserChanged.def                         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def                            |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsEndDate_OnChanged#273.def                         |   16 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/Method_GetAttributeByName.qbl                                                                      |   35 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322#88.def                                                |  150 +++
 _Main/BL/Type_MP_Column/Function_CalcDate.qbl                                                                                                  |   13 
 _Main/BL/Type_MP_Row/Attribute_Name.qbl                                                                                                        |    7 
 _Main/BL/Type_LocalCell_ScheduleSummary/Attribute_ShiftPattern.qbl                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhCheckedEntity_OnDataChanged.def                |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def                                                   |   66 +
 _Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ImportOutput.qbl                                                                          |   65 +
 _Main/BL/Type_LocalCell_ScheduleSummary#859/StaticMethod_GetColumnXML.qbl                                                                      |   51 +
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnDataChanged.def            |   16 
 _Main/UI/MacroPlannerWebApp/Views/ComprehensiveStandardHoursReport.vw                                                                          |  189 ++++
 _Main/BL/Type_MP_Row/DefaultValue_CustomName.qbl                                                                                               |    6 
 _Main/BL/Type_LocalCell_ScheduleSummary/Attribute_WorkingDay.qbl                                                                               |    8 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetTableName.qbl                                                                         |   10 
 _Main/BL/Type_Test/StaticMethod_Test.qbl                                                                                                       |   10 
 _Main/BL/Type_MP_Row/DefaultValue_Remark.qbl                                                                                                   |    6 
 _Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ExportOutputTemplate.qbl                                                                  |   36 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonScheduleSummaryReport_OnCli.def |   17 
 _Main/BL/Type_MP_Column/DefaultValue_Name.qbl                                                                                                  |    6 
 _Main/BL/Type_MP_Column/Attribute_CustomDate.qbl                                                                                               |    7 
 _Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl                                                                                |   68 +
 _Main/UI/MacroPlannerWebApp/Views/ScheduleSummaryReport.vw                                                                                     |  234 +++++
 _Main/BL/Type_MP_Row/Function_CalcName.qbl                                                                                                     |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def                               |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison527.def                       |   10 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/Attribute_Capacity.qbl                                                                             |    8 
 _Main/BL/Relations/Relation_MP_Column_MP_Cell_MP_Cell_MP_Column.qbl                                                                            |   23 
 _Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl                                                     |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bDownload_OnClick.def                               |   30 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/Attribute_ShiftPattern.qbl                                                                         |    7 
 _Main/BL/Type_LocalCell_ScheduleSummary/_ROOT_Type_MP_Cell_ScheduleSummary.qbl                                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Method_SetAttributes.def                                                       |   24 
 _Main/BL/Type_MP_Table/Attribute_RowIndexCache.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor#715.def                                                 |  103 ++
 _Main/BL/Type_MP_Row/DefaultValue_Name.qbl                                                                                                     |    6 
 _Main/BL/Type_ScheduleSummaryOutputLine/_ROOT_Type_ScheduleSummaryOutputLine.qbl                                                               |    9 
 _Main/BL/Type_ScheduleSummaryOutputData/Attribute_Date.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_npYear_OnCreated.def                                   |   17 
 _Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_GetTableName.qbl                                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison#1.def                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbComprehensiveHours_OnUserChanged.def                          |    4 
 _Main/BL/Relations/Relation_MP_Row_MP_Cell_MP_Cell_MP_Row.qbl                                                                                  |   23 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/Attribute_WorkingDay.qbl                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbShiftPlan_OnUserChanged.def                       |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhEndDate_OnCreated#478.def                         |   16 
 _Main/BL/Type_MP_Column/Attribute_Name.qbl                                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbStandardHours_OnUserChanged.def                               |    4 
 _Main/BL/Type_MP_Cell/_ROOT_Type_MP_Cell.qbl                                                                                                   |    9 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                               |   11 
 _Main/BL/Type_MP_Column/Function_CalcIndex.qbl                                                                                                 |   25 
 _Main/BL/Type_ScheduleSummaryOutputData/Attribute_Output.qbl                                                                                   |    7 
 _Main/BL/Type_MP_Table/_ROOT_Type_MP_Table.qbl                                                                                                 |    9 
 _Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Output.qbl                                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbCapacity_OnUserChanged.def                        |   16 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl                                                                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick#781.def                               |    2 
 _Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Capacity.qbl                                                                                 |    8 
 _Main/BL/Type_ScheduleSummaryOutputLine/Attribute_LineName.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation#568.def                                                    |    2 
 _Main/BL/Relations/Relation_MP_Table_MP_Row_MP_Row_MP_Table.qbl                                                                                |   23 
 _Main/BL/Type_LocalColumn/Function_CalcIndex.qbl                                                                                               |   29 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor510.def                                                  |  102 ++
 _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_FormComprehensiveStandardHoursReport.def                             |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                      |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison234.def                     |   10 
 _Main/BL/Type_MP_Row/Attribute_Index.qbl                                                                                                       |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnDataChanged.def               |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison#1.def                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/_ROOT_Component_FormScheduleSummaryReport.def                                  |   19 
 _Main/BL/Type_MP_Column/_ROOT_Type_MP_Column.qbl                                                                                               |    9 
 _Main/BL/Relations/Relation_MP_Table_MP_Column_MP_Column_MP_Table.qbl                                                                          |   23 
 /dev/null                                                                                                                                      |    8 
 _Main/BL/Type_LocalCell_ScheduleSummary#859/Method_GetDisplayNameByName.qbl                                                                    |   27 
 _Main/BL/Type_MP_Table/Attribute_Name.qbl                                                                                                      |    7 
 _Main/BL/Type_MP_Row/Attribute_CustomName.qbl                                                                                                  |    7 
 _Main/BL/Relations/Relation_ScheduleSummaryOutputData_ScheduleSummaryOutputLine_ScheduleSummary.qbl                                            |   23 
 _Main/BL/Type_MP_Column/Attribute_Date.qbl                                                                                                     |    7 
 _Main/BL/Type_MP_Row/Attribute_Remark.qbl                                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsStartDate_OnChanged#298.def                       |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bExport_OnClick.def                                 |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bImportOutput_OnClick.def                              |   43 +
 _Main/BL/Type_MP_Column/Attribute_IsAttrbuteColumn.qbl                                                                                         |    7 
 _Main/BL/Type_MP_Table/Method_GetRowIndexCache.qbl                                                                                             |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhStartDate_OnCreated#57.def                        |   16 
 _Main/BL/Type_LocalCell_DemandComparison/_ROOT_Type_LocalCell_DemandComparison.qbl                                                             |    1 
 112 files changed, 2,424 insertions(+), 34 deletions(-)

diff --git a/_Main/BL/Relations/Relation_MP_Column_MP_Cell_MP_Cell_MP_Column.qbl b/_Main/BL/Relations/Relation_MP_Column_MP_Cell_MP_Cell_MP_Column.qbl
new file mode 100644
index 0000000..a391b9f
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MP_Column_MP_Cell_MP_Cell_MP_Column.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MP_Column_MP_Cell_MP_Cell_MP_Column
+{
+  #keys: '1[412672.1.95254848]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MP_Cell
+  {
+    #keys: '3[412672.1.95254850][412672.1.95254849][412672.1.95254851]'
+    Cardinality: '1toN'
+    ObjectDefinition: MP_Column
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MP_Column
+  {
+    #keys: '3[412672.1.95254853][412672.1.95254852][412672.1.95254854]'
+    Cardinality: '0to1'
+    ObjectDefinition: MP_Cell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MP_Row_MP_Cell_MP_Cell_MP_Row.qbl b/_Main/BL/Relations/Relation_MP_Row_MP_Cell_MP_Cell_MP_Row.qbl
new file mode 100644
index 0000000..dfbd52e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MP_Row_MP_Cell_MP_Cell_MP_Row.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MP_Row_MP_Cell_MP_Cell_MP_Row
+{
+  #keys: '1[412672.1.95254835]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MP_Cell
+  {
+    #keys: '3[412672.1.95254837][412672.1.95254836][412672.1.95254838]'
+    Cardinality: '1toN'
+    ObjectDefinition: MP_Row
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MP_Row
+  {
+    #keys: '3[412672.1.95254840][412672.1.95254839][412672.1.95254841]'
+    Cardinality: '0to1'
+    ObjectDefinition: MP_Cell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MP_Table_MP_Column_MP_Column_MP_Table.qbl b/_Main/BL/Relations/Relation_MP_Table_MP_Column_MP_Column_MP_Table.qbl
new file mode 100644
index 0000000..b51ca1c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MP_Table_MP_Column_MP_Column_MP_Table.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MP_Table_MP_Column_MP_Column_MP_Table
+{
+  #keys: '1[412672.1.95254822]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MP_Column
+  {
+    #keys: '3[412672.1.95254824][412672.1.95254823][412672.1.95254825]'
+    Cardinality: '1toN'
+    ObjectDefinition: MP_Table
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MP_Table
+  {
+    #keys: '3[412672.1.95254827][412672.1.95254826][412672.1.95254828]'
+    Cardinality: '0to1'
+    ObjectDefinition: MP_Column
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MP_Table_MP_Row_MP_Row_MP_Table.qbl b/_Main/BL/Relations/Relation_MP_Table_MP_Row_MP_Row_MP_Table.qbl
new file mode 100644
index 0000000..00df18a
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MP_Table_MP_Row_MP_Row_MP_Table.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MP_Table_MP_Row_MP_Row_MP_Table
+{
+  #keys: '1[412672.1.95254809]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MP_Row
+  {
+    #keys: '3[412672.1.95254811][412672.1.95254810][412672.1.95254812]'
+    Cardinality: '1toN'
+    ObjectDefinition: MP_Table
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide MP_Table
+  {
+    #keys: '3[412672.1.95254814][412672.1.95254813][412672.1.95254815]'
+    Cardinality: '0to1'
+    ObjectDefinition: MP_Row
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MP_Table_MacroPlan_MacroPlan_MP_Table.qbl b/_Main/BL/Relations/Relation_MP_Table_MacroPlan_MacroPlan_MP_Table.qbl
new file mode 100644
index 0000000..bc0e154
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MP_Table_MacroPlan_MacroPlan_MP_Table.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MP_Table_MacroPlan_MacroPlan_MP_Table
+{
+  #keys: '1[412672.1.95254796]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412672.1.95254798][412672.1.95254797][412672.1.95254799]'
+    Cardinality: '0to1'
+    ObjectDefinition: MP_Table
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MP_Table
+  {
+    #keys: '3[412672.1.95254801][412672.1.95254800][412672.1.95254802]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ScheduleSummaryOutputData_ScheduleSummaryOutputLine_ScheduleSummary.qbl b/_Main/BL/Relations/Relation_ScheduleSummaryOutputData_ScheduleSummaryOutputLine_ScheduleSummary.qbl
new file mode 100644
index 0000000..fd38872
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ScheduleSummaryOutputData_ScheduleSummaryOutputLine_ScheduleSummary.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ScheduleSummaryOutputData_ScheduleSummaryOutputLine_ScheduleSummaryOutputLine_ScheduleSummaryOutputData
+{
+  #keys: '1[412672.1.95294307]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide ScheduleSummaryOutputLine
+  {
+    #keys: '3[412672.1.95294309][412672.1.95294308][412672.1.95294310]'
+    Cardinality: '0to1'
+    ObjectDefinition: ScheduleSummaryOutputData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ScheduleSummaryOutputData
+  {
+    #keys: '3[412672.1.95294312][412672.1.95294311][412672.1.95294313]'
+    Cardinality: '1toN'
+    ObjectDefinition: ScheduleSummaryOutputLine
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ScheduleSummaryOutputLine_Archive_Archive_ScheduleSummaryOutputLine.qbl b/_Main/BL/Relations/Relation_ScheduleSummaryOutputLine_Archive_Archive_ScheduleSummaryOutputLine.qbl
new file mode 100644
index 0000000..9e029af
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ScheduleSummaryOutputLine_Archive_Archive_ScheduleSummaryOutputLine.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ScheduleSummaryOutputLine_Archive_Archive_ScheduleSummaryOutputLine
+{
+  #keys: '1[412672.1.95294320]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Archive
+  {
+    #keys: '3[412672.1.95294322][412672.1.95294321][412672.1.95294323]'
+    Cardinality: '0to1'
+    ObjectDefinition: ScheduleSummaryOutputLine
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ScheduleSummaryOutputLine
+  {
+    #keys: '3[412672.1.95294325][412672.1.95294324][412672.1.95294326]'
+    Cardinality: '1toN'
+    ObjectDefinition: Archive
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
index 1acc8ee..fd9deec 100644
--- a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
+++ b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
@@ -9,15 +9,17 @@
   TextBody:
   [*
     // rislai Jun-21-2024 (created)
-    manager := select( owner,ExportXMLManager,manager,manager.Name() = "LocalTableXML" );
+    manager := select( owner,ExportXMLManager,manager,manager.Name() = tableName );
     if( isnull( manager )){
-      manager := owner.ExportXMLManager( relnew,Name := "LocalTableXML",SheetName := tableName );
+      manager := owner.ExportXMLManager( relnew,Name := tableName,SheetName := tableName );
     }else{
       manager.ExportXMLData( relflush );
     }
     traverse( columnXMLData,Elements,element,element.TrimBoth() <> "" ){
        data := manager.ExportXMLData( relnew, XML := element);
        if( element.LikeUserLocale( "Product ID" )){
+         data.Priority( 1 );
+       }else if( element.LikeUserLocale( "浜х嚎" )){
          data.Priority( 1 );
        }else if( element.LikeUserLocale( "Attribute" )){
          data.Priority( 2 );
@@ -30,6 +32,8 @@
        }else if( element.LikeUserLocale( "鍙戝姩鏈哄洓浣嶇爜" )){
          data.Priority( 6 );
        }else{
+         info( element );
+         //  <column><name>2020/04/01</name>
          data.Priority( [Number]element.SubString( 14,10 ).ReplaceAll( "/","") );
        }
     }
diff --git a/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl b/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
index 695ab4b..688c28d 100644
--- a/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
+++ b/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
@@ -4,6 +4,7 @@
 TypeSpecialization LocalCell_Default
 {
   #keys: '2[412672.1.5620864][412672.1.5620859]'
+  Description: '榛樿鍗曞厓鏍�'
   Parent: LocalCell
   StructuredName: 'LocalCell_Defaults'
 }
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
index d19420b..9af8aa0 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
@@ -27,6 +27,6 @@
       columnstring := columnstring.Merge( cellxml);
     }
      
-    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),LocalCell_DemandComparison::GetTableName()) );
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetTableName.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetTableName.qbl
new file mode 100644
index 0000000..a28aac1
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetTableName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetTableName () const declarative remote as owning String
+{
+  TextBody:
+  [*
+    // rislai Aug-7-2024 (created)
+    return "闇�姹傜増鏈姣�";
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/_ROOT_Type_LocalCell_DemandComparison.qbl b/_Main/BL/Type_LocalCell_DemandComparison/_ROOT_Type_LocalCell_DemandComparison.qbl
index d141f48..4647a9a 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/_ROOT_Type_LocalCell_DemandComparison.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/_ROOT_Type_LocalCell_DemandComparison.qbl
@@ -4,6 +4,7 @@
 TypeSpecialization LocalCell_DemandComparison
 {
   #keys: '2[412672.0.1087844722][412672.0.1087844717]'
+  Description: '闇�姹傚姣旀姤琛�'
   Parent: LocalCell
   StructuredName: 'LocalCell_DemandComparisons'
 }
diff --git a/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl b/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl
index d360987..fa2e66e 100644
--- a/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl
+++ b/_Main/BL/Type_LocalCell_OfflinePlanComparison/_ROOT_Type_LocalCell_OfflinePlanComparison.qbl
@@ -4,6 +4,7 @@
 TypeSpecialization LocalCell_OfflinePlanComparison
 {
   #keys: '2[412672.1.76654683][412672.1.76654682]'
+  Description: '涓嬬嚎璁″垝瀵规瘮鎶ヨ〃'
   Parent: LocalCell
   StructuredName: 'LocalCell_OfflinePlanComparisons'
 }
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
index 3271cca..ddeedb1 100644
--- a/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
@@ -4,6 +4,7 @@
 TypeSpecialization LocalCell_ProductionComparison
 {
   #keys: '2[412672.1.64753741][412672.1.64753740]'
+  Description: '鐢熶骇璁″垝瀵规瘮鎶ヨ〃'
   Parent: LocalCell
   StructuredName: 'LocalCell_ProductionComparisons'
 }
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_Capacity.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_Capacity.qbl"
new file mode 100644
index 0000000..4258f1d
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_Capacity.qbl"
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Capacity
+{
+  #keys: '3[412672.1.95303230][412672.1.95303229][412672.1.95303231]'
+  Description: '浜ц兘'
+  ValueType: Real
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_Output.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_Output.qbl"
new file mode 100644
index 0000000..8e93557
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_Output.qbl"
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Output
+{
+  #keys: '3[412672.1.95303221][412672.1.95303220][412672.1.95303222]'
+  Description: '浜у嚭'
+  ValueType: Real
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_ShiftPattern.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_ShiftPattern.qbl"
new file mode 100644
index 0000000..cfc4461
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_ShiftPattern.qbl"
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPattern
+{
+  #keys: '3[412672.1.95303224][412672.1.95303223][412672.1.95303225]'
+  ValueType: String
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_WorkingDay.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_WorkingDay.qbl"
new file mode 100644
index 0000000..691debe
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Attribute_WorkingDay.qbl"
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute WorkingDay
+{
+  #keys: '3[412672.1.95303227][412672.1.95303226][412672.1.95303228]'
+  Description: '宸ヤ綔鏃�'
+  ValueType: Number
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/DefaultValue_ShiftPattern.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/DefaultValue_ShiftPattern.qbl"
new file mode 100644
index 0000000..2877e16
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/DefaultValue_ShiftPattern.qbl"
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ShiftPattern
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Method_GetAttributeByName.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Method_GetAttributeByName.qbl"
new file mode 100644
index 0000000..9ff831c
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Method_GetAttributeByName.qbl"
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetAttributeByName (
+  String attributeName
+) const declarative remote as String
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    value := "";
+    
+    if( attributeName = "ShiftPattern" ){
+       if( not this.LocalColumn().IsAttrbuteColumn() ){
+         value := this.ShiftPattern();
+       }
+    }
+    if( attributeName = "Capacity" ){
+       if( not this.LocalColumn().IsAttrbuteColumn() ){
+         value := this.Capacity().Format( "N(Dec)" );
+       }
+    }
+    if( attributeName = "Output" ){
+      if( not this.LocalColumn().IsAttrbuteColumn() ){
+        value := this.Output().Format( "N(Dec)" );
+      }
+    }
+    if( attributeName = "WorkingDay" ){
+      if( not this.LocalColumn().IsAttrbuteColumn() ){
+        value := [String]this.WorkingDay();
+      }
+    }
+    
+    return value;
+  *]
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Method_GetDisplayNameByName.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Method_GetDisplayNameByName.qbl"
new file mode 100644
index 0000000..69cf7b7
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/Method_GetDisplayNameByName.qbl"
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetDisplayNameByName (
+  String attributeName
+) const declarative remote as String
+{
+  TextBody:
+  [*
+    // rislai Aug-7-2024 (created)
+    // rislai Jun-21-2024 (created)
+    value := "";
+    if( attributeName = "ShiftPattern" ){
+       value := "鐝";
+    }
+    if( attributeName = "Capacity" ){
+       value := "浜ц兘";
+    }
+    if( attributeName = "Output" ){
+      value := "浜у嚭";
+    }
+    if( attributeName = "WorkingDay" ){
+      value := "宸ヤ綔鏃�";
+    }
+    
+    return value;
+  *]
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_AsyncExport.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_AsyncExport.qbl"
new file mode 100644
index 0000000..278275c
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_AsyncExport.qbl"
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod AsyncExport (
+  RecycleBin recycleBin,
+  const constcontent LocalRows rows,
+  const constcontent LocalColumns columns
+)
+{
+  TextBody:
+  [*
+    // rislai Jun-20-2024 (created)
+    sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
+    
+    attributeNames := LocalCell_ScheduleSummary::GetAttributeNames();
+    
+    columnstring := emit( "" );
+    flag := true;
+    traverse( sortColumns,Elements,sortColumn ){
+      if( flag ){
+        attributeXML := rows -> LocalCell_ScheduleSummary::GetColumnXML( sortColumn,attributeNames,"attribute" );
+        columnstring := columnstring.Merge( attributeXML )
+        flag := false;
+      }
+      
+      cellxml := rows -> LocalCell_ScheduleSummary::GetColumnXML( sortColumn,attributeNames ,"data" );
+      columnstring := columnstring.Merge( cellxml);
+    }
+    
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),MP_Cell_ScheduleSummary::GetTableName()) );
+  *]
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_GetAttributeNames.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_GetAttributeNames.qbl"
new file mode 100644
index 0000000..3b2b047
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_GetAttributeNames.qbl"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetAttributeNames () const declarative as owning Strings
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    attributeNames := construct( Strings );
+    
+    attributeNames.Add( "ShiftPattern" );
+    attributeNames.Add( "WorkingDay" );
+    attributeNames.Add( "Capacity" );
+    attributeNames.Add( "Output" );
+    
+    return &attributeNames;
+  *]
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_GetColumnXML.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_GetColumnXML.qbl"
new file mode 100644
index 0000000..b181ceb
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/StaticMethod_GetColumnXML.qbl"
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetColumnXML (
+  const constcontent LocalRows rows,
+  const LocalColumn column,
+  const Strings attributeNames,
+  String type
+) const as String
+{
+  TextBody:
+  [*
+    // rislai Jun-21-2024 (created)
+    
+    columnXML := "";
+    cells := selectsortedset( column, LocalCell.astype( LocalCell_ScheduleSummary ), cell,
+                                  exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
+    if( type = "data" ){
+      columnXML := "<column><name>" + column.CustomDate().Format( "Y/M2/D2") + "</name><type>String</type>"; 
+      traverse ( cells, Elements, cell ) {
+        traverse( attributeNames ,Elements,e ){
+          cellXML := '<cell value="' + cell.GetAttributeByName( e ) + '"/>'
+          columnXML := columnXML + cellXML;
+        }
+      }
+      columnXML := columnXML + "</column>";
+    }
+    if( type = "attribute" ){
+      columnXML1 := "<column><name>浜х嚎</name><type>String</type>";
+      columnXML2 := "<column><name>Attribute</name><type>String</type>";
+      
+      traverse ( cells, Elements, cell ) {
+        flag := true;
+        traverse( attributeNames ,Elements,e ){
+          if( flag ){
+            cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
+            columnXML1 := columnXML1 + cellXML;
+            flag := false;
+          }else{
+            cellXML := '<cell value="  "/>'
+            columnXML1 := columnXML1 + cellXML;
+          }
+          cellXML := '<cell value="' + cell.GetDisplayNameByName( e ) + '"/>'
+          columnXML2 := columnXML2 + cellXML;
+        }
+      }
+      columnXML := columnXML1 + "</column>" + columnXML2 + "</column>";
+    }
+     
+    return columnXML;
+  *]
+}
diff --git "a/_Main/BL/Type_LocalCell_ScheduleSummary\043859/_ROOT_Type_LocalCell_ScheduleSummary.qbl" "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/_ROOT_Type_LocalCell_ScheduleSummary.qbl"
new file mode 100644
index 0000000..5d6b975
--- /dev/null
+++ "b/_Main/BL/Type_LocalCell_ScheduleSummary\043859/_ROOT_Type_LocalCell_ScheduleSummary.qbl"
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization LocalCell_ScheduleSummary
+{
+  #keys: '2[412672.1.95303218][412672.1.95303213]'
+  Parent: LocalCell
+  StructuredName: 'LocalCell_ScheduleSummarys'
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Capacity.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Capacity.qbl
new file mode 100644
index 0000000..c214e76
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Capacity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Capacity
+{
+  #keys: '3[412672.1.95254748][412672.1.95254747][412672.1.95254749]'
+  Description: '浜ц兘'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Output.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Output.qbl
new file mode 100644
index 0000000..976e2a6
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_Output.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Output
+{
+  #keys: '3[412672.1.95254758][412672.1.95254757][412672.1.95254759]'
+  Description: '浜у嚭'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_ShiftPattern.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_ShiftPattern.qbl
new file mode 100644
index 0000000..a64ba99
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_ShiftPattern.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShiftPattern
+{
+  #keys: '3[412672.1.95291524][412672.1.95291523][412672.1.95291525]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_WorkingDay.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_WorkingDay.qbl
new file mode 100644
index 0000000..8f20102
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/Attribute_WorkingDay.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute WorkingDay
+{
+  #keys: '3[412672.1.95254735][412672.1.95254734][412672.1.95254736]'
+  Description: '宸ヤ綔鏃�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl
new file mode 100644
index 0000000..480f365
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_Create.qbl
@@ -0,0 +1,68 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  MacroPlan owner
+) as MP_Table
+{
+  TextBody:
+  [*
+    // rislai Aug-6-2024 (created)
+    table := select( owner,MP_Table,table,table.Name() = MP_Cell_ScheduleSummary::GetTableName() );
+    if( not isnull( table )){
+      table.Delete(); 
+    }
+    
+    table := owner.MP_Table( relnew,Name := MP_Cell_ScheduleSummary::GetTableName());
+    
+    startDate := owner.StartOfPlanning().Date();
+    endDate := startDate + 7;
+    
+    columns := construct( MP_Columns );
+    columnIndexTree := NamedValueTree::Create();
+    for( i := startDate;i < endDate; i := i + 1){
+      column := table.MP_Column( relnew,CustomDate := i );
+      columnHandle := columnIndexTree.GetHandle( i.AsQUILL() );
+      columns.Add( column );
+      columnIndexTree.Root().AddChild( columnHandle,columns.Size() - 1 );
+    }
+    
+    traverse( owner,Unit,unit,unit.HasCapacityTypeTime()){
+      // unit.AsEntity().DisplayNameForSelection()
+      row := table.MP_Row( relnew,CustomName := unit.ID(),Index := table.GetRowIndexCache() ); 
+      throughput := sum( unit,Operation,operation,operation.Throughput() ) / unit.Operation( relsize );
+      
+      unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,
+                                        unitPeriodTime.Period_MP().StartDate() >= startDate 
+                                    and unitPeriodTime.Period_MP().EndDate() <= endDate 
+                                    and unitPeriodTime.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day());
+      traverse( unitPeriodTimes,Elements,unitPeriodTime ){
+        columnHandle := columnIndexTree.GetHandle( unitPeriodTime.Period_MP().StartDate().AsQUILL() );
+        columnIndex := guard( columnIndexTree.Root().Child( columnHandle ),null( NamedValue ));
+        if( not isnull( columnIndex )){
+          // 褰揳rrowedAvailableCapacity涓嶄负0锛屽伐浣滄棩 + 1
+          arrowedAvailableCapacity := unitPeriodTime.TotalAvailableCapacity();
+          zeroDuration := Duration::Construct( 0,0,0,0);
+          
+          column := columns.Element( columnIndex.GetValueAsNumber() );
+          
+          dayOfWeek := column.CustomDate().DayOfWeek();
+          workHours := select( unitPeriodTime,ShiftPattern.ShiftDay,shifDay,shifDay.Day_MP().ID() = dayOfWeek );
+          capacity := 0.0;
+          
+          workDay := ifexpr( arrowedAvailableCapacity <> zeroDuration, 1,0 );
+          if( not isnull( workHours )){
+            capacity := workDay * throughput * workHours.Capacity().HoursAsReal()
+          }
+          
+          row.MP_Cell( relnew,MP_Cell_ScheduleSummary,MP_Column := column,
+                       ShiftPattern := unitPeriodTime.ShiftPatternName(),
+                       WorkingDay := workDay,
+                       Capacity := capacity,
+                       Output := 0 );
+        }
+      }
+    }
+    
+    return table;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_CreateFullTable.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_CreateFullTable.qbl
new file mode 100644
index 0000000..401d54f
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_CreateFullTable.qbl
@@ -0,0 +1,94 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFullTable (
+  const MacroPlans owners,
+  RecycleBin recycleBin,
+  const Archive archive
+) as LocalTable
+{
+  TextBody:
+  [*
+    // rislai Aug-7-2024 (created)
+    tables := construct( MP_Tables );
+    traverse( owners,Elements,owner ){
+      table := select( owner,MP_Table,table,table.Name() = MP_Cell_ScheduleSummary::GetTableName() ); 
+      if( isnull( table )){
+        table :=  MP_Cell_ScheduleSummary::Create( owner );
+      }
+      tables.Add( table );
+    }
+    
+    scheduleSummaryOutputDataIndexTree := NamedValueTree::Create();
+    scheduleSummaryOutputDatas := selectset( archive,ScheduleSummaryOutputLine.ScheduleSummaryOutputData,data,
+                                             exists( tables,Elements.MP_Row,row,row.CustomName() = data.ScheduleSummaryOutputLine().LineName() ));
+    
+    for( i :=0;i < scheduleSummaryOutputDatas.Size();i++ ){
+      scheduleSummaryOutputData := scheduleSummaryOutputDatas.Element( i );
+      scheduleSummaryOutputDataKey := scheduleSummaryOutputData.ScheduleSummaryOutputLine().LineName() + scheduleSummaryOutputData.Date().AsQUILL();
+      scheduleSummaryOutputDataHandle := scheduleSummaryOutputDataIndexTree.GetHandle( scheduleSummaryOutputDataKey );
+      scheduleSummaryOutputDataIndexTree.Root().AddChild( scheduleSummaryOutputDataHandle,i );
+    }
+    info( scheduleSummaryOutputDataIndexTree.ToString() );
+    
+    localTable := recycleBin.LocalTable( relnew,Name := MP_Cell_ScheduleSummary::GetTableName() );
+    startDate := minselect( tables,Elements.MP_Column,column,column.CustomDate() ).CustomDate();
+    endDate := maxselect( tables,Elements.MP_Column,column,column.CustomDate() ).CustomDate();
+    
+    localColumns := construct( LocalColumns );
+    localColumnIndexTree := NamedValueTree::Create();
+    for( i := startDate.StartOfMonth(); i <= endDate.StartOfMonth(); i := i.StartOfNextMonth() ){
+       localColumn := localTable.LocalColumn( relnew,CustomDate := i );
+       localColumnHandle := localColumnIndexTree.GetHandle( i.AsQUILL() );
+       localColumns.Add( localColumn );
+       localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
+    }
+    traverse( tables,Elements.MP_Row,row ){
+       localRow := localTable.LocalRow( relnew,CustomName := row.Name(),Index := localTable.GetRowIndexCache() );
+    
+       traverse( localColumns,Elements,localColumn ){
+          cells := selectset( row,MP_Cell.astype( MP_Cell_ScheduleSummary ),cell,cell.MP_Column().CustomDate() >= localColumn.CustomDate() and cell.MP_Column().CustomDate() < localColumn.CustomDate().StartOfNextMonth() );
+          
+          output := 0.0;
+          
+          scheduleSummaryOutputDataKey := row.Name() + localColumn.CustomDate().AsQUILL();
+          info( scheduleSummaryOutputDataKey );
+          scheduleSummaryOutputDataHandle := scheduleSummaryOutputDataIndexTree.GetHandle( scheduleSummaryOutputDataKey );
+          scheduleSummaryOutputDataIndex := guard( scheduleSummaryOutputDataIndexTree.Root().Child( scheduleSummaryOutputDataHandle ),null( NamedValue ));
+          if( not isnull( scheduleSummaryOutputDataIndex )){
+            scheduleSummaryOutputData := scheduleSummaryOutputDatas.Element( scheduleSummaryOutputDataIndex.GetValueAsNumber() );
+            output := scheduleSummaryOutputData.Output();
+          }
+          
+          maxShiftPattern := "";
+          maxShiftPatternCount := 0;
+          
+          workingDay := 0;
+          capacity := 0.0;
+          
+          traverse( cells,Elements,cell ){
+             workingDay := workingDay + cell.WorkingDay();
+             capacity := capacity + cell.Capacity();
+    
+             if( maxShiftPattern <> cell.ShiftPattern() ){
+               if( maxShiftPatternCount = 0 ){
+                  maxShiftPattern := cell.ShiftPattern();
+                  maxShiftPatternCount ++;
+               }else{
+                  maxShiftPatternCount --; 
+               }
+             }else{
+                maxShiftPatternCount ++; 
+             }
+          }
+          
+          localCell := localRow.LocalCell( relnew,LocalCell_ScheduleSummary,LocalColumn := localColumn );
+          localCell.ShiftPattern( maxShiftPattern );
+          localCell.WorkingDay( workingDay );
+          localCell.Capacity( capacity );
+          localCell.Output( output );
+       }
+    }
+    
+    return localTable;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ExportOutputTemplate.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ExportOutputTemplate.qbl
new file mode 100644
index 0000000..e36e50c
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ExportOutputTemplate.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExportOutputTemplate (
+  Number year
+) as BinaryValue
+{
+  Description: '瀵煎嚭浜у嚭瀵煎叆妯℃澘'
+  TextBody:
+  [*
+    // rislai Aug-6-2024 (created)
+    // Akari May-18-2024 (created)
+    // rislai Jan-19-2024 (created)
+    sheetName := "浜у嚭";
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>'+ sheetName +'</name>';
+    
+    xmlTemplate := xmlTemplate + "<column><name>浜х嚎</name><type>String</type>";
+    
+    // xmlTemplate := xmlTemplate + '<cell value=" "/>';
+    xmlTemplate := xmlTemplate + "</column>";
+    
+    for( i := 1 ; i <= 12 ; i++ ){
+      xmlTemplate := xmlTemplate + "<column><name>" + Date::Construct( year,i,1 ).Format( "Y/M/D" ) + "</name><type>Number</type>";
+      // xmlTemplate := xmlTemplate + '<cell value=" "/>';
+      xmlTemplate := xmlTemplate + "</column>";
+    }
+    
+    xmlTemplate := xmlTemplate + "</table>";
+    
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
+    XLS::SaveTable( tableHandle, OS::TempPath() + "template.xlsx" );
+    file := OSFile::Construct();
+    file.Open( OS::TempPath() + "template.xlsx", "Read", true );
+    data := file.ReadBinary();
+    return data;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_GetTableName.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_GetTableName.qbl
new file mode 100644
index 0000000..dbf4dd0
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_GetTableName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetTableName () const declarative remote as owning String
+{
+  TextBody:
+  [*
+    // rislai Aug-7-2024 (created)
+    return "璁″垝姹囨�绘姤琛�";
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ImportOutput.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ImportOutput.qbl
new file mode 100644
index 0000000..d07e7cf
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/StaticMethod_ImportOutput.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ImportOutput (
+  Archive archive,
+  const GeneralExcelImportAndExportDataSource outputSource
+)
+{
+  Description: '浜у嚭瀵煎叆'
+  TextBody:
+  [*
+    // rislai Aug-6-2024 (created)
+    outputTable := select( outputSource,GeneralExcelImportAndExportDataTable,table,table.Name() = "浜у嚭");
+    if( isnull( outputTable )){
+      error( "瀵煎叆鐨勬枃浠朵笉姝g‘" ); 
+    }
+    lines := construct( ScheduleSummaryOutputLines );
+    lineIndexTree := NamedValueTree::Create();
+    
+    traverse( archive,ScheduleSummaryOutputLine,line ){
+      lineHandle := lineIndexTree.GetHandle( line.LineName() );
+      lines.Add( line );
+      lineIndexTree.Root().AddChild( lineHandle,lines.Size() - 1 );
+    }
+    
+    traverse( outputTable,GeneralExcelImportAndExportDataRow,row ){
+      count := 0;
+      line := null( ScheduleSummaryOutputLine );
+      datas := construct( ScheduleSummaryOutputDatas );
+      dataIndexTree := NamedValueTree::Create();
+      traverse( row,GeneralExcelImportAndExportDataCell,cell ){
+        if( count = 0 ){
+          lineName := cell.Value();
+          lineHandle := lineIndexTree.GetHandle( lineName );
+          lineIndex := guard( lineIndexTree.Root().Child( lineHandle ),null( NamedValue ));
+          if( isnull( lineIndex )){
+            line := archive.ScheduleSummaryOutputLine( relnew,LineName := lineName );
+            lines.Add( line );
+            lineIndexTree.Root().AddChild( lineHandle,lines.Size() - 1 );
+          }else{
+            line := lines.Element( lineIndex.GetValueAsNumber() );
+            traverse( line,ScheduleSummaryOutputData,data ){
+              dataHandle := dataIndexTree.GetHandle( data.Date().AsQUILL() );
+              datas.Add( data );
+              dataIndexTree.Root().AddChild( dataHandle,datas.Size() - 1 );
+            }
+          }
+        }else{
+          stringsDate := cell.GeneralExcelImportAndExportDataColumn().Name().Tokenize( "/" );
+          date := guard( Date::Construct( [Number]stringsDate.Element( 0 ),[Number]stringsDate.Element( 1 ),[Number]stringsDate.Element( 2 )),Date::MinDate() );
+          dataHandle := dataIndexTree.GetHandle( date.AsQUILL() );
+          dataIndex := guard( dataIndexTree.Root().Child( dataHandle ),null( NamedValue ));
+          if( isnull( dataIndex )){
+            data := line.ScheduleSummaryOutputData( relnew,Date := date,Output := [Real]cell.Value() );
+            datas.Add( data );
+            dataIndexTree.Root().AddChild( dataHandle,datas.Size() - 1 );
+          }else{
+            data := datas.Element( dataIndex.GetValueAsNumber() );
+            data.Output( [Real]cell.Value() );
+          }
+        }
+        count ++;
+      } 
+    }
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_ScheduleSummary/_ROOT_Type_MP_Cell_ScheduleSummary.qbl b/_Main/BL/Type_LocalCell_ScheduleSummary/_ROOT_Type_MP_Cell_ScheduleSummary.qbl
new file mode 100644
index 0000000..ab38c84
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ScheduleSummary/_ROOT_Type_MP_Cell_ScheduleSummary.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization MP_Cell_ScheduleSummary
+{
+  #keys: '2[412672.1.95254704][412672.1.95254699]'
+  Description: '璁″垝姹囨�绘姤琛�'
+  Parent: MP_Cell
+  StructuredName: 'MP_Cell_ScheduleSummarys'
+}
diff --git a/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl b/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
index 8319f34..a8ef9c9 100644
--- a/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
+++ b/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
@@ -5,21 +5,22 @@
   TextBody:
   [*
     // rislai Jul-24-2024 (created)
-    year := this.Date().Year();
-    month := this.Date().Month();
-    day := this.Date().Day();
-    
-    index := [String]year;
-    if( month < 10 ){
-      index := index + "0" + [String]month; 
+    value := 0;
+    if( this.CustomIndex() = -999 ){
+      year := this.Date().Year();
+      month := this.Date().Month();
+      day := this.Date().Day();
+      index := [String]year;
+      if( month < 10 ){
+        index := index + "0" + [String]month; 
+      }
+      if( day < 10 ){
+        index := index + "0" + [String]day; 
+      }
+      value := [Number]index;
+    }else{
+      value := this.CustomIndex();
     }
-    if( day < 10 ){
-      index := index + "0" + [String]day; 
-    }
-    
-    
-    value := ifexpr( this.CustomIndex() = -999,[Number]index,this.CustomIndex() );
-    
     this.Index( value );
   *]
 }
diff --git a/_Main/BL/Type_MP_Cell/_ROOT_Type_MP_Cell.qbl b/_Main/BL/Type_MP_Cell/_ROOT_Type_MP_Cell.qbl
new file mode 100644
index 0000000..e9217ce
--- /dev/null
+++ b/_Main/BL/Type_MP_Cell/_ROOT_Type_MP_Cell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MP_Cell
+{
+  #keys: '5[412672.1.95254793][412672.1.95254791][0.0.0][412672.1.95254792][412672.1.95254794]'
+  BaseType: Object
+  StructuredName: 'MP_Cells'
+}
diff --git a/_Main/BL/Type_MP_Column/Attribute_CustomDate.qbl b/_Main/BL/Type_MP_Column/Attribute_CustomDate.qbl
new file mode 100644
index 0000000..54a618e
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Attribute_CustomDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomDate
+{
+  #keys: '3[412672.1.95254881][412672.1.95254880][412672.1.95254882]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MP_Column/Attribute_CustomIndex.qbl b/_Main/BL/Type_MP_Column/Attribute_CustomIndex.qbl
new file mode 100644
index 0000000..40520aa
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Attribute_CustomIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomIndex
+{
+  #keys: '3[412672.1.95254872][412672.1.95254871][412672.1.95254873]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MP_Column/Attribute_Date.qbl b/_Main/BL/Type_MP_Column/Attribute_Date.qbl
new file mode 100644
index 0000000..315134a
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Attribute_Date.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Date
+{
+  #keys: '3[412672.1.95254869][412672.1.95254868][412672.1.95254870]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MP_Column/Attribute_Index.qbl b/_Main/BL/Type_MP_Column/Attribute_Index.qbl
new file mode 100644
index 0000000..a0ef648
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[412672.1.95254875][412672.1.95254874][412672.1.95254876]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MP_Column/Attribute_IsAttrbuteColumn.qbl b/_Main/BL/Type_MP_Column/Attribute_IsAttrbuteColumn.qbl
new file mode 100644
index 0000000..11d8db1
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Attribute_IsAttrbuteColumn.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsAttrbuteColumn
+{
+  #keys: '3[412672.1.95254866][412672.1.95254865][412672.1.95254867]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_MP_Column/Attribute_Name.qbl b/_Main/BL/Type_MP_Column/Attribute_Name.qbl
new file mode 100644
index 0000000..5df6cb5
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.95254878][412672.1.95254877][412672.1.95254879]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MP_Column/DefaultValue_CustomIndex.qbl b/_Main/BL/Type_MP_Column/DefaultValue_CustomIndex.qbl
new file mode 100644
index 0000000..d26aba3
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/DefaultValue_CustomIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '-999'
+  TargetAttribute: CustomIndex
+}
diff --git a/_Main/BL/Type_MP_Column/DefaultValue_Name.qbl b/_Main/BL/Type_MP_Column/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_MP_Column/Function_CalcDate.qbl b/_Main/BL/Type_MP_Column/Function_CalcDate.qbl
new file mode 100644
index 0000000..2f59aa9
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Function_CalcDate.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcDate
+{
+  TextBody:
+  [*
+    // rislai Jun-28-2024 (created)
+    if( not this.IsAttrbuteColumn() ){
+      names := this.Name().Tokenize( "/" );
+      this.Date( ifexpr( this.CustomDate() <> Date::MinDate(),this.CustomDate(),guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() )));
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MP_Column/Function_CalcIndex.qbl b/_Main/BL/Type_MP_Column/Function_CalcIndex.qbl
new file mode 100644
index 0000000..8319f34
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/Function_CalcIndex.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // rislai Jul-24-2024 (created)
+    year := this.Date().Year();
+    month := this.Date().Month();
+    day := this.Date().Day();
+    
+    index := [String]year;
+    if( month < 10 ){
+      index := index + "0" + [String]month; 
+    }
+    if( day < 10 ){
+      index := index + "0" + [String]day; 
+    }
+    
+    
+    value := ifexpr( this.CustomIndex() = -999,[Number]index,this.CustomIndex() );
+    
+    this.Index( value );
+  *]
+}
diff --git a/_Main/BL/Type_MP_Column/_ROOT_Type_MP_Column.qbl b/_Main/BL/Type_MP_Column/_ROOT_Type_MP_Column.qbl
new file mode 100644
index 0000000..57b1ea9
--- /dev/null
+++ b/_Main/BL/Type_MP_Column/_ROOT_Type_MP_Column.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MP_Column
+{
+  #keys: '5[412672.1.95254788][412672.1.95254786][0.0.0][412672.1.95254787][412672.1.95254789]'
+  BaseType: Object
+  StructuredName: 'MP_Columns'
+}
diff --git a/_Main/BL/Type_MP_Row/Attribute_CustomName.qbl b/_Main/BL/Type_MP_Row/Attribute_CustomName.qbl
new file mode 100644
index 0000000..9c69130
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/Attribute_CustomName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomName
+{
+  #keys: '3[412672.1.95254889][412672.1.95254888][412672.1.95254890]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MP_Row/Attribute_Index.qbl b/_Main/BL/Type_MP_Row/Attribute_Index.qbl
new file mode 100644
index 0000000..4590e93
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[412672.1.95254892][412672.1.95254891][412672.1.95254893]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MP_Row/Attribute_Name.qbl b/_Main/BL/Type_MP_Row/Attribute_Name.qbl
new file mode 100644
index 0000000..2412123
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.95254895][412672.1.95254894][412672.1.95254896]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MP_Row/Attribute_Remark.qbl b/_Main/BL/Type_MP_Row/Attribute_Remark.qbl
new file mode 100644
index 0000000..2b44249
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/Attribute_Remark.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Remark
+{
+  #keys: '3[412672.1.95254886][412672.1.95254885][412672.1.95254887]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MP_Row/DefaultValue_CustomName.qbl b/_Main/BL/Type_MP_Row/DefaultValue_CustomName.qbl
new file mode 100644
index 0000000..ccf1251
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/DefaultValue_CustomName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomName
+}
diff --git a/_Main/BL/Type_MP_Row/DefaultValue_Name.qbl b/_Main/BL/Type_MP_Row/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_MP_Row/DefaultValue_Remark.qbl b/_Main/BL/Type_MP_Row/DefaultValue_Remark.qbl
new file mode 100644
index 0000000..b7df04c
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/DefaultValue_Remark.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Remark
+}
diff --git a/_Main/BL/Type_MP_Row/Function_CalcName.qbl b/_Main/BL/Type_MP_Row/Function_CalcName.qbl
new file mode 100644
index 0000000..c3cbb48
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/Function_CalcName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcName
+{
+  TextBody:
+  [*
+    // rislai Jun-22-2024 (created)
+    
+    value := ifexpr( this.CustomName() = "",[String]this.Index(),this.CustomName() );
+    
+    this.Name( value );
+  *]
+}
diff --git a/_Main/BL/Type_MP_Row/_ROOT_Type_MP_Row.qbl b/_Main/BL/Type_MP_Row/_ROOT_Type_MP_Row.qbl
new file mode 100644
index 0000000..5963ba9
--- /dev/null
+++ b/_Main/BL/Type_MP_Row/_ROOT_Type_MP_Row.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MP_Row
+{
+  #keys: '5[412672.1.95254783][412672.1.95254781][0.0.0][412672.1.95254782][412672.1.95254784]'
+  BaseType: Object
+  StructuredName: 'MP_Rows'
+}
diff --git a/_Main/BL/Type_MP_Table/Attribute_Name.qbl b/_Main/BL/Type_MP_Table/Attribute_Name.qbl
new file mode 100644
index 0000000..0014815
--- /dev/null
+++ b/_Main/BL/Type_MP_Table/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.95254900][412672.1.95254899][412672.1.95254901]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MP_Table/Attribute_RowIndexCache.qbl b/_Main/BL/Type_MP_Table/Attribute_RowIndexCache.qbl
new file mode 100644
index 0000000..521d84b
--- /dev/null
+++ b/_Main/BL/Type_MP_Table/Attribute_RowIndexCache.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowIndexCache
+{
+  #keys: '3[412672.1.95254903][412672.1.95254902][412672.1.95254904]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MP_Table/DefaultValue_Name.qbl b/_Main/BL/Type_MP_Table/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_MP_Table/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_MP_Table/Method_GetRowIndexCache.qbl b/_Main/BL/Type_MP_Table/Method_GetRowIndexCache.qbl
new file mode 100644
index 0000000..eccdbc7
--- /dev/null
+++ b/_Main/BL/Type_MP_Table/Method_GetRowIndexCache.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRowIndexCache () declarative as Number
+{
+  TextBody:
+  [*
+    // rislai Jun-20-2024 (created)
+    this.RowIndexCache( this.RowIndexCache() + 1 );
+    
+    return this.RowIndexCache();
+  *]
+}
diff --git a/_Main/BL/Type_MP_Table/_ROOT_Type_MP_Table.qbl b/_Main/BL/Type_MP_Table/_ROOT_Type_MP_Table.qbl
new file mode 100644
index 0000000..620aaac
--- /dev/null
+++ b/_Main/BL/Type_MP_Table/_ROOT_Type_MP_Table.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MP_Table
+{
+  #keys: '5[412672.1.95254778][412672.1.95254776][0.0.0][412672.1.95254777][412672.1.95254779]'
+  BaseType: Object
+  StructuredName: 'MP_Tables'
+}
diff --git a/_Main/BL/Type_ScheduleSummaryOutputData/Attribute_Date.qbl b/_Main/BL/Type_ScheduleSummaryOutputData/Attribute_Date.qbl
new file mode 100644
index 0000000..bf15d8d
--- /dev/null
+++ b/_Main/BL/Type_ScheduleSummaryOutputData/Attribute_Date.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Date
+{
+  #keys: '3[412672.1.95305012][412672.1.95305011][412672.1.95305013]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_ScheduleSummaryOutputData/Attribute_Output.qbl b/_Main/BL/Type_ScheduleSummaryOutputData/Attribute_Output.qbl
new file mode 100644
index 0000000..30d1210
--- /dev/null
+++ b/_Main/BL/Type_ScheduleSummaryOutputData/Attribute_Output.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Output
+{
+  #keys: '3[412672.1.95305022][412672.1.95305021][412672.1.95305023]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_ScheduleSummaryOutputData/_ROOT_Type_ScheduleSummaryOutputData.qbl b/_Main/BL/Type_ScheduleSummaryOutputData/_ROOT_Type_ScheduleSummaryOutputData.qbl
new file mode 100644
index 0000000..a19c60e
--- /dev/null
+++ b/_Main/BL/Type_ScheduleSummaryOutputData/_ROOT_Type_ScheduleSummaryOutputData.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ScheduleSummaryOutputData
+{
+  #keys: '5[412672.1.95304995][412672.1.95304993][0.0.0][412672.1.95304994][412672.1.95304996]'
+  BaseType: Object
+  StructuredName: 'ScheduleSummaryOutputDatas'
+}
diff --git a/_Main/BL/Type_ScheduleSummaryOutputLine/Attribute_LineName.qbl b/_Main/BL/Type_ScheduleSummaryOutputLine/Attribute_LineName.qbl
new file mode 100644
index 0000000..a6b2b41
--- /dev/null
+++ b/_Main/BL/Type_ScheduleSummaryOutputLine/Attribute_LineName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute LineName
+{
+  #keys: '3[412672.1.95294297][412672.1.95294296][412672.1.95294298]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ScheduleSummaryOutputLine/_ROOT_Type_ScheduleSummaryOutputLine.qbl b/_Main/BL/Type_ScheduleSummaryOutputLine/_ROOT_Type_ScheduleSummaryOutputLine.qbl
new file mode 100644
index 0000000..3d56b9f
--- /dev/null
+++ b/_Main/BL/Type_ScheduleSummaryOutputLine/_ROOT_Type_ScheduleSummaryOutputLine.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ScheduleSummaryOutputLine
+{
+  #keys: '5[412672.1.95294293][412672.1.95294291][0.0.0][412672.1.95294292][412672.1.95294294]'
+  BaseType: Object
+  StructuredName: 'ScheduleSummaryOutputLines'
+}
diff --git a/_Main/BL/Type_Test/StaticMethod_Test.qbl b/_Main/BL/Type_Test/StaticMethod_Test.qbl
index f3f8a11..8b72915 100644
--- a/_Main/BL/Type_Test/StaticMethod_Test.qbl
+++ b/_Main/BL/Type_Test/StaticMethod_Test.qbl
@@ -13,6 +13,14 @@
     //names := name.Tokenize( "/" );
     //  info( guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() ));
     
-    info( macroPlan.DisplayNameForSelection() );
+    //traverse( archive,ScheduleSummaryOutputLine,line ){
+    //  info( line.LineName() );
+    //  traverse( line,ScheduleSummaryOutputData,data ){
+    //    info( data.Date().Format( "Y-M2-D2 ") + " ->" + [String]data.Output() );
+    //  } 
+    //}
+    
+    attributes := "ShiftPattern;WorkingDay;Capacity;Output;".SubString( 0,"ShiftPattern;WorkingDay;Capacity;Output;".Length() - 1 );
+    info( attributes );
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index 1b42609..f42b770 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -93,6 +93,17 @@
         Taborder: 7
       ]
     }
+    Component ButtonScheduleSummaryReport
+    {
+      #keys: '[412672.1.95510221]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOCUMENT_CUP'
+        Label: '璁″垝姹囨�绘姤琛�'
+        Taborder: 8
+      ]
+    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews\043859.def" "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews\043859.def"
deleted file mode 100644
index f5f7736..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupScenarioComparisonViews\043859.def"
+++ /dev/null
@@ -1,4 +0,0 @@
-Quintiq file version 2.0
-Component ActionBarGroupScenarioComparisonViews #extension
-{
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def
deleted file mode 100644
index fb3b421..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageScenarioComparison.def
+++ /dev/null
@@ -1,8 +0,0 @@
-Quintiq file version 2.0
-Component ActionBarPageScenarioComparison #extension
-{
-  Children:
-  [
-    #child: ActionBarGroupScenarioComparisonViews
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonScheduleSummaryReport_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonScheduleSummaryReport_OnCli.def
new file mode 100644
index 0000000..0871e0b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonScheduleSummaryReport_OnCli.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonScheduleSummaryReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonScheduleSummaryReport_OnClick
+{
+  #keys: '[412672.1.95510258]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      // Open view
+      ApplicationMacroPlanner.OpenView( 'ScheduleSummaryReport', this );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index 2a93db6..ec25220 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -20,7 +20,6 @@
         #child: abpAlgorithmPostProcessing
         #child: ActionBarPagePlan
         #child: ActionBarPageReport
-        #child: ActionBarPageScenarioComparison
       ]
     }
     Component dhBinaryDataPR id:dhBinaryDataPR_688
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def"
index f54864f..b37ae84 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def"
@@ -29,7 +29,7 @@
           Properties:
           [
             DataType: 'RecycleBin'
-            FixedFilter: 'object.Name() = "LocalTableXML"'
+            FixedFilter: 'object.Name() = LocalCell_DemandComparison::GetTableName()'
             Source: 'RecycleBin'
             Taborder: 0
             Transformation: 'ExportXMLManager'
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick\043781.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick\043781.def"
index 798a871..a580e4b 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick\043781.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bDownload_OnClick\043781.def"
@@ -21,7 +21,7 @@
     [*
       binaryValue := dhXMLDataListener.Data( ).Export();
       
-      Application.Download( "闇�姹傜増鏈姣擾" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+      Application.Download( LocalCell_DemandComparison::GetTableName() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
       
       dhXMLDataListener.Data( ).Delete();
     *]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor\043715.def"
new file mode 100644
index 0000000..e497a22
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor\043715.def"
@@ -0,0 +1,103 @@
+Quintiq file version 2.0
+Component MatrixEditor id:MatrixEditor_715
+{
+  #keys: '[412672.1.94121865]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell
+    {
+      #keys: '[412672.1.94121866]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCells
+        {
+          #keys: '[412672.1.94121867]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MP_Table'
+            Source: 'dhComparisonData'
+            Taborder: 0
+            Transformation: 'MP_Row.MP_Cell.astype(MP_Cell_ScheduleSummary)'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'ShiftPattern;WorkingDay;Capacity;Output'
+        Column: 'MP_Column'
+        Row: 'MP_Row'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows
+    {
+      #keys: '[412672.1.94121868]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRows
+        {
+          #keys: '[412672.1.94121869]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MP_Table'
+            FilterArguments: 'checkedEntity:QMacroPlanner::FormScheduleSummaryReport.dhFinelEntity'
+            FixedFilter: 'exists( checkedEntity,Elements,entity,entity.DisplayName() = object.Name() )'
+            Source: 'dhComparisonData'
+            Taborder: 0
+            Transformation: 'MP_Row'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns
+    {
+      #keys: '[412672.1.94121870]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumns
+        {
+          #keys: '[412672.1.94121871]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MP_Table'
+            FilterArguments: 'startDate:QMacroPlanner::FormScheduleSummaryReport.dhStartDate;endDate:QMacroPlanner::FormScheduleSummaryReport.dhEndDate'
+            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() '
+            Source: 'dhComparisonData'
+            Taborder: 0
+            Transformation: 'MP_Column'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Date'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageDemandComparison_1
+    #child: matrixeditorContextMenuDemandComparison_1
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns'
+    ContextMenu: 'matrixeditorContextMenuDemandComparison'
+    Rows: 'MatrixEditorRows'
+    Taborder: 0
+    Visible: false
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor510.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor510.def
new file mode 100644
index 0000000..41782c5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_MatrixEditor510.def
@@ -0,0 +1,102 @@
+Quintiq file version 2.0
+Component MatrixEditor510
+{
+  #keys: '[412672.1.96380864]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell294
+    {
+      #keys: '[412672.1.96380865]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCells611
+        {
+          #keys: '[412672.1.96380866]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'LocalTable'
+            Source: 'dhComparisonData854'
+            Taborder: 0
+            Transformation: 'LocalRow.LocalCell.astype(LocalCell_ScheduleSummary)'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'ShiftPattern;WorkingDay;Capacity;Output'
+        Column: 'LocalColumn'
+        Row: 'LocalRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows221
+    {
+      #keys: '[412672.1.96380867]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRows116
+        {
+          #keys: '[412672.1.96380868]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'LocalTable'
+            FilterArguments: 'checkedEntity:QMacroPlanner::FormScheduleSummaryReport.dhFinelEntity'
+            FixedFilter: 'exists( checkedEntity,Elements,entity,entity.DisplayName() = object.Name() )'
+            Source: 'dhComparisonData854'
+            Taborder: 0
+            Transformation: 'LocalRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns391
+    {
+      #keys: '[412672.1.96380869]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumns655
+        {
+          #keys: '[412672.1.96380870]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'LocalTable'
+            FilterArguments: 'startDate:QMacroPlanner::FormScheduleSummaryReport.dhStartDate;endDate:QMacroPlanner::FormScheduleSummaryReport.dhEndDate'
+            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date() '
+            Source: 'dhComparisonData854'
+            Taborder: 0
+            Transformation: 'LocalColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Date'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageDemandComparison234
+    #child: matrixeditorContextMenuDemandComparison527
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns391'
+    ContextMenu: 'matrixeditorContextMenuDemandComparison527'
+    Rows: 'MatrixEditorRows221'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def
new file mode 100644
index 0000000..3b9186a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelRibbon
+{
+  #keys: '[412672.1.94122014]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelRibbon504
+    #child: PanelRibbon322_88
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def"
new file mode 100644
index 0000000..b88a509
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon322\04388.def"
@@ -0,0 +1,150 @@
+Quintiq file version 2.0
+Component PanelRibbon322 id:PanelRibbon322_88
+{
+  #keys: '[412672.1.94122030]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component cbShiftPlan
+    {
+      #keys: '[412672.1.94122136]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Checked: true
+        Description: '鐝'
+        Label: '鐝'
+        Taborder: 0
+      ]
+    }
+    Component cbWorkday
+    {
+      #keys: '[412672.1.94122149]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Checked: true
+        Description: '宸ヤ綔鏃�'
+        Label: '宸ヤ綔鏃�'
+        Taborder: 1
+      ]
+    }
+    Component cbCapacity
+    {
+      #keys: '[412672.1.94122161]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Checked: true
+        Description: '浜ц兘'
+        Label: '浜ц兘'
+        Taborder: 2
+      ]
+    }
+    Component cbOutput
+    {
+      #keys: '[412672.1.94122174]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Checked: true
+        Description: '浜ч噺'
+        Label: '浜ч噺'
+        Taborder: 3
+      ]
+    }
+    Component dsStartDate id:dsStartDate_438
+    {
+      #keys: '[412672.1.94150910]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start Date'
+        Taborder: 4
+      ]
+    }
+    Component dhStartDate id:dhStartDate_891
+    {
+      #keys: '[412672.1.94150932]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Date*'
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+    Component dsEndDate id:dsEndDate_963
+    {
+      #keys: '[412672.1.94150952]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 9999-12-31
+        Label: 'End Date'
+        Taborder: 6
+      ]
+    }
+    Component dhEndDate id:dhEndDate_384
+    {
+      #keys: '[412672.1.94150974]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Date*'
+      Properties:
+      [
+        Taborder: 7
+      ]
+    }
+    Component bExport
+    {
+      #keys: '[412672.1.99120484]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 8
+      ]
+    }
+    Component dhXMLDataListener
+    {
+      #keys: '[412672.1.97821419]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'ExportXMLManager'
+      Children:
+      [
+        Component DataExtractorRibbon
+        {
+          #keys: '[412672.1.97821434]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'RecycleBin'
+            FixedFilter: 'object.Name() = MP_Cell_ScheduleSummary::GetTableName()'
+            Source: 'RecycleBin'
+            Taborder: 0
+            Transformation: 'ExportXMLManager'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 9
+      ]
+    }
+    Component bDownload
+    {
+      #keys: '[412672.1.97871677]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOWNLOAD'
+        Taborder: 10
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def
new file mode 100644
index 0000000..b488d6b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelRibbon504.def
@@ -0,0 +1,66 @@
+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'
+        Taborder: 3
+      ]
+    }
+    Component bImportOutput
+    {
+      #keys: '[412672.1.94122280]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 4
+      ]
+    }
+    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:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+    Title: '浜у嚭瀵煎叆'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelScheduleSummary.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelScheduleSummary.def
new file mode 100644
index 0000000..69aad65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_PanelScheduleSummary.def
@@ -0,0 +1,70 @@
+Quintiq file version 2.0
+Component PanelScheduleSummary
+{
+  #keys: '[412672.1.94121858]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhComparisonData
+    {
+      #keys: '[412672.1.94121859]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'MP_Table'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    Component dhCheckedEntity
+    {
+      #keys: '[412672.1.94121860]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Entity]*'
+      Children:
+      [
+        Component deCheckedProduct
+        {
+          #keys: '[412672.1.94121861]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Entity]'
+            Source: 'ApplicationMacroPlanner.DataHolderCheckedEntities'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 5
+      ]
+    }
+    Component dhFinelEntity
+    {
+      #keys: '[412672.1.94121862]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Entity]*'
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
+    #child: MatrixEditor_715
+    #child: MatrixEditor510
+    Component dhComparisonData854
+    {
+      #keys: '[412672.1.96380914]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'LocalTable'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison\0431.def"
new file mode 100644
index 0000000..235d981
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageDemandComparison id:matrixEditorActionBarPageDemandComparison_1
+{
+  #keys: '[412672.1.94121872]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison234.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison234.def
new file mode 100644
index 0000000..87dc127
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixEditorActionBarPageDemandComparison234.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageDemandComparison234
+{
+  #keys: '[412672.1.96380871]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison\0431.def"
new file mode 100644
index 0000000..a12dd25
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuDemandComparison id:matrixeditorContextMenuDemandComparison_1
+{
+  #keys: '[412672.1.94121873]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison527.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison527.def
new file mode 100644
index 0000000..b0e701c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Component_matrixeditorContextMenuDemandComparison527.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuDemandComparison527
+{
+  #keys: '[412672.1.96380872]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Method_SetAttributes.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Method_SetAttributes.def
new file mode 100644
index 0000000..017b5e5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Method_SetAttributes.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetAttributes () id:Method_FormScheduleSummaryReport_SetAttributes
+{
+  #keys: '[412672.1.98957835]'
+  Body:
+  [*
+    attributes := "";
+    if( cbShiftPlan.Checked() ){
+      attributes := attributes + "ShiftPattern;";
+    }
+    if( cbWorkday.Checked() ){
+      attributes := attributes + "WorkingDay;";
+    }
+    if( cbCapacity.Checked() ){
+      attributes := attributes + "Capacity;";
+    }
+    if( cbOutput.Checked() ){
+      attributes := attributes + "Output;";
+    }
+    attributes := attributes.SubString( 0,attributes.Length() - 1 );
+    MatrixEditor510.Attributes( attributes );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bDownload_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bDownload_OnClick.def
new file mode 100644
index 0000000..2f93565
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bDownload_OnClick.def
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/bDownload
+Response OnClick () id:Response_PanelRibbon322_88_bDownload_OnClick
+{
+  #keys: '[412672.1.98988449]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    flag := true;
+    feedback := "";
+    if( isnull( dhXMLDataListener.Data() )){
+      flag := false;
+      feedback := "褰撳墠鏃犱笅杞芥暟鎹紝鐐瑰嚮瀵煎嚭鍒涘缓涓嬭浇鏁版嵁銆�"
+    }
+    return flag;
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := dhXMLDataListener.Data( ).Export();
+      
+      Application.Download( MP_Cell_ScheduleSummary::GetTableName() + "_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+      
+      dhXMLDataListener.Data( ).Delete();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bExport_OnClick.def
new file mode 100644
index 0000000..71cef3e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_bExport_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/bExport
+Response OnClick () id:Response_PanelRibbon322_88_bExport_OnClick
+{
+  #keys: '[412672.1.99120483]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      rows := selectset( dhComparisonData854.Data(),LocalRow,row,exists( dhFinelEntity.Data(),Elements,entity,entity.DisplayName() = row.Name() ));
+      columns := selectset( dhComparisonData854.Data(),LocalColumn,column,dhStartDate.Data() <= column.Date() and dhEndDate.Data() > column.Date() );
+      LocalCell_ScheduleSummary::AsyncExport( RecycleBin,rows,columns );
+      //Application.Download( "浜у嚭瀵煎叆妯℃澘.xlsx",data.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbCapacity_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbCapacity_OnUserChanged.def
new file mode 100644
index 0000000..1bbb86b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbCapacity_OnUserChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/cbCapacity
+Response OnUserChanged () id:Response_PanelRibbon322_88_cbCapacity_OnUserChanged
+{
+  #keys: '[412672.1.98957932]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnUserChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      FormScheduleSummaryReport.SetAttributes();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbOutput_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbOutput_OnUserChanged.def
new file mode 100644
index 0000000..8d6dcb4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbOutput_OnUserChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/cbOutput
+Response OnUserChanged () id:Response_PanelRibbon322_88_cbOutput_OnUserChanged
+{
+  #keys: '[412672.1.98957943]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnUserChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      FormScheduleSummaryReport.SetAttributes();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbShiftPlan_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbShiftPlan_OnUserChanged.def
new file mode 100644
index 0000000..a8885e1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbShiftPlan_OnUserChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/cbShiftPlan
+Response OnUserChanged () id:Response_PanelRibbon322_88_cbShiftPlan_OnUserChanged
+{
+  #keys: '[412672.1.97801802]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnUserChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      FormScheduleSummaryReport.SetAttributes();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbWorkday_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbWorkday_OnUserChanged.def
new file mode 100644
index 0000000..45abeb1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_cbWorkday_OnUserChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/cbWorkday
+Response OnUserChanged () id:Response_PanelRibbon322_88_cbWorkday_OnUserChanged
+{
+  #keys: '[412672.1.98957921]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnUserChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      FormScheduleSummaryReport.SetAttributes();
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhEndDate_OnCreated\043478.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhEndDate_OnCreated\043478.def"
new file mode 100644
index 0000000..b9729a9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhEndDate_OnCreated\043478.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/dhEndDate_384
+Response OnCreated () id:Response_PanelFilter_dhEndDate_OnCreated_478
+{
+  #keys: '[412672.1.94150972]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( Date::MaxDate() );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhStartDate_OnCreated\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhStartDate_OnCreated\04357.def"
new file mode 100644
index 0000000..f2079d0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dhStartDate_OnCreated\04357.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/dhStartDate_891
+Response OnCreated () id:Response_PanelFilter_dhStartDate_OnCreated_57
+{
+  #keys: '[412672.1.94150930]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( Date::MinDate() );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsEndDate_OnChanged\043273.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsEndDate_OnChanged\043273.def"
new file mode 100644
index 0000000..e8b911a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsEndDate_OnChanged\043273.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/dsEndDate_963
+Response OnChanged () id:Response_PanelFilter_dsEndDate_OnChanged_273
+{
+  #keys: '[412672.1.94150951]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dhEndDate.Data( this.Date() );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsStartDate_OnChanged\043298.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsStartDate_OnChanged\043298.def"
new file mode 100644
index 0000000..b1b47ea
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon322_88_dsStartDate_OnChanged\043298.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelRibbon322_88/dsStartDate_438
+Response OnChanged () id:Response_PanelFilter_dsStartDate_OnChanged_298
+{
+  #keys: '[412672.1.94150909]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dhStartDate.Data( this.Date() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def
new file mode 100644
index 0000000..7b630bf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon820_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/ButtonRibbon820
+Response OnClick () id:Response_PanelRibbon504_ButtonRibbon820_OnClick
+{
+  #keys: '[412672.1.97441221]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
+      table := MP_Cell_ScheduleSummary::CreateFullTable( macroPlans,RecycleBin ,Archive);
+      
+      dhComparisonData854.Data( table );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def
new file mode 100644
index 0000000..440221e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_ButtonRibbon_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/ButtonRibbon
+Response OnClick () id:Response_PanelRibbon504_ButtonRibbon_OnClick
+{
+  #keys: '[412672.1.94151032]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      table := MP_Cell_ScheduleSummary::Create( MacroPlan );
+      
+      dhComparisonData.Data( table );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def
new file mode 100644
index 0000000..c661ea7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bExportTemplate_OnClick.def
@@ -0,0 +1,18 @@
+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_bImportOutput_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bImportOutput_OnClick.def
new file mode 100644
index 0000000..6c9ac52
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_bImportOutput_OnClick.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/bImportOutput
+Response OnClick () id:Response_PanelRibbon504_bImportOutput_OnClick
+{
+  #keys: '[412672.1.96362099]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          generalExcelImportAndExportDataSource := GeneralExcelImportAndExportDataSource::Upload( RecycleBin, webFileBinaryData, fileName );
+          generalExcelImportAndExportDataSource.ReadStructure();
+          
+          MP_Cell_ScheduleSummary::ImportOutput( Archive,generalExcelImportAndExportDataSource);
+          
+          // 鍚庣画鍒犻櫎
+          generalExcelImportAndExportDataSource.Delete();
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    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
new file mode 100644
index 0000000..82c8067
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelRibbon504_npYear_OnCreated.def
@@ -0,0 +1,17 @@
+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_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhCheckedEntity_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhCheckedEntity_OnDataChanged.def
new file mode 100644
index 0000000..0cceac0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhCheckedEntity_OnDataChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelScheduleSummary/dhCheckedEntity
+Response OnDataChanged () id:Response_PanelScheduleSummary_dhCheckedEntity_OnDataChanged
+{
+  #keys: '[412672.1.94121856]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( this.Data().Size() <> 0 ){
+        dhFinelEntity.Data( this.Data().Copy() ); 
+      }else{
+        dhFinelEntity.Data( DataHolderEntities.Data().Copy() ); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnCreated.def
new file mode 100644
index 0000000..3593bf5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnCreated.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: PanelScheduleSummary/dhComparisonData854
+Response OnCreated () id:Response_PanelScheduleSummary_dhComparisonData854_OnCreated
+{
+  #keys: '[412672.1.96380911]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnDataChanged.def
new file mode 100644
index 0000000..dc19aac
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData854_OnDataChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelScheduleSummary/dhComparisonData854
+Response OnDataChanged () id:Response_PanelScheduleSummary_dhComparisonData854_OnDataChanged
+{
+  #keys: '[412672.1.96380912]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      // PanelScheduleSummary.Title( this.Data().Name() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnCreated.def
new file mode 100644
index 0000000..08961a7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnCreated.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelScheduleSummary/dhComparisonData
+Response OnCreated () id:Response_PanelScheduleSummary_dhComparisonData_OnCreated
+{
+  #keys: '[412672.1.96303222]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      table := select( MacroPlan,MP_Table,table,table.Name() = MP_Cell_ScheduleSummary::GetTableName() );
+      
+      dhComparisonData.Data( table );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnDataChanged.def
new file mode 100644
index 0000000..6b2b502
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhComparisonData_OnDataChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelScheduleSummary/dhComparisonData
+Response OnDataChanged () id:Response_PanelScheduleSummary_dhComparisonData_OnDataChanged
+{
+  #keys: '[412672.1.94121857]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      PanelScheduleSummary.Title( this.Data().Name() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhFinelEntity_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhFinelEntity_OnCreated.def
new file mode 100644
index 0000000..fac3111
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/Response_PanelScheduleSummary_dhFinelEntity_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelScheduleSummary/dhFinelEntity
+Response OnCreated () id:Response_PanelScheduleSummary_dhFinelEntity_OnCreated
+{
+  #keys: '[412672.1.94121855]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( DataHolderEntities.Data().Copy() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/_ROOT_Component_FormScheduleSummaryReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/_ROOT_Component_FormScheduleSummaryReport.def
new file mode 100644
index 0000000..35abd2f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormScheduleSummaryReport/_ROOT_Component_FormScheduleSummaryReport.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormScheduleSummaryReport
+{
+  #keys: '[412672.1.94121778]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelRibbon
+    #child: PanelScheduleSummary
+  ]
+  Properties:
+  [
+    Description: '璁″垝姹囨�绘姤琛� '
+    Image: 'DOCUMENT_CUP'
+    Title: '璁″垝姹囨�绘姤琛� '
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbComprehensiveHours_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbComprehensiveHours_OnUserChanged.def
index bd4fd00..7f3145b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbComprehensiveHours_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbComprehensiveHours_OnUserChanged.def
@@ -12,9 +12,9 @@
     [*
       cbStandardHours.Checked( not this.Checked() );
       if( this.Checked() ){
-        PackagingPlanLotSizeDialog.Title( "缁煎悎宸ユ椂鍒舵姤琛�" );
+        FormComprehensiveStandardHoursReport.Title( "缁煎悎宸ユ椂鍒舵姤琛�" );
       }else{
-        PackagingPlanLotSizeDialog.Title( "鏍囧噯宸ユ椂鍒舵姤琛�" );
+        FormComprehensiveStandardHoursReport.Title( "鏍囧噯宸ユ椂鍒舵姤琛�" );
       }
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbStandardHours_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbStandardHours_OnUserChanged.def
index d5737ab..c65fbd7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbStandardHours_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/Response_pOperaction_cbStandardHours_OnUserChanged.def
@@ -13,9 +13,9 @@
       cbComprehensiveHours.Checked( not this.Checked() );
       
       if( this.Checked() ){
-        PackagingPlanLotSizeDialog.Title( "鏍囧噯宸ユ椂鍒舵姤琛�" );
+        FormComprehensiveStandardHoursReport.Title( "鏍囧噯宸ユ椂鍒舵姤琛�" );
       }else{
-        PackagingPlanLotSizeDialog.Title( "缁煎悎宸ユ椂鍒舵姤琛�" );
+        FormComprehensiveStandardHoursReport.Title( "缁煎悎宸ユ椂鍒舵姤琛�" );
       }
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_PackagingPlanLotSizeDialog.def b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_FormComprehensiveStandardHoursReport.def
similarity index 79%
rename from _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_PackagingPlanLotSizeDialog.def
rename to _Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_FormComprehensiveStandardHoursReport.def
index 2bb41dd..5a8f45a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_PackagingPlanLotSizeDialog.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_StandardHoursReport/_ROOT_Component_FormComprehensiveStandardHoursReport.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #root
 #parent: MacroPlannerWebApp
-OrphanComponent PackagingPlanLotSizeDialog
+OrphanComponent FormComprehensiveStandardHoursReport
 {
   #keys: '[412672.1.33151116]'
   BaseType: 'WebForm'
diff --git a/_Main/UI/MacroPlannerWebApp/Views/ComprehensiveStandardHoursReport.vw b/_Main/UI/MacroPlannerWebApp/Views/ComprehensiveStandardHoursReport.vw
index 97583b3..bd4c43d 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/ComprehensiveStandardHoursReport.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/ComprehensiveStandardHoursReport.vw
@@ -2,6 +2,195 @@
 {
   viewcontents
   {
+    forms
+    {
+      form_FormComprehensiveStandardHoursReport
+      {
+        title: 'QMacroPlanner::FormComprehensiveStandardHoursReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormComprehensiveStandardHoursReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 17
+          columnPosition: 1
+          columnSpan: 11
+        }
+        components
+        {
+          FormComprehensiveStandardHoursReport_pMain
+          {
+            sizeRatio: 1
+          }
+          FormComprehensiveStandardHoursReport_pOperaction
+          {
+            sizeRatio: 1
+          }
+          FormComprehensiveStandardHoursReport_Panel743
+          {
+            sizeRatio: 1
+          }
+          FormComprehensiveStandardHoursReport_MatrixEditor859
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormComprehensiveStandardHoursReport.MatrixEditor859'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_RealValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'RealValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: 'Description'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
     page: ''
     group: ''
     index: 0
diff --git a/_Main/UI/MacroPlannerWebApp/Views/ScheduleSummaryReport.vw b/_Main/UI/MacroPlannerWebApp/Views/ScheduleSummaryReport.vw
new file mode 100644
index 0000000..38aac6f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/ScheduleSummaryReport.vw
@@ -0,0 +1,234 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormScheduleSummaryReport
+      {
+        title: 'QMacroPlanner::FormScheduleSummaryReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormScheduleSummaryReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 10
+        }
+        components
+        {
+          FormScheduleSummaryReport_PanelRibbon
+          {
+            sizeRatio: 1
+          }
+          FormScheduleSummaryReport_PanelRibbon322
+          {
+            sizeRatio: 1
+          }
+          FormScheduleSummaryReport_PanelRibbon504
+          {
+            sizeRatio: 1
+          }
+          FormScheduleSummaryReport_PanelScheduleSummary
+          {
+            sizeRatio: 1
+          }
+          FormScheduleSummaryReport_MatrixEditor
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormScheduleSummaryReport.MatrixEditor'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_ShiftPlan
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'ShiftPlan'
+                    }
+                    attribute_WorkingDay
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'WorkingDay'
+                    }
+                    attribute_Capacity
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Capacity'
+                    }
+                    attribute_Output
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Output'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: 'Description'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: true
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+              CarCo_KPISetting: 'Blending'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: 'Name'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    image: 'DOCUMENT_CUP'
+    page: ''
+    group: ''
+    index: 0
+    description: ''
+  }
+  formatversion: 2
+  id: 'ScheduleSummaryReport'
+  name: 'ScheduleSummaryReport'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3