From 4be2a228025a44c7cc4a1fec31d5ade0f84a988b Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 14 十月 2024 16:49:11 +0800
Subject: [PATCH] 财务产量/销量报表查询条件多选

---
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def             |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def                                      |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_bRefresh_OnClick.def                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuMQBMLB.def                                |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListGeneration#273.def                              |   43 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable#97.def                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonExport696_OnClick.def          |    6 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFactory.def                                         |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageFactory#1.def                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged#670.def                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionExport854_OnClick.def |    6 
 _Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl                                                                    |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonSearch_OnClick.def             |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower#510.def                                       |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged.def                            |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def                                             |    8 
 _Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl                                                                    |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuFactory#1.def                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_bRefresh_OnClick.def                          |    4 
 _Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl                                                                   |   43 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport#369.def                                 |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelLeft.def                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuMQBMLB#1.def                         |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged.def                       |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged#475.def                       |   17 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl                                                           |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListPower.def                                            |   43 +
 _Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl                                                                         |   75 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonSearch_OnClick.def                      |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuPower#1.def                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListFactory#891.def                                 |   43 +
 _Main/Sys/Repr/Global/FinancialSalesCell.qrp                                                                                      |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageGeneration.def                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def                       |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesExport_OnClick.def              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageFactory.def                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuPower.def                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelHeader.def                                          |   16 
 _Main/BL/Type_FinancialProductionReport/Method_Generate.qbl                                                                       |   52 -
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonExport570_OnClick.def                   |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReport.def                            |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged#57.def              |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelOperation.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged#812.def              |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def                                     |   13 
 _Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListMQBMLB.def                                           |   43 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPagePower#1.def                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable.def                                    |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport.def                                          |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable.def                                           |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged.def              |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged.def                   |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged#384.def          |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListGeneration.def                                       |   43 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListPower#480.def                                   |   43 +
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable#1.def                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageGeneration#1.def                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable.def                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelRight.def                                      |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListFactory.def                                          |   43 +
 _Main/BL/Type_FinancialSalesReport/Method_Generate.qbl                                                                            |   47 -
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl                                                                   |   28 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration#653.def                                  |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged.def                 |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelHeader.def                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged.def                          |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListMQBMLB#791.def                                  |   43 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable.def                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable#1.def                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged.def                           |   19 
 _Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl                                                                      |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged#976.def                        |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionImport660_OnClick.def |    8 
 _Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl                                                                 |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged.def                  |   19 
 _Main/BL/Type_FinancialSalesCell/Attribute_IsUpdate.qbl                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelOperation.def                                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageMQBMLB.def                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuGeneration#1.def                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReport.def                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageMQBMLB#1.def                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged#150.def                      |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def                                           |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFactory#298.def                                |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB#466.def                                      |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuFactory.def                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuGeneration.def                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesImport_OnClick.def              |    8 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl                                                               |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def                                 |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_Panelleft.def                                       |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged#568.def               |   17 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl                                                                 |   27 
 /dev/null                                                                                                                         |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSearch_OnClick.def                    |    4 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl                                                                |    5 
 _Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl                                                                        |   45 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelRight.def                                           |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPagePower.def                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable#673.def                                  |   14 
 104 files changed, 1,480 insertions(+), 304 deletions(-)

diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl
new file mode 100644
index 0000000..5082873
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsUpdate
+{
+  #keys: '3[415136.0.1191950107][415136.0.1191950106][415136.0.1191950108]'
+  Description: '鏄惁琚鍏ユ洿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl
new file mode 100644
index 0000000..e986266
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_IsUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsUpdate
+{
+  #keys: '3[415136.0.1191950111][415136.0.1191950110][415136.0.1191950112]'
+  Description: '鏄惁琚鍏ユ洿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl b/_Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl
index 892d832..4dc4dee 100644
--- a/_Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl
+++ b/_Main/BL/Type_ChangeLossSetting/StaticMethod_ValidateInput.qbl
@@ -16,10 +16,10 @@
   [*
     // 鐢勫叞楦� Jun-5-2024 (created)
     feedback := '';
-    if( [Number]number < 0 ){
+    if( [Real]number < 0 ){
       feedback := Translations::MP_ChangeLossSettingExcel_Import_PositiveInteger();
     }
-    if( isnull( unit ) or isnull( product1 ) or isnull( product2 ) or [Number]number = 0 ){
+    if( isnull( unit ) or isnull( product1 ) or isnull( product2 ) or [Real]number = 0 ){
       feedback := Translations::MP_ChangeLossSetting_CheckNull();
     }
     if( product1 = product2 ){
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl b/_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl
index db27bd2..b576503 100644
--- a/_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/Method_Generate.qbl
@@ -2,57 +2,27 @@
 #parent: #root
 Method Generate (
   FinancialProductionSearch search,
-  Product_MPs products
+  Factorys factorys,
+  Strings productids
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    table      := selectobject( this, FinancialProductionSource.FinancialProductionReport, report, not report.IsShow() );
-    allunit    := '<All>';
+    table                   := selectobject( this, FinancialProductionSource.FinancialProductionReport, report, not report.IsShow() );
     //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
     this.Clear();
-    //骞存眹鎬�
-    yearcolumn := this.FinancialProductionColumn( relnew, Name := '姹囨��', Period := search.MacroPlan().StartOfPlanning().StartOfNextYear().Date() );
-    //杩囨护鍚庣殑浜у搧id
-    productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
-                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
-                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
-    sumrow     := this.FinancialProductionRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.FinancialProductionRow( relsize ) );
-    sumyearcell := yearcolumn.FinancialProductionCell( relnew, Quantity := 0 );
-    sumrow.FinancialProductionCell( relinsert, sumyearcell );
-    traverse( table, FinancialProductionRow, row, row.Unit() = search.Unit() ){
-      productid  := construct( Strings );
-      productid.Add( row.Name() );
-      
-      if( productids.ContainsAll( productid ) ){
-        showrow := this.FinancialProductionRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
-        yearcell := yearcolumn.FinancialProductionCell( relnew, Quantity := 0 );
-        showrow.FinancialProductionCell( relinsert, yearcell );
-        
-        traverse( row, FinancialProductionCell, cell, not cell.FinancialProductionColumn().IsDay() ){
-          column   := selectobject( this, FinancialProductionColumn, column, column.Name() = cell.FinancialProductionColumn().Name() and not column.IsDay() );
-          
-          sumcell  := selectobject( column, FinancialProductionCell, c, c.FinancialProductionRow() = sumrow );
-          if( isnull( sumcell ) ){
-            sumcell := column.FinancialProductionCell( relnew, Quantity := 0 );
-            sumrow.FinancialProductionCell( relinsert, sumcell );
-          }
-          
-          showcell := column.FinancialProductionCell( relnew, Quantity := cell.Quantity() );
-          showrow.FinancialProductionCell( relinsert, showcell );
-          yearcell.Quantity( yearcell.Quantity() + cell.Quantity() );
-          sumyearcell.Quantity( sumyearcell.Quantity() + cell.Quantity() );
-    //      value := [Real]cell.Value() + [Real]sumcell.Value();
-          sumcell.Quantity( sumcell.Quantity() + cell.Quantity() );
-        }
-      }
+    traverse( factorys, Elements, factory ){
+      this.GenerateShow( table, productids, factory.ID() );
     }
-    
-    traverse( this, FinancialProductionRow, row ){
-      traverse( row, FinancialProductionCell, cell ){
+    rows                    := selectsortedset( this, FinancialProductionRow, row, row.Name() );
+    i                       := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      traverse( e, FinancialProductionCell, cell ){
         cell.Value( [String]([Number]cell.Quantity()) );
       }
+      i                    := i + 1;
     }
   *]
 }
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
index c038063..e74d045 100644
--- a/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/Method_GenerateColumn.qbl
@@ -11,11 +11,6 @@
     startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    //for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
-    //  periodtime := start.Date();
-    //  periodname := periodtime.Format( "M2/D2/Y" );
-    //  this.FinancialProductionColumn( relnew, Name := periodname, Period := periodtime );
-    //}
     for( start := startofyear; start < startofnextyear; start := start + Duration::Days( 1 ) ){
       periodtime := start.Date();
       periodname := periodtime.Format( "M2/D2/Y" );
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl
new file mode 100644
index 0000000..ecdf492
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/Method_GenerateShow.qbl
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateShow (
+  FinancialProductionReport table,
+  Strings productids,
+  String factory
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Oct-12-2024 (created)
+    //骞存眹鎬�
+    yearcolumn                := this.FinancialProductionColumn( relnew, Name := '姹囨��', Period := this.FinancialProductionSource().MacroPlan().StartOfPlanning().StartOfNextYear().Date() );
+    sumrow                    := this.FinancialProductionRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( 'SUM' ), Unit := factory );
+    sumyearcell               := yearcolumn.FinancialProductionCell( relnew, Quantity := 0 );
+    sumrow.FinancialProductionCell( relinsert, sumyearcell );
+    traverse( table, FinancialProductionRow, row, row.Unit() = factory ){
+      productid               := construct( Strings );
+      productid.Add( row.Name() );
+        
+      if( productids.ContainsAll( productid ) ){
+        showrow               := this.FinancialProductionRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( row.Name() ), Unit := row.Unit() );
+        yearcell              := yearcolumn.FinancialProductionCell( relnew, Quantity := 0 );
+        showrow.FinancialProductionCell( relinsert, yearcell );
+        traverse( row, FinancialProductionCell, cell, not cell.FinancialProductionColumn().IsDay() ){
+          column   := selectobject( this, FinancialProductionColumn, column, column.Name() = cell.FinancialProductionColumn().Name() and not column.IsDay() );
+          
+          sumcell  := selectobject( column, FinancialProductionCell, c, c.FinancialProductionRow() = sumrow );
+          if( isnull( sumcell ) ){
+            sumcell := column.FinancialProductionCell( relnew, Quantity := 0 );
+            sumrow.FinancialProductionCell( relinsert, sumcell );
+          }
+          
+          showcell := column.FinancialProductionCell( relnew, Quantity := cell.Quantity() );
+          showrow.FinancialProductionCell( relinsert, showcell );
+          yearcell.Quantity( yearcell.Quantity() + cell.Quantity() );
+          sumyearcell.Quantity( sumyearcell.Quantity() + cell.Quantity() );
+          sumcell.Quantity( sumcell.Quantity() + cell.Quantity() );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl b/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
index deb4c18..d5681ca 100644
--- a/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
@@ -8,6 +8,8 @@
     allunit := FinancialProductionReport::GetDefaultAllUnit();
     //鏌ヨ闇�瑕佸鍏ョ殑鎶ヨ〃
     table                   := selectobject( this.MacroPlan(), FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and not table.IsShow() );
+    yearday                 := this.MacroPlan().StartOfPlanning().StartOfYear();
+    beforeyearday           := ( yearday - Duration::Days( 1 ) ).Date();
     cnv2                    := StringToDate::StandardConverter();
     cnv2.SetCustomConversion();
     cnv2.CustomFormatString( "M2/D2/Y" );
@@ -33,15 +35,25 @@
         
         //璇诲彇姣忎竴琛岀殑鍗曞厓鏍�
         traverse( row, FinancialProductionCell, cell, cell.FinancialProductionColumn() <> productcolumn and cell.FinancialProductionColumn() <> unitcolumn ){
-          //鑾峰彇琚鍏ユ姤琛ㄧ殑鏃ユ湡鍒�
-          tablecolumn       := selectobject( table, FinancialProductionColumn, column, not column.IsDay() and column.Name() = cell.FinancialProductionColumn().Name() );
-          if( isnull( tablecolumn ) ){
-            tablecolumn     := table.FinancialProductionColumn( relnew, Name := cell.FinancialProductionColumn().Name(), Period := cnv2.Convert( cell.FinancialProductionColumn().Name() ) );
+          period            := cnv2.Convert( cell.FinancialProductionColumn().Name() )
+          tablecolumn       := construct( FinancialProductionColumn );
+          if( period = beforeyearday ){
+            periodname      := yearday.Format( "M2/D2/Y" );
+            //鑾峰彇琚鍏ユ姤琛ㄧ殑鏃ユ湡鍒�
+            tablecolumn     := selectobject( table, FinancialProductionColumn, column, not column.IsDay() and column.Name() = periodname );
+            if( isnull( tablecolumn ) ){
+              tablecolumn   := table.FinancialProductionColumn( relnew, Name := periodname, Period := yearday.Date() );
+            }
+          }else{
+            tablecolumn     := selectobject( table, FinancialProductionColumn, column, not column.IsDay() and column.Name() = cell.FinancialProductionColumn().Name() );
+            if( isnull( tablecolumn ) ){
+              tablecolumn   := table.FinancialProductionColumn( relnew, Name := cell.FinancialProductionColumn().Name(), Period := cnv2.Convert( cell.FinancialProductionColumn().Name() ) );
+            }
           }
           //鑾峰彇琚鍏ユ姤琛ㄧ殑鍗曞厓鏍�
           unitcell          := selectobject( unitrow, FinancialProductionCell, unitcell, unitcell.FinancialProductionColumn() = tablecolumn );
           if( isnull( unitcell ) ){
-            unitcell        := tablecolumn.FinancialProductionCell( relnew, IsUpdate := true, Quantity := [Real]cell.Value(), Value := cell.Value() );
+            unitcell        := tablecolumn.FinancialProductionCell( relnew, Quantity := [Real]cell.Value(), Value := cell.Value() );
             unitrow.FinancialProductionCell( relinsert, unitcell );
           }else{
             if( unitcell.Quantity() <> [Real]cell.Value() ){
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
index f349134..133fb6d 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
@@ -16,12 +16,12 @@
     table                     := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
     showtable                 := source.FinancialProductionReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
     startofplanning           := owner.StartOfPlanning().Date();
-    startofyear               := ( startofplanning.StartOfYear() - Duration::Days( 1 ) ).Date();
-    startofnextyear           := ( startofplanning.StartOfNextYear() - Duration::Days( 1 ) ).Date();
+    //startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
     
     search                    := owner.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
     
-    products                  := construct( Product_MPs );
+    productids                := construct( Strings );
     table.GenerateColumn( owner );
     //鍙栧綋鍓嶇増鏈殑product planning閲宯ew supply瀛楁锛屽垎澶ц繛鍜岄暱鏄ュ伐鍘傜殑浜х嚎锛岃繘琛屽姞鎬�
     traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '鍘傚唴搴�' ) or stockingpoint.ID() = '澶ц繛澶栫搴�' ){
@@ -30,14 +30,14 @@
       
       if( iscc or isdl ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() 
-                  and exists( pisp, ProductInStockingPointInPeriod, pispip, pispip.Period_MP().StartDate() >= startofyear and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
           //鑾峰彇宸ュ巶琛�
           factoryrow          := table.GetRowByUnit( pisp.Product_MP(), ifexpr( iscc, ccunit, dlunit ) );
           //鑾峰彇鍚堣琛�
           allrow              := table.GetRowByUnit( pisp.Product_MP(), allunit );
-          products.Add( pisp.Product_MP() );
+          productids.Add( pisp.ProductID() );
           //褰損roduct planning鐨勬棩鏈熷尯闂村湪闇�瑕佺殑鏃ユ湡鍖洪棿鍐� 
-          traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Period_MP().StartDate() >= startofyear and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ){
+          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ){
             dayperiodtime     := ( pispip.Start() + Duration::Days( 1 ) ).Date();
             dayperiodname     := dayperiodtime.Format( "M2/D2/Y" );
             periodtime        := dayperiodtime.StartOfMonth();
@@ -52,13 +52,7 @@
         }
       }
     }
-    
-    rows := selectsortedset( table, FinancialProductionRow, row, row.Name() );
-    i    := 0;
-    traverse( rows, Elements, e ){
-      e.RowNr( i );
-      i := i + 1;
-    }
-    showtable.Generate( search, products );
+    factorys                  := selectset( owner, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
+    showtable.Generate( search, factorys, productids );
   *]
 }
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl
index 748afbf..f0d93bb 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl
@@ -20,8 +20,9 @@
     }
     table                     := selectobject( owner, FinancialProductionSource.FinancialProductionReport, table, table.IsShow() );
     if( not isnull( table ) ){
-      products                := selectset( owner, Product_MP, product, true );
-      table.Generate( search, products );
+      factorys                := selectset( owner, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
+      productids              := selectuniquevalues( owner, FinancialProductionSource.FinancialProductionReport.FinancialProductionRow, row, not row.FinancialProductionReport().IsShow(), row.Name() );
+      table.Generate( search, factorys, productids);
     }
     return table;
   *]
diff --git a/_Main/BL/Type_FinancialSalesCell/Attribute_IsUpdate.qbl b/_Main/BL/Type_FinancialSalesCell/Attribute_IsUpdate.qbl
new file mode 100644
index 0000000..eaa9843
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/Attribute_IsUpdate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsUpdate
+{
+  #keys: '3[415136.0.1191964789][415136.0.1191964788][415136.0.1191964790]'
+  Description: '鏄惁琚洿鏂�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
index d62492f..cba9d49 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
@@ -2,51 +2,24 @@
 #parent: #root
 Method Generate (
   FinancialSalesSearch search,
-  Product_MPs products
+  Factorys factorys,
+  Strings productids
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     table      := selectobject( this, FinancialSalesSource.FinancialSalesReport, report, not report.IsShow() );
-    allunit    := '<All>';
     //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
     this.Clear();
-    //骞存眹鎬�
-    yearcolumn := this.FinancialSalesColumn( relnew, Name := '姹囨��', Period := search.MacroPlan().StartOfPlanning().StartOfNextYear().Date() );
-    //杩囨护鍚庣殑浜у搧id
-    productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
-                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
-                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
-    sumrow     := this.FinancialSalesRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.FinancialSalesRow( relsize ) );
-    sumyearcell := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
-    sumrow.FinancialSalesCell( relinsert, sumyearcell );
-    traverse( table, FinancialSalesRow, row, row.Unit() = search.Unit() ){
-      productid  := construct( Strings );
-      productid.Add( row.Name() );
-      
-      if( productids.ContainsAll( productid ) ){
-        showrow := this.FinancialSalesRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
-        yearcell := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
-        showrow.FinancialSalesCell( relinsert, yearcell );
-        
-        traverse( row, FinancialSalesCell, cell, not cell.FinancialSalesColumn().IsDay() ){
-          column   := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() and not column.IsDay());
-          
-          sumcell  := selectobject( column, FinancialSalesCell, c, c.FinancialSalesRow() = sumrow );
-          if( isnull( sumcell ) ){
-            sumcell := column.FinancialSalesCell( relnew, Value := '0' );
-            sumrow.FinancialSalesCell( relinsert, sumcell );
-          }
-          
-          showcell := column.FinancialSalesCell( relnew, Value := cell.Value() );
-          showrow.FinancialSalesCell( relinsert, showcell );
-          yearcell.Value( [String]( [Real]yearcell.Value() + [Real]cell.Value() ) );
-          sumyearcell.Value( [String]( [Real]sumyearcell.Value() + [Real]cell.Value() ) );
-          value := [Real]cell.Value() + [Real]sumcell.Value();
-          sumcell.Value( [String]value );
-        }
-      }
+    traverse( factorys, Elements, factory ){
+      this.GenerateShow( table, productids, factory.ID() );
+    }
+    rows                    := selectsortedset( this, FinancialSalesRow, row, row.Name() );
+    i                       := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i                    := i + 1;
     }
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
index 7d32e98..8fa3b08 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
@@ -11,11 +11,6 @@
     startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    //for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
-    //  periodtime := start.Date();
-    //  periodname := periodtime.Format( "M2/D2/Y" );
-    //  this.FinancialSalesColumn( relnew, Name := periodname, Period := periodtime );
-    //}
     for( start := startofyear; start < startofnextyear; start := start + Duration::Days( 1 ) ){
       periodtime := start.Date();
       periodname := periodtime.Format( "M2/D2/Y" );
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl
new file mode 100644
index 0000000..2b618a4
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GenerateShow.qbl
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateShow (
+  FinancialSalesReport table,
+  Strings productids,
+  String factory
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Oct-12-2024 (created)
+    //骞存眹鎬�
+    yearcolumn := this.FinancialSalesColumn( relnew, Name := '姹囨��', Period := this.FinancialSalesSource().MacroPlan().StartOfPlanning().StartOfNextYear().Date() );
+    sumrow     := this.FinancialSalesRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( 'SUM' ), Unit := factory, RowNr := table.FinancialSalesRow( relsize ) );
+    sumyearcell := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
+    sumrow.FinancialSalesCell( relinsert, sumyearcell );
+    traverse( table, FinancialSalesRow, row, row.Unit() = factory ){
+      productid  := construct( Strings );
+      productid.Add( row.Name() );
+      
+      if( productids.ContainsAll( productid ) ){
+        showrow := this.FinancialSalesRow( relnew, Name := factory.Format( 'S(Len(10))' ).Concat( row.Name() ), Unit := row.Unit(), RowNr := row.RowNr() );
+        yearcell := yearcolumn.FinancialSalesCell( relnew, Value := '0' );
+        showrow.FinancialSalesCell( relinsert, yearcell );
+        
+        traverse( row, FinancialSalesCell, cell, not cell.FinancialSalesColumn().IsDay() ){
+          column   := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() and not column.IsDay());
+          
+          sumcell  := selectobject( column, FinancialSalesCell, c, c.FinancialSalesRow() = sumrow );
+          if( isnull( sumcell ) ){
+            sumcell := column.FinancialSalesCell( relnew, Value := '0' );
+            sumrow.FinancialSalesCell( relinsert, sumcell );
+          }
+          
+          showcell := column.FinancialSalesCell( relnew, Value := cell.Value() );
+          showrow.FinancialSalesCell( relinsert, showcell );
+          yearcell.Value( [String]( [Real]yearcell.Value() + [Real]cell.Value() ) );
+          sumyearcell.Value( [String]( [Real]sumyearcell.Value() + [Real]cell.Value() ) );
+          value := [Real]cell.Value() + [Real]sumcell.Value();
+          sumcell.Value( [String]value );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
index 1ddcfd6..8c0cd6a 100644
--- a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
@@ -5,34 +5,67 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
-    allunit := FinancialProductionReport::GetDefaultAllUnit();
-    table   := selectobject( this.MacroPlan(), FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and not table.IsShow() );
-    //info( '--------------------------', table.Name() );
+    allunit                 := FinancialProductionReport::GetDefaultAllUnit();
+    table                   := selectobject( this.MacroPlan(), FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and not table.IsShow() );
+    yearday                 := this.MacroPlan().StartOfPlanning().StartOfYear();
+    beforeyearday           := ( yearday - Duration::Days( 1 ) ).Date();
+    cnv2                    := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( "M2/D2/Y" );
     traverse( this, FinancialSalesReport, report ){
-      productcolumn := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Product' );
-      unitcolumn    := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Unit' );
-    //  info( '----------------------1-----------------', productcolumn.Name(), unitcolumn.Name() );
+      productcolumn         := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Product' );
+      unitcolumn            := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Unit' );
       
       traverse( report, FinancialSalesRow, row ){
-        product := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = productcolumn );
-        unit    := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = unitcolumn );
-    //    info( '----------------------2-----------------', product.Value(), unit.Value() );
+        product             := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = productcolumn );
+        unit                := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = unitcolumn );
         
-        unitrow := selectobject( table, FinancialSalesRow, unitrow, unitrow.Name() = product.Value() and unitrow.Unit() = unit.Value() );
+        unitrow             := selectobject( table, FinancialSalesRow, unitrow, unitrow.Name() = product.Value() and unitrow.Unit() = unit.Value() );
+        if( isnull( unitrow ) ){
+          unitrow           := table.FinancialSalesRow( relnew, Name := product.Value(), Unit := unit.Value() );
+        }
         allrow  := selectobject( table, FinancialSalesRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
-    //    info( '----------------------3-----------------', unitrow.Name(), unitrow.Unit() );
-        // and product.Value() = '120 kW Rotor' and unit.Value() = 'Assembly Plant (Spain)'
+        if( isnull( unitrow ) ){
+          allrow            := table.FinancialSalesRow( relnew, Name := product.Value(), Unit := allunit );
+        }
+        
         traverse( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() <> productcolumn and cell.FinancialSalesColumn() <> unitcolumn ){
-          column   := cell.FinancialSalesColumn();
-          unitcell := selectobject( unitrow, FinancialSalesCell, unitcell, unitcell.FinancialSalesColumn().Name() = column.Name() );
-          allcell  := selectobject( allrow, FinancialSalesCell, allcell, allcell.FinancialSalesColumn().Name() = column.Name() );
-    //      info( isnull( unitcell ), isnull( allcell ), cell.Value(), unitcell.Value(), allcell.Value() );
-          if( not isnull( unitcell ) ){
-            unitcell.Value( cell.Value() );
+          column            := cell.FinancialSalesColumn();
+          period            := cnv2.Convert( column.Name() )
+          
+          tablecolumn       := construct( FinancialSalesColumn );
+          if( period = beforeyearday ){
+            periodname      := yearday.Format( "M2/D2/Y" );
+            //鑾峰彇琚鍏ユ姤琛ㄧ殑鏃ユ湡鍒�
+            tablecolumn     := selectobject( table, FinancialSalesColumn, fscolumn, not fscolumn.IsDay() and fscolumn.Name() = periodname );
+            if( isnull( tablecolumn ) ){
+              tablecolumn   := table.FinancialSalesColumn( relnew, Name := periodname, Period := yearday.Date() );
+            }
+          }else{
+            tablecolumn     := selectobject( table, FinancialSalesColumn, fscolumn, not fscolumn.IsDay() and fscolumn.Name() = column.Name() );
+            if( isnull( tablecolumn ) ){
+              tablecolumn   := table.FinancialSalesColumn( relnew, Name := column.Name(), Period := cnv2.Convert( column.Name() ) );
+            }
           }
-          if( not isnull( allcell ) ){
-            value := [Real]cell.Value() + [Real]allcell.Value();
-            allcell.Value( [String]value );
+          unitcell := selectobject( unitrow, FinancialSalesCell, unitcell, unitcell.FinancialSalesColumn().Name() = column.Name() );
+          if( isnull( unitcell ) ){
+            unitcell        := tablecolumn.FinancialSalesCell( relnew, Value := cell.Value() );
+            unitrow.FinancialSalesCell( relinsert, unitcell );
+          }else{
+            if( unitcell.Value() <> cell.Value() ){
+              unitcell.Value( cell.Value() );
+              unitcell.IsUpdate( true );
+            }
+          }
+          allcell  := selectobject( allrow, FinancialSalesCell, allcell, allcell.FinancialSalesColumn().Name() = column.Name() );
+          if( isnull( unitcell ) ){
+            allcell         := tablecolumn.FinancialSalesCell( relnew, Value := cell.Value() );
+            allrow.FinancialSalesCell( relinsert, allcell );
+          }else{
+            if( allcell.Value() <> cell.Value() ){
+              allcell.Value( cell.Value() );
+              allcell.IsUpdate( true );
+            }
           }
         }
       }
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
deleted file mode 100644
index 8677d00..0000000
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
+++ /dev/null
@@ -1,157 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Initialize (
-  MacroPlan owner
-)
-{
-  Description: '鍒濆鍖�'
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-24-2024 (created)
-    owner.FinancialSalesSource( relflush );
-    products                  := construct( Product_MPs );
-    allunit                   := FinancialSalesReport::GetDefaultAllUnit();
-    ccunit                    := FinancialSalesReport::GetDefaultCCUnit();
-    dlunit                    := FinancialSalesReport::GetDefaultDLUnit();
-    ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC();
-    tjsalessegment            := FinancialSalesReport::GetSalesSegmentTJ();
-    fssalessegment            := FinancialSalesReport::GetSalesSegmentFS();
-    //ccspline                  := FinancialSalesReport::GetStockingPointCCLine();
-    //dlspline                  := FinancialSalesReport::GetStockingPointDLLine();
-    //ccrent                    := FinancialSalesReport::GetStockingPointCCRent();
-    
-    source                    := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() );
-    table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
-    showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
-    startofplanning           := owner.StartOfPlanning().Date();
-    //startofyear               := startofplanning.StartOfYear();
-    startofnextyear           := startofplanning.StartOfNextYear();
-    
-    search                    := owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
-    
-    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 
-              and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){
-      salessegment            := forecast.SalesSegment_MP();
-      parentsalessegments     := salessegment.GetAllParent();
-      //鏄惁灞炰簬闀挎槬
-    //  iscc                    := salessegment.Name() = ccsalessegment or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = ccsalessegment );
-      iscc                    := salessegment.Name().StartsWith( ccsalessegment ) or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( ccsalessegment ) );
-      //鏄惁灞炰簬澶ц繛, 鍗冲ぉ娲ュ拰浣涘北
-    //  isdl                    := salessegment.Name() = tjsalessegment or salessegment.Name() = fssalessegment 
-    //                              or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = tjsalessegment ) 
-    //                              or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = fssalessegment );
-      isdl                    := salessegment.Name().StartsWith( tjsalessegment ) or salessegment.Name().StartsWith( fssalessegment )
-                                  or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( tjsalessegment ) ) 
-                                  or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name().StartsWith( fssalessegment ) );
-      //Forecast鐨凷ales Segment涓洪暱鏄ワ紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝佹眹鎬�
-      //澶ц繛璐㈠姟閿�閲忥細棣栧厛鍦╢orecast鐣岄潰鏌ユ壘Sales Segment鏄ぉ娲ュ拰浣涘北鐨勬墍鏈夐渶姹傦紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲�
-      if( ( iscc and forecast.Product_MP().MQBMLB() = 'MLB' ) or isdl ){
-        product              := forecast.Product_MP();
-        //鑾峰彇鍚堣琛�
-        allrow               := table.GetRow( allunit, product );
-        //鑾峰彇宸ュ巶琛�
-        factoryrow           := table.GetRow( ifexpr( iscc and forecast.Product_MP().MQBMLB() = 'MLB', ccunit, dlunit ), product );
-      
-        products.Add( product );
-        traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
-          dayperiodtime      := psdip.StartDate();
-          dayperiodname      := dayperiodtime.Format( "M2/D2/Y" );
-          periodtime         := psdip.StartDate().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() );
-          column             := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
-    //      info( '-------------------------', column.Name() );
-          quantity   := [Number]psdip.Quantity();//鍥涜垗浜斿叆
-          
-          factoryrow.Initialize( column, quantity );
-          factoryrow.Initialize( daycolumn, quantity );
-          allrow.Initialize( column, quantity );
-        }
-      }
-    }
-    //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴�(CC鍘傚唴搴�)鐨勬墍鏈塎QB浜у搧锛屽彇Total Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
-    //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴擄紝鍙朜ew supply瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
-    //traverse( owner, StockingPoint_MP, stockingpoint ){
-    traverse( owner, StockingPoint_MP, stockingpoint, ( stockingpoint.ID().StartsWith( 'CC' ) and stockingpoint.ID().EndsWith( '鍘傚唴搴�' ) ) or stockingpoint.ID() = '澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�' ){
-      isdl                  := stockingpoint.ID() = '澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�';
-    //  unit                  := stockingpoint.Unit();
-    //  parentunits           := unit.GetAllParent();
-      //鏄惁灞炰簬闀挎槬瑁呴厤绾�
-    //  iscc                  := unit.ID() = ccspline or exists( parentunits, Elements, punit, punit.ID() = ccspline );
-    //  if( table.IsInUnit( stockingpoint, ccspline ) ){
-        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.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//浜у搧涓篗QB
-          product           := pisp.Product_MP();
-          allrow            := table.GetRow( allunit, product );
-          if( isdl or pisp.Product_MP().MQBMLB() = 'MQB' ){
-            factoryrow      := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product );
-            products.Add( product );
-            traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
-                      and pispip.Period_MP().StartDate() < startofnextyear 
-                      and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
-              dayperiodtime := pispip.Start().Date();
-              dayperiodname := dayperiodtime.Format( "M2/D2/Y" );
-              periodtime    := pispip.Start().StartOfMonth().Date();
-              periodname    := periodtime.Format( "M2/D2/Y" );
-              daycolumn     := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
-              column        := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
-              quantity      := ifexpr( isdl, [Number]pispip.NewSupplyQuantity(), [Number]pispip.DependentDemandAndSalesDemandQuantity() );//鍥涜垗浜斿叆
-              
-              factoryrow.Initialize( column, quantity );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
-              factoryrow.Initialize( daycolumn, quantity );
-              allrow.Initialize( column, quantity );
-            }
-          }
-        }
-    //  }
-    }
-    //startofnextyearlead       := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime();
-    //澶ц繛璐㈠姟閿�閲忥細闀挎槬鐨勯渶姹傞渶瑕佸湪trip plan閲岄潰鎵惧埌璧峰搴撳瓨鐐逛负澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撶殑浜у搧锛岀敱浜庨渶瑕佽�冭檻浜у搧杩愯緭lead time锛屾瘡涓湀鐨勬眹鎬绘暟鎹渶瑕佹帹杩熶袱澶╄繘琛岃绠�
-    //traverse( owner, Unit.Lane.LaneLeg, laneleg ){
-    //  //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛瑁呴厤绾胯竟搴�
-    //  originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
-    //  isdlspline            := table.IsInUnit( originsp, dlspline );
-    //  //鐩殑鍦版槸鍚︽槸闀挎槬澶栫搴�
-    //  destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
-    //  isccrent              := table.IsInUnit( destisp, ccrent );
-    //  if( isdlspline and isccrent ){
-    //    traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead and exists( trip, ProductInTrip, pit, pit.Quantity() <> 0 ) ){
-    ////      periodtime        := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
-    //      dayperiodtime     := trip.Departure().Date();
-    //      dayperiodname     := dayperiodtime.Format( "M2/D2/Y" );
-    //      periodtime        := trip.Departure().StartOfMonth().Date();
-    //      periodname        := periodtime.Format( "M2/D2/Y" );
-    //      
-    //      daycolumn         := selectobject( table, FinancialSalesColumn, column, column.Name() = dayperiodname and column.Period() = dayperiodtime and column.IsDay() );
-    //      column            := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime and not column.IsDay() );
-    //      if( not isnull( column ) ){
-    //        traverse( trip, ProductInTrip, pit, pit.Quantity() <> 0 ){
-    //          product       := pit.Product_MP();
-    //          products.Add( product );
-    //          quantity      := [Number]pit.Quantity();//鍥涜垗浜斿叆
-    //          dlrow         := table.GetRow( dlunit, pit.Product_MP() );
-    //          dlrow.Initialize( column, quantity );//姹囨�绘暟閲�
-    //          dlrow.Initialize( daycolumn, quantity );
-    //          
-    //          allrow        := table.GetRow( allunit, pit.Product_MP() );
-    //          allrow.Initialize( column, quantity );
-    //        }
-    //      }
-    //    }
-    //  }
-    //}
-    
-    rows := selectsortedset( table, FinancialSalesRow, row, row.Name() );
-    i    := 0;
-    traverse( rows, Elements, e ){
-      e.RowNr( i );
-      i := i + 1;
-    }
-    showtable.Generate( search, products );
-  *]
-}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
index 5d0c8a8..18b51ad 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitializeNew.qbl
@@ -10,23 +10,20 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     owner.FinancialSalesSource( relflush );
     owner.FSImportData( relflush );
-    products                  := construct( Product_MPs );
+    productids                := construct( Strings );
     allunit                   := FinancialSalesReport::GetDefaultAllUnit();
     ccunit                    := FinancialSalesReport::GetDefaultCCUnit();
     dlunit                    := FinancialSalesReport::GetDefaultDLUnit();
     ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC();
     tjsalessegment            := FinancialSalesReport::GetSalesSegmentTJ();
     fssalessegment            := FinancialSalesReport::GetSalesSegmentFS();
-    //ccspline                  := FinancialSalesReport::GetStockingPointCCLine();
-    //dlspline                  := FinancialSalesReport::GetStockingPointDLLine();
-    //ccrent                    := FinancialSalesReport::GetStockingPointCCRent();
     
     source                    := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() );
     table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
     showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
     startofplanning           := owner.StartOfPlanning().Date();
-    startofyear               := ( startofplanning.StartOfYear() - Duration::Days( 1 ) ).Date();
-    startofnextyear           := ( startofplanning.StartOfNextYear() - Duration::Days( 1 ) ).Date();
+    //startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
     
     search                    := owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
     
@@ -54,7 +51,7 @@
         //鑾峰彇宸ュ巶琛�
         factoryrow           := table.GetRow( ifexpr( isdl, dlunit, ccunit ), product );
       
-        products.Add( product );
+        productids.Add( forecast.ProductID() );
         traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
           dayperiodtime      := psdip.StartDate();
           dayperiodname      := dayperiodtime.Format( "M2/D2/Y" );
@@ -75,13 +72,13 @@
     //浠嶱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, pispip.Period_MP().StartDate() >= startofyear and pispip.Period_MP().StartDate() < startofnextyear 
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear 
                               and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ) ){//浜у搧涓篗QB
           product           := pisp.Product_MP();
           allrow            := table.GetRow( allunit, product );
           factoryrow        := table.GetRow( dlunit, product );
-          products.Add( product );
-          traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Period_MP().StartDate() >= startofyear
+          productids.Add( pisp.ProductID() );
+          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical()
                     and pispip.Period_MP().StartDate() < startofnextyear 
                     and ( pispip.DependentDemandAndSalesDemandQuantity() <> 0 or pispip.NewSupplyQuantity() <> 0 ) ){
             dayperiodtime   := ( pispip.Start() + Duration::Days( 1 ) ).Date();
@@ -134,13 +131,7 @@
     //    }
     //  }
     //}
-    
-    rows := selectsortedset( table, FinancialSalesRow, row, row.Name() );
-    i    := 0;
-    traverse( rows, Elements, e ){
-      e.RowNr( i );
-      i := i + 1;
-    }
-    showtable.Generate( search, products );
+    factorys                  := selectset( owner, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
+    showtable.Generate( search, factorys, productids );
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl
index eeff011..4fa422b 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_InitiateSearch.qbl
@@ -20,8 +20,9 @@
     }
     table                     := selectobject( owner, FinancialSalesSource.FinancialSalesReport, table, table.IsShow() );
     if( not isnull( table ) ){
-      products                := selectset( owner, Product_MP, product, true );
-      table.Generate( search, products );
+      factorys                := selectset( owner, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
+      productids              := selectuniquevalues( owner, FinancialSalesSource.FinancialSalesReport.FinancialSalesRow, row, not row.FinancialSalesReport().IsShow(), row.Name() );
+      table.Generate( search, factorys, productids );
     }
     return table;
   *]
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
index 944d4bc..6bcfb2a 100644
--- a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
@@ -115,7 +115,7 @@
       ccsvaluesum           := ccsvaluesum + ccsvalue;
     }
     sumcolumn                 := table.FinancialWeeklyColumn( relnew, Name := 'SUM' );
-    cumulantcolumn            := table.FinancialWeeklyColumn( relnew, Name := '绱閲�' );
+    //cumulantcolumn            := table.FinancialWeeklyColumn( relnew, Name := '绱閲�' );
     proportioncolumn          := table.FinancialWeeklyColumn( relnew, Name := '鍗犳瘮' );
     //SUM
     totalpcellsum           := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]( [Number]totalpvaluesum ) );
@@ -131,18 +131,18 @@
     ccscellsum              := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluesum );
     ccsales.FinancialWeeklyCell( relinsert, ccscellsum );
     //绱閲�
-    totalpcellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalpvaluecumulant );
-    totalproduction.FinancialWeeklyCell( relinsert, totalpcellcumulant );
-    dlpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlpvaluecumulant );
-    dlproduction.FinancialWeeklyCell( relinsert, dlpcellcumulant );
-    ccpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccpvaluecumulant );
-    ccproduction.FinancialWeeklyCell( relinsert, ccpcellcumulant );
-    totalscellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalsvaluecumulant );
-    totalsales.FinancialWeeklyCell( relinsert, totalscellcumulant );
-    dlscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlsvaluecumulant );
-    dlsales.FinancialWeeklyCell( relinsert, dlscellcumulant );
-    ccscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluecumulant );
-    ccsales.FinancialWeeklyCell( relinsert, ccscellcumulant );
+    //totalpcellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalpvaluecumulant );
+    //totalproduction.FinancialWeeklyCell( relinsert, totalpcellcumulant );
+    //dlpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlpvaluecumulant );
+    //dlproduction.FinancialWeeklyCell( relinsert, dlpcellcumulant );
+    //ccpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccpvaluecumulant );
+    //ccproduction.FinancialWeeklyCell( relinsert, ccpcellcumulant );
+    //totalscellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalsvaluecumulant );
+    //totalsales.FinancialWeeklyCell( relinsert, totalscellcumulant );
+    //dlscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlsvaluecumulant );
+    //dlsales.FinancialWeeklyCell( relinsert, dlscellcumulant );
+    //ccscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluecumulant );
+    //ccsales.FinancialWeeklyCell( relinsert, ccscellcumulant );
     //鍗犳瘮
     totalpvalueproportion   := guard( ( totalpvaluecumulant / totalpvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
     totalpcellproportion    := proportioncolumn.FinancialWeeklyCell( relnew, Value := totalpvalueproportion );
@@ -168,6 +168,6 @@
     ccscellproportion       := proportioncolumn.FinancialWeeklyCell( relnew, Value := ccsvalueproportion );
     ccsales.FinancialWeeklyCell( relinsert, ccscellproportion );
     
-    info( sumcolumn.FinancialWeeklyCell( relsize ), cumulantcolumn.FinancialWeeklyCell( relsize ), proportioncolumn.FinancialWeeklyCell( relsize ) );
+    info( sumcolumn.FinancialWeeklyCell( relsize ), proportioncolumn.FinancialWeeklyCell( relsize ) );
   *]
 }
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl
index 38b40e6..61350de 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_InitiateSearch.qbl
@@ -24,7 +24,7 @@
     table                     := selectobject( owner, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
     if( not isnull( table ) ){
       factorys                := selectset( owner, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
-      productids              := selectuniquevalues( table, InventroySummaryRow, row, row.Name() );
+      productids              := selectuniquevalues( owner, InventorySummarySource.InventorySummaryReport.InventroySummaryRow, row, not row.InventorySummaryReport().IsShow(), row.Name() );
       table.Generate( search, factorys, productids );
     }
     return table;
diff --git a/_Main/Sys/Repr/Global/FinancialSalesCell.qrp b/_Main/Sys/Repr/Global/FinancialSalesCell.qrp
new file mode 100644
index 0000000..6688a50
--- /dev/null
+++ b/_Main/Sys/Repr/Global/FinancialSalesCell.qrp
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+TypeRepresentation FinancialSalesCell
+{
+  AttributeRepresentation Value
+  {
+    AttributeKey: '[415136.0.857450649]'
+    Conditional:
+    [
+      DataRepresentation.Conditional
+      {
+        BackgroundColor: '$FF6666'
+        ConditionBody: 'object.IsUpdate()'
+        ConversionBody: ''
+        DefaultBackgroundColor: false
+        InheritConversion: false
+      }
+    ]
+  }
+  RelationRepresentation AsFirstCellInColumn { RelationKey: '[415136.0.857450670]' Visibility: 'Normal' }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListFactory\043891.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListFactory\043891.def"
new file mode 100644
index 0000000..78801ff
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListFactory\043891.def"
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListFactory id:ListFactory_891
+{
+  #keys: '[415136.0.1194549290]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorFactory
+    {
+      #keys: '[415136.0.1194549291]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'Factory'
+      ]
+    }
+    #child: listActionBarPageFactory_1
+    Component DataSetLevelFactory
+    {
+      #keys: '[415136.0.1194549293]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuFactory_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}}]'
+        ContextMenu: 'listContextMenuFactory'
+        SortCriteria: 'ID'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListGeneration\043273.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListGeneration\043273.def"
new file mode 100644
index 0000000..01cc801
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListGeneration\043273.def"
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListGeneration id:ListGeneration_273
+{
+  #keys: '[415136.0.1194549297]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorGeneration
+    {
+      #keys: '[415136.0.1194549298]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'ProductGeneration'
+      ]
+    }
+    #child: listActionBarPageGeneration_1
+    Component DataSetLevelGeneration
+    {
+      #keys: '[415136.0.1194549300]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuGeneration_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Generation","title":"Generation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Generation"}}]'
+        ContextMenu: 'listContextMenuGeneration'
+        SortCriteria: 'Generation'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListMQBMLB\043791.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListMQBMLB\043791.def"
new file mode 100644
index 0000000..85b1c5b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListMQBMLB\043791.def"
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListMQBMLB id:ListMQBMLB_791
+{
+  #keys: '[415136.0.1194549304]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorMQBMLB
+    {
+      #keys: '[415136.0.1194549305]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'ProductMLBMQB'
+      ]
+    }
+    #child: listActionBarPageMQBMLB_1
+    Component DataSetLevelMQBMLB
+    {
+      #keys: '[415136.0.1194549307]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuMQBMLB_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MLBMQB","title":"MLBMQB","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MLBMQB"}}]'
+        ContextMenu: 'listContextMenuMQBMLB'
+        SortCriteria: 'MLBMQB'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListPower\043480.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListPower\043480.def"
new file mode 100644
index 0000000..bea1c4d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_ListPower\043480.def"
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListPower id:ListPower_480
+{
+  #keys: '[415136.0.1194549311]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPower
+    {
+      #keys: '[415136.0.1194549312]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'ProductPower'
+      ]
+    }
+    #child: listActionBarPagePower_1
+    Component DataSetLevelPower
+    {
+      #keys: '[415136.0.1194549314]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPower_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Power","title":"Power","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Power"}}]'
+        ContextMenu: 'listContextMenuPower'
+        SortCriteria: 'Power'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable.def "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable\04397.def"
similarity index 83%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable.def
rename to "_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable\04397.def"
index d861543..566fb60 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_MatrixEditorTable\04397.def"
@@ -1,19 +1,19 @@
 Quintiq file version 2.0
-Component MatrixEditorTable
+Component MatrixEditorTable id:MatrixEditorTable_97
 {
-  #keys: '[415136.0.844701426]'
+  #keys: '[415136.0.1194549840]'
   BaseType: 'WebMatrixEditor'
   Children:
   [
     Component MatrixEditorCellTable
     {
-      #keys: '[415136.0.844701427]'
+      #keys: '[415136.0.1194549841]'
       BaseType: 'WebMatrixEditorCell'
       Children:
       [
         Component DataExtractorCell
         {
-          #keys: '[415136.0.844701428]'
+          #keys: '[415136.0.1194549842]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
@@ -35,13 +35,13 @@
     }
     Component MatrixEditorRowsTable
     {
-      #keys: '[415136.0.844701431]'
+      #keys: '[415136.0.1194549843]'
       BaseType: 'WebMatrixEditorHeaderLevel'
       Children:
       [
         Component DataExtractorRow
         {
-          #keys: '[415136.0.844701432]'
+          #keys: '[415136.0.1194549844]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
@@ -61,13 +61,13 @@
     }
     Component MatrixEditorColumnsTable
     {
-      #keys: '[415136.0.844701435]'
+      #keys: '[415136.0.1194549845]'
       BaseType: 'WebMatrixEditorHeaderLevel'
       Children:
       [
         Component DataExtractorColumn
         {
-          #keys: '[415136.0.844701436]'
+          #keys: '[415136.0.1194549846]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
@@ -86,8 +86,8 @@
         Taborder: 2
       ]
     }
-    #child: matrixEditorActionBarPageTable
-    #child: matrixeditorContextMenuTable
+    #child: matrixEditorActionBarPageTable_1
+    #child: matrixeditorContextMenuTable_1
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport\043369.def"
similarity index 67%
copy from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
copy to "_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport\043369.def"
index 512bfd5..19c9379 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport\043369.def"
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component PanelExport
+Component PanelExport id:PanelExport_369
 {
-  #keys: '[415136.0.834352718]'
+  #keys: '[415136.0.1194549632]'
   BaseType: 'WebPanel'
   Children:
   [
-    Component ButtonExport
+    Component ButtonExport696
     {
-      #keys: '[415136.0.834352737]'
+      #keys: '[415136.0.1194549633]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -18,7 +18,7 @@
     }
     Component ButtonSearch
     {
-      #keys: '[415136.0.972170614]'
+      #keys: '[415136.0.1194549634]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -26,9 +26,9 @@
         Taborder: 0
       ]
     }
-    Component bRefresh id:bRefresh_859
+    Component bRefresh
     {
-      #keys: '[415136.0.1153802738]'
+      #keys: '[415136.0.1194549635]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -40,6 +40,6 @@
   Properties:
   [
     Orientation: 'horizontal'
-    Taborder: 4
+    Taborder: 0
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFactory\043298.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFactory\043298.def"
new file mode 100644
index 0000000..d9c65f8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFactory\043298.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelFactory id:PanelFactory_298
+{
+  #keys: '[415136.0.1194549289]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListFactory_891
+    Component dhFactorys
+    {
+      #keys: '[415136.0.1194549295]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Factory]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: 'Unit'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReport.def
new file mode 100644
index 0000000..b25765d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReport.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelFinancialProductionReport
+{
+  #keys: '[415136.0.1193311792]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: Panelleft
+    #child: PanelRight
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def
deleted file mode 100644
index 5527cd6..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportHeader.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-Component PanelFinancialProductionReportHeader
-{
-  #keys: '[415136.0.834352344]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    #child: PanelFinancialProductionReportSearch
-    #child: PanelFinancialProductionReportOperation
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Taborder: 2
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def
deleted file mode 100644
index 9acdc9a..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportSearch.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-Component PanelFinancialProductionReportSearch
-{
-  #keys: '[415136.0.834352398]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    #child: PanelUnit
-    #child: PanelGeneration
-    #child: PanelMQBMLB
-    #child: PanelPower
-    #child: PanelExport
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def
index 3161a19..2191734 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelGeneration.def
@@ -1,24 +1,25 @@
 Quintiq file version 2.0
 Component PanelGeneration
 {
-  #keys: '[415136.0.834352628]'
+  #keys: '[415136.0.1194549296]'
   BaseType: 'WebPanel'
   Children:
   [
-    Component ddslGeneration
+    #child: ListGeneration_273
+    Component dhGenerations
     {
-      #keys: '[415136.0.834850709]'
-      BaseType: 'WebDropDownStringList'
+      #keys: '[415136.0.1194549302]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductGeneration]*'
       Properties:
       [
-        Label: 'Generation'
         Taborder: 0
       ]
     }
   ]
   Properties:
   [
-    Orientation: 'horizontal'
     Taborder: 1
+    Title: 'Generation'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelHeader.def
new file mode 100644
index 0000000..dcef188
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelHeader.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelHeader
+{
+  #keys: '[415136.0.1194549582]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelExport_369
+    #child: PanelOperation
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def
index 8bdd3ca..88d1fc7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelMQBMLB.def
@@ -1,24 +1,25 @@
 Quintiq file version 2.0
 Component PanelMQBMLB
 {
-  #keys: '[415136.0.834352657]'
+  #keys: '[415136.0.1194549303]'
   BaseType: 'WebPanel'
   Children:
   [
-    Component ddslMQBMLB
+    #child: ListMQBMLB_791
+    Component dhMQBMLBs
     {
-      #keys: '[415136.0.834850906]'
-      BaseType: 'WebDropDownStringList'
+      #keys: '[415136.0.1194549309]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductMLBMQB]*'
       Properties:
       [
-        Label: 'MQB/MLB'
         Taborder: 0
       ]
     }
   ]
   Properties:
   [
-    Orientation: 'horizontal'
     Taborder: 2
+    Title: 'MLB/MQB'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelOperation.def
similarity index 65%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelOperation.def
index 8bd7043..0d58d0f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelFinancialProductionReportOperation.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelOperation.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component PanelFinancialProductionReportOperation
+Component PanelOperation
 {
-  #keys: '[415136.0.834352420]'
+  #keys: '[415136.0.1194549737]'
   BaseType: 'WebPanel'
   Children:
   [
-    Component LabelFinancialProductionReportOperation
+    Component LabelOperation
     {
-      #keys: '[415136.0.834352468]'
+      #keys: '[415136.0.1194549738]'
       BaseType: 'WebLabel'
       Properties:
       [
@@ -16,9 +16,9 @@
         Text: 'Production import'
       ]
     }
-    Component ButtonProductionImport
+    Component ButtonProductionImport660
     {
-      #keys: '[415136.0.834352491]'
+      #keys: '[415136.0.1194549739]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -27,9 +27,9 @@
         Taborder: 1
       ]
     }
-    Component ButtonProductionExport
+    Component ButtonProductionExport854
     {
-      #keys: '[415136.0.834352534]'
+      #keys: '[415136.0.1194549740]'
       BaseType: 'WebButton'
       Properties:
       [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def
index d027e3a..47540b7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelPower.def
@@ -1,24 +1,25 @@
 Quintiq file version 2.0
 Component PanelPower
 {
-  #keys: '[415136.0.834352679]'
+  #keys: '[415136.0.1194549310]'
   BaseType: 'WebPanel'
   Children:
   [
-    Component ddslPower
+    #child: ListPower_480
+    Component dhPowers
     {
-      #keys: '[415136.0.834851149]'
-      BaseType: 'WebDropDownStringList'
+      #keys: '[415136.0.1194549316]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductPower]*'
       Properties:
       [
-        Label: 'Power'
         Taborder: 0
       ]
     }
   ]
   Properties:
   [
-    Orientation: 'horizontal'
     Taborder: 3
+    Title: 'Power'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelRight.def
new file mode 100644
index 0000000..37d3c38
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelRight.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelRight
+{
+  #keys: '[415136.0.1194549553]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelHeader
+    #child: PanelTable_673
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable\043673.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable\043673.def"
new file mode 100644
index 0000000..c1f3c2a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable\043673.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable id:PanelTable_673
+{
+  #keys: '[415136.0.1194549839]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable_97
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def
deleted file mode 100644
index 067a367..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelUnit.def
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-Component PanelUnit
-{
-  #keys: '[415136.0.834352594]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ddslUnit
-    {
-      #keys: '[415136.0.834851281]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: 'Unit'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_Panelleft.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_Panelleft.def
new file mode 100644
index 0000000..c168422
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_Panelleft.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+Component Panelleft
+{
+  #keys: '[415136.0.1194549288]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelFactory_298
+    #child: PanelPower
+    #child: PanelMQBMLB
+    #child: PanelGeneration
+  ]
+  Properties:
+  [
+    FixedSize: true
+    MinimumColumns: 20
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageFactory\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageFactory\0431.def"
new file mode 100644
index 0000000..4e3bfd6
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageFactory\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageFactory id:listActionBarPageFactory_1
+{
+  #keys: '[415136.0.1194549292]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageGeneration\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageGeneration\0431.def"
new file mode 100644
index 0000000..7ea9c91
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageGeneration\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageGeneration id:listActionBarPageGeneration_1
+{
+  #keys: '[415136.0.1194549299]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageMQBMLB\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageMQBMLB\0431.def"
new file mode 100644
index 0000000..d1099ea
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPageMQBMLB\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageMQBMLB id:listActionBarPageMQBMLB_1
+{
+  #keys: '[415136.0.1194549306]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPagePower\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPagePower\0431.def"
new file mode 100644
index 0000000..c24ed68
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listActionBarPagePower\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePower id:listActionBarPagePower_1
+{
+  #keys: '[415136.0.1194549313]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuFactory\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuFactory\0431.def"
new file mode 100644
index 0000000..0a733f0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuFactory\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuFactory id:listContextMenuFactory_1
+{
+  #keys: '[415136.0.1194549294]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuGeneration\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuGeneration\0431.def"
new file mode 100644
index 0000000..bb77b07
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuGeneration\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuGeneration id:listContextMenuGeneration_1
+{
+  #keys: '[415136.0.1194549301]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuMQBMLB\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuMQBMLB\0431.def"
new file mode 100644
index 0000000..cf83c53
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuMQBMLB\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuMQBMLB id:listContextMenuMQBMLB_1
+{
+  #keys: '[415136.0.1194549308]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuPower\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuPower\0431.def"
new file mode 100644
index 0000000..3645f21
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_listContextMenuPower\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuPower id:listContextMenuPower_1
+{
+  #keys: '[415136.0.1194549315]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable\0431.def"
similarity index 84%
rename from "_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def"
rename to "_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable\0431.def"
index 1023bac..abea2c6 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable\0431.def"
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component matrixEditorActionBarPageTable id:matrixEditorActionBarPageTable_1
 {
-  #keys: '[415136.0.858621874]'
+  #keys: '[415136.0.1194549847]'
   BaseType: 'matrixEditorActionBarPage'
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable\0431.def"
similarity index 84%
rename from "_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def"
rename to "_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable\0431.def"
index 71dfdc9..be96e0a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable\0431.def"
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component matrixeditorContextMenuTable id:matrixeditorContextMenuTable_1
 {
-  #keys: '[415136.0.858621875]'
+  #keys: '[415136.0.1194549848]'
   BaseType: 'matrixeditorContextMenu'
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged\04357.def"
new file mode 100644
index 0000000..579d7ca
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged\04357.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListFactory_891
+Response OnCheckedChanged () id:Response_ListFactory_891_OnCheckedChanged_57
+{
+  #keys: '[415136.0.1194549281]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections        := selectset( MacroPlan, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
+      dhFactorys.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged.def
new file mode 100644
index 0000000..77ca2c7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListFactory_891_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListFactory_891
+Response OnCheckedChanged (
+  structured[Factory] checkeditems
+) id:Response_ListFactory_891_OnCheckedChanged
+{
+  #keys: '[415136.0.1194549282]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhFactorys.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged\043384.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged\043384.def"
new file mode 100644
index 0000000..c660207
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged\043384.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListGeneration_273
+Response OnCheckedChanged () id:Response_ListGeneration_273_OnCheckedChanged_384
+{
+  #keys: '[415136.0.1194549278]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections     := selectset( MacroPlan, ProductGeneration, generation, true );
+      dhGenerations.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged.def
new file mode 100644
index 0000000..31457b4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListGeneration_273
+Response OnCheckedChanged (
+  structured[ProductGeneration] checkeditems
+) id:Response_ListGeneration_273_OnCheckedChanged
+{
+  #keys: '[415136.0.1194549279]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhGenerations.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged\043812.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged\043812.def"
new file mode 100644
index 0000000..ac75cf6
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged\043812.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListMQBMLB_791
+Response OnCheckedChanged () id:Response_ListMQBMLB_791_OnCheckedChanged_812
+{
+  #keys: '[415136.0.1194549275]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections     := selectset( MacroPlan, ProductMLBMQB, generation, true );
+      dhMQBMLBs.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged.def
new file mode 100644
index 0000000..2f0ffd6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListMQBMLB_791_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListMQBMLB_791
+Response OnCheckedChanged (
+  structured[ProductMLBMQB] checkeditems
+) id:Response_ListMQBMLB_791_OnCheckedChanged
+{
+  #keys: '[415136.0.1194549276]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhMQBMLBs.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged\043568.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged\043568.def"
new file mode 100644
index 0000000..108f68f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged\043568.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPower_480
+Response OnCheckedChanged () id:Response_ListPower_480_OnCheckedChanged_568
+{
+  #keys: '[415136.0.1194549272]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections     := selectset( MacroPlan, ProductPower, generation, true );
+      dhPowers.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged.def
new file mode 100644
index 0000000..183861b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListPower_480_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPower_480
+Response OnCheckedChanged (
+  structured[ProductPower] checkeditems
+) id:Response_ListPower_480_OnCheckedChanged
+{
+  #keys: '[415136.0.1194549273]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhPowers.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
index 3c15265..299ea3d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -11,11 +11,11 @@
     [*
       //鍒濆鍖�
       table := FinancialProductionSource::InitiateSearch( MacroPlan );
-      //table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
-      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      Factory::Initilize( MacroPlan );
+      ProductGeneration::Initilize( MacroPlan );
+      ProductPower::Initilize( MacroPlan );
+      ProductMLBMQB::Initilize( MacroPlan );
       DataHolderTable.Data( table );
-      
-      //dhSearch.Data( MacroPlan.FinancialProductionSearch() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonExport696_OnClick.def
similarity index 74%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonExport696_OnClick.def
index 9b9d0c5..2ad8c4d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonExport696_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelExport/ButtonExport
-Response OnClick () id:Response_PanelExport_ButtonExport_OnClick
+#parent: PanelExport_369/ButtonExport696
+Response OnClick () id:Response_PanelExport_369_ButtonExport696_OnClick
 {
-  #keys: '[415136.0.834850599]'
+  #keys: '[415136.0.1194549631]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..31452fd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonSearch_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelExport_369/ButtonSearch
+Response OnClick () id:Response_PanelExport_369_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.1194549630]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      
+      if( not isnull( DataHolderTable.Data() ) ){
+        productids              := selectuniquevalues( DataHolderProduct.Data(), Elements, product, exists( dhGenerations.Data(), Elements, e, e.Generation() = product.Generation() )
+                                                       and exists( dhMQBMLBs.Data(), Elements, e, e.MLBMQB() = product.MQBMLB() )
+                                                       and exists( dhPowers.Data(), Elements, e, e.Power() = product.Power() ), product.ID() );
+        
+        DataHolderTable.Data().Generate( dhSearch.Data(), dhFactorys.Data(), productids );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_bRefresh_OnClick.def
similarity index 81%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_bRefresh_OnClick.def
index e06555c..e61a571 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_bRefresh_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelExport/bRefresh_859
-Response OnClick () id:Response_PanelExport_670_bRefresh_OnClick
+#parent: PanelExport_369/bRefresh
+Response OnClick () id:Response_PanelExport_369_bRefresh_OnClick
 {
-  #keys: '[415136.0.1153802737]'
+  #keys: '[415136.0.1194549629]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonSearch_OnClick.def
deleted file mode 100644
index de14896..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonSearch_OnClick.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelExport/ButtonSearch
-Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick
-{
-  #keys: '[415136.0.972170823]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
deleted file mode 100644
index f0a61ca..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelGeneration/ddslGeneration
-Response OnCreated () id:Response_PanelGeneration_ddslGeneration_OnCreated
-{
-  #keys: '[415136.0.834850727]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
-      
-      valueString := values.Concatenate( ";" );
-      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
-      
-      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
deleted file mode 100644
index 95ddf8e..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelGeneration/ddslGeneration
-Response OnSelectionChanged () id:Response_PanelGeneration_ddslGeneration_OnSelectionChanged
-{
-  #keys: '[415136.0.840791771]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
-        dhSearch.Data().Generation( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
deleted file mode 100644
index 69c8279..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelMQBMLB/ddslMQBMLB
-Response OnCreated () id:Response_PanelMQBMLB_ddslMQBMLB_OnCreated
-{
-  #keys: '[415136.0.834851070]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.MQBMLB() );
-      
-      valueString := values.Concatenate( ";" );
-      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
-      
-      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
deleted file mode 100644
index b2a6b92..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelMQBMLB/ddslMQBMLB
-Response OnSelectionChanged () id:Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged
-{
-  #keys: '[415136.0.842090372]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
-        dhSearch.Data().MqbMlb( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionExport854_OnClick.def
similarity index 67%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionExport854_OnClick.def
index 3749d2c..be9d853 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionExport854_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelFinancialProductionReportOperation/ButtonProductionExport
-Response OnClick () id:Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnClick
+#parent: PanelOperation/ButtonProductionExport854
+Response OnClick () id:Response_PanelOperation_ButtonProductionExport854_OnClick
 {
-  #keys: '[415136.0.834850519]'
+  #keys: '[415136.0.1194549735]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionImport660_OnClick.def
similarity index 82%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionImport660_OnClick.def
index 53c7632..4c7abdd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnCl.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionImport660_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelFinancialProductionReportOperation/ButtonProductionImport
-Response OnClick () id:Response_PanelFinancialProductionReportOperation_ButtonProductionImport_OnClick
+#parent: PanelOperation/ButtonProductionImport660
+Response OnClick () id:Response_PanelOperation_ButtonProductionImport660_OnClick
 {
-  #keys: '[415136.0.836011369]'
+  #keys: '[415136.0.1194549736]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
@@ -30,7 +30,7 @@
           if( not source.IsExistFutureMonthData() or 
               ( source.IsExistFutureMonthData() and WebMessageBox::Question( this, Translations::MP_FinancialProductionReport_Question(), 'Yes|No' ) = 0 ) ){
              source.AfterImport();
-             DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+             FinancialProductionSource::InitiateSearch( MacroPlan );
           }
           
           WebMessageBox::Success( Translations::A_VWED_Success() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def
deleted file mode 100644
index 08abda9..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnCreated.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPower/ddslPower
-Response OnCreated () id:Response_PanelPower_ddslPower_OnCreated
-{
-  #keys: '[415136.0.834851166]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Power() );
-      
-      valueString := values.Concatenate( ";" );
-      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
-      
-      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
deleted file mode 100644
index e00c8da..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPower/ddslPower
-Response OnSelectionChanged () id:Response_PanelPower_ddslPower_OnSelectionChanged
-{
-  #keys: '[415136.0.842090478]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
-        dhSearch.Data().Power( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnCreated.def
deleted file mode 100644
index f6c7ab5..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnCreated.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelUnit/ddslUnit
-Response OnCreated () id:Response_PanelUnit_ddslUnit_OnCreated
-{
-  #keys: '[415136.0.848320822]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      
-      valueString := "<All>;" + FinancialProductionReport::GetDefaultCCUnit() + ";" + FinancialProductionReport::GetDefaultDLUnit();
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
deleted file mode 100644
index 634002f..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelUnit/ddslUnit
-Response OnSelectionChanged () id:Response_PanelUnit_ddslUnit_OnSelectionChanged
-{
-  #keys: '[415136.0.840791631]'
-  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_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
index 01046c8..775706e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
@@ -7,8 +7,6 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: PanelFinancialProductionReportHeader
-    #child: PanelTable
     Component DataHolderTable
     {
       #keys: '[415136.0.840720309]'
@@ -44,6 +42,7 @@
         Taborder: 1
       ]
     }
+    #child: PanelFinancialProductionReport
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListFactory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListFactory.def
new file mode 100644
index 0000000..6625be0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListFactory.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListFactory
+{
+  #keys: '[415136.0.1193321775]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorFactory
+    {
+      #keys: '[415136.0.1193321776]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'Factory'
+      ]
+    }
+    #child: listActionBarPageFactory
+    Component DataSetLevelFactory
+    {
+      #keys: '[415136.0.1193321778]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuFactory
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}}]'
+        ContextMenu: 'listContextMenuFactory'
+        SortCriteria: 'ID'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListGeneration.def
new file mode 100644
index 0000000..d340e76
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListGeneration.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListGeneration
+{
+  #keys: '[415136.0.1193321812]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorGeneration
+    {
+      #keys: '[415136.0.1193321813]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'ProductGeneration'
+      ]
+    }
+    #child: listActionBarPageGeneration
+    Component DataSetLevelGeneration
+    {
+      #keys: '[415136.0.1193321815]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuGeneration
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Generation","title":"Generation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Generation"}}]'
+        ContextMenu: 'listContextMenuGeneration'
+        SortCriteria: 'Generation'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListMQBMLB.def
new file mode 100644
index 0000000..fc28182
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListMQBMLB.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListMQBMLB
+{
+  #keys: '[415136.0.1193321849]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorMQBMLB
+    {
+      #keys: '[415136.0.1193321850]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'ProductMLBMQB'
+      ]
+    }
+    #child: listActionBarPageMQBMLB
+    Component DataSetLevelMQBMLB
+    {
+      #keys: '[415136.0.1193321852]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuMQBMLB
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MLBMQB","title":"MLBMQB","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MLBMQB"}}]'
+        ContextMenu: 'listContextMenuMQBMLB'
+        SortCriteria: 'MLBMQB'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListPower.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListPower.def
new file mode 100644
index 0000000..8ff9102
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListPower.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListPower
+{
+  #keys: '[415136.0.1193321886]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPower
+    {
+      #keys: '[415136.0.1193321887]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'ProductPower'
+      ]
+    }
+    #child: listActionBarPagePower
+    Component DataSetLevelPower
+    {
+      #keys: '[415136.0.1193321889]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPower
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Power","title":"Power","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Power"}}]'
+        ContextMenu: 'listContextMenuPower'
+        SortCriteria: 'Power'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def" b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable.def
similarity index 83%
rename from "_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def"
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable.def
index 4ef0432..3139930 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def"
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable.def
@@ -1,19 +1,19 @@
 Quintiq file version 2.0
-Component MatrixEditorTable id:MatrixEditorTable_623
+Component MatrixEditorTable
 {
-  #keys: '[415136.0.858621867]'
+  #keys: '[415136.0.1193322115]'
   BaseType: 'WebMatrixEditor'
   Children:
   [
     Component MatrixEditorCellTable
     {
-      #keys: '[415136.0.858621868]'
+      #keys: '[415136.0.1193322116]'
       BaseType: 'WebMatrixEditorCell'
       Children:
       [
         Component DataExtractorCell
         {
-          #keys: '[415136.0.858621869]'
+          #keys: '[415136.0.1193322117]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
@@ -35,13 +35,13 @@
     }
     Component MatrixEditorRowsTable
     {
-      #keys: '[415136.0.858621870]'
+      #keys: '[415136.0.1193322118]'
       BaseType: 'WebMatrixEditorHeaderLevel'
       Children:
       [
         Component DataExtractorRow
         {
-          #keys: '[415136.0.858621871]'
+          #keys: '[415136.0.1193322119]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
@@ -61,13 +61,13 @@
     }
     Component MatrixEditorColumnsTable
     {
-      #keys: '[415136.0.858621872]'
+      #keys: '[415136.0.1193322120]'
       BaseType: 'WebMatrixEditorHeaderLevel'
       Children:
       [
         Component DataExtractorColumn
         {
-          #keys: '[415136.0.858621873]'
+          #keys: '[415136.0.1193322121]'
           BaseType: 'WebDataExtractor'
           Properties:
           [
@@ -86,8 +86,8 @@
         Taborder: 2
       ]
     }
-    #child: matrixEditorActionBarPageTable_1
-    #child: matrixeditorContextMenuTable_1
+    #child: matrixEditorActionBarPageTable
+    #child: matrixeditorContextMenuTable
   ]
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
deleted file mode 100644
index c3e5888..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
+++ /dev/null
@@ -1,45 +0,0 @@
-Quintiq file version 2.0
-Component PanelExport id:PanelExport_545
-{
-  #keys: '[415136.0.858621784]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ButtonExport
-    {
-      #keys: '[415136.0.858621785]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭'
-        Taborder: 1
-      ]
-    }
-    Component ButtonSearch id:ButtonSearch_75
-    {
-      #keys: '[415136.0.972100211]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'VIEW'
-        Taborder: 0
-      ]
-    }
-    Component bRefresh
-    {
-      #keys: '[415136.0.1153802934]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'REFRESH'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    Orientation: 'horizontal'
-    Taborder: 4
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport.def
similarity index 71%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport.def
index 512bfd5..e89cf40 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component PanelExport
 {
-  #keys: '[415136.0.834352718]'
+  #keys: '[415136.0.1193321967]'
   BaseType: 'WebPanel'
   Children:
   [
-    Component ButtonExport
+    Component ButtonExport570
     {
-      #keys: '[415136.0.834352737]'
+      #keys: '[415136.0.1193321968]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -18,7 +18,7 @@
     }
     Component ButtonSearch
     {
-      #keys: '[415136.0.972170614]'
+      #keys: '[415136.0.1193321969]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -26,9 +26,9 @@
         Taborder: 0
       ]
     }
-    Component bRefresh id:bRefresh_859
+    Component bRefresh
     {
-      #keys: '[415136.0.1153802738]'
+      #keys: '[415136.0.1193321970]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -40,6 +40,6 @@
   Properties:
   [
     Orientation: 'horizontal'
-    Taborder: 4
+    Taborder: 0
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFactory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFactory.def
new file mode 100644
index 0000000..40cd57d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFactory.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelFactory
+{
+  #keys: '[415136.0.1193321774]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhFactorys
+    {
+      #keys: '[415136.0.1193321780]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Factory]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: ListFactory
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: 'Unit'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReport.def
new file mode 100644
index 0000000..5163288
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReport.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReport
+{
+  #keys: '[415136.0.1193321676]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelLeft
+    #child: PanelRight
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def
deleted file mode 100644
index c5804ea..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-Component PanelFinancialSalesReportHeader
-{
-  #keys: '[415136.0.858621774]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    #child: PanelFinancialSalesReportSearch
-    #child: PanelFinancialSalesReportOperation
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Taborder: 2
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def
deleted file mode 100644
index d6ff179..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-Component PanelFinancialSalesReportSearch
-{
-  #keys: '[415136.0.858621775]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    #child: PanelUnit_715
-    #child: PanelGeneration_844
-    #child: PanelMQBMLB_603
-    #child: PanelPower_858
-    #child: PanelExport_545
-  ]
-  Properties:
-  [
-    FixedSize: true
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043653.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043653.def"
new file mode 100644
index 0000000..4c61b6e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043653.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelGeneration id:PanelGeneration_653
+{
+  #keys: '[415136.0.1193321811]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhGenerations
+    {
+      #keys: '[415136.0.1193321817]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductGeneration]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: ListGeneration
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: 'Generation'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def"
deleted file mode 100644
index ab48548..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def"
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-Component PanelGeneration id:PanelGeneration_844
-{
-  #keys: '[415136.0.858621778]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ddslGeneration
-    {
-      #keys: '[415136.0.858621779]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: 'Generation'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Orientation: 'horizontal'
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelHeader.def
new file mode 100644
index 0000000..0570d30
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelHeader.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelHeader
+{
+  #keys: '[415136.0.1193321921]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelExport
+    #child: PanelOperation
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelLeft.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelLeft.def
new file mode 100644
index 0000000..00fd43a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelLeft.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+Component PanelLeft
+{
+  #keys: '[415136.0.1193321690]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelFactory
+    #child: PanelGeneration_653
+    #child: PanelMQBMLB_466
+    #child: PanelPower_510
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043466.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043466.def"
new file mode 100644
index 0000000..fa4fc96
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043466.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelMQBMLB id:PanelMQBMLB_466
+{
+  #keys: '[415136.0.1193321848]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhMQBMLBs
+    {
+      #keys: '[415136.0.1193321854]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductMLBMQB]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: ListMQBMLB
+  ]
+  Properties:
+  [
+    Taborder: 2
+    Title: 'MLB/MQB'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def"
deleted file mode 100644
index 37da59e..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def"
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-Component PanelMQBMLB id:PanelMQBMLB_603
-{
-  #keys: '[415136.0.858621780]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ddslMQBMLB
-    {
-      #keys: '[415136.0.858621781]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: 'MQB/MLB'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Orientation: 'horizontal'
-    Taborder: 2
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelOperation.def
similarity index 79%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelOperation.def
index c007602..f333477 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelOperation.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component PanelFinancialSalesReportOperation
+Component PanelOperation
 {
-  #keys: '[415136.0.858621786]'
+  #keys: '[415136.0.1193322031]'
   BaseType: 'WebPanel'
   Children:
   [
     Component LabelFinancialSalesReportOperation
     {
-      #keys: '[415136.0.858621787]'
+      #keys: '[415136.0.1193322032]'
       BaseType: 'WebLabel'
       Properties:
       [
@@ -18,7 +18,7 @@
     }
     Component ButtonSalesImport
     {
-      #keys: '[415136.0.858621788]'
+      #keys: '[415136.0.1193322033]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -29,7 +29,7 @@
     }
     Component ButtonSalesExport
     {
-      #keys: '[415136.0.858621789]'
+      #keys: '[415136.0.1193322034]'
       BaseType: 'WebButton'
       Properties:
       [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043510.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043510.def"
new file mode 100644
index 0000000..c6ffba8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043510.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelPower id:PanelPower_510
+{
+  #keys: '[415136.0.1193321885]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhPowers
+    {
+      #keys: '[415136.0.1193321891]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductPower]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: ListPower
+  ]
+  Properties:
+  [
+    Taborder: 3
+    Title: 'Power'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def"
deleted file mode 100644
index e41599f..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def"
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-Component PanelPower id:PanelPower_858
-{
-  #keys: '[415136.0.858621782]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ddslPower
-    {
-      #keys: '[415136.0.858621783]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: 'Power'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Orientation: 'horizontal'
-    Taborder: 3
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelRight.def
new file mode 100644
index 0000000..6cd049d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelRight.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelRight
+{
+  #keys: '[415136.0.1193321903]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelHeader
+    #child: PanelTable
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def"
deleted file mode 100644
index b9632a5..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def"
+++ /dev/null
@@ -1,14 +0,0 @@
-Quintiq file version 2.0
-Component PanelTable id:PanelTable_424
-{
-  #keys: '[415136.0.858621866]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    #child: MatrixEditorTable_623
-  ]
-  Properties:
-  [
-    Taborder: 3
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable.def
similarity index 74%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable.def
index 4cf2817..4e4c868 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component PanelTable
 {
-  #keys: '[415136.0.834352365]'
+  #keys: '[415136.0.1193322114]'
   BaseType: 'WebPanel'
   Children:
   [
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 1
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def"
deleted file mode 100644
index 2d6d002..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def"
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-Component PanelUnit id:PanelUnit_715
-{
-  #keys: '[415136.0.858621776]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component ddslUnit
-    {
-      #keys: '[415136.0.858621777]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: 'Unit'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Orientation: 'horizontal'
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageFactory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageFactory.def
new file mode 100644
index 0000000..87c08e5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageFactory.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageFactory
+{
+  #keys: '[415136.0.1193321777]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageGeneration.def
new file mode 100644
index 0000000..aa157ed
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageGeneration.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageGeneration
+{
+  #keys: '[415136.0.1193321814]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageMQBMLB.def
new file mode 100644
index 0000000..212d806
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPageMQBMLB.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageMQBMLB
+{
+  #keys: '[415136.0.1193321851]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPagePower.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPagePower.def
new file mode 100644
index 0000000..842c138
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listActionBarPagePower.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePower
+{
+  #keys: '[415136.0.1193321888]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuFactory.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuFactory.def
new file mode 100644
index 0000000..68a150b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuFactory.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuFactory
+{
+  #keys: '[415136.0.1193321779]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuGeneration.def
new file mode 100644
index 0000000..a981517
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuGeneration.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuGeneration
+{
+  #keys: '[415136.0.1193321816]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuMQBMLB.def
new file mode 100644
index 0000000..a27027c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuMQBMLB.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuMQBMLB
+{
+  #keys: '[415136.0.1193321853]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuPower.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuPower.def
new file mode 100644
index 0000000..d8e2f0e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_listContextMenuPower.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuPower
+{
+  #keys: '[415136.0.1193321890]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable.def
similarity index 81%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable.def
index 16fafd3..8baf832 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixEditorActionBarPageTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component matrixEditorActionBarPageTable
 {
-  #keys: '[415136.0.844701439]'
+  #keys: '[415136.0.1193322122]'
   BaseType: 'matrixEditorActionBarPage'
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable.def
similarity index 81%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable.def
index 5a4b184..78943bd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_matrixeditorContextMenuTable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component matrixeditorContextMenuTable
 {
-  #keys: '[415136.0.844701442]'
+  #keys: '[415136.0.1193322123]'
   BaseType: 'matrixeditorContextMenu'
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged\043150.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged\043150.def"
new file mode 100644
index 0000000..974e121
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged\043150.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListFactory
+Response OnCheckedChanged () id:Response_ListFactory_OnCheckedChanged_150
+{
+  #keys: '[415136.0.1193321770]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections        := selectset( MacroPlan, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() );
+      dhFactorys.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged.def
new file mode 100644
index 0000000..13aeb17
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListFactory_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListFactory
+Response OnCheckedChanged (
+  structured[Factory] checkeditems
+) id:Response_ListFactory_OnCheckedChanged
+{
+  #keys: '[415136.0.1193321771]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhFactorys.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged\043670.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged\043670.def"
new file mode 100644
index 0000000..bd21d5e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged\043670.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListGeneration
+Response OnCheckedChanged () id:Response_ListGeneration_OnCheckedChanged_670
+{
+  #keys: '[415136.0.1193321807]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections     := selectset( MacroPlan, ProductGeneration, generation, true );
+      dhGenerations.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged.def
new file mode 100644
index 0000000..be707a0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListGeneration
+Response OnCheckedChanged (
+  structured[ProductGeneration] checkeditems
+) id:Response_ListGeneration_OnCheckedChanged
+{
+  #keys: '[415136.0.1193321808]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhGenerations.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged\043475.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged\043475.def"
new file mode 100644
index 0000000..e95fe5d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged\043475.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListMQBMLB
+Response OnCheckedChanged () id:Response_ListMQBMLB_OnCheckedChanged_475
+{
+  #keys: '[415136.0.1193321844]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections     := selectset( MacroPlan, ProductMLBMQB, generation, true );
+      dhMQBMLBs.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged.def
new file mode 100644
index 0000000..5fb58bf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListMQBMLB
+Response OnCheckedChanged (
+  structured[ProductMLBMQB] checkeditems
+) id:Response_ListMQBMLB_OnCheckedChanged
+{
+  #keys: '[415136.0.1193321845]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhMQBMLBs.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged\043976.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged\043976.def"
new file mode 100644
index 0000000..c2db30a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged\043976.def"
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPower
+Response OnCheckedChanged () id:Response_ListPower_OnCheckedChanged_976
+{
+  #keys: '[415136.0.1193321881]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections     := selectset( MacroPlan, ProductPower, generation, true );
+      dhPowers.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged.def
new file mode 100644
index 0000000..db8d3d0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListPower_OnCheckedChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListPower
+Response OnCheckedChanged (
+  structured[ProductPower] checkeditems
+) id:Response_ListPower_OnCheckedChanged
+{
+  #keys: '[415136.0.1193321882]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnCheckedChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      selections := checkeditems.Copy();
+      dhPowers.Data( &selections );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
index c61aeb4..a705821 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -10,11 +10,11 @@
     Body:
     [*
       table := FinancialSalesSource::InitiateSearch( MacroPlan );
-      //table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
-      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      Factory::Initilize( MacroPlan );
+      ProductGeneration::Initilize( MacroPlan );
+      ProductPower::Initilize( MacroPlan );
+      ProductMLBMQB::Initilize( MacroPlan );
       DataHolderTable.Data( table );
-      
-      //dhSearch.Data( MacroPlan.FinancialSalesSearch() );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonSearch_OnClick\043118.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonSearch_OnClick\043118.def"
deleted file mode 100644
index 439f59d..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonSearch_OnClick\043118.def"
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelExport_545/ButtonSearch_75
-Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick_118
-{
-  #keys: '[415136.0.972100210]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  QuillAction
-  {
-    Body:
-    [*
-      if( not isnull( DataHolderTable.Data() ) ){
-        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonExport570_OnClick.def
similarity index 76%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonExport570_OnClick.def
index aa945e3..96fa9ae 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonExport570_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelExport_545/ButtonExport
-Response OnClick () id:Response_PanelExport_545_ButtonExport_OnClick
+#parent: PanelExport/ButtonExport570
+Response OnClick () id:Response_PanelExport_ButtonExport570_OnClick
 {
-  #keys: '[415136.0.858621765]'
+  #keys: '[415136.0.1193321966]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..39f0daa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonSearch_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSearch
+Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.1193321965]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( DataHolderTable.Data() ) ){
+        productids              := selectuniquevalues( DataHolderProduct.Data(), Elements, product, exists( dhGenerations.Data(), Elements, e, e.Generation() = product.Generation() )
+                                                       and exists( dhMQBMLBs.Data(), Elements, e, e.MLBMQB() = product.MQBMLB() )
+                                                       and exists( dhPowers.Data(), Elements, e, e.Power() = product.Power() ), product.ID() );
+        
+        DataHolderTable.Data().Generate( dhSearch.Data(), dhFactorys.Data(), productids );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_bRefresh_OnClick.def
similarity index 89%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_bRefresh_OnClick.def
index 8485ba6..330cc27 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_bRefresh_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelExport_545/bRefresh
+#parent: PanelExport/bRefresh
 Response OnClick () id:Response_PanelExport_bRefresh_OnClick
 {
-  #keys: '[415136.0.1153802933]'
+  #keys: '[415136.0.1193321964]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def
deleted file mode 100644
index e0e4fcd..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelGeneration_844/ddslGeneration
-Response OnCreated () id:Response_PanelGeneration_844_ddslGeneration_OnCreated
-{
-  #keys: '[415136.0.858621771]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
-      
-      valueString := values.Concatenate( ";" );
-      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
-      
-      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
deleted file mode 100644
index bcd9b6c..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelGeneration_844/ddslGeneration
-Response OnSelectionChanged () id:Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged
-{
-  #keys: '[415136.0.858621770]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //浠f暟鏀瑰彉鍚庡埛鏂版樉绀�
-      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
-        dhSearch.Data().Generation( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def
deleted file mode 100644
index f86feef..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelMQBMLB_603/ddslMQBMLB
-Response OnCreated () id:Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated
-{
-  #keys: '[415136.0.858621769]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.MQBMLB() );
-      
-      valueString := values.Concatenate( ";" );
-      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
-      
-      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
deleted file mode 100644
index 0376e4a..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelMQBMLB_603/ddslMQBMLB
-Response OnSelectionChanged () id:Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged
-{
-  #keys: '[415136.0.858621768]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //妯旱鍒舵敼鍙樺悗鍒锋柊鏄剧ず
-      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
-        dhSearch.Data().MqbMlb( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesExport_OnClick.def
similarity index 69%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesExport_OnClick.def
index 7eea40f..79d5d79 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesExport_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelFinancialSalesReportOperation/ButtonSalesExport
-Response OnClick () id:Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick
+#parent: PanelOperation/ButtonSalesExport
+Response OnClick () id:Response_PanelOperation_ButtonSalesExport_OnClick
 {
-  #keys: '[415136.0.858621763]'
+  #keys: '[415136.0.1193322029]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesImport_OnClick.def
similarity index 84%
rename from _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesImport_OnClick.def
index 99db221..c8b312a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelOperation_ButtonSalesImport_OnClick.def
@@ -1,8 +1,8 @@
 Quintiq file version 2.0
-#parent: PanelFinancialSalesReportOperation/ButtonSalesImport
-Response OnClick () id:Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick
+#parent: PanelOperation/ButtonSalesImport
+Response OnClick () id:Response_PanelOperation_ButtonSalesImport_OnClick
 {
-  #keys: '[415136.0.858621764]'
+  #keys: '[415136.0.1193322030]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
@@ -30,7 +30,7 @@
           if( not source.IsExistFutureMonthData() or 
               ( source.IsExistFutureMonthData() and WebMessageBox::Question( this, Translations::MP_FinancialProductionReport_Question(), 'Yes|No' ) = 0 ) ){
              source.AfterImport();
-             DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+             FinancialSalesSource::InitiateSearch( MacroPlan );
           }
           
           WebMessageBox::Success( Translations::A_VWED_Success() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def
deleted file mode 100644
index 6f642a4..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPower_858/ddslPower
-Response OnCreated () id:Response_PanelPower_858_ddslPower_OnCreated
-{
-  #keys: '[415136.0.858621767]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Power() );
-      
-      valueString := values.Concatenate( ";" );
-      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
-      
-      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
deleted file mode 100644
index ef6b683..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPower_858/ddslPower
-Response OnSelectionChanged () id:Response_PanelPower_858_ddslPower_OnSelectionChanged
-{
-  #keys: '[415136.0.858621766]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //鍔熺巼鏀瑰彉鍚庡埛鏂版樉绀�
-      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
-        dhSearch.Data().Power( selection );
-      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
-      }
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
deleted file mode 100644
index 28ae246..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
+++ /dev/null
@@ -1,19 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelUnit_715/ddslUnit
-Response OnCreated () id:Response_PanelUnit_715_ddslUnit_OnCreated
-{
-  #keys: '[415136.0.858621773]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      
-      valueString := FinancialSalesReport::GetDefaultAllUnit() + ";" + FinancialSalesReport::GetDefaultCCUnit() + ";" + FinancialSalesReport::GetDefaultDLUnit();
-      
-      this.Strings( valueString );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
deleted file mode 100644
index a236b1a..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelUnit_715/ddslUnit
-Response OnSelectionChanged () id:Response_PanelUnit_715_ddslUnit_OnSelectionChanged
-{
-  #keys: '[415136.0.858621772]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
-  QuillAction
-  {
-    Body:
-    [*
-      //Unit鏇存柊鍚庣敓鎴愭柊鐨勬樉绀�
-      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_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
index 7261f0a..e20d2d2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
@@ -42,8 +42,7 @@
         Taborder: 1
       ]
     }
-    #child: PanelTable_424
-    #child: PanelFinancialSalesReportHeader
+    #child: PanelFinancialSalesReport
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
index 6ed797b..b305b69 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -14,11 +14,7 @@
       ProductGeneration::Initilize( MacroPlan );
       ProductPower::Initilize( MacroPlan );
       ProductMLBMQB::Initilize( MacroPlan );
-      //table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
-      //info( '------------------2----------------', table.IsShow() );
       DataHolderTable.Data( table );
-      
-      //dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSearch_OnClick.def
index 9b96077..76d42a9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSearch_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSearch_OnClick.def
@@ -9,10 +9,6 @@
   {
     Body:
     [*
-      c := 'VWED CC';
-      info( c.Format( 'S(Len(10),AlignRight)' ), c.Format( 'S(Len(10))' ) );
-      a := 'All';
-      info( a.Format( 'S(Len(10),AlignRight)' ), a.Format( 'S(Len(10))' ) );
       if( not isnull( DataHolderTable.Data() ) ){
         productids              := selectuniquevalues( DataHolderProduct.Data(), Elements, product, exists( dhGenerations.Data(), Elements, e, e.Generation() = product.Generation() )
                                                        and exists( dhMQBMLBs.Data(), Elements, e, e.MLBMQB() = product.MQBMLB() )

--
Gitblit v1.9.3