From f6a108e67cf221fe34a2338a44c9cb7894c9e07e Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期二, 13 八月 2024 18:38:46 +0800
Subject: [PATCH] 大连发动机物流成本报表

---
 _Main/BL/Type_CCEngineLogisticsCostReport0/_ROOT_Type_DLEngineLogisticsCostReport#0.qbl                                                        |   10 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultDLUnit.qbl                                                                   |   11 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuDLEngineLogis.def |   16 
 _Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Power.qbl                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelPower.def                                                 |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def                      |   38 +
 _Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_MqbMlb.qbl                                                                                 |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_EstimatedTotalCost.qbl                                                                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl                                                                         |  263 +++++++
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Download.qbl                                                                           |  212 +++++
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_Coefficient.qbl                                                                             |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_ID.qbl                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def                                                |   34 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Index.qbl                                                                                 |    8 
 _Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl                                                                                |    1 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentOutCost.qbl                                                                           |    8 
 _Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable#358.def                                      |    6 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_FactoryToDLRentTransCost.qbl                                                                |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCShortTransCost.qbl                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelTable.def                                                 |   14 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentStorageCost.qbl                                                                          |   16 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl                                                                          |  118 ++-
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_Clear.qbl                                                                                    |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonSearch_OnClick.def                            |   16 
 _Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl                                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonExport_OnClick.def                            |   22 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_IsInUnit.qbl                                                                                 |   16 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentOutCost.qbl                                                                              |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelGeneration.def                                            |   24 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_Name.qbl                                                                                     |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_GetRow.qbl                                                                                   |   21 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_TotalCost.qbl                                                                               |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentEnterCost.qbl                                                                         |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl                                                                                  |    2 
 _Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Generation.qbl                                                                          |    6 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Name.qbl                                                                                  |    8 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_StartDate.qbl                                                                             |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetFactoryToRentTransCost.qbl                                                                   |   16 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLLine.qbl                                                             |   11 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Column_DLEngineLogisticsCostColumn_Repo.qbl                                            |   26 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostColumn_Cell_DLEngineLogisticsCostCell_Column.qbl                                              |   23 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostReport_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def                               |   11 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcTotalCost.qbl                                                                            |   13 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl                                                                            |   16 
 _Main/BL/Relations/Relation_FinancialProductionRow_Product_MP_Product_MP_FinancialProductionRow.qbl                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostCell0/_ROOT_Type_DLEngineLogisticsCostCell#0.qbl                                                            |   10 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/_ROOT_Type_DLEngineLogisticsCostColumn#0.qbl                                                        |   10 
 _Main/UI/MacroPlannerWebApp/Views/DL_engine_logistics_cost_report_view.vw                                                                      |  200 +++++
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultCCUnit.qbl                                                                   |   11 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentOutCost#0.qbl                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def                     |   19 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimatedTotalCost.qbl                                                                   |   14 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_Name.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportSearch.def                     |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_MatrixEditorTable_OnUpdateValue.def                             |   32 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_ID.qbl                                                                                    |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_IsShow.qbl                                                                                |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentEnterCost.qbl                                                                         |    8 
 _Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Generation.qbl                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def                         |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnCreated.def                              |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportHeader.def                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixeditorContextMenuTable.def                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_MatrixEditorTable.def                                          |   98 ++
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentOutCost.qbl                                                                            |   20 
 _Main/BL/Type_CCEngineLogisticsCostRow0/DefaultValue_Name.qbl                                                                                  |    6 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCLongTransCoat.qbl                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnCreated.def                    |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelMQBMLB.def                                                |   24 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentEnterCost.qbl                                                                          |   20 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultAllUnit.qbl                                                                  |   10 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostRow_Cell_DLEngineLogisticsCostCell_Row.qbl                                                    |   23 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_Initialize.qbl                                                                                  |   22 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl                                                                                 |   68 +
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def                   |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def           |   19 
 _Main/BL/Type_CCEngineLogisticsCostRow0/_ROOT_Type_DLEngineLogisticsCostRow#0.qbl                                                              |   10 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentQuantity.qbl                                                                          |    8 
 _Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Power.qbl                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def                            |   23 
 _Main/BL/Relations/Relation_FinancialSalesRow_Product_MP_Product_MP_FinancialSalesRow.qbl                                                      |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLRent.qbl                                                             |   10 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_RowNr.qbl                                                                                    |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentStorageCost.qbl                                                                       |    8 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/DefaultValue_Name.qbl                                                                               |    6 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultName.qbl                                                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable.def                             |   10 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Function_CalcIndex.qbl                                                                              |   13 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostSearch_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_GenerateColumn.qbl                                                                           |   20 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointCCRent.qbl                                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnClose.def                                                     |   26 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Row_DLEngineLogisticsCostRow_Report.qbl                                                |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_Name.qbl                                                                               |    6 
 _Main/BL/Type_DLEngineLogisticsCostSearch/_ROOT_Type_DLEngineLogisticsCostSearch.qbl                                                           |   10 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentStorageCost#0.qbl                                                                     |    8 
 98 files changed, 2,157 insertions(+), 50 deletions(-)

diff --git a/_Main/BL/Relations/Relation_DLEngineLogisticsCostColumn_Cell_DLEngineLogisticsCostCell_Column.qbl b/_Main/BL/Relations/Relation_DLEngineLogisticsCostColumn_Cell_DLEngineLogisticsCostCell_Column.qbl
new file mode 100644
index 0000000..3c091a9
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DLEngineLogisticsCostColumn_Cell_DLEngineLogisticsCostCell_Column.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DLEngineLogisticsCostColumn_Cell_DLEngineLogisticsCostCell_Column
+{
+  #keys: '1[415136.0.992900190]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Cell
+  {
+    #keys: '3[415136.0.992900192][415136.0.992900191][415136.0.992900193]'
+    Cardinality: '1toN'
+    ObjectDefinition: DLEngineLogisticsCostColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Column
+  {
+    #keys: '3[415136.0.992900195][415136.0.992900194][415136.0.992900196]'
+    Cardinality: '0to1'
+    ObjectDefinition: DLEngineLogisticsCostCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Column_DLEngineLogisticsCostColumn_Repo.qbl b/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Column_DLEngineLogisticsCostColumn_Repo.qbl
new file mode 100644
index 0000000..447d3ab
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Column_DLEngineLogisticsCostColumn_Repo.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DLEngineLogisticsCostReport_Column_DLEngineLogisticsCostColumn_Report
+{
+  #keys: '1[415136.0.992900157]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.992900176][415136.0.992900170][415136.0.992900177][415136.0.992900171][415136.0.992900178][415136.0.992900172][415136.0.992900179][415136.0.992900173][415136.0.992900180][415136.0.992900174][415136.0.992900181][415136.0.992900175]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide Column
+  {
+    #keys: '3[415136.0.992900159][415136.0.992900158][415136.0.992900160]'
+    Cardinality: '1toN'
+    ObjectDefinition: DLEngineLogisticsCostReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide Report
+  {
+    #keys: '3[415136.0.992900162][415136.0.992900161][415136.0.992900163]'
+    Cardinality: '0to1'
+    ObjectDefinition: DLEngineLogisticsCostColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl b/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl
new file mode 100644
index 0000000..5bdc56d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DLEngineLogisticsCostReport_MacroPlan_MacroPlan_DLEngineLogisticsCostReport
+{
+  #keys: '1[415136.0.992900125]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.992900127][415136.0.992900126][415136.0.992900128]'
+    Cardinality: '0to1'
+    ObjectDefinition: DLEngineLogisticsCostReport
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DLEngineLogisticsCostReport
+  {
+    #keys: '3[415136.0.992900130][415136.0.992900129][415136.0.992900131]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Row_DLEngineLogisticsCostRow_Report.qbl b/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Row_DLEngineLogisticsCostRow_Report.qbl
new file mode 100644
index 0000000..c9e2ed5
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Row_DLEngineLogisticsCostRow_Report.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DLEngineLogisticsCostReport_Row_DLEngineLogisticsCostRow_Report
+{
+  #keys: '1[415136.0.992900141]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Row
+  {
+    #keys: '3[415136.0.992900143][415136.0.992900142][415136.0.992900144]'
+    Cardinality: '1toN'
+    ObjectDefinition: DLEngineLogisticsCostReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide Report
+  {
+    #keys: '3[415136.0.992900146][415136.0.992900145][415136.0.992900147]'
+    Cardinality: '0to1'
+    ObjectDefinition: DLEngineLogisticsCostRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DLEngineLogisticsCostRow_Cell_DLEngineLogisticsCostCell_Row.qbl b/_Main/BL/Relations/Relation_DLEngineLogisticsCostRow_Cell_DLEngineLogisticsCostCell_Row.qbl
new file mode 100644
index 0000000..0f8eb23
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DLEngineLogisticsCostRow_Cell_DLEngineLogisticsCostCell_Row.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DLEngineLogisticsCostRow_Cell_DLEngineLogisticsCostCell_Row
+{
+  #keys: '1[415136.0.992900203]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Cell
+  {
+    #keys: '3[415136.0.992900205][415136.0.992900204][415136.0.992900206]'
+    Cardinality: '1toN'
+    ObjectDefinition: DLEngineLogisticsCostRow
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide Row
+  {
+    #keys: '3[415136.0.992900208][415136.0.992900207][415136.0.992900209]'
+    Cardinality: '0to1'
+    ObjectDefinition: DLEngineLogisticsCostCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DLEngineLogisticsCostSearch_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl b/_Main/BL/Relations/Relation_DLEngineLogisticsCostSearch_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl
new file mode 100644
index 0000000..84da0ad
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DLEngineLogisticsCostSearch_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DLEngineLogisticsCostSearch_MacroPlan_MacroPlan_DLEngineLogisticsCostSearch
+{
+  #keys: '1[415136.0.992900109]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.992900111][415136.0.992900110][415136.0.992900112]'
+    Cardinality: '0to1'
+    ObjectDefinition: DLEngineLogisticsCostSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DLEngineLogisticsCostSearch
+  {
+    #keys: '3[415136.0.992900114][415136.0.992900113][415136.0.992900115]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionRow_Product_MP_Product_MP_FinancialProductionRow.qbl b/_Main/BL/Relations/Relation_FinancialProductionRow_Product_MP_Product_MP_FinancialProductionRow.qbl
new file mode 100644
index 0000000..8d2d046
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionRow_Product_MP_Product_MP_FinancialProductionRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionRow_Product_MP_Product_MP_FinancialProductionRow
+{
+  #keys: '1[415136.0.992900294]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Product_MP
+  {
+    #keys: '3[415136.0.992900296][415136.0.992900295][415136.0.992900297]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialProductionRow
+  {
+    #keys: '3[415136.0.992900299][415136.0.992900298][415136.0.992900300]'
+    Cardinality: '0to1'
+    ObjectDefinition: Product_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesRow_Product_MP_Product_MP_FinancialSalesRow.qbl b/_Main/BL/Relations/Relation_FinancialSalesRow_Product_MP_Product_MP_FinancialSalesRow.qbl
new file mode 100644
index 0000000..52154b2
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesRow_Product_MP_Product_MP_FinancialSalesRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesRow_Product_MP_Product_MP_FinancialSalesRow
+{
+  #keys: '1[415136.0.993115876]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Product_MP
+  {
+    #keys: '3[415136.0.993115878][415136.0.993115877][415136.0.993115879]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialSalesRow
+  {
+    #keys: '3[415136.0.993115881][415136.0.993115880][415136.0.993115882]'
+    Cardinality: '0to1'
+    ObjectDefinition: Product_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCLongTransCoat.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCLongTransCoat.qbl
new file mode 100644
index 0000000..1c4d5bf
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCLongTransCoat.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCLongTransCoat
+{
+  #keys: '3[415136.0.992900332][415136.0.992900331][415136.0.992900333]'
+  Description: '闀挎槬闀块�旇繍杈撹垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentEnterCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentEnterCost.qbl
new file mode 100644
index 0000000..7ad15e3
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentEnterCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCRentEnterCost
+{
+  #keys: '3[415136.0.992900045][415136.0.992900044][415136.0.992900046]'
+  Description: '闀挎槬澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentOutCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentOutCost.qbl
new file mode 100644
index 0000000..66c4cc5
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentOutCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCRentOutCost
+{
+  #keys: '3[415136.0.992900048][415136.0.992900047][415136.0.992900049]'
+  Description: '闀挎槬澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentQuantity.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentQuantity.qbl
new file mode 100644
index 0000000..ecf78ff
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCRentQuantity
+{
+  #keys: '3[415136.0.993115853][415136.0.993115852][415136.0.993115854]'
+  Description: '闀挎槬澶栫搴撴暟閲�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentStorageCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentStorageCost.qbl
new file mode 100644
index 0000000..ac4c891
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentStorageCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCRentStorageCost
+{
+  #keys: '3[415136.0.992900051][415136.0.992900050][415136.0.992900052]'
+  Description: '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCShortTransCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCShortTransCost.qbl
new file mode 100644
index 0000000..572f8e5
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCShortTransCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCShortTransCost
+{
+  #keys: '3[415136.0.992900342][415136.0.992900341][415136.0.992900343]'
+  Description: '闀挎槬鐭�旇繍杈撹垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_Coefficient.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_Coefficient.qbl
new file mode 100644
index 0000000..78e30c4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_Coefficient.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Coefficient
+{
+  #keys: '3[415136.0.992900036][415136.0.992900035][415136.0.992900037]'
+  Description: '绯绘暟'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentEnterCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentEnterCost.qbl
new file mode 100644
index 0000000..2ba6eb9
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentEnterCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLRentEnterCost
+{
+  #keys: '3[415136.0.992900242][415136.0.992900241][415136.0.992900243]'
+  Description: '澶ц繛澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Number
+}
diff --git "a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentOutCost\0430.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentOutCost\0430.qbl"
new file mode 100644
index 0000000..f95e66f
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentOutCost\0430.qbl"
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLRentOutCost
+{
+  #keys: '3[415136.0.992900249][415136.0.992900248][415136.0.992900250]'
+  Description: '澶ц繛澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Number
+}
diff --git "a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentStorageCost\0430.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentStorageCost\0430.qbl"
new file mode 100644
index 0000000..c70e451
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentStorageCost\0430.qbl"
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLRentStorageCost
+{
+  #keys: '3[415136.0.992900262][415136.0.992900261][415136.0.992900263]'
+  Description: '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_EstimatedTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_EstimatedTotalCost.qbl
new file mode 100644
index 0000000..9f5a460
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_EstimatedTotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EstimatedTotalCost
+{
+  #keys: '3[415136.0.992900039][415136.0.992900038][415136.0.992900040]'
+  Description: '棰勮鎬昏垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_FactoryToDLRentTransCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_FactoryToDLRentTransCost.qbl
new file mode 100644
index 0000000..d39550c
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_FactoryToDLRentTransCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FactoryToDLRentTransCost
+{
+  #keys: '3[415136.0.992900042][415136.0.992900041][415136.0.992900043]'
+  Description: '鍘傚唴鍒板ぇ杩炲绉熷簱杩愯緭璐圭敤'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_TotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_TotalCost.qbl
new file mode 100644
index 0000000..f2cf46b
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_TotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalCost
+{
+  #keys: '3[415136.0.992900054][415136.0.992900053][415136.0.992900055]'
+  Description: '鎬昏垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimatedTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimatedTotalCost.qbl
new file mode 100644
index 0000000..c68e1b4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimatedTotalCost.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcEstimatedTotalCost
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    
+    value := this.CCRentEnterCost() + this.CCRentOutCost() + this.CCLongTransCoat() + this.CCShortTransCost() + this.CCRentStorageCost()
+    + this.DLRentEnterCost() + this.DLRentOutCost() + this.FactoryToDLRentTransCost() + this.DLRentStorageCost();
+    
+    this.EstimatedTotalCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcTotalCost.qbl
new file mode 100644
index 0000000..e2e8080
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcTotalCost.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcTotalCost
+{
+  Description: '璁$畻鎬昏垂鐢�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    value := this.EstimatedTotalCost() * this.Coefficient();
+    
+    this.TotalCost( value );
+  *]
+}
diff --git "a/_Main/BL/Type_CCEngineLogisticsCostCell0/_ROOT_Type_DLEngineLogisticsCostCell\0430.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostCell0/_ROOT_Type_DLEngineLogisticsCostCell\0430.qbl"
new file mode 100644
index 0000000..4bb2db5
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostCell0/_ROOT_Type_DLEngineLogisticsCostCell\0430.qbl"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DLEngineLogisticsCostCell
+{
+  #keys: '5[415136.0.992900033][415136.0.992900031][0.0.0][415136.0.992900032][415136.0.992900034]'
+  BaseType: Object
+  Description: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄥ崟鍏冩牸'
+  StructuredName: 'DLEngineLogisticsCostCells'
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Index.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Index.qbl
new file mode 100644
index 0000000..66630b7
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Index.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[415136.0.992900061][415136.0.992900060][415136.0.992900062]'
+  Description: '鍒楀彿'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Name.qbl
new file mode 100644
index 0000000..1cd92b7
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.992900064][415136.0.992900063][415136.0.992900065]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_StartDate.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_StartDate.qbl
new file mode 100644
index 0000000..dd8b986
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.992900067][415136.0.992900066][415136.0.992900068]'
+  Description: '寮�濮嬫棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn0/DefaultValue_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn0/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn0/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn0/Function_CalcIndex.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Function_CalcIndex.qbl
new file mode 100644
index 0000000..4f2f1d9
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn0/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-13-2024 (created)
+    
+    value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+    
+    this.Index( value );
+  *]
+}
diff --git "a/_Main/BL/Type_CCEngineLogisticsCostColumn0/_ROOT_Type_DLEngineLogisticsCostColumn\0430.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostColumn0/_ROOT_Type_DLEngineLogisticsCostColumn\0430.qbl"
new file mode 100644
index 0000000..fa03a22
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostColumn0/_ROOT_Type_DLEngineLogisticsCostColumn\0430.qbl"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DLEngineLogisticsCostColumn
+{
+  #keys: '5[415136.0.992900058][415136.0.992900056][0.0.0][415136.0.992900057][415136.0.992900059]'
+  BaseType: Object
+  Description: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄥ垪'
+  StructuredName: 'DLEngineLogisticsCostColumns'
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
index 74e7077..f8cbebb 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
@@ -29,7 +29,7 @@
           
           sumcell    := selectobject( column, Cell, c, c.Row() = sumrow );
           if( isnull( sumcell ) ){
-            sumcell  := showrow.Cell( relnew, RentEnterCost         := 0
+            sumcell  := sumrow.Cell( relnew, RentEnterCost         := 0
                                      , RentOutCost                 := 0 
                                      , FactoryToRentTransCost      := 0
                                      , RentStorageCost             := 0 );
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl
index 8af34f9..d80aa59 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl
@@ -89,13 +89,13 @@
           factorytorenttranscostcellElement.SetAttribute( "value", 'FactoryToRentTransCost' );
           attricolumnelement.AppendChild( factorytorenttranscostcellElement );
           //澶栫搴撲粨鍌ㄨ垂鐢�
-          estimatedtotalcostcellElement := xmlDOM.CreateElement( "cell" );
-          estimatedtotalcostcellElement.SetAttribute( "value", 'EstimatedTotalCost' );
-          attricolumnelement.AppendChild( estimatedtotalcostcellElement );
-          //棰勮鎬昏垂鐢�
           rentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
           rentstoragecostcellElement.SetAttribute( "value", 'RentStorageCost' );
           attricolumnelement.AppendChild( rentstoragecostcellElement );
+          //棰勮鎬昏垂鐢�
+          estimatedtotalcostcellElement := xmlDOM.CreateElement( "cell" );
+          estimatedtotalcostcellElement.SetAttribute( "value", 'EstimatedTotalCost' );
+          attricolumnelement.AppendChild( estimatedtotalcostcellElement );
           //绯绘暟
           coefficientcellElement := xmlDOM.CreateElement( "cell" );
           coefficientcellElement.SetAttribute( "value", 'Coefficient' );
@@ -118,13 +118,13 @@
         factorytorenttranscostcellElement.SetAttribute( "value", [String]c.FactoryToRentTransCost() );
         columnelement.AppendChild( factorytorenttranscostcellElement );
         //澶栫搴撲粨鍌ㄨ垂鐢�
+        rentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
+        rentstoragecostcellElement.SetAttribute( "value", [String]c.RentStorageCost() );
+        columnelement.AppendChild( rentstoragecostcellElement );
+        //棰勮鎬昏垂鐢�
         estimatedtotalcostcellElement := xmlDOM.CreateElement( "cell" );
         estimatedtotalcostcellElement.SetAttribute( "value", [String]c.EstimatedTotalCost() );
         columnelement.AppendChild( estimatedtotalcostcellElement );
-        //棰勮鎬昏垂鐢�
-        rentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
-        rentstoragecostcellElement.SetAttribute( "value", [String]c.EstimatedTotalCost() );
-        columnelement.AppendChild( rentstoragecostcellElement );
         //绯绘暟
         coefficientcellElement := xmlDOM.CreateElement( "cell" );
         coefficientcellElement.SetAttribute( "value", [String]c.Coefficient() );
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
index a7bf76a..97e6ea2 100644
--- a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
@@ -30,14 +30,25 @@
       traverse( source, FinancialProductionReport, report, not report.IsShow() ){//璐㈠姟浜ч噺鎶ヨ〃涓嶆樉绀�
         traverse( report, FinancialProductionRow, row, row.Unit() = ccunit and exists( row, FinancialProductionCell, cell, cell.Value() <> '0' ) ){//璐㈠姟浜ч噺鎶ヨ〃閲岀殑闀挎槬浜ч噺, 涓嶄负0
           ccrow               := table.GetRow( row.Name() );
-          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
-          enginecost          := selectobject( owner, LogisticsCostEngine, engine, engine.Product() = row.Name() );
-          traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' ){
-            //鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬闀挎槬浜ч噺
-            quantity          := ceil( [Number]cell.Value() / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
-            column            := selectobject( table, Column, column, column.Name() = cell.FinancialProductionColumn().Name() );
-            //澶栫搴撳叆搴撹垂鐢�
-            ccrow.SetRentEnterCost( column, quantity );
+          product             := row.Product_MP();
+          products.Add( product );
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecost          := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+            if( not isnull( enginecost ) ){
+              product             := row.Product_MP();
+              traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' ){
+                //鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬闀挎槬浜ч噺
+                quantity          := ceil( [Number]cell.Value() / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+                column            := selectobject( table, Column, column, column.Name() = cell.FinancialProductionColumn().Name() );
+                //澶栫搴撳叆搴撹垂鐢�
+                ccrow.SetRentEnterCost( column, quantity );
+              }
+            }
           }
         }
       }
@@ -47,14 +58,24 @@
       traverse( source, FinancialSalesReport, report, not report.IsShow() ){//璐㈠姟閿�閲忔姤琛ㄤ笉鏄剧ず
         traverse( report, FinancialSalesRow, row, row.Unit() = ccunit and exists( row, FinancialSalesCell, cell, cell.Value() <> '0' ) ){//璐㈠姟閿�閲忔姤琛ㄩ噷鐨勯暱鏄ヤ骇閲�, 涓嶄负0
           ccrow               := table.GetRow( row.Name() );
-          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
-          enginecost          := selectobject( owner, LogisticsCostEngine, engine, engine.Product() = row.Name() );
-          traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' ){
-            //鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环锛屽叆搴撻噺绛変簬闀挎槬閿�閲�
-            quantity          := ceil( [Number]cell.Value() / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
-            column            := selectobject( table, Column, column, column.Name() = cell.FinancialSalesColumn().Name() );
-            //澶栫搴撳嚭搴撹垂鐢�
-            ccrow.SetRentOutCost( column, quantity );
+          product             := row.Product_MP();
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecost          := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit 
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+            if( not isnull( enginecost ) ){
+              products.Add( product );
+              traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' ){
+                //鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环锛屽叆搴撻噺绛変簬闀挎槬閿�閲�
+                quantity          := ceil( [Number]cell.Value() / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+                column            := selectobject( table, Column, column, column.Name() = cell.FinancialSalesColumn().Name() );
+                //澶栫搴撳嚭搴撹垂鐢�
+                ccrow.SetRentOutCost( column, quantity );
+              }
+            }
           }
         }
       }
@@ -75,14 +96,26 @@
           column             := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
           traverse( trip, ProductInTrip, pit, pit.Quantity() = 0 ){
             row              := table.GetRow( pit.ProductID() );
-            //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
-            enginecost       := selectobject( owner, LogisticsCostEngine, engine, engine.Product() = row.Name() );
-            //鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲�
-            transcost        := selectobject( owner, LogisticsCostTransport, trans, trans.Product() = row.Name() );
-            //杩愯緭鏁伴噺/鍖呰瀹归噺/瑁呰浇瀹归噺*杩愯緭鍗曚环
-            quantity         := ceil( ceil( [Number]pit.Quantity() / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();//鍥涜垗浜斿叆
-            
-            row.SetFactoryToRentTransCost( column, quantity );
+            product          := pit.Product_MP();
+            productparents   := product.GetAllParent();
+            if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){////鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+              //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+              enginecost       := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit 
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+              //鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲�
+              transcost        := selectobject( owner, LogisticsCostTransport, trans, trans.Origin() = ccline 
+                                                and trans.Destination() = ccrent 
+                                                and exists( productparents, Elements, e, e.ID() = trans.Product() ) );
+              if( not isnull( enginecost ) and not isnull( transcost ) ){
+                products.Add( product );
+                //杩愯緭鏁伴噺/鍖呰瀹归噺/瑁呰浇瀹归噺*杩愯緭鍗曚环
+                quantity       := ceil( ceil( [Number]pit.Quantity() / enginecost.PackagingCapacity() ) / transcost.LoadingCapacity() ) * transcost.TransportPrice();//鍥涜垗浜斿叆
+                
+                row.SetFactoryToRentTransCost( column, quantity );
+              }
+            }
           }
         }
       }
@@ -94,21 +127,30 @@
       if( isccrent ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() ){
           //鑾峰彇琛�
+          product            := pisp.Product_MP();
+          productparents     := product.GetAllParent();
           row                := table.GetRow( pisp.ProductID() );
-          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
-          enginecost         := selectobject( owner, LogisticsCostEngine, engine, engine.Product() = row.Name() );
-          products.Add( pisp.Product_MP() );
-          //褰損roduct planning鐨勬棩鏈熷尯闂村湪闇�瑕佺殑鏃ユ湡鍖洪棿鍐� 
-          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear
-                    ){
-            periodtime := pispip.Start().StartOfMonth().Date();
-            periodname := periodtime.Format( "M2/D2/Y" );
-            quantity   := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//鍥涜垗浜斿叆
-            
-            column := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
-            
-            row.SetRentStorageCost( column, quantity );
-          }    
+          if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){////鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecost         := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit 
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+            if( not isnull( enginecost ) ){
+              products.Add( product );
+              //褰損roduct planning鐨勬棩鏈熷尯闂村湪闇�瑕佺殑鏃ユ湡鍖洪棿鍐� 
+              traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear
+                        ){
+                periodtime := pispip.Start().StartOfMonth().Date();
+                periodname := periodtime.Format( "M2/D2/Y" );
+                quantity   := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//鍥涜垗浜斿叆
+                
+                column := selectobject( table, Column, column, column.Name() = periodname and column.StartDate() = periodtime );
+                
+                row.SetRentStorageCost( column, quantity );
+              }    
+            }
+          }
         }
       }
     }
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_ID.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_ID.qbl
new file mode 100644
index 0000000..02ea9f1
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.992900074][415136.0.992900073][415136.0.992900075]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_IsShow.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_IsShow.qbl
new file mode 100644
index 0000000..7571e00
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+  #keys: '3[415136.0.992900077][415136.0.992900076][415136.0.992900078]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_Name.qbl
new file mode 100644
index 0000000..5e18c5a
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.992900080][415136.0.992900079][415136.0.992900081]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_ID.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Clear.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Clear.qbl
new file mode 100644
index 0000000..b14ba96
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Clear.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Method Clear
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-13-2024 (created)
+    this.Column( relflush );
+    this.Row( relflush );
+    
+    this.GenerateColumn( this.MacroPlan() );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl
new file mode 100644
index 0000000..52764b4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl
@@ -0,0 +1,68 @@
+Quintiq file version 2.0
+#parent: #root
+Method Generate (
+  DLEngineLogisticsCostSearch search,
+  Product_MPs products
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    table            := selectobject( this, MacroPlan.DLEngineLogisticsCostReport, report, not report.IsShow() );
+    allunit          := '<All>';
+    //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
+    this.Clear();
+    //杩囨护鍚庣殑浜у搧id
+    productids       := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
+                                      and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
+                                      and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
+    sumrow           := this.Row( relnew, Name := 'SUM', RowNr := table.Row( relsize ) );
+    traverse( table, Row, row ){
+      productid      := construct( Strings );
+      productid.Add( row.Name() );
+      
+      if( productids.ContainsAll( productid ) ){
+        showrow      := this.Row( relnew, Name := row.Name(), RowNr := row.RowNr() );
+        
+        traverse( row, Cell, cell ){
+          column     := selectobject( this, Column, column, column.Name() = cell.Column().Name() );
+          
+          sumcell    := selectobject( column, Cell, c, c.Row() = sumrow );
+          if( isnull( sumcell ) ){
+            sumcell  := sumrow.Cell( relnew, CCRentEnterCost         := 0
+                                     , CCRentOutCost                 := 0 
+                                     , CCLongTransCoat               := 0
+                                     , CCShortTransCost              := 0
+                                     , CCRentStorageCost             := 0
+                                     , DLRentEnterCost               := 0
+                                     , DLRentOutCost                 := 0
+                                     , FactoryToDLRentTransCost      := 0
+                                     , DLRentStorageCost             := 0 );
+            column.Cell( relinsert, sumcell );
+          }
+          
+          showcell   := showrow.Cell( relnew, CCRentEnterCost        := cell.CCRentEnterCost()
+                                      , CCRentOutCost                := cell.CCRentOutCost()
+                                      , CCLongTransCoat              := cell.CCLongTransCoat()
+                                      , CCShortTransCost             := cell.CCShortTransCost()
+                                      , CCRentStorageCost            := cell.CCRentStorageCost()
+                                      , DLRentEnterCost              := cell.DLRentEnterCost()
+                                      , DLRentOutCost                := cell.DLRentOutCost()
+                                      , FactoryToDLRentTransCost     := cell.FactoryToDLRentTransCost()
+                                      , DLRentStorageCost            := cell.DLRentStorageCost() );
+          column.Cell( relinsert, showcell );
+          sumcell.CCRentEnterCost( cell.CCRentEnterCost() + sumcell.CCRentEnterCost() );
+          sumcell.CCRentOutCost( cell.CCRentOutCost() + sumcell.CCRentOutCost() );
+          sumcell.CCLongTransCoat( cell.CCLongTransCoat() + sumcell.CCLongTransCoat() );
+          sumcell.CCShortTransCost( cell.CCShortTransCost() + sumcell.CCShortTransCost() );
+          sumcell.CCRentStorageCost( cell.CCRentStorageCost() + sumcell.CCRentStorageCost() );
+          sumcell.DLRentEnterCost( cell.DLRentEnterCost() + sumcell.DLRentEnterCost() );
+          sumcell.DLRentOutCost( cell.DLRentOutCost() + sumcell.DLRentOutCost() );
+          sumcell.FactoryToDLRentTransCost( cell.FactoryToDLRentTransCost() + sumcell.FactoryToDLRentTransCost() );
+          sumcell.DLRentStorageCost( cell.DLRentStorageCost() + sumcell.DLRentStorageCost() );
+        }
+      }
+    }
+    info( '-------------------------g------------end---------------------------------' );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_GenerateColumn.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..b1ab93a
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_GenerateColumn.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateColumn (
+  MacroPlan owner
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-13-2024 (created)
+    startofplanning           := owner.StartOfPlanning();
+    startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
+    
+    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+      periodtime := start.Date();
+      periodname := periodtime.Format( "M2/D2/Y" );
+      this.Column( relnew, Name := periodname, StartDate := periodtime );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_GetRow.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_GetRow.qbl
new file mode 100644
index 0000000..c5025b9
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_GetRow.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRow (
+  String product
+) as DLEngineLogisticsCostRow
+{
+  Description: '鏍规嵁宸ュ巶鑾峰彇琛�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-13-2024 (created)
+    row := selectobject( this, Row, row, row.Name() = product );
+    if( isnull( row ) ){
+      //鍒濆鍖栧崟鍏冩牸
+      row := this.Row( relnew, Name := product );
+      traverse( this, Column, column ){
+        row.Initialize( column );
+      }
+    }
+    return row;
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_IsInUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_IsInUnit.qbl
new file mode 100644
index 0000000..57394ad
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/Method_IsInUnit.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method IsInUnit (
+  StockingPoint_MP sp,
+  String unitname
+) as Boolean
+{
+  Description: '鏄惁灞炰簬鏌愪釜绾�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-5-2024 (created)
+    unit                  := sp.Unit();
+    parentunits           := unit.GetAllParent();
+    return sp.ID() = unitname or unit.ID() = unitname or exists( parentunits, Elements, punit, punit.ID() = unitname );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Download.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Download.qbl
new file mode 100644
index 0000000..166d84f
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Download.qbl
@@ -0,0 +1,212 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  Description: '涓嬭浇璐㈠姟鎶ヨ〃鏁版嵁'
+  TextBody:
+  [*
+    
+    table := selectobject( macroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
+    
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+    
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    //Product
+    productcolumnelement := xmlDOM.CreateElement( "column" );
+    productnameelement   := xmlDOM.CreateElement( "name" );
+    producttypeelement   := xmlDOM.CreateElement( "type" );
+    productnameelement.TextContent( 'Product' );
+    producttypeelement.TextContent( "String" );
+    productcolumnelement.AppendChild( productnameelement );
+    productcolumnelement.AppendChild( producttypeelement );
+    //Attribute
+    attricolumnelement := xmlDOM.CreateElement( "column" );
+    attrinameelement   := xmlDOM.CreateElement( "name" );
+    attritypeelement   := xmlDOM.CreateElement( "type" );
+    attrinameelement.TextContent( 'Attribute' );
+    attritypeelement.TextContent( "String" );
+    attricolumnelement.AppendChild( attrinameelement );
+    attricolumnelement.AppendChild( attritypeelement );
+    
+    tableElement.AppendChild( productcolumnelement ); 
+    tableElement.AppendChild( attricolumnelement );
+    traverse ( table, Column, column ) {
+      columnelement := xmlDOM.CreateElement( "column" );
+      nameelement   := xmlDOM.CreateElement( "name" );
+      typeelement   := xmlDOM.CreateElement( "type" );
+      nameelement.TextContent( column.Name() );
+      typeelement.TextContent( "String" );
+      columnelement.AppendChild( nameelement );
+      columnelement.AppendChild( typeelement );
+      
+      cells := selectsortedset( column, Cell, cell, cell.Row().RowNr() );
+    
+      traverse ( cells, Elements, c ) {
+        if( column.Index() = 0 ){
+          row := c.Row();
+          //Product
+          product1cellElement := xmlDOM.CreateElement( "cell" );
+          product1cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product1cellElement );
+          
+          product2cellElement := xmlDOM.CreateElement( "cell" );
+          product2cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product2cellElement );
+          
+          product3cellElement := xmlDOM.CreateElement( "cell" );
+          product3cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product3cellElement );
+          
+          product4cellElement := xmlDOM.CreateElement( "cell" );
+          product4cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product4cellElement );
+          
+          product5cellElement := xmlDOM.CreateElement( "cell" );
+          product5cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product5cellElement );
+          
+          product6cellElement := xmlDOM.CreateElement( "cell" );
+          product6cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product6cellElement );
+          
+          product7cellElement := xmlDOM.CreateElement( "cell" );
+          product7cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product7cellElement );
+          
+          product8cellElement := xmlDOM.CreateElement( "cell" );
+          product8cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product8cellElement );
+          
+          product9cellElement := xmlDOM.CreateElement( "cell" );
+          product9cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product9cellElement );
+          
+          product10cellElement := xmlDOM.CreateElement( "cell" );
+          product10cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product10cellElement );
+          
+          product11cellElement := xmlDOM.CreateElement( "cell" );
+          product11cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product11cellElement );
+          
+          product12cellElement := xmlDOM.CreateElement( "cell" );
+          product12cellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( product12cellElement );
+          //Attribute
+          //闀挎槬澶栫搴撳叆搴撹垂鐢�
+          ccrententercostcellElement := xmlDOM.CreateElement( "cell" );
+          ccrententercostcellElement.SetAttribute( "value", 'CCRentEnterCost' );
+          attricolumnelement.AppendChild( ccrententercostcellElement );
+          //闀挎槬澶栫搴撳嚭搴撹垂鐢�
+          ccrentoutcostcellElement := xmlDOM.CreateElement( "cell" );
+          ccrentoutcostcellElement.SetAttribute( "value", 'CCRentOutCost' );
+          attricolumnelement.AppendChild( ccrentoutcostcellElement );
+          //闀挎槬闀块�旇繍杈撹垂鐢�
+          cclongtranscostcellElement := xmlDOM.CreateElement( "cell" );
+          cclongtranscostcellElement.SetAttribute( "value", 'CCLongTransCost' );
+          attricolumnelement.AppendChild( cclongtranscostcellElement );
+          //闀挎槬鐭�旇繍杈撹垂鐢�
+          ccshorttranscostcellElement := xmlDOM.CreateElement( "cell" );
+          ccshorttranscostcellElement.SetAttribute( "value", 'CCShortTransCost' );
+          attricolumnelement.AppendChild( ccshorttranscostcellElement );
+          //闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�
+          ccrentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
+          ccrentstoragecostcellElement.SetAttribute( "value", 'CCRentStorageCost' );
+          attricolumnelement.AppendChild( ccrentstoragecostcellElement );
+          //澶ц繛澶栫搴撳叆搴撹垂鐢�
+          dlrententercostcellElement := xmlDOM.CreateElement( "cell" );
+          dlrententercostcellElement.SetAttribute( "value", 'DLRentEnterCost' );
+          attricolumnelement.AppendChild( dlrententercostcellElement );
+          //澶ц繛澶栫搴撳嚭搴撹垂鐢�
+          dlrentoutcostcellElement := xmlDOM.CreateElement( "cell" );
+          dlrentoutcostcellElement.SetAttribute( "value", 'DLRentOutCost' );
+          attricolumnelement.AppendChild( dlrentoutcostcellElement );
+          //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤
+          factorytorenttranscostcellElement := xmlDOM.CreateElement( "cell" );
+          factorytorenttranscostcellElement.SetAttribute( "value", 'FactoryToRentTransCost' );
+          attricolumnelement.AppendChild( factorytorenttranscostcellElement );
+          //澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�
+          dlrentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
+          dlrentstoragecostcellElement.SetAttribute( "value", 'DLRentStorageCost' );
+          attricolumnelement.AppendChild( dlrentstoragecostcellElement );
+          //棰勮鎬昏垂鐢�
+          estimatedtotalcostcellElement := xmlDOM.CreateElement( "cell" );
+          estimatedtotalcostcellElement.SetAttribute( "value", 'EstimatedTotalCost' );
+          attricolumnelement.AppendChild( estimatedtotalcostcellElement );
+          //绯绘暟
+          coefficientcellElement := xmlDOM.CreateElement( "cell" );
+          coefficientcellElement.SetAttribute( "value", 'Coefficient' );
+          attricolumnelement.AppendChild( coefficientcellElement );
+          //鎬昏垂鐢�
+          totalcostcellElement := xmlDOM.CreateElement( "cell" );
+          totalcostcellElement.SetAttribute( "value", 'TotalCost' );
+          attricolumnelement.AppendChild( totalcostcellElement );
+        }
+        //闀挎槬澶栫搴撳叆搴撹垂鐢�
+        ccrententercostcellElement := xmlDOM.CreateElement( "cell" );
+        ccrententercostcellElement.SetAttribute( "value", [String]c.CCRentEnterCost() );
+        columnelement.AppendChild( ccrententercostcellElement );
+        //闀挎槬澶栫搴撳嚭搴撹垂鐢�
+        ccrentoutcostcellElement := xmlDOM.CreateElement( "cell" );
+        ccrentoutcostcellElement.SetAttribute( "value", [String]c.CCRentOutCost() );
+        columnelement.AppendChild( ccrentoutcostcellElement );
+        //闀挎槬闀块�旇繍杈撹垂鐢�
+        cclongtranscostcellElement := xmlDOM.CreateElement( "cell" );
+        cclongtranscostcellElement.SetAttribute( "value", [String]c.CCLongTransCoat() );
+        columnelement.AppendChild( cclongtranscostcellElement );
+        //闀挎槬鐭�旇繍杈撹垂鐢�
+        ccshorttranscostcellElement := xmlDOM.CreateElement( "cell" );
+        ccshorttranscostcellElement.SetAttribute( "value", [String]c.CCShortTransCost() );
+        columnelement.AppendChild( ccshorttranscostcellElement );
+        //闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�
+        ccrentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
+        ccrentstoragecostcellElement.SetAttribute( "value", [String]c.CCRentStorageCost() );
+        columnelement.AppendChild( ccrentstoragecostcellElement );
+        //澶ц繛澶栫搴撳叆搴撹垂鐢�
+        dlrententercostcellElement := xmlDOM.CreateElement( "cell" );
+        dlrententercostcellElement.SetAttribute( "value", [String]c.DLRentEnterCost() );
+        columnelement.AppendChild( dlrententercostcellElement );
+        //澶ц繛澶栫搴撳嚭搴撹垂鐢�
+        dlrentoutcostcellElement := xmlDOM.CreateElement( "cell" );
+        dlrentoutcostcellElement.SetAttribute( "value", [String]c.DLRentOutCost() );
+        columnelement.AppendChild( dlrentoutcostcellElement );
+        //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤
+        factorytorenttranscostcellElement := xmlDOM.CreateElement( "cell" );
+        factorytorenttranscostcellElement.SetAttribute( "value", [String]c.FactoryToDLRentTransCost() );
+        columnelement.AppendChild( factorytorenttranscostcellElement );
+        //澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�
+        dlrentstoragecostcellElement := xmlDOM.CreateElement( "cell" );
+        dlrentstoragecostcellElement.SetAttribute( "value", [String]c.DLRentStorageCost() );
+        columnelement.AppendChild( dlrentstoragecostcellElement );
+        //棰勮鎬昏垂鐢�
+        estimatedtotalcostcellElement := xmlDOM.CreateElement( "cell" );
+        estimatedtotalcostcellElement.SetAttribute( "value", [String]c.EstimatedTotalCost() );
+        columnelement.AppendChild( estimatedtotalcostcellElement );
+        //绯绘暟
+        coefficientcellElement := xmlDOM.CreateElement( "cell" );
+        coefficientcellElement.SetAttribute( "value", [String]c.Coefficient() );
+        columnelement.AppendChild( coefficientcellElement );
+        //鎬昏垂鐢�
+        totalcostcellElement := xmlDOM.CreateElement( "cell" );
+        totalcostcellElement.SetAttribute( "value", [String]c.TotalCost() );
+        columnelement.AppendChild( totalcostcellElement );
+      }
+      tableElement.AppendChild( columnelement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( DLEngineLogisticsCostReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultAllUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultAllUnit.qbl
new file mode 100644
index 0000000..e912c3f
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultAllUnit.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultAllUnit () const declarative as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '<All>';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultCCUnit.qbl
new file mode 100644
index 0000000..4a17ee3
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultCCUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬宸ュ巶';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultDLUnit.qbl
new file mode 100644
index 0000000..36d2be8
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultDLUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛宸ュ巶';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..5f29f58
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultName () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return 'CC engine logistics cost reports';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointCCRent.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointCCRent.qbl
new file mode 100644
index 0000000..d1d47c2
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointCCRent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointCCRent () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬澶栫搴�';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLLine.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLLine.qbl
new file mode 100644
index 0000000..3bd2cd6
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLLine.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointDLLine () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    //return '闀挎槬瑁呴厤绾胯竟搴�';
+    return '澶ц繛瑁呴厤绾�';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLRent.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLRent.qbl
new file mode 100644
index 0000000..76f532f
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLRent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointDLRent () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛澶栫搴�';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..cf0c275
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
@@ -0,0 +1,263 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MacroPlan owner
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    owner.DLEngineLogisticsCostReport( relflush );
+    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閲岄潰鎵惧埌璧峰搴撳瓨鐐逛负澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撶殑浜у搧 绠楀嚭鍙戝線闀挎槬鐨勯攢閲忓悗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜岄暱鏄ュ叆搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
+    //鍦� trip plan閲屾壘鍒板ぇ杩炶閰嶇嚎杈瑰簱鍒板ぇ杩炲绉熷簱鐨勮繍杈撴暟閲�
+    traverse( owner, Unit.Lane.LaneLeg, laneleg ){
+      //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛瑁呴厤绾胯竟搴�
+      originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
+      isdlspline             := table.IsInUnit( originsp, dlline );
+      //鐩殑鍦版槸鍚︽槸闀挎槬澶栫搴�
+      destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
+      isccrent               := table.IsInUnit( destisp, ccrent );
+      //鐩殑鍦版槸鍚︽槸澶ц繛澶栫搴�
+      destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
+      isdlrent               := table.IsInUnit( destisp, dlrent );
+      if( isdlspline and ( isccrent or 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 );
+          traverse( trip, ProductInTrip, pit, pit.Quantity() = 0 and exists( pit.Product_MP().GetAllParent(), Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            quantity         := [Number]pit.Quantity();
+            row              := table.GetRow( pit.ProductID() );
+            product          := pit.Product_MP();
+            productparents   := product.GetAllParent();
+            if( isccrent ){//鐩殑鍦版槸闀挎槬澶栫搴�
+              //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+              enginecost     := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit 
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+              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 );
+              }
+            }
+            if( isdlrent ){//鐩殑鍦版槸澶ц繛澶栫搴�
+              //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+              enginecost     := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = dlunit 
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+              //鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲�
+              transcost      := selectobject( owner, LogisticsCostTransport, trans, trans.Origin() = dlline 
+                                                and trans.Destination() = dlrent 
+                                                and exists( productparents, Elements, e, 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 );
+              }
+            }
+          }
+        }
+      }
+    }
+    //澶ц繛澶栫搴撳叆搴撹垂鐢細鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝佷骇閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�
+    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' ) ){//璐㈠姟浜ч噺鎶ヨ〃閲岀殑澶ц繛浜ч噺, 涓嶄负0
+          ccrow               := table.GetRow( row.Name() );
+          product             := row.Product_MP();
+          products.Add( product );
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecost        := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = dlunit
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+            if( not isnull( enginecost ) ){
+              traverse( row, FinancialProductionCell, cell, cell.Value() <> '0' ){
+                column        := selectobject( table, Column, column, column.Name() = cell.FinancialProductionColumn().Name() );
+                //澶ц繛澶栫搴撳叆搴撹垂鐢�
+                ccrow.SetDLRentEnterCost( column, enginecost, cell );
+              }
+            }
+          }
+        }
+      }
+    }
+    //澶ц繛澶栫搴撳嚭搴撹垂鐢細鍑哄簱閲�/鍖呰瀹归噺*鍑哄簱鍗曚环锛屽嚭搴撻噺绛変簬澶ц繛宸ュ巶璇ヤ骇鍝侀攢閲忓噺鍘诲彂寰�闀挎槬鐨勬暟閲�
+    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' ) ){//璐㈠姟閿�閲忔姤琛ㄩ噷鐨勫ぇ杩炰骇閲�, 涓嶄负0
+          ccrow               := table.GetRow( row.Name() );
+          product             := row.Product_MP();
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            products.Add( product );
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            enginecost        := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = dlunit
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+            if( not isnull( enginecost ) ){
+              traverse( row, FinancialSalesCell, cell, cell.Value() <> '0' ){
+                column        := selectobject( table, Column, column, column.Name() = cell.FinancialSalesColumn().Name() );
+                //澶ц繛澶栫搴撳嚭搴撹垂鐢�
+                ccrow.SetDLRentOutCost( column, enginecost, cell );
+              }
+            }
+          }
+        }
+      }
+    }
+    //闀挎槬闀块�旇繍杈撹垂鐢細璋冩嫧鏁伴噺/鍖呰瀹归噺/瑁呰浇瀹归噺*杩愯緭鍗曚环锛岃皟鎷ㄨ鍒掗噷鎵惧埌璇ヤ骇鍝佷粠DL鍒癈C鐨勮皟鎷ㄦ暟閲忥紝鍗宠捣濮嬪湴澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撳搴旂殑杩愯緭鏁伴噺锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃鎵惧埌瀵瑰簲鐨勫寘瑁呭閲忥紝鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲忥紝鐢ㄥ叕寮忚绠楀緱鍑虹粨鏋滐紝鏈堝害杩涜姹囨��
+    traverse( owner, TransferPlanRow, tprow, tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
+      product                 := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
+      productparents          := product.GetAllParent();
+      if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+        //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+         enginecost           := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                               and engine.MLB_MQB() = product.MQBMLB()
+                                               and engine.Factory() = ccunit
+                                               and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+         //鍦ㄨ繍杈撴垚鏈弬鏁拌〃閲屾壘鍒板彂鍔ㄦ満瀵瑰簲杩愯緭鍗曚环鍜岃杞藉閲�
+         transcost            := selectobject( owner, LogisticsCostTransport, trans, trans.Origin() = dlline 
+                                                and trans.Destination() = dlrent 
+                                                and exists( productparents, Elements, e, e.ID() = trans.Product() ) );
+         if( not isnull( enginecost ) and not isnull( transcost ) ){
+           row                := table.GetRow( product.ID() );
+           products.Add( product );
+           traverse( tprow,TransferPlanCell, tpcell ){
+             periodtime       := tpcell.TransferPlanColumn().ColumnDate().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.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() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+          row                 := table.GetRow( forecast.ProductID() );
+          products.Add( forecast.Product_MP() );
+          
+          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+          enginecost          := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                 and engine.MLB_MQB() = product.MQBMLB()
+                                                 and engine.Factory() = ccunit
+                                                 and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+          if( not isnull( enginecost ) ){
+            traverse( forecast, PlanningSalesDemandInPeriod, psdip ){
+              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() ){
+          //鑾峰彇琛�
+          product             := pisp.Product_MP();
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = '鍙戝姩鏈�' ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            row               := table.GetRow( pisp.ProductID() );
+            products.Add( pisp.Product_MP() );
+            traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear ){
+              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( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                   and engine.MLB_MQB() = product.MQBMLB()
+                                                   and engine.Factory() = ccunit 
+                                                   and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+                 if( not isnull( enginecost ) ){
+                   cost        := ceil( [Number]pispip.NewSupplyQuantity() / enginecost.PackagingCapacity() ) * enginecost.StoragePrice();//鍥涜垗浜斿叆
+                   cell.CCRentStorageCost( cell.CCRentStorageCost() + cost );
+                 }
+              } else {
+                //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+                enginecost     := selectobject( owner, LogisticsCostEngine, engine, engine.Generation() = product.Generation() 
+                                                   and engine.MLB_MQB() = product.MQBMLB()
+                                                   and engine.Factory() = dlunit 
+                                                   and exists( productparents, Elements, e, e.ID() = engine.Product() ) );
+                 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_CCEngineLogisticsCostReport0/_ROOT_Type_DLEngineLogisticsCostReport\0430.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostReport0/_ROOT_Type_DLEngineLogisticsCostReport\0430.qbl"
new file mode 100644
index 0000000..04e2d69
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostReport0/_ROOT_Type_DLEngineLogisticsCostReport\0430.qbl"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DLEngineLogisticsCostReport
+{
+  #keys: '5[415136.0.992900071][415136.0.992900069][0.0.0][415136.0.992900070][415136.0.992900072]'
+  BaseType: Object
+  Description: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+  StructuredName: 'DLEngineLogisticsCostReports'
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_Name.qbl
new file mode 100644
index 0000000..b82b5a4
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.992900087][415136.0.992900086][415136.0.992900088]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_RowNr.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_RowNr.qbl
new file mode 100644
index 0000000..c2b95d9
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_RowNr.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[415136.0.992900090][415136.0.992900089][415136.0.992900091]'
+  Description: '琛屽彿'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/DefaultValue_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_Initialize.qbl
new file mode 100644
index 0000000..ce80682
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_Initialize.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+  DLEngineLogisticsCostColumn column
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := this.Cell( relnew, CCRentEnterCost           := 0
+                         , CCRentOutCost                 := 0 
+                         , CCLongTransCoat               := 0
+                         , CCShortTransCost              := 0
+                         , CCRentStorageCost             := 0
+                         , DLRentEnterCost               := 0
+                         , DLRentOutCost                 := 0
+                         , FactoryToDLRentTransCost      := 0
+                         , DLRentStorageCost             := 0 );
+    
+    column.Cell( relinsert, cell );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentEnterCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentEnterCost.qbl
new file mode 100644
index 0000000..ac5cbcf
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentEnterCost.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetDLRentEnterCost (
+  DLEngineLogisticsCostColumn column,
+  LogisticsCostEngine enginecost,
+  FinancialProductionCell fpcell
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+    quantity      := [Number]fpcell.Value() - cell.CCRentQuantity();
+    //鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬闀挎槬浜ч噺
+    cost          := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+          
+    value := cell.DLRentEnterCost() + cost;
+    cell.DLRentEnterCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentOutCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentOutCost.qbl
new file mode 100644
index 0000000..3d8b591
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentOutCost.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetDLRentOutCost (
+  DLEngineLogisticsCostColumn column,
+  LogisticsCostEngine enginecost,
+  FinancialSalesCell fscell
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+    quantity      := [Number]fscell.Value() - cell.CCRentQuantity();
+    //鍏ュ簱閲�/鍖呰瀹归噺*鍏ュ簱鍗曚环锛屽叆搴撻噺绛変簬闀挎槬浜ч噺
+    cost          := ceil( quantity / enginecost.PackagingCapacity() ) * enginecost.WarehousingPrice();
+          
+    value := cell.DLRentOutCost() + cost;
+    cell.DLRentOutCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetFactoryToRentTransCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetFactoryToRentTransCost.qbl
new file mode 100644
index 0000000..784e4a2
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetFactoryToRentTransCost.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetFactoryToRentTransCost (
+  DLEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.FactoryToDLRentTransCost() + quantity;
+    cell.FactoryToDLRentTransCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentOutCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentOutCost.qbl
new file mode 100644
index 0000000..4189c40
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentOutCost.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetRentOutCost (
+  DLEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.CCRentOutCost() + quantity;
+    cell.CCRentOutCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentStorageCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentStorageCost.qbl
new file mode 100644
index 0000000..908dae6
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentStorageCost.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetRentStorageCost (
+  DLEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.CCRentStorageCost() + quantity;
+    cell.CCRentStorageCost( value );
+  *]
+}
diff --git "a/_Main/BL/Type_CCEngineLogisticsCostRow0/_ROOT_Type_DLEngineLogisticsCostRow\0430.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostRow0/_ROOT_Type_DLEngineLogisticsCostRow\0430.qbl"
new file mode 100644
index 0000000..7af48a3
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostRow0/_ROOT_Type_DLEngineLogisticsCostRow\0430.qbl"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DLEngineLogisticsCostRow
+{
+  #keys: '5[415136.0.992900084][415136.0.992900082][0.0.0][415136.0.992900083][415136.0.992900085]'
+  BaseType: Object
+  Description: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄨ'
+  StructuredName: 'DLEngineLogisticsCostRows'
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Generation.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Generation.qbl
new file mode 100644
index 0000000..44c29c6
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.992900097][415136.0.992900096][415136.0.992900098]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_MqbMlb.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..31d1589
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+  #keys: '3[415136.0.992900100][415136.0.992900099][415136.0.992900101]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Power.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Power.qbl
new file mode 100644
index 0000000..abbed13
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.992900103][415136.0.992900102][415136.0.992900104]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Generation.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Power.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_DLEngineLogisticsCostSearch/_ROOT_Type_DLEngineLogisticsCostSearch.qbl b/_Main/BL/Type_DLEngineLogisticsCostSearch/_ROOT_Type_DLEngineLogisticsCostSearch.qbl
new file mode 100644
index 0000000..20b6977
--- /dev/null
+++ b/_Main/BL/Type_DLEngineLogisticsCostSearch/_ROOT_Type_DLEngineLogisticsCostSearch.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DLEngineLogisticsCostSearch
+{
+  #keys: '5[415136.0.992900094][415136.0.992900092][0.0.0][415136.0.992900093][415136.0.992900095]'
+  BaseType: Object
+  Description: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄦ煡璇㈢被'
+  StructuredName: 'DLEngineLogisticsCostSearchs'
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl
index daa564b..194f329 100644
--- a/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl
@@ -13,6 +13,7 @@
     if( isnull( row ) ){
       //鍒濆鍖栧崟鍏冩牸
       row := this.FinancialProductionRow( relnew, Name := product.ID(), Unit := unit );
+      row.Product_MP( relset, product );
       traverse( this, FinancialProductionColumn, column ){
         row.Initialize( column, product, unit );
       }
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
index 82d945f..aeb1ee4 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
@@ -12,6 +12,7 @@
     
     if( isnull( row ) ){
       row := this.FinancialSalesRow( relnew, Name := product.ID(), Unit := salessegment );
+      row.Product_MP( relset, product );
       //鍒濆鍖栧崟鍏冩牸
       row.InitializeCell( this, product );
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def
index a78b527..1223d6d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def
@@ -16,6 +16,17 @@
         Title: 'CC engine logistics cost report'
       ]
     }
+    Component MenuDLEngineLogisticsCostReport
+    {
+      #keys: '[415136.0.991620623]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'MONEY2'
+        Taborder: 1
+        Title: 'DL engine logistics cost report'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuDLEngineLogis.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuDLEngineLogis.def
new file mode 100644
index 0000000..81ec434
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuDLEngineLogis.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuEngineLogisticsCostReport/MenuDLEngineLogisticsCostReport
+Response OnClick () id:Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuDLEngineLogisticsCostReport_OnClick
+{
+  #keys: '[415136.0.993328236]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "DL_engine_logistics_cost_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable\043358.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable\043358.def"
index 272ae5a..7474baa 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable\043358.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable\043358.def"
@@ -26,9 +26,9 @@
       ]
       Properties:
       [
-        Attributes: 'Value'
-        Column: 'FinancialProductionColumn'
-        Row: 'FinancialProductionRow'
+        Attributes: 'RentEnterCost;RentOutCost;FactoryToRentTransCost;RentStorageCost;EstimatedTotalCost;Coefficient;TotalCost'
+        Column: 'Column'
+        Row: 'Row'
         Taborder: 0
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def
index def875e..ef0c204 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def
@@ -16,6 +16,7 @@
     Body:
     [*
       table            := selectobject( MacroPlan, CCEngineLogisticsCostReport, report, not report.IsShow() );
+      cell.Coefficient( value );
       traverse( table, Row, trow, trow.Name() = row.Name() ){
         traverse( trow, Cell, tcel, tcel.Column().Name() = column.Name() ){
           tcel.RentEnterCost( cell.RentEnterCost() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_MatrixEditorTable.def
new file mode 100644
index 0000000..eddbd91
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_MatrixEditorTable.def
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditorTable
+{
+  #keys: '[415136.0.992750484]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.992750485]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCell
+        {
+          #keys: '[415136.0.992750486]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'DLEngineLogisticsCostReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Row.Cell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'CCRentEnterCost;CCRentOutCost;CCLongTransCoat;CCShortTransCost;CCRentStorageCost;DLRentEnterCost;DLRentOutCost;FactoryToDLRentTransCost;DLRentStorageCost;EstimatedTotalCost;Coefficient;TotalCost'
+        Column: 'Column'
+        Row: 'Row'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.992750487]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.992750488]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'DLEngineLogisticsCostReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Row'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.992750489]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.992750490]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'DLEngineLogisticsCostReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Column'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable
+    #child: matrixeditorContextMenuTable
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportHeader.def
new file mode 100644
index 0000000..780d9b1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportHeader.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelDLEngineLogisticsCostReportHeader
+{
+  #keys: '[415136.0.992750421]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelDLEngineLogisticsCostReportSearch
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportSearch.def
new file mode 100644
index 0000000..151c26b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportSearch.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+Component PanelDLEngineLogisticsCostReportSearch
+{
+  #keys: '[415136.0.992750422]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelExport
+    #child: PanelPower
+    #child: PanelMQBMLB
+    #child: PanelGeneration
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def
new file mode 100644
index 0000000..bfe165a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelExport
+{
+  #keys: '[415136.0.992750423]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonExport
+    {
+      #keys: '[415136.0.992750424]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.992750425]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelGeneration.def
new file mode 100644
index 0000000..0a77a61
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelGeneration.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelGeneration
+{
+  #keys: '[415136.0.992750430]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[415136.0.992750431]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelMQBMLB.def
new file mode 100644
index 0000000..be8faab
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelMQBMLB.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMQBMLB
+{
+  #keys: '[415136.0.992750428]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.992750429]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelPower.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelPower.def
new file mode 100644
index 0000000..a79871c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelPower.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelPower
+{
+  #keys: '[415136.0.992750426]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslPower
+    {
+      #keys: '[415136.0.992750427]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Power'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelTable.def
new file mode 100644
index 0000000..ef8cd4d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelTable.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable
+{
+  #keys: '[415136.0.992750483]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable.def
new file mode 100644
index 0000000..d4dfb58
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable
+{
+  #keys: '[415136.0.992750491]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixeditorContextMenuTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixeditorContextMenuTable.def
new file mode 100644
index 0000000..270ddaa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixeditorContextMenuTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable
+{
+  #keys: '[415136.0.992750492]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_MatrixEditorTable_OnUpdateValue.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_MatrixEditorTable_OnUpdateValue.def
new file mode 100644
index 0000000..b8d56ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_MatrixEditorTable_OnUpdateValue.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: MatrixEditorTable
+Response OnUpdateValue (
+  CCEngineLogisticsCostRow row,
+  CCEngineLogisticsCostColumn column,
+  CCEngineLogisticsCostCell cell,
+  Number value,
+  Number oldvalue
+) id:Response_MatrixEditorTable_OnUpdateValue
+{
+  #keys: '[415136.0.992750480]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnUpdateValue'
+  QuillAction
+  {
+    Body:
+    [*
+      table            := selectobject( MacroPlan, CCEngineLogisticsCostReport, report, not report.IsShow() );
+      cell.Coefficient( value );
+      traverse( table, Row, trow, trow.Name() = row.Name() ){
+        traverse( trow, Cell, tcel, tcel.Column().Name() = column.Name() ){
+          tcel.RentEnterCost( cell.RentEnterCost() );
+          tcel.RentOutCost( cell.RentOutCost() );
+          tcel.FactoryToRentTransCost( cell.FactoryToRentTransCost() );
+          tcel.RentStorageCost( cell.RentStorageCost() );
+          tcel.Coefficient( cell.Coefficient() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnClose.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnClose.def
new file mode 100644
index 0000000..42bf9b2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnClose.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnClose () id:Response_FormDLEngineLogisticsCostReport_OnClose
+{
+  #keys: '[415136.0.992750704]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebForm_OnClose'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍒濆鍖�
+      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
+        DLEngineLogisticsCostReport::Initialize( MacroPlan );
+      //}
+      //info( '------------------1----------------' );
+      table := selectobject( MacroPlan, DLEngineLogisticsCostReport, table, table.IsShow() );
+      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( table.MacroPlan().DLEngineLogisticsCostSearch() );
+      info( '------------------2----------------', isnull( dhSearch.Data() ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonExport_OnClick.def
new file mode 100644
index 0000000..be0eca4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonExport
+Response OnClick () id:Response_PanelExport_ButtonExport_OnClick
+{
+  #keys: '[415136.0.992750420]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := DLEngineLogisticsCostReport::Download( MacroPlan );
+      
+      Application.Download( DLEngineLogisticsCostReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..52aab5d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonSearch_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSearch
+Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.992750419]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..9ae9bfa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelGeneration/ddslGeneration
+Response OnCreated () id:Response_PanelGeneration_ddslGeneration_OnCreated
+{
+  #keys: '[415136.0.992750414]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
new file mode 100644
index 0000000..ea16450
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelGeneration/ddslGeneration
+Response OnSelectionChanged () id:Response_PanelGeneration_ddslGeneration_OnSelectionChanged
+{
+  #keys: '[415136.0.992750413]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( dhSearch.Data().Generation() <> selection ){
+        dhSearch.Data().Generation( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..58c4ae0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB/ddslMQBMLB
+Response OnCreated () id:Response_PanelMQBMLB_ddslMQBMLB_OnCreated
+{
+  #keys: '[415136.0.992750416]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.MQBMLB() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
new file mode 100644
index 0000000..e9f628d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB/ddslMQBMLB
+Response OnSelectionChanged () id:Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged
+{
+  #keys: '[415136.0.992750415]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( dhSearch.Data().MqbMlb() <> selection ){
+        dhSearch.Data().MqbMlb( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnCreated.def
new file mode 100644
index 0000000..a402a02
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelPower/ddslPower
+Response OnCreated () id:Response_PanelPower_ddslPower_OnCreated
+{
+  #keys: '[415136.0.992750418]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Power() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
new file mode 100644
index 0000000..bb72128
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelPower/ddslPower
+Response OnSelectionChanged () id:Response_PanelPower_ddslPower_OnSelectionChanged
+{
+  #keys: '[415136.0.992750417]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if( dhSearch.Data().Power() <> selection ){
+        dhSearch.Data().Power( selection );
+      //  DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def
new file mode 100644
index 0000000..e5710a3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormDLEngineLogisticsCostReport
+{
+  #keys: '[415136.0.992750301]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component DataHolderTable
+    {
+      #keys: '[415136.0.992750351]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'DLEngineLogisticsCostReport'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component dhSearch
+    {
+      #keys: '[415136.0.992750376]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'DLEngineLogisticsCostSearch'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: PanelDLEngineLogisticsCostReportHeader
+    #child: PanelTable
+  ]
+  Properties:
+  [
+    Image: 'MONEY2'
+    Title: 'DL engine logistics cost report'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/DL_engine_logistics_cost_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/DL_engine_logistics_cost_report_view.vw
new file mode 100644
index 0000000..ad0533f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/DL_engine_logistics_cost_report_view.vw
@@ -0,0 +1,200 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormDLEngineLogisticsCostReport
+      {
+        title: 'QMacroPlanner::FormDLEngineLogisticsCostReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormDLEngineLogisticsCostReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 13
+        }
+        components
+        {
+          FormDLEngineLogisticsCostReport_PanelDLEngineLogisticsCostReportHeader
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_PanelDLEngineLogisticsCostReportSearch
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_PanelGeneration
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_PanelMQBMLB
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_PanelPower
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormDLEngineLogisticsCostReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormDLEngineLogisticsCostReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_CCRentEnterCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCRentEnterCost'
+                    }
+                    attribute_CCRentOutCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCRentOutCost'
+                    }
+                    attribute_CCLongTransCoat
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCLongTransCoat'
+                    }
+                    attribute_CCShortTransCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCShortTransCost'
+                    }
+                    attribute_CCRentStorageCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 4
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CCRentStorageCost'
+                    }
+                    attribute_DLRentEnterCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 5
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLRentEnterCost'
+                    }
+                    attribute_DLRentOutCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 6
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLRentOutCost'
+                    }
+                    attribute_FactoryToDLRentTransCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 7
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'FactoryToDLRentTransCost'
+                    }
+                    attribute_DLRentStorageCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 8
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DLRentStorageCost'
+                    }
+                    attribute_EstimatedTotalCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 9
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'EstimatedTotalCost'
+                    }
+                    attribute_Coefficient
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 10
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Coefficient'
+                    }
+                    attribute_TotalCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 11
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalCost'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 28
+    image: 'MONEY2'
+    description: ''
+  }
+  formatversion: 2
+  id: 'DL_engine_logistics_cost_report_view'
+  name: 'DL engine logistics cost report view'
+  isglobal: false
+  isroot: true
+}

--
Gitblit v1.9.3