From ed09bf3eb41fcf1b79b083ac3d959f110b7e613b Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期一, 14 十月 2024 18:28:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev

---
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def             |    3 
 _Main/BL/InfoMessages.qbl                                                                                                         |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def                                        |   12 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl                                                                 |    3 
 _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_Form701/Response_OnCreated.def                                                              |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_369_ButtonExport696_OnClick.def          |    6 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_IsUpdate.qbl                                                                    |    8 
 _Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl                                                                           |   18 
 _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_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def                    |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelOperation_ButtonProductionExport854_OnClick.def |    6 
 _Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl                                                                    |   25 
 _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                                             |   12 
 _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/BL/Type_OfflinePlanTableInfo/Attribute_TableSaveTime.qbl                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListGeneration_OnCheckedChanged.def                       |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_ListMQBMLB_OnCheckedChanged#475.def                       |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def                                            |    3 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def                                 |    9 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_InitiateSearch.qbl                                                           |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_ListPower.def                                            |   43 +
 _Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl                                                                         |   76 +
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl                                                                |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_ButtonSearch_OnClick.def                      |   22 
 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def                                |   17 
 _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_ApplicationMacroPlanner/Method_GetMacroPlanByMDSID.def                                      |   24 
 _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/BL/Type_Forecast/Attribute_Differnce.qbl                                                                                    |    7 
 _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_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl                                                     |   23 
 _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/BL/Type_OfflinePlanTableInfo/_ROOT_Type_OfflinePlanTableInfo.qbl                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport.def                                          |   14 
 _Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanMDSID.qbl                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable.def                                           |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_ListGeneration_273_OnCheckedChanged.def              |   19 
 _Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanName.qbl                                                                    |    7 
 _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/BL/Type_OfflinePlanTableInfo/Attribute_TableName.qbl                                                                        |    7 
 _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/BL/Type_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl                                                                 |   10 
 _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_Form701/Component_PanelRibbon504#801.def                                                    |   44 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def                  |    2 
 _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_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl                                                                |    3 
 _Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl                                                             |    4 
 _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                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def                                   |   10 
 _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_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick#715.def                          |   12 
 _Main/BL/Type_Forecast/Function_CalcDiffernce.qbl                                                                                 |   13 
 _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 
 _Main/BL/Relations/Relation_OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo.qbl                                   |   23 
 _Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl                                               |   26 
 /dev/null                                                                                                                         |   20 
 _Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl                                                      |   20 
 _Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl                                                                        |   23 
 _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 
 134 files changed, 1,801 insertions(+), 389 deletions(-)

diff --git a/_Main/BL/InfoMessages.qbl b/_Main/BL/InfoMessages.qbl
index fa931f1..f12c34f 100644
--- a/_Main/BL/InfoMessages.qbl
+++ b/_Main/BL/InfoMessages.qbl
@@ -174,9 +174,11 @@
   {
     DefaultText: 'The import ChangeLossNr is not positive number.'
   }
-  InfoMessage MP_ChangeLossSettingExcel_Import_ProductNoExist
+  InfoMessage MP_ChangeLossSettingExcel_Import_ProductNoExist (
+    const String productids
+  )
   {
-    DefaultText: 'The entered product does not exist.'
+    DefaultText: 'The entered products @productids@does not exist.'
   }
   InfoMessage MP_ChangeLossSettingExcel_Import_UnitNoExist
   {
diff --git a/_Main/BL/Relations/Relation_OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo.qbl b/_Main/BL/Relations/Relation_OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo.qbl
new file mode 100644
index 0000000..6320701
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OfflinePlanTableInfo_RecycleBin_RecycleBin_OfflinePlanTableInfo
+{
+  #keys: '1[414996.1.124530089]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide RecycleBin
+  {
+    #keys: '3[414996.1.124530091][414996.1.124530090][414996.1.124530092]'
+    Cardinality: '0to1'
+    ObjectDefinition: OfflinePlanTableInfo
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OfflinePlanTableInfo
+  {
+    #keys: '3[414996.1.124530094][414996.1.124530093][414996.1.124530095]'
+    Cardinality: '1toN'
+    ObjectDefinition: RecycleBin
+    OwningSide: 'Owned'
+  }
+}
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_CCEngineLogisticsCostReport/StaticMethod_Import.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
index c08efa2..69d95bd 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
@@ -19,7 +19,8 @@
     owner.CCEngineLogisticsCostReport( relflush );
     cnv2 := StringToDate::StandardConverter();
     cnv2.SetCustomConversion();
-    cnv2.CustomFormatString( "M2/D2/Y" );
+    //cnv2.CustomFormatString( "M2/D2/Y" );
+    cnv2.CustomFormatString( "MM/dd/yyyy" );
     
     products                  := construct( Product_MPs );
     productcolumn             := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 0 );
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
index 318e4b7..e0ffefd 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
@@ -19,7 +19,8 @@
     owner.DLEngineLogisticsCostReport( relflush );
     cnv2 := StringToDate::StandardConverter();
     cnv2.SetCustomConversion();
-    cnv2.CustomFormatString( "M2/D2/Y" );
+    //cnv2.CustomFormatString( "M2/D2/Y" );
+    cnv2.CustomFormatString( "MM/dd/yyyy" );
     
     products                  := construct( Product_MPs );
     productcolumn             := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 0 );
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_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl b/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl
index 7acf689..82ccf2c 100644
--- a/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl
+++ b/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_CheckImport.qbl
@@ -20,8 +20,14 @@
       error( Translations::MP_ChangeLossSettingExcel_Import_PositiveInteger() );
     }
     //瀵煎叆浜у搧鏄惁瀛樺湪
-    if( exists( macroplan, ChangeLossSettingExcel, excel, not exists( macroplan, Product_MP, product, product.ID() = excel.Product1() or product.ID() = excel.Product2() ) ) ){
-      error( Translations::MP_ChangeLossSettingExcel_Import_ProductNoExist() );
+    productfirsts         := selectuniquevalues( macroplan, ChangeLossSettingExcel, excel, excel.Product1() );
+    productseconds        := selectuniquevalues( macroplan, ChangeLossSettingExcel, excel, excel.Product2() );
+    productids            := productfirsts.Union( productseconds );
+    nonproductids         := selectuniquevalues( productids, Elements, e, not exists( macroplan, Product_MP, product, product.ID() = e ), e );
+    if( nonproductids.Size() > 0 ){
+      error( Translations::MP_ChangeLossSettingExcel_Import_ProductNoExist( nonproductids.Concatenate( ";" ) ) );
+    //if( exists( macroplan, ChangeLossSettingExcel, excel, not exists( macroplan, Product_MP, product, product.ID() = excel.Product1() or product.ID() = excel.Product2() ) ) ){
+    //  error( Translations::MP_ChangeLossSettingExcel_Import_ProductNoExist() );
     }
     //瀵煎叆浜х嚎鏄惁瀛樺湪
     if( exists( macroplan, ChangeLossSettingExcel, excel, not exists( macroplan, Unit, unit, unit.ID() = excel.Unit() ) ) ){
diff --git a/_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl b/_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl
index a20b0a3..5f1c80b 100644
--- a/_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl
+++ b/_Main/BL/Type_DispatchShiftSchedulingInformation/Function_CalcFac.qbl
@@ -6,9 +6,9 @@
   [*
     // Akari Aug-21-2024 (created)
     value := "";
-    if( this.FactoryName() = "澶ц繛宸ュ巶" ){
+    if( this.FactoryName().LikeUserLocale( "澶ц繛" ) or  this.FactoryName().LikeUserLocale( "DL" ) ){
       value := "DL";
-    }else if( this.FactoryName() = "闀挎槬宸ュ巶"){
+    }else if( this.FactoryName().LikeUserLocale( "闀挎槬" ) or  this.FactoryName().LikeUserLocale( "CC" )){
       value := "CC";
     }
     
diff --git a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl
index 1de3a99..cd068af 100644
--- a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl
+++ b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl
@@ -12,19 +12,32 @@
     shiftSchedulingInformations := construct( DispatchShiftSchedulingInformations );
     if( shiftName = "3" ){
       shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 );
-      shiftSchedulingInformation1.SingleShiftName( "1鐝�" );
+      shiftSchedulingInformation1.SingleShiftName( "鐧界彮" );
       shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
       
       shiftSchedulingInformation2 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 );
-      shiftSchedulingInformation2.SingleShiftName( "2鐝�" );
+      shiftSchedulingInformation2.SingleShiftName( "浜岀彮" );
       shiftSchedulingInformations.Add( shiftSchedulingInformation2 );
       
       shiftSchedulingInformation3 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 );
-      shiftSchedulingInformation3.SingleShiftName( "3鐝�" );
+      shiftSchedulingInformation3.SingleShiftName( "涓夌彮" );
       shiftSchedulingInformations.Add( shiftSchedulingInformation3 );
+    }else if( shiftName = "2" ){
+      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 2 );
+      shiftSchedulingInformation1.SingleShiftName( "鐧界彮" );
+      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
+      
+      shiftSchedulingInformation2 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 2 );
+      shiftSchedulingInformation2.SingleShiftName( "浜岀彮" );
+      shiftSchedulingInformations.Add( shiftSchedulingInformation2 );
+    }else if( shiftName = "1" ){
+      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 1 );
+      shiftSchedulingInformation1.SingleShiftName( "鐧界彮" );
+      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
     }else{
-      shiftSchedulingInformation := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume );
-      shiftSchedulingInformations.Add( shiftSchedulingInformation );
+      shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 1 );
+      shiftSchedulingInformation1.SingleShiftName( "" );
+      shiftSchedulingInformations.Add( shiftSchedulingInformation1 );
     }
     
     
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..1d2fd02
--- /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(), IsUpdate := cell.IsUpdate()  );
+          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..310a91b 100644
--- a/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/Method_AfterImport.qbl
@@ -8,9 +8,12 @@
     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" );
+    //cnv2.CustomFormatString( "M2/D2/Y" );
+    cnv2.CustomFormatString( "MM/dd/yyyy" );
     traverse( this, FinancialProductionReport, report ){
       //鑾峰彇瀵煎叆鐨勪骇鍝佸垪鍜屽伐鍘傚垪
       productcolumn         := selectobject( report, FinancialProductionColumn, column, column.Name() = 'Product' );
@@ -33,15 +36,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..712aafb
--- /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(), IsUpdate := cell.IsUpdate()  );
+          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..bfd3c4c 100644
--- a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
@@ -5,34 +5,68 @@
   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" );
+    cnv2.CustomFormatString( "MM/dd/yyyy" );
     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_Forecast/Attribute_Differnce.qbl b/_Main/BL/Type_Forecast/Attribute_Differnce.qbl
new file mode 100644
index 0000000..776bc62
--- /dev/null
+++ b/_Main/BL/Type_Forecast/Attribute_Differnce.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Differnce
+{
+  #keys: '3[414996.1.124560122][414996.1.124560121][414996.1.124560123]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_Forecast/Function_CalcDiffernce.qbl b/_Main/BL/Type_Forecast/Function_CalcDiffernce.qbl
new file mode 100644
index 0000000..8592251
--- /dev/null
+++ b/_Main/BL/Type_Forecast/Function_CalcDiffernce.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcDiffernce
+{
+  TextBody:
+  [*
+    // Akari Oct-14-2024 (created)
+    
+    value := this.Quantity() - this.FulfilledQuantity();
+    
+    this.Differnce( value );
+  *]
+}
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/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl" "b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl"
index 905b371..1eb1832 100644
--- "a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl"
+++ "b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl"
@@ -85,15 +85,16 @@
         workingDayCell.RealValue( workingDayCell.RealValue() + 1 );
         if( shiftPlan.IsHoliday() ){
           // 鑺傚亣鏃ュ姞鐝� 
-          overtime := shiftPlan.GetBreakDayOvertimeHour( false );
+          overtime := shiftPlan.GetHolidayOvertimeHour( false );
           holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + overtime );
           if( not isnull( nextShiftPlan )){
-            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
             if( nextShiftPlan.IsHoliday()){
               // 涓嬩竴澶╂槸鑺傚亣鏃�
+              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
               holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
             }else if( shiftPlan.DefaultRemark().LikeUserLocale( "鍛ㄥ叚" ) or shiftPlan.DefaultRemark().LikeUserLocale( "鍛ㄦ棩" ) ){
               // 涓嬩竴澶╂槸鍛ㄥ叚鎴栧懆鏃�
+              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
               breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
             }else{
               // 涓嬩竴澶╂槸骞冲父鐨勫伐浣滄棩
@@ -106,12 +107,14 @@
           overtime := shiftPlan.GetBreakDayOvertimeHour( false );
           breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + overtime );
           if( not isnull( nextShiftPlan )){
-            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
+            
             if( nextShiftPlan.IsHoliday()){
               // 涓嬩竴澶╂槸鑺傚亣鏃�
+              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
               holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
             }else if( shiftPlan.DefaultRemark().LikeUserLocale( "鍛ㄥ叚" ) or shiftPlan.DefaultRemark().LikeUserLocale( "鍛ㄦ棩" ) ){
               // 涓嬩竴澶╂槸鍛ㄥ叚鎴栧懆鏃�
+              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
               breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
             }else{
               // 涓嬩竴澶╂槸骞冲父鐨勫伐浣滄棩
@@ -124,12 +127,13 @@
           overtime := shiftPlan.GetDefaultDayOvertimeHour( false );
           defaultDayOvertimeHourCell.RealValue( defaultDayOvertimeHourCell.RealValue() + overtime );
           if( not isnull( nextShiftPlan )){
-            nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
             if( nextShiftPlan.IsHoliday()){
               // 涓嬩竴澶╂槸鑺傚亣鏃�
+              nextDayOvertime := shiftPlan.GetHolidayOvertimeHour( true );
               holidayOvertimeHourCell.RealValue( holidayOvertimeHourCell.RealValue() + nextDayOvertime );
             }else if( shiftPlan.DefaultRemark().LikeUserLocale( "鍛ㄥ叚" ) or shiftPlan.DefaultRemark().LikeUserLocale( "鍛ㄦ棩" ) ){
               // 涓嬩竴澶╂槸鍛ㄥ叚鎴栧懆鏃�
+              nextDayOvertime := shiftPlan.GetBreakDayOvertimeHour( true );
               breakDayOvertimeHourCell.RealValue( breakDayOvertimeHourCell.RealValue() + nextDayOvertime );
             }else{
               // 涓嬩竴澶╂槸骞冲父鐨勫伐浣滄棩
@@ -150,6 +154,12 @@
     defaultMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "骞虫椂鍔犵彮" );
     if( isnull( defaultMultiplier )){
       defaultMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "骞虫椂鍔犵彮鍊嶇巼",Multiplier := 1.5 );
+    }
+    
+    // 娆犲伐鍊嶇巼
+    qiangongMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "娆犲伐" );
+    if( isnull( qiangongMultiplier )){
+      qiangongMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "娆犲伐",Multiplier := 1 );
     }
     
     // 浼戞伅鏃ュ姞鐝�嶇巼
@@ -174,11 +184,13 @@
       unit := units.Element( unitIndexTree.Root().Child( unitIndexTree.GetHandle( rowKey )).GetValueAsNumber() );
       
       jiejiariCell := LocalCell_Default::GetCell(  rowKey + column5.Name(), cellIndexTree, cells, row, column5 );
-      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + column6.Name(), cellIndexTree, cells, row, column6 );
-      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,jiejiariCell.RealValue()));
+      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + column7.Name(), cellIndexTree, cells, row, column7 );
+      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,holidayMultiplier,jiejiariCell.RealValue()));
       
       qiangongCell := LocalCell_Default::GetCell(  rowKey + column4.Name(), cellIndexTree, cells, row, column4 );
-      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column7.Name(), cellIndexTree, cells, row, column7 );
+      qiangongCell.RealValue( qiangongCell.RealValue() - 8 );
+      
+      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column6.Name(), cellIndexTree, cells, row, column6 );
       qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,qiangongCell.RealValue() ));
     }
     
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
index c46525a..2a888ca 100644
--- a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -157,6 +157,12 @@
       defaultMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "骞虫椂鍔犵彮鍊嶇巼",Multiplier := 1.5 );
     }
     
+    // 娆犲伐鍊嶇巼
+    qiangongMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "娆犲伐" );
+    if( isnull( qiangongMultiplier )){
+      qiangongMultiplier := macroPlan.OvertimeMultiplier( relnew,Name := "娆犲伐",Multiplier := 1 );
+    }
+    
     // 浼戞伅鏃ュ姞鐝�嶇巼
     breakDayMultiplier := select( macroPlan,OvertimeMultiplier,object,object.Name() = "鍛ㄦ湯鍔犵彮");
     if( isnull( breakDayMultiplier )){
@@ -178,28 +184,32 @@
       rowKey := row.CustomName();
       unit := units.Element( unitIndexTree.Root().Child( unitIndexTree.GetHandle( rowKey )).GetValueAsNumber() );
       
+      // 鑺傚亣鏃ュ姞鐝垂
       jiejiariCell := LocalCell_Default::GetCell(  rowKey + column6.Name(), cellIndexTree, cells, row, column6 );
       jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + column10.Name(), cellIndexTree, cells, row, column10 );
-      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,jiejiariCell.RealValue()));
+      jiejiarifeiCell.RealValue( EmployeeCost::GetSalary( unit,holidayMultiplier,jiejiariCell.RealValue()));
       
+      // 浼戞伅鏃ュ姞鐝垂
       xiuxiCell := LocalCell_Default::GetCell(  rowKey + column5.Name(), cellIndexTree, cells, row, column5 );
       xiuxifeiCell := LocalCell_Default::GetCell(  rowKey + column9.Name(), cellIndexTree, cells, row, column9 );
       xiuxifeiCell.RealValue( EmployeeCost::GetSalary( unit,breakDayMultiplier,xiuxiCell.RealValue()));
       
+      // 骞虫椂鍔犵彮璐�
       jiabanCell := LocalCell_Default::GetCell(  rowKey + column4.Name(), cellIndexTree, cells, row, column4 );
       jiabanfeiCell := LocalCell_Default::GetCell(  rowKey + column8.Name(), cellIndexTree, cells, row, column8 );
-      jiabanfeiCell.RealValue( EmployeeCost::GetSalary( unit,holidayMultiplier,jiabanCell.RealValue()));
+      jiabanfeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier ,jiabanCell.RealValue()));
       
+      // 娆犲伐璐�
       qiangongCell := LocalCell_Default::GetCell(  rowKey + column7.Name(), cellIndexTree, cells, row, column7 );
-      qiangongCell.RealValue( qiangongCell.RealValue() - 1 );
+      qiangongCell.RealValue( qiangongCell.RealValue() - 8 );
       
       qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + column11.Name(), cellIndexTree, cells, row, column11 );
-      qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,defaultMultiplier,qiangongCell.RealValue() ));
+      qiangongfeiCell.RealValue( EmployeeCost::GetSalary( unit,qiangongMultiplier,qiangongCell.RealValue() ));
       
       
       // 宸ヤ綔鏃�
       workingDayCell := LocalCell_Default::GetCell(  rowKey + column3.Name(), cellIndexTree, cells, row, column3 );
-      workingDayCell.RealValue( workingDayCell.RealValue() + 1 );
+      workingDayCell.RealValue( workingDayCell.RealValue() );
     }
     
     return table;
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
index 6d6bf49..f774c24 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
@@ -2,6 +2,7 @@
 #parent: #root
 StaticMethod Compared (
   RecycleBin recycleBin,
+  const MacroPlan mactoPlan,
   String baseVersionPath,
   String compareVersionPath,
   String baseVersionName,
@@ -12,6 +13,17 @@
   [*
     // rislai Jun-20-2024 (created)
     localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
+    
+    products := selectset( mactoPlan,Product_MP,product,not product.IsSystem() and product.IsUsed() );
+    productIndexTree := NamedValueTree::Create();
+    try{
+      for( i := 0; i < products.Size(); i++){
+        product := products.Element( i );
+        productHandle := productIndexTree.GetHandle( product.Notes() );
+        productIndexTree.Root().AddChild( productHandle,i )
+      }
+    }onerror{}
+    
     
     baseVersionFile := OSFile::Construct();
     compareVersionFile := OSFile::Construct();
@@ -88,7 +100,17 @@
                              CompareVersionValue := ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()));
               column.IsAttrbuteColumn( true );
               if( columnName = "鍙戝姩鏈洪浂浠跺彿" ){
-                row.ProductID( ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()), baseVersionCell.Value()) );
+                productID := ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()), baseVersionCell.Value());
+                
+                productHanlde := productIndexTree.GetHandle( productID );
+                productIndex := guard( productIndexTree.Root().Child( productHanlde ), null( NamedValue ));
+                if( not isnull( productIndex )){
+                  product := products.Element( productIndex.GetValueAsNumber() );
+                  productID := product.ID();
+                }
+                
+                row.ProductID( productID );
+                
               }
               if( columnName = "杞﹀瀷" ){
                 row.CustomName( " > " + ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()), baseVersionCell.Value()) );
diff --git a/_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanMDSID.qbl b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanMDSID.qbl
new file mode 100644
index 0000000..992e017
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanMDSID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MacroPlanMDSID
+{
+  #keys: '3[414996.1.124530070][414996.1.124530069][414996.1.124530071]'
+  ValueType: Key
+}
diff --git a/_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanName.qbl b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanName.qbl
new file mode 100644
index 0000000..c4ade67
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_MacroPlanName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MacroPlanName
+{
+  #keys: '3[414996.1.124550976][414996.1.124550975][414996.1.124550977]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableName.qbl b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableName.qbl
new file mode 100644
index 0000000..a5dd339
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TableName
+{
+  #keys: '3[414996.1.124530080][414996.1.124530079][414996.1.124530081]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableSaveTime.qbl b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableSaveTime.qbl
new file mode 100644
index 0000000..4a261cf
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTableInfo/Attribute_TableSaveTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TableSaveTime
+{
+  #keys: '3[414996.1.124540172][414996.1.124540171][414996.1.124540173]'
+  ValueType: DateTime
+}
diff --git a/_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl b/_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl
new file mode 100644
index 0000000..419d238
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTableInfo/StaticMethod_Create.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  const constcontent MacroPlans macroPlans,
+  RecycleBin owner
+)
+{
+  TextBody:
+  [*
+    // Akari Oct-14-2024 (created)
+    owner.OfflinePlanTableInfo( relflush );
+    info( macroPlans.Size() );
+    traverse( macroPlans,Elements,macroPlan ){
+      mdsid := macroPlan.MDSID();
+      name := macroPlan.MDSMacroPlan().Description();
+      
+      traverse( macroPlan,OfflinePlanTable,offlinePlanTable ){
+        owner.OfflinePlanTableInfo( relnew,MacroPlanName := name,TableName := offlinePlanTable.SaveDateTime().Format( "Y-M2-D2 H:m:s" ),MacroPlanMDSID := mdsid ,TableSaveTime := offlinePlanTable.SaveDateTime());
+      }
+    }
+    info( owner.OfflinePlanTableInfo( relsize ) );
+  *]
+}
diff --git a/_Main/BL/Type_OfflinePlanTableInfo/_ROOT_Type_OfflinePlanTableInfo.qbl b/_Main/BL/Type_OfflinePlanTableInfo/_ROOT_Type_OfflinePlanTableInfo.qbl
new file mode 100644
index 0000000..4e59627
--- /dev/null
+++ b/_Main/BL/Type_OfflinePlanTableInfo/_ROOT_Type_OfflinePlanTableInfo.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OfflinePlanTableInfo
+{
+  #keys: '5[414996.1.124560137][414996.1.124560135][0.0.0][414996.1.124560136][414996.1.124560138]'
+  BaseType: Object
+  Description: '涓嬬嚎璁″垝瀵瑰簲鐨刴acroPlan淇℃伅'
+  StructuredName: 'OfflinePlanTableInfos'
+}
diff --git a/_Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl b/_Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl
index 39d85a3..bf28d76 100644
--- a/_Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl
+++ b/_Main/BL/Type_ProductionLineBatchData/Method_Enable.qbl
@@ -29,9 +29,9 @@
         
         tempPeriod_MPs := selectset( dayPeriod_MPs,Elements,period_MP,period_MP.StartDate() >= tempStartDate and period_MP.EndDate() <= tempEndDate );
         
-        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
-        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
-        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability()));
+        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
+        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
+        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( tempPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
         if( unitPeriodTimes1.Size() > 0 ){
           this.OnOK( unitPeriodTimes1,shiftPattern1 ); 
         }
@@ -49,11 +49,17 @@
         shiftPattern3 := tempShiftPattern;
       }
     }
+    
+    // 杞崲鐝缂撳瓨
+    shiftPattern1 := this.ShiftPattern1();
+    shiftPattern2 := this.ShiftPattern2();
+    shiftPattern3 := this.ShiftPattern3();
+    tempShiftPattern := shiftPattern1;
     if( weekPeriod_MPs.Size() <> 0 ){
       traverse( weekPeriod_MPs,Elements,period_MP ){
-        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
-        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
-        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability()));
+        unitPeriodTimes1 := selectset( this.Unit1(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
+        unitPeriodTimes2 := selectset( this.Unit2(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
+        unitPeriodTimes3 := selectset( this.Unit3(),UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP());
         
         if( unitPeriodTimes1.Size() > 0 ){
           this.OnOK( unitPeriodTimes1,shiftPattern1 ); 
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_ApplicationMacroPlanner/Component_ActionBarPageReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def
index a6f622c..a9e718b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def
@@ -26,16 +26,6 @@
         Taborder: 2
       ]
     }
-    Component dhMDSHandles
-    {
-      #keys: '[414996.1.116451655]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'structured[internal[ExternalMDSHandle]]*'
-      Properties:
-      [
-        Taborder: 3
-      ]
-    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlanByMDSID.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlanByMDSID.def
new file mode 100644
index 0000000..5dd44f2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlanByMDSID.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetMacroPlanByMDSID (
+  OfflinePlanTableInfo offlinePlanInfo
+) as MacroPlan id:Method_ApplicationMacroPlanner_GetMacroPlanByMDSID
+{
+  #keys: '[414996.1.122222878]'
+  Body:
+  [*
+    componentmds := ApplicationScope.ComponentMDS();
+    
+    demandMacroPlan := null( MacroPlan );
+    
+    if( exists( ScenarioManager,ScenarioMP,scemp,scemp.IsLoaded() and scemp.DatasetMDSID() = offlinePlanInfo.MacroPlanMDSID() )){
+      mdsinstance     := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = offlinePlanInfo.MacroPlanMDSID() );
+      handle          := mdsinstance.GetMDSHandle();
+      demandMacroPlan := handle.AsMacroPlan();
+    }else{
+      error( "MacroPlan[ " + offlinePlanInfo.MacroPlanName() + "] is not load." );
+    }
+    
+    return demandMacroPlan;
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def
index a6154d6..695b69b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def
@@ -7,14 +7,13 @@
   [*
     componentmds := ApplicationScope.ComponentMDS();
     
-    dhMDSHandles.Data().Flush();
     
     macroPlans := construct( MacroPlans );
     scemps := selectset( ScenarioManager,ScenarioMP,mp,mp.IsLoaded());
     traverse( scemps,Elements,scemp ){
       mdsinstance     := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = scemp.DatasetMDSID() );
       handle          := mdsinstance.GetMDSHandle();
-      dhMDSHandles.Data().Add( handle );
+    
       demandMacroPlan := handle.AsMacroPlan();
       macroPlans.Add( demandMacroPlan );
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def"
index 0b818cc..56e00de 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Component_PanelRibbon504\043801.def"
@@ -9,7 +9,7 @@
     {
       #keys: '[412672.1.78210474]'
       BaseType: 'WebDropDownList'
-      Databinding: 'OfflinePlanTable'
+      Databinding: 'OfflinePlanTableInfo'
       Children:
       [
         Component DataExtractorRibbon
@@ -18,7 +18,7 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'structured[OfflinePlanTable]'
+            DataType: 'structured[OfflinePlanTableInfo]'
             Source: 'dhOfflinePlanTables'
             Taborder: 0
             Transformation: 'Elements'
@@ -27,7 +27,7 @@
       ]
       Properties:
       [
-        DisplayField: 'SaveDateTime'
+        DisplayField: 'TableName'
         Label: '鍩哄噯涓嬬嚎璁″垝:'
         Taborder: 0
       ]
@@ -46,7 +46,7 @@
     {
       #keys: '[412672.1.78210579]'
       BaseType: 'WebDropDownList'
-      Databinding: 'OfflinePlanTable'
+      Databinding: 'OfflinePlanTableInfo'
       Children:
       [
         Component DataExtractorRibbon300
@@ -55,7 +55,7 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'structured[OfflinePlanTable]'
+            DataType: 'structured[OfflinePlanTableInfo]'
             Source: 'dhOfflinePlanTables'
             Taborder: 0
             Transformation: 'Elements'
@@ -64,7 +64,7 @@
       ]
       Properties:
       [
-        DisplayField: 'SaveDateTime'
+        DisplayField: 'TableName'
         Label: '瀵规瘮涓嬬嚎璁″垝:'
         Taborder: 1
       ]
@@ -73,10 +73,25 @@
     {
       #keys: '[414996.1.103241339]'
       BaseType: 'WebDataHolder'
-      Databinding: 'structured[OfflinePlanTable]*'
+      Databinding: 'structured[OfflinePlanTableInfo]*'
+      Children:
+      [
+        Component deOfflinePlanTables
+        {
+          #keys: '[414996.1.124700546]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'RecycleBin'
+            Source: 'RecycleBin'
+            Taborder: 0
+            Transformation: 'OfflinePlanTableInfo'
+          ]
+        }
+      ]
       Properties:
       [
-        Taborder: 3
+        Taborder: 4
       ]
     }
     Component bExport
@@ -86,7 +101,7 @@
       Properties:
       [
         Image: 'EXPORT1'
-        Taborder: 4
+        Taborder: 5
       ]
     }
     Component dhXMLDataListener
@@ -112,7 +127,16 @@
       ]
       Properties:
       [
-        Taborder: 5
+        Taborder: 6
+      ]
+    }
+    Component ButtonRibbon
+    {
+      #keys: '[414996.1.125429607]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Taborder: 3
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def
new file mode 100644
index 0000000..2054ef1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_OnCreated.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormOfflinePlanChanges_OnCreated
+{
+  #keys: '[414996.1.124740834]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def
new file mode 100644
index 0000000..6488149
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_ButtonRibbon_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504_801/ButtonRibbon
+Response OnClick () id:Response_PanelRibbon504_801_ButtonRibbon_OnClick
+{
+  #keys: '[414996.1.125429626]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
+      OfflinePlanTableInfo::Create( macroPlans,RecycleBin );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
index da3570f..292494e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_bComparison_OnClick.def
@@ -9,8 +9,13 @@
   {
     Body:
     [*
-      baseVersion := ddlBaseOfflinePlanTable.Data();
-      compareVersion := ddlCompareOfflinePlanTable.Data();
+      baseOfflineTableInfo := ddlBaseOfflinePlanTable.Data();
+      baseMacroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( baseOfflineTableInfo );
+      baseVersion := select( baseMacroPlan ,OfflinePlanTable,table,table.SaveDateTime() = baseOfflineTableInfo.TableSaveTime() );
+      
+      compareOfflineTableInfo := ddlCompareOfflinePlanTable.Data();
+      compareMacroPlan := ApplicationMacroPlanner.GetMacroPlanByMDSID( compareOfflineTableInfo );
+      compareVersion := select( compareMacroPlan ,OfflinePlanTable,table,table.SaveDateTime() = compareOfflineTableInfo.TableSaveTime() );
       
       dhTable.Data( LocalCell_OfflinePlanComparison::Compared( RecycleBin,baseVersion,compareVersion ));
     *]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def"
index 0df72f7..8844fc9 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def"
@@ -7,20 +7,6 @@
   DefinitionID: 'Responsedef_WebComponent_OnCreated'
   QuillAction
   {
-    Body:
-    [*
-      macroPlans := ApplicationMacroPlanner.GetMacroPlans();
-      offlinePlanTables := selectset( macroPlans,Elements.OfflinePlanTable,table,true );
-      traverse( macroPlans,Elements,element ){
-        info( element.MDSID() ); 
-      }
-      info( dhMDSHandles.Data().Size() );
-      traverse( dhMDSHandles.Data(),Elements,element ){
-        info( element.AsMacroPlan().MDSMacroPlan().Description() );
-      }
-      
-      this.Data( &offlinePlanTables );
-    *]
     GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
index 76c486e..d126b96 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
@@ -10,7 +10,7 @@
     Body:
     [*
       
-      table := LocalCell_DemandComparison::Compared( RecycleBin,dhBaseVersionPath.Data(),dhCompareVersionPath.Data(),lBaseVersionName.Text(),lCompareVersionName.Text() );
+      table := LocalCell_DemandComparison::Compared( RecycleBin,MacroPlan, dhBaseVersionPath.Data(),dhCompareVersionPath.Data(),lBaseVersionName.Text(),lCompareVersionName.Text() );
       dhComparisonData.Data( table );
     *]
     GroupServerCalls: false
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..4ecacd9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -11,11 +11,15 @@
     [*
       //鍒濆鍖�
       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 );
+      dhFactorys.Data( selectset( MacroPlan, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() ) );
+      dhGenerations.Data( selectset( MacroPlan, ProductGeneration, factory, true ) );
+      dhPowers.Data( selectset( MacroPlan, ProductPower, factory, true ) );
+      dhMQBMLBs.Data( selectset( MacroPlan, ProductMLBMQB, factory, true ) );
       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..d01722e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -10,11 +10,15 @@
     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 );
+      dhFactorys.Data( selectset( MacroPlan, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() ) );
+      dhGenerations.Data( selectset( MacroPlan, ProductGeneration, factory, true ) );
+      dhPowers.Data( selectset( MacroPlan, ProductPower, factory, true ) );
+      dhMQBMLBs.Data( selectset( MacroPlan, ProductMLBMQB, factory, true ) );
       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_FormForecasts/Component_ListSalesDemands.def b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def
index 8fc3953..5fc2143 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_ListSalesDemands.def
@@ -7,7 +7,7 @@
     {
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgNotLinkedToPeriod","title":"ImgNotLinkedToPeriod","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgNotLinkedToPeriod"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsPostponed","title":"ImgIsPostponed","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsPostponed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPoint_MP.ID","title":"Stocking point","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPoint_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment_MP.Name","title":"Sales segment","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SalesSegment_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product_MP.ID","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Product_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Start","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure_MP.Name","title":"Quantity UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"UnitOfMeasure_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Original Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NettedQuantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"NettedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfilledQuantity","title":"Fulfilled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"FulfilledQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeChart","columnid":"Fulfillment Illustration","title":"Fulfillment","subtotals":"","tooltip":"","width":-1,"display":"shown","type":"stackbar","relative":true,"attributes":[{"name":"Fulfilled demand","color":"rgb(87,184,71)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Fulfillment","title":"Fulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.FulfilledQuantity().Round(2)"}},{"name":"Unfulfilled demand","color":"rgb(232,123,0)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Unfulfilled demand","title":"Unfulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"maxvalue(object.NettedQuantity()-object.FulfilledQuantity(),0.0).Round(2)"}}]}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriceUoM","title":"PriceUoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PriceUoM"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Priority.Name","title":"Priority","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Priority.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandUncertaintyPercentage","title":"Uncertainty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandUncertaintyPercentage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Origin","title":"Origin","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Origin"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeAllConstraint","columnid":"All constraints","title":"All constraints","subtotals":"","tooltip":"","width":1,"display":"shown"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgNotLinkedToPeriod","title":"ImgNotLinkedToPeriod","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgNotLinkedToPeriod"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ImgIsPostponed","title":"ImgIsPostponed","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"ImgIsPostponed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPoint_MP.ID","title":"Stocking point","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"StockingPoint_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegment_MP.Name","title":"Sales segment","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"SalesSegment_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Product_MP.ID","title":"Product","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Product_MP.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"Start","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasure_MP.Name","title":"Quantity UoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"UnitOfMeasure_MP.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Original Qty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NettedQuantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"NettedQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfilledQuantity","title":"Fulfilled","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"FulfilledQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeChart","columnid":"Fulfillment Illustration","title":"Fulfillment","subtotals":"","tooltip":"","width":-1,"display":"shown","type":"stackbar","relative":true,"attributes":[{"name":"Fulfilled demand","color":"rgb(87,184,71)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Fulfillment","title":"Fulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.FulfilledQuantity().Round(2)"}},{"name":"Unfulfilled demand","color":"rgb(232,123,0)","expression":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"Unfulfilled demand","title":"Unfulfilled demand","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"maxvalue(object.NettedQuantity()-object.FulfilledQuantity(),0.0).Round(2)"}}]}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriceUoM","title":"PriceUoM","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PriceUoM"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Priority.Name","title":"Priority","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Priority.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandUncertaintyPercentage","title":"Uncertainty","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandUncertaintyPercentage"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Origin","title":"Origin","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Origin"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Differnce","title":"Differnce","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Differnce"}}]'
       ]
     }
   ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def"
index 7041dcb..4267aa8 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Response_ListSalesDemands_MenuCreate_OnClick\043715.def"
@@ -2,16 +2,4 @@
 #parent: ListSalesDemands
 Response OnClick () inherited id:Response_ListSalesDemands_MenuCreate_OnClick_715 #extension
 {
-  QuillAction #extension
-  {
-    Body:
-    [*
-      //Create new sales demand
-      dlg := construct( DialogCreateEditForecast );
-      dlg.New();
-      
-      dlg.bSplitUsingCurve().Visible( true );
-      dlg.PanelCurve().Visible( true );
-    *]
-  }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
index 6ed797b..0ac636d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -14,11 +14,11 @@
       ProductGeneration::Initilize( MacroPlan );
       ProductPower::Initilize( MacroPlan );
       ProductMLBMQB::Initilize( MacroPlan );
-      //table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
-      //info( '------------------2----------------', table.IsShow() );
+      dhFactorys.Data( selectset( MacroPlan, Factory, factory, factory.ID() = FinancialProductionReport::GetDefaultAllUnit() ) );
+      dhGenerations.Data( selectset( MacroPlan, ProductGeneration, factory, true ) );
+      dhPowers.Data( selectset( MacroPlan, ProductPower, factory, true ) );
+      dhMQBMLBs.Data( selectset( MacroPlan, ProductMLBMQB, factory, true ) );
       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