From 4419b51e5cfed824ca592ae5cba7654994ee005d Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期二, 29 十月 2024 17:30:24 +0800
Subject: [PATCH] 下线计划存档前端

---
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlAll_720_cbAll_OnChanged.def                                                |   28 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorEnd_OnChanged.def                            |   24 +
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlShiftPlan#780.def                                                         |   33 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProduct.def                                                        |   25 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnCreated.def                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelUnit_ddslUnit_OnSelectionChanged.def                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/_ROOT_Component_DialogPublishPlan.def                                                  |   23 +
 _Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Method_OnOK.def                                                               |   38 -
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnCreated.def                            |    8 
 _Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl                                                                           |   43 +
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlInventoryPlan#119.def                                                     |   33 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTimeUnit.def                                                       |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelOperation.def                                                      |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProductLine_ddslMQBMLB_OnSelectionChanged.def                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def               |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnCancel_OnClick.def                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def                                                   |  104 ++++
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAll#720.def                                                               |   33 +
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelProduct.def                                                      |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorStart_OnChanged.def                          |   24 +
 _Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl                                                                                      |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def                                    |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnCreated.def               |   16 
 _Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl                                                                          |   38 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAssembleOnlinePlan#679.def                                                |   33 +
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlCustomDemand#462.def                                                      |   33 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonOfflinePlanArchiveRe.def |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixEditorActionBarPageTable.def                                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Response_pnlActions_btnOk_OnClick.def                                         |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnCreated.def                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProduct_937_ddslProduct_OnSelectionChanged.def               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnSelectionChanged.def                   |   19 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlActions.def                                                               |   40 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelPeriod#858.def                                                     |   35 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def                                                         |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelUnit#844.def                                                       |   24 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupPublish_ButtonPublish_OnClick.def            |   18 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlContent.def                                                               |   20 
 _Main/UI/MacroPlannerWebApp/Views/Offline__plan_archive_report.vw                                                                              |  116 +++++
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration_ddslGeneration_OnSelectionChanged#187.def              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def                                                          |   14 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Method_OnOK.def                                                                        |   35 +
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlOfflinePlan#520.def                                                       |   33 +
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelPower_ddslPower_OnSelectionChanged#136.def                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnSelectionChanged.def                            |   19 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl                                                                            |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelMLBMQB_ddslMQBMLB_OnSelectionChanged#456.def                      |    2 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl                                                                              |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnSelectionChanged.def                          |   19 
 /dev/null                                                                                                                                      |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixeditorContextMenuTable.def                                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def                                        |   43 +
 _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProductLine#603.def                                                |   24 +
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def                                        |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelProduct_ddslProduct_OnSelectionChanged.def                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnOk_OnClick.def                                                  |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration.def                                                   |    1 
 57 files changed, 1,149 insertions(+), 127 deletions(-)

diff --git a/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl b/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
index a2c55cc..ab4f0b9 100644
--- a/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
+++ b/_Main/BL/Type_AOnlineAndMOfflinePlanPIR/StaticMethod_GenerateData.qbl
@@ -51,25 +51,25 @@
       }
     }
     
-    //traverse( version, OfflinePlanTable, table ){
-    //  traverse( table, OfflinePlanColumn, column, column.ColumnDate() >= startdate and column.ColumnDate() <= enddate ){
-    //    traverse( column, OfflinePlanCell, cell, ( werk = 'All' or cell.OfflinePlanRow().ProductionLine().FindString( werk, 0 ) > -1 )
-    //              and ( cell.OfflinePlanRow().ProductionLine() <> 'DL_MOMO' or cell.OfflinePlanRow().ProductionLine() <> 'CC_MOMO' )
-    //              and cell.OfflinePlanRow().Type() = '1' ){
-    //      row              := cell.OfflinePlanRow();
-    //      if( not exists( productids, Elements, e, e = row.ProductID() ) ){
-    //        productids.Add( row.ProductID() );
-    //      }
-    //      pirdata          := selectobject(  pir, PIRData, pirdata, pirdata.Product() = row.ProductID() and pirdata.PlanningDate() = column.ColumnDate() );
-    //      if( isnull( pirdata ) ){
-    //        pirdata          := pir.PIRData( relnew, Product         := row.ProductID()
-    //                                         , PlanningDate            := column.ColumnDate()
-    //                                         , PlanningQty             := 0 );
-    //      }
-    //      pirdata.PlanningQty( pirdata.PlanningQty() + [Number]cell.Value() );
-    //    }
-    //  }
-    //}
+    traverse( owner, OfflinePlanArchiveVersion, table ){
+      traverse( table, Column, column, column.StartDate() >= startdate and column.StartDate() <= enddate ){
+        traverse( column, Cell, cell, ( werk = 'All' or cell.Row().ProductionLine().FindString( werk, 0 ) > -1 )
+                  and ( cell.Row().ProductionLine() <> 'DL_MOMO' or cell.Row().ProductionLine() <> 'CC_MOMO' )
+                  and cell.Row().Type() = '1' ){
+          row              := cell.Row();
+          if( not exists( productids, Elements, e, e = row.ProductID() ) ){
+            productids.Add( row.ProductID() );
+          }
+          pirdata          := selectobject(  pir, PIRData, pirdata, pirdata.Product() = row.ProductID() and pirdata.PlanningDate() = column.StartDate() );
+          if( isnull( pirdata ) ){
+            pirdata          := pir.PIRData( relnew, Product           := row.ProductID()
+                                             , PlanningDate            := column.StartDate()
+                                             , PlanningQty             := 0 );
+          }
+          pirdata.PlanningQty( pirdata.PlanningQty() + [Number]cell.Value() );
+        }
+      }
+    }
     traverse( productids, Elements, e ){
       for( date := startdate.StartOfWeek(); date <= enddate; date := ( date + Duration::Days( 1 ) ).Date() ){
         if( not exists( pir, PIRData, pirdata, pirdata.Product() = e and pirdata.PlanningDate() = date ) ){
diff --git a/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_GenerateData.qbl b/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_GenerateData.qbl
deleted file mode 100644
index 0cbe54d..0000000
--- a/_Main/BL/Type_AssemblyOnlinePlanVersion/StaticMethod_GenerateData.qbl
+++ /dev/null
@@ -1,62 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GenerateData (
-  InterfaceDataset interface,
-  RecycleBin recycle,
-  const Archive archive
-)
-{
-  Description: '鐢熸垚鍙互涓嬪彂鐨勫鎴烽渶姹傦紙PPA+IDS锛夋暟鎹�'
-  TextBody:
-  [*
-    // 鐢勫叞楦� Aug-20-2024 (created)
-    interface.CustomerDemandIDS( relflush );
-    interface.CustomerDemandIDSSearch( relflush );
-    allunit               := CustomerDemandIDS::GetDefaultAllUnit();
-    interface.CustomerDemandIDSSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit );
-    idstable              := interface.CustomerDemandIDS( relnew, ID := '瀹㈡埛闇�姹�', Name := '瀹㈡埛闇�姹�' );
-    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" );
-    idsdates              := selectuniquevalues( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() > 2, cnv2.Convert( column.Name() ) );
-    ppadates              := selectuniquevalues( interface, InterfaceForecast, forecast, forecast.Origin() = 'PPA', forecast.Date() );
-    //ppadates              := construct( Dates );
-    //traverse( macroplan, SalesDemand.astype( Forecast ), forecast, forecast.Origin() = 'PPA' ){
-    //  ppadates            := ppadates.Union( selectuniquevalues( forecast, PlanningSalesDemandInPeriod, salesdemand, salesdemand.StartDate() ) );
-    //}
-    periods               := idsdates.Union( ppadates );
-    periods               := selectuniquevalues( periods, Elements, e, e );
-    idstable.GenerateColumn( periods.Sort() );
-    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 );
-        idsrow            := idstable.GetRowByUnit( productcell.Value(), factorycell.Value() );
-        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 );
-          idsrow.SetCellValue( daycolumn, [Number]cell.Value() );
-          idsrow.SetCellValue( weekcolumn, [Number]cell.Value() );
-          idsrow.SetCellValue( monthcolumn, [Number]cell.Value() );
-        }
-      }
-    }
-    traverse( interface, InterfaceForecast, forecast, forecast.Origin() = 'PPA' ){
-      idsrow              := idstable.GetRowByUnit( forecast.PartNumber(), forecast.Factory() );
-      daycolumn           := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), forecast.Date() );
-      weekcolumn          := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), forecast.Date() );
-      monthcolumn         := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), forecast.Date() );
-      idsrow.SetCellValue( daycolumn, [Number]forecast.Quantity() );
-      idsrow.SetCellValue( weekcolumn, [Number]forecast.Quantity() );
-      idsrow.SetCellValue( monthcolumn, [Number]forecast.Quantity() );
-    }
-    
-    source.Delete();
-  *]
-}
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
index 3853c35..7e014c0 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
@@ -13,7 +13,6 @@
     owner.FPImportData( relflush );
     ccunit                    := FinancialProductionReport::GetDefaultCCUnit();
     dlunit                    := FinancialProductionReport::GetDefaultDLUnit();
-    //allunit                   := FinancialProductionReport::GetDefaultAllUnit();
     source                    := owner.FinancialProductionSource( relnew, IsImport := false, Name := FinancialProductionReport::GetDefaultName() );
     table                     := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
     source.FinancialProductionReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
@@ -29,15 +28,13 @@
       
       if( iscc or isdl ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() 
-                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and ( pispip.Start() + Duration::Days( 1 ) ).Date() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
           //鑾峰彇宸ュ巶琛�
           factoryrow          := table.GetRowByUnit( pisp.Product_MP(), ifexpr( iscc, ccunit, dlunit ) );
-          //鑾峰彇鍚堣琛�
-    //      allrow              := table.GetRowByUnit( pisp.Product_MP(), allunit );
           productids.Add( pisp.ProductID() );
           //褰損roduct planning鐨勬棩鏈熷尯闂村湪闇�瑕佺殑鏃ユ湡鍖洪棿鍐� 
-          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ){
-            dayperiodtime     := pispip.Start().Date();
+          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and ( pispip.Start() + Duration::Days( 1 ) ).Date() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ){
+            dayperiodtime     := ( pispip.Start() + Duration::Days( 1 ) ).Date();
             dayperiodname     := dayperiodtime.Format( "M2/D2/Y" );
             periodtime        := dayperiodtime.StartOfMonth();
             periodname        := periodtime.Format( "M2/D2/Y" );
@@ -51,8 +48,5 @@
         }
       }
     }
-    
-    //factorys                  := selectset( owner, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
-    //showtable.Generate( search, factorys, productids );
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
index 1d0e66d..7fa7381 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
@@ -13,7 +13,6 @@
     }
     owner.FSImportData( relflush );
     productids                := construct( Strings );
-    //allunit                   := FinancialSalesReport::GetDefaultAllUnit();
     ccunit                    := FinancialSalesReport::GetDefaultCCUnit();
     dlunit                    := FinancialSalesReport::GetDefaultDLUnit();
     ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC();
@@ -32,7 +31,7 @@
     table.GenerateColumn( owner );
     
     //棣栧厛鍦╢orecast鐣岄潰鏌ユ壘sales segment涓洪暱鏄ョ殑鎵�鏈夐渶姹傦紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝侊紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲�
-    traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() <= startofnextyear and forecast.Quantity() <> 0 
+    traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and ( forecast.StartDate() + Duration::Days( 1 ) ).Date() < startofnextyear and forecast.Quantity() <> 0 
               and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){
       salessegment            := forecast.SalesSegment_MP();
       parentsalessegments     := salessegment.GetAllParent();
@@ -47,17 +46,14 @@
       //Forecast鐨凷ales Segment涓洪暱鏄ワ紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝佹眹鎬�
       //澶ц繛璐㈠姟閿�閲忥細棣栧厛鍦╢orecast鐣岄潰鏌ユ壘Sales Segment鏄ぉ娲ュ拰浣涘北鐨勬墍鏈夐渶姹傦紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲� and forecast.Product_MP().MQBMLB() = 'MLB' ) 
       if( ( iscc and product.MQBMLB() = 'MLB' ) or ( isccrent and product.MQBMLB() = 'MQB' ) or isdl ){
-        
-        //鑾峰彇鍚堣琛�
-    //    allrow               := table.GetRow( allunit, product );
         //鑾峰彇宸ュ巶琛�
         factoryrow           := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product );
       
         productids.Add( forecast.ProductID() );
-        traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
-          dayperiodtime      := psdip.StartDate();
+        traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 and ( psdip.StartDate() + Duration::Days( 1 ) ).Date() < startofnextyear ){
+          dayperiodtime      := ( psdip.StartDate() + Duration::Days( 1 ) ).Date();//psdip.StartDate();
           dayperiodname      := dayperiodtime.Format( "M2/D2/Y" );
-          periodtime         := psdip.StartDate().StartOfMonth();
+          periodtime         := dayperiodtime.StartOfMonth();
           periodname         := periodtime.Format( "M2/D2/Y" );
     //      info( '-------------------------', periodname, periodtime );
           daycolumn          := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
@@ -67,23 +63,21 @@
           
           factoryrow.Initialize( column, quantity );
           factoryrow.Initialize( daycolumn, quantity );
-    //      allrow.Initialize( column, quantity );
         }
       }
     }
     //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴擄紝鍙朜ew supply瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
     traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID() = '澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�' ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf()
-                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear 
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and ( pispip.Start() + Duration::Days( 1 ) ).Date() < startofnextyear 
                               and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//浜у搧涓篗QB
           product           := pisp.Product_MP();
-    //      allrow            := table.GetRow( allunit, product );
           factoryrow        := table.GetRow( dlunit, product );
           productids.Add( pisp.ProductID() );
           traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
-                    and pispip.Period_MP().StartDate() < startofnextyear 
+                    and ( pispip.Start() + Duration::Days( 1 ) ).Date() < startofnextyear 
                     and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
-            dayperiodtime   := pispip.Start().Date();
+            dayperiodtime   := ( pispip.Start() + Duration::Days( 1 ) ).Date();//pispip.Start().Date();
             dayperiodname   := dayperiodtime.Format( "M2/D2/Y" );
             periodtime      := dayperiodtime.StartOfMonth();
             periodname      := periodtime.Format( "M2/D2/Y" );
@@ -93,7 +87,6 @@
             
             factoryrow.Initialize( column, quantity );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
             factoryrow.Initialize( daycolumn, quantity );
-    //        allrow.Initialize( column, quantity );
           }
         }
     //  }
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl
index ccbf580..6eeb85d 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/Method_GetRow.qbl
@@ -1,16 +1,16 @@
 Quintiq file version 2.0
 #parent: #root
 Method GetRow (
-  const AssemblyOnlinePlanRow aoprow
+  const NewOfflinePlanRow noprow
 ) as OfflinePlanArchiveRow
 {
   TextBody:
   [*
     // 鐢勫叞楦� Oct-11-2024 (created)
-    row := selectobject( this, Row, row, row.ProductID() = aoprow.ProductID() and row.ProductionLine() = aoprow.ProductionLine() and row.Type() = aoprow.Type() );
+    row := selectobject( this, Row, row, row.ProductID() = noprow.ProductID() and row.ProductionLine() = noprow.ProductionLine() and row.Type() = noprow.Type() );
     
     if( isnull( row ) ){
-      row := this.Row( relnew, ProductID := aoprow.ProductID(), ProductionLine := aoprow.ProductionLine(), Type := aoprow.Type() );
+      row := this.Row( relnew, ProductID := noprow.ProductID(), ProductionLine := noprow.ProductionLine(), Type := noprow.Type() );
       //鍒濆鍖栧崟鍏冩牸
       row.InitializeCell();
     }
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_GenerateData.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_GenerateData.qbl
deleted file mode 100644
index 0cbe54d..0000000
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_GenerateData.qbl
+++ /dev/null
@@ -1,62 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod GenerateData (
-  InterfaceDataset interface,
-  RecycleBin recycle,
-  const Archive archive
-)
-{
-  Description: '鐢熸垚鍙互涓嬪彂鐨勫鎴烽渶姹傦紙PPA+IDS锛夋暟鎹�'
-  TextBody:
-  [*
-    // 鐢勫叞楦� Aug-20-2024 (created)
-    interface.CustomerDemandIDS( relflush );
-    interface.CustomerDemandIDSSearch( relflush );
-    allunit               := CustomerDemandIDS::GetDefaultAllUnit();
-    interface.CustomerDemandIDSSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit );
-    idstable              := interface.CustomerDemandIDS( relnew, ID := '瀹㈡埛闇�姹�', Name := '瀹㈡埛闇�姹�' );
-    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" );
-    idsdates              := selectuniquevalues( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() > 2, cnv2.Convert( column.Name() ) );
-    ppadates              := selectuniquevalues( interface, InterfaceForecast, forecast, forecast.Origin() = 'PPA', forecast.Date() );
-    //ppadates              := construct( Dates );
-    //traverse( macroplan, SalesDemand.astype( Forecast ), forecast, forecast.Origin() = 'PPA' ){
-    //  ppadates            := ppadates.Union( selectuniquevalues( forecast, PlanningSalesDemandInPeriod, salesdemand, salesdemand.StartDate() ) );
-    //}
-    periods               := idsdates.Union( ppadates );
-    periods               := selectuniquevalues( periods, Elements, e, e );
-    idstable.GenerateColumn( periods.Sort() );
-    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 );
-        idsrow            := idstable.GetRowByUnit( productcell.Value(), factorycell.Value() );
-        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 );
-          idsrow.SetCellValue( daycolumn, [Number]cell.Value() );
-          idsrow.SetCellValue( weekcolumn, [Number]cell.Value() );
-          idsrow.SetCellValue( monthcolumn, [Number]cell.Value() );
-        }
-      }
-    }
-    traverse( interface, InterfaceForecast, forecast, forecast.Origin() = 'PPA' ){
-      idsrow              := idstable.GetRowByUnit( forecast.PartNumber(), forecast.Factory() );
-      daycolumn           := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Day(), forecast.Date() );
-      weekcolumn          := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Week(), forecast.Date() );
-      monthcolumn         := idstable.GetColumnByTimeUnit( Translations::MP_GlobalParameters_Month(), forecast.Date() );
-      idsrow.SetCellValue( daycolumn, [Number]forecast.Quantity() );
-      idsrow.SetCellValue( weekcolumn, [Number]forecast.Quantity() );
-      idsrow.SetCellValue( monthcolumn, [Number]forecast.Quantity() );
-    }
-    
-    source.Delete();
-  *]
-}
diff --git a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
index a22c383..9b9f152 100644
--- a/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
+++ b/_Main/BL/Type_OfflinePlanArchiveVersion/StaticMethod_RefreshData.qbl
@@ -7,30 +7,33 @@
 {
   TextBody:
   [*
-    //鏍规嵁褰撳墠鐗堟湰鐨勮閰嶄笂绾胯鍒�
-    allunit                := AssemblyOnlinePlanVersion::GetDefaultAllUnit();
-    name                   := AssemblyOnlinePlanVersion::GetDefaultName();
-    search                 := interface.AssemblyOnlinePlanVersionSearch( relnew, Product := allunit, ProductionLine := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
-    table                  := selectobject( interface, AssemblyOnlinePlanVersion, version, not version.IsShow() );
+    //鏍规嵁褰撳墠鐗堟湰鐨勪笅绾胯鍒�
+    allunit                := OfflinePlanArchiveVersion::GetDefaultAllUnit();
+    name                   := OfflinePlanArchiveVersion::GetDefaultName();
+    search                 := interface.OfflinePlanArchiveSearch( relnew, Product := allunit, ProductionLine := allunit, TimeUnit := Translations::MP_GlobalParameters_Day(), Unit := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
+    table                  := selectobject( interface, OfflinePlanArchiveVersion, version, not version.IsShow() );
     if( isnull( table ) ){
-      table                := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name );
+      table                := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name );
     }
-    showtable              := selectobject( interface, AssemblyOnlinePlanVersion, version, version.IsShow() );
+    showtable              := selectobject( interface, OfflinePlanArchiveVersion, version, version.IsShow() );
     if( isnull( table ) ){
-      showtable               := interface.AssemblyOnlinePlanVersion( relnew, ID := name, Name := name, IsShow := true );
+      showtable               := interface.OfflinePlanArchiveVersion( relnew, ID := name, Name := name, IsShow := true );
     }
-    aopcolumns             := selectuniquevalues(  macroPlan, AssemblyOnlinePlanColumn, aopcolumn, not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = aopcolumn.ColumnDate() ), aopcolumn.ColumnDate() );
-    table.GenerateColumn( aopcolumns, search.TimeUnit(), search.StartDate(), search.EndDate() );
-    traverse( macroPlan, AssemblyOnlinePlanRow, aoprow ){
-      row                  := table.GetRow( aoprow );
-      traverse( aoprow, AssemblyOnlinePlanCell, aopcell ){
-        column             := selectobject( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = aopcell.AssemblyOnlinePlanColumn().ColumnDate() );
-        cell               := selectobject( row, Cell, cell, cell.Column() = column );
-        cell.InventoryWeight( aopcell.InventoryWeight() );
-        cell.ProductionSerialNumber( aopcell.ProductionSerialNumber() );
-        cell.Quantity( aopcell.Quantity() );
-        cell.Shift( aopcell.Shift() );
-        cell.Value( aopcell.Value() );
+    nopcolumns             := selectuniquevalues(  macroPlan, NewOfflinePlanTable.NewOfflinePlanColumn, nopcolumn, not exists( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = nopcolumn.StartDate() ), nopcolumn.StartDate() );
+    table.GenerateColumn( nopcolumns, search.TimeUnit(), search.StartDate(), search.EndDate() );
+    traverse( macroPlan, NewOfflinePlanTable, noptable ){
+      
+      traverse( noptable, NewOfflinePlanRow, noprow ){
+        row                  := table.GetRow( noprow );
+        traverse( noprow, NewOfflinePlanCell, nopcell ){
+          column             := selectobject( table, Column, column, column.TimeUnit() = Translations::MP_GlobalParameters_Day() and column.StartDate() = nopcell.NewOfflinePlanColumn().StartDate() );
+          cell               := selectobject( row, Cell, cell, cell.Column() = column );
+          cell.InventoryWeight( nopcell.InventoryWeight() );
+    //      cell.ProductionSerialNumber( nopcell.ProductionSerialNumber() );
+          cell.Quantity( nopcell.Quantity() );
+    //      cell.Shift( nopcell.Shift() );
+    //      cell.Value( nopcell.Value() );
+        }
       }
     }
     //showtable.Generate( search, products );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
index 5d56dca..10f9121 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupArchiveReport.def
@@ -27,6 +27,17 @@
         Taborder: 1
       ]
     }
+    Component ButtonOfflinePlanArchiveReport
+    {
+      #keys: '[415136.0.1255420048]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'PAPER_JET'
+        Label: 'Offline plan archive'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonOfflinePlanArchiveRe.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonOfflinePlanArchiveRe.def
new file mode 100644
index 0000000..1b1824d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonOfflinePlanArchiveRe.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupArchiveReport/ButtonOfflinePlanArchiveReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupArchiveReport_ButtonOfflinePlanArchiveReport_OnClick
+{
+  #keys: '[415136.0.1255420166]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Offline__plan_archive_report", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupPublish_ButtonPublish_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupPublish_ButtonPublish_OnClick.def
new file mode 100644
index 0000000..888bb0d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupPublish_ButtonPublish_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupPublish/ButtonPublish
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupPublish_ButtonPublish_OnClick
+{
+  #keys: '[415136.0.1255982999]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogPublishPlan );
+      
+      ApplicationMacroPlanner.ShowFormModal( dlg );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlActions.def
new file mode 100644
index 0000000..5b65a74
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[415136.0.1255981718]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[415136.0.1255981722]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[415136.0.1255981724]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAll\043720.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAll\043720.def"
new file mode 100644
index 0000000..38e1838
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAll\043720.def"
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component pnlAll id:pnlAll_720
+{
+  #keys: '[415136.0.1255982465]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblAll
+    {
+      #keys: '[415136.0.1255982466]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: 'All'
+        Taborder: 0
+      ]
+    }
+    Component cbAll
+    {
+      #keys: '[415136.0.1255982467]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 5
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAssembleOnlinePlan\043679.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAssembleOnlinePlan\043679.def"
new file mode 100644
index 0000000..738092a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlAssembleOnlinePlan\043679.def"
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component pnlAssembleOnlinePlan id:pnlAssembleOnlinePlan_679
+{
+  #keys: '[415136.0.1255982426]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblAssembleOnlinePlan
+    {
+      #keys: '[415136.0.1255982427]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '瑁呴厤涓婄嚎璁″垝'
+        Taborder: 0
+      ]
+    }
+    Component cbAssembleOnlinePlan
+    {
+      #keys: '[415136.0.1255982428]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlContent.def
new file mode 100644
index 0000000..ab5e221
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlContent.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[415136.0.1255981716]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: pnlCustomDemand_462
+    #child: pnlOfflinePlan_520
+    #child: pnlAssembleOnlinePlan_679
+    #child: pnlInventoryPlan_119
+    #child: pnlAll_720
+    #child: pnlShiftPlan_780
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlCustomDemand\043462.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlCustomDemand\043462.def"
new file mode 100644
index 0000000..4255081
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlCustomDemand\043462.def"
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component pnlCustomDemand id:pnlCustomDemand_462
+{
+  #keys: '[415136.0.1255981813]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblCustomDemand
+    {
+      #keys: '[415136.0.1255981814]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鍏ㄥ勾鏃ュ害闇�姹�'
+        Taborder: 0
+      ]
+    }
+    Component cbCustomDemand
+    {
+      #keys: '[415136.0.1255981815]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlInventoryPlan\043119.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlInventoryPlan\043119.def"
new file mode 100644
index 0000000..fde59fb
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlInventoryPlan\043119.def"
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component pnlInventoryPlan id:pnlInventoryPlan_119
+{
+  #keys: '[415136.0.1255982447]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblInventoryPlan
+    {
+      #keys: '[415136.0.1255982448]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '璁″垝搴撳瓨'
+        Taborder: 0
+      ]
+    }
+    Component cbInventoryPlan
+    {
+      #keys: '[415136.0.1255982449]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlOfflinePlan\043520.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlOfflinePlan\043520.def"
new file mode 100644
index 0000000..c14d76e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlOfflinePlan\043520.def"
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component pnlOfflinePlan id:pnlOfflinePlan_520
+{
+  #keys: '[415136.0.1255981829]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblOfflinePlan
+    {
+      #keys: '[415136.0.1255981830]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '涓嬬嚎璁″垝'
+        Taborder: 0
+      ]
+    }
+    Component cbOfflinePlan
+    {
+      #keys: '[415136.0.1255981831]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlShiftPlan\043780.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlShiftPlan\043780.def"
new file mode 100644
index 0000000..ff7f552
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Component_pnlShiftPlan\043780.def"
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+Component pnlShiftPlan id:pnlShiftPlan_780
+{
+  #keys: '[415136.0.1255982410]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component lblShiftPlan
+    {
+      #keys: '[415136.0.1255982411]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鐝璁″垝'
+        Taborder: 0
+      ]
+    }
+    Component cbShiftPlan
+    {
+      #keys: '[415136.0.1255982412]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Method_OnOK.def
new file mode 100644
index 0000000..f3ed1c0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Method_OnOK.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnOK () id:Method_DialogPublishPlan_OnOK
+{
+  #keys: '[415136.0.1255982634]'
+  Body:
+  [*
+    this.ApplyChanges();
+    
+      showlabel := '鏄惁鍙戦��';
+      plannames := construct( Strings );
+      if( cbCustomDemand.Checked() ){
+        plannames.Add( lblCustomDemand.Label() );
+      }
+      if( cbOfflinePlan.Checked() ){
+        plannames.Add( lblOfflinePlan.Label() );
+      }
+      if( cbShiftPlan.Checked() ){
+        plannames.Add( lblShiftPlan.Label() );
+      }
+      if( cbAssembleOnlinePlan.Checked() ){
+        plannames.Add( lblAssembleOnlinePlan.Label() );
+      }
+      if( cbInventoryPlan.Checked() ){
+        plannames.Add( lblInventoryPlan.Label() );
+      }
+    
+      showlabel := showlabel.Concat( plannames.Concatenate( "銆�" ) ).Concat( '锛�' );
+    
+      if( WebMessageBox::Question( this, showlabel, 'OK|Cancel' ) = 0 ){
+      }
+    
+    this.Close();
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..589f151
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[415136.0.1255981728]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..18496fa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[415136.0.1255981727]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not ( not cbCustomDemand.Checked() and not cbOfflinePlan.Checked() and not cbShiftPlan.Checked() and not cbAssembleOnlinePlan.Checked() and not cbInventoryPlan.Checked() );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      Form.OnOK();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlAll_720_cbAll_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlAll_720_cbAll_OnChanged.def
new file mode 100644
index 0000000..6b953b1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/Response_pnlAll_720_cbAll_OnChanged.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: pnlAll_720/cbAll
+Response OnChanged () id:Response_pnlAll_720_cbAll_OnChanged
+{
+  #keys: '[415136.0.1255982464]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( this.Checked() ){
+        cbCustomDemand.Checked( true );
+        cbOfflinePlan.Checked( true );
+        cbShiftPlan.Checked( true );
+        cbAssembleOnlinePlan.Checked( true );
+        cbInventoryPlan.Checked( true );
+      }else{
+        cbCustomDemand.Checked( false );
+        cbOfflinePlan.Checked( false );
+        cbShiftPlan.Checked( false );
+        cbAssembleOnlinePlan.Checked( false );
+        cbInventoryPlan.Checked( false );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/_ROOT_Component_DialogPublishPlan.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/_ROOT_Component_DialogPublishPlan.def
new file mode 100644
index 0000000..2a0601d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPublishPlan/_ROOT_Component_DialogPublishPlan.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogPublishPlan
+{
+  #keys: '[415136.0.1255981714]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Image: 'INBOX_OUT'
+    Padding: 'false'
+    Title: '鍙戝竷璁″垝'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Method_OnOK.def b/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Method_OnOK.def
index 0a4ead9..46f7baf 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Method_OnOK.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Method_OnOK.def
@@ -6,23 +6,16 @@
   Body:
   [*
     this.ApplyChanges();
-    info( '------------------',cbCustomDemand.Checked() 
-        ,cbOfflinePlan.Checked() 
-        ,cbShiftPlan.Checked() 
-        ,cbAssembleOnlinePlan.Checked() 
-        ,cbInventoryPlan.Checked() 
-        ,cbTRCDemand.Checked() 
-        ,cbTransferPlan.Checked() 
-        ,cbPackagePlan.Checked() );
-      showlabel := '鏄惁瀛樻。';
-    if( cbCustomDemand.Checked() 
-        or cbOfflinePlan.Checked() 
-        or cbShiftPlan.Checked() 
-        or cbAssembleOnlinePlan.Checked() 
-        or cbInventoryPlan.Checked() 
-        or cbTRCDemand.Checked() 
-        or cbTransferPlan.Checked() 
-        or cbPackagePlan.Checked() ){
+    
+    //showlabel := '鏄惁瀛樻。';
+    //if( cbCustomDemand.Checked() 
+    //    or cbOfflinePlan.Checked() 
+    //    or cbShiftPlan.Checked() 
+    //    or cbAssembleOnlinePlan.Checked() 
+    //    or cbInventoryPlan.Checked() 
+    //    or cbTRCDemand.Checked() 
+    //    or cbTransferPlan.Checked() 
+    //    or cbPackagePlan.Checked() ){
       showlabel := '鏄惁瀛樻。';
       plannames := construct( Strings );
       if( cbCustomDemand.Checked() ){
@@ -50,14 +43,13 @@
         plannames.Add( lblPackagePlan.Label() );
       }
       showlabel := showlabel.Concat( plannames.Concatenate( "銆�" ) ).Concat( '锛�' );
-      info( '*****************************' );
+    //  info( '*****************************' );
       if( WebMessageBox::Question( this, showlabel, 'OK|Cancel' ) = 0 ){
       }
-    }else{
-      info( '************###########*****************' );
-      WebMessageBox::Information( this, '鏈�夋嫨浠讳綍璁″垝杩涜瀛樻。' )
-    }
-    
+    //}else{
+    //  info( '************###########*****************' );
+    //  WebMessageBox::Information( this, '鏈�夋嫨浠讳綍璁″垝杩涜瀛樻。' )
+    //}
     this.Close();
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Response_pnlActions_btnOk_OnClick.def
index 133d6e9..7245689 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogReportArchiveConfirm/Response_pnlActions_btnOk_OnClick.def
@@ -4,6 +4,11 @@
 {
   #keys: '[415136.0.1249021383]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not ( not cbCustomDemand.Checked() and not cbOfflinePlan.Checked() and not cbShiftPlan.Checked() and not cbAssembleOnlinePlan.Checked() and not cbInventoryPlan.Checked() 
+        and not cbTRCDemand.Checked() and not cbTransferPlan.Checked() and not cbPackagePlan.Checked() );
+  *]
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProductLine_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProductLine_ddslMQBMLB_OnSelectionChanged.def
index cd9201e..8f8312f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProductLine_ddslMQBMLB_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProductLine_ddslMQBMLB_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().ProductionLine() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().ProductionLine() <> selection ){
         dhSearch.Data().ProductionLine( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProduct_937_ddslProduct_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProduct_937_ddslProduct_OnSelectionChanged.def
index e7e654d..59ad2ac 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProduct_937_ddslProduct_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelProduct_937_ddslProduct_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Product() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Product() <> selection ){
         dhSearch.Data().Product( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelUnit_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
index 82300e2..4b71402 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormAssemblyOnlinePlanVersion/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Unit() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Unit() <> selection ){
         dhSearch.Data().Unit( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration.def
index 3780ff7..216bcb3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration.def
@@ -15,7 +15,6 @@
         Taborder: 0
       ]
     }
-    #child: PanelGeneration743
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration743.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration743.def
deleted file mode 100644
index e3a5cc0..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelGeneration743.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-Component PanelGeneration743
-{
-  #keys: '[415136.0.1137311846]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ddslGeneration859
-    {
-      #keys: '[415136.0.1137311847]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: 'Generation'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelProduct.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelProduct.def
index 9ec5aa3..b932d01 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelProduct.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Component_PanelProduct.def
@@ -19,6 +19,7 @@
   ]
   Properties:
   [
+    FixedSize: true
     Taborder: 3
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnSelectionChanged.def
deleted file mode 100644
index 66ebb77..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnSelectionChanged.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelGeneration743/ddslGeneration859
-Response OnSelectionChanged () id:Response_PanelGeneration743_ddslGeneration859_OnSelectionChanged
-{
-  #keys: '[415136.0.1137311844]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      if( dhSearch.Data().Generation() <> selection ){
-        dhSearch.Data().Generation( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration_ddslGeneration_OnSelectionChanged\043187.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration_ddslGeneration_OnSelectionChanged\043187.def"
index 0b31a25..4bd09b7 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration_ddslGeneration_OnSelectionChanged\043187.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration_ddslGeneration_OnSelectionChanged\043187.def"
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Generation() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
         dhSearch.Data().Generation( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelMLBMQB_ddslMQBMLB_OnSelectionChanged\043456.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelMLBMQB_ddslMQBMLB_OnSelectionChanged\043456.def"
index 5aa3925..7323c5e 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelMLBMQB_ddslMQBMLB_OnSelectionChanged\043456.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelMLBMQB_ddslMQBMLB_OnSelectionChanged\043456.def"
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().MqbMlb() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
         dhSearch.Data().MqbMlb( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelPower_ddslPower_OnSelectionChanged\043136.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelPower_ddslPower_OnSelectionChanged\043136.def"
index 12302f8..e1f38f9 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelPower_ddslPower_OnSelectionChanged\043136.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelPower_ddslPower_OnSelectionChanged\043136.def"
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Power() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
         dhSearch.Data().Power( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelProduct_ddslProduct_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelProduct_ddslProduct_OnSelectionChanged.def
index 244f1c8..5213ddd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelProduct_ddslProduct_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelProduct_ddslProduct_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Product() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Product() <> selection ){
         dhSearch.Data().Product( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def
index 8efba69..f8c1a45 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/_ROOT_Component_FormCustomerDemandPPAIDS.def
@@ -14,6 +14,21 @@
       #keys: '[415136.0.1121750597]'
       BaseType: 'WebDataHolder'
       Databinding: 'CustomerDemandIDSSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1256142023]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'CustomerDemandIDSSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 0
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
new file mode 100644
index 0000000..59c4aeb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_MatrixEditorTable.def
@@ -0,0 +1,104 @@
+Quintiq file version 2.0
+Component MatrixEditorTable
+{
+  #keys: '[415136.0.1252790401]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.1252790402]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCells
+        {
+          #keys: '[415136.0.1252790403]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: 'object.Column().TimeUnit() = search.TimeUnit() and object.Column().StartDate() >= search.StartDate() and object.Column().StartDate() <= search.EndDate()'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'OfflinePlanArchiveVersion.Row.Cell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Value'
+        Column: 'Column'
+        Row: 'Row'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.1252790404]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRows
+        {
+          #keys: '[415136.0.1252790405]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            Description: "( search.Generation() = '<All>' or object.Product_MP().Generation() = search.Generation() ) and ( search.MqbMlb() = '<All>' or object.Product_MP().MQBMLB() = search.MqbMlb() ) and ( search.Power() = '<All>' or object.Product_MP().Power() = search.Power() )"
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: "( search.Product() = '<All>' or object.ProductID() = search.Product() ) and ( search.ProductionLine() = '<All>' or object.ProductionLine() = search.ProductionLine() )"
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'OfflinePlanArchiveVersion.Row'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'ProductID'
+        SortCriteria: 'ProductID'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.1252790406]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumns
+        {
+          #keys: '[415136.0.1252790407]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            FilterArguments: 'search:QMacroPlanner::FormAssemblyOnlinePlanVersion.dhSearch'
+            FixedFilter: 'object.TimeUnit() = search.TimeUnit() and object.StartDate() >= search.StartDate() and object.StartDate() <= search.EndDate()'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'OfflinePlanArchiveVersion.Column'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'ColumnName'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable
+    #child: matrixeditorContextMenuTable
+  ]
+  Properties:
+  [
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
new file mode 100644
index 0000000..c507369
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelHeader.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component PanelHeader
+{
+  #keys: '[415136.0.1252790294]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelProduct
+    #child: PanelPeriod_858
+    #child: PanelTimeUnit
+    #child: PanelOperation
+    #child: PanelProductLine_603
+    #child: PanelUnit_844
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelOperation.def
new file mode 100644
index 0000000..e4f2a8d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelOperation.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelOperation
+{
+  #keys: '[415136.0.1252790299]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.1252790300]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 5
+    Visible: false
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelPeriod\043858.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelPeriod\043858.def"
new file mode 100644
index 0000000..1afed44
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelPeriod\043858.def"
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelPeriod id:PanelPeriod_858
+{
+  #keys: '[415136.0.1252790303]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DateSelectorStart
+    {
+      #keys: '[415136.0.1252790304]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start date'
+        Taborder: 0
+      ]
+    }
+    Component DateSelectorEnd
+    {
+      #keys: '[415136.0.1252790305]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 9999-12-31
+        Label: 'End date'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProduct.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProduct.def
new file mode 100644
index 0000000..1e02c6b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProduct.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelProduct
+{
+  #keys: '[415136.0.1252790306]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslProduct
+    {
+      #keys: '[415136.0.1252790307]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        FixedSize: false
+        Label: 'Product'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProductLine\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProductLine\043603.def"
new file mode 100644
index 0000000..8ab29fe
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelProductLine\043603.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelProductLine id:PanelProductLine_603
+{
+  #keys: '[415136.0.1252790297]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.1252790298]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def
new file mode 100644
index 0000000..4c488b9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTable.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable
+{
+  #keys: '[415136.0.1252790400]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTimeUnit.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTimeUnit.def
new file mode 100644
index 0000000..ab3b485
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelTimeUnit.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component PanelTimeUnit
+{
+  #keys: '[415136.0.1252790301]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component RadioButtonGroupUseForTimeUnit
+    {
+      #keys: '[415136.0.1252790302]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        ButtonLabels: 'Day;Week;Month'
+        ButtonValues: 'Day;Week;Month'
+        Orientation: 'horizontal'
+        Taborder: 0
+        Title: 'Periods'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelUnit\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelUnit\043844.def"
new file mode 100644
index 0000000..9539dc9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_PanelUnit\043844.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelUnit id:PanelUnit_844
+{
+  #keys: '[415136.0.1252790295]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslUnit
+    {
+      #keys: '[415136.0.1252790296]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Unit'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixEditorActionBarPageTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixEditorActionBarPageTable.def
new file mode 100644
index 0000000..802811d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixEditorActionBarPageTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable
+{
+  #keys: '[415136.0.1252790408]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixeditorContextMenuTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixeditorContextMenuTable.def
new file mode 100644
index 0000000..dfbd80d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Component_matrixeditorContextMenuTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable
+{
+  #keys: '[415136.0.1252790409]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorEnd_OnChanged.def
new file mode 100644
index 0000000..daae334
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorEnd_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod_858/DateSelectorEnd
+Response OnChanged () id:Response_PanelPeriod_858_DateSelectorEnd_OnChanged
+{
+  #keys: '[415136.0.1252790286]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() < DateSelectorStart.Date() ){
+        this.HintError( 'The end date cannot be less than the start date!' );
+      }else{
+        if( dhSearch.Data().EndDate() <> this.Date() ){
+          dhSearch.Data().EndDate( this.Date() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorStart_OnChanged.def
new file mode 100644
index 0000000..8343107
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelPeriod_858_DateSelectorStart_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod_858/DateSelectorStart
+Response OnChanged () id:Response_PanelPeriod_858_DateSelectorStart_OnChanged
+{
+  #keys: '[415136.0.1252790287]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() > DateSelectorEnd.Date() ){
+        this.HintError( 'The start date cannot be later than the end date!' );
+      }else{
+        if( dhSearch.Data().StartDate() <> this.Date() ){
+          dhSearch.Data().StartDate( this.Date() );
+      //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnCreated.def
similarity index 64%
copy from _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def
copy to _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnCreated.def
index ba613be..af3422d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnCreated.def
@@ -1,15 +1,15 @@
 Quintiq file version 2.0
-#parent: PanelGeneration743/ddslGeneration859
-Response OnCreated () id:Response_PanelGeneration743_ddslGeneration859_OnCreated
+#parent: PanelProductLine_603/ddslMQBMLB
+Response OnCreated () id:Response_PanelProductLine_603_ddslMQBMLB_OnCreated
 {
-  #keys: '[415136.0.1137311845]'
+  #keys: '[415136.0.1252790291]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebComponent_OnCreated'
   QuillAction
   {
     Body:
     [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      values := selectuniquevalues( InterfaceDataset, AssemblyOnlinePlanVersion.Row, row, true, row.ProductionLine() );
       
       valueString := values.Concatenate( ";" );
       valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnSelectionChanged.def
new file mode 100644
index 0000000..3f7615c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProductLine_603_ddslMQBMLB_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelProductLine_603/ddslMQBMLB
+Response OnSelectionChanged () id:Response_PanelProductLine_603_ddslMQBMLB_OnSelectionChanged
+{
+  #keys: '[415136.0.1252790290]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().ProductionLine() <> selection ){
+        dhSearch.Data().ProductionLine( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnCreated.def
similarity index 65%
rename from _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnCreated.def
index ba613be..a87af75 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnCreated.def
@@ -1,15 +1,15 @@
 Quintiq file version 2.0
-#parent: PanelGeneration743/ddslGeneration859
-Response OnCreated () id:Response_PanelGeneration743_ddslGeneration859_OnCreated
+#parent: PanelProduct/ddslProduct
+Response OnCreated () id:Response_PanelProduct_ddslProduct_OnCreated
 {
-  #keys: '[415136.0.1137311845]'
+  #keys: '[415136.0.1252790285]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebComponent_OnCreated'
   QuillAction
   {
     Body:
     [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      values := selectuniquevalues( InterfaceDataset, AssemblyOnlinePlanVersion.Row, row, true, row.ProductID() );
       
       valueString := values.Concatenate( ";" );
       valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnSelectionChanged.def
new file mode 100644
index 0000000..95d20d3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelProduct_ddslProduct_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelProduct/ddslProduct
+Response OnSelectionChanged () id:Response_PanelProduct_ddslProduct_OnSelectionChanged
+{
+  #keys: '[415136.0.1252790284]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Product() <> selection ){
+        dhSearch.Data().Product( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
new file mode 100644
index 0000000..533f7a1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelTimeUnit/RadioButtonGroupUseForTimeUnit
+Response OnChanged () id:Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged
+{
+  #keys: '[415136.0.1252790289]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀� 
+      if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
+        dhSearch.Data().TimeUnit( this.BoundValue() );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnCreated.def
new file mode 100644
index 0000000..c047bee
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelTimeUnit/RadioButtonGroupUseForTimeUnit
+Response OnCreated () id:Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnCreated
+{
+  #keys: '[415136.0.1252790288]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.ButtonValues( Translations::MP_GlobalParameters_Day() + ';' + Translations::MP_GlobalParameters_Week() + ';' + Translations::MP_GlobalParameters_Month() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnCreated.def
similarity index 65%
copy from _Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def
copy to _Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnCreated.def
index ba613be..b3212b9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCustomerDemandPPAIDS/Response_PanelGeneration743_ddslGeneration859_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnCreated.def
@@ -1,15 +1,15 @@
 Quintiq file version 2.0
-#parent: PanelGeneration743/ddslGeneration859
-Response OnCreated () id:Response_PanelGeneration743_ddslGeneration859_OnCreated
+#parent: PanelUnit_844/ddslUnit
+Response OnCreated () id:Response_PanelUnit_844_ddslUnit_OnCreated
 {
-  #keys: '[415136.0.1137311845]'
+  #keys: '[415136.0.1252790293]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebComponent_OnCreated'
   QuillAction
   {
     Body:
     [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      values := selectuniquevalues( InterfaceDataset, AssemblyOnlinePlanVersion.Row, row, true, row.Type() );
       
       valueString := values.Concatenate( ";" );
       valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnSelectionChanged.def
new file mode 100644
index 0000000..4757452
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/Response_PanelUnit_844_ddslUnit_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelUnit_844/ddslUnit
+Response OnSelectionChanged () id:Response_PanelUnit_844_ddslUnit_OnSelectionChanged
+{
+  #keys: '[415136.0.1252790292]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Unit() <> selection ){
+        dhSearch.Data().Unit( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() ); 
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
new file mode 100644
index 0000000..df873ef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanArchive/_ROOT_Component_FormOfflinePlanArchive.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormOfflinePlanArchive
+{
+  #keys: '[415136.0.1252790190]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component dhSearch id:dhSearch_715
+    {
+      #keys: '[415136.0.1252790226]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'OfflinePlanArchiveSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1252790227]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InterfaceDataset'
+            Source: 'InterfaceDataset'
+            Taborder: 0
+            Transformation: 'OfflinePlanArchiveSearch'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: PanelHeader
+    #child: PanelTable
+  ]
+  Properties:
+  [
+    Image: 'PAPER_JET'
+    Title: 'Offline plan archive'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Offline__plan_archive_report.vw b/_Main/UI/MacroPlannerWebApp/Views/Offline__plan_archive_report.vw
new file mode 100644
index 0000000..462b783
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Offline__plan_archive_report.vw
@@ -0,0 +1,116 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormOfflinePlanArchive
+      {
+        title: 'QMacroPlanner::FormOfflinePlanArchive'
+        shown: true
+        componentID: 'QMacroPlanner::FormOfflinePlanArchive'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormOfflinePlanArchive_PanelHeader
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelUnit
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelProductLine
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelProduct
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelPeriod
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelTimeUnit
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelOperation
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormOfflinePlanArchive_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormOfflinePlanArchive.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Value
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Value'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'StartDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'ProductID'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 30
+    image: 'PAPER_JET'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Offline__plan_archive_report'
+  name: 'Offline  plan archive report'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3