From d47b2a6610c16b6db7fa991f6064d990085b65f3 Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期五, 22 十一月 2024 17:14:37 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/BL/Type_InterfaceDataset/Method_GenerateArchiveData.qbl                                                                                  |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelHeader.def                                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonCustomerDemandPP#603.def |    2 
 _Main/BL/Type_OfflinePlanArchiveVersionColumn/Method_Filter.qbl                                                                                |   18 
 _Main/BL/Type_CustomerDemandArchive/Attribute_Quantity.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPMS64_OnClick.def       |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def                                                 |   25 
 _Main/BL/Type_CustomerDemandArchive/_ROOT_Type_CustomerDemandArchive.qbl                                                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader#952.def                                              |    2 
 _Main/BL/Type_CustomerDemandArchive/Attribute_SalesSegment.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pContent.def                                                                   |   14 
 _Main/BL/Type_AssemblyOnlinePlanColumn0/Method_Filter.qbl                                                                                      |   18 
 _Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl                                                                           |   18 
 _Main/BL/Type_CustomerDemandArchive/Attribute_Product.qbl                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/_ROOT_Component_FormCustomerDemandArchive.def                                  |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelOperation_653_ButtonSearch_OnClick.def                       |   10 
 _Main/BL/Type_CustomerDemandArchive/Function_CalcEndDate.qbl                                                                                   |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable#384.def                                        |   23 
 _Main/BL/Type_CustomerDemandArchive/Attribute_StartDate.qbl                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader#503.def                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def                                                   |   24 
 _Main/BL/Type_InventoryPlanArchiveColumn/Method_Filter.qbl                                                                                     |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelOperation_603_ButtonSearch_OnClick.def                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def                                    |   10 
 _Main/BL/Type_CustomerDemandArchive/Attribute_Factory.qbl                                                                                      |    7 
 _Main/BL/Type_CustomerDemandArchive/Attribute_Origin.qbl                                                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelTable.def                                                        |    2 
 _Main/BL/Type_CustomerDemandIDS/StaticMethod_GenerateData.qbl                                                                                  |   34 
 _Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl                                                                        |   26 
 _Main/BL/Type_CustomerDemandArchive/Attribute_FactoryName.qbl                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def                                    |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listContextMenuTRCForecast#1.def                                               |   10 
 _Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_bTRCForecastArchive_OnClic.def |   16 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPublishSAP.def                                              |   33 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable#881.def                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Views/Customer_demand_archive_view.vw                                                                              |  119 +++++
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPublish.def                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPPIR_OnClick.def        |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Response_pHeader_bArchive_OnClick.def                                                    |   22 +
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable#273.def                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelOperation_ButtonSearch_OnClick.def                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelSAP.def                                                     |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listContextMenuCustomerDemandArchive.def                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_ListTRCForecast#715.def                                                        |   41 +
 _Main/BL/Type_CustomerDemandIDSColumn/Method_Filter.qbl                                                                                        |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def                                                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/_ROOT_Component_FormAssemblyOnlinePlanVersion.def                          |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_ListCustomerDemandArchive.def                                        |   42 +
 _Main/BL/Type_CustomerDemandArchive/StaticMethod_GenerateData.qbl                                                                              |   69 +++
 _Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl                                                                                |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/_ROOT_Component_FormTRCForecast.def                                                      |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listActionBarPageCustomerDemandArchive.def                           |   10 
 _Main/BL/Type_CustomerDemandArchive/DefaultValue_Product.qbl                                                                                   |    6 
 _Main/UI/MacroPlannerWebApp/Views/TRCForecastArchive.vw                                                                                        |  226 ++++++++++
 _Main/BL/Relations/Relation_CustomerDemandArchive_InterfaceDataset_InterfaceDataset_CustomerDem.qbl                                            |   23 +
 _Main/BL/Type_CustomerDemandArchive/Attribute_EndDate.qbl                                                                                      |    7 
 /dev/null                                                                                                                                      |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def                                        |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pHeader.def                                                                    |   28 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable#791.def                                             |   23 
 _Main/BL/Type_CustomerDemandPPAIDS/StaticMethod_GenerateDataNew.qbl                                                                            |   46 ++
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelOperation_ButtonSearch_OnClick.def                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def                                        |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listActionBarPageTRCForecast#1.def                                             |   10 
 _Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl                                                                           |   18 
 _Main/BL/Type_CustomerDemandArchive/Attribute_StockingPointID.qbl                                                                              |    7 
 68 files changed, 1,125 insertions(+), 181 deletions(-)

diff --git a/_Main/BL/Relations/Relation_CustomerDemandArchive_InterfaceDataset_InterfaceDataset_CustomerDem.qbl b/_Main/BL/Relations/Relation_CustomerDemandArchive_InterfaceDataset_InterfaceDataset_CustomerDem.qbl
new file mode 100644
index 0000000..1cdd559
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CustomerDemandArchive_InterfaceDataset_InterfaceDataset_CustomerDem.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CustomerDemandArchive_InterfaceDataset_InterfaceDataset_CustomerDemandArchive
+{
+  #keys: '1[415136.0.1330369439]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InterfaceDataset
+  {
+    #keys: '3[415136.0.1330369441][415136.0.1330369440][415136.0.1330369442]'
+    Cardinality: '0to1'
+    ObjectDefinition: CustomerDemandArchive
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CustomerDemandArchive
+  {
+    #keys: '3[415136.0.1330369444][415136.0.1330369443][415136.0.1330369445]'
+    Cardinality: '1toN'
+    ObjectDefinition: InterfaceDataset
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_AssemblyOnlinePlanColumn0/Method_Filter.qbl b/_Main/BL/Type_AssemblyOnlinePlanColumn0/Method_Filter.qbl
new file mode 100644
index 0000000..97f29bd
--- /dev/null
+++ b/_Main/BL/Type_AssemblyOnlinePlanColumn0/Method_Filter.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  AssemblyOnlinePlanVersionSearch search
+) declarative remote as Boolean
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Nov-22-2024 (created)
+    flag       := false;
+    
+    if( ( search.StartDate().IsMinInfinity() or this.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or this.EndDate() <= search.EndDate() ) ){
+      flag     := true;
+    }
+    
+    return flag;
+  *]
+}
diff --git a/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl b/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl
index 4f1ee1c..edb6767 100644
--- a/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_RefreshData.qbl
@@ -10,16 +10,16 @@
     //鏍规嵁褰撳墠鐗堟湰鐨勮閰嶄笂绾胯鍒�
     interface.AssemblyOnlinePlanVersion( relflush );
     allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit();
-    name                   := AssemblyOnlinePlanVersion::GetDefaultName();//search                 := 
-    search                 := interface.AssemblyOnlinePlanVersionSearch( relnew, Product := allunit, ProductionLine := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
+    name                   := AssemblyOnlinePlanVersion::GetDefaultName();//search                 :=
+    interface.AssemblyOnlinePlanVersionSearch( relnew, Product := allunit, ProductionLine := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
     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( showtable ) ){
-      showtable               := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name, IsShow := true );
-    }
+    //showtable              := selectobject( interface, AssemblyOnlinePlanVersion, version, version.IsShow() );
+    //if( isnull( showtable ) ){
+    //  showtable               := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name, IsShow := true );
+    //}
     aopcolumns             := selectuniquevalues(  macroPlan, NewAssemblyOnlinePlanColumn, aopcolumn, not exists( table, Column, column, column.StartDate() = aopcolumn.StartDate() ), aopcolumn.StartDate() );//, column.TimeUnit() = Translations::MP_GlobalParameters_Day()
     if( aopcolumns.Size() > 0 ){
       table.GenerateColumn( aopcolumns, false );
@@ -34,8 +34,8 @@
         cell.Quantity( qty );
       }
     }
-    productids             := selectuniquevalues( table, Row, row, row.Name() );
-    productlines           := selectuniquevalues( table, Row, row, row.ProductionLine() );
-    showtable.Generate( search, productids, productlines );
+    //productids             := selectuniquevalues( table, Row, row, row.Name() );
+    //productlines           := selectuniquevalues( table, Row, row, row.ProductionLine() );
+    //showtable.Generate( search, productids, productlines );
   *]
 }
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_EndDate.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_EndDate.qbl
new file mode 100644
index 0000000..72253b8
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[415136.0.1330369482][415136.0.1330369481][415136.0.1330369483]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_Factory.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_Factory.qbl
new file mode 100644
index 0000000..5a8bb37
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_Factory.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Factory
+{
+  #keys: '3[415136.0.1330369522][415136.0.1330369521][415136.0.1330369523]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_FactoryName.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_FactoryName.qbl
new file mode 100644
index 0000000..d4d0259
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_FactoryName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FactoryName
+{
+  #keys: '3[415136.0.1330369548][415136.0.1330369547][415136.0.1330369549]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_Origin.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_Origin.qbl
new file mode 100644
index 0000000..53f91a7
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_Origin.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Origin
+{
+  #keys: '3[415136.0.1330369462][415136.0.1330369461][415136.0.1330369463]'
+  Description: '鏉ユ簮'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_Product.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_Product.qbl
new file mode 100644
index 0000000..c149334
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_Product.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Product
+{
+  #keys: '3[415136.0.1330369418][415136.0.1330369417][415136.0.1330369419]'
+  Description: '鐗╂枡鍙�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_Quantity.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_Quantity.qbl
new file mode 100644
index 0000000..34064e5
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[415136.0.1330369492][415136.0.1330369491][415136.0.1330369493]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_SalesSegment.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_SalesSegment.qbl
new file mode 100644
index 0000000..7e8003a
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_SalesSegment.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegment
+{
+  #keys: '3[415136.0.1330369512][415136.0.1330369511][415136.0.1330369513]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_StartDate.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_StartDate.qbl
new file mode 100644
index 0000000..cb857aa
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.1330369472][415136.0.1330369471][415136.0.1330369473]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Attribute_StockingPointID.qbl b/_Main/BL/Type_CustomerDemandArchive/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..ea50ac2
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[415136.0.1330369502][415136.0.1330369501][415136.0.1330369503]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/DefaultValue_Product.qbl b/_Main/BL/Type_CustomerDemandArchive/DefaultValue_Product.qbl
new file mode 100644
index 0000000..6e10c8e
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/DefaultValue_Product.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Product
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/Function_CalcEndDate.qbl b/_Main/BL/Type_CustomerDemandArchive/Function_CalcEndDate.qbl
new file mode 100644
index 0000000..b00d3c5
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/Function_CalcEndDate.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcEndDate
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Nov-22-2024 (created)
+    
+    value := ( this.StartDate() + Duration::Days( 1 ) ).Date();
+    
+    this.EndDate( value );
+  *]
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/StaticMethod_GenerateData.qbl b/_Main/BL/Type_CustomerDemandArchive/StaticMethod_GenerateData.qbl
new file mode 100644
index 0000000..2812c04
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/StaticMethod_GenerateData.qbl
@@ -0,0 +1,69 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateData (
+  InterfaceDataset interface,
+  MacroPlan macroplan,
+  RecycleBin recycle,
+  const Archive archive
+)
+{
+  Description: '鐢熸垚瀹㈡埛闇�姹傚瓨妗f暟鎹�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Nov-22-2024 (created)
+    info( '-------------------------Start---------------------');
+    binaryValue           := TemplateManager::GetIDSFullTable( archive, Date::ActualDate().Year() );
+    source                := GeneralExcelImportAndExportDataSource::Upload( recycle, binaryValue, OS::TempPath() + "template.xlsx" );
+    source.ReadStructure();
+    Transaction::Transaction().Propagate( attribute( GeneralExcelImportAndExportDataColumn, ColumnIndex ) );
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( "yyyy/MM/dd" );
+    
+    traverse( recycle, GeneralExcelImportAndExportDataSource.GeneralExcelImportAndExportDataTable, table ){
+      traverse( table, GeneralExcelImportAndExportDataRow, row ){
+        productcell       := selectobject( row, GeneralExcelImportAndExportDataCell, cell, cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() = 2 );
+        factorycell       := selectobject( row, GeneralExcelImportAndExportDataCell, cell, cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() = 0 );
+        unitname          := ifexpr( factorycell.Value().StartsWith( '闀挎槬' ), FinancialProductionReport::GetDefaultCCUnit(), FinancialProductionReport::GetDefaultDLUnit() );
+    //    idsrow            := idstable.GetRowByUnit( productcell.Value(), unitname );
+        traverse( row, GeneralExcelImportAndExportDataCell, cell, cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() > 2 ){
+          period          := cnv2.Convert( cell.GeneralExcelImportAndExportDataColumn().Name() );
+          archivedata     := selectobject( interface, CustomerDemandArchive, archivedata, archivedata.Factory() = factorycell.Value()
+                                           and archivedata.Product() = productcell.Value()
+                                           and archivedata.StartDate() = period
+                                           and archivedata.Origin() = 'IDS' );
+          if( isnull( archivedata ) ){
+            archivedata   := interface.CustomerDemandArchive( relnew, Factory := factorycell.Value(), Product := productcell.Value(), StartDate := period, Origin := 'IDS', FactoryName := unitname );
+          }
+          archivedata.Quantity( [Real]cell.Value() );
+        }
+      }
+    }
+    traverse ( macroplan, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.Product_MP() ) and forecast.Origin() = 'PPA' ){
+      
+      unitname              := ifexpr( forecast.StockingPointID().StartsWith( '闀挎槬' ) , FinancialProductionReport::GetDefaultCCUnit(), FinancialProductionReport::GetDefaultDLUnit() );/*ifexpr( forecast.SalesSegment_MP().Name().StartsWith( 'Changchun' ) 
+                                       or exists( forecast.SalesSegment_MP().GetAllParent(), Elements, psalessegment, psalessegment.Name().StartsWith( 'Changchun' ) )
+                                       , FinancialProductionReport::GetDefaultCCUnit()
+                                       , FinancialProductionReport::GetDefaultDLUnit() );*/
+      traverse( forecast, PlanningSalesDemandInPeriod, sdip ){
+        archivedata         := selectobject( interface, CustomerDemandArchive, archivedata, archivedata.SalesSegment() = forecast.SalesSegmentName()
+                                               and archivedata.StockingPointID() =forecast.StockingPointID()
+                                               and archivedata.Product() = forecast.ProductID()
+                                               and archivedata.StartDate() = forecast.StartDate() 
+                                               and archivedata.Origin() = forecast.Origin() );
+        if( isnull( archivedata ) ){
+          archivedata       := interface.CustomerDemandArchive( relnew, SalesSegment             := forecast.SalesSegmentName()
+                                                                , Product                        := forecast.ProductID()
+                                                                , StockingPointID                := forecast.StockingPointID()
+                                                                , StartDate                      := forecast.StartDate() 
+                                                                , Origin                         := forecast.Origin()
+                                                                , FactoryName                    := unitname );
+        }
+        archivedata.Quantity( sdip.Quantity() );
+      }
+    }
+    
+    source.Delete();
+    info( '-------------------------End---------------------');
+  *]
+}
diff --git a/_Main/BL/Type_CustomerDemandArchive/_ROOT_Type_CustomerDemandArchive.qbl b/_Main/BL/Type_CustomerDemandArchive/_ROOT_Type_CustomerDemandArchive.qbl
new file mode 100644
index 0000000..712ef05
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandArchive/_ROOT_Type_CustomerDemandArchive.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CustomerDemandArchive
+{
+  #keys: '5[415136.0.1330369408][415136.0.1330369406][0.0.0][415136.0.1330369407][415136.0.1330369409]'
+  BaseType: Object
+  Description: '瀹㈡埛闇�姹傚瓨妗�'
+  StructuredName: 'CustomerDemandArchives'
+}
diff --git a/_Main/BL/Type_CustomerDemandIDS/StaticMethod_GenerateData.qbl b/_Main/BL/Type_CustomerDemandIDS/StaticMethod_GenerateData.qbl
index 7c524e6..bd51385 100644
--- a/_Main/BL/Type_CustomerDemandIDS/StaticMethod_GenerateData.qbl
+++ b/_Main/BL/Type_CustomerDemandIDS/StaticMethod_GenerateData.qbl
@@ -14,17 +14,17 @@
     //interface.CustomerDemandIDS( relflush );
     //interface.CustomerDemandIDSSearch( relflush );
     info( '-------------------------Start---------------------');
-    allunit               := CustomerDemandIDS::GetDefaultAllUnit();
-    search                := interface.CustomerDemandIDSSearch( relnew, Product := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), Unit := allunit );
+    allunit               := CustomerDemandIDS::GetDefaultAllUnit();//search                := 
+    interface.CustomerDemandIDSSearch( relnew, Product := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), Unit := allunit );
     name                  := '瀹㈡埛闇�姹�';
     idstable              := selectobject( interface, CustomerDemandIDS, idstable, idstable.ID() = name );
     if( isnull( idstable ) ){
       idstable            := interface.CustomerDemandIDS( relnew, ID := name, Name := name );
     }
-    showtable             := selectobject( interface, CustomerDemandIDS, version, version.IsShow() );
-    if( isnull( showtable ) ){
-      showtable           := interface.CustomerDemandIDS( relnew, ID := name + 'Show', Name := name, IsShow := true );
-    }
+    //showtable             := selectobject( interface, CustomerDemandIDS, version, version.IsShow() );
+    //if( isnull( showtable ) ){
+    //  showtable           := interface.CustomerDemandIDS( relnew, ID := name + 'Show', Name := name, IsShow := true );
+    //}
     binaryValue           := TemplateManager::GetIDSFullTable( archive, Date::ActualDate().Year() );
     source                := GeneralExcelImportAndExportDataSource::Upload( recycle, binaryValue, OS::TempPath() + "template.xlsx" );
     source.ReadStructure();
@@ -48,12 +48,12 @@
         traverse( row, GeneralExcelImportAndExportDataCell, cell, cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() > 2 ){
           period          := cnv2.Convert( cell.GeneralExcelImportAndExportDataColumn().Name() );
           daycolumn       := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), period );
-          weekcolumn      := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), period );
-          monthcolumn     := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), period );
+    //      weekcolumn      := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), period );
+    //      monthcolumn     := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), period );
           
           idsrow.SetCellValue( daycolumn, [Number]cell.Value() );
-          idsrow.SetCellValue( weekcolumn, [Number]cell.Value() ); 
-          idsrow.SetCellValue( monthcolumn, [Number]cell.Value() ); 
+    //      idsrow.SetCellValue( weekcolumn, [Number]cell.Value() ); 
+    //      idsrow.SetCellValue( monthcolumn, [Number]cell.Value() ); 
         }
       }
     }
@@ -66,18 +66,18 @@
       traverse( forecast, PlanningSalesDemandInPeriod, sdip ){
         idsrow              := idstable.GetRowByUnit( forecast.ProductID(), unitname );
         daycolumn           := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), sdip.StartDate() );
-        weekcolumn          := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), sdip.StartDate() );
-        monthcolumn         := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), sdip.StartDate() );
-        info( '-----------------', isnull( idsrow ), isnull( daycolumn ), isnull( weekcolumn ), isnull( monthcolumn ), sdip.StartDate() );
+    //    weekcolumn          := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), sdip.StartDate() );
+    //    monthcolumn         := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), sdip.StartDate() );
+    //    info( '-----------------', isnull( idsrow ), isnull( daycolumn ), isnull( weekcolumn ), isnull( monthcolumn ), sdip.StartDate() );
         idsrow.SetCellValue( daycolumn, [Number]sdip.Quantity() );
-        idsrow.SetCellValue( weekcolumn, [Number]sdip.Quantity() );
-        idsrow.SetCellValue( monthcolumn, [Number]sdip.Quantity() );
+    //    idsrow.SetCellValue( weekcolumn, [Number]sdip.Quantity() );
+    //    idsrow.SetCellValue( monthcolumn, [Number]sdip.Quantity() );
       }
     }
     
     source.Delete();
     info( '-------------------------End---------------------');
-    productids             := selectuniquevalues( idstable, Row, row, row.Name() );
-    showtable.Generate( search, productids );
+    //productids             := selectuniquevalues( idstable, Row, row, row.Name() );
+    //showtable.Generate( search, productids );
   *]
 }
diff --git a/_Main/BL/Type_CustomerDemandIDSColumn/Method_Filter.qbl b/_Main/BL/Type_CustomerDemandIDSColumn/Method_Filter.qbl
new file mode 100644
index 0000000..6c8f5b2
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandIDSColumn/Method_Filter.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  CustomerDemandIDSSearch search
+) declarative remote as Boolean
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Nov-22-2024 (created)
+    flag       := false;
+    
+    if( ( search.StartDate().IsMinInfinity() or this.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or this.EndDate() <= search.EndDate() ) ){
+      flag     := true;
+    }
+    
+    return flag;
+  *]
+}
diff --git a/_Main/BL/Type_CustomerDemandPPAIDS/StaticMethod_GenerateDataNew.qbl b/_Main/BL/Type_CustomerDemandPPAIDS/StaticMethod_GenerateDataNew.qbl
new file mode 100644
index 0000000..8b39a46
--- /dev/null
+++ b/_Main/BL/Type_CustomerDemandPPAIDS/StaticMethod_GenerateDataNew.qbl
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateDataNew (
+  InterfaceDataset interfaceDataset,
+  const MacroPlan macroplan,
+  Boolean iscc,
+  Boolean isdl,
+  String executor
+)
+{
+  Description: '鐢熸垚鍙互涓嬪彂鐨勫鎴烽渶姹傦紙PPA+IDS锛夋暟鎹�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-20-2024 (created)
+    loginfo                := maxobject(  interfaceDataset, InterfaceLoginfo, loginfo, loginfo.Name() = Translations::InterfaceDataset_CustomerDemandPPAIDS_Name(), loginfo.InterfaceDateTime() );
+    if( not isnull( loginfo ) ){
+      if( not loginfo.IsShow() ){
+        loginfo.Delete();
+      }else{
+        loginfo.Last( false );
+      }
+      interfaceDataset.CustomerDemandPPAIDS( relflush );
+    }
+    nowdate                := DateTime::ActualTime();
+    loginfo                := interfaceDataset.InterfaceLoginfo( relnew, ExecuteUser           := executor
+                                                                 , Name                        := Translations::InterfaceDataset_CustomerDemandPPAIDS_Name()
+                                                                 , InterfaceDateTime           := nowdate
+                                                                 , Message                     := '瀹㈡埛闇�姹傦紙PPA+IDS锛夋暟鎹帹閫�'
+                                                                 , Last                        := true
+                                                                  );
+    traverse( interfaceDataset, CustomerDemandArchive, archivedata ){
+      cd                   :=interfaceDataset.CustomerDemandPPAIDS( relnew, Product            := archivedata.Product()
+                                                                     , DemandDate              := archivedata.StartDate()
+                                                                     , DemandQty               := [Number]archivedata.Quantity()
+                                                                     , VersionName             := macroplan.ScenarioName()
+                                                                     , InterfaceTime           := nowdate
+                                                                     , FactoryName             := archivedata.FactoryName()
+                                                                     , Fac                     := ifexpr( archivedata.FactoryName() = FinancialProductionReport::GetDefaultCCUnit(), 'CC', 'DL' )  
+    //                                                                 , VersionFlag             := versionflag
+                                                                     );
+      loginfo.CustomerDemandPPAIDS( relinsert, cd );
+    }
+    loginfo.TotalRow( loginfo.CustomerDemandPPAIDS( relsize ) );
+    CustomerDemandPPAIDS::Publish( interfaceDataset, loginfo );
+  *]
+}
diff --git a/_Main/BL/Type_InterfaceDataset/Method_GenerateArchiveData.qbl b/_Main/BL/Type_InterfaceDataset/Method_GenerateArchiveData.qbl
index c3724e2..9a139d3 100644
--- a/_Main/BL/Type_InterfaceDataset/Method_GenerateArchiveData.qbl
+++ b/_Main/BL/Type_InterfaceDataset/Method_GenerateArchiveData.qbl
@@ -18,7 +18,8 @@
   [*
     // 鐢勫叞楦� Oct-30-2024 (created)
     if( iscustomdemand ){//鍏ㄥ勾鏃ュ害闇�姹�/瀹㈡埛闇�姹� 
-      CustomerDemandIDS::GenerateData( this, macroplan, recyclebin, archive );
+      CustomerDemandArchive::GenerateData( this, macroplan, recyclebin, archive );
+    //  CustomerDemandIDS::GenerateData( this, macroplan, recyclebin, archive );
     }
     if( isofflineplan ){//鍚勪骇绾夸笅绾胯鍒�
       OfflinePlanArchiveVersion::RefreshData( this, macroplan, archive );
@@ -34,7 +35,7 @@
       InventoryPlanArchiveVersion::GenerateData( macroplan, this );
     }
     if( istrcdemand ){//TRC闇�姹�
-    //  CustomerDemandIDS::GenerateData( this, recyclebin, archive );
+      InterfaceTRCForecast::ArchivedData( this, macroplan );
     }
     if( istransferplan ){//璋冩嫧璁″垝
       ArchiveTransferPlanCell::Archive( macroplan,archive );
diff --git a/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl b/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl
index a05e213..7b8a0a8 100644
--- a/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl
+++ b/_Main/BL/Type_InterfaceDataset/Method_PublishPlanReportData.qbl
@@ -21,13 +21,14 @@
   [*
     // 鐢勫叞楦� Oct-30-2024 (created)
     if( iscustomdemanddl or iscustomdemandcc ){//鍏ㄥ勾鏃ュ害闇�姹�/瀹㈡埛闇�姹� 
-      CustomerDemandPPAIDS::GenerateData( this, macroplan, iscustomdemandcc, iscustomdemanddl, executor );
+      CustomerDemandPPAIDS::GenerateDataNew( this, macroplan, iscustomdemandcc, iscustomdemanddl, executor );
+    //  CustomerDemandPPAIDS::GenerateData( this, macroplan, iscustomdemandcc, iscustomdemanddl, executor );
     }
     if ( isofflineplandl or isofflineplancc ) { // 鍚勪骇绾夸笅绾胯鍒�
       InterfaceDataset::PushOfflinePlanData( macroplan, this, executor );
     }
     if( isshiftplandl or isshiftplancc ){//鐝璁″垝
-      DispatchShiftPlan::Dispatch(this, macroplan,executor );
+      DispatchShiftPlan::Dispatch(this, archive,executor );
     //  CustomerDemandIDS::GenerateData( this, recyclebin, archive );
     }
     if( isassembleonlineplandl or isassembleonlineplancc ){//瑁呴厤涓婄嚎璁″垝
diff --git a/_Main/BL/Type_InventoryPlanArchiveColumn/Method_Filter.qbl b/_Main/BL/Type_InventoryPlanArchiveColumn/Method_Filter.qbl
new file mode 100644
index 0000000..3889950
--- /dev/null
+++ b/_Main/BL/Type_InventoryPlanArchiveColumn/Method_Filter.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  InventoryPlanArchiveVersionSearch search
+) declarative remote as Boolean
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Nov-22-2024 (created)
+    flag       := false;
+    
+    if( ( search.StartDate().IsMinInfinity() or this.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or this.EndDate() <= search.EndDate() ) ){
+      flag     := true;
+    }
+    
+    return flag;
+  *]
+}
diff --git a/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl b/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl
index bf2b441..c3446fa 100644
--- a/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl
+++ b/_Main/BL/Type_InventoryPlanArchiveVersion/StaticMethod_GenerateData.qbl
@@ -13,16 +13,16 @@
     machineproductparent   := MachiningPipelineReport::GetDefaultProductParent();
     engineproductparent    := EnginePipelineReport::GetDefaultProductParent();
     allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit();
-    name                   := InventoryPlanArchiveVersion::GetDefaultName();
-    search                 := interfaceDataset.InventoryPlanArchiveVersionSearch( relnew, Product := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
+    name                   := InventoryPlanArchiveVersion::GetDefaultName();//search                 := 
+    interfaceDataset.InventoryPlanArchiveVersionSearch( relnew, Product := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
     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( showtable ) ){ 
-      showtable               := interfaceDataset.InventoryPlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
-    }
+    //showtable              := selectobject( interfaceDataset, InventoryPlanArchiveVersion, version, version.IsShow() );
+    //if( isnull( showtable ) ){ 
+    //  showtable               := interfaceDataset.InventoryPlanArchiveVersion( 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.StartDate() = period.StartDate() ), period.StartDate() );//column.TimeUnit() = Translations::MP_GlobalParameters_Day() and 
     if( periods.Size() > 0 ){
@@ -55,8 +55,8 @@
         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 );
+    //      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 ));
@@ -66,16 +66,16 @@
             actinventoryqty  := inventoryqrys.Element( actinventoryindex.GetValueAsNumber() );
           }
           inventoryrow.SetQuantity( daycolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
-          inventoryrow.SetQuantity( weekcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
-          inventoryrow.SetQuantity( monthcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
+    //      inventoryrow.SetQuantity( weekcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
+    //      inventoryrow.SetQuantity( monthcolumn, pispippl.InventoryLevelEnd(), actinventoryqty );
       
         }
       }
     }
     
     info( '-------------------------End---------------------');
-    productids             := selectuniquevalues( table, Row, row, row.Name() );
-    productlines           := selectuniquevalues( table, Row, row, row.Unit() );
-    showtable.Generate( search, productids, productlines );
+    //productids             := selectuniquevalues( table, Row, row, row.Name() );
+    //productlines           := selectuniquevalues( table, Row, row, row.Unit() );
+    //showtable.Generate( search, productids, productlines );
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl
index 16a39ea..5f86d1d 100644
--- a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateAnnualPlanReport.qbl
@@ -17,7 +17,7 @@
     
     archiveOfflinePlan := select( interfaceDataset,OfflinePlanArchiveVersion,offlinePlan,not offlinePlan.IsShow() );
     
-    startDate := minselect( archiveOfflinePlan,Column,column,column.TimeUnit() = "Day",column.StartDate() ).StartDate();
+    startDate := minselect( archiveOfflinePlan,Column,column,column.StartDate() ).StartDate();//,column.TimeUnit() = "Day"
     endDate := macroPlan.StartOfPlanning().Date();
     
     localCells := construct( LocalCell_Defaults );
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
index 7c5d964..e4fee3e 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
@@ -10,16 +10,16 @@
   [*
     //鏍规嵁褰撳墠鐗堟湰鐨勪笅绾胯鍒�
     allunit                := OfflinePlanArchiveVersion::GetDefaultAllUnit();
-    name                   := OfflinePlanArchiveVersion::GetDefaultName();
-    search                 := interface.OfflinePlanArchiveSearch( relnew, Product := allunit, ProductionLine := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
+    name                   := OfflinePlanArchiveVersion::GetDefaultName();//search                 := 
+    interface.OfflinePlanArchiveSearch( relnew, Product := allunit, ProductionLine := allunit, Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );//, TimeUnit := Translations::MP_GlobalParameters_Day()
     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( showtable ) ){
-      showtable               := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
-    }
+    //showtable              := selectobject( interface, OfflinePlanArchiveVersion, version, version.IsShow() );
+    //if( isnull( showtable ) ){
+    //  showtable               := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
+    //}
     nopcolumns             := selectuniquevalues(  macroPlan, NewOfflinePlanTable.NewOfflinePlanColumn, nopcolumn, not exists( table, Column, column, column.StartDate() = nopcolumn.StartDate() ), nopcolumn.StartDate() );//column.TimeUnit() = Translations::MP_GlobalParameters_Day() and 
     if( nopcolumns.Size() > 0 ){
       table.GenerateColumn( nopcolumns, false );
@@ -60,8 +60,8 @@
         }
       }
     }
-    productids             := selectuniquevalues( table, Row, row, row.Name() );
-    productlines           := selectuniquevalues( table, Row, row, row.ProductionLine() );
-    showtable.Generate( search, productids, productlines );
+    //productids             := selectuniquevalues( table, Row, row, row.Name() );
+    //productlines           := selectuniquevalues( table, Row, row, row.ProductionLine() );
+    //showtable.Generate( search, productids, productlines );
   *]
 }
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersionColumn/Method_Filter.qbl b/_Main/BL/Type_OfflinePlanArchiveVersionColumn/Method_Filter.qbl
new file mode 100644
index 0000000..03c02cf
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanArchiveVersionColumn/Method_Filter.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  OfflinePlanArchiveSearch search
+) declarative remote as Boolean
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Nov-22-2024 (created)
+    flag       := false;
+    
+    if( ( search.StartDate().IsMinInfinity() or this.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or this.EndDate() <= search.EndDate() ) ){
+      flag     := true;
+    }
+    
+    return flag;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
index 6192c0e..6d2c76c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
@@ -93,6 +93,17 @@
         Taborder: 6
       ]
     }
+    Component bTRCForecastArchive
+    {
+      #keys: '[413988.1.153623307]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CLOUD'
+        Label: 'TRC 闇�姹傚瓨妗�'
+        Taborder: 8
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPublish.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPublish.def
index 5ef5282..5bd332f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPublish.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupPublish.def
@@ -24,6 +24,21 @@
       [
         Image: 'SKIN_TIGER'
         Label: '涓嬪彂鐝璁″垝淇℃伅'
+        Taborder: 2
+      ]
+    }
+    Component ButtonPublishSAP
+    {
+      #keys: '[415136.0.1332920231]'
+      BaseType: 'WebButton'
+      Children:
+      [
+        #child: ContextMenuPublishSAP
+      ]
+      Properties:
+      [
+        Image: 'MAIL_OUT'
+        Label: 'SAP 鎺ュ彛鏁版嵁鎺ㄩ��'
         Taborder: 1
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPublishSAP.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPublishSAP.def
new file mode 100644
index 0000000..87434ae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPublishSAP.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component ContextMenuPublishSAP
+{
+  #keys: '[415136.0.1332920286]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component MenuPublishSAPPIR
+    {
+      #keys: '[415136.0.1332920287]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Taborder: 0
+        Title: 'SAP PIR'
+      ]
+    }
+    Component MenuPublishSAPMS64
+    {
+      #keys: '[415136.0.1332920329]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Taborder: 1
+        Title: 'SAP MS64'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonCustomerDemandPP\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonCustomerDemandPP\043603.def"
index 59ab9d6..10b7032 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonCustomerDemandPP\043603.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonCustomerDemandPP\043603.def"
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      ApplicationScope.ViewManager().ResetUserViewById( "Customer_demand_PPAIDS_view", true);
+      ApplicationScope.ViewManager().ResetUserViewById( "Customer_demand_archive_view", true);//Customer_demand_PPAIDS_view
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_bTRCForecastArchive_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_bTRCForecastArchive_OnClic.def
new file mode 100644
index 0000000..e6cfa16
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_bTRCForecastArchive_OnClic.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupArchiveReport/bTRCForecastArchive
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupArchiveReport_bTRCForecastArchive_OnClick
+{
+  #keys: '[413988.1.153703587]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationMacroPlanner.OpenView( 'TRCForecastArchive', this );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPMS64_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPMS64_OnClick.def
new file mode 100644
index 0000000..cc2cc66
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPMS64_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ContextMenuPublishSAP/MenuPublishSAPMS64
+Response OnClick () id:Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPMS64_OnClick
+{
+  #keys: '[415136.0.1332920626]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogZEDPPSMS64 );
+      dlg.New();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPPIR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPPIR_OnClick.def
new file mode 100644
index 0000000..0439392
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPPIR_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ContextMenuPublishSAP/MenuPublishSAPPIR
+Response OnClick () id:Response_MacroPlanner_ContextMenuPublishSAP_MenuPublishSAPPIR_OnClick
+{
+  #keys: '[415136.0.1332920450]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan ) and not isnull( InterfaceDataset );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogZEDPPSPIR );
+      dlg.New();
+    *]
+    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 2b4a7d6..90720bd 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable\043384.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_MatrixEditorTable\043384.def"
@@ -17,10 +17,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'AssemblyOnlinePlanVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row.Cell'
+            Transformation: 'AssemblyOnlinePlanVersion.Row.Cell'
           ]
         }
       ]
@@ -44,10 +44,12 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'AssemblyOnlinePlanVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
+            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.ProductionLine() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row'
+            Transformation: 'AssemblyOnlinePlanVersion.Row'
           ]
         }
       ]
@@ -70,10 +72,13 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'AssemblyOnlinePlanVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            Description: '( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: 'object.Filter( search )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Column'
+            Transformation: 'AssemblyOnlinePlanVersion.Column'
           ]
         }
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def"
index c6ed4e7..71d9f4b 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelHeader\043952.def"
@@ -11,6 +11,6 @@
   Properties:
   [
     FixedSize: true
-    Taborder: 2
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelSAP.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelSAP.def
index dde51e8..85fb894 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelSAP.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelSAP.def
@@ -30,5 +30,6 @@
   [
     Orientation: 'horizontal'
     Taborder: 2
+    Visible: false
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable\043273.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable\043273.def"
index 83f274d..3db3b8c 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable\043273.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Component_PanelTable\043273.def"
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_OnCreated.def
deleted file mode 100644
index 753bb9c..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_OnCreated.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormAssemblyOnlinePlanVersion_OnCreated
-{
-  #keys: '[415136.0.1283300735]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      table := AssemblyOnlinePlanVersion::InitiateSearch( InterfaceDataset ); 
-      DataHolderTable.Data( table );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelOperation_653_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelOperation_653_ButtonSearch_OnClick.def
index 9eed8ea..a91ed7e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelOperation_653_ButtonSearch_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelOperation_653_ButtonSearch_OnClick.def
@@ -9,11 +9,11 @@
   {
     Body:
     [*
-      if( not isnull( DataHolderTable.Data() ) ){ 
-        productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
-        units           := selectuniquevalues( DataHolderUnit.Data(), Elements, unit, unit.ID() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), productids, units );
-      }
+      //if( not isnull( DataHolderTable.Data() ) ){ 
+      //  productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
+      //  units           := selectuniquevalues( DataHolderUnit.Data(), Elements, unit, unit.ID() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), productids, units );
+      //}
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/_ROOT_Component_FormAssemblyOnlinePlanVersion.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/_ROOT_Component_FormAssemblyOnlinePlanVersion.def
index 074abcc..279c6ee 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/_ROOT_Component_FormAssemblyOnlinePlanVersion.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/_ROOT_Component_FormAssemblyOnlinePlanVersion.def
@@ -29,20 +29,10 @@
       ]
       Properties:
       [
-        Taborder: 1
+        Taborder: 0
       ]
     }
     #child: PanelHeader_952
     #child: PanelTable_273
-    Component DataHolderTable id:DataHolderTable_568
-    {
-      #keys: '[415136.0.1283300574]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'AssemblyOnlinePlanVersion'
-      Properties:
-      [
-        Taborder: 0
-      ]
-    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_ListCustomerDemandArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_ListCustomerDemandArchive.def
new file mode 100644
index 0000000..d635c02
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_ListCustomerDemandArchive.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListCustomerDemandArchive
+{
+  #keys: '[415136.0.1334500083]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorCustomerDemandArchive
+    {
+      #keys: '[415136.0.1334500084]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'InterfaceDataset'
+        Source: 'InterfaceDataset'
+        Taborder: 0
+        Transformation: 'CustomerDemandArchive'
+      ]
+    }
+    #child: listActionBarPageCustomerDemandArchive
+    Component DataSetLevelCustomerDemandArchive
+    {
+      #keys: '[415136.0.1334500089]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuCustomerDemandArchive
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment","title":"SalesSegment","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegment"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Factory","title":"Factory","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Factory"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FactoryName","title":"FactoryName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FactoryName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Product"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Origin","title":"Origin","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Origin"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}}]'
+        ContextMenu: 'listContextMenuCustomerDemandArchive'
+        SortCriteria: 'desc:StartDate'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listActionBarPageCustomerDemandArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listActionBarPageCustomerDemandArchive.def
new file mode 100644
index 0000000..bca04aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listActionBarPageCustomerDemandArchive.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageCustomerDemandArchive
+{
+  #keys: '[415136.0.1334500086]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listContextMenuCustomerDemandArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listContextMenuCustomerDemandArchive.def
new file mode 100644
index 0000000..826ebba
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/Component_listContextMenuCustomerDemandArchive.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuCustomerDemandArchive
+{
+  #keys: '[415136.0.1334500091]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/_ROOT_Component_FormCustomerDemandArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/_ROOT_Component_FormCustomerDemandArchive.def
new file mode 100644
index 0000000..da9cc99
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandArchive/_ROOT_Component_FormCustomerDemandArchive.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCustomerDemandArchive
+{
+  #keys: '[415136.0.1334500035]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListCustomerDemandArchive
+  ]
+  Properties:
+  [
+    Image: 'FLAG_AMBER'
+    Title: 'Customer demand archive'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def
index 3c6db85..d132cfb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_MatrixEditorTable.def
@@ -17,12 +17,12 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'CustomerDemandIDS'
+            DataType: 'InterfaceDataset'
             Description: 'object.Column().TimeUnit() = search.TimeUnit() and object.Column().StartDate() >= search.StartDate() and object.Column().StartDate() <= search.EndDate()'
             FilterArguments: 'search:QMacroPlanner::FormCustomerDemandPPAIDS.dhSearch'
-            Source: 'DataHolderTable'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row.Cell'
+            Transformation: 'CustomerDemandIDS.Row.Cell'
           ]
         }
       ]
@@ -46,12 +46,12 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'CustomerDemandIDS'
-            Description: "search.Product() = '<All>' or object.Name() = search.Product() and ( search.Unit() = '<All>' or object.Factory() = search.Unit() )"
-            FilterArguments: 'search:QMacroPlanner::FormCustomerDemandPPAIDS.dhSearch'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
+            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.Factory() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row'
+            Transformation: 'CustomerDemandIDS.Row'
           ]
         }
       ]
@@ -74,12 +74,13 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'CustomerDemandIDS'
-            Description: 'object.TimeUnit() = search.TimeUnit() and ( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
+            DataType: 'InterfaceDataset'
+            Description: '( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
             FilterArguments: 'search:QMacroPlanner::FormCustomerDemandPPAIDS.dhSearch'
-            Source: 'DataHolderTable'
+            FixedFilter: 'object.Filter( search )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Column'
+            Transformation: 'CustomerDemandIDS.Column'
           ]
         }
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelHeader.def
index 00e08ed..2985da3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelHeader.def
@@ -17,6 +17,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 2
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelTable.def
index d6707d9..e5d9695 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelTable.def
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_OnCreated.def
deleted file mode 100644
index 64dc42d..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_OnCreated.def
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormCustomerDemandPPAIDS_OnCreated
-{
-  #keys: '[415136.0.1122960379]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      //鍒濆鍖�  
-      table := CustomerDemandIDS::InitiateSearch( InterfaceDataset ); 
-      DataHolderTable.Data( table );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelOperation_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelOperation_ButtonSearch_OnClick.def
index 5d7e04a..ccea5fe 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelOperation_ButtonSearch_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelOperation_ButtonSearch_OnClick.def
@@ -9,10 +9,10 @@
   {
     Body:
     [*
-      if( not isnull( DataHolderTable.Data() ) ){ 
-        productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), productids );
-      }
+      //if( not isnull( DataHolderTable.Data() ) ){ 
+      //  productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), productids );
+      //}
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def
index f3a5739..f8c1a45 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def
@@ -31,16 +31,6 @@
       ]
       Properties:
       [
-        Taborder: 1
-      ]
-    }
-    Component DataHolderTable
-    {
-      #keys: '[415136.0.1307973765]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'CustomerDemandIDS'
-      Properties:
-      [
         Taborder: 0
       ]
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def"
index e3eff31..10976ca 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_MatrixEditorTable\043791.def"
@@ -17,10 +17,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'InventoryPlanArchiveVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row.Cell'
+            Transformation: 'InventoryPlanArchiveVersion.Row.Cell'
           ]
         }
       ]
@@ -44,10 +44,12 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'InventoryPlanArchiveVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
+            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.Unit() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row'
+            Transformation: 'InventoryPlanArchiveVersion.Row'
           ]
         }
       ]
@@ -70,10 +72,13 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'InventoryPlanArchiveVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            Description: '( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
+            FilterArguments: 'search:QMacroPlanner::FormInventoryPlanArchive.dhSearch'
+            FixedFilter: 'object.Filter( search )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Column'
+            Transformation: 'InventoryPlanArchiveVersion.Column'
           ]
         }
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def"
index 3966817..be61e0c 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelHeader\043503.def"
@@ -11,6 +11,6 @@
   Properties:
   [
     FixedSize: true
-    Taborder: 2
+    Taborder: 1
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def"
index b2daea8..e265e3f 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Component_PanelTable\043881.def"
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_OnCreated.def
deleted file mode 100644
index f80537b..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_OnCreated.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormInventoryPlanArchive_OnCreated
-{
-  #keys: '[415136.0.1285201938]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      table := InventoryPlanArchiveVersion::InitiateSearch( InterfaceDataset ); 
-      DataHolderTable.Data( table );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelOperation_603_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelOperation_603_ButtonSearch_OnClick.def
index a5891a0..296e96e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelOperation_603_ButtonSearch_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/Response_PanelOperation_603_ButtonSearch_OnClick.def
@@ -9,11 +9,11 @@
   {
     Body:
     [*
-      if( not isnull( DataHolderTable.Data() ) ){ 
-        productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
-        units           := selectuniquevalues( DataHolderUnit.Data(), Elements, unit, unit.ID() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), productids, units );
-      }
+      //if( not isnull( DataHolderTable.Data() ) ){ 
+      //  productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
+      //  units           := selectuniquevalues( DataHolderUnit.Data(), Elements, unit, unit.ID() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), productids, units );
+      //}
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def
index 84a1cee..0df74a2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventoryPlanArchive/_ROOT_Component_FormInventoryPlanArchive.def
@@ -29,21 +29,11 @@
       ]
       Properties:
       [
-        Taborder: 1
+        Taborder: 0
       ]
     }
     #child: PanelHeader_503
     #child: PanelTable_881
-    Component DataHolderTable
-    {
-      #keys: '[415136.0.1285202011]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'InventoryPlanArchiveVersion'
-      Properties:
-      [
-        Taborder: 0
-      ]
-    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
index 92f4b4f..c29768a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
@@ -17,10 +17,10 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'OfflinePlanArchiveVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row.Cell'
+            Transformation: 'OfflinePlanArchiveVersion.Row.Cell'
           ]
         }
       ]
@@ -44,11 +44,12 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'OfflinePlanArchiveVersion'
-            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() )"
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'units:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderUnit;products:QLibMacroPlannerWebUI::ApplicationMacroPlanner.DataHolderProduct'
+            FixedFilter: '( units.Size() = 0 or exists( units, Elements, unit, unit.ID() = object.ProductionLine() ) ) and ( products.Size() = 0 or exists( products, Elements, product, product.ID() = object.Name() ) )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Row'
+            Transformation: 'OfflinePlanArchiveVersion.Row'
           ]
         }
       ]
@@ -71,10 +72,13 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'OfflinePlanArchiveVersion'
-            Source: 'DataHolderTable'
+            DataType: 'InterfaceDataset'
+            Description: '( search.StartDate().IsMinInfinity() or object.StartDate() >= search.StartDate() ) and ( search.EndDate().IsMaxInfinity() or object.StartDate() <= search.EndDate() )'
+            FilterArguments: 'search:QMacroPlanner::FormOfflinePlanArchive.dhSearch'
+            FixedFilter: 'object.Filter( search )'
+            Source: 'InterfaceDataset'
             Taborder: 0
-            Transformation: 'Column'
+            Transformation: 'OfflinePlanArchiveVersion.Column'
           ]
         }
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
index a96cd6a..b37a899 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
@@ -11,6 +11,6 @@
   Properties:
   [
     FixedSize: true
-    Taborder: 2
+    Taborder: 1
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def
index 2a2b19f..4c488b9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_OnCreated.def
deleted file mode 100644
index 6c0f728..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_OnCreated.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Response OnCreated () id:Response_FormOfflinePlanArchive_OnCreated
-{
-  #keys: '[415136.0.1286390827]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      table := OfflinePlanArchiveVersion::InitiateSearch( InterfaceDataset ); 
-      DataHolderTable.Data( table );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelOperation_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelOperation_ButtonSearch_OnClick.def
index 858ff1f..674243d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelOperation_ButtonSearch_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelOperation_ButtonSearch_OnClick.def
@@ -9,11 +9,11 @@
   {
     Body:
     [*
-      if( not isnull( DataHolderTable.Data() ) ){ 
-        productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
-        units           := selectuniquevalues( DataHolderUnit.Data(), Elements, unit, unit.ID() );
-        DataHolderTable.Data().Generate( dhSearch.Data(), productids, units );
-      }
+      //if( not isnull( DataHolderTable.Data() ) ){ 
+      //  productids      := selectuniquevalues( DataHolderProduct.Data(), Elements, product, product.ID() );
+      //  units           := selectuniquevalues( DataHolderUnit.Data(), Elements, unit, unit.ID() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), productids, units );
+      //}
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
index 883de0c..49b088f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
@@ -29,21 +29,11 @@
       ]
       Properties:
       [
-        Taborder: 1
+        Taborder: 0
       ]
     }
     #child: PanelHeader
     #child: PanelTable
-    Component DataHolderTable id:DataHolderTable_265
-    {
-      #keys: '[415136.0.1286390735]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'OfflinePlanArchiveVersion'
-      Properties:
-      [
-        Taborder: 0
-      ]
-    }
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_ListTRCForecast\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_ListTRCForecast\043715.def"
new file mode 100644
index 0000000..7318244
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_ListTRCForecast\043715.def"
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListTRCForecast id:ListTRCForecast_715
+{
+  #keys: '[413988.1.153585043]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorTRCForecast
+    {
+      #keys: '[413988.1.153585044]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'InterfaceDataset'
+        Source: 'InterfaceDataset'
+        Taborder: 0
+        Transformation: 'InterfaceTRCForecast'
+      ]
+    }
+    #child: listActionBarPageTRCForecast_1
+    Component DataSetLevelTRCForecast
+    {
+      #keys: '[413988.1.153585046]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuTRCForecast_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Date","title":"Date","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Date"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Factory","title":"Factory","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Factory"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Generation","title":"Generation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Generation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MLBMQB","title":"MLBMQB","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MLBMQB"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PartNumber","title":"PartNumber","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PartNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Power","title":"Power","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Power"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}}]'
+        ContextMenu: 'listContextMenuTRCForecast'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listActionBarPageTRCForecast\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listActionBarPageTRCForecast\0431.def"
new file mode 100644
index 0000000..b4d51e6
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listActionBarPageTRCForecast\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageTRCForecast id:listActionBarPageTRCForecast_1
+{
+  #keys: '[413988.1.153585045]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listContextMenuTRCForecast\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listContextMenuTRCForecast\0431.def"
new file mode 100644
index 0000000..5a6ef17
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_listContextMenuTRCForecast\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuTRCForecast id:listContextMenuTRCForecast_1
+{
+  #keys: '[413988.1.153585047]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pContent.def
new file mode 100644
index 0000000..eb38c4d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pContent.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pContent
+{
+  #keys: '[413988.1.153584900]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListTRCForecast_715
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pHeader.def
new file mode 100644
index 0000000..39aff07
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Component_pHeader.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.1.153584890]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bArchive
+    {
+      #keys: '[413988.1.153585113]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOCUMENT_ZIP'
+        Label: '瀛樻。'
+        Taborder: 0
+        Visible: false
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Response_pHeader_bArchive_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Response_pHeader_bArchive_OnClick.def
new file mode 100644
index 0000000..20458b9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/Response_pHeader_bArchive_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pHeader/bArchive
+Response OnClick () id:Response_pHeader_bArchive_OnClick
+{
+  #keys: '[413988.1.153530591]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( InterfaceDataset ) and not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      InterfaceTRCForecast::ArchivedData( InterfaceDataset, MacroPlan );
+      
+      WebMessageBox::Success( Translations::A_VWED_Success() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/_ROOT_Component_FormTRCForecast.def b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/_ROOT_Component_FormTRCForecast.def
new file mode 100644
index 0000000..6879088
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormTRCForecast/_ROOT_Component_FormTRCForecast.def
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormTRCForecast
+{
+  #keys: '[413988.1.153584709]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pHeader
+    #child: pContent
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Customer_demand_archive_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Customer_demand_archive_view.vw
new file mode 100644
index 0000000..10df9c1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Customer_demand_archive_view.vw
@@ -0,0 +1,119 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormCustomerDemandArchive
+      {
+        title: 'QMacroPlanner::FormCustomerDemandArchive'
+        shown: true
+        componentID: 'QMacroPlanner::FormCustomerDemandArchive'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormCustomerDemandArchive_ListCustomerDemandArchive
+          {
+          }
+          FormCustomerDemandArchive_DataSetLevelCustomerDemandArchive
+          {
+            groupDepth: -1
+            sort: 'DESC:StartDate'
+            column_SalesSegment
+            {
+              columnId: 'SalesSegment'
+              dataPath: 'SalesSegment'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Factory
+            {
+              columnId: 'Factory'
+              dataPath: 'Factory'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_FactoryName
+            {
+              columnId: 'FactoryName'
+              dataPath: 'FactoryName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Product
+            {
+              columnId: 'Product'
+              dataPath: 'Product'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Origin
+            {
+              columnId: 'Origin'
+              dataPath: 'Origin'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_EndDate
+            {
+              columnId: 'EndDate'
+              dataPath: 'EndDate'
+              dataType: 'date'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 33
+    image: 'FLAG_AMBER'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Customer_demand_archive_view'
+  name: 'Customer demand archive view'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/TRCForecastArchive.vw b/_Main/UI/MacroPlannerWebApp/Views/TRCForecastArchive.vw
new file mode 100644
index 0000000..228c90a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/TRCForecastArchive.vw
@@ -0,0 +1,226 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormTRCForecast
+      {
+        title: 'QMacroPlanner::FormTRCForecast'
+        shown: true
+        componentID: 'QMacroPlanner::FormTRCForecast'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormTRCForecast_pHeader
+          {
+            sizeRatio: 1
+          }
+          FormTRCForecast_pContent
+          {
+            sizeRatio: 1
+          }
+          FormTRCForecast_ListTRCForecast
+          {
+          }
+          FormTRCForecast_DataSetLevelTRCForecast
+          {
+            groupDepth: -1
+            column_Date
+            {
+              columnId: 'Date'
+              dataPath: 'Date'
+              dataType: 'date'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_Factory
+            {
+              columnId: 'Factory'
+              dataPath: 'Factory'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_Generation
+            {
+              columnId: 'Generation'
+              dataPath: 'Generation'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_MLBMQB
+            {
+              columnId: 'MLBMQB'
+              dataPath: 'MLBMQB'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_PartNumber
+            {
+              columnId: 'PartNumber'
+              dataPath: 'PartNumber'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Power
+            {
+              columnId: 'Power'
+              dataPath: 'Power'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      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
+    image: 'CLOUD'
+    description: ''
+  }
+  formatversion: 2
+  id: 'TRCForecastArchive'
+  name: 'TRCForecastArchive'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3