From b3805b18b19f773610283444e0a9bd479930109f Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期一, 23 九月 2024 18:07:19 +0800
Subject: [PATCH] 报表界面优化处理,换型损失导入导出添加日期

---
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def                     |   15 
 _Main/BL/EDI/Broker_MP_ImportChangeLossSettingsBroker.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_bRefresh_OnClick.def                       |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def                                                    |    2 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl                                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def                                                  |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl                                                                         |   81 +++
 _Main/BL/Relations/Relation_EnginePipelineSearch_MacroPlan_MacroPlan_EnginePipelineSearch.qbl                                             |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_bRefresh_OnClick.def                                |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_bRefresh_OnClick.def                               |   26 +
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl                                                                    |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def                                                |   10 
 _Main/BL/Type_ChangeLossSettingExcel/Attribute_EndDate.qbl                                                                                |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_bRefresh_OnClick.def                                 |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def                              |   26 +
 _Main/BL/Relations/Relation_MachiningPipelineSearch_MacroPlan_MacroPlan_MachiningPipelineSearch.qbl                                       |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def                                           |   20 
 _Main/BL/Relations/Relation_InventorySummarySearch_MacroPlan_MacroPlan_InventorySummarySearch.qbl                                         |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonImport_OnClick.def                   |   37 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport#570.def                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def                     |    2 
 _Main/BL/Type_InventorySummaryReport/Method_Generate.qbl                                                                                  |    2 
 _Main/BL/Relations/Relation_FinancialProductionSearch_MacroPlan_MacroPlan_FinancialProductionSe.qbl                                       |   23 +
 _Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def                           |   15 
 _Main/BL/Relations/Relation_FinancialSalesSearch_MacroPlan_MacroPlan_FinancialSalesSearch.qbl                                             |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport#545.def                                              |   10 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl                                                                        |   91 +++
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def                       |    2 
 _var/_Main/Data/MP_ChangeoverLossSetting.xlsx                                                                                             |    0 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitializeNew.qbl                                                                 |  280 ++++++++++++
 _Main/BL/EDI/Broker_MP_ExportChangeLossSettingsBroker.qbl                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_bRefresh_OnClick#57.def                        |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def              |    2 
 _Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl                                                                              |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def                         |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def                   |    2 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl                                                                     |    2 
 _Main/BL/Type_ChangeLossSettingExcel/Attribute_StartDate.qbl                                                                              |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def                   |    2 
 _Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl                                                                            |   23 
 _Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl                                                                          |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def                             |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def                                                   |    8 
 _Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl                                                                        |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport#670.def                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged#847.def  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def                               |   15 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl                                                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_bRefresh_OnClick.def                              |   26 +
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                    |    2 
 /dev/null                                                                                                                                 |   23 -
 _Main/BL/Type_ChangeLossSettingExcel/TypeIndex_ChangeLossSettingTypeIndex.qbl                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def                               |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonImport_OnClick#130.def                   |   37 +
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def |    2 
 85 files changed, 1,197 insertions(+), 125 deletions(-)

diff --git a/_Main/BL/EDI/Broker_MP_ExportChangeLossSettingsBroker.qbl b/_Main/BL/EDI/Broker_MP_ExportChangeLossSettingsBroker.qbl
index 0f8f5ec..268ffa1 100644
--- a/_Main/BL/EDI/Broker_MP_ExportChangeLossSettingsBroker.qbl
+++ b/_Main/BL/EDI/Broker_MP_ExportChangeLossSettingsBroker.qbl
@@ -11,8 +11,10 @@
     {
       TargetType: ChangeLossSettingExcel
       EDIMLColumn ChangeLossNumber { Attribute: ChangeLossNumber ValueType: String }
+      EDIMLColumn EndDate { Attribute: EndDate ValueType: Date }
       EDIMLColumn Product1 { Attribute: Product1 ValueType: String }
       EDIMLColumn Product2 { Attribute: Product2 ValueType: String }
+      EDIMLColumn StartDate { Attribute: StartDate ValueType: Date }
       EDIMLColumn Unit { Attribute: Unit ValueType: String }
     }
   }
@@ -23,8 +25,10 @@
       InputTable: ChangeLossSettingExcel
       OutputTable: ChangeoverLossSetting
       EDIColumnMatch { InputColumn: ChangeLossNumber OutputColumn: ChangeLossNumber }
+      EDIColumnMatch { InputColumn: EndDate OutputColumn: EndDate }
       EDIColumnMatch { InputColumn: Product1 OutputColumn: Product1 }
       EDIColumnMatch { InputColumn: Product2 OutputColumn: Product2 }
+      EDIColumnMatch { InputColumn: StartDate OutputColumn: StartDate }
       EDIColumnMatch { InputColumn: Unit OutputColumn: Unit }
     }
   }
@@ -38,6 +42,8 @@
         EDIXLSLinkColumn Product1 { ValueType: String }
         EDIXLSLinkColumn Product2 { ValueType: String }
         EDIXLSLinkColumn Unit { ValueType: String }
+        EDIXLSLinkColumn StartDate { ValueType: Date }
+        EDIXLSLinkColumn EndDate { ValueType: Date }
         EDIXLSLinkColumn ChangeLossNumber { ValueType: String }
       ]
     }
diff --git a/_Main/BL/EDI/Broker_MP_ImportChangeLossSettingsBroker.qbl b/_Main/BL/EDI/Broker_MP_ImportChangeLossSettingsBroker.qbl
index 3f2dd12..c2a9ee6 100644
--- a/_Main/BL/EDI/Broker_MP_ImportChangeLossSettingsBroker.qbl
+++ b/_Main/BL/EDI/Broker_MP_ImportChangeLossSettingsBroker.qbl
@@ -9,14 +9,18 @@
   {
     EDIMLTable ChangeLossSettingExcel
     {
+      PrimaryKeyColumns: EndDate
       PrimaryKeyColumns: Product1
       PrimaryKeyColumns: Product2
+      PrimaryKeyColumns: StartDate
       PrimaryKeyColumns: Unit
       TargetType: ChangeLossSettingExcel
       TypeIndex: ChangeLossSettingTypeIndex
       EDIMLColumn ChangeLossNumber { Attribute: ChangeLossNumber ValueType: String }
+      EDIMLColumn EndDate { Attribute: EndDate ValueType: Date }
       EDIMLColumn Product1 { Attribute: Product1 ValueType: String }
       EDIMLColumn Product2 { Attribute: Product2 ValueType: String }
+      EDIMLColumn StartDate { Attribute: StartDate ValueType: Date }
       EDIMLColumn Unit { Attribute: Unit ValueType: String }
     }
   }
@@ -27,8 +31,10 @@
       InputTable: ChangeoverLossSetting
       OutputTable: ChangeLossSettingExcel
       EDIColumnMatch { InputColumn: ChangeLossNumber OutputColumn: ChangeLossNumber }
+      EDIColumnMatch { InputColumn: EndDate OutputColumn: EndDate }
       EDIColumnMatch { InputColumn: Product1 OutputColumn: Product1 }
       EDIColumnMatch { InputColumn: Product2 OutputColumn: Product2 }
+      EDIColumnMatch { InputColumn: StartDate OutputColumn: StartDate }
       EDIColumnMatch { InputColumn: Unit OutputColumn: Unit }
     }
   }
@@ -43,6 +49,8 @@
         EDIXLSLinkColumn Product2 { ValueType: String }
         EDIXLSLinkColumn Unit { ValueType: String }
         EDIXLSLinkColumn ChangeLossNumber { ValueType: String }
+        EDIXLSLinkColumn StartDate { ValueType: Date }
+        EDIXLSLinkColumn EndDate { ValueType: Date }
       ]
     }
   }
diff --git a/_Main/BL/Relations/Relation_EnginePipelineSearch_MacroPlan_MacroPlan_EnginePipelineSearch.qbl b/_Main/BL/Relations/Relation_EnginePipelineSearch_MacroPlan_MacroPlan_EnginePipelineSearch.qbl
new file mode 100644
index 0000000..91ddb09
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EnginePipelineSearch_MacroPlan_MacroPlan_EnginePipelineSearch.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EnginePipelineSearch_MacroPlan_MacroPlan_EnginePipelineSearch
+{
+  #keys: '1[415136.0.1155410815]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.1155410817][415136.0.1155410816][415136.0.1155410818]'
+    Cardinality: '0to1'
+    ObjectDefinition: EnginePipelineSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EnginePipelineSearch
+  {
+    #keys: '3[415136.0.1155410820][415136.0.1155410819][415136.0.1155410821]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_EnginePipelineSource_Search_EnginePipelineSearch_Source.qbl b/_Main/BL/Relations/Relation_EnginePipelineSource_Search_EnginePipelineSearch_Source.qbl
deleted file mode 100644
index 0c057e3..0000000
--- a/_Main/BL/Relations/Relation_EnginePipelineSource_Search_EnginePipelineSearch_Source.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation EnginePipelineSource_Search_EnginePipelineSearch_Source
-{
-  #keys: '1[415136.0.883574788]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide Search
-  {
-    #keys: '3[415136.0.883574790][415136.0.883574789][415136.0.883574791]'
-    Cardinality: '0to1'
-    ObjectDefinition: EnginePipelineSource
-    OwningSide: 'Owned'
-  }
-  RelationSide.RightSide Source
-  {
-    #keys: '3[415136.0.883574793][415136.0.883574792][415136.0.883574794]'
-    Cardinality: '0to1'
-    ObjectDefinition: EnginePipelineSearch
-    OwningSide: 'Reference'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionSearch_FinancialProductionSource_FinancialProduc.qbl b/_Main/BL/Relations/Relation_FinancialProductionSearch_FinancialProductionSource_FinancialProduc.qbl
deleted file mode 100644
index 1fb618d..0000000
--- a/_Main/BL/Relations/Relation_FinancialProductionSearch_FinancialProductionSource_FinancialProduc.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation FinancialProductionSearch_FinancialProductionSource_FinancialProductionSource_FinancialProductionSearch
-{
-  #keys: '1[415136.0.854770948]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide FinancialProductionSource
-  {
-    #keys: '3[415136.0.854770950][415136.0.854770949][415136.0.854770951]'
-    Cardinality: '0to1'
-    ObjectDefinition: FinancialProductionSearch
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide FinancialProductionSearch
-  {
-    #keys: '3[415136.0.854770953][415136.0.854770952][415136.0.854770954]'
-    Cardinality: '0to1'
-    ObjectDefinition: FinancialProductionSource
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionSearch_MacroPlan_MacroPlan_FinancialProductionSe.qbl b/_Main/BL/Relations/Relation_FinancialProductionSearch_MacroPlan_MacroPlan_FinancialProductionSe.qbl
new file mode 100644
index 0000000..0b83fb1
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionSearch_MacroPlan_MacroPlan_FinancialProductionSe.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionSearch_MacroPlan_MacroPlan_FinancialProductionSearch
+{
+  #keys: '1[415136.0.1155603424]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.1155603426][415136.0.1155603425][415136.0.1155603427]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialProductionSearch
+  {
+    #keys: '3[415136.0.1155603429][415136.0.1155603428][415136.0.1155603430]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesSearch_MacroPlan_MacroPlan_FinancialSalesSearch.qbl b/_Main/BL/Relations/Relation_FinancialSalesSearch_MacroPlan_MacroPlan_FinancialSalesSearch.qbl
new file mode 100644
index 0000000..3330f51
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesSearch_MacroPlan_MacroPlan_FinancialSalesSearch.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesSearch_MacroPlan_MacroPlan_FinancialSalesSearch
+{
+  #keys: '1[415136.0.1155410792]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.1155410794][415136.0.1155410793][415136.0.1155410795]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialSalesSearch
+  {
+    #keys: '3[415136.0.1155410797][415136.0.1155410796][415136.0.1155410798]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl
deleted file mode 100644
index e037345..0000000
--- a/_Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_FinancialSalesSource
-{
-  #keys: '1[415136.0.865304861]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide FinancialSalesSearch
-  {
-    #keys: '3[415136.0.865304863][415136.0.865304862][415136.0.865304864]'
-    Cardinality: '0to1'
-    ObjectDefinition: FinancialSalesSource
-    OwningSide: 'Owned'
-  }
-  RelationSide.RightSide FinancialSalesSource
-  {
-    #keys: '3[415136.0.865304866][415136.0.865304865][415136.0.865304867]'
-    Cardinality: '0to1'
-    ObjectDefinition: FinancialSalesSearch
-    OwningSide: 'Reference'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl b/_Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl
deleted file mode 100644
index 2fd19a0..0000000
--- a/_Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation InventorySummarySearch_InventorySummarySource_InventorySummarySource_InventorySummarySearch
-{
-  #keys: '1[415136.0.865304882]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide InventorySummarySource
-  {
-    #keys: '3[415136.0.865304884][415136.0.865304883][415136.0.865304885]'
-    Cardinality: '0to1'
-    ObjectDefinition: InventorySummarySearch
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide InventorySummarySearch
-  {
-    #keys: '3[415136.0.865304887][415136.0.865304886][415136.0.865304888]'
-    Cardinality: '0to1'
-    ObjectDefinition: InventorySummarySource
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_InventorySummarySearch_MacroPlan_MacroPlan_InventorySummarySearch.qbl b/_Main/BL/Relations/Relation_InventorySummarySearch_MacroPlan_MacroPlan_InventorySummarySearch.qbl
new file mode 100644
index 0000000..5b89107
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummarySearch_MacroPlan_MacroPlan_InventorySummarySearch.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummarySearch_MacroPlan_MacroPlan_InventorySummarySearch
+{
+  #keys: '1[415136.0.1155603461]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.1155603463][415136.0.1155603462][415136.0.1155603464]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummarySearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InventorySummarySearch
+  {
+    #keys: '3[415136.0.1155603466][415136.0.1155603465][415136.0.1155603467]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineSearch_MacroPlan_MacroPlan_MachiningPipelineSearch.qbl b/_Main/BL/Relations/Relation_MachiningPipelineSearch_MacroPlan_MacroPlan_MachiningPipelineSearch.qbl
new file mode 100644
index 0000000..be989a1
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MachiningPipelineSearch_MacroPlan_MacroPlan_MachiningPipelineSearch.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MachiningPipelineSearch_MacroPlan_MacroPlan_MachiningPipelineSearch
+{
+  #keys: '1[415136.0.1155410837]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.1155410839][415136.0.1155410838][415136.0.1155410840]'
+    Cardinality: '0to1'
+    ObjectDefinition: MachiningPipelineSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MachiningPipelineSearch
+  {
+    #keys: '3[415136.0.1155410842][415136.0.1155410841][415136.0.1155410843]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl b/_Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl
deleted file mode 100644
index 08a3ddc..0000000
--- a/_Main/BL/Relations/Relation_MachiningPipelineSearch_Source_MachiningPipelineSource_Search.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation MachiningPipelineSearch_Source_MachiningPipelineSource_Search
-{
-  #keys: '1[415136.0.894481216]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide Source
-  {
-    #keys: '3[415136.0.894481218][415136.0.894481217][415136.0.894481219]'
-    Cardinality: '0to1'
-    ObjectDefinition: MachiningPipelineSearch
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide Search
-  {
-    #keys: '3[415136.0.894481221][415136.0.894481220][415136.0.894481222]'
-    Cardinality: '0to1'
-    ObjectDefinition: MachiningPipelineSource
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
new file mode 100644
index 0000000..5a38fd7
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Import.qbl
@@ -0,0 +1,81 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Import (
+  MacroPlan owner,
+  RecycleBin recycle,
+  BinaryValue binaryValue,
+  String filePath
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Sep-20-2024 (created)
+    name                      := CCEngineLogisticsCostReport::GetDefaultName();
+    source                    := GeneralExcelImportAndExportDataSource::Upload( recycle, binaryValue, OS::TempPath() + "template.xlsx" );
+    source.ReadStructure();
+    Transaction::Transaction().Propagate( attribute( GeneralExcelImportAndExportDataColumn, ColumnIndex ) );
+    
+    //娓呯┖瀵煎叆涔嬪墠鐨勮〃
+    owner.CCEngineLogisticsCostReport( relflush );
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( "M2/D2/Y" );
+    
+    products                  := construct( Product_MPs );
+    productcolumn             := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 0 );
+    attricolumn               := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 1 );
+    //鐢熸垚鏂拌〃鐨勬棩鏈熷垪
+    table                     := owner.CCEngineLogisticsCostReport( relnew, ID := name, Name := name );
+    showtable                 := owner.CCEngineLogisticsCostReport( relnew, ID := name + 'Show', Name := name, IsShow := true );
+    table.GenerateColumn( owner );
+    traverse( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataRow, excelrow ){
+      productcell             := selectobject( excelrow, GeneralExcelImportAndExportDataCell, excelcell, excelcell.GeneralExcelImportAndExportDataColumn() = productcolumn );
+      //澶勭悊鏈鍚屾鐨勪骇鍝�
+      if( not exists( products, Elements, product, product.ID() = productcell.Value() ) ){
+        product               := selectobject( owner, Product_MP, product, product.ID() = productcell.Value() );
+        products.Add( product );
+        ccrow                 := table.GetRow( productcell.Value() );
+        //鑾峰彇鐩稿悓鐨勪骇鍝�
+        sameproductcells      := selectset( productcolumn, GeneralExcelImportAndExportDataCell, excelcell, excelcell.Value() = productcell.Value() );
+        //浠庢棩鏈熷垪寮�濮嬪鐞�
+        traverse( excelrow, GeneralExcelImportAndExportDataCell, excelcell, excelcell.GeneralExcelImportAndExportDataColumn().ColumnIndex() > 1 ){
+          excelcolumn         := excelcell.GeneralExcelImportAndExportDataColumn();
+          column              := selectobject( table, Column, column, column.Name() = excelcolumn.Name() );
+          cell                := selectobject( ccrow, Cell, cell, cell.Column() = column );
+          traverse( sameproductcells, Elements.GeneralExcelImportAndExportDataRow, samerow ){
+            attricell         := selectobject( samerow, GeneralExcelImportAndExportDataCell, attricell, attricell.GeneralExcelImportAndExportDataColumn() = attricolumn );
+            if( not ( attricell.Value() = '棰勮鎬昏垂鐢�' or attricell.Value() = '鎬昏垂鐢�' ) ){
+              valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
+              if( attricell.Value() = '澶栫搴撳叆搴撹垂鐢�' ){
+                cell.RentEnterCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '澶栫搴撳嚭搴撹垂鐢�' ){
+                cell.RentOutCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤' ){
+                cell.FactoryToRentTransCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '澶栫搴撲粨鍌ㄨ垂鐢�' ){
+                cell.RentStorageCost( [Number]valuecell.Value() );
+              }
+    //          else if( attricell.Value() = '棰勮鎬昏垂鐢�' ){
+    //            cell.EstimatedTotalCost( [Number]valuecell.Value() );
+    //          }
+              else if( attricell.Value() = '绯绘暟' ){
+                cell.Coefficient( [Number]valuecell.Value() );
+              }
+    //          else if( attricell.Value() = '鎬昏垂鐢�' ){
+    //            cell.TotalCost( [Number]valuecell.Value() );
+    //          }
+            }
+          }
+        }
+      }
+    }
+    rows := selectsortedset( table, Row, row, row.Name() );
+    i    := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i := i + 1;
+    }
+    //
+    showtable.Generate( owner.CCEngineLogisticsCostSearch(), products );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
index 8a22432..90c7efa 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
@@ -86,7 +86,7 @@
         }
       }
     }
-    //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤锛氾紝鍦� trip plan閲屾壘鍒伴暱鏄ヨ閰嶇嚎杈瑰簱鍒伴暱鏄ュ绉熷簱鐨勮繍杈撴暟閲忥紝锛岋紝鐢ㄥ叕寮忚绠楀緱鍑虹粨鏋滐紝鏈堝害杩涜姹囨��
+    //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤锛氾紝鍦� trip plan閲屾壘鍒伴暱鏄ヨ閰嶇嚎杈瑰簱鍒伴暱鏄ュ绉熷簱鐨勮繍杈撴暟閲忥紝锛岋紝鐢ㄥ叕寮忚绠楀緱鍑虹粨鏋滐紝鏈堝害杩涜姹囨�籆C-MOMO鍒伴暱鏄ュ绉熷簱
     traverse( owner, Unit.Lane.LaneLeg, laneleg ){
       //璧峰搴撳瓨鐐规槸鍚︽槸闀挎槬瑁呴厤绾胯竟搴�
       originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
new file mode 100644
index 0000000..2fc33a4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Import.qbl
@@ -0,0 +1,91 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Import (
+  MacroPlan owner,
+  RecycleBin recycle,
+  BinaryValue binaryValue,
+  String filePath
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Sep-20-2024 (created)
+    name                      := CCEngineLogisticsCostReport::GetDefaultName();
+    source                    := GeneralExcelImportAndExportDataSource::Upload( recycle, binaryValue, OS::TempPath() + "template.xlsx" );
+    source.ReadStructure();
+    Transaction::Transaction().Propagate( attribute( GeneralExcelImportAndExportDataColumn, ColumnIndex ) );
+    
+    //娓呯┖瀵煎叆涔嬪墠鐨勮〃
+    owner.DLEngineLogisticsCostReport( relflush );
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( "M2/D2/Y" );
+    
+    products                  := construct( Product_MPs );
+    productcolumn             := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 0 );
+    attricolumn               := selectobject( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataColumn, column, column.ColumnIndex() = 1 );
+    //鐢熸垚鏂拌〃鐨勬棩鏈熷垪
+    table                     := owner.DLEngineLogisticsCostReport( relnew, ID := name, Name := name );
+    showtable                 := owner.DLEngineLogisticsCostReport( relnew, ID := name + 'Show', Name := name, IsShow := true );
+    table.GenerateColumn( owner );
+    traverse( source, GeneralExcelImportAndExportDataTable.GeneralExcelImportAndExportDataRow, excelrow ){
+      productcell             := selectobject( excelrow, GeneralExcelImportAndExportDataCell, excelcell, excelcell.GeneralExcelImportAndExportDataColumn() = productcolumn );
+      //澶勭悊鏈鍚屾鐨勪骇鍝�
+      if( not exists( products, Elements, product, product.ID() = productcell.Value() ) ){
+        product               := selectobject( owner, Product_MP, product, product.ID() = productcell.Value() );
+        products.Add( product );
+        ccrow                 := table.GetRow( productcell.Value() );
+        //鑾峰彇鐩稿悓鐨勪骇鍝�
+        sameproductcells      := selectset( productcolumn, GeneralExcelImportAndExportDataCell, excelcell, excelcell.Value() = productcell.Value() );
+        //浠庢棩鏈熷垪寮�濮嬪鐞�
+        traverse( excelrow, GeneralExcelImportAndExportDataCell, excelcell, excelcell.GeneralExcelImportAndExportDataColumn().ColumnIndex() > 1 ){
+          excelcolumn         := excelcell.GeneralExcelImportAndExportDataColumn();
+          column              := selectobject( table, Column, column, column.Name() = excelcolumn.Name() );
+          cell                := selectobject( ccrow, Cell, cell, cell.Column() = column );
+          traverse( sameproductcells, Elements.GeneralExcelImportAndExportDataRow, samerow ){
+            attricell         := selectobject( samerow, GeneralExcelImportAndExportDataCell, attricell, attricell.GeneralExcelImportAndExportDataColumn() = attricolumn );
+            if( not ( attricell.Value() = '棰勮鎬昏垂鐢�' or attricell.Value() = '鎬昏垂鐢�' ) ){
+              valuecell       := selectobject( samerow, GeneralExcelImportAndExportDataCell, valuecell, valuecell.GeneralExcelImportAndExportDataColumn() = excelcolumn );
+              if( attricell.Value() = '闀挎槬澶栫搴撳叆搴撹垂鐢�' ){
+                cell.CCRentEnterCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '闀挎槬澶栫搴撳嚭搴撹垂鐢�' ){
+                cell.CCRentOutCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '闀挎槬闀块�旇繍杈撹垂鐢�' ){
+                cell.CCLongTransCoat( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '闀挎槬鐭�旇繍杈撹垂鐢�' ){
+                cell.CCShortTransCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�' ){
+                cell.CCRentStorageCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '澶ц繛澶栫搴撳叆搴撹垂鐢�' ){
+                cell.DLRentEnterCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '澶ц繛澶栫搴撳嚭搴撹垂鐢�' ){
+                cell.DLRentOutCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤' ){
+                cell.FactoryToDLRentTransCost( [Number]valuecell.Value() );
+              }else if( attricell.Value() = '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�' ){
+                cell.DLRentStorageCost( [Number]valuecell.Value() );
+              }
+    //          else if( attricell.Value() = '棰勮鎬昏垂鐢�' ){
+    //            cell.EstimatedTotalCost( [Number]valuecell.Value() );
+    //          }
+              else if( attricell.Value() = '绯绘暟' ){
+                cell.Coefficient( [Number]valuecell.Value() );
+              }
+    //          else if( attricell.Value() = '鎬昏垂鐢�' ){
+    //            cell.TotalCost( [Number]valuecell.Value() );
+    //          }
+            }
+          }
+        }
+      }
+    }
+    rows := selectsortedset( table, Row, row, row.Name() );
+    i    := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i := i + 1;
+    }
+    //
+    showtable.Generate( owner.DLEngineLogisticsCostSearch(), products );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
index 63f7b8e..352c0d4 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
@@ -29,7 +29,7 @@
     
     table.GenerateColumn( owner );
     //鍙戝線闀挎槬鐨勯攢閲忛渶瑕佸湪trip plan閲岄潰鎵惧埌璧峰搴撳瓨鐐逛负澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撶殑浜у搧 绠楀嚭鍙戝線闀挎槬鐨勯攢閲忓悗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜岄暱鏄ュ叆搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
-    //鍦� trip plan閲屾壘鍒板ぇ杩炶閰嶇嚎杈瑰簱鍒板ぇ杩炲绉熷簱鐨勮繍杈撴暟閲�
+    //鍦� trip plan閲屾壘鍒板ぇ杩炶閰嶇嚎杈瑰簱鍒板ぇ杩炲绉熷簱鐨勮繍杈撴暟閲�//澶ц繛鍘傚唴搴撳埌澶栫搴�
     traverse( owner, Unit.Lane.LaneLeg, laneleg ){
       //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛瑁呴厤绾胯竟搴�
       originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
@@ -93,7 +93,7 @@
         }
       }
     }
-    //澶ц繛澶栫搴撳叆搴撹垂鐢細鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝佷骇閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�
+    //澶ц繛澶栫搴撳叆搴撹垂鐢細鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝佷骇閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�-newSupply
     traverse( owner, FinancialProductionSource, source, not source.IsImport() ){//璐㈠姟浜ч噺鎶ヨ〃闈炲鍏�
       traverse( source, FinancialProductionReport, report, not report.IsShow() ){//璐㈠姟浜ч噺鎶ヨ〃涓嶆樉绀�
         traverse( report, FinancialProductionRow, row, row.Unit() = dlunit and exists( row, FinancialProductionCell, cell, cell.Value() <> '0' and cell.FinancialProductionColumn().IsDay() ) ){//璐㈠姟浜ч噺鎶ヨ〃閲岀殑澶ц繛浜ч噺, 涓嶄负0
@@ -121,7 +121,7 @@
         }
       }
     }
-    //澶ц繛澶栫搴撳嚭搴撹垂鐢細鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环锛屽嚭搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝侀攢閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�
+    //澶ц繛澶栫搴撳嚭搴撹垂鐢細鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环锛屽嚭搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝侀攢閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�-newSupply, 澶ц繛鍘傚唴搴擄紝澶ц繛澶栫搴�
     traverse( owner, FinancialSalesSource, source, not source.IsImport() ){//璐㈠姟閿�閲忔姤琛ㄩ潪瀵煎叆
       traverse( source, FinancialSalesReport, report, not report.IsShow() ){//璐㈠姟閿�閲忔姤琛ㄤ笉鏄剧ず
         traverse( report, FinancialSalesRow, row, row.Unit() = ccunit and exists( row, FinancialSalesCell, cell, cell.Value() <> '0' and cell.FinancialSalesColumn().IsDay() ) ){//璐㈠姟閿�閲忔姤琛ㄩ噷鐨勫ぇ杩炰骇閲�, 涓嶄负0
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitializeNew.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitializeNew.qbl
new file mode 100644
index 0000000..a8f8043
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_InitializeNew.qbl
@@ -0,0 +1,280 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod InitializeNew (
+  MacroPlan owner
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    owner.DLEngineLogisticsCostReport( relflush );
+    produtparent              := DLEngineLogisticsCostReport::GetDefaultProductParent();
+    name                      := DLEngineLogisticsCostReport::GetDefaultName();
+    allunit                   := DLEngineLogisticsCostReport::GetDefaultAllUnit();
+    ccunit                    := DLEngineLogisticsCostReport::GetDefaultCCUnit();
+    dlunit                    := DLEngineLogisticsCostReport::GetDefaultDLUnit();
+    //dlline                    := DLEngineLogisticsCostReport::GetStockingPointDLLine();
+    ccrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
+    dlrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
+    
+    startofplanning           := owner.StartOfPlanning().Date();
+    //startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
+    
+    table                     := owner.DLEngineLogisticsCostReport( relnew, ID := name, Name := name );
+    showtable                 := owner.DLEngineLogisticsCostReport( relnew, ID := name + 'Show', Name := name, IsShow := true );
+    search                    := owner.DLEngineLogisticsCostSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit );
+    
+    products                  := construct( Product_MPs );
+    
+    table.GenerateColumn( owner );
+    //鍦� trip plan閲屾壘鍒板ぇ杩炶閰嶇嚎杈瑰簱鍒板ぇ杩炲绉熷簱鐨勮繍杈撴暟閲�//澶ц繛鍘傚唴搴撳埌澶栫搴�
+    traverse( owner, Unit.Lane.LaneLeg, laneleg ){
+      //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛瑁呴厤绾胯竟搴�
+    //  originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
+      isdlspline             := laneleg.OriginStockingPointID().EndsWith( '鍘傚唴搴�' ) and ( laneleg.OriginStockingPointID().StartsWith( '澶ц繛' ) or laneleg.OriginStockingPointID().StartsWith( 'DL' ) );//table.IsInUnit( originsp, dlline );
+      //鐩殑鍦版槸鍚︽槸澶ц繛澶栫搴�
+    //  destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
+      isdlrent               := laneleg.DestinationStockingPointID().EndsWith( '澶栫搴�' ) and ( laneleg.DestinationStockingPointID().StartsWith( '澶ц繛' ) or laneleg.DestinationStockingPointID().StartsWith( 'DL' ) );//table.IsInUnit( destisp, dlrent );
+      if( isdlspline and isdlrent ){
+        traverse( laneleg, Trip, trip, trip.Departure().Date() < startofnextyear ){//鐢变簬闇�瑕佽�冭檻浜у搧杩愯緭lead time锛屾瘡涓湀鐨勬眹鎬绘暟鎹渶瑕佹帹杩熶袱澶╄繘琛岃绠�
+          periodtime         := trip.Departure().StartOfMonth().Date();
+          periodname         := periodtime.Format( "M2/D2/Y" );
+          
+          column             := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
+          enginecosts        := selectset( owner, LogisticsCostEngine, engine, engine.StartDate() <= trip.Departure().Date() and engine.EndDate() >= trip.Departure().Date() );
+          transcosts         := selectset( owner, LogisticsCostTransport, trans, trans.StartDate() <= trip.Departure().Date() and trans.EndDate() >= trip.Departure().Date() );
+          if( not isnull( enginecosts ) and enginecosts.Size() > 0 and not isnull( transcosts ) and transcosts.Size() > 0 ){
+            traverse( trip, ProductInTrip, pit, pit.Quantity() <> 0 and not isnull( column ) and exists( pit.Product_MP().GetAllParent(), Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+              quantity       := [Number]pit.Quantity();
+              row            := table.GetRow( pit.ProductID() );
+              product        := pit.Product_MP();
+              productparents := product.GetAllParent();
+              
+              //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+              enginecost     := selectobject( enginecosts, Elements, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
+                                                   and engine.MLB_MQB() = product.MQBMLB()
+                                                   and engine.Factory() = dlunit  );
+              //鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲�
+              transcost      := selectobject( transcosts, Elements, trans, trans.Origin() = laneleg.OriginStockingPointID() 
+                                                  and trans.Destination() = laneleg.DestinationStockingPointID() 
+                                                  and exists( productparents, Elements, e, ifexpr( trans.Product().FindString( '鍙戝姩鏈�', 0 ) >= 0, e.ID() = produtparent,  e.ID() = trans.Product() ) ) );
+              if( not isnull( enginecost ) and not isnull( transcost ) ){
+                products.Add( product );
+                cell         := selectobject( row, Cell, cell, cell.Column() = column );
+                //杩愯緭鏁伴噺/鍖呰瀹归噺/瑁呰浇瀹归噺*杩愯緭鍗曚环
+                cost         := ceil( ceil( quantity / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();//鍥涜垗浜斿叆
+                cell.FactoryToDLRentTransCost( cell.FactoryToDLRentTransCost() + cost );
+              }
+    //          if( isccrent ){//鐩殑鍦版槸闀挎槬澶栫搴�
+    //            //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+    //            enginecost   := selectobject( enginecosts, Elements, engine, engine.Generation().ToLower() = product.Generation().ToLower()
+    //                                               and engine.MLB_MQB() = product.MQBMLB()
+    //                                               and engine.Factory() = ccunit );
+    //            if( not isnull( enginecost ) ){
+    //              products.Add( product );
+    //              cell       := selectobject( row, Cell, cell, cell.Column() = column );
+    //              cell.CCRentQuantity( cell.CCRentQuantity() + quantity );
+    //              //闀挎槬澶栫搴撳叆搴撹垂鐢細鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环
+    //              entercost  := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+    //              //闀挎槬澶栫搴撳嚭搴撹垂鐢�: 鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环
+    //              outcost    := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+    //              cell.CCRentEnterCost( cell.CCRentEnterCost() + entercost );
+    //              cell.CCRentOutCost( cell.CCRentOutCost() + outcost );
+    //            }
+    //          }
+            }
+          }
+        }
+      }
+    }
+    //澶ц繛澶栫搴撳叆搴撹垂鐢細鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝佷骇閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�-newSupply
+    traverse( owner, FinancialProductionSource, source, not source.IsImport() ){//璐㈠姟浜ч噺鎶ヨ〃闈炲鍏�
+      traverse( source, FinancialProductionReport, report, not report.IsShow() ){//璐㈠姟浜ч噺鎶ヨ〃涓嶆樉绀�
+        traverse( report, FinancialProductionRow, row, row.Unit() = dlunit and exists( row, FinancialProductionCell, cell, cell.Value() <> '0' and cell.FinancialProductionColumn().IsDay() ) ){//璐㈠姟浜ч噺鎶ヨ〃閲岀殑澶ц繛浜ч噺, 涓嶄负0
+          product            := row.Product_MP();
+          productparents     := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecosts      := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = dlunit );
+            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
+              products.Add( product );
+              ccrow          := table.GetRow( row.Name() );
+              traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' and cell.FinancialProductionColumn().IsDay() ){
+                cellcolumn   := cell.FinancialProductionColumn();
+                enginecost   := selectobject( enginecosts, Elements, engine, engine.StartDate() <= cellcolumn.Period() and engine.EndDate() >= cellcolumn.Period() );
+                if( not isnull( enginecost ) ){
+                  column     := selectobject( table, Column, column, column.Name() = cell.FinancialProductionColumn().Name() );
+                  //澶ц繛澶栫搴撳叆搴撹垂鐢�
+                  ccrow.SetDLRentEnterCost( column, enginecost, cell );
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    //澶ц繛澶栫搴撳嚭搴撹垂鐢細鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环锛屽嚭搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝侀攢閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�-newSupply, 澶ц繛鍘傚唴搴擄紝澶ц繛澶栫搴�
+    traverse( owner, FinancialSalesSource, source, not source.IsImport() ){//璐㈠姟閿�閲忔姤琛ㄩ潪瀵煎叆
+      traverse( source, FinancialSalesReport, report, not report.IsShow() ){//璐㈠姟閿�閲忔姤琛ㄤ笉鏄剧ず
+        traverse( report, FinancialSalesRow, row, row.Unit() = ccunit and exists( row, FinancialSalesCell, cell, cell.Value() <> '0' and cell.FinancialSalesColumn().IsDay() ) ){//璐㈠姟閿�閲忔姤琛ㄩ噷鐨勫ぇ杩炰骇閲�, 涓嶄负0
+          product            := row.Product_MP();
+          productparents     := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecosts      := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = dlunit );
+            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
+              products.Add( product );
+              ccrow          := table.GetRow( row.Name() );
+              traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' and cell.FinancialSalesColumn().IsDay() ){
+                cellcolumn   := cell.FinancialSalesColumn();
+                enginecost   := selectobject( enginecosts, Elements, engine, engine.StartDate() <= cellcolumn.Period() and engine.EndDate() >= cellcolumn.Period() );
+                if(  not isnull( enginecost ) ){
+                  column     := selectobject( table, Column, column, column.Name() = cell.FinancialSalesColumn().Name() );
+                  //澶ц繛澶栫搴撳嚭搴撹垂鐢�
+                  ccrow.SetDLRentOutCost( column, enginecost, cell );
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    //闀挎槬闀块�旇繍杈撹垂鐢細璋冩嫧鏁伴噺/鍖呰瀹归噺/瑁呰浇瀹归噺*杩愯緭鍗曚环锛岃皟鎷ㄨ鍒掗噷鎵惧埌璇ヤ骇鍝佷粠DL鍒癈C鐨勮皟鎷ㄦ暟閲忥紝鍗宠捣濮嬪湴澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撳搴旂殑杩愯緭鏁伴噺锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃鎵惧埌瀵瑰簲鐨勫寘瑁呭閲忥紝鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲忥紝鐢ㄥ叕寮忚绠楀緱鍑虹粨鏋滐紝鏈堝害杩涜姹囨��
+    traverse( owner, TransferPlanRow, tprow ){
+      product                 := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
+      productparents          := product.GetAllParent();
+      if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+        //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛
+        originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
+        isdl                   := table.IsInUnit( originsp, dlunit );
+        //鐩殑鍦板簱瀛樼偣鏄惁鏄暱鏄�
+        destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
+        iscc                   := table.IsInUnit( destisp, ccunit );
+        if( isdl and iscc ){
+          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+          enginecosts          := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit );
+          //鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲�
+          transcosts           := selectset( owner, LogisticsCostTransport, trans, trans.Origin() = tprow.SourceStockpoingPointID() 
+                                                  and trans.Destination() = tprow.TargetStockpoingPointID() 
+                                                  and exists( productparents, Elements, e, ifexpr( trans.Product().FindString( '鍙戝姩鏈�', 0 ) >= 0, e.ID() = produtparent,  e.ID() = trans.Product() ) ) );
+          if( not isnull( enginecosts ) and enginecosts.Size() > 0 and not isnull( transcosts ) and transcosts.Size() > 0 ){
+            row                := table.GetRow( product.ID() );
+            products.Add( product );
+            traverse( tprow,TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() <> Date::MinDate() and [Number]tpcell.Value() > 0){
+              tpcolumndate     := tpcell.TransferPlanColumn().ColumnDate();
+              enginecost       := selectobject( enginecosts, Elements, engine, engine.StartDate() <= tpcolumndate and engine.EndDate() >= tpcolumndate );
+              transcost        := selectobject( transcosts, Elements, trans, trans.StartDate() <= tpcolumndate and trans.EndDate() >= tpcolumndate );
+              if( not isnull( enginecost ) and not isnull( transcost ) ){
+                periodtime     := tpcolumndate.StartOfMonth();
+                periodname     := periodtime.Format( "M2/D2/Y" );
+                column         := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
+                 
+                cost           := ceil( ceil( [Number]tpcell.Value() / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();
+                cell           := selectobject( row, Cell, cell, cell.Column() = column );
+                cell.CCLongTransCoat( cell.CCLongTransCoat() + cost );
+              }
+            }
+          }
+        }
+      }
+    }
+    //闀挎槬鐭�旇繍杈撹垂鐢細瀹㈡埛闇�姹傛暟閲�/鍖呰瀹归噺/瑁呰浇瀹归噺*杩愯緭鍗曚环锛屽鎴烽渶姹傛暟閲忓彇鑷猣orecast閲宻ales segment涓洪暱鏄ョ殑鏁伴噺姹囨�伙紝鍐嶇敤鍏紡璁$畻锛屾湀搴﹁繘琛屾眹鎬伙紙鍙栧鎴烽渶姹傛暟閲忔崲绠楁垚杞︽锛�
+    traverse( owner, SalesDemand.astype( Forecast ), forecast, forecast.Quantity() > 0 and not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < startofnextyear ){
+      salessegment            := forecast.SalesSegment_MP();
+      parentsalessegments     := salessegment.GetAllParent();
+      //鏄惁灞炰簬闀挎槬
+      iscc                    := salessegment.Name() = ccunit or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = ccunit );
+      if( iscc ){
+        product               := forecast.Product_MP();
+        productparents        := product.GetAllParent();
+        if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+          enginecosts         := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit );
+          if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
+            products.Add( forecast.Product_MP() );
+            row               := table.GetRow( forecast.ProductID() );
+            traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() > 0 ){
+              enginecost      := selectobject( enginecosts, Elements, engine, engine.StartDate() <= psdip.StartDate() and engine.EndDate() >= psdip.StartDate() );
+              if( not isnull( enginecost ) ){
+                periodtime    := psdip.StartDate().StartOfMonth();
+                periodname    := periodtime.Format( "M2/D2/Y" );
+          //      info( '-------------------------', periodname, periodtime );
+                column         := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
+          //      info( '-------------------------', column.Name() );
+                cost           := ceil( [Number]psdip.Quantity() / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+                cell           := selectobject( row, Cell, cell, cell.Column() = column );
+                cell.CCShortTransCost( cell.CCShortTransCost() + cost );
+              }
+            }
+          }
+        }
+      }
+    }
+    //澶栫搴撲粨鍌ㄨ垂鐢細浠撳偍鏁伴噺/鍖呰瀹归噺*浠撳偍鍗曚环锛屽湪Actual inventories閲屽彇鍒伴暱鏄ュ绉熷簱/澶ц繛澶栫搴撹鍙戝姩鏈虹殑浠撳偍閲忥紝鏍规嵁鍙戝姩鏈哄彿鎵惧埌瀵瑰簲鐨凣eneration 鍜屾í绾靛埗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑浠撳偍鍗曚环鍜屽寘瑁呭閲忥紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
+    traverse( owner, StockingPoint_MP, stockingpoint ){
+      unit                    := stockingpoint.Unit();
+      parentunits             := unit.GetAllParent();
+      //鏄惁灞炰簬闀挎槬澶栫搴�
+      isccrent                := stockingpoint.ID() = ccrent or unit.ID() = ccrent or exists( parentunits, Elements, punit, punit.ID() = ccrent );
+      //鏄惁灞炰簬澶ц繛澶栫搴�
+      isdlrent                := stockingpoint.ID() = dlrent or unit.ID() = dlrent or exists( parentunits, Elements, punit, punit.ID() = dlrent );
+      if( isccrent or isdlrent ){
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() 
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
+          //鑾峰彇琛�
+          product             := pisp.Product_MP();
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            row               := table.GetRow( pisp.ProductID() );
+            enginecosts       := selectset( owner, LogisticsCostEngine, engine, engine.Generation().ToLower() = product.Generation().ToLower() and engine.MLB_MQB() = product.MQBMLB() );
+            if( not isnull( enginecosts ) and enginecosts.Size() > 0 ){
+              products.Add( pisp.Product_MP() );
+              traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0  ){
+                periodtime    := pispip.Start().StartOfMonth().Date();
+                periodname    := periodtime.Format( "M2/D2/Y" );
+                column        := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
+                cell          := selectobject( row, Cell, cell, cell.Column() = column );
+                
+                if( isccrent ){
+                  //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+                  enginecost     := selectobject( enginecosts, Elements, engine, engine.StartDate() <= pispip.Start().Date() and engine.EndDate() >= pispip.Start().Date()
+                                                     and engine.Factory() = ccunit );
+                   if( not isnull( enginecost ) ){
+                     cost        := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//鍥涜垗浜斿叆
+                     cell.CCRentStorageCost( cell.CCRentStorageCost() + cost );
+                   }
+                } else {
+                  //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+                  enginecost     := selectobject( enginecosts, Elements, engine, engine.StartDate() <= pispip.Start().Date() and engine.EndDate() >= pispip.Start().Date()
+                                                     and engine.Factory() = dlunit  );
+                   if( not isnull( enginecost ) ){
+                     cost        := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//鍥涜垗浜斿叆
+                     cell.DLRentStorageCost( cell.DLRentStorageCost() + cost );;
+                   }
+                }
+              }   
+            }
+          }
+        }
+      }
+    }
+    rows := selectsortedset( table, Row, row, row.Name() );
+    i    := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i := i + 1;
+    }
+    info( '-------------------------------------end---------------------------------' );
+    //
+    showtable.Generate( search, products );
+  *]
+}
diff --git a/_Main/BL/Type_ChangeLossSettingExcel/Attribute_EndDate.qbl b/_Main/BL/Type_ChangeLossSettingExcel/Attribute_EndDate.qbl
index 54fa971..0db75ea 100644
--- a/_Main/BL/Type_ChangeLossSettingExcel/Attribute_EndDate.qbl
+++ b/_Main/BL/Type_ChangeLossSettingExcel/Attribute_EndDate.qbl
@@ -3,5 +3,6 @@
 Attribute EndDate
 {
   #keys: '3[415136.0.1132074698][415136.0.1132074697][415136.0.1132074699]'
+  IsReadOnly: true
   ValueType: Date
 }
diff --git a/_Main/BL/Type_ChangeLossSettingExcel/Attribute_StartDate.qbl b/_Main/BL/Type_ChangeLossSettingExcel/Attribute_StartDate.qbl
index 05a1f29..52defce 100644
--- a/_Main/BL/Type_ChangeLossSettingExcel/Attribute_StartDate.qbl
+++ b/_Main/BL/Type_ChangeLossSettingExcel/Attribute_StartDate.qbl
@@ -3,5 +3,6 @@
 Attribute StartDate
 {
   #keys: '3[415136.0.1132074695][415136.0.1132074694][415136.0.1132074696]'
+  IsReadOnly: true
   ValueType: Date
 }
diff --git a/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl b/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl
index 004c0ce..eb73c40 100644
--- a/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl
+++ b/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_ExportTemplate.qbl
@@ -9,7 +9,7 @@
   [*
     // 鐢勫叞楦� Aug-22-2024 (created)
     traverse( macroplan, ChangeLossSetting, cls ){
-      macroplan.ChangeLossSettingExcel( relnew, Product1 := cls.ProductFirst().ID(), Product2 := cls.ProductSecond().ID(), Unit := cls.Unit().ID(), ChangeLossNumber := [String]cls.ChangeLossNr() );
+      macroplan.ChangeLossSettingExcel( relnew, Product1 := cls.ProductFirst().ID(), Product2 := cls.ProductSecond().ID(), Unit := cls.Unit().ID(), ChangeLossNumber := [String]cls.ChangeLossNr(), StartDate := cls.StartDate(), EndDate := cls.EndDate() );
     }
     value := macroplan.MP_ExportChangeLossSettingsBroker().ExecuteToXLS( isxlsxformat ).AsBinaryValue();
     macroplan.ChangeLossSettingExcel( relflush );
diff --git a/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl b/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl
index 466849e..2e8db80 100644
--- a/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl
+++ b/_Main/BL/Type_ChangeLossSettingExcel/StaticMethod_Import.qbl
@@ -20,19 +20,32 @@
       macroplan.ChangeLossSettingExcel( relflush );
       error( e.GeneralInformation() );
     }
+    clsset              := construct( ChangeLossSettings );
     //閬嶅巻澶勭悊瀵煎叆鐨勬暟鎹�
     traverse( macroplan, ChangeLossSettingExcel, excel ){
       cls               := selectobject(  macroplan, ChangeLossSetting, cls, cls.ProductFirst().ID() = excel.Product1()
                                           and cls.ProductSecond().ID() = excel.Product2()
-                                          and cls.Unit().ID() = excel.Unit() );
+                                          and cls.Unit().ID() = excel.Unit()
+                                          and cls.StartDate() = excel.StartDate()
+                                          and cls.EndDate() = excel.EndDate() );
       if( isnull( cls ) ){
-        cls             := macroplan.ChangeLossSetting( relnew, ChangeLossNr := [Number]excel.ChangeLossNumber() );
         product1        := selectobject( macroplan, Product_MP, product, product.ID() = excel.Product1() );
         product2        := selectobject( macroplan, Product_MP, product, product.ID() = excel.Product2() );
         unit            := selectobject( macroplan, Unit, unit, unit.ID() = excel.Unit() );
-        cls.ProductFirst( relset, product1 );
-        cls.ProductSecond( relset, product2 );
-        cls.Unit( relset, unit );
+        feedback        := '';
+        if( ChangeLossSetting::ValidateInput( feedback, macroplan, null( ChangeLossSetting ), unit, product1, product2, excel.StartDate(), excel.EndDate(), [Number]excel.ChangeLossNumber() ) ){
+          cls             := macroplan.ChangeLossSetting( relnew, ChangeLossNr := [Number]excel.ChangeLossNumber() );
+          
+          cls.ProductFirst( relset, product1 );
+          cls.ProductSecond( relset, product2 );
+          cls.Unit( relset, unit );
+          clsset.Add( cls );
+        }else{
+          traverse( clsset, Elements, e ){
+            e.Delete();
+          }
+          error( feedback );
+        }
       }else {
         cls.ChangeLossNr( [Number]excel.ChangeLossNumber() );
       }
diff --git a/_Main/BL/Type_ChangeLossSettingExcel/TypeIndex_ChangeLossSettingTypeIndex.qbl b/_Main/BL/Type_ChangeLossSettingExcel/TypeIndex_ChangeLossSettingTypeIndex.qbl
index 79e5846..4a9f929 100644
--- a/_Main/BL/Type_ChangeLossSettingExcel/TypeIndex_ChangeLossSettingTypeIndex.qbl
+++ b/_Main/BL/Type_ChangeLossSettingExcel/TypeIndex_ChangeLossSettingTypeIndex.qbl
@@ -16,5 +16,13 @@
     {
       ModelElement: Unit
     }
+    TypeIndexAttribute
+    {
+      ModelElement: StartDate
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: EndDate
+    }
   ]
 }
diff --git a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
index f9e39e3..a024d30 100644
--- a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
@@ -11,16 +11,16 @@
     //ccunit                    := EnginePipelineReport::GetDefaultCCUnit();
     //dlunit                    := EnginePipelineReport::GetDefaultDLUnit();
     productparent             := EnginePipelineReport::GetDefaultProductParent();
-    ccalineunit               := EnginePipelineReport::GetDefaultCCALineUnit();
-    dlalienunit               := EnginePipelineReport::GetDefaultDLALineUnit()
-    ccmplineunit              := EnginePipelineReport::GetDefaultCCMPLineUnit()
-    dlmplineunit              := EnginePipelineReport::GetDefaultDLMPLineUnit();
+    //ccalineunit               := EnginePipelineReport::GetDefaultCCALineUnit();
+    //dlalienunit               := EnginePipelineReport::GetDefaultDLALineUnit()
+    //ccmplineunit              := EnginePipelineReport::GetDefaultCCMPLineUnit()
+    //dlmplineunit              := EnginePipelineReport::GetDefaultDLMPLineUnit();
     //allunit                   := EnginePipelineReport::GetDefaultAllUnit();
     source                    := owner.EnginePipelineSource( relnew, Name := EnginePipelineReport::GetDefaultName() );
     table                     := source.Report( relnew, ID := source.Name(), Name := source.Name() );
     showtable                 := source.Report( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsShow := true );
     
-    search                    := source.Search( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() );
+    search                    := owner.EnginePipelineSearch( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() );
     
     products                  := construct( Product_MPs );
     //鍒濆鍖栧垪
@@ -28,13 +28,16 @@
     endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() );
     
     //鐢熸垚鐢熶骇鍜屽簱瀛樻暟鎹�
-    traverse( owner, StockingPoint_MP, stockingpoint ){
-      unit                    := stockingpoint.Unit();
-      parentunits             := unit.GetAllParent();
+    //traverse( owner, StockingPoint_MP, stockingpoint ){
+    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '鍘傚唴搴�' ) ){
+    //  unit                    := stockingpoint.Unit();
+    //  parentunits             := unit.GetAllParent();
       //鏄惁灞炰簬闀挎槬宸ュ巶
-      iscc         := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
+    //  iscc                    := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
+      iscc                    := stockingpoint.ID().StartsWith( 'CC' );
       //鏄惁灞炰簬澶ц繛宸ュ巶
-      isdl         := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
+    //  isdl                    := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
+      isdl                    := stockingpoint.ID().StartsWith( '澶ц繛' );
       
       traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() 
                 and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent ) 
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
index 46586af..dec7ca1 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
@@ -23,7 +23,7 @@
     //startofnextmonth          := startofplanning.StartOfNextMonth();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    search                    := source.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
+    search                    := owner.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
     
     products                  := construct( Product_MPs );
     //闇�瑕佺殑鏃ユ湡鍖洪棿锛� 鍛ㄥ拰澶╃殑鍙渶瑕佸綋鍓嶆湀
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
index 2ac9f43..d2b2932 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -27,7 +27,7 @@
     //startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    search                    := source.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
+    search                    := owner.FinancialSalesSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
     
     table.GenerateColumn( owner );
     
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl b/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
index 0fc5d8b..a7c66eb 100644
--- a/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
+++ b/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
@@ -8,7 +8,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    startofplanning           := search.InventorySummarySource().MacroPlan().StartOfPlanning();
+    startofplanning           := search.MacroPlan().StartOfPlanning();
     startofyear               := startofplanning.StartOfYear();
     startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
     //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
index b5bb158..5bdd2d7 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
@@ -14,10 +14,10 @@
     allunit                   := InventorySummaryReport::GetDefaultAllUnit();
     ccunit                    := InventorySummaryReport::GetDefaultCCUnit();
     dlunit                    := InventorySummaryReport::GetDefaultDLUnit();
-    ccalineunit               := FinancialProductionReport::GetDefaultCCALineUnit();
-    dlalienunit               := FinancialProductionReport::GetDefaultDLALineUnit()
-    ccmplineunit              := FinancialProductionReport::GetDefaultCCMPLineUnit()
-    dlmplineunit              := FinancialProductionReport::GetDefaultDLMPLineUnit();
+    //ccalineunit               := FinancialProductionReport::GetDefaultCCALineUnit();
+    //dlalienunit               := FinancialProductionReport::GetDefaultDLALineUnit()
+    //ccmplineunit              := FinancialProductionReport::GetDefaultCCMPLineUnit()
+    //dlmplineunit              := FinancialProductionReport::GetDefaultDLMPLineUnit();
     
     source                    := owner.InventorySummarySource( relnew, ID := InventorySummaryReport::GetDefaultName(), Name := InventorySummaryReport::GetDefaultName() );
     table                     := source.InventorySummaryReport( relnew, ID := source.Name(), Name := source.Name() );
@@ -26,18 +26,21 @@
     startofyear               := startofplanning.StartOfYear();
     startofnextyear           := startofplanning.StartOfNextYear();
     
-    search                    := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
+    search                    := owner.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
     
     table.GenerateColumn( owner, 'All', startofyear, startofnextyear );
     //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) );
     //搴撳瓨鏁伴噺涓篈ctual inventories閲岄潰鐨勭偣Planned inventories瀛楁搴撳瓨閲忓姞鎬�
-    traverse( owner, StockingPoint_MP, stockingpoint ){
-      unit                    := stockingpoint.Unit();
-      parentunits             := unit.GetAllParent();
+    //traverse( owner, StockingPoint_MP, stockingpoint ){
+    traverse( owner, StockingPoint_MP, stockingpoint, stockingpoint.ID().EndsWith( '鍘傚唴搴�' ) ){
+    //  unit                    := stockingpoint.Unit();
+    //  parentunits             := unit.GetAllParent();
       //鏄惁灞炰簬闀挎槬宸ュ巶
-      iscc         := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
+      iscc                    := stockingpoint.ID().StartsWith( 'CC' );//unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
+    //  iscc                    := stockingpoint.ID().StartsWith( 'CC' ) or unit.ID().StartsWith( 'CC' ) or exists( parentunits, Elements, punit, punit.ID().StartsWith( 'CC' ) );
       //鏄惁灞炰簬澶ц繛宸ュ巶
-      isdl         := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
+      isdl                    := stockingpoint.ID().StartsWith( '澶ц繛' );//unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
+    //  isdl                    := stockingpoint.ID().StartsWith( 'DL' ) or unit.ID().StartsWith( 'DL' ) or exists( parentunits, Elements, punit, punit.ID().StartsWith( 'DL' ) );
       if( iscc or isdl ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() ){
           //鑾峰彇宸ュ巶琛�
@@ -144,8 +147,12 @@
     rows := selectsortedset( table, InventroySummaryRow, row, row.Name() );
     i    := 0;
     traverse( rows, Elements, e ){
-      e.RowNr( i );
-      i := i + 1;
+      if( exists( e, InventorySummaryCell, cell, cell.AverageInventory() <> 0 or cell.EndingInventory() <> 0 or cell.MaximumInventory() <> 0 or cell.MinimumInventory() <> 0 ) ){
+        e.RowNr( i );
+        i := i + 1;
+      }{
+        e.Delete();
+      }
     }
     showtable.Generate( search, products );
   *]
diff --git a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
index 1ce8cfa..de5f0d3 100644
--- a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -16,29 +16,29 @@
     table                     := source.Report( relnew, ID := source.Name(), Name := source.Name() );
     showtable                 := source.Report( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsShow := true );
     
-    search                    := source.Search( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() );
+    search                    := owner.MachiningPipelineSearch( relnew, StartDate := Date::MinDate(), EndDate := Date::MaxDate(), TimeUnit := Translations::MP_GlobalParameters_Day() );
     
     products                  := construct( Product_MPs );
     //鍒濆鍖栧垪
     table.GenerateColumn( owner, 'All', search.StartDate(), search.EndDate() );
     endperiod                 := maxobject( owner, Period_MP, period, not period.IsHistorical() and period.TimeUnit() = Translations::MP_GlobalParameters_Day(), period.StartDate() );
     
-    //鐢熸垚瑁呴厤銆佺敓浜у拰搴撳瓨鏁版嵁
+    //鐢熸垚瑁呴厤(闀垮唴搴�)銆佺敓浜э紙鐨凞L鍜屽簱瀛樻暟鎹�
     traverse( owner, StockingPoint_MP, stockingpoint ){
       unit                    := stockingpoint.Unit();
       parentunits             := unit.GetAllParent();
       //鏄惁灞炰簬闀挎槬宸ュ巶
-      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      iscc                    := stockingpoint.ID().StartsWith( 'CC' ) or unit.ID().StartsWith( 'CC' ) or exists( parentunits, Elements, punit, punit.ID().StartsWith( 'CC' ) );//unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
       //鏄惁灞炰簬澶ц繛宸ュ巶
-      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
-      //鏄惁灞炰簬闀挎槬瑁呴厤绾�
-      isccassemnly            := unit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() );
-      //鏄惁灞炰簬澶ц繛瑁呴厤绾�
-      isdlassemnly            := unit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() );
+      isdl                    := stockingpoint.ID().StartsWith( 'DL' ) or unit.ID().StartsWith( 'DL' ) or exists( parentunits, Elements, punit, punit.ID().StartsWith( 'DL' ) );//unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
+      //鏄惁灞炰簬闀挎槬瑁呴厤绾緾C鍘傚唴搴�
+      isccassemnly            := stockingpoint.ID().EndsWith( '鍘傚唴搴�' ) and ( stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '闀挎槬' ) );//unit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCAssemnlyUnit() );
+      //鏄惁灞炰簬澶ц繛瑁呴厤绾緿L鍘傚唴搴�
+      isdlassemnly            := stockingpoint.ID().EndsWith( '鍘傚唴搴�' ) and ( stockingpoint.ID().StartsWith( 'DL' ) or stockingpoint.ID().StartsWith( '澶ц繛' ) );//unit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLAssemnlyUnit() );
       //鏄惁灞炰簬闀挎槬鏈哄姞浜х嚎
-      isccproduction          := unit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() );
+      isccproduction          := stockingpoint.ID().EndsWith( '绾胯竟搴�' ) and ( stockingpoint.ID().StartsWith( 'CC' ) or stockingpoint.ID().StartsWith( '闀挎槬' ) );//unit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultCCProductionUnit() );
       //鏄惁灞炰簬澶ц繛鏈哄姞浜х嚎
-      isdlproduction          := unit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() );
+      isdlproduction          := unit.ID().EndsWith( 'MoMo' ) and unit.ID().StartsWith( 'DL' );//unit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() );
       if( iscc or isdl ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() 
     //              and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent ) 
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def"
index bb0fe40..f56b008 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def"
@@ -25,6 +25,26 @@
         Taborder: 0
       ]
     }
+    Component ButtonImport
+    {
+      #keys: '[415136.0.1153801819]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 2
+      ]
+    }
+    Component bRefresh
+    {
+      #keys: '[415136.0.1153802554]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 3
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def
index 0061f31..3ada041 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def
@@ -11,14 +11,14 @@
     [*
       //鍒濆鍖�
       //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
-        CCEngineLogisticsCostReport::Initialize( MacroPlan );
+      //  CCEngineLogisticsCostReport::Initialize( MacroPlan );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, CCEngineLogisticsCostReport, table, table.IsShow() );
+      //table := selectobject( MacroPlan, CCEngineLogisticsCostReport, table, table.IsShow() );
       //info( '------------------2----------------', table.IsImport(), table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.MacroPlan().CCEngineLogisticsCostSearch() );
+      //dhSearch.Data( table.MacroPlan().CCEngineLogisticsCostSearch() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonImport_OnClick.def
new file mode 100644
index 0000000..70947b6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonImport_OnClick.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: PanelExport_670/ButtonImport
+Response OnClick () id:Response_PanelExport_670_ButtonImport_OnClick
+{
+  #keys: '[415136.0.1153801818]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          CCEngineLogisticsCostReport::Import( MacroPlan, RecycleBin, webFileBinaryData, fileName );
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_bRefresh_OnClick.def
new file mode 100644
index 0000000..cceb058
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_bRefresh_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport_670/bRefresh
+Response OnClick () id:Response_PanelExport_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153802553]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      CCEngineLogisticsCostReport::Initialize( MacroPlan );
+      
+      table := selectobject( MacroPlan, CCEngineLogisticsCostReport, table, table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      //dhSearch.Data( table.MacroPlan().CCEngineLogisticsCostSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def
index a3099b3..8bdf1f3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Generation() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
         dhSearch.Data().Generation( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def
index 6514388..3ec8b09 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().MqbMlb() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
         dhSearch.Data().MqbMlb( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def
index a5e290e..1967b54 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Power() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
         dhSearch.Data().Power( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def
index 5428df3..1d10db9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def
@@ -22,6 +22,21 @@
       #keys: '[415136.0.989500384]'
       BaseType: 'WebDataHolder'
       Databinding: 'CCEngineLogisticsCostSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1155813573]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'CCEngineLogisticsCostSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def
index bfe165a..6b21362 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def
@@ -25,6 +25,26 @@
         Taborder: 0
       ]
     }
+    Component ButtonImport id:ButtonImport_85
+    {
+      #keys: '[415136.0.1153802162]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 2
+      ]
+    }
+    Component bRefresh id:bRefresh_427
+    {
+      #keys: '[415136.0.1153802325]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 3
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def
index ca7f4d4..090c39f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def
@@ -11,15 +11,15 @@
     [*
       //鍒濆鍖�
       //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
-        DLEngineLogisticsCostReport::Initialize( MacroPlan );
+      //  DLEngineLogisticsCostReport::Initialize( MacroPlan );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
+      //table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
       //info( '------------------2----------------', table.IsImport(), table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.MacroPlan().DLEngineLogisticsCostSearch() );
-      info( '------------------2----------------', isnull( dhSearch.Data() ) );
+      //dhSearch.Data( table.MacroPlan().DLEngineLogisticsCostSearch() );
+      //info( '------------------2----------------', isnull( dhSearch.Data() ) );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonImport_OnClick\043130.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonImport_OnClick\043130.def"
new file mode 100644
index 0000000..7af570d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonImport_OnClick\043130.def"
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonImport_85
+Response OnClick () id:Response_PanelExport_670_ButtonImport_OnClick_130
+{
+  #keys: '[415136.0.1153802161]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          DLEngineLogisticsCostReport::Import( MacroPlan, RecycleBin, webFileBinaryData, fileName );
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_bRefresh_OnClick\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_bRefresh_OnClick\04357.def"
new file mode 100644
index 0000000..13ea574
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_bRefresh_OnClick\04357.def"
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport/bRefresh_427
+Response OnClick () id:Response_pHeader_bRefresh_OnClick_57
+{
+  #keys: '[415136.0.1153802324]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      DLEngineLogisticsCostReport::Initialize( MacroPlan );
+      
+      table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      //dhSearch.Data( MacroPlan.DLEngineLogisticsCostSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
index ea16450..78ada99 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Generation() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
         dhSearch.Data().Generation( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
index e9f628d..4f7f73a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().MqbMlb() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
         dhSearch.Data().MqbMlb( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
index bb72128..5cf667b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Power() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
         dhSearch.Data().Power( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def
index 5e6807d..ac118fe 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def
@@ -22,6 +22,21 @@
       #keys: '[415136.0.992750376]'
       BaseType: 'WebDataHolder'
       Databinding: 'DLEngineLogisticsCostSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1155813898]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'DLEngineLogisticsCostSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
index 4969427..ec10521 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Component_PanelExport\043570.def"
@@ -25,6 +25,16 @@
         Taborder: 0
       ]
     }
+    Component bRefresh id:bRefresh_765
+    {
+      #keys: '[415136.0.1153803836]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def
index 54cbda2..16152ac 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_OnCreated.def
@@ -10,14 +10,14 @@
     Body:
     [*
       //if( not isnull( MacroPlan.EnginePipelineSource() ) ){
-        EnginePipelineSource::Initialize( MacroPlan );
+      //  EnginePipelineSource::Initialize( MacroPlan );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, EnginePipelineSource.Report, table, table.IsShow() );
+      //table := selectobject( MacroPlan, EnginePipelineSource.Report, table, table.IsShow() );
       //info( '------------------2----------------', table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.Source().Search() );
+      //dhSearch.Data( table.Source().Search() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_bRefresh_OnClick.def
new file mode 100644
index 0000000..cc8451d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelExport_570_bRefresh_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport_570/bRefresh_765
+Response OnClick () id:Response_PanelExport_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153803835]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      EnginePipelineSource::Initialize( MacroPlan );
+      
+      table := selectobject( MacroPlan, EnginePipelineSource.Report, table, table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( MacroPlan.EnginePipelineSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
index 17fbc7d..2ca50e9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorEnd_OnChanged.def
@@ -13,7 +13,7 @@
       if( this.Date() < DateSelectorStart.Date() ){
         this.HintError( 'The end date cannot be less than the start date!' );
       }else{
-        if( dhSearch.Data().EndDate() <> this.Date() ){
+        if( not isnull( dhSearch.Data() ) and dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
       //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
index 7251bc5..687e5fc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelPeriod_325_DateSelectorStart_OnChanged.def
@@ -13,7 +13,7 @@
       if( this.Date() > DateSelectorEnd.Date() ){
         this.HintError( 'The start date cannot be later than the end date!' );
       }else{
-        if( dhSearch.Data().StartDate() <> this.Date() ){
+        if( not isnull( dhSearch.Data() ) and dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
       //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
index ed13429..fad2259 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/Response_PanelTimeUnit_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().TimeUnit() <> this.BoundValue() ){
         dhSearch.Data().TimeUnit( this.BoundValue() );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def
index bac49a1..fe4cca4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def
@@ -22,6 +22,21 @@
       #keys: '[415136.0.884990864]'
       BaseType: 'WebDataHolder'
       Databinding: 'EnginePipelineSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1155812008]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'EnginePipelineSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
index 82e986e..d776a17 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Component_PanelExport.def
@@ -25,6 +25,16 @@
         Taborder: 0
       ]
     }
+    Component bRefresh id:bRefresh_859
+    {
+      #keys: '[415136.0.1153802738]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
index d90dc62..03e00bf 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -11,14 +11,14 @@
     [*
       //鍒濆鍖�
       //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
-        FinancialProductionSource::Initialize( MacroPlan );
+      //  FinancialProductionSource::Initialize( MacroPlan );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
+      //table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
       //info( '------------------2----------------', table.IsImport(), table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.FinancialProductionSource().FinancialProductionSearch() );
+      //dhSearch.Data( MacroPlan.FinancialProductionSearch() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def
new file mode 100644
index 0000000..e06555c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_bRefresh_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport/bRefresh_859
+Response OnClick () id:Response_PanelExport_670_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153802737]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      FinancialProductionSource::Initialize( MacroPlan );
+      
+      table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      //dhSearch.Data( MacroPlan.FinancialProductionSearch() );
+    *]
+    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
index 786e62f..95ddf8e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Generation() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
         dhSearch.Data().Generation( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
index a4b08cb..b2a6b92 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().MqbMlb() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
         dhSearch.Data().MqbMlb( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
index ac5059f..e00c8da 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Power() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
         dhSearch.Data().Power( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
index 8e539cb..634002f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      if( dhSearch.Data().Unit() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Unit() <> selection ){
         dhSearch.Data().Unit( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
index 7e63fb7..01046c8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
@@ -24,6 +24,21 @@
       #keys: '[415136.0.849431513]'
       BaseType: 'WebDataHolder'
       Databinding: 'FinancialProductionSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1153870614]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'FinancialProductionSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
index 75f5b1b..9f9b106 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
@@ -25,6 +25,16 @@
         Taborder: 0
       ]
     }
+    Component bRefresh
+    {
+      #keys: '[415136.0.1153802934]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
index 68f009c..8afab20 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -10,14 +10,14 @@
     Body:
     [*
       //if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
-        FinancialSalesSource::Initialize( MacroPlan );
+      //  FinancialSalesSource::Initialize( MacroPlan );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
+      //table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
       //info( '------------------2----------------', table.IsImport(), table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.FinancialSalesSource().FinancialSalesSearch() );
+      //dhSearch.Data( MacroPlan.FinancialSalesSearch() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def
new file mode 100644
index 0000000..76278ef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_bRefresh_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport_545/bRefresh
+Response OnClick () id:Response_PanelExport_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153802933]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      FinancialSalesSource::Initialize( MacroPlan );
+      
+      table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      //dhSearch.Data( MacroPlan.FinancialSalesSearch() );
+    *]
+    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
index 10fe370..bcd9b6c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //浠f暟鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().Generation() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
         dhSearch.Data().Generation( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
index 7c37c20..0376e4a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //妯旱鍒舵敼鍙樺悗鍒锋柊鏄剧ず
-      if( dhSearch.Data().MqbMlb() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
         dhSearch.Data().MqbMlb( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
index c1d3e51..ef6b683 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //鍔熺巼鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().Power() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
         dhSearch.Data().Power( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
index 698e258..a236b1a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //Unit鏇存柊鍚庣敓鎴愭柊鐨勬樉绀�
-      if( dhSearch.Data().Unit() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Unit() <> selection ){
         dhSearch.Data().Unit( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
index a30e8a2..7261f0a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
@@ -22,6 +22,21 @@
       #keys: '[415136.0.857870874]'
       BaseType: 'WebDataHolder'
       Databinding: 'FinancialSalesSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1155080551]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'FinancialSalesSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def
index 8d20e9e..7b37425 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def
@@ -15,6 +15,16 @@
         Taborder: 0
       ]
     }
+    Component bRefresh id:bRefresh_561
+    {
+      #keys: '[415136.0.1153803361]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 1
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def
index 3cf4d42..6238859 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      FinancialWeeklyReport::Initialize( MacroPlan );
+      //FinancialWeeklyReport::Initialize( MacroPlan );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_bRefresh_OnClick.def
new file mode 100644
index 0000000..4b2a298
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_bRefresh_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelHeader/bRefresh_561
+Response OnClick () id:Response_PanelExport_545_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153803360]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      FinancialWeeklyReport::Initialize( MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def
index 96e3d3b..b1ddee6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def
@@ -25,6 +25,16 @@
         Taborder: 0
       ]
     }
+    Component bRefresh id:bRefresh_509
+    {
+      #keys: '[415136.0.1153803172]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
index ca45d5d..7f67159 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -10,14 +10,14 @@
     Body:
     [*
       //if( not isnull( MacroPlan.InventorySummarySource() ) ){
-        InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
+      //  InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
+      //table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
       //info( '------------------2----------------', table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
+      //dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def"
index 2a55339..1ad9aaf 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def"
@@ -10,7 +10,7 @@
     Body:
     [*
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().Category() <> this.BoundValue() ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Category() <> this.BoundValue() ){
         dhSearch.Data().Category( this.BoundValue() );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_bRefresh_OnClick.def
new file mode 100644
index 0000000..5820e45
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_bRefresh_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport/bRefresh_509
+Response OnClick () id:Response_PanelExport_545_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153803171]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
+      
+      table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      //dhSearch.Data( MacroPlan.InventorySummarySearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
index 843bc87..38224e9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //浠f暟鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().Generation() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Generation() <> selection ){
         dhSearch.Data().Generation( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
index b4bef55..0d5bc90 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //妯旱鍒舵敼鍙樺悗鍒锋柊鏄剧ず
-      if( dhSearch.Data().MqbMlb() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().MqbMlb() <> selection ){
         dhSearch.Data().MqbMlb( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
index b4945f2..c89a71e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -13,7 +13,7 @@
       if( this.Date() < DateSelectorStart.Date() ){
         this.HintError( 'The end date cannot be less than the start date!' );
       }else{
-        if( dhSearch.Data().EndDate() <> this.Date() ){
+        if( not isnull( dhSearch.Data() ) and dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
       //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
index 3a8371e..88da857 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -13,7 +13,7 @@
       if( this.Date() > DateSelectorEnd.Date() ){
         this.HintError( 'The start date cannot be later than the end date!' );
       }else{
-        if( dhSearch.Data().StartDate() <> this.Date() ){
+        if( not isnull( dhSearch.Data() ) and dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
       //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
index f6b440e..d08a74b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //鍔熺巼鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().Power() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Power() <> selection ){
         dhSearch.Data().Power( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
index 976128d..f5eb323 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //Unit鏇存柊鍚庣敓鎴愭柊鐨勬樉绀�
-      if( dhSearch.Data().Unit() <> selection ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().Unit() <> selection ){
         dhSearch.Data().Unit( selection );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
index 0f7034e..beeeae0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
@@ -22,6 +22,21 @@
       #keys: '[415136.0.864612034]'
       BaseType: 'WebDataHolder'
       Databinding: 'InventorySummarySearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1153810823]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'InventorySummarySearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
index cb6cfb8..7c71f89 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Component_PanelExport.def
@@ -25,6 +25,16 @@
         Taborder: 0
       ]
     }
+    Component bRefresh
+    {
+      #keys: '[415136.0.1153803668]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def
index c07555d..90189c0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_OnCreated.def
@@ -10,14 +10,14 @@
     Body:
     [*
       //if( not isnull( MacroPlan.EnginePipelineSource() ) ){
-        MachiningPipelineSource::Initialize( MacroPlan );
+      //  MachiningPipelineSource::Initialize( MacroPlan );
       //}
       //info( '------------------1----------------' );
-      table := selectobject( MacroPlan, MachiningPipelineSource.Report, table, table.IsShow() );
+      //table := selectobject( MacroPlan, MachiningPipelineSource.Report, table, table.IsShow() );
       //info( '------------------2----------------', table.IsShow() );
-      DataHolderTable.Data( table );
+      //DataHolderTable.Data( table );
       
-      dhSearch.Data( table.Source().Search() );
+      //dhSearch.Data( table.Source().Search() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_bRefresh_OnClick.def
new file mode 100644
index 0000000..b4bca44
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelExport_bRefresh_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelExport/bRefresh
+Response OnClick () id:Response_PanelHeader_bRefresh_OnClick
+{
+  #keys: '[415136.0.1153803667]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      MachiningPipelineSource::Initialize( MacroPlan );
+      
+      table := selectobject( MacroPlan, MachiningPipelineSource.Report, table, table.IsShow() );
+      
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( MacroPlan.MachiningPipelineSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
index 921b890..9e717c5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -13,7 +13,7 @@
       if( this.Date() < DateSelectorStart.Date() ){
         this.HintError( 'The end date cannot be less than the start date!' );
       }else{
-        if( dhSearch.Data().EndDate() <> this.Date() ){
+        if( not isnull( dhSearch.Data() ) and dhSearch.Data().EndDate() <> this.Date() ){
           dhSearch.Data().EndDate( this.Date() );
       //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
index c8a387b..7d4791b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -13,7 +13,7 @@
       if( this.Date() > DateSelectorEnd.Date() ){
         this.HintError( 'The start date cannot be later than the end date!' );
       }else{
-        if( dhSearch.Data().StartDate() <> this.Date() ){
+        if( not isnull( dhSearch.Data() ) and dhSearch.Data().StartDate() <> this.Date() ){
           dhSearch.Data().StartDate( this.Date() );
       //    DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
         }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
index ff83249..c8e105c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/Response_PanelTimeUnit_778_RadioButtonGroupUseForTimeUnit_OnChanged.def
@@ -10,7 +10,7 @@
     Body:
     [*
       //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
-      if( dhSearch.Data().TimeUnit() <> this.BoundValue() ){
+      if( not isnull( dhSearch.Data() ) and dhSearch.Data().TimeUnit() <> this.BoundValue() ){
         dhSearch.Data().TimeUnit( this.BoundValue() );
       //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
index 7d54e40..ed78738 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
@@ -22,6 +22,21 @@
       #keys: '[415136.0.893820823]'
       BaseType: 'WebDataHolder'
       Databinding: 'MachiningPipelineSearch'
+      Children:
+      [
+        Component deSearch
+        {
+          #keys: '[415136.0.1155813174]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'MachiningPipelineSearch'
+          ]
+        }
+      ]
       Properties:
       [
         Taborder: 1
diff --git a/_var/_Main/Data/MP_ChangeoverLossSetting.xlsx b/_var/_Main/Data/MP_ChangeoverLossSetting.xlsx
index 15643e7..5d08cce 100644
--- a/_var/_Main/Data/MP_ChangeoverLossSetting.xlsx
+++ b/_var/_Main/Data/MP_ChangeoverLossSetting.xlsx
Binary files differ

--
Gitblit v1.9.3