From aa42b48fd2d23e75b64a0aec05d5be4b9ebf0465 Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期二, 05 十一月 2024 18:20:19 +0800
Subject: [PATCH] 计划库存后端类

---
 _Main/BL/Type_InventoryPlanArchiveCell/Attribute_ActualQuantity.qbl                                                                            |    7 
 _Main/BL/Type_InventoryPlanArchiveColumn/DefaultValue_TimeUnit.qbl                                                                             |    6 
 _Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnSelectionChanged.def                              |   19 
 _Main/BL/Type_OfflinePlanArchiveVersionRow/Attribute_Name.qbl                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnSelectionChanged.def                    |   19 
 _Main/BL/Type_InventoryPlanArchiveRow/Attribute_Name.qbl                                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader#952.def                                              |    1 
 _Main/BL/Type_AssemblyOnlinePlanRow/Attribute_Name.qbl                                                                                         |    7 
 _Main/BL/Type_InventoryPlanArchiveColumn/Attribute_EndDate.qbl                                                                                 |    8 
 _Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl                                                                           |   12 
 _Main/BL/Type_OfflinePlanArchiveVersion/Method_GenerateColumn.qbl                                                                              |   77 +--
 _Main/BL/Type_InventoryPlanArchiveVersion/_ROOT_Type_InventoryPlanArchiveVersion.qbl                                                           |   10 
 _Main/BL/Type_InventoryPlanArchiveVersionSearch/_ROOT_Type_InventoryPlanArchiveVersionSearch.qbl                                               |   10 
 _Main/BL/Type_InventoryPlanArchiveRow/Attribute_Unit.qbl                                                                                       |    8 
 _Main/BL/Type_InventoryPlanArchiveCell/_ROOT_Type_InventoryPlanArchiveCell.qbl                                                                 |   10 
 _Main/BL/Type_InventoryPlanArchiveColumn/Attribute_TimeUnit.qbl                                                                                |    8 
 _Main/BL/Type_InventoryPlanArchiveCell/Attribute_PlanQuantity.qbl                                                                              |    7 
 _Main/BL/Type_InventoryPlanArchiveVersion/Attribute_Name.qbl                                                                                   |    8 
 _Main/BL/Relations/Relation_InventoryPlanArchiveVersionSearch_InterfaceDataset_InterfaceDataset.qbl                                            |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                              |   24 +
 _Main/BL/Relations/Relation_InventoryPlanArchiveRow_Cell_InventoryPlanArchiveCell_Row.qbl                                                      |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelOperation#414.def                                                |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelUnit.def                                                         |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelPeriod.def                                                       |   35 +
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable#384.def                                        |    2 
 _Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_TimeUnit.qbl                                                                         |    8 
 _Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Version_InventoryPlanArchiveVersion_Colu.qbl                                            |   23 +
 _Main/BL/Type_InventoryPlanArchiveRow/_ROOT_Type_InventoryPlanArchiveRow.qbl                                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader#503.def                                                   |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def                                                   |    2 
 _Main/BL/Type_InventoryPlanArchiveRow/Method_SetQuantity.qbl                                                                                   |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixeditorContextMenuTable#1.def                                    |   10 
 _Main/BL/Type_InventoryPlanArchiveVersion/DefaultValue_IsShow.qbl                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnCreated.def                             |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnCreated.def                                       |   18 
 _Main/BL/Type_InventoryPlanArchiveColumn/_ROOT_Type_InventoryPlanArchiveColumn.qbl                                                             |   10 
 _Main/BL/Type_InventoryPlanArchiveColumn/Attribute_Name.qbl                                                                                    |    7 
 _Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GetDefaultName.qbl                                                                      |   10 
 _Main/BL/Type_InventoryPlanArchiveVersion/Attribute_IsShow.qbl                                                                                 |    8 
 _Main/BL/Type_InventoryPlanArchiveVersion/Method_GetColumnByTimeUnit.qbl                                                                       |   17 
 _Main/BL/Type_AssemblyOnlinePlanVersion/Method_GenerateColumn.qbl                                                                              |   77 +--
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixEditorActionBarPageTable#1.def                                  |   10 
 _Main/BL/Type_InventoryPlanArchiveVersion/Attribute_ID.qbl                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnCreated.def         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnChanged.def         |   20 
 _Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl                                                                        |   72 +++
 _Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Unit.qbl                                                                             |    8 
 _Main/BL/Type_InventoryPlanArchiveColumn/Attribute_StartDate.qbl                                                                               |    8 
 _Main/BL/Type_InventoryPlanArchiveVersion/Method_GenerateColumn.qbl                                                                            |   41 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelProduct#133.def                                                  |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def                                                         |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTimeUnit#805.def                                                 |   26 +
 _Main/BL/Type_AssemblyOnlinePlanVersion/Method_GetRow.qbl                                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def                                    |   43 +
 _Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_EndDate.qbl                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable#881.def                                                    |   14 
 _Main/BL/Type_InventoryPlanArchiveRow/Method_Initialize.qbl                                                                                    |   15 
 _Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_StartDate.qbl                                                                        |    8 
 _Main/BL/Type_InventoryPlanArchiveVersion/Method_GetRowByUnit.qbl                                                                              |   21 
 _Main/BL/Relations/Relation_InventoryPlanArchiveVersion_InterfaceDataset_InterfaceDataset_Inven.qbl                                            |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorStart_OnChanged.def                            |   24 +
 _Main/BL/Type_OfflinePlanArchiveVersionRow/DefaultValue_Name.qbl                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonInventoryPlanArchive.def |   16 
 _Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Product.qbl                                                                          |    8 
 _Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Cell_InventoryPlanArchiveCell_Column.qbl                                                |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable#791.def                                             |  105 ++++
 _Main/UI/MacroPlannerWebApp/Views/Inventory_plan_archive_report.vw                                                                             |   77 +++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def                                        |   13 
 _Main/BL/Relations/Relation_InventoryPlanArchiveRow_Version_InventoryPlanArchiveVersion_Row.qbl                                                |   23 +
 _Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl                                                                           |   32 
 73 files changed, 1,225 insertions(+), 131 deletions(-)

diff --git a/_Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Cell_InventoryPlanArchiveCell_Column.qbl b/_Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Cell_InventoryPlanArchiveCell_Column.qbl
new file mode 100644
index 0000000..85e09b7
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Cell_InventoryPlanArchiveCell_Column.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventoryPlanArchiveColumn_Cell_InventoryPlanArchiveCell_Column
+{
+  #keys: '1[415136.0.1275901429]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Cell
+  {
+    #keys: '3[415136.0.1275901431][415136.0.1275901430][415136.0.1275901432]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventoryPlanArchiveColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Column
+  {
+    #keys: '3[415136.0.1275901434][415136.0.1275901433][415136.0.1275901435]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventoryPlanArchiveCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Version_InventoryPlanArchiveVersion_Colu.qbl b/_Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Version_InventoryPlanArchiveVersion_Colu.qbl
new file mode 100644
index 0000000..0394c09
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventoryPlanArchiveColumn_Version_InventoryPlanArchiveVersion_Colu.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventoryPlanArchiveColumn_Version_InventoryPlanArchiveVersion_Column
+{
+  #keys: '1[415136.0.1275901416]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Version
+  {
+    #keys: '3[415136.0.1275901418][415136.0.1275901417][415136.0.1275901419]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventoryPlanArchiveColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Column
+  {
+    #keys: '3[415136.0.1275901421][415136.0.1275901420][415136.0.1275901422]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventoryPlanArchiveVersion
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventoryPlanArchiveRow_Cell_InventoryPlanArchiveCell_Row.qbl b/_Main/BL/Relations/Relation_InventoryPlanArchiveRow_Cell_InventoryPlanArchiveCell_Row.qbl
new file mode 100644
index 0000000..25bc0aa
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventoryPlanArchiveRow_Cell_InventoryPlanArchiveCell_Row.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventoryPlanArchiveRow_Cell_InventoryPlanArchiveCell_Row
+{
+  #keys: '1[415136.0.1275901400]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Cell
+  {
+    #keys: '3[415136.0.1275901402][415136.0.1275901401][415136.0.1275901403]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventoryPlanArchiveRow
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide Row
+  {
+    #keys: '3[415136.0.1275901405][415136.0.1275901404][415136.0.1275901406]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventoryPlanArchiveCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventoryPlanArchiveRow_Version_InventoryPlanArchiveVersion_Row.qbl b/_Main/BL/Relations/Relation_InventoryPlanArchiveRow_Version_InventoryPlanArchiveVersion_Row.qbl
new file mode 100644
index 0000000..83d30ae
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventoryPlanArchiveRow_Version_InventoryPlanArchiveVersion_Row.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventoryPlanArchiveRow_Version_InventoryPlanArchiveVersion_Row
+{
+  #keys: '1[415136.0.1275901387]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Version
+  {
+    #keys: '3[415136.0.1275901389][415136.0.1275901388][415136.0.1275901390]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventoryPlanArchiveRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Row
+  {
+    #keys: '3[415136.0.1275901392][415136.0.1275901391][415136.0.1275901393]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventoryPlanArchiveVersion
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventoryPlanArchiveVersionSearch_InterfaceDataset_InterfaceDataset.qbl b/_Main/BL/Relations/Relation_InventoryPlanArchiveVersionSearch_InterfaceDataset_InterfaceDataset.qbl
new file mode 100644
index 0000000..73c8df5
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventoryPlanArchiveVersionSearch_InterfaceDataset_InterfaceDataset.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventoryPlanArchiveVersionSearch_InterfaceDataset_InterfaceDataset_InventoryPlanArchiveVersionSearch
+{
+  #keys: '1[415136.0.1275930069]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceDataset
+  {
+    #keys: '3[415136.0.1275930071][415136.0.1275930070][415136.0.1275930072]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventoryPlanArchiveVersionSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InventoryPlanArchiveVersionSearch
+  {
+    #keys: '3[415136.0.1275930074][415136.0.1275930073][415136.0.1275930075]'
+    Cardinality: '0to1'
+    ObjectDefinition: InterfaceDataset
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventoryPlanArchiveVersion_InterfaceDataset_InterfaceDataset_Inven.qbl b/_Main/BL/Relations/Relation_InventoryPlanArchiveVersion_InterfaceDataset_InterfaceDataset_Inven.qbl
new file mode 100644
index 0000000..a7a5783
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventoryPlanArchiveVersion_InterfaceDataset_InterfaceDataset_Inven.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventoryPlanArchiveVersion_InterfaceDataset_InterfaceDataset_InventoryPlanArchiveVersion
+{
+  #keys: '1[415136.0.1275901359]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceDataset
+  {
+    #keys: '3[415136.0.1275901361][415136.0.1275901360][415136.0.1275901362]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventoryPlanArchiveVersion
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InventoryPlanArchiveVersion
+  {
+    #keys: '3[415136.0.1275901364][415136.0.1275901363][415136.0.1275901365]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceDataset
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_AssemblyOnlinePlanRow/Attribute_Name.qbl b/_Main/BL/Type_AssemblyOnlinePlanRow/Attribute_Name.qbl
new file mode 100644
index 0000000..bc7a2b4
--- /dev/null
+++ b/_Main/BL/Type_AssemblyOnlinePlanRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.1275901593][415136.0.1275901592][415136.0.1275901594]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GenerateColumn.qbl b/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GenerateColumn.qbl
index 92c1367..b617de1 100644
--- a/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GenerateColumn.qbl
@@ -1,65 +1,40 @@
 Quintiq file version 2.0
 #parent: #root
 Method GenerateColumn (
-  Dates periods,
-  String timeunit,
-  Date starttime,
-  Date endtime
+  Dates periods
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    mindate               := min( periods, Elements, period, period );
-    maxdate               := max( periods, Elements, period, period );
-    //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
-    if( starttime < mindate and endtime > maxdate ){
-      if( starttime < mindate ){
-        starttime             := mindate;
+    weekstart             := periods.Element( 0 );
+    
+    monthstart            := periods.Element( 0 );
+    traverse( periods, Elements, periodtime ){
+      periodname          := periodtime.Format( "M2/D2/Y" );
+      
+      this.Column( relnew, ColumnName := periodname, StartDate := periodtime, EndDate := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      
+      weekend             := ( weekstart + Duration::Days( 6 ) ).Date();
+      if( ( weekend.Year() <> periodtime.Year() and weekend.Month() > 1 ) or ( abs( weekstart.Week() - periodtime.Week() ) > 1 and weekend.Year() = periodtime.Year() ) ){
+        weekstart         := periodtime;
       }
-      if( endtime > maxdate ){
-        endtime               := maxdate;
+      if( periodtime = weekstart ){
+        weekperiodname    := weekstart.Format( "M2/D2/Y" );
+        this.Column( relnew, ColumnName := weekperiodname, StartDate := weekstart, EndDate := ( weekstart.StartOfNextWeek() - Duration::Days( 1 ) ).Date(), TimeUnit := Translations::MP_GlobalParameters_Week() );
+        
       }
-      if( timeunit = Translations::MP_GlobalParameters_Day() ){
-        for( start := starttime; start <= endtime; start := start.DateTime().StartOfNextDay().Date() ){
-          periodname          := start.Format( "M2/D2/Y" );
-          if( not exists( this, Column, column, column.StartDate() = start ) ){
-            this.Column( relnew, ColumnName := periodname, StartDate := start, EndDate := start, TimeUnit := Translations::MP_GlobalParameters_Day() );
-          }
-        }
-      }else if( timeunit = Translations::MP_GlobalParameters_Week() ){
-    //    weekstartstr          := ' KW';
-        for( start := starttime; start <= endtime; start := start.StartOfNextWeek() ){
-          weekend             := ( start.StartOfNextWeek() - Duration::Days( 1 ) ).Date();//.Concat( weekstartstr.Concat( weekend.Week().Format( 'N(LPad0(2))' ) ) )
-          
-          this.Column( relnew, ColumnName := weekend.Format( "M2/D2/Y" ), StartDate := start, EndDate := weekend, TimeUnit := Translations::MP_GlobalParameters_Week() );
-        }
-      }else if( timeunit = Translations::MP_GlobalParameters_Month() ){
-        for( start := starttime; start <= endtime; start := start.StartOfNextMonth() ){
-          monthend            := ( start.StartOfNextMonth() - Duration::Days( 1 ) ).Date();//.Concat( ' ' ).Concat( monthend.Format( "MM", us_locale ).Concat( '/').Concat( [String]monthend.Month() ).Concat( '鏈�' ) )
-    //      us_locale := Locale::Construct( 'en_us' );
-          this.Column( relnew, ColumnName := monthend.Format( "M2/D2/Y" ), StartDate := start, EndDate := monthend, TimeUnit := Translations::MP_GlobalParameters_Month() );
-        }
+      if( ( monthstart.Year() <> periodtime.Year() and abs( monthstart.Month() - periodtime.Month() ) <> 11 ) or ( abs( monthstart.Month() - periodtime.Month() ) > 1 and monthstart.Year() = periodtime.Year() ) ){
+        monthstart        := periodtime;
       }
+      if( periodtime = monthstart ){
+        monthperiodname   := monthstart.Format( "M2/D2/Y" );
+        enddate           := ( monthstart.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
+        this.Column( relnew, ColumnName := monthperiodname, StartDate := monthstart, EndDate := enddate, TimeUnit := Translations::MP_GlobalParameters_Month() );
+        
+      }
+      weekstart         := periodtime.StartOfNextWeek();
+      monthstart        := periodtime.StartOfNextMonth();
     }
-    //weekstart             := periods.Element( 0 );
-    //monthstart            := periods.Element( 0 );
-    //traverse( periods, Elements, periodtime ){
-    //  periodname          := periodtime.Format( "M2/D2/Y" );
-    //  
-    //  this.Column( relnew, Name := periodname, StartDate := periodtime, EndDate := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
-    //  
-    //  if( periodtime = weekstart ){
-    //    weekperiodname    := weekstart.Format( "M2/D2/Y" );
-    //    this.Column( relnew, Name := weekperiodname, StartDate := weekstart, EndDate := ( weekstart + Duration::Days( 6 ) ).Date(), TimeUnit := Translations::MP_GlobalParameters_Week() );
-    //    weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
-    //  }
-    //  if( periodtime = monthstart ){
-    //    monthperiodname   := monthstart.Format( "M2/D2/Y" );
-    //    enddate           := ( monthstart.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
-    //    this.Column( relnew, Name := monthperiodname, StartDate := monthstart, EndDate := enddate, TimeUnit := Translations::MP_GlobalParameters_Month() );
-    //    monthstart        := monthstart.StartOfNextMonth();
-    //  }
-    //}
   *]
 }
diff --git a/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GetRow.qbl b/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GetRow.qbl
index 46d2d9a..3777a40 100644
--- a/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GetRow.qbl
+++ b/_Main/BL/Type_AssemblyOnlinePlanVersion/Method_GetRow.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method GetRow (
-  const AssemblyOnlinePlanRow aoprow
+  const NewAssemblyOnlinePlanRow aoprow
 ) as AssemblyOnlinePlanVersionRow
 {
   TextBody:
diff --git a/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl b/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl
index 559e5c3..82afd96 100644
--- a/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl
@@ -8,31 +8,31 @@
   TextBody:
   [*
     //鏍规嵁褰撳墠鐗堟湰鐨勮閰嶄笂绾胯鍒�
-    //interface.AssemblyOnlinePlanVersion( relflush );
+    interface.AssemblyOnlinePlanVersion( relflush );
     allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit();
-    name                   := AssemblyOnlinePlanVersion::GetDefaultName();
-    search                 := interface.AssemblyOnlinePlanVersionSearch( relnew, Product := allunit, ProductionLine := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
+    name                   := AssemblyOnlinePlanVersion::GetDefaultName();//search                 := 
+    interface.AssemblyOnlinePlanVersionSearch( relnew, Product := allunit, ProductionLine := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
     table                  := selectobject( interface, AssemblyOnlinePlanVersion, version, not version.IsShow() );
     if( isnull( table ) ){
       table                := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name );
     }
-    showtable              := selectobject( interface, AssemblyOnlinePlanVersion, version, version.IsShow() );
-    if( isnull( table ) ){
-      showtable               := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name, IsShow := true );
-    }
-    aopcolumns             := selectuniquevalues(  macroPlan, AssemblyOnlinePlanColumn, aopcolumn, aopcolumn.ColumnIndex() > 1 and not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = aopcolumn.ColumnDate() ), aopcolumn.ColumnDate() );
-    table.GenerateColumn( aopcolumns, search.TimeUnit(), search.StartDate(), search.EndDate() );
-    traverse( macroPlan, AssemblyOnlinePlanRow, aoprow, aoprow.Type() = '1' ){
+    //showtable              := selectobject( interface, AssemblyOnlinePlanVersion, version, version.IsShow() );
+    //if( isnull( table ) ){
+    //  showtable               := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name, IsShow := true );
+    //}
+    aopcolumns             := selectuniquevalues(  macroPlan, NewAssemblyOnlinePlanColumn, aopcolumn, not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = aopcolumn.StartDate() ), aopcolumn.StartDate() );
+    table.GenerateColumn( aopcolumns );
+    traverse( macroPlan, NewAssemblyOnlinePlanRow, aoprow, aoprow.Type() = '1' ){
       row                  := table.GetRow( aoprow );
-      info( '---------------------', row.Type() );
-      traverse( aoprow, AssemblyOnlinePlanCell, aopcell, aopcell.AssemblyOnlinePlanColumn().ColumnIndex() > 1  ){
-        column             := selectobject( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = aopcell.AssemblyOnlinePlanColumn().ColumnDate() );
+      info( '------------------------', row.Type() );
+      traverse( aoprow, NewAssemblyOnlinePlanCell, aopcell ){
+        column             := selectobject( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = aopcell.NewAssemblyOnlinePlanColumn().StartDate() );
         cell               := selectobject( row, Cell, cell, cell.Column() = column );
         cell.InventoryWeight( aopcell.InventoryWeight() );
-        cell.ProductionSerialNumber( aopcell.ProductionSerialNumber() );
+    //    cell.ProductionSerialNumber( aopcell.ProductionSerialNumber() );  
         cell.Quantity( aopcell.Quantity() );
-        cell.Shift( aopcell.Shift() );
-        cell.Value( aopcell.Value() );
+    //    cell.Shift( aopcell.Shift() );
+    //    cell.Value( aopcell.Value() );
       }
     }
     //showtable.Generate( search, products );
diff --git a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl
index 8a5e8c8..284443c 100644
--- a/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl
+++ b/_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterfaceForSAPGet.qbl
@@ -10,7 +10,7 @@
   [*
     // 鐢勫叞楦� Jul-22-2024 (created)
     address           := Translations::InterfaceDataset_SAP_Address(); 
-    httpinterface     := HTTPInterface::Create( address,80);
+    httpinterface     := HTTPInterface::Create( address,8080);
     httpinterface.PostMethod( false ); 
     httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
     try{
diff --git a/_Main/BL/Type_InventoryPlanArchiveCell/Attribute_ActualQuantity.qbl b/_Main/BL/Type_InventoryPlanArchiveCell/Attribute_ActualQuantity.qbl
new file mode 100644
index 0000000..bbfc303
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveCell/Attribute_ActualQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ActualQuantity
+{
+  #keys: '3[415136.0.1275901529][415136.0.1275901528][415136.0.1275901530]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveCell/Attribute_PlanQuantity.qbl b/_Main/BL/Type_InventoryPlanArchiveCell/Attribute_PlanQuantity.qbl
new file mode 100644
index 0000000..8bdb8a6
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveCell/Attribute_PlanQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanQuantity
+{
+  #keys: '3[415136.0.1275901522][415136.0.1275901521][415136.0.1275901523]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveCell/_ROOT_Type_InventoryPlanArchiveCell.qbl b/_Main/BL/Type_InventoryPlanArchiveCell/_ROOT_Type_InventoryPlanArchiveCell.qbl
new file mode 100644
index 0000000..742cb0f
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveCell/_ROOT_Type_InventoryPlanArchiveCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventoryPlanArchiveCell
+{
+  #keys: '5[415136.0.1275901384][415136.0.1275901382][0.0.0][415136.0.1275901383][415136.0.1275901385]'
+  BaseType: Object
+  Description: '璁″垝搴撳瓨瀛樻。鍗曞厓鏍�'
+  StructuredName: 'InventoryPlanArchiveCells'
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_EndDate.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_EndDate.qbl
new file mode 100644
index 0000000..eb77522
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_EndDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[415136.0.1275930135][415136.0.1275930134][415136.0.1275930136]'
+  Description: '缁撴潫鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_Name.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..86e1cc9
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.1275930151][415136.0.1275930150][415136.0.1275930152]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_StartDate.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..e109f62
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.1275930125][415136.0.1275930124][415136.0.1275930126]'
+  Description: '寮�濮嬫棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_TimeUnit.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_TimeUnit.qbl
new file mode 100644
index 0000000..4b0f996
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/Attribute_TimeUnit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TimeUnit
+{
+  #keys: '3[415136.0.1275930121][415136.0.1275930120][415136.0.1275930122]'
+  Description: '鏃ユ湡绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/DefaultValue_TimeUnit.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/DefaultValue_TimeUnit.qbl
new file mode 100644
index 0000000..e29979e
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/DefaultValue_TimeUnit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: TimeUnit
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/_ROOT_Type_InventoryPlanArchiveColumn.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/_ROOT_Type_InventoryPlanArchiveColumn.qbl
new file mode 100644
index 0000000..6cd7167
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/_ROOT_Type_InventoryPlanArchiveColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventoryPlanArchiveColumn
+{
+  #keys: '5[415136.0.1275901379][415136.0.1275901377][0.0.0][415136.0.1275901378][415136.0.1275901380]'
+  BaseType: Object
+  Description: '璁″垝搴撳瓨瀛樻。鍒�'
+  StructuredName: 'InventoryPlanArchiveColumns'
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveRow/Attribute_Name.qbl b/_Main/BL/Type_InventoryPlanArchiveRow/Attribute_Name.qbl
new file mode 100644
index 0000000..b730b0e
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveRow/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.1275901545][415136.0.1275901544][415136.0.1275901546]'
+  Description: '浜у搧鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveRow/Attribute_Unit.qbl b/_Main/BL/Type_InventoryPlanArchiveRow/Attribute_Unit.qbl
new file mode 100644
index 0000000..bb40800
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveRow/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.1275930165][415136.0.1275930164][415136.0.1275930166]'
+  Description: '宸ュ巶'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveRow/Method_Initialize.qbl b/_Main/BL/Type_InventoryPlanArchiveRow/Method_Initialize.qbl
new file mode 100644
index 0000000..ca2650c
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveRow/Method_Initialize.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+  InventoryPlanArchiveColumn column
+)
+{
+  Description: '鍒濆鍖栧崟鍏冩牸'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := this.Cell( relnew, PlanQuantity := 0, ActualQuantity := 0 );
+    
+    column.Cell( relinsert, cell );
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveRow/Method_SetQuantity.qbl b/_Main/BL/Type_InventoryPlanArchiveRow/Method_SetQuantity.qbl
new file mode 100644
index 0000000..9896048
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveRow/Method_SetQuantity.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetQuantity (
+  InventoryPlanArchiveColumn column,
+  Real planqty,
+  Real actualaty
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+    cell.PlanQuantity( cell.PlanQuantity() + planqty );
+    cell.ActualQuantity( cell.ActualQuantity() + actualaty );
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveRow/_ROOT_Type_InventoryPlanArchiveRow.qbl b/_Main/BL/Type_InventoryPlanArchiveRow/_ROOT_Type_InventoryPlanArchiveRow.qbl
new file mode 100644
index 0000000..18e1d6b
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveRow/_ROOT_Type_InventoryPlanArchiveRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventoryPlanArchiveRow
+{
+  #keys: '5[415136.0.1275901374][415136.0.1275901372][0.0.0][415136.0.1275901373][415136.0.1275901375]'
+  BaseType: Object
+  Description: '璁″垝搴撳瓨瀛樻。琛�'
+  StructuredName: 'InventoryPlanArchiveRows'
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_ID.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_ID.qbl
new file mode 100644
index 0000000..37fc517
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.1275901479][415136.0.1275901478][415136.0.1275901480]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_IsShow.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_IsShow.qbl
new file mode 100644
index 0000000..7391149
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_IsShow.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+  #keys: '3[415136.0.1275901487][415136.0.1275901486][415136.0.1275901488]'
+  Description: '鏄惁鏄剧ず'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_Name.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_Name.qbl
new file mode 100644
index 0000000..4d05186
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.1275930106][415136.0.1275930105][415136.0.1275930107]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/DefaultValue_IsShow.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/DefaultValue_IsShow.qbl
new file mode 100644
index 0000000..8bd79cf
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/DefaultValue_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: 'true'
+  TargetAttribute: IsShow
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GenerateColumn.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..7a591b4
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GenerateColumn.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateColumn (
+  Dates periods
+)
+{
+  Description: '鐢熸垚鏃ユ湡鍒�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created) 
+    weekstart             := periods.Element( 0 );
+    
+    monthstart            := periods.Element( 0 );
+    traverse( periods, Elements, periodtime ){
+      periodname          := periodtime.Format( "M2/D2/Y" );
+      
+      this.Column( relnew, Name := periodname, StartDate := periodtime, EndDate := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      
+      weekend             := ( weekstart + Duration::Days( 6 ) ).Date();
+      if( ( weekend.Year() <> periodtime.Year() and weekend.Month() > 1 ) or ( abs( weekstart.Week() - periodtime.Week() ) > 1 and weekend.Year() = periodtime.Year() ) ){
+        weekstart         := periodtime;
+      }
+      if( periodtime = weekstart ){
+        weekperiodname    := weekstart.Format( "M2/D2/Y" );
+        this.Column( relnew, Name := weekperiodname, StartDate := weekstart, EndDate := ( weekstart.StartOfNextWeek() - Duration::Days( 1 ) ).Date(), TimeUnit := Translations::MP_GlobalParameters_Week() );
+        
+      }
+      if( ( monthstart.Year() <> periodtime.Year() and abs( monthstart.Month() - periodtime.Month() ) <> 11 ) or ( abs( monthstart.Month() - periodtime.Month() ) > 1 and monthstart.Year() = periodtime.Year() ) ){
+        monthstart        := periodtime;
+      }
+      if( periodtime = monthstart ){
+        monthperiodname   := monthstart.Format( "M2/D2/Y" );
+        enddate           := ( monthstart.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
+        this.Column( relnew, Name := monthperiodname, StartDate := monthstart, EndDate := enddate, TimeUnit := Translations::MP_GlobalParameters_Month() );
+        
+      }
+      weekstart         := periodtime.StartOfNextWeek();
+      monthstart        := periodtime.StartOfNextMonth();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GetColumnByTimeUnit.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GetColumnByTimeUnit.qbl
new file mode 100644
index 0000000..b4886eb
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GetColumnByTimeUnit.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetColumnByTimeUnit (
+  String unit,
+  Date period
+) as InventoryPlanArchiveColumn
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-7-2024 (created)
+    //periodname := period.Format( "M2/D2/Y" );
+    
+    column := selectobject( this, Column, column, column.StartDate() <= period and column.EndDate() >= period and column.TimeUnit() = unit );
+    
+    return column;
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GetRowByUnit.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GetRowByUnit.qbl
new file mode 100644
index 0000000..e9db693
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/Method_GetRowByUnit.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRowByUnit (
+  String product,
+  String unit
+) as InventoryPlanArchiveRow
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Sep-6-2024 (created)
+    row := selectobject( this, Row, row, row.Name() = product and row.Unit() = unit );
+    if( isnull( row ) ){
+      //鍒濆鍖栧崟鍏冩牸 
+      row := this.Row( relnew, Name := product, Unit := unit );
+      traverse( this, Column, column ){
+        row.Initialize( column );
+      }
+    }
+    return row;
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl
new file mode 100644
index 0000000..4c2dabe
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl
@@ -0,0 +1,72 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateData (
+  MacroPlan macroPlan,
+  InterfaceDataset interfaceDataset
+)
+{
+  Description: '鐢熸垚璁″垝搴撳瓨瀛樻。鏁版嵁'
+  TextBody:
+  [*
+    interfaceDataset.InventoryPlanArchiveVersion( relflush );
+    info( '-------------------------Start---------------------');
+    allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit();
+    name                   := InventoryPlanArchiveVersion::GetDefaultName();
+    interfaceDataset.InventoryPlanArchiveVersionSearch( relnew, Product := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
+    table                  := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, not version.IsShow() );
+    if( isnull( table ) ){
+      table                := interfaceDataset.InventoryPlanArchiveVersion( relnew, ID := name, Name := name );
+    }
+    //showtable              := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, version.IsShow() );
+    //if( isnull( table ) ){ 
+    //  showtable               := interfaceDataset.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name, IsShow := true );
+    //}
+    periods                := selectuniquevalues(  macroPlan, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day()
+                                                   and not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = period.StartDate() ), period.StartDate() );
+    table.GenerateColumn( periods );
+    actinventorytree       := NamedValueTree::Create();
+    inventoryqrys          := construct( Reals );
+    inventoryindex         := 0;
+    traverse( interfaceDataset,InterfaceLoginfo.MachineStockData, actinventory ){
+      inventoryqrys.Add( actinventory.Total() );
+      actinventoryKey      := actinventory.MaterialNo() + actinventory.DDay().AsQUILL();
+      actinventoryhandle   := actinventorytree.GetHandle( actinventoryKey );
+      actinventorytree.Root().AddChild( actinventoryhandle,inventoryindex ); 
+      inventoryindex       := inventoryindex + 1;
+    }
+    traverse( interfaceDataset,InterfaceLoginfo.FinishedEngineInventory,actinventory ){
+      product               := selectobject( macroPlan, Product_MP, product, product.Notes() = actinventory.FourCode() );
+      if( not isnull( product ) ){
+        inventoryqrys.Add( actinventory.Total() );
+        actinventoryKey     := actinventory.FourCode() + actinventory.DDay().AsQUILL();
+        actinventoryhandle  := actinventorytree.GetHandle( actinventoryKey );
+        actinventorytree.Root().AddChild( actinventoryhandle,inventoryindex ); 
+        inventoryindex      := inventoryindex + 1;
+      }
+    }
+    traverse ( macroPlan, Product_MP.ProductInStockingPoint_MP, pispmp, not pispmp.IsSystem() and pispmp.IsLeaf() ) {
+      unit                 := ifexpr( pispmp.StockingPointID().Regex( "澶ц繛" ) or pispmp.StockingPointID().Regex( "DL" ), FinancialProductionReport::GetDefaultDLUnit(), FinancialProductionReport::GetDefaultCCUnit() );
+      inventoryrow         := table.GetRowByUnit( pispmp.ProductID(), unit );
+      traverse ( pispmp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, not pispippl.IsPeriodFrozen() ) {
+        startdate          := pispippl.Start().Date();
+        daycolumn          := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), startdate );
+        weekcolumn         := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), startdate );
+        monthcolumn        := table.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), startdate );
+        actinventoryKey    := pispmp.ProductID() + startdate.AsQUILL();
+        actinventoryhandle := actinventorytree.GetHandle( actinventoryKey );
+        actinventoryindex  := guard( actinventorytree.Root().Child( actinventoryhandle ),null( NamedValue ));
+        
+        actinventoryqty    := 0.0;
+        if( not isnull( actinventoryindex )){
+          actinventoryqty  := inventoryqrys.Element( actinventoryindex.GetValueAsNumber() );
+        }
+        inventoryrow.SetQuantity( daycolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
+        inventoryrow.SetQuantity( weekcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
+        inventoryrow.SetQuantity( monthcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
+    
+      }
+    }
+    
+    info( '-------------------------End---------------------');
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..c0971f3
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GetDefaultName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultName () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return 'Inventory plan archive';
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/_ROOT_Type_InventoryPlanArchiveVersion.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/_ROOT_Type_InventoryPlanArchiveVersion.qbl
new file mode 100644
index 0000000..aa7a9f0
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/_ROOT_Type_InventoryPlanArchiveVersion.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventoryPlanArchiveVersion
+{
+  #keys: '5[415136.0.1275901356][415136.0.1275901354][0.0.0][415136.0.1275901355][415136.0.1275901357]'
+  BaseType: Object
+  Description: '璁″垝搴撳瓨瀛樻。'
+  StructuredName: 'InventoryPlanArchiveVersions'
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_EndDate.qbl b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_EndDate.qbl
new file mode 100644
index 0000000..44a6a94
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_EndDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[415136.0.1275930091][415136.0.1275930090][415136.0.1275930092]'
+  Description: '缁撴潫鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Product.qbl b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Product.qbl
new file mode 100644
index 0000000..8d2d7a9
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Product.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Product
+{
+  #keys: '3[415136.0.1275930083][415136.0.1275930082][415136.0.1275930084]'
+  Description: '浜у搧'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_StartDate.qbl b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_StartDate.qbl
new file mode 100644
index 0000000..911b29c
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.1275901469][415136.0.1275901468][415136.0.1275901470]'
+  Description: '寮�濮嬫椂闂�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_TimeUnit.qbl b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_TimeUnit.qbl
new file mode 100644
index 0000000..b41ce64
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_TimeUnit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TimeUnit
+{
+  #keys: '3[415136.0.1275901459][415136.0.1275901458][415136.0.1275901460]'
+  Description: '鏃ユ湡绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Unit.qbl b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Unit.qbl
new file mode 100644
index 0000000..4cc4e18
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.1275901449][415136.0.1275901448][415136.0.1275901450]'
+  Description: '宸ュ巶'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersionSearch/_ROOT_Type_InventoryPlanArchiveVersionSearch.qbl b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/_ROOT_Type_InventoryPlanArchiveVersionSearch.qbl
new file mode 100644
index 0000000..9fa4088
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveVersionSearch/_ROOT_Type_InventoryPlanArchiveVersionSearch.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventoryPlanArchiveVersionSearch
+{
+  #keys: '5[415136.0.1275930066][415136.0.1275930064][0.0.0][415136.0.1275930065][415136.0.1275930067]'
+  BaseType: Object
+  Description: '璁″垝搴撳瓨瀛樻。鏌ヨ鏉′欢'
+  StructuredName: 'InventoryPlanArchiveVersionSearchs'
+}
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GenerateColumn.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GenerateColumn.qbl
index 1a0e80f..5e80a3f 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GenerateColumn.qbl
@@ -1,65 +1,40 @@
 Quintiq file version 2.0
 #parent: #root
 Method GenerateColumn (
-  Dates periods,
-  String timeunit,
-  Date starttime,
-  Date endtime
+  Dates periods
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created) 
-    mindate               := min( periods, Elements, period, period );
-    maxdate               := max( periods, Elements, period, period );
-    //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
-    if( starttime < mindate and endtime > maxdate ){
-      if( starttime < mindate ){
-        starttime             := mindate;
+    weekstart             := periods.Element( 0 );
+    
+    monthstart            := periods.Element( 0 );
+    traverse( periods, Elements, periodtime ){
+      periodname          := periodtime.Format( "M2/D2/Y" );
+      
+      this.Column( relnew, ColumnName := periodname, StartDate := periodtime, EndDate := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      
+      weekend             := ( weekstart + Duration::Days( 6 ) ).Date();
+      if( ( weekend.Year() <> periodtime.Year() and weekend.Month() > 1 ) or ( abs( weekstart.Week() - periodtime.Week() ) > 1 and weekend.Year() = periodtime.Year() ) ){
+        weekstart         := periodtime;
       }
-      if( endtime > maxdate ){
-        endtime               := maxdate;
+      if( periodtime = weekstart ){
+        weekperiodname    := weekstart.Format( "M2/D2/Y" );
+        this.Column( relnew, ColumnName := weekperiodname, StartDate := weekstart, EndDate := ( weekstart.StartOfNextWeek() - Duration::Days( 1 ) ).Date(), TimeUnit := Translations::MP_GlobalParameters_Week() );
+        
       }
-      if( timeunit = Translations::MP_GlobalParameters_Day() ){
-        for( start := starttime; start <= endtime; start := start.DateTime().StartOfNextDay().Date() ){
-          periodname          := start.Format( "M2/D2/Y" );
-          if( not exists( this, Column, column, column.StartDate() = start ) ){
-            this.Column( relnew, ColumnName := periodname, StartDate := start, EndDate := start, TimeUnit := Translations::MP_GlobalParameters_Day() );
-          }
-        }
-      }else if( timeunit = Translations::MP_GlobalParameters_Week() ){
-    //    weekstartstr          := ' KW';
-        for( start := starttime; start <= endtime; start := start.StartOfNextWeek() ){
-          weekend             := ( start.StartOfNextWeek() - Duration::Days( 1 ) ).Date();//.Concat( weekstartstr.Concat( weekend.Week().Format( 'N(LPad0(2))' ) ) )
-          
-          this.Column( relnew, ColumnName := weekend.Format( "M2/D2/Y" ), StartDate := start, EndDate := weekend, TimeUnit := Translations::MP_GlobalParameters_Week() );
-        }
-      }else if( timeunit = Translations::MP_GlobalParameters_Month() ){
-        for( start := starttime; start <= endtime; start := start.StartOfNextMonth() ){
-          monthend            := ( start.StartOfNextMonth() - Duration::Days( 1 ) ).Date();//.Concat( ' ' ).Concat( monthend.Format( "MM", us_locale ).Concat( '/').Concat( [String]monthend.Month() ).Concat( '鏈�' ) )
-    //      us_locale := Locale::Construct( 'en_us' );
-          this.Column( relnew, ColumnName := monthend.Format( "M2/D2/Y" ), StartDate := start, EndDate := monthend, TimeUnit := Translations::MP_GlobalParameters_Month() );
-        }
+      if( ( monthstart.Year() <> periodtime.Year() and abs( monthstart.Month() - periodtime.Month() ) <> 11 ) or ( abs( monthstart.Month() - periodtime.Month() ) > 1 and monthstart.Year() = periodtime.Year() ) ){
+        monthstart        := periodtime;
       }
+      if( periodtime = monthstart ){
+        monthperiodname   := monthstart.Format( "M2/D2/Y" );
+        enddate           := ( monthstart.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
+        this.Column( relnew, ColumnName := monthperiodname, StartDate := monthstart, EndDate := enddate, TimeUnit := Translations::MP_GlobalParameters_Month() );
+        
+      }
+      weekstart         := periodtime.StartOfNextWeek();
+      monthstart        := periodtime.StartOfNextMonth();
     }
-    //weekstart             := periods.Element( 0 );
-    //monthstart            := periods.Element( 0 );
-    //traverse( periods, Elements, periodtime ){
-    //  periodname          := periodtime.Format( "M2/D2/Y" );
-    //  
-    //  this.Column( relnew, Name := periodname, StartDate := periodtime, EndDate := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
-    //  
-    //  if( periodtime = weekstart ){
-    //    weekperiodname    := weekstart.Format( "M2/D2/Y" );
-    //    this.Column( relnew, Name := weekperiodname, StartDate := weekstart, EndDate := ( weekstart + Duration::Days( 6 ) ).Date(), TimeUnit := Translations::MP_GlobalParameters_Week() );
-    //    weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
-    //  }
-    //  if( periodtime = monthstart ){
-    //    monthperiodname   := monthstart.Format( "M2/D2/Y" );
-    //    enddate           := ( monthstart.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
-    //    this.Column( relnew, Name := monthperiodname, StartDate := monthstart, EndDate := enddate, TimeUnit := Translations::MP_GlobalParameters_Month() );
-    //    monthstart        := monthstart.StartOfNextMonth();
-    //  }
-    //}
   *]
 }
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
index 63b0a65..4424042 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
@@ -11,17 +11,17 @@
     //鏍规嵁褰撳墠鐗堟湰鐨勪笅绾胯鍒�
     allunit                := OfflinePlanArchiveVersion::GetDefaultAllUnit();
     name                   := OfflinePlanArchiveVersion::GetDefaultName();
-    search                 := interface.OfflinePlanArchiveSearch( relnew, Product := allunit, ProductionLine := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
+    interface.OfflinePlanArchiveSearch( relnew, Product := allunit, ProductionLine := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
     table                  := selectobject( interface, OfflinePlanArchiveVersion, version, not version.IsShow() );
     if( isnull( table ) ){
       table                := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name );
     }
-    showtable              := selectobject( interface, OfflinePlanArchiveVersion, version, version.IsShow() );
-    if( isnull( table ) ){
-      showtable               := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
-    }
+    //showtable              := selectobject( interface, OfflinePlanArchiveVersion, version, version.IsShow() );
+    //if( isnull( table ) ){
+    //  showtable               := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
+    //}
     nopcolumns             := selectuniquevalues(  macroPlan, NewOfflinePlanTable.NewOfflinePlanColumn, nopcolumn, not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = nopcolumn.StartDate() ), nopcolumn.StartDate() );
-    table.GenerateColumn( nopcolumns, search.TimeUnit(), search.StartDate(), search.EndDate() );
+    table.GenerateColumn( nopcolumns );
     noptable               := maxobject( macroPlan, NewOfflinePlanTable, noptable, noptable.SaveDateTime() );
     actproductiondatas     := selectset( archive,ActualDailyProductionData,data,true );
     actproductiontree      := NamedValueTree::Create();
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersionRow/Attribute_Name.qbl b/_Main/BL/Type_OfflinePlanArchiveVersionRow/Attribute_Name.qbl
new file mode 100644
index 0000000..89ce709
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanArchiveVersionRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.1275901603][415136.0.1275901602][415136.0.1275901604]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersionRow/DefaultValue_Name.qbl b/_Main/BL/Type_OfflinePlanArchiveVersionRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanArchiveVersionRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
index 5298ee8..e9f7f81 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
@@ -34,7 +34,7 @@
       Properties:
       [
         Image: 'PAPER_JET'
-        Label: 'Offline plan archive'
+        Label: '涓嬬嚎璁″垝瀛樻。'
         Taborder: 2
       ]
     }
@@ -49,6 +49,17 @@
         Taborder: 3
       ]
     }
+    Component ButtonInventoryPlanArchiveReport
+    {
+      #keys: '[415136.0.1277502282]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'WAREHOUSE'
+        Label: '璁″垝搴撳瓨瀛樻。'
+        Taborder: 4
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonInventoryPlanArchive.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonInventoryPlanArchive.def
new file mode 100644
index 0000000..9d01171
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonInventoryPlanArchive.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupArchiveReport/ButtonInventoryPlanArchiveReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonInventoryPlanArchiveReport_OnClick
+{
+  #keys: '[415136.0.1277502334]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Inventory_plan_archive_report", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable\043384.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable\043384.def"
index 02e669b..6e51dc0 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable\043384.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable\043384.def"
@@ -49,7 +49,7 @@
             DataType: 'InterfaceDataset'
             Description: "( search.Generation() = '<All>' or object.Product_MP().Generation() = search.Generation() ) and ( search.MqbMlb() = '<All>' or object.Product_MP().MQBMLB() = search.MqbMlb() ) and ( search.Power() = '<All>' or object.Product_MP().Power() = search.Power() )"
             FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
-            FixedFilter: "( search.Product() = '<All>' or object.ProductID() = search.Product() ) and ( search.ProductionLine() = '<All>' or object.ProductionLine() = search.ProductionLine() )"
+            FixedFilter: "( search.Product() = '<All>' or object.ProductID() = search.Product() ) and ( search.ProductionLine() = '<All>' or object.ProductionLine() = search.ProductionLine() ) and ( search.Unit() = '<All>' or object.Unit() = search.Unit() )"
             Source: 'InterfaceDataset'
             Taborder: 0
             Transformation: 'AssemblyOnlinePlanVersion.Row'
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def"
index 9268559..5d41390 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def"
@@ -14,6 +14,7 @@
   ]
   Properties:
   [
+    FixedSize: true
     Orientation: 'horizontal'
     Taborder: 1
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def
index f6b9390..f23ea10 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def
@@ -49,7 +49,7 @@
             DataType: 'InterfaceDataset'
             Description: "( search.Generation() = '<All>' or object.Product_MP().Generation() = search.Generation() ) and ( search.MqbMlb() = '<All>' or object.Product_MP().MQBMLB() = search.MqbMlb() ) and ( search.Power() = '<All>' or object.Product_MP().Power() = search.Power() )"
             FilterArguments: 'search:QMacroPlanner::FormCustomerDemandPPAIDS.dhSearch'
-            FixedFilter: "search.Product() = '<All>' or object.Name() = search.Product()"
+            FixedFilter: "search.Product() = '<All>' or object.Name() = search.Product() and ( search.Unit() = '<All>' or object.Factory() = search.Unit() )"
             Source: 'InterfaceDataset'
             Taborder: 0
             Transformation: 'CustomerDemandIDS.Row'
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def"
new file mode 100644
index 0000000..f9b1aa3
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def"
@@ -0,0 +1,105 @@
+Quintiq file version 2.0
+Component MatrixEditorTable id:MatrixEditorTable_791
+{
+  #keys: '[415136.0.1277502045]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.1277502046]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCells
+        {
+          #keys: '[415136.0.1277502047]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: 'object.Column().TimeUnit() = search.TimeUnit() and object.Column().StartDate() >= search.StartDate() and object.Column().StartDate() <= search.EndDate()'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'InventoryPlanArchiveVersion.Row.Cell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'PlanQuantity;ActualQuantity'
+        Column: 'Column'
+        Row: 'Row'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.1277502048]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRows
+        {
+          #keys: '[415136.0.1277502049]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            Description: "( search.Generation() = '<All>' or object.Product_MP().Generation() = search.Generation() ) and ( search.MqbMlb() = '<All>' or object.Product_MP().MQBMLB() = search.MqbMlb() ) and ( search.Power() = '<All>' or object.Product_MP().Power() = search.Power() )"
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: "( search.Product() = '<All>' or object.Name() = search.Product() ) and ( search.Unit() = '<All>' or object.Unit() = search.Unit() )"
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'InventoryPlanArchiveVersion.Row'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Name'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.1277502050]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumns
+        {
+          #keys: '[415136.0.1277502051]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: 'object.TimeUnit() = search.TimeUnit() and  ( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() )  and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'InventoryPlanArchiveVersion.Column'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable_1
+    #child: matrixeditorContextMenuTable_1
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def"
new file mode 100644
index 0000000..3996feb
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component PanelHeader id:PanelHeader_503
+{
+  #keys: '[415136.0.1277502010]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelUnit
+    #child: PanelOperation_414
+    #child: PanelTimeUnit_805
+    #child: PanelPeriod
+    #child: PanelProduct_133
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelOperation\043414.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelOperation\043414.def"
new file mode 100644
index 0000000..2b58ea0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelOperation\043414.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelOperation id:PanelOperation_414
+{
+  #keys: '[415136.0.1277502018]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.1277502019]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+    Visible: false
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelPeriod.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelPeriod.def
new file mode 100644
index 0000000..5e11bd8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelPeriod.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelPeriod
+{
+  #keys: '[415136.0.1277502013]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DateSelectorStart
+    {
+      #keys: '[415136.0.1277502014]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start date'
+        Taborder: 0
+      ]
+    }
+    Component DateSelectorEnd
+    {
+      #keys: '[415136.0.1277502015]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 9999-12-31
+        Label: 'End date'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelProduct\043133.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelProduct\043133.def"
new file mode 100644
index 0000000..213e535
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelProduct\043133.def"
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component PanelProduct id:PanelProduct_133
+{
+  #keys: '[415136.0.1277502011]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslProduct
+    {
+      #keys: '[415136.0.1277502012]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        FixedSize: false
+        Label: 'Product'
+        Sorting: 'none'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def"
new file mode 100644
index 0000000..e265e3f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable id:PanelTable_881
+{
+  #keys: '[415136.0.1277502044]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable_791
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTimeUnit\043805.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTimeUnit\043805.def"
new file mode 100644
index 0000000..2e212a8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTimeUnit\043805.def"
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component PanelTimeUnit id:PanelTimeUnit_805
+{
+  #keys: '[415136.0.1277502016]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component RadioButtonGroupUseForTimeUnit
+    {
+      #keys: '[415136.0.1277502017]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        ButtonLabels: 'Day;Week;Month'
+        ButtonValues: 'Day;Week;Month'
+        Orientation: 'horizontal'
+        Taborder: 0
+        Title: 'Periods'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelUnit.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelUnit.def
new file mode 100644
index 0000000..df6d463
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelUnit.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelUnit
+{
+  #keys: '[415136.0.1277502022]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslUnit
+    {
+      #keys: '[415136.0.1277502023]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Unit'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixEditorActionBarPageTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixEditorActionBarPageTable\0431.def"
new file mode 100644
index 0000000..4f11591
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixEditorActionBarPageTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable id:matrixEditorActionBarPageTable_1
+{
+  #keys: '[415136.0.1277502052]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixeditorContextMenuTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixeditorContextMenuTable\0431.def"
new file mode 100644
index 0000000..310365e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_matrixeditorContextMenuTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable id:matrixeditorContextMenuTable_1
+{
+  #keys: '[415136.0.1277502053]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
new file mode 100644
index 0000000..6d722a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod/DateSelectorEnd
+Response OnChanged () id:Response_PanelPeriod_DateSelectorEnd_OnChanged
+{
+  #keys: '[415136.0.1277502006]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() < DateSelectorStart.Date() ){
+        this.HintError( 'The end date cannot be less than the start date!' );
+      }else{
+        if( dhSearch.Data().EndDate() <> this.Date() ){
+          dhSearch.Data().EndDate( this.Date() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorStart_OnChanged.def
new file mode 100644
index 0000000..2c1808f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod/DateSelectorStart
+Response OnChanged () id:Response_PanelPeriod_DateSelectorStart_OnChanged
+{
+  #keys: '[415136.0.1277502007]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() > DateSelectorEnd.Date() ){
+        this.HintError( 'The start date cannot be later than the end date!' );
+      }else{
+        if( dhSearch.Data().StartDate() <> this.Date() ){
+          dhSearch.Data().StartDate( this.Date() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnCreated.def
new file mode 100644
index 0000000..46a0ff9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelProduct_133/ddslProduct
+Response OnCreated () id:Response_PanelProduct_133_ddslProduct_OnCreated
+{
+  #keys: '[415136.0.1277502009]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( InterfaceDataset, AssemblyOnlinePlanVersion.Row, row, true, row.ProductID() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnSelectionChanged.def
new file mode 100644
index 0000000..dd4d1b6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelProduct_133_ddslProduct_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelProduct_133/ddslProduct
+Response OnSelectionChanged () id:Response_PanelProduct_133_ddslProduct_OnSelectionChanged
+{
+  #keys: '[415136.0.1277502008]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Product() <> selection ){
+        dhSearch.Data().Product( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnChanged.def
new file mode 100644
index 0000000..ca64cd0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelTimeUnit_805/RadioButtonGroupUseForTimeUnit
+Response OnChanged () id:Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnChanged
+{
+  #keys: '[415136.0.1277502005]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀� 
+      if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
+        dhSearch.Data().TimeUnit( this.BoundValue() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnCreated.def
new file mode 100644
index 0000000..9e663e5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelTimeUnit_805/RadioButtonGroupUseForTimeUnit
+Response OnCreated () id:Response_PanelTimeUnit_805_RadioButtonGroupUseForTimeUnit_OnCreated
+{
+  #keys: '[415136.0.1277502004]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.ButtonValues( Translations::MP_GlobalParameters_Day() + ';' + Translations::MP_GlobalParameters_Week() + ';' + Translations::MP_GlobalParameters_Month() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnCreated.def
new file mode 100644
index 0000000..d3b45c5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnCreated.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelUnit/ddslUnit
+Response OnCreated () id:Response_PanelUnit_ddslUnit_OnCreated
+{
+  #keys: '[415136.0.1277502001]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      valueString := "All";
+      
+      this.Strings( valueString.Concat( ";" ).Concat( FinancialProductionReport::GetDefaultCCUnit().Concat( ";" ) ).Concat( FinancialProductionReport::GetDefaultDLUnit() ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
new file mode 100644
index 0000000..d90934c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelUnit/ddslUnit
+Response OnSelectionChanged () id:Response_PanelUnit_ddslUnit_OnSelectionChanged
+{
+  #keys: '[415136.0.1277502000]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Unit() <> selection ){
+        dhSearch.Data().Unit( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def
new file mode 100644
index 0000000..0df74a2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormInventoryPlanArchive
+{
+  #keys: '[415136.0.1277501873]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component dhSearch
+    {
+      #keys: '[415136.0.1277501926]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'InventoryPlanArchiveVersionSearch'
+      Children:
+      [
+        Component deSearch id:deSearch_426
+        {
+          #keys: '[415136.0.1277501927]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'InventoryPlanArchiveVersionSearch'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: PanelHeader_503
+    #child: PanelTable_881
+  ]
+  Properties:
+  [
+    Image: 'WAREHOUSE'
+    Title: '璁″垝搴撳瓨瀛樻。'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
index 7849640..d73afda 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
@@ -49,7 +49,7 @@
             DataType: 'InterfaceDataset'
             Description: "( search.Generation() = '<All>' or object.Product_MP().Generation() = search.Generation() ) and ( search.MqbMlb() = '<All>' or object.Product_MP().MQBMLB() = search.MqbMlb() ) and ( search.Power() = '<All>' or object.Product_MP().Power() = search.Power() )"
             FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
-            FixedFilter: "( search.Product() = '<All>' or object.ProductID() = search.Product() ) and ( search.ProductionLine() = '<All>' or object.ProductionLine() = search.ProductionLine() )"
+            FixedFilter: "( search.Product() = '<All>' or object.ProductID() = search.Product() ) and ( search.ProductionLine() = '<All>' or object.ProductionLine() = search.ProductionLine() ) and ( search.Unit() = '<All>' or object.Unit() = search.Unit() )"
             Source: 'InterfaceDataset'
             Taborder: 0
             Transformation: 'OfflinePlanArchiveVersion.Row'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
index c507369..9799f95 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
@@ -14,6 +14,7 @@
   ]
   Properties:
   [
+    FixedSize: true
     Orientation: 'horizontal'
     Taborder: 1
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
index df873ef..49b088f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
@@ -38,6 +38,6 @@
   Properties:
   [
     Image: 'PAPER_JET'
-    Title: 'Offline plan archive'
+    Title: '涓嬬嚎璁″垝瀛樻。'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Inventory_plan_archive_report.vw b/_Main/UI/MacroPlannerWebApp/Views/Inventory_plan_archive_report.vw
new file mode 100644
index 0000000..a8856d6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Inventory_plan_archive_report.vw
@@ -0,0 +1,77 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormInventoryPlanArchive
+      {
+        title: 'QMacroPlanner::FormInventoryPlanArchive'
+        shown: true
+        componentID: 'QMacroPlanner::FormInventoryPlanArchive'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormInventoryPlanArchive_PanelHeader
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_PanelUnit
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_PanelProduct
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_PanelPeriod
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_PanelTimeUnit
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_PanelOperation
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormInventoryPlanArchive_MatrixEditorTable
+          {
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            gridColor: '#c4c4c4'
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 31
+    image: 'WAREHOUSE'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Inventory_plan_archive_report'
+  name: 'Inventory plan archive report'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3