From bcd7eb876bff759f6aef96f1014b0bca7a3322ff Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期五, 16 八月 2024 15:53:14 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/BL/Relations/Relation_CC_EngineRackCell_CC_EngineRackColumn_CC_EngineRackColumn_CC_Engine.qbl                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_MqbMlb.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def           |    2 
 _Main/BL/Type_CCEngineLogisticsCostReport0/_ROOT_Type_DLEngineLogisticsCostReport#0.qbl                                                        |   10 
 _Main/BL/Type_FinancialProductionImportData/_ROOT_Type_FinancialProductionImportData.qbl                                                       |   10 
 _Main/BL/Type_DL_EngineRackCell/Attribute_DLStorageFeesForRentedWarehouses.qbl                                                                 |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultDLUnit.qbl                                                                   |   11 
 _Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Power.qbl                                                                               |    6 
 _Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Generation.qbl                                                                             |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_EstimatedTotalCost.qbl                                                                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_TotalCost.qbl                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Component_pnlContent.def                                          |   44 
 _Main/BL/Type_CC_EngineRackRow/Attribute_Generation.qbl                                                                                        |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimatedTotalCost.qbl                                                                    |   13 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Download.qbl                                                                           |  212 +
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurveEnable.def                                                       |    1 
 _Main/BL/Type_CCEngineLogisticsCostRow/Method_Initialize.qbl                                                                                   |   17 
 _Main/BL/Type_CCEngineLogisticsCostReport0/DefaultValue_ID.qbl                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnCreated.def                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelExport.def                                                |   34 
 _Main/BL/Relations/Relation_CCEngineLogisticsCostReport_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def                                     |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnCreated.def                          |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_bCurve_OnClick.def                                               |    4 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Index.qbl                                                                                 |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow/_ROOT_Type_CCEngineLogisticsCostRow.qbl                                                                 |   10 
 _Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl                                                                                      |    5 
 _Main/BL/Type_CC_EngineRackRow/Attribute_MLB_MQB.qbl                                                                                           |    7 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultAllUnit.qbl                                                                   |   10 
 _Main/BL/Type_EnginePipelineColumn/Attribute_EndDate.qbl                                                                                       |    8 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCALineUnit.qbl                                                                      |   11 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bCC_EngineRackReport_OnClick.def      |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable#358.def                                      |   98 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCShortTransCost.qbl                                                                        |    8 
 _Main/BL/Type_FinancialProductionImportData/Attribute_MqbMlb.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelTable.def                                                 |   14 
 _Main/BL/Relations/Relation_DL_EngineRackColumn_MacroPlan_MacroPlan_DL_EngineRackColumn.qbl                                                    |   23 
 _Main/BL/Type_FinancialSalesImportData/Attribute_MqbMlb.qbl                                                                                    |    7 
 _Main/BL/Type_CCEngineLogisticsCostSearch/_ROOT_Type_CCEngineLogisticsCostSearch.qbl                                                           |   10 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentOutCost.qbl                                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportSearch.def                     |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonSearch_OnClick.def                            |   16 
 _Main/BL/Type_CC_EngineRackColumn/Attribute_StartDate.qbl                                                                                      |    7 
 _Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl                                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def                 |   19 
 _Main/BL/Relations/Relation_FinancialSalesImportData_Cell_FinancialSalesCell_FSImportData.qbl                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def                                  |    3 
 _Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl                                                                             |  110 
 _Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Generation.qbl                                                                          |    6 
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCStorageFeesForRentedWarehouses.qbl                                                                 |    8 
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCShortDistanceTransportationCosts.qbl                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelExport_ButtonExport_OnClick.def                            |   22 
 _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCALineUnit.qbl                                                                 |   11 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentOutCost.qbl                                                                              |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelGeneration.def                                            |   24 
 _Main/BL/Type_CCEngineLogisticsCostColumn/DefaultValue_Name.qbl                                                                                |    6 
 _Main/BL/Type_FinancialProductionImportData/DefaultValue_Power.qbl                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Component_pnlContent.def                                                    |    1 
 _Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl                                                                                  |    4 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def               |    2 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentEnterCost.qbl                                                                         |    8 
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl                                                                                   |    8 
 _Main/BL/Type_FinancialProductionImportData/Attribute_Generation.qbl                                                                           |    7 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLMPLineUnit.qbl                                                                   |   11 
 _Main/UI/MacroPlannerWebApp/Views/CCEngineRackReport.vw                                                                                        |  206 +
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMachining/Component_pnlContent.def                                          |   23 
 _Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_Generation.qbl                                                                          |    6 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_Coefficient.qbl                                                                              |    8 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_Name.qbl                                                                                  |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_bPPA_OnClick.def                                                   |    4 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Attribute_StartDate.qbl                                                                             |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentEnterCost#517.qbl                                                                         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixeditorContextMenu683.def                                         |   10 
 _Main/BL/Type_CCEngineLogisticsCostCell/_ROOT_Type_CCEngineLogisticsCostCell.qbl                                                               |   10 
 _Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Power.qbl                                                                                  |    7 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_IsInUnit.qbl                                                                                  |   16 
 _Main/BL/Type_CC_EngineRackRow/Function_CalcName.qbl                                                                                           |   13 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl                                                                                 |   51 
 _Main/BL/Type_DL_EngineRackCell/Attribute_CleaningCost.qbl                                                                                     |    8 
 _Main/BL/Relations/Relation_CC_EngineRackRow_CC_EngineRackCell_CC_EngineRackCell_CC_EngineRackR.qbl                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCLine.qbl                                                              |   11 
 _Main/BL/Type_CC_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl                                                                             |    8 
 _Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseStorageFees.qbl                                                                     |    8 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostReport_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def                      |   39 
 _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLALineUnit.qbl                                                                 |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonSearch_OnClick.def                        |   16 
 _Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcTotalCost.qbl                                                                             |   13 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultName.qbl                                                                      |   10 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def                |    2 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/_ROOT_Type_DLEngineLogisticsCostColumn#0.qbl                                                        |   10 
 _Main/BL/Type_FinancialProductionRow/Method_Initialize#110.qbl                                                                                 |   11 
 _Main/BL/Type_FinancialSalesImportData/DefaultValue_Unit.qbl                                                                                   |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnCreated.def                |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_GetRow.qbl                                                                                    |   21 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultCCUnit.qbl                                                                   |   11 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultProductParent.qbl                                                            |   10 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_EstimatedTotalCost.qbl                                                                       |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentOutCost#0.qbl                                                                         |    8 
 _Main/BL/Type_FinancialProductionImportData/Attribute_Power.qbl                                                                                |    7 
 _Main/BL/Type_FinancialProductionImportData/Attribute_Quantity.qbl                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pContent.def                                                           |   14 
 _Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Power.qbl                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable#1.def                           |   10 
 _Main/BL/Type_DL_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl                                                                     |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_Name.qbl                                                                                  |    8 
 _Main/BL/Type_DL_EngineRackColumn/_ROOT_Type_DL_EngineRackColumn.qbl                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_MatrixEditorTable_OnUpdateValue.def                             |   33 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_IsShow.qbl                                                                                |    7 
 _Main/BL/Type_DL_EngineRackCell/Attribute_DLOutboundExpensesForRentedWarehouses.qbl                                                            |    8 
 _Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl                                                                                    |   36 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLALineUnit.qbl                                                                    |   11 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslOrigin_OnCreated.def                      |   18 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_FactoryToRentTransCost.qbl                                                                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixeditorContextMenuTable#1.def                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                               |   54 
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def                                            |   20 
 _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCMPLineUnit.qbl                                                                |   11 
 _Main/BL/Type_DL_EngineRackCell/Attribute_EstimatedTotalCost.qbl                                                                               |    8 
 _Main/BL/Type_FinancialProductionImportData/Attribute_Unit.qbl                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_MatrixEditorTable.def                                          |   98 
 _Main/BL/Type_CCEngineLogisticsCostReport/Attribute_ID.qbl                                                                                     |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentOutCost.qbl                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixEditorActionBarPage191.def                                       |   10 
 _Main/BL/Type_CCEngineLogisticsCostRow0/DefaultValue_Name.qbl                                                                                  |    6 
 _Main/BL/Type_MachiningPipelineColumn0/Attribute_StartDate.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelGeneration#969.def                                        |   24 
 _Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl                                                                                    |   36 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnCreated.def                    |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport/Attribute_IsShow.qbl                                                                                 |    7 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultAllUnit.qbl                                                                  |   10 
 _Main/BL/Type_MachiningPipelineRow/Method_SetCellTransferValue.qbl                                                                             |   20 
 _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLMPLineUnit.qbl                                                                |   11 
 _Main/BL/Type_CCEngineLogisticsCostRow/DefaultValue_Name.qbl                                                                                   |    6 
 _Main/BL/Type_MachiningPipelineColumn0/Attribute_DLAssemblyPlanQty.qbl                                                                         |    8 
 _Main/BL/Type_CC_EngineRackCell/Attribute_EstimatedTotalCost.qbl                                                                               |    8 
 _Main/BL/Type_FinancialSalesImportData/Function_CalcQuantity.qbl                                                                               |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/_ROOT_Component_FormCC_EngineRackReport.def                                      |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def                   |   19 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultProductParent.qbl                                                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def                                                   |   26 
 _Main/BL/Type_CCEngineLogisticsCostRow0/_ROOT_Type_DLEngineLogisticsCostRow#0.qbl                                                              |   10 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLMPLineUnit.qbl                                                                     |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelTable#211.def                                             |   14 
 _Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl                                                                                 |   64 
 _Main/BL/Relations/Relation_DL_EngineRackRow_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRackR.qbl                                            |   23 
 _Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Power.qbl                                                                                  |    7 
 _Main/BL/Type_EnginePipelineReport/Method_Generate.qbl                                                                                         |   44 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def                            |   23 
 _Main/BL/Relations/Relation_CCEngineLogisticsCostRow_Report_CCEngineLogisticsCostReport_Row.qbl                                                |   23 
 _Main/BL/Relations/Relation_FinancialProductionImportData_MacroPlan_MacroPlan_FPImportData.qbl                                                 |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLRent.qbl                                                             |   10 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_RowNr.qbl                                                                                    |    8 
 _Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl                                                                              |    2 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentStorageCost.qbl                                                                       |    8 
 _Main/BL/Type_DL_EngineRackRow/DefaultValue_Generation.qbl                                                                                     |    6 
 _Main/BL/Type_MachiningPipelineColumn0/Attribute_CCAssemblyPlanQty.qbl                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bDL_EngineRackReport_OnClick.def      |   16 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/DefaultValue_Name.qbl                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixEditorActionBarPage178.def                                       |   10 
 _Main/BL/Type_DL_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl                                                                             |    8 
 _Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl                                                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultName.qbl                                                                     |   10 
 _Main/BL/Type_CC_EngineRackCell/Attribute_CleaningCost.qbl                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Views/LogisticsCostParameterSetting.vw                                                                             |   21 
 _Main/BL/Type_CCEngineLogisticsCostColumn0/Function_CalcIndex.qbl                                                                              |   13 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostSearch_MacroPlan_MacroPlan_DLEngineLogisticsCo.qbl                                            |   23 
 _Main/BL/Type_DL_EngineRackColumn/Attribute_StartDate.qbl                                                                                      |    7 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultProductParent.qbl                                                                 |   10 
 _Main/Sys/Repr/Global/MachiningPipelineCell.qrp                                                                                                |   51 
 _Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw                                                                                                 |   86 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentStorageCost#0.qbl                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportHeader.def                     |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def                                    |    3 
 _Main/BL/Type_DL_EngineRackCell/Attribute_Coefficient.qbl                                                                                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Name.qbl                                                                                   |    8 
 _Main/BL/Type_CC_EngineRackRow/Attribute_Name.qbl                                                                                              |    7 
 _Main/BL/Type_CC_EngineRackCell/Attribute_TotalCost.qbl                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def                          |    3 
 _Main/BL/Type_CCEngineLogisticsCostRow/Attribute_RowNr.qbl                                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuDLEngineLogis.def |   16 
 _Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl                                                                                          |   13 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuCCEngineLogis.def |   16 
 _Main/BL/Relations/Relation_DL_EngineRackColumn_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRa.qbl                                            |   23 
 _Main/BL/Type_DL_EngineRackRow/Attribute_Name.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def                                                   |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelPower.def                                                 |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def                      |   39 
 _Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_MqbMlb.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslDestination_OnCreated.def                 |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def               |   19 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl                                                                         |  272 ++
 _Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Views/DemandComparison.vw                                                                                          |  136 +
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def                                                            |   26 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_Coefficient.qbl                                                                             |    8 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnCreated.def                                                 |    2 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCMPLineUnit.qbl                                                                     |   11 
 _Main/UI/MacroPlannerWebApp/Views/DLEngineRackReport.vw                                                                                        |   89 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultCCUnit.qbl                                                                    |   11 
 _Main/BL/Type_DL_EngineRackCell/_ROOT_Type_DL_EngineRackCell.qbl                                                                               |    9 
 _Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Column_CCEngineLogisticsCostColumn_Cell.qbl                                              |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Response_pnlContent_ddslName_OnCreated.def                                  |   18 
 _Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl                                                              |    2 
 _Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl                                                                                |    9 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentOutCost.qbl                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def                                |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/_ROOT_Component_FormDL_EngineRackReport.def                                      |   13 
 _Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentStorageCost.qbl                                                                           |   16 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_GenerateColumn.qbl                                                                            |   20 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMaterialRack/Component_pnlContent.def                                       |   23 
 _Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp                                                                                            |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelMQBMLB#667.def                                            |   24 
 _Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Index.qbl                                                                                  |    8 
 _Main/BL/Type_DLEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def                    |    2 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_FactoryToDLRentTransCost.qbl                                                                |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetRentStorageCost.qbl                                                                          |   16 
 _Main/BL/Type_FinancialSalesImportData/DefaultValue_Power.qbl                                                                                  |    6 
 _Main/BL/Type_CC_EngineRackCell/_ROOT_Type_CC_EngineRackCell.qbl                                                                               |    9 
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCRentalWarehouseStorageFees.qbl                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def                              |    3 
 _Main/BL/Type_CC_EngineRackCell/Attribute_Coefficient.qbl                                                                                      |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl                                                                          |  166 +
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_Clear.qbl                                                                                    |   13 
 _Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl                                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport#670.def                                            |   34 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_IsInUnit.qbl                                                                                 |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def                                    |    3 
 _Main/BL/Type_FinancialSalesImportData/_ROOT_Type_FinancialSalesImportData.qbl                                                                 |   10 
 _Main/BL/Type_FinancialSalesImportData/Attribute_Generation.qbl                                                                                |    7 
 _Main/BL/Relations/Relation_CCEngineLogisticsCostSearch_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Attribute_Name.qbl                                                                                     |    8 
 _Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_StartDate.qbl                                                                              |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_GetRow.qbl                                                                                   |   21 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_TotalCost.qbl                                                                               |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl                                                                                  |   49 
 _Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_Name.qbl                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def                                  |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAEnable.def                                                         |    1 
 _var/_Main/ProjSettings/EditorTC/Views/班次时间分析_[413988.0.1367211460].vw                                                                         |    2 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetFactoryToRentTransCost.qbl                                                                   |   16 
 _Main/BL/Type_FinancialSalesImportData/DefaultValue_Generation.qbl                                                                             |    6 
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentEnterCost.qbl                                                                            |    8 
 _Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl                                                                                   |    4 
 _Main/BL/Type_CCEngineLogisticsCostColumn/Function_CalcIndex.qbl                                                                               |   13 
 _Main/BL/Type_CCEngineLogisticsCostReport/Method_Clear.qbl                                                                                     |   13 
 _Main/BL/Type_CC_EngineRackRow/_ROOT_Type_CC_EngineRackRow.qbl                                                                                 |    9 
 _Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl                                                                               |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelPower#653.def                                             |   24 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointDLLine.qbl                                                             |   11 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostReport_Column_DLEngineLogisticsCostColumn_Repo.qbl                                            |   26 
 _Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_ID.qbl                                                                                  |    6 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostColumn_Cell_DLEngineLogisticsCostCell_Column.qbl                                              |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def                                                             |    2 
 _Main/BL/Type_DL_EngineRackRow/DefaultValue_MLB_MQB.qbl                                                                                        |    6 
 _Main/BL/Relations/Relation_FinancialSalesImportData_MacroPlan_MacroPlan_FSImportData.qbl                                                      |   23 
 _Main/BL/Type_FinancialSalesImportData/Attribute_Power.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def                               |   37 
 _Main/BL/Type_CCEngineLogisticsCostReport/Attribute_Name.qbl                                                                                   |    8 
 _Main/BL/Relations/Relation_FinancialProductionImportData_Cell_FinancialProductionCell_ImportDa.qbl                                            |   23 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcTotalCost.qbl                                                                            |   13 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCALineUnit.qbl                                                                    |   11 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl                                                                            |  152 +
 _Main/BL/Relations/Relation_FinancialProductionRow_Product_MP_Product_MP_FinancialProductionRow.qbl                                            |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def                                 |    4 
 _Main/BL/Relations/Relation_DL_EngineRackRow_MacroPlan_MacroPlan_DL_EngineRackRow.qbl                                                          |   23 
 _Main/BL/Type_MachiningPipelineColumn0/Attribute_EndDate.qbl                                                                                   |    7 
 _Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp                                                                                            |   66 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLALineUnit.qbl                                                                      |   11 
 _Main/BL/Type_CCEngineLogisticsCostCell0/_ROOT_Type_DLEngineLogisticsCostCell#0.qbl                                                            |   10 
 _Main/BL/Type_DL_EngineRackRow/Function_CalcName.qbl                                                                                           |   13 
 _Main/BL/Type_CC_EngineRackColumn/_ROOT_Type_CC_EngineRackColumn.qbl                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Views/CC_engine_logistics_cost_report_view.vw                                                                      |  104 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def       |   19 
 _Main/UI/MacroPlannerWebApp/Views/DL_engine_logistics_cost_report_view.vw                                                                      |  200 +
 _Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentStorageCost.qbl                                                                          |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentOutCost.qbl                                                                               |   16 
 _Main/BL/Type_FinancialSalesImportData/Attribute_StartDate.qbl                                                                                 |    7 
 _Main/Sys/Repr/Global/InventorySummaryCell.qrp                                                                                                 |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnSelectionChanged.def                     |   19 
 _Main/BL/Type_CC_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl                                                                     |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixeditorContextMenu687.def                                         |   10 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Function_CalcEstimatedTotalCost.qbl                                                                   |   14 
 _Main/BL/Type_CCEngineLogisticsCostColumn/_ROOT_Type_CCEngineLogisticsCostColumn.qbl                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportSearch.def                     |   19 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Attribute_ID.qbl                                                                                    |    8 
 _Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Row_CCEngineLogisticsCostRow_Cell.qbl                                                    |   23 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_DLRentEnterCost.qbl                                                                         |    8 
 _Main/BL/Type_CCEngineLogisticsCostRow/Attribute_Name.qbl                                                                                      |    8 
 _Main/BL/Type_CC_EngineRackCell/Attribute_StorageFeesForRentedWarehouses.qbl                                                                   |    8 
 _Main/BL/Type_DLEngineLogisticsCostSearch/Attribute_Generation.qbl                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def                         |   32 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_MatrixEditor531.def                                                    |   98 
 _Main/BL/Type_FinancialProductionImportData/Function_CalcQuantity.qbl                                                                          |   13 
 _Main/BL/Type_FinancialSalesImportData/Attribute_Unit.qbl                                                                                      |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelPower_ddslPower_OnCreated.def                              |   23 
 _Main/BL/Type_DL_EngineRackCell/Attribute_CCOutboundExpensesForRentedWarehouses.qbl                                                            |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pHeader.def                                                            |   26 
 _Main/BL/Relations/Relation_CC_EngineRackRow_MacroPlan_MacroPlan_CC_EngineRackRow.qbl                                                          |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelDLEngineLogisticsCostReportHeader.def                     |   15 
 _Main/BL/Type_CC_EngineRackCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl                                                       |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixeditorContextMenuTable.def                               |   10 
 _Main/BL/Type_CC_EngineRackCell/Attribute_OutboundExpensesForRentedWarehouses.qbl                                                              |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pContent.def                                                           |   14 
 _Main/BL/Type_DL_EngineRackRow/Attribute_Generation.qbl                                                                                        |    7 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCLongTransCoat.qbl                                                                         |    8 
 _Main/BL/Relations/Relation_CC_EngineRackColumn_MacroPlan_MacroPlan_CC_EngineRackColumn.qbl                                                    |   23 
 _Main/BL/Type_FinancialSalesImportData/Attribute_Quantity.qbl                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_PanelMQBMLB.def                                                |   24 
 _Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl                                                                                |    4 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl                                                                             |    2 
 _Main/BL/Type_FinancialProductionImportData/DefaultValue_Generation.qbl                                                                        |    6 
 _Main/BL/Type_FinancialProductionImportData/DefaultValue_MqbMlb.qbl                                                                            |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostEngine/Component_pnlContent.def                                             |   23 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_SetDLRentEnterCost.qbl                                                                          |   20 
 _Main/BL/Type_DL_EngineRackCell/Attribute_DLExternalRentalWarehouseTransportationCosts.qbl                                                     |    8 
 _Main/BL/Relations/Relation_DLEngineLogisticsCostRow_Cell_DLEngineLogisticsCostCell_Row.qbl                                                    |   23 
 _Main/BL/Type_CCEngineLogisticsCostRow0/Method_Initialize.qbl                                                                                  |   22 
 _Main/BL/Type_EnginePipelineColumn/Attribute_StartDate.qbl                                                                                     |    8 
 _Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCRent.qbl                                                              |   10 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_Generate.qbl                                                                                 |   68 
 _Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bRefresh_OnClick.def                                            |   20 
 _Main/BL/Type_DL_EngineRackRow/DefaultValue_Name.qbl                                                                                           |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def           |   19 
 _Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl                                                                                       |   12 
 _Main/BL/Type_FinancialSalesReport/Method_IsInUnit.qbl                                                                                         |    2 
 _Main/BL/Type_DL_EngineRackCell/Attribute_TotalCost.qbl                                                                                        |    8 
 _Main/BL/Type_CCEngineLogisticsCostCell0/Attribute_CCRentQuantity.qbl                                                                          |    8 
 _Main/BL/Relations/Relation_FinancialSalesRow_Product_MP_Product_MP_FinancialSalesRow.qbl                                                      |   23 
 _Main/BL/Type_FinancialProductionImportData/Attribute_StartDate.qbl                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonExport_OnClick.def                        |   22 
 _Main/BL/Type_FinancialSalesImportData/Attribute_ProductID.qbl                                                                                 |    8 
 _Main/BL/Relations/Relation_CCEngineLogisticsCostReport_Column_CCEngineLogisticsCostColumn_Repo.qbl                                            |   26 
 _Main/BL/Type_DL_EngineRackRow/_ROOT_Type_DL_EngineRackRow.qbl                                                                                 |    9 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def                                          |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable.def                             |   10 
 _Main/BL/Type_CC_EngineRackCell/Attribute_RentalWarehouseStorageFees.qbl                                                                       |    8 
 _Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultProductParent.qbl                                                                    |   10 
 _Main/BL/Type_EnginePipelineRow/Method_SetCellDemandValue.qbl                                                                                  |    4 
 _Main/BL/Type_CCEngineLogisticsCostReport0/Method_GenerateColumn.qbl                                                                           |   20 
 _Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetStockingPointCCRent.qbl                                                             |   10 
 _Main/BL/Type_DL_EngineRackRow/Attribute_MLB_MQB.qbl                                                                                           |    7 
 /dev/null                                                                                                                                      |   20 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCMPLineUnit.qbl                                                                   |   11 
 _Main/BL/Type_FinancialSalesImportData/DefaultValue_ProductID.qbl                                                                              |    6 
 _Main/BL/Type_FinancialSalesImportData/DefaultValue_MqbMlb.qbl                                                                                 |    6 
 _Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl                                                                                |   14 
 _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/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def                                                    |   98 
 _Main/BL/Type_CCEngineLogisticsCostReport/_ROOT_Type_CCEngineLogisticsCostReport.qbl                                                           |   10 
 _Main/BL/Type_CCEngineLogisticsCostRow/Method_SetFactoryToRentTransCost.qbl                                                                    |   16 
 _Main/BL/Type_FinancialProductionImportData/Attribute_ProductID.qbl                                                                            |    8 
 356 files changed, 6,438 insertions(+), 272 deletions(-)

diff --git a/_Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Column_CCEngineLogisticsCostColumn_Cell.qbl b/_Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Column_CCEngineLogisticsCostColumn_Cell.qbl
new file mode 100644
index 0000000..799a439
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Column_CCEngineLogisticsCostColumn_Cell.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CCEngineLogisticsCostCell_Column_CCEngineLogisticsCostColumn_Cell
+{
+  #keys: '1[415136.0.986881391]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Column
+  {
+    #keys: '3[415136.0.986881393][415136.0.986881392][415136.0.986881394]'
+    Cardinality: '0to1'
+    ObjectDefinition: CCEngineLogisticsCostCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Cell
+  {
+    #keys: '3[415136.0.986881396][415136.0.986881395][415136.0.986881397]'
+    Cardinality: '1toN'
+    ObjectDefinition: CCEngineLogisticsCostColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Row_CCEngineLogisticsCostRow_Cell.qbl b/_Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Row_CCEngineLogisticsCostRow_Cell.qbl
new file mode 100644
index 0000000..035a7b1
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CCEngineLogisticsCostCell_Row_CCEngineLogisticsCostRow_Cell.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CCEngineLogisticsCostCell_Row_CCEngineLogisticsCostRow_Cell
+{
+  #keys: '1[415136.0.986881404]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Row
+  {
+    #keys: '3[415136.0.986881406][415136.0.986881405][415136.0.986881407]'
+    Cardinality: '0to1'
+    ObjectDefinition: CCEngineLogisticsCostCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Cell
+  {
+    #keys: '3[415136.0.986881409][415136.0.986881408][415136.0.986881410]'
+    Cardinality: '1toN'
+    ObjectDefinition: CCEngineLogisticsCostRow
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CCEngineLogisticsCostReport_Column_CCEngineLogisticsCostColumn_Repo.qbl b/_Main/BL/Relations/Relation_CCEngineLogisticsCostReport_Column_CCEngineLogisticsCostColumn_Repo.qbl
new file mode 100644
index 0000000..52f06d0
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CCEngineLogisticsCostReport_Column_CCEngineLogisticsCostColumn_Repo.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CCEngineLogisticsCostReport_Column_CCEngineLogisticsCostColumn_Report
+{
+  #keys: '1[415136.0.986881356]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.986881375][415136.0.986881369][415136.0.986881376][415136.0.986881370][415136.0.986881377][415136.0.986881371][415136.0.986881378][415136.0.986881372][415136.0.986881379][415136.0.986881373][415136.0.986881380][415136.0.986881374]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide Column
+  {
+    #keys: '3[415136.0.986881358][415136.0.986881357][415136.0.986881359]'
+    Cardinality: '1toN'
+    ObjectDefinition: CCEngineLogisticsCostReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide Report
+  {
+    #keys: '3[415136.0.986881361][415136.0.986881360][415136.0.986881362]'
+    Cardinality: '0to1'
+    ObjectDefinition: CCEngineLogisticsCostColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CCEngineLogisticsCostReport_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl b/_Main/BL/Relations/Relation_CCEngineLogisticsCostReport_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl
new file mode 100644
index 0000000..75fd42d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CCEngineLogisticsCostReport_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CCEngineLogisticsCostReport_MacroPlan_MacroPlan_CCEngineLogisticsCostReport
+{
+  #keys: '1[415136.0.986400960]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.986400962][415136.0.986400961][415136.0.986400963]'
+    Cardinality: '0to1'
+    ObjectDefinition: CCEngineLogisticsCostReport
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CCEngineLogisticsCostReport
+  {
+    #keys: '3[415136.0.986400965][415136.0.986400964][415136.0.986400966]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CCEngineLogisticsCostRow_Report_CCEngineLogisticsCostReport_Row.qbl b/_Main/BL/Relations/Relation_CCEngineLogisticsCostRow_Report_CCEngineLogisticsCostReport_Row.qbl
new file mode 100644
index 0000000..4023f8e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CCEngineLogisticsCostRow_Report_CCEngineLogisticsCostReport_Row.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CCEngineLogisticsCostRow_Report_CCEngineLogisticsCostReport_Row
+{
+  #keys: '1[415136.0.986616253]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Report
+  {
+    #keys: '3[415136.0.986616255][415136.0.986616254][415136.0.986616256]'
+    Cardinality: '0to1'
+    ObjectDefinition: CCEngineLogisticsCostRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Row
+  {
+    #keys: '3[415136.0.986616258][415136.0.986616257][415136.0.986616259]'
+    Cardinality: '1toN'
+    ObjectDefinition: CCEngineLogisticsCostReport
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CCEngineLogisticsCostSearch_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl b/_Main/BL/Relations/Relation_CCEngineLogisticsCostSearch_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl
new file mode 100644
index 0000000..cc3faa8
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CCEngineLogisticsCostSearch_MacroPlan_MacroPlan_CCEngineLogisticsCo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CCEngineLogisticsCostSearch_MacroPlan_MacroPlan_CCEngineLogisticsCostSearch
+{
+  #keys: '1[415136.0.986844810]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.986844812][415136.0.986844811][415136.0.986844813]'
+    Cardinality: '0to1'
+    ObjectDefinition: CCEngineLogisticsCostSearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CCEngineLogisticsCostSearch
+  {
+    #keys: '3[415136.0.986844815][415136.0.986844814][415136.0.986844816]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CC_EngineRackCell_CC_EngineRackColumn_CC_EngineRackColumn_CC_Engine.qbl b/_Main/BL/Relations/Relation_CC_EngineRackCell_CC_EngineRackColumn_CC_EngineRackColumn_CC_Engine.qbl
new file mode 100644
index 0000000..76d6e31
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CC_EngineRackCell_CC_EngineRackColumn_CC_EngineRackColumn_CC_Engine.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CC_EngineRackCell_CC_EngineRackColumn_CC_EngineRackColumn_CC_EngineRackCell
+{
+  #keys: '1[413988.0.1476832592]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide CC_EngineRackColumn
+  {
+    #keys: '3[413988.0.1476832594][413988.0.1476832593][413988.0.1476832595]'
+    Cardinality: '0to1'
+    ObjectDefinition: CC_EngineRackCell
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CC_EngineRackCell
+  {
+    #keys: '3[413988.0.1476832597][413988.0.1476832596][413988.0.1476832598]'
+    Cardinality: '1toN'
+    ObjectDefinition: CC_EngineRackColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CC_EngineRackColumn_MacroPlan_MacroPlan_CC_EngineRackColumn.qbl b/_Main/BL/Relations/Relation_CC_EngineRackColumn_MacroPlan_MacroPlan_CC_EngineRackColumn.qbl
new file mode 100644
index 0000000..6ed391f
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CC_EngineRackColumn_MacroPlan_MacroPlan_CC_EngineRackColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CC_EngineRackColumn_MacroPlan_MacroPlan_CC_EngineRackColumn
+{
+  #keys: '1[413988.0.1476832605]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1476832607][413988.0.1476832606][413988.0.1476832608]'
+    Cardinality: '0to1'
+    ObjectDefinition: CC_EngineRackColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CC_EngineRackColumn
+  {
+    #keys: '3[413988.0.1476832610][413988.0.1476832609][413988.0.1476832611]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CC_EngineRackRow_CC_EngineRackCell_CC_EngineRackCell_CC_EngineRackR.qbl b/_Main/BL/Relations/Relation_CC_EngineRackRow_CC_EngineRackCell_CC_EngineRackCell_CC_EngineRackR.qbl
new file mode 100644
index 0000000..40f5ab7
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CC_EngineRackRow_CC_EngineRackCell_CC_EngineRackCell_CC_EngineRackR.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CC_EngineRackRow_CC_EngineRackCell_CC_EngineRackCell_CC_EngineRackRow
+{
+  #keys: '1[413988.0.1476832579]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide CC_EngineRackCell
+  {
+    #keys: '3[413988.0.1476832581][413988.0.1476832580][413988.0.1476832582]'
+    Cardinality: '1toN'
+    ObjectDefinition: CC_EngineRackRow
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide CC_EngineRackRow
+  {
+    #keys: '3[413988.0.1476832584][413988.0.1476832583][413988.0.1476832585]'
+    Cardinality: '0to1'
+    ObjectDefinition: CC_EngineRackCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CC_EngineRackRow_MacroPlan_MacroPlan_CC_EngineRackRow.qbl b/_Main/BL/Relations/Relation_CC_EngineRackRow_MacroPlan_MacroPlan_CC_EngineRackRow.qbl
new file mode 100644
index 0000000..f896813
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CC_EngineRackRow_MacroPlan_MacroPlan_CC_EngineRackRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CC_EngineRackRow_MacroPlan_MacroPlan_CC_EngineRackRow
+{
+  #keys: '1[413988.0.1476832566]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1476832568][413988.0.1476832567][413988.0.1476832569]'
+    Cardinality: '0to1'
+    ObjectDefinition: CC_EngineRackRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CC_EngineRackRow
+  {
+    #keys: '3[413988.0.1476832571][413988.0.1476832570][413988.0.1476832572]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
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_DL_EngineRackColumn_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRa.qbl b/_Main/BL/Relations/Relation_DL_EngineRackColumn_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRa.qbl
new file mode 100644
index 0000000..70cfdb4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DL_EngineRackColumn_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DL_EngineRackColumn_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRackColumn
+{
+  #keys: '1[413988.0.1488132644]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide DL_EngineRackCell
+  {
+    #keys: '3[413988.0.1488132646][413988.0.1488132645][413988.0.1488132647]'
+    Cardinality: '1toN'
+    ObjectDefinition: DL_EngineRackColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DL_EngineRackColumn
+  {
+    #keys: '3[413988.0.1488132649][413988.0.1488132648][413988.0.1488132650]'
+    Cardinality: '0to1'
+    ObjectDefinition: DL_EngineRackCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DL_EngineRackColumn_MacroPlan_MacroPlan_DL_EngineRackColumn.qbl b/_Main/BL/Relations/Relation_DL_EngineRackColumn_MacroPlan_MacroPlan_DL_EngineRackColumn.qbl
new file mode 100644
index 0000000..5c1eeeb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DL_EngineRackColumn_MacroPlan_MacroPlan_DL_EngineRackColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DL_EngineRackColumn_MacroPlan_MacroPlan_DL_EngineRackColumn
+{
+  #keys: '1[413988.0.1488132631]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1488132633][413988.0.1488132632][413988.0.1488132634]'
+    Cardinality: '0to1'
+    ObjectDefinition: DL_EngineRackColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DL_EngineRackColumn
+  {
+    #keys: '3[413988.0.1488132636][413988.0.1488132635][413988.0.1488132637]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DL_EngineRackRow_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRackR.qbl b/_Main/BL/Relations/Relation_DL_EngineRackRow_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRackR.qbl
new file mode 100644
index 0000000..a652d99
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DL_EngineRackRow_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRackR.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DL_EngineRackRow_DL_EngineRackCell_DL_EngineRackCell_DL_EngineRackRow
+{
+  #keys: '1[413988.0.1488132614]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide DL_EngineRackCell
+  {
+    #keys: '3[413988.0.1488132616][413988.0.1488132615][413988.0.1488132617]'
+    Cardinality: '1toN'
+    ObjectDefinition: DL_EngineRackRow
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide DL_EngineRackRow
+  {
+    #keys: '3[413988.0.1488132619][413988.0.1488132618][413988.0.1488132620]'
+    Cardinality: '0to1'
+    ObjectDefinition: DL_EngineRackCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_DL_EngineRackRow_MacroPlan_MacroPlan_DL_EngineRackRow.qbl b/_Main/BL/Relations/Relation_DL_EngineRackRow_MacroPlan_MacroPlan_DL_EngineRackRow.qbl
new file mode 100644
index 0000000..1265f1a
--- /dev/null
+++ b/_Main/BL/Relations/Relation_DL_EngineRackRow_MacroPlan_MacroPlan_DL_EngineRackRow.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation DL_EngineRackRow_MacroPlan_MacroPlan_DL_EngineRackRow
+{
+  #keys: '1[413988.0.1488132601]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[413988.0.1488132603][413988.0.1488132602][413988.0.1488132604]'
+    Cardinality: '0to1'
+    ObjectDefinition: DL_EngineRackRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide DL_EngineRackRow
+  {
+    #keys: '3[413988.0.1488132606][413988.0.1488132605][413988.0.1488132607]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionImportData_Cell_FinancialProductionCell_ImportDa.qbl b/_Main/BL/Relations/Relation_FinancialProductionImportData_Cell_FinancialProductionCell_ImportDa.qbl
new file mode 100644
index 0000000..f518aa0
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionImportData_Cell_FinancialProductionCell_ImportDa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionImportData_Cell_FinancialProductionCell_ImportData
+{
+  #keys: '1[415136.0.978940064]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Cell
+  {
+    #keys: '3[415136.0.978940066][415136.0.978940065][415136.0.978940067]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionImportData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ImportData
+  {
+    #keys: '3[415136.0.978940069][415136.0.978940068][415136.0.978940070]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialProductionImportData_MacroPlan_MacroPlan_FPImportData.qbl b/_Main/BL/Relations/Relation_FinancialProductionImportData_MacroPlan_MacroPlan_FPImportData.qbl
new file mode 100644
index 0000000..ae0cc0a
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialProductionImportData_MacroPlan_MacroPlan_FPImportData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialProductionImportData_MacroPlan_MacroPlan_FPImportData
+{
+  #keys: '1[415136.0.978920031]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.978920033][415136.0.978920032][415136.0.978920034]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialProductionImportData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FPImportData
+  {
+    #keys: '3[415136.0.978920036][415136.0.978920035][415136.0.978920037]'
+    Cardinality: '1toN'
+    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_FinancialSalesImportData_Cell_FinancialSalesCell_FSImportData.qbl b/_Main/BL/Relations/Relation_FinancialSalesImportData_Cell_FinancialSalesCell_FSImportData.qbl
new file mode 100644
index 0000000..ca210bd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesImportData_Cell_FinancialSalesCell_FSImportData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesImportData_Cell_FinancialSalesCell_FSImportData
+{
+  #keys: '1[415136.0.984654733]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Cell
+  {
+    #keys: '3[415136.0.984654735][415136.0.984654734][415136.0.984654736]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesImportData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FSImportData
+  {
+    #keys: '3[415136.0.984654738][415136.0.984654737][415136.0.984654739]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesImportData_MacroPlan_MacroPlan_FSImportData.qbl b/_Main/BL/Relations/Relation_FinancialSalesImportData_MacroPlan_MacroPlan_FSImportData.qbl
new file mode 100644
index 0000000..6b3fb29
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesImportData_MacroPlan_MacroPlan_FSImportData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesImportData_MacroPlan_MacroPlan_FSImportData
+{
+  #keys: '1[415136.0.984654720]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.984654722][415136.0.984654721][415136.0.984654723]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesImportData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FSImportData
+  {
+    #keys: '3[415136.0.984654725][415136.0.984654724][415136.0.984654726]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
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_CCEngineLogisticsCostCell/Attribute_Coefficient.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_Coefficient.qbl
new file mode 100644
index 0000000..ffd2fc1
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_Coefficient.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Coefficient
+{
+  #keys: '3[415136.0.986844758][415136.0.986844757][415136.0.986844759]'
+  Description: '绯绘暟'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_EstimatedTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_EstimatedTotalCost.qbl
new file mode 100644
index 0000000..8a9c7d8
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_EstimatedTotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EstimatedTotalCost
+{
+  #keys: '3[415136.0.986844739][415136.0.986844738][415136.0.986844740]'
+  Description: '棰勮鎬昏垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_FactoryToRentTransCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_FactoryToRentTransCost.qbl
new file mode 100644
index 0000000..8dbddf0
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_FactoryToRentTransCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FactoryToRentTransCost
+{
+  #keys: '3[415136.0.986844781][415136.0.986844780][415136.0.986844782]'
+  Description: '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentEnterCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentEnterCost.qbl
new file mode 100644
index 0000000..0343f9f
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentEnterCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RentEnterCost
+{
+  #keys: '3[415136.0.986881423][415136.0.986881422][415136.0.986881424]'
+  Description: '澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentOutCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentOutCost.qbl
new file mode 100644
index 0000000..005fa21
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentOutCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RentOutCost
+{
+  #keys: '3[415136.0.986881433][415136.0.986881432][415136.0.986881434]'
+  Description: '澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentStorageCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentStorageCost.qbl
new file mode 100644
index 0000000..c42d3f6
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_RentStorageCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RentStorageCost
+{
+  #keys: '3[415136.0.986881446][415136.0.986881445][415136.0.986881447]'
+  Description: '澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_TotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_TotalCost.qbl
new file mode 100644
index 0000000..e205166
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Attribute_TotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalCost
+{
+  #keys: '3[415136.0.986844771][415136.0.986844770][415136.0.986844772]'
+  Description: '鎬昏垂鐢�'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimatedTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimatedTotalCost.qbl
new file mode 100644
index 0000000..2251974
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcEstimatedTotalCost.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcEstimatedTotalCost
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    
+    value := this.RentEnterCost() + this.RentOutCost() + this.FactoryToRentTransCost() + this.RentStorageCost();
+    
+    this.EstimatedTotalCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcTotalCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/Function_CalcTotalCost.qbl
new file mode 100644
index 0000000..e2e8080
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/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_CCEngineLogisticsCostCell/_ROOT_Type_CCEngineLogisticsCostCell.qbl b/_Main/BL/Type_CCEngineLogisticsCostCell/_ROOT_Type_CCEngineLogisticsCostCell.qbl
new file mode 100644
index 0000000..4caa127
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostCell/_ROOT_Type_CCEngineLogisticsCostCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CCEngineLogisticsCostCell
+{
+  #keys: '5[415136.0.986881388][415136.0.986881386][0.0.0][415136.0.986881387][415136.0.986881389]'
+  BaseType: Object
+  Description: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄥ崟鍏冩牸'
+  StructuredName: 'CCEngineLogisticsCostCells'
+}
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_CCEngineLogisticsCostColumn/Attribute_Index.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Index.qbl
new file mode 100644
index 0000000..df42754
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Index.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[415136.0.986616274][415136.0.986616273][415136.0.986616275]'
+  Description: '鍒楀彿'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..5a12005
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.986616271][415136.0.986616270][415136.0.986616272]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_StartDate.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..7b54308
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.986881347][415136.0.986881346][415136.0.986881348]'
+  Description: '寮�濮嬫棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn/DefaultValue_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn/Function_CalcIndex.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..92fa42d
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    
+    value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+    
+    this.Index( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostColumn/_ROOT_Type_CCEngineLogisticsCostColumn.qbl b/_Main/BL/Type_CCEngineLogisticsCostColumn/_ROOT_Type_CCEngineLogisticsCostColumn.qbl
new file mode 100644
index 0000000..a958ed8
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostColumn/_ROOT_Type_CCEngineLogisticsCostColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CCEngineLogisticsCostColumn
+{
+  #keys: '5[415136.0.986616268][415136.0.986616266][0.0.0][415136.0.986616267][415136.0.986616269]'
+  BaseType: Object
+  Description: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄥ垪'
+  StructuredName: 'CCEngineLogisticsCostColumns'
+}
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/Attribute_ID.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_ID.qbl
new file mode 100644
index 0000000..d2cbd0c
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.986400950][415136.0.986400949][415136.0.986400951]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_IsShow.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_IsShow.qbl
new file mode 100644
index 0000000..d20a0f9
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+  #keys: '3[415136.0.986400953][415136.0.986400952][415136.0.986400954]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_Name.qbl
new file mode 100644
index 0000000..41a82d6
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.986400956][415136.0.986400955][415136.0.986400957]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_ID.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Clear.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Clear.qbl
new file mode 100644
index 0000000..4acb371
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Clear.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Method Clear
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    this.Column( relflush );
+    this.Row( relflush );
+    
+    this.GenerateColumn( this.MacroPlan() );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
new file mode 100644
index 0000000..f8cbebb
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_Generate.qbl
@@ -0,0 +1,49 @@
+Quintiq file version 2.0
+#parent: #root
+Method Generate (
+  CCEngineLogisticsCostSearch search,
+  Product_MPs products
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    table            := selectobject( this, MacroPlan.CCEngineLogisticsCostReport, 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, RentEnterCost         := 0
+                                     , RentOutCost                 := 0 
+                                     , FactoryToRentTransCost      := 0
+                                     , RentStorageCost             := 0 );
+            column.Cell( relinsert, sumcell );
+          }
+          
+          showcell   := showrow.Cell( relnew, RentEnterCost := cell.RentEnterCost(), RentOutCost := cell.RentOutCost(), FactoryToRentTransCost := cell.FactoryToRentTransCost(), RentStorageCost := cell.RentStorageCost() );
+          column.Cell( relinsert, showcell );
+          sumcell.RentEnterCost( cell.RentEnterCost() + sumcell.RentEnterCost() );
+          sumcell.RentOutCost( cell.RentOutCost() + sumcell.RentOutCost() );
+          sumcell.FactoryToRentTransCost( cell.FactoryToRentTransCost() + sumcell.FactoryToRentTransCost() );
+          sumcell.RentStorageCost( cell.RentStorageCost() + sumcell.RentStorageCost() );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/Method_GenerateColumn.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..880436e
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_GenerateColumn.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateColumn (
+  MacroPlan owner
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-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_CCEngineLogisticsCostReport/Method_GetRow.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_GetRow.qbl
new file mode 100644
index 0000000..a966d3a
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_GetRow.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRow (
+  String product
+) as CCEngineLogisticsCostRow
+{
+  Description: '鏍规嵁宸ュ巶鑾峰彇琛�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-2-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_CCEngineLogisticsCostReport/Method_IsInUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/Method_IsInUnit.qbl
new file mode 100644
index 0000000..57394ad
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/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_CCEngineLogisticsCostReport/StaticMethod_Download.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl
new file mode 100644
index 0000000..d80aa59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Download.qbl
@@ -0,0 +1,152 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  Description: '涓嬭浇璐㈠姟鎶ヨ〃鏁版嵁'
+  TextBody:
+  [*
+    
+    table := selectobject( macroPlan, CCEngineLogisticsCostReport, 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 );
+          //Attribute
+          //澶栫搴撳叆搴撹垂鐢�
+          rententercostcellElement := xmlDOM.CreateElement( "cell" );
+          rententercostcellElement.SetAttribute( "value", 'RentEnterCost' );
+          attricolumnelement.AppendChild( rententercostcellElement );
+          //澶栫搴撳嚭搴撹垂鐢�
+          rentoutcostcellElement := xmlDOM.CreateElement( "cell" );
+          rentoutcostcellElement.SetAttribute( "value", 'RentOutCost' );
+          attricolumnelement.AppendChild( rentoutcostcellElement );
+          //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤
+          factorytorenttranscostcellElement := xmlDOM.CreateElement( "cell" );
+          factorytorenttranscostcellElement.SetAttribute( "value", 'FactoryToRentTransCost' );
+          attricolumnelement.AppendChild( factorytorenttranscostcellElement );
+          //澶栫搴撲粨鍌ㄨ垂鐢�
+          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' );
+          attricolumnelement.AppendChild( coefficientcellElement );
+          //鎬昏垂鐢�
+          totalcostcellElement := xmlDOM.CreateElement( "cell" );
+          totalcostcellElement.SetAttribute( "value", 'TotalCost' );
+          attricolumnelement.AppendChild( totalcostcellElement );
+        }
+        //澶栫搴撳叆搴撹垂鐢�
+        rententercostcellElement := xmlDOM.CreateElement( "cell" );
+        rententercostcellElement.SetAttribute( "value", [String]c.RentEnterCost() );
+        columnelement.AppendChild( rententercostcellElement );
+        //澶栫搴撳嚭搴撹垂鐢�
+        rentoutcostcellElement := xmlDOM.CreateElement( "cell" );
+        rentoutcostcellElement.SetAttribute( "value", [String]c.RentOutCost() );
+        columnelement.AppendChild( rentoutcostcellElement );
+        //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤
+        factorytorenttranscostcellElement := xmlDOM.CreateElement( "cell" );
+        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 );
+        //绯绘暟
+        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( CCEngineLogisticsCostReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultAllUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultAllUnit.qbl
new file mode 100644
index 0000000..e912c3f
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/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_CCEngineLogisticsCostReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultCCUnit.qbl
new file mode 100644
index 0000000..4a17ee3
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/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_CCEngineLogisticsCostReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..5f29f58
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/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_CCEngineLogisticsCostReport/StaticMethod_GetDefaultProductParent.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultProductParent.qbl
new file mode 100644
index 0000000..a0443f2
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetDefaultProductParent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultProductParent () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-14-2024 (created)
+    return '浜ф垚鍝�';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCLine.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCLine.qbl
new file mode 100644
index 0000000..1e19bf6
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCLine.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointCCLine () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    //return '闀挎槬瑁呴厤绾胯竟搴�';
+    return '闀挎槬瑁呴厤绾�';
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCRent.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_GetStockingPointCCRent.qbl
new file mode 100644
index 0000000..d1d47c2
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/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_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..a26e3e5
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/StaticMethod_Initialize.qbl
@@ -0,0 +1,166 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MacroPlan owner
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    owner.CCEngineLogisticsCostReport( relflush );
+    produtparent              := CCEngineLogisticsCostReport::GetDefaultProductParent();
+    name                      := CCEngineLogisticsCostReport::GetDefaultName();
+    allunit                   := CCEngineLogisticsCostReport::GetDefaultAllUnit();
+    ccunit                    := CCEngineLogisticsCostReport::GetDefaultCCUnit();
+    ccline                    := CCEngineLogisticsCostReport::GetStockingPointCCLine();
+    ccrent                    := CCEngineLogisticsCostReport::GetStockingPointCCRent();
+    
+    startofplanning           := owner.StartOfPlanning().Date();
+    //startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
+    
+    table                     := owner.CCEngineLogisticsCostReport( relnew, ID := name, Name := name );
+    showtable                 := owner.CCEngineLogisticsCostReport( relnew, ID := name + 'Show', Name := name, IsShow := true );
+    search                    := owner.CCEngineLogisticsCostSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit );
+    
+    products                  := construct( Product_MPs );
+    
+    table.GenerateColumn( owner );
+    //澶栫搴撳叆搴撹垂鐢細鍙栬嚜璐㈠姟浜ч噺鎶ヨ〃鐨勪骇閲忥紝鍦ㄤ骇鍝佽〃鏍规嵁鍙戝姩鏈哄彿鎵惧埌瀵瑰簲鐨凣eneration 鍜屾í绾靛埗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜屽叆搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
+    traverse( owner, FinancialProductionSource, source, not source.IsImport() ){//璐㈠姟浜ч噺鎶ヨ〃闈炲鍏�
+      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() );
+          product             := row.Product_MP();
+          productparents      := product.GetAllParent();
+          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            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, 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 );
+              }
+            }
+          }
+        }
+      }
+    }
+    //澶栫搴撳嚭搴撹垂鐢細鍑哄簱閲忕瓑浜庨暱鏄ラ攢閲忥紝鍙栬嚜璐㈠姟閿�閲忔姤琛ㄧ殑閿�閲忥紝鍦ㄤ骇鍝佽〃鏍规嵁鍙戝姩鏈哄彿鎵惧埌瀵瑰簲鐨凣eneration 鍜屾í绾靛埗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜屽嚭搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
+    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() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            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 );
+              }
+            }
+          }
+        }
+      }
+    }
+    //鍘傚唴鍒板绉熷簱杩愯緭璐圭敤锛氾紝鍦� trip plan閲屾壘鍒伴暱鏄ヨ閰嶇嚎杈瑰簱鍒伴暱鏄ュ绉熷簱鐨勮繍杈撴暟閲忥紝锛岋紝鐢ㄥ叕寮忚绠楀緱鍑虹粨鏋滐紝鏈堝害杩涜姹囨��
+    traverse( owner, Unit.Lane.LaneLeg, laneleg ){
+      //璧峰搴撳瓨鐐规槸鍚︽槸闀挎槬瑁呴厤绾胯竟搴�
+      originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.OriginStockingPointID() );
+      isccspline             := table.IsInUnit( originsp, ccline );
+      //鐩殑鍦版槸鍚︽槸闀挎槬澶栫搴�
+      destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
+      isccrent               := table.IsInUnit( destisp, ccrent );
+      if( isccspline and isccrent ){
+        traverse( laneleg, Trip, trip, trip.Arrival().Date() < startofnextyear ){
+          periodtime         := trip.Arrival().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 ){
+            row              := table.GetRow( pit.ProductID() );
+            product          := pit.Product_MP();
+            productparents   := product.GetAllParent();
+            if( exists( productparents, Elements, e, e.ID() = produtparent ) ){////鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+              //鍦ㄥ彂鍔ㄦ満鎴愭湰鍙傛暟琛ㄦ壘鍒板搴旂殑鍖呰瀹归噺
+              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 );
+              }
+            }
+          }
+        }
+      }
+    }
+    //澶栫搴撲粨鍌ㄨ垂鐢細浠撳偍鏁伴噺/鍖呰瀹归噺*浠撳偍鍗曚环锛屽湪Actual inventories閲屽彇鍒伴暱鏄ュ绉熷簱璇ュ彂鍔ㄦ満鐨勪粨鍌ㄩ噺锛屾牴鎹彂鍔ㄦ満鍙锋壘鍒板搴旂殑Generation 鍜屾í绾靛埗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑浠撳偍鍗曚环鍜屽寘瑁呭閲忥紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
+    traverse( owner, StockingPoint_MP, stockingpoint ){
+      //鏄惁灞炰簬闀挎槬澶栫搴�
+      isccrent               := table.IsInUnit( stockingpoint, ccrent );
+      if( isccrent ){
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() ){
+          //鑾峰彇琛�
+          product            := pisp.Product_MP();
+          productparents     := product.GetAllParent();
+          row                := table.GetRow( pisp.ProductID() );
+          if( exists( productparents, Elements, e, e.ID() = produtparent ) ){////鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            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 );
+              }    
+            }
+          }
+        }
+      }
+    }
+    rows := selectsortedset( table, Row, row, row.Name() );
+    i    := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i := i + 1;
+    }
+    //
+    showtable.Generate( search, products );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostReport/_ROOT_Type_CCEngineLogisticsCostReport.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport/_ROOT_Type_CCEngineLogisticsCostReport.qbl
new file mode 100644
index 0000000..763f27b
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport/_ROOT_Type_CCEngineLogisticsCostReport.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CCEngineLogisticsCostReport
+{
+  #keys: '5[415136.0.986400937][415136.0.986400935][0.0.0][415136.0.986400936][415136.0.986400938]'
+  BaseType: Object
+  Description: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+  StructuredName: 'CCEngineLogisticsCostReports'
+}
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_GetDefaultProductParent.qbl b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultProductParent.qbl
new file mode 100644
index 0000000..a0443f2
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_GetDefaultProductParent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultProductParent () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-14-2024 (created)
+    return '浜ф垚鍝�';
+  *]
+}
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..bdd5f28
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostReport0/StaticMethod_Initialize.qbl
@@ -0,0 +1,272 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MacroPlan owner
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-12-2024 (created)
+    owner.DLEngineLogisticsCostReport( relflush );
+    produtparent              := DLEngineLogisticsCostReport::GetDefaultProductParent();
+    name                      := DLEngineLogisticsCostReport::GetDefaultName();
+    allunit                   := DLEngineLogisticsCostReport::GetDefaultAllUnit();
+    ccunit                    := DLEngineLogisticsCostReport::GetDefaultCCUnit();
+    dlunit                    := DLEngineLogisticsCostReport::GetDefaultDLUnit();
+    dlline                    := DLEngineLogisticsCostReport::GetStockingPointDLLine();
+    ccrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
+    dlrent                    := DLEngineLogisticsCostReport::GetStockingPointCCRent();
+    
+    startofplanning           := owner.StartOfPlanning().Date();
+    //startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
+    
+    table                     := owner.DLEngineLogisticsCostReport( relnew, ID := name, Name := name );
+    showtable                 := owner.DLEngineLogisticsCostReport( relnew, ID := name + 'Show', Name := name, IsShow := true );
+    search                    := owner.DLEngineLogisticsCostSearch( relnew, Generation := allunit, MqbMlb := allunit, Power := allunit );
+    
+    products                  := construct( Product_MPs );
+    
+    table.GenerateColumn( owner );
+    //鍙戝線闀挎槬鐨勯攢閲忛渶瑕佸湪trip plan閲岄潰鎵惧埌璧峰搴撳瓨鐐逛负澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撶殑浜у搧 绠楀嚭鍙戝線闀挎槬鐨勯攢閲忓悗锛屽湪鍙戝姩鏈烘垚鏈弬鏁拌〃閲屾壘鍒板搴旂殑鍖呰瀹归噺鍜岄暱鏄ュ叆搴撳崟浠凤紝鐢ㄥ叕寮忚绠楋紝鏈堝害杩涜姹囨��
+    //鍦� 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() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            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() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+            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() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            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 ){
+      product                 := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
+      productparents          := product.GetAllParent();
+      if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+        //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛
+        originsp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
+        isdl                   := table.IsInUnit( originsp, dlunit );
+        //鐩殑鍦板簱瀛樼偣鏄惁鏄暱鏄�
+        destisp                := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
+        iscc                   := table.IsInUnit( destisp, ccunit );
+        if( isdl and iscc ){
+          //鏌ヨ瀵瑰簲鐨勫彂鍔ㄦ満鎴愭湰
+          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, tpcell.TransferPlanColumn().ColumnDate() <> Date::MinDate() ){
+              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, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < startofnextyear ){
+      salessegment            := forecast.SalesSegment_MP();
+      parentsalessegments     := salessegment.GetAllParent();
+      //鏄惁灞炰簬闀挎槬
+      iscc                    := salessegment.Name() = ccunit or exists( parentsalessegments, Elements, psalessegment, psalessegment.Name() = ccunit );
+      if( iscc ){
+        product               := forecast.Product_MP();
+        productparents        := product.GetAllParent();
+        if( exists( productparents, Elements, e, e.ID() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+          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() = produtparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+            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_CCEngineLogisticsCostRow/Attribute_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/Attribute_Name.qbl
new file mode 100644
index 0000000..c4671b2
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.986400984][415136.0.986400983][415136.0.986400985]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/Attribute_RowNr.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..3be673c
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/Attribute_RowNr.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[415136.0.986616244][415136.0.986616243][415136.0.986616245]'
+  Description: '琛屽彿'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/DefaultValue_Name.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/Method_Initialize.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_Initialize.qbl
new file mode 100644
index 0000000..3dfa50b
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_Initialize.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+  CCEngineLogisticsCostColumn column
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := this.Cell( relnew, RentEnterCost         := 0
+                         , RentOutCost                 := 0 
+                         , FactoryToRentTransCost      := 0
+                         , RentStorageCost             := 0 );
+    
+    column.Cell( relinsert, cell );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetFactoryToRentTransCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetFactoryToRentTransCost.qbl
new file mode 100644
index 0000000..5f18e61
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetFactoryToRentTransCost.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetFactoryToRentTransCost (
+  CCEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.FactoryToRentTransCost() + quantity;
+    cell.FactoryToRentTransCost( value );
+  *]
+}
diff --git "a/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentEnterCost\043517.qbl" "b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentEnterCost\043517.qbl"
new file mode 100644
index 0000000..9e1a6db
--- /dev/null
+++ "b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentEnterCost\043517.qbl"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetRentEnterCost (
+  CCEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.RentEnterCost() + quantity;
+    cell.RentEnterCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentOutCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentOutCost.qbl
new file mode 100644
index 0000000..4bc1338
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentOutCost.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetRentOutCost (
+  CCEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.RentOutCost() + quantity;
+    cell.RentOutCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentStorageCost.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentStorageCost.qbl
new file mode 100644
index 0000000..ed29d5b
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/Method_SetRentStorageCost.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetRentStorageCost (
+  CCEngineLogisticsCostColumn column,
+  Number quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+          
+    value := cell.RentStorageCost() + quantity;
+    cell.RentStorageCost( value );
+  *]
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostRow/_ROOT_Type_CCEngineLogisticsCostRow.qbl b/_Main/BL/Type_CCEngineLogisticsCostRow/_ROOT_Type_CCEngineLogisticsCostRow.qbl
new file mode 100644
index 0000000..e879ecf
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostRow/_ROOT_Type_CCEngineLogisticsCostRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CCEngineLogisticsCostRow
+{
+  #keys: '5[415136.0.986400975][415136.0.986400973][0.0.0][415136.0.986400974][415136.0.986400976]'
+  BaseType: Object
+  Description: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄨ'
+  StructuredName: 'CCEngineLogisticsCostRows'
+}
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_CCEngineLogisticsCostSearch/Attribute_Generation.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Generation.qbl
new file mode 100644
index 0000000..9fe72ca
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.986844795][415136.0.986844794][415136.0.986844796]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_MqbMlb.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..9cbf262
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+  #keys: '3[415136.0.986844798][415136.0.986844797][415136.0.986844799]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Power.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Power.qbl
new file mode 100644
index 0000000..5e899bd
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.986844801][415136.0.986844800][415136.0.986844802]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Generation.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Power.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_CCEngineLogisticsCostSearch/_ROOT_Type_CCEngineLogisticsCostSearch.qbl b/_Main/BL/Type_CCEngineLogisticsCostSearch/_ROOT_Type_CCEngineLogisticsCostSearch.qbl
new file mode 100644
index 0000000..a622989
--- /dev/null
+++ b/_Main/BL/Type_CCEngineLogisticsCostSearch/_ROOT_Type_CCEngineLogisticsCostSearch.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CCEngineLogisticsCostSearch
+{
+  #keys: '5[415136.0.986844792][415136.0.986844790][0.0.0][415136.0.986844791][415136.0.986844793]'
+  BaseType: Object
+  Description: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛ㄦ煡璇㈢被'
+  StructuredName: 'CCEngineLogisticsCostSearchs'
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_CleaningCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_CleaningCost.qbl
new file mode 100644
index 0000000..6c17882
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_CleaningCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CleaningCost
+{
+  #keys: '3[413988.0.1476832734][413988.0.1476832733][413988.0.1476832735]'
+  Description: '娓呮礂璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_Coefficient.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_Coefficient.qbl
new file mode 100644
index 0000000..759cfb1
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_Coefficient.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Coefficient
+{
+  #keys: '3[413988.0.1476832767][413988.0.1476832766][413988.0.1476832768]'
+  Description: '绯绘暟'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_EstimatedTotalCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_EstimatedTotalCost.qbl
new file mode 100644
index 0000000..492f6a1
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_EstimatedTotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EstimatedTotalCost
+{
+  #keys: '3[413988.0.1476832744][413988.0.1476832743][413988.0.1476832745]'
+  Description: '棰勮鎬昏垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl
new file mode 100644
index 0000000..5906af1
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_ExternalRentalWarehouseTransportationCosts.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ExternalRentalWarehouseTransportationCosts
+{
+  #keys: '3[413988.0.1476832711][413988.0.1476832710][413988.0.1476832712]'
+  Description: '澶栫搴撹繍杈撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl
new file mode 100644
index 0000000..932717f
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfEmptyShelves
+{
+  #keys: '3[413988.0.1476832678][413988.0.1476832677][413988.0.1476832679]'
+  Description: '绌烘枡鏋舵暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_OutboundExpensesForRentedWarehouses.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_OutboundExpensesForRentedWarehouses.qbl
new file mode 100644
index 0000000..4a5e80d
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_OutboundExpensesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OutboundExpensesForRentedWarehouses
+{
+  #keys: '3[413988.0.1476832701][413988.0.1476832700][413988.0.1476832702]'
+  Description: '澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_RentalWarehouseStorageFees.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_RentalWarehouseStorageFees.qbl
new file mode 100644
index 0000000..09df526
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_RentalWarehouseStorageFees.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RentalWarehouseStorageFees
+{
+  #keys: '3[413988.0.1476832724][413988.0.1476832723][413988.0.1476832725]'
+  Description: '澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_StorageFeesForRentedWarehouses.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_StorageFeesForRentedWarehouses.qbl
new file mode 100644
index 0000000..fe287f9
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_StorageFeesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StorageFeesForRentedWarehouses
+{
+  #keys: '3[413988.0.1476832691][413988.0.1476832690][413988.0.1476832692]'
+  Description: '澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_TotalCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_TotalCost.qbl
new file mode 100644
index 0000000..491e2a8
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_TotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalCost
+{
+  #keys: '3[413988.0.1476832757][413988.0.1476832756][413988.0.1476832758]'
+  Description: '鎬昏垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl b/_Main/BL/Type_CC_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl
new file mode 100644
index 0000000..9d71cb2
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalQuantityOfMaterialRacks
+{
+  #keys: '3[413988.0.1476832665][413988.0.1476832664][413988.0.1476832666]'
+  Description: '鏂欐灦鎬绘暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..87bff90
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    macroPlan.CC_EngineRackRow( relflush );
+    macroPlan.CC_EngineRackColumn( relflush );
+    
+    // 鍒涘缓琛孍VO5 MLB, EVO5 MQB, GEN3 MLB, GEN3 MQB
+    macroPlan.CC_EngineRackRow( relnew, Generation := "EVO5", MLB_MQB := "MLB" );
+    macroPlan.CC_EngineRackRow( relnew, Generation := "EVO5", MLB_MQB := "MQB" );
+    macroPlan.CC_EngineRackRow( relnew, Generation := "GEN3", MLB_MQB := "MLB" );
+    macroPlan.CC_EngineRackRow( relnew, Generation := "GEN3", MLB_MQB := "MQB" );
+    
+    // 鍒涘缓鍒�
+    indexDate := macroPlan.StartOfPlanning().Date().StartOfMonth();
+    for ( i := 0; i < 12; i++ ) {
+      macroPlan.CC_EngineRackColumn( relnew, StartDate := indexDate );
+      indexDate := indexDate.StartOfNextMonth();
+    }
+    
+    // 鍒涘缓鍗曞厓鏍�
+    traverse ( macroPlan, CC_EngineRackRow, ccerr ) {
+      traverse ( macroPlan, CC_EngineRackColumn, ccerc ) {
+        cell := ccerr.CC_EngineRackCell( relnew );
+        
+        // 澶栫搴撳叆搴撹垂鐢紙鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍏ュ簱鍗曚环锛�
+        
+        // 澶栫搴撳嚭搴撹垂鐢紙鍙戝姩鏈轰骇閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍑哄簱鍗曚环锛�
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CC_EngineRackCell/_ROOT_Type_CC_EngineRackCell.qbl b/_Main/BL/Type_CC_EngineRackCell/_ROOT_Type_CC_EngineRackCell.qbl
new file mode 100644
index 0000000..c95d6fa
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackCell/_ROOT_Type_CC_EngineRackCell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CC_EngineRackCell
+{
+  #keys: '5[413988.0.1476832563][413988.0.1476832561][0.0.0][413988.0.1476832562][413988.0.1476832564]'
+  BaseType: Object
+  StructuredName: 'CC_EngineRackCells'
+}
diff --git a/_Main/BL/Type_CC_EngineRackColumn/Attribute_StartDate.qbl b/_Main/BL/Type_CC_EngineRackColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..d9c6682
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackColumn/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[413988.0.1476832655][413988.0.1476832654][413988.0.1476832656]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_CC_EngineRackColumn/_ROOT_Type_CC_EngineRackColumn.qbl b/_Main/BL/Type_CC_EngineRackColumn/_ROOT_Type_CC_EngineRackColumn.qbl
new file mode 100644
index 0000000..99a2deb
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackColumn/_ROOT_Type_CC_EngineRackColumn.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CC_EngineRackColumn
+{
+  #keys: '5[413988.0.1476832558][413988.0.1476832556][0.0.0][413988.0.1476832557][413988.0.1476832559]'
+  BaseType: Object
+  StructuredName: 'CC_EngineRackColumns'
+}
diff --git a/_Main/BL/Type_CC_EngineRackRow/Attribute_Generation.qbl b/_Main/BL/Type_CC_EngineRackRow/Attribute_Generation.qbl
new file mode 100644
index 0000000..8e44d15
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackRow/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[413988.0.1476832621][413988.0.1476832620][413988.0.1476832622]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CC_EngineRackRow/Attribute_MLB_MQB.qbl b/_Main/BL/Type_CC_EngineRackRow/Attribute_MLB_MQB.qbl
new file mode 100644
index 0000000..b8c24e0
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackRow/Attribute_MLB_MQB.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MLB_MQB
+{
+  #keys: '3[413988.0.1476832631][413988.0.1476832630][413988.0.1476832632]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CC_EngineRackRow/Attribute_Name.qbl b/_Main/BL/Type_CC_EngineRackRow/Attribute_Name.qbl
new file mode 100644
index 0000000..1fe00e4
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1476832641][413988.0.1476832640][413988.0.1476832642]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CC_EngineRackRow/Function_CalcName.qbl b/_Main/BL/Type_CC_EngineRackRow/Function_CalcName.qbl
new file mode 100644
index 0000000..cc3f7b8
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackRow/Function_CalcName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcName
+{
+  TextBody:
+  [*
+    // lihongji Aug-12-2024 (created)
+    
+    value := this.Generation() + " " + this.MLB_MQB();
+    
+    this.Name( value );
+  *]
+}
diff --git a/_Main/BL/Type_CC_EngineRackRow/_ROOT_Type_CC_EngineRackRow.qbl b/_Main/BL/Type_CC_EngineRackRow/_ROOT_Type_CC_EngineRackRow.qbl
new file mode 100644
index 0000000..dd3f907
--- /dev/null
+++ b/_Main/BL/Type_CC_EngineRackRow/_ROOT_Type_CC_EngineRackRow.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CC_EngineRackRow
+{
+  #keys: '5[413988.0.1476832553][413988.0.1476832551][0.0.0][413988.0.1476832552][413988.0.1476832554]'
+  BaseType: Object
+  StructuredName: 'CC_EngineRackRows'
+}
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_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl
new file mode 100644
index 0000000..f9d737d
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCLineHaulCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCLineHaulCost
+{
+  #keys: '3[413988.0.1488160127][413988.0.1488160126][413988.0.1488160128]'
+  Description: 'CC闀块�旇繍杈撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCOutboundExpensesForRentedWarehouses.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCOutboundExpensesForRentedWarehouses.qbl
new file mode 100644
index 0000000..aea2366
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCOutboundExpensesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCOutboundExpensesForRentedWarehouses
+{
+  #keys: '3[413988.0.1488160088][413988.0.1488160087][413988.0.1488160089]'
+  Description: 'CC澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCRentalWarehouseStorageFees.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCRentalWarehouseStorageFees.qbl
new file mode 100644
index 0000000..21aceda
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCRentalWarehouseStorageFees.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCRentalWarehouseStorageFees
+{
+  #keys: '3[413988.0.1488160085][413988.0.1488160084][413988.0.1488160086]'
+  Description: 'CC澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCShortDistanceTransportationCosts.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCShortDistanceTransportationCosts.qbl
new file mode 100644
index 0000000..4b0d7c2
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCShortDistanceTransportationCosts.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCShortDistanceTransportationCosts
+{
+  #keys: '3[413988.0.1488160140][413988.0.1488160139][413988.0.1488160141]'
+  Description: 'CC鐭�旇繍杈撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CCStorageFeesForRentedWarehouses.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCStorageFeesForRentedWarehouses.qbl
new file mode 100644
index 0000000..0030285
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CCStorageFeesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCStorageFeesForRentedWarehouses
+{
+  #keys: '3[413988.0.1488160082][413988.0.1488160081][413988.0.1488160083]'
+  Description: 'CC澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_CleaningCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_CleaningCost.qbl
new file mode 100644
index 0000000..65b1569
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_CleaningCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CleaningCost
+{
+  #keys: '3[413988.0.1488160070][413988.0.1488160069][413988.0.1488160071]'
+  Description: '娓呮礂璐圭敤'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_Coefficient.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_Coefficient.qbl
new file mode 100644
index 0000000..033b1b7
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_Coefficient.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Coefficient
+{
+  #keys: '3[413988.0.1488160076][413988.0.1488160075][413988.0.1488160077]'
+  Description: '绯绘暟'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_DLExternalRentalWarehouseTransportationCosts.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLExternalRentalWarehouseTransportationCosts.qbl
new file mode 100644
index 0000000..8d194a3
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLExternalRentalWarehouseTransportationCosts.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLExternalRentalWarehouseTransportationCosts
+{
+  #keys: '3[413988.0.1488160120][413988.0.1488160119][413988.0.1488160121]'
+  Description: 'DL澶栫搴撹繍杈撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_DLOutboundExpensesForRentedWarehouses.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLOutboundExpensesForRentedWarehouses.qbl
new file mode 100644
index 0000000..d28179a
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLOutboundExpensesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLOutboundExpensesForRentedWarehouses
+{
+  #keys: '3[413988.0.1488160107][413988.0.1488160106][413988.0.1488160108]'
+  Description: 'DL澶栫搴撳嚭搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseStorageFees.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseStorageFees.qbl
new file mode 100644
index 0000000..52465fe
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLRentalWarehouseStorageFees.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLRentalWarehouseStorageFees
+{
+  #keys: '3[413988.0.1488160104][413988.0.1488160103][413988.0.1488160105]'
+  Description: '澶栫搴撲粨鍌ㄨ垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_DLStorageFeesForRentedWarehouses.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLStorageFeesForRentedWarehouses.qbl
new file mode 100644
index 0000000..b9c4bed
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_DLStorageFeesForRentedWarehouses.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLStorageFeesForRentedWarehouses
+{
+  #keys: '3[413988.0.1488160101][413988.0.1488160100][413988.0.1488160102]'
+  Description: 'DL澶栫搴撳叆搴撹垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_EstimatedTotalCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_EstimatedTotalCost.qbl
new file mode 100644
index 0000000..b4eae80
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_EstimatedTotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EstimatedTotalCost
+{
+  #keys: '3[413988.0.1488160067][413988.0.1488160066][413988.0.1488160068]'
+  Description: '棰勮鎬昏垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl
new file mode 100644
index 0000000..dc2670d
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_NumberOfEmptyShelves.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfEmptyShelves
+{
+  #keys: '3[413988.0.1488160059][413988.0.1488160058][413988.0.1488160060]'
+  Description: '绌烘枡鏋舵暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_TotalCost.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_TotalCost.qbl
new file mode 100644
index 0000000..13b7227
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_TotalCost.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalCost
+{
+  #keys: '3[413988.0.1488160073][413988.0.1488160072][413988.0.1488160074]'
+  Description: '鎬昏垂鐢�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl b/_Main/BL/Type_DL_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl
new file mode 100644
index 0000000..6ce47f1
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/Attribute_TotalQuantityOfMaterialRacks.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TotalQuantityOfMaterialRacks
+{
+  #keys: '3[413988.0.1488160063][413988.0.1488160062][413988.0.1488160064]'
+  Description: '鏂欐灦鎬绘暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..3c495c1
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    macroPlan.DL_EngineRackRow( relflush );
+    macroPlan.DL_EngineRackColumn( relflush );
+    
+    // 鍒涘缓琛孍VO5 MLB, EVO5 MQB, GEN3 MLB, GEN3 MQB
+    macroPlan.DL_EngineRackRow( relnew, Generation := "EVO5", MLB_MQB := "MLB" );
+    macroPlan.DL_EngineRackRow( relnew, Generation := "EVO5", MLB_MQB := "MQB" );
+    macroPlan.DL_EngineRackRow( relnew, Generation := "GEN3", MLB_MQB := "MLB" );
+    macroPlan.DL_EngineRackRow( relnew, Generation := "GEN3", MLB_MQB := "MQB" );
+    
+    // 鍒涘缓鍒�
+    indexDate := macroPlan.StartOfPlanning().Date().StartOfMonth();
+    for ( i := 0; i < 12; i++ ) {
+      macroPlan.DL_EngineRackColumn( relnew, StartDate := indexDate );
+      indexDate := indexDate.StartOfNextMonth();
+    }
+    
+    // 鍒涘缓鍗曞厓鏍�
+    traverse ( macroPlan, DL_EngineRackRow, dlerr ) {
+      traverse ( macroPlan, DL_EngineRackColumn, dlerc ) {
+        cell := dlerr.DL_EngineRackCell( relnew );
+        
+        // 澶栫搴撳叆搴撹垂鐢紙鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍏ュ簱鍗曚环锛�
+        
+        // 澶栫搴撳嚭搴撹垂鐢紙鍙戝姩鏈轰骇閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍑哄簱鍗曚环锛�
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_DL_EngineRackCell/_ROOT_Type_DL_EngineRackCell.qbl b/_Main/BL/Type_DL_EngineRackCell/_ROOT_Type_DL_EngineRackCell.qbl
new file mode 100644
index 0000000..b4b91cb
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackCell/_ROOT_Type_DL_EngineRackCell.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DL_EngineRackCell
+{
+  #keys: '5[413988.0.1488132575][413988.0.1488132573][0.0.0][413988.0.1488132574][413988.0.1488132576]'
+  BaseType: Object
+  StructuredName: 'DL_EngineRackCells'
+}
diff --git a/_Main/BL/Type_DL_EngineRackColumn/Attribute_StartDate.qbl b/_Main/BL/Type_DL_EngineRackColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..361c13f
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackColumn/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[413988.0.1488132628][413988.0.1488132627][413988.0.1488132629]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_DL_EngineRackColumn/_ROOT_Type_DL_EngineRackColumn.qbl b/_Main/BL/Type_DL_EngineRackColumn/_ROOT_Type_DL_EngineRackColumn.qbl
new file mode 100644
index 0000000..0dffeed
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackColumn/_ROOT_Type_DL_EngineRackColumn.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DL_EngineRackColumn
+{
+  #keys: '5[413988.0.1488132585][413988.0.1488132583][0.0.0][413988.0.1488132584][413988.0.1488132586]'
+  BaseType: Object
+  StructuredName: 'DL_EngineRackColumns'
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/Attribute_Generation.qbl b/_Main/BL/Type_DL_EngineRackRow/Attribute_Generation.qbl
new file mode 100644
index 0000000..4d1931e
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[413988.0.1488132589][413988.0.1488132588][413988.0.1488132590]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/Attribute_MLB_MQB.qbl b/_Main/BL/Type_DL_EngineRackRow/Attribute_MLB_MQB.qbl
new file mode 100644
index 0000000..a676182
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/Attribute_MLB_MQB.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MLB_MQB
+{
+  #keys: '3[413988.0.1488132595][413988.0.1488132594][413988.0.1488132596]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/Attribute_Name.qbl b/_Main/BL/Type_DL_EngineRackRow/Attribute_Name.qbl
new file mode 100644
index 0000000..19a00a9
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[413988.0.1488132592][413988.0.1488132591][413988.0.1488132593]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/DefaultValue_Generation.qbl b/_Main/BL/Type_DL_EngineRackRow/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/DefaultValue_MLB_MQB.qbl b/_Main/BL/Type_DL_EngineRackRow/DefaultValue_MLB_MQB.qbl
new file mode 100644
index 0000000..b629d82
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/DefaultValue_MLB_MQB.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MLB_MQB
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/DefaultValue_Name.qbl b/_Main/BL/Type_DL_EngineRackRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/Function_CalcName.qbl b/_Main/BL/Type_DL_EngineRackRow/Function_CalcName.qbl
new file mode 100644
index 0000000..cc3f7b8
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/Function_CalcName.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcName
+{
+  TextBody:
+  [*
+    // lihongji Aug-12-2024 (created)
+    
+    value := this.Generation() + " " + this.MLB_MQB();
+    
+    this.Name( value );
+  *]
+}
diff --git a/_Main/BL/Type_DL_EngineRackRow/_ROOT_Type_DL_EngineRackRow.qbl b/_Main/BL/Type_DL_EngineRackRow/_ROOT_Type_DL_EngineRackRow.qbl
new file mode 100644
index 0000000..9fb52b5
--- /dev/null
+++ b/_Main/BL/Type_DL_EngineRackRow/_ROOT_Type_DL_EngineRackRow.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type DL_EngineRackRow
+{
+  #keys: '5[413988.0.1488132580][413988.0.1488132578][0.0.0][413988.0.1488132579][413988.0.1488132581]'
+  BaseType: Object
+  StructuredName: 'DL_EngineRackRows'
+}
diff --git a/_Main/BL/Type_EnginePipelineColumn/Attribute_EndDate.qbl b/_Main/BL/Type_EnginePipelineColumn/Attribute_EndDate.qbl
new file mode 100644
index 0000000..63fc0ea
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineColumn/Attribute_EndDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[415136.0.999760039][415136.0.999760038][415136.0.999760040]'
+  Description: '缁撴潫鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_EnginePipelineColumn/Attribute_Period.qbl b/_Main/BL/Type_EnginePipelineColumn/Attribute_Period.qbl
deleted file mode 100644
index b07e6fa..0000000
--- a/_Main/BL/Type_EnginePipelineColumn/Attribute_Period.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Period
-{
-  #keys: '3[415136.0.883574681][415136.0.883574680][415136.0.883574682]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_EnginePipelineColumn/Attribute_StartDate.qbl b/_Main/BL/Type_EnginePipelineColumn/Attribute_StartDate.qbl
new file mode 100644
index 0000000..0453f82
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineColumn/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.999760029][415136.0.999760028][415136.0.999760030]'
+  Description: '寮�濮嬫棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl b/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
index 846f44a..cd19c53 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_Generate.qbl
@@ -9,7 +9,6 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     table                   := selectobject( this, Source.Report, report, not report.IsShow() );
-    
     //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
     this.Clear( search.TimeUnit(), search.StartDate(), search.EndDate() );
     Transaction::Transaction().Propagate( attribute( EnginePipelineColumn, Index ) );
@@ -44,9 +43,22 @@
       showrowccproduction := EnginePipelineRow::CraeteCellValueForRow( this, productcolumn, attricolumn, row.Name(), '闀挎槬浜ч噺', rownr + 2, false );
       showrowdemand       := EnginePipelineRow::CraeteCellValueForRow( this, productcolumn, attricolumn, row.Name(), '闇�姹�', rownr + 3, false );
       rownr               := rownr + 4;
-      traverse( models, Elements, model ){
-        EnginePipelineRow::CraeteCellValueForRow( this, productcolumn, attricolumn, row.Name(), model, rownr, false ); 
-        rownr             := rownr + 1;
+      modelsnr            := rownr + 3;
+      models              := construct( Strings );
+      uniquemodels        := selectuniquevalues( row, Cell.Demand, demand, true, demand.Model() );
+    
+      traverse( uniquemodels, Elements, e ){
+    
+        if( rownr < modelsnr ){
+          EnginePipelineRow::CraeteCellValueForRow( this, productcolumn, attricolumn, row.Name(), e, rownr, false ); 
+          models.Add( e );
+          rownr             := rownr + 1;
+        }
+      }
+    
+      for( rownr := rownr; rownr < modelsnr; rownr ++ ){
+    
+        EnginePipelineRow::CraeteCellValueForRow( this, productcolumn, attricolumn, row.Name(), '', rownr, false ); 
       }
       showrowinventory    :=  EnginePipelineRow::CraeteCellValueForRow( this, productcolumn, attricolumn, row.Name(), '搴撳瓨', rownr, false );
     
@@ -60,6 +72,7 @@
           production              := column.CellValue( relnew, Value := [String]cell.ProductionQuantity() );
           showrowproduction.CellValue( relinsert, production );
           sumproduction           := selectobject( column, CellValue, c, c.Row() = sumrowproduction );
+    
           if( isnull( sumproduction ) ){
             sumproduction         := column.CellValue( relnew, Value := [String]0 );
             sumrowproduction.CellValue( relinsert, sumproduction );
@@ -71,6 +84,7 @@
           dlproduction             := column.CellValue( relnew, Value := [String]dlproductionquantity );
           showrowdlproduction.CellValue( relinsert, dlproduction );
           sumdlproduction          := selectobject( column, CellValue, c, c.Row() = sumrowdlproduction );
+    
           if( isnull( sumdlproduction ) ){
             sumdlproduction        := column.CellValue( relnew, Value := [String]0 );
             sumrowdlproduction.CellValue( relinsert, sumdlproduction );
@@ -82,6 +96,7 @@
           ccproduction             := column.CellValue( relnew, Value := [String]ccproductionquantity );
           showrowccproduction.CellValue( relinsert, ccproduction );
           sumccproduction          := selectobject( column, CellValue, c, c.Row() = sumrowccproduction );
+    
           if( isnull( sumccproduction ) ){
             sumccproduction        := column.CellValue( relnew, Value := [String]0 );
             sumrowccproduction.CellValue( relinsert, sumccproduction );
@@ -98,25 +113,26 @@
           }
           sumdemand.Value( [String]( [Real]sumdemand.Value() + cell.DemandQuantity() ) );
           
-          traverse( cell, Demand, demand ){
-            demandrow              := selectobject( this, Row, r, r.Name() = row.Name() and exists( r, CellValue, cv, cv.Value() = demand.Model() ) );
-            sumdemandrow           := selectobject( this, Row, r, r.Name() = 'SUM' and exists( r, CellValue, cv, cv.Value() = demand.Model() ) );
+          traverse( cell, Demand, demand, exists( models, Elements, model, model = demand.Model() ) ){
+            demandrow              := selectobject( this, Row, r, r.Name() = row.Name() and exists( r, CellValue, cv, cv.Column() = attricolumn and cv.Value() = demand.Model() ) );
+            sumdemandrow           := selectobject( this, Row, r, r.Name() = 'SUM' and exists( r, CellValue, cv, cv.Column() = attricolumn and cv.Value() = demand.Model() ) );
     
             if( not isnull( demandrow ) ){
               demandcell             := column.CellValue( relnew, Value := [String]demand.Quantity() );
               demandrow.CellValue( relinsert, demandcell );
             }
-            
+            if( not isnull( sumdemandrow ) ){
             sumdemandcell          := selectobject( column, CellValue, c, c.Row() = sumdemandrow );
             if( isnull( sumdemandcell ) ){
               sumdemandcell        := column.CellValue( relnew, Value := [String]0 );
               sumdemandrow.CellValue( relinsert, sumdemandcell );
             }
             sumdemandcell.Value( [String]( [Real]sumdemandcell.Value() + demand.Quantity() ) );
+            }
           }
     
           for( demandr := showrowdemand.RowNr() + 1; demandr < showrowinventory.RowNr(); demandr := demandr + 1 ){
-            demandrow              := selectobject( this, Row, r, r.RowNr() = demandr );
+            demandrow              := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = row.Name() );
             if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){
               demandcell           := column.CellValue( relnew, Value := '' );
               demandrow.CellValue( relinsert, demandcell );
@@ -139,12 +155,20 @@
     }
     traverse( this, Column, column ){
       for( demandr := sumrowdemand.RowNr() + 1; demandr < sumrowinventory.RowNr(); demandr := demandr + 1 ){
-        demandrow              := selectobject( this, Row, r, r.RowNr() = demandr );
+        demandrow              := selectobject( this, Row, r, r.RowNr() = demandr and r.Name() = 'SUM' );
+    //    info( '------------------14----------------' );
         if( not isnull( demandrow ) and not exists( demandrow, CellValue, cv, cv.Column() = column ) ){
           demandcell           := column.CellValue( relnew, Value := '' );
           demandrow.CellValue( relinsert, demandcell );
         }
       }
     }
+    
+    rows := selectsortedset( this, Row, row, row.Name(), row.RowNr() );
+    i    := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i := i + 1;
+    }
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl b/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
index 525a923..c4e150b 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_GenerateColumn.qbl
@@ -17,13 +17,13 @@
         periodtime          := period.StartDate();
         periodname          := periodtime.Format( "M2/D2/Y" );
         
-        this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+        this.Column( relnew, Name := periodname, StartDate := periodtime, EndDate := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
       }
       
       if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
         if( period.StartDate() = weekstart ){
           weekperiodname    := weekstart.Format( "M2/D2/Y" );
-          this.Column( relnew, Name := weekperiodname, Period := weekstart, TimeUnit := Translations::MP_GlobalParameters_Week() );
+          this.Column( relnew, Name := weekperiodname, StartDate := weekstart, EndDate := ( weekstart + Duration::Days( 6 ) ).Date(), TimeUnit := Translations::MP_GlobalParameters_Week() );
           weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
         }
       }
diff --git a/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl b/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
index 97975cf..751a42f 100644
--- a/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/Method_GetColumnByUnit.qbl
@@ -8,9 +8,9 @@
   TextBody:
   [*
     // 鐢勫叞楦� Aug-7-2024 (created)
-    periodname := period.Format( "M2/D2/Y" );
+    //periodname := period.Format( "M2/D2/Y" );
     
-    column := selectobject( this, Column, column, column.Name() = periodname and column.Period() = period and column.TimeUnit() = unit );
+    column := selectobject( this, Column, column, column.StartDate() <= period and column.EndDate() >= period and column.TimeUnit() = unit );
     
     return column;
   *]
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCALineUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCALineUnit.qbl
new file mode 100644
index 0000000..3afba65
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCALineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCALineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCMPLineUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCMPLineUnit.qbl
new file mode 100644
index 0000000..0c32fd7
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultCCMPLineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCMPLineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬鏈哄姞绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLALineUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLALineUnit.qbl
new file mode 100644
index 0000000..153da57
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLALineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLALineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLMPLineUnit.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLMPLineUnit.qbl
new file mode 100644
index 0000000..48e75f8
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultDLMPLineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLMPLineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛鏈哄姞绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl
index 2948919..cc879a1 100644
--- a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultName.qbl
@@ -5,6 +5,6 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return 'Machining pipelines';
+    return 'Engine pipelines';
   *]
 }
diff --git a/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultProductParent.qbl b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultProductParent.qbl
new file mode 100644
index 0000000..a0443f2
--- /dev/null
+++ b/_Main/BL/Type_EnginePipelineReport/StaticMethod_GetDefaultProductParent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultProductParent () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-14-2024 (created)
+    return '浜ф垚鍝�';
+  *]
+}
diff --git a/_Main/BL/Type_EnginePipelineRow/Method_SetCellDemandValue.qbl b/_Main/BL/Type_EnginePipelineRow/Method_SetCellDemandValue.qbl
index b1ce10b..ab43596 100644
--- a/_Main/BL/Type_EnginePipelineRow/Method_SetCellDemandValue.qbl
+++ b/_Main/BL/Type_EnginePipelineRow/Method_SetCellDemandValue.qbl
@@ -11,10 +11,10 @@
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := selectobject( this, Cell, cell, cell.Column() = column );
     
-    demand := selectobject( cell, Demand, demand, demand.EngineType() = cell.Row().Name() and demand.Model() = segment and demand.Period() = column.Period() );
+    demand := selectobject( cell, Demand, demand, demand.EngineType() = cell.Row().Name() and demand.Model() = segment and demand.Period() = column.StartDate() );
     
     if( isnull( demand ) ){
-      demand := cell.Demand( relnew, EngineType := cell.Row().Name(), Period := column.Period(), Model := segment, Quantity := 0 );
+      demand := cell.Demand( relnew, EngineType := cell.Row().Name(), Period := column.StartDate(), Model := segment, Quantity := 0 );
     }
     
     demand.Quantity( demand.Quantity() + quantity );
diff --git a/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl b/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
index 97c34c8..9cff783 100644
--- a/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
+++ b/_Main/BL/Type_EnginePipelineRow/Method_SetCellProductionValue.qbl
@@ -14,7 +14,7 @@
     production := cell.Production();
     
     if( isnull( production ) ){
-      production := cell.Production( relnew, EngineType := cell.Row().Name(), Period := column.Period(), DLProduction := 0, CCProduction := 0 );
+      production := cell.Production( relnew, EngineType := cell.Row().Name(), Period := column.StartDate(), DLProduction := 0, CCProduction := 0 );
     }
     
     if( isccunit ){
diff --git a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
index b18fbac..f9e39e3 100644
--- a/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_EnginePipelineSource/StaticMethod_Initialize.qbl
@@ -8,8 +8,13 @@
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
     owner.EnginePipelineSource( relflush );
-    ccunit                    := EnginePipelineReport::GetDefaultCCUnit();
-    dlunit                    := EnginePipelineReport::GetDefaultDLUnit();
+    //ccunit                    := EnginePipelineReport::GetDefaultCCUnit();
+    //dlunit                    := EnginePipelineReport::GetDefaultDLUnit();
+    productparent             := EnginePipelineReport::GetDefaultProductParent();
+    ccalineunit               := EnginePipelineReport::GetDefaultCCALineUnit();
+    dlalienunit               := EnginePipelineReport::GetDefaultDLALineUnit()
+    ccmplineunit              := EnginePipelineReport::GetDefaultCCMPLineUnit()
+    dlmplineunit              := EnginePipelineReport::GetDefaultDLMPLineUnit();
     //allunit                   := EnginePipelineReport::GetDefaultAllUnit();
     source                    := owner.EnginePipelineSource( relnew, Name := EnginePipelineReport::GetDefaultName() );
     table                     := source.Report( relnew, ID := source.Name(), Name := source.Name() );
@@ -27,55 +32,62 @@
       unit                    := stockingpoint.Unit();
       parentunits             := unit.GetAllParent();
       //鏄惁灞炰簬闀挎槬宸ュ巶
-      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      iscc         := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
       //鏄惁灞炰簬澶ц繛宸ュ巶
-      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
+      isdl         := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
       
-      traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() ){
-        weekstart             := owner.StartOfPlanning().Date();
-        pispips               := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
-                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+      traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() 
+                and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent ) 
+                and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 ) ) ){
+        weekstart           := owner.StartOfPlanning().Date();
+        pispips             := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
+                                                    and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
         row := table.GetRow( pisp.ProductID() );
         traverse( pispips, Elements, pispip ){
           //澶�
-          daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
+          daycolumn         := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
           //鍛�
-          weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
-          supplyquantity      := [Real]ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
-          inventoryquantity   := [Real]ceil( pispip.PlannedInventoryLevelEnd() );//鍚戜笂鍙栨暣
+          weekcolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(),  pispip.Start().Date() );
+          supplyquantity    := [Number]pispip.NewSupplyQuantity();//鍥涜垗浜斿叆
+          inventoryquantity := [Number]pispip.PlannedInventoryLevelEnd();//鍥涜垗浜斿叆
           //浜ч噺鏄姞鎬�
           if( iscc or isdl ){
-            row.SetCellProductionValue( daycolumn, iscc, supplyquantity );
-            row.SetCellProductionValue( weekcolumn, iscc, supplyquantity );
+            row.SetCellProductionValue( daycolumn, iscc, [Real]supplyquantity );
+            row.SetCellProductionValue( weekcolumn, iscc, [Real]supplyquantity );
           }
           //搴撳瓨闇�瑕佸彇鏈�鍚庝竴澶�
-          row.SetCellInventoryValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
-    
+          row.SetCellInventoryValue( daycolumn, [Real]inventoryquantity );
+      
           if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
-            weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
-            
-            row.SetCellInventoryValue( weekcolumn, inventoryquantity );
+            weekstart       := ( weekstart + Duration::Days( 7 ) ).Date();
+              
+            row.SetCellInventoryValue( weekcolumn, [Real]inventoryquantity );
           } 
         }
       }
     }
     
     //鐢熸垚闇�姹傛暟鎹�
-    traverse( owner, SalesDemand.astype( Forecast ), forecast ){
-      row                   := table.GetRow( forecast.ProductID() );
-      weekstart             := owner.StartOfPlanning().Date();
-      traverse( forecast, PlanningSalesDemandInPeriod, psdip ){
+    traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < endperiod.StartDate() and forecast.Quantity() <> 0 
+              and exists( forecast.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent )
+              and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){
+      row                 := table.GetRow( forecast.ProductID() );
+    //  weekstart           := owner.StartOfPlanning().Date();
+      traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
         //澶�
-        daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), psdip.StartDate() );
+        daycolumn         := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), psdip.StartDate() );
         //鍛�
-        weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
-        
+        weekcolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), psdip.StartDate() );
+          
         if( not isnull( daycolumn ) ){
           row.SetCellDemandValue( daycolumn, forecast.SalesSegmentName(), forecast.Quantity() );
         }
         if( not isnull( weekcolumn ) ){
           row.SetCellDemandValue( weekcolumn, forecast.SalesSegmentName(), forecast.Quantity() );
         }
+    //    if( psdip.StartDate() = ( weekstart + Duration::Days( 6 ) ).Date() or psdip.PeriodStart() = endperiod.StartDate() ){
+    //      weekstart       := ( weekstart + Duration::Days( 7 ) ).Date();
+    //    } 
       }
     }
     
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_Generation.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_Generation.qbl
new file mode 100644
index 0000000..e13e182
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.978920071][415136.0.978920070][415136.0.978920072]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_MqbMlb.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..ebd546f
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+  #keys: '3[415136.0.978920068][415136.0.978920067][415136.0.978920069]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_Power.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_Power.qbl
new file mode 100644
index 0000000..c34c582
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.978920065][415136.0.978920064][415136.0.978920066]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_ProductID.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_ProductID.qbl
new file mode 100644
index 0000000..a8b2d86
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[415136.0.978920045][415136.0.978920044][415136.0.978920046]'
+  Description: '浜у搧ID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_Quantity.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_Quantity.qbl
new file mode 100644
index 0000000..cc92bcf
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[415136.0.978920075][415136.0.978920074][415136.0.978920076]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_StartDate.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_StartDate.qbl
new file mode 100644
index 0000000..dc1960d
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.978920085][415136.0.978920084][415136.0.978920086]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Attribute_Unit.qbl b/_Main/BL/Type_FinancialProductionImportData/Attribute_Unit.qbl
new file mode 100644
index 0000000..03cce08
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.978920055][415136.0.978920054][415136.0.978920056]'
+  Description: '宸ュ巶鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/DefaultValue_Generation.qbl b/_Main/BL/Type_FinancialProductionImportData/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_FinancialProductionImportData/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/DefaultValue_Power.qbl b/_Main/BL/Type_FinancialProductionImportData/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/Function_CalcQuantity.qbl b/_Main/BL/Type_FinancialProductionImportData/Function_CalcQuantity.qbl
new file mode 100644
index 0000000..eb3e7a1
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/Function_CalcQuantity.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcQuantity
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-8-2024 (created)
+    
+    value := guard( [Number]this.Cell().Value(), 0 );
+    
+    this.Quantity( value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionImportData/_ROOT_Type_FinancialProductionImportData.qbl b/_Main/BL/Type_FinancialProductionImportData/_ROOT_Type_FinancialProductionImportData.qbl
new file mode 100644
index 0000000..b278a5d
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionImportData/_ROOT_Type_FinancialProductionImportData.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialProductionImportData
+{
+  #keys: '5[415136.0.978920028][415136.0.978920026][0.0.0][415136.0.978920027][415136.0.978920029]'
+  BaseType: Object
+  Description: '璐㈠姟浜ч噺鎶ヨ〃浜岀淮琛�'
+  StructuredName: 'FinancialProductionImportDatas'
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl b/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl
index 8de3af4..194f329 100644
--- a/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/Method_GetRowByUnit.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method GetRowByUnit (
-  String product,
+  Product_MP product,
   String unit
 ) as FinancialProductionRow
 {
@@ -9,12 +9,13 @@
   TextBody:
   [*
     // 鐢勫叞楦� Aug-2-2024 (created)
-    row := selectobject( this, FinancialProductionRow, row, row.Name() = product and row.Unit() = unit );
+    row := selectobject( this, FinancialProductionRow, row, row.Name() = product.ID() and row.Unit() = unit );
     if( isnull( row ) ){
       //鍒濆鍖栧崟鍏冩牸
-      row := this.FinancialProductionRow( relnew, Name := product, Unit := unit );
+      row := this.FinancialProductionRow( relnew, Name := product.ID(), Unit := unit );
+      row.Product_MP( relset, product );
       traverse( this, FinancialProductionColumn, column ){
-        row.Initialize( column, unit );
+        row.Initialize( column, product, unit );
       }
     }
     return row;
diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCALineUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCALineUnit.qbl
new file mode 100644
index 0000000..3afba65
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCALineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCALineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCMPLineUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCMPLineUnit.qbl
new file mode 100644
index 0000000..0c32fd7
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCMPLineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCMPLineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬鏈哄姞绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLALineUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLALineUnit.qbl
new file mode 100644
index 0000000..153da57
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLALineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLALineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLMPLineUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLMPLineUnit.qbl
new file mode 100644
index 0000000..48e75f8
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLMPLineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLMPLineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛鏈哄姞绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git "a/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl" "b/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl"
index ca0352d..9f6d003 100644
--- "a/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl"
+++ "b/_Main/BL/Type_FinancialProductionRow/Method_Initialize\043110.qbl"
@@ -2,14 +2,25 @@
 #parent: #root
 Method Initialize (
   FinancialProductionColumn column,
+  Product_MP product,
   String unit
 )
 {
+  Description: '鍒濆鍖栧崟鍏冩牸'
   TextBody:
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
     cell := column.FinancialProductionCell( relnew, Value := '' );
     
     this.FinancialProductionCell( relinsert, cell );
+    if( unit <> FinancialProductionReport::GetDefaultAllUnit() ){
+      importdata := product.MacroPlan().FPImportData( relnew, Generation := product.Generation()
+                                                      , MqbMlb := product.MQBMLB()
+                                                      , Power := product.Power()
+                                                      , ProductID := product.ID()
+                                                      , StartDate := column.Period()
+                                                      , Unit := unit );
+      importdata.Cell( relset, cell );
+    }
   *]
 }
diff --git a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
index 63d3a59..dc85d48 100644
--- a/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialProductionSource/StaticMethod_Initialize.qbl
@@ -8,8 +8,13 @@
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
     owner.FinancialProductionSource( relflush );
+    owner.FPImportData( relflush );
     ccunit                    := FinancialProductionReport::GetDefaultCCUnit();
     dlunit                    := FinancialProductionReport::GetDefaultDLUnit();
+    ccalineunit               := FinancialProductionReport::GetDefaultCCALineUnit();
+    dlalienunit               := FinancialProductionReport::GetDefaultDLALineUnit()
+    ccmplineunit              := FinancialProductionReport::GetDefaultCCMPLineUnit()
+    dlmplineunit              := FinancialProductionReport::GetDefaultDLMPLineUnit();
     allunit                   := FinancialProductionReport::GetDefaultAllUnit();
     source                    := owner.FinancialProductionSource( relnew, IsImport := false, Name := FinancialProductionReport::GetDefaultName() );
     table                     := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
@@ -34,24 +39,22 @@
       unit         := stockingpoint.Unit();
       parentunits  := unit.GetAllParent();
       //鏄惁灞炰簬闀挎槬宸ュ巶
-      iscc         := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      iscc         := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
       //鏄惁灞炰簬澶ц繛宸ュ巶
-      isdl         := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
+      isdl         := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
       if( iscc or isdl ){
-        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() ){
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() 
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ) ){
           //鑾峰彇宸ュ巶琛�
-          factoryrow := table.GetRowByUnit( pisp.ProductID(), ifexpr( iscc, ccunit, dlunit ) );
+          factoryrow := table.GetRowByUnit( pisp.Product_MP(), ifexpr( iscc, ccunit, dlunit ) );
           //鑾峰彇鍚堣琛�
-          allrow     := table.GetRowByUnit( pisp.ProductID(), allunit );
+          allrow     := table.GetRowByUnit( pisp.Product_MP(), allunit );
           products.Add( pisp.Product_MP() );
           //褰損roduct planning鐨勬棩鏈熷尯闂村湪闇�瑕佺殑鏃ユ湡鍖洪棿鍐� 
-          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear
-    //                and ( ( pispip.Period_MP().StartDate().StartOfMonth() = startofplanning.StartOfMonth() and currentperiods.Find( pispip.Period_MP() ) >= 0 )
-    //                 or ( pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() and pispip.Period_MP().StartDate() < startofnextyear ) ) 
-                    ){
+          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.NewSupplyQuantity() <> 0 ){
             periodtime := pispip.Start().StartOfMonth().Date();
             periodname := periodtime.Format( "M2/D2/Y" );
-            quantity   := ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
+            quantity   := [Number]pispip.NewSupplyQuantity();//鍥涜垗浜斿叆
             
             column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
             
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_Generation.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_Generation.qbl
new file mode 100644
index 0000000..9ddab1f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.984654696][415136.0.984654695][415136.0.984654697]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_MqbMlb.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..904c6ff
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+  #keys: '3[415136.0.984654699][415136.0.984654698][415136.0.984654700]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_Power.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_Power.qbl
new file mode 100644
index 0000000..415414c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.984654702][415136.0.984654701][415136.0.984654703]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_ProductID.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_ProductID.qbl
new file mode 100644
index 0000000..67d9741
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[415136.0.984654705][415136.0.984654704][415136.0.984654706]'
+  Description: '浜у搧ID'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_Quantity.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_Quantity.qbl
new file mode 100644
index 0000000..1b2d6cd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[415136.0.984654708][415136.0.984654707][415136.0.984654709]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_StartDate.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_StartDate.qbl
new file mode 100644
index 0000000..ae1a6f4
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.984654711][415136.0.984654710][415136.0.984654712]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Attribute_Unit.qbl b/_Main/BL/Type_FinancialSalesImportData/Attribute_Unit.qbl
new file mode 100644
index 0000000..900f457
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.984654714][415136.0.984654713][415136.0.984654715]'
+  Description: '宸ュ巶鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Generation.qbl b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Power.qbl b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/DefaultValue_ProductID.qbl b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Unit.qbl b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/Function_CalcQuantity.qbl b/_Main/BL/Type_FinancialSalesImportData/Function_CalcQuantity.qbl
new file mode 100644
index 0000000..f8f1de8
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/Function_CalcQuantity.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcQuantity
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-9-2024 (created)
+    
+    value := guard( [Number]this.Cell().Value(), 0 );
+    
+    this.Quantity( value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesImportData/_ROOT_Type_FinancialSalesImportData.qbl b/_Main/BL/Type_FinancialSalesImportData/_ROOT_Type_FinancialSalesImportData.qbl
new file mode 100644
index 0000000..48b4d84
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesImportData/_ROOT_Type_FinancialSalesImportData.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesImportData
+{
+  #keys: '5[415136.0.984654693][415136.0.984654691][0.0.0][415136.0.984654692][415136.0.984654694]'
+  BaseType: Object
+  Description: '璐㈠姟閿�鎶ヨ〃浜岀淮琛�'
+  StructuredName: 'FinancialSalesImportDatas'
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
index 6cbc77d..aeb1ee4 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
@@ -2,18 +2,19 @@
 #parent: #root
 Method GetRow (
   String salessegment,
-  String product
+  Product_MP product
 ) as FinancialSalesRow
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
-    row := selectobject( this, FinancialSalesRow, row, row.Name() = product and row.Unit() = salessegment );
+    row := selectobject( this, FinancialSalesRow, row, row.Name() = product.ID() and row.Unit() = salessegment );
     
     if( isnull( row ) ){
-      row := this.FinancialSalesRow( relnew, Name := product, Unit := salessegment );
+      row := this.FinancialSalesRow( relnew, Name := product.ID(), Unit := salessegment );
+      row.Product_MP( relset, product );
       //鍒濆鍖栧崟鍏冩牸
-      row.InitializeCell( this );
+      row.InitializeCell( this, product );
     }
     
     return row;
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_IsInUnit.qbl b/_Main/BL/Type_FinancialSalesReport/Method_IsInUnit.qbl
index 02e06b4..57394ad 100644
--- a/_Main/BL/Type_FinancialSalesReport/Method_IsInUnit.qbl
+++ b/_Main/BL/Type_FinancialSalesReport/Method_IsInUnit.qbl
@@ -11,6 +11,6 @@
     // 鐢勫叞楦� Aug-5-2024 (created)
     unit                  := sp.Unit();
     parentunits           := unit.GetAllParent();
-    return unit.ID() = unitname or exists( parentunits, Elements, punit, punit.ID() = unitname );
+    return sp.ID() = unitname or unit.ID() = unitname or exists( parentunits, Elements, punit, punit.ID() = unitname );
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
index e262727..658b23c 100644
--- a/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
@@ -2,14 +2,25 @@
 #parent: #root
 Method Initialize (
   FinancialSalesColumn column,
+  Product_MP product,
   String unit
 )
 {
+  Description: '鍒濆鍖栧崟鍏冩牸'
   TextBody:
   [*
-    // 鐢勫叞楦� Jun-24-2024 (created)
+    // 鐢勫叞楦� Jun-24-2024 (created) 
     cell := column.FinancialSalesCell( relnew, Value := '' );
     
     this.FinancialSalesCell( relinsert, cell );
+    if( unit <> FinancialProductionReport::GetDefaultAllUnit() ){
+      importdata := product.MacroPlan().FSImportData( relnew, Generation := product.Generation()
+                                                      , MqbMlb := product.MQBMLB()
+                                                      , Power := product.Power()
+                                                      , ProductID := product.ID()
+                                                      , StartDate := column.Period()
+                                                      , Unit := unit );
+      importdata.Cell( relset, cell );
+    }
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
index 0c6ebc7..a578477 100644
--- a/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
+++ b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
@@ -1,14 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 Method InitializeCell (
-  FinancialSalesReport table
+  FinancialSalesReport table,
+  Product_MP product
 )
 {
   TextBody:
   [*
     // 鐢勫叞楦� Jun-28-2024 (created)
     traverse( table, FinancialSalesColumn, column ){
-      this.Initialize( column, this.Unit() );
+      this.Initialize( column, product, this.Unit() );
     }
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
index cf1176e..31f6bcd 100644
--- a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -32,7 +32,8 @@
     table.GenerateColumn( owner );
     
     //棣栧厛鍦╢orecast鐣岄潰鏌ユ壘sales segment涓洪暱鏄ョ殑鎵�鏈夐渶姹傦紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝侊紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲�
-    traverse( owner, SalesDemand.astype( Forecast ), forecast, forecast.StartDate() < startofnextyear ){
+    traverse( owner, SalesDemand.astype( Forecast ), forecast, not isnull( forecast.SalesSegment_MP() ) and forecast.StartDate() < startofnextyear and forecast.Quantity() <> 0 
+              and exists( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ) ){
       salessegment            := forecast.SalesSegment_MP();
       parentsalessegments     := salessegment.GetAllParent();
       //鏄惁灞炰簬闀挎槬
@@ -46,20 +47,18 @@
       if( ( iscc and forecast.Product_MP().MQBMLB() = 'MLB' ) or isdl ){
         product              := forecast.Product_MP();
         //鑾峰彇鍚堣琛�
-        allrow               := table.GetRow( allunit, product.ID() );
+        allrow               := table.GetRow( allunit, product );
         //鑾峰彇宸ュ巶琛�
-        factoryrow           := table.GetRow( ifexpr( iscc and forecast.Product_MP().MQBMLB() = 'MLB', ccunit, dlunit ), product.ID() );
+        factoryrow           := table.GetRow( ifexpr( iscc and forecast.Product_MP().MQBMLB() = 'MLB', ccunit, dlunit ), product );
       
-        if( products.Find( product ) < 0 ){
-          products.Add( product );
-        }
-        traverse( forecast, PlanningSalesDemandInPeriod, psdip ){
+        products.Add( product );
+        traverse( forecast, PlanningSalesDemandInPeriod, psdip, psdip.Quantity() <> 0 ){
           periodtime         := psdip.StartDate().StartOfMonth();
           periodname         := periodtime.Format( "M2/D2/Y" );
     //      info( '-------------------------', periodname, periodtime );
           column             := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
     //      info( '-------------------------', column.Name() );
-          quantity   := ceil( psdip.Quantity() );//鍚戜笂鍙栨暣
+          quantity   := [Number]psdip.Quantity();//鍥涜垗浜斿叆
           
           factoryrow.Initialize( column, quantity );
           allrow.Initialize( column, quantity );
@@ -73,14 +72,17 @@
       //鏄惁灞炰簬闀挎槬瑁呴厤绾�
     //  iscc                  := unit.ID() = ccspline or exists( parentunits, Elements, punit, punit.ID() = ccspline );
       if( table.IsInUnit( stockingpoint, ccspline ) ){
-        traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and pisp.Product_MP().MQBMLB() = 'MQB' ){//浜у搧涓篗QB
-          allrow            := table.GetRow( allunit, pisp.ProductID() );
-          ccrow             := table.GetRow( ccunit, pisp.ProductID() );
-          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear ){
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and pisp.Product_MP().MQBMLB() = 'MQB' 
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.DependentDemandAndSalesDemandQuantity() <> 0 ) ){//浜у搧涓篗QB
+          product           := pisp.Product_MP();
+          allrow            := table.GetRow( allunit, product );
+          ccrow             := table.GetRow( ccunit, product );
+          products.Add( product );
+          traverse( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().StartDate() < startofnextyear and pispip.DependentDemandAndSalesDemandQuantity() <> 0 ){
             periodtime      := pispip.Start().StartOfMonth().Date();
             periodname      := periodtime.Format( "M2/D2/Y" );
             column          := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
-            quantity        := ceil( pispip.DependentDemandAndSalesDemandQuantity() );//鍚戜笂鍙栨暣
+            quantity        := [Number]pispip.DependentDemandAndSalesDemandQuantity();//鍥涜垗浜斿叆
             
             ccrow.Initialize( column, quantity );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
             allrow.Initialize( column, quantity );
@@ -98,18 +100,23 @@
       destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = laneleg.DestinationStockingPointID() );
       isccrent              := table.IsInUnit( destisp, ccrent );
       if( isdlspline and isccrent ){
-        traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead ){
-          periodtime        := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
+        traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead and exists( trip, ProductInTrip, pit, pit.Quantity() <> 0 ) ){
+    //      periodtime        := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
+          periodtime        := trip.Departure().StartOfMonth().Date();
           periodname        := periodtime.Format( "M2/D2/Y" );
           
           column            := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
-          traverse( trip, ProductInTrip, pit ){
-            quantity        := ceil( pit.Quantity() );//鍚戜笂鍙栨暣
-            dlrow           := table.GetRow( dlunit, pit.ProductID() );
-            dlrow.Initialize( column, quantity );//姹囨�绘暟閲�
-            
-            allrow          := table.GetRow( allunit, pit.ProductID() );
-            allrow.Initialize( column, quantity );
+          if( not isnull( column ) ){
+            traverse( trip, ProductInTrip, pit, pit.Quantity() <> 0 ){
+              product       := pit.Product_MP();
+              products.Add( product );
+              quantity      := [Number]pit.Quantity();//鍥涜垗浜斿叆
+              dlrow         := table.GetRow( dlunit, pit.Product_MP() );
+              dlrow.Initialize( column, quantity );//姹囨�绘暟閲�
+              
+              allrow        := table.GetRow( allunit, pit.Product_MP() );
+              allrow.Initialize( column, quantity );
+            }
           }
         }
       }
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCALineUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCALineUnit.qbl
new file mode 100644
index 0000000..3afba65
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCALineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCALineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCMPLineUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCMPLineUnit.qbl
new file mode 100644
index 0000000..0c32fd7
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCMPLineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCMPLineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '闀挎槬鏈哄姞绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLALineUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLALineUnit.qbl
new file mode 100644
index 0000000..153da57
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLALineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLALineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛瑁呴厤绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLMPLineUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLMPLineUnit.qbl
new file mode 100644
index 0000000..48e75f8
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLMPLineUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLMPLineUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    return '澶ц繛鏈哄姞绾�';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
index 47f1246..b5bb158 100644
--- a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
@@ -14,6 +14,10 @@
     allunit                   := InventorySummaryReport::GetDefaultAllUnit();
     ccunit                    := InventorySummaryReport::GetDefaultCCUnit();
     dlunit                    := InventorySummaryReport::GetDefaultDLUnit();
+    ccalineunit               := FinancialProductionReport::GetDefaultCCALineUnit();
+    dlalienunit               := FinancialProductionReport::GetDefaultDLALineUnit()
+    ccmplineunit              := FinancialProductionReport::GetDefaultCCMPLineUnit()
+    dlmplineunit              := FinancialProductionReport::GetDefaultDLMPLineUnit();
     
     source                    := owner.InventorySummarySource( relnew, ID := InventorySummaryReport::GetDefaultName(), Name := InventorySummaryReport::GetDefaultName() );
     table                     := source.InventorySummaryReport( relnew, ID := source.Name(), Name := source.Name() );
@@ -31,9 +35,9 @@
       unit                    := stockingpoint.Unit();
       parentunits             := unit.GetAllParent();
       //鏄惁灞炰簬闀挎槬宸ュ巶
-      iscc                    := unit.ID() = ccunit or exists( parentunits, Elements, punit, punit.ID() = ccunit );
+      iscc         := unit.ID() = ccalineunit or unit.ID() = ccmplineunit or exists( parentunits, Elements, punit, punit.ID() = ccalineunit or punit.ID() = ccmplineunit );
       //鏄惁灞炰簬澶ц繛宸ュ巶
-      isdl                    := unit.ID() = dlunit or exists( parentunits, Elements, punit, punit.ID() = dlunit );
+      isdl         := unit.ID() = dlalienunit or unit.ID() = dlmplineunit  or exists( parentunits, Elements, punit, punit.ID() = dlalienunit or punit.ID() = dlmplineunit );
       if( iscc or isdl ){
         traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() ){
           //鑾峰彇宸ュ巶琛�
diff --git a/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl
index ba284fe..46090ff 100644
--- a/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineCell/StaticMethod_Initialize.qbl
@@ -8,13 +8,13 @@
   [*
     // 鐢勫叞楦� Jul-12-2024 (created)
     cell := column.Cell( relnew, CCAssemblyPlanQty := 0, 
-                         CCProductionQty := 0, 
-                         CCTransferQty := 0,
-                         CCInventoryQty := 0, 
-                         DLAssemblyPlanQty := 0, 
-                         DLProductionQty := 0, 
-                         DLTransferQty := 0,
-                         DLInventoryQty := 0 );
+                         CCProductionQty           := 0, 
+                         CCTransferQty             := 0,
+                         CCInventoryQty            := 0, 
+                         DLAssemblyPlanQty         := 0,
+                         DLProductionQty           := 0, 
+                         DLTransferQty             := 0,
+                         DLInventoryQty            := 0 );
     
     return cell;
   *]
diff --git a/_Main/BL/Type_MachiningPipelineColumn0/Attribute_CCAssemblyPlanQty.qbl b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_CCAssemblyPlanQty.qbl
new file mode 100644
index 0000000..af5f2ec
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_CCAssemblyPlanQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CCAssemblyPlanQty
+{
+  #keys: '3[415136.0.1006432687][415136.0.1006432686][415136.0.1006432688]'
+  Description: '闀挎槬瑁呴厤璁″垝'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineColumn0/Attribute_DLAssemblyPlanQty.qbl b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_DLAssemblyPlanQty.qbl
new file mode 100644
index 0000000..38d7472
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_DLAssemblyPlanQty.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DLAssemblyPlanQty
+{
+  #keys: '3[415136.0.1006432691][415136.0.1006432690][415136.0.1006432692]'
+  Description: '澶ц繛瑁呴厤璁″垝'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MachiningPipelineColumn0/Attribute_EndDate.qbl b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_EndDate.qbl
new file mode 100644
index 0000000..0b796c8
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[415136.0.1004832687][415136.0.1004832686][415136.0.1004832688]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MachiningPipelineColumn0/Attribute_Period.qbl b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_Period.qbl
deleted file mode 100644
index 4ee9a29..0000000
--- a/_Main/BL/Type_MachiningPipelineColumn0/Attribute_Period.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute Period
-{
-  #keys: '3[415136.0.886711554][415136.0.886711553][415136.0.886711555]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_MachiningPipelineColumn0/Attribute_StartDate.qbl b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_StartDate.qbl
new file mode 100644
index 0000000..6a2d095
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineColumn0/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.1004832677][415136.0.1004832676][415136.0.1004832678]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
index 525a923..8a122c3 100644
--- a/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GenerateColumn.qbl
@@ -17,13 +17,13 @@
         periodtime          := period.StartDate();
         periodname          := periodtime.Format( "M2/D2/Y" );
         
-        this.Column( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+        this.Column( relnew, Name := periodname, StartDate := periodtime, EndDate := periodtime, CCAssemblyPlanQty := 0, DLAssemblyPlanQty := 0, TimeUnit := Translations::MP_GlobalParameters_Day() );
       }
       
       if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
         if( period.StartDate() = weekstart ){
           weekperiodname    := weekstart.Format( "M2/D2/Y" );
-          this.Column( relnew, Name := weekperiodname, Period := weekstart, TimeUnit := Translations::MP_GlobalParameters_Week() );
+          this.Column( relnew, Name := weekperiodname, StartDate := weekstart, EndDate := ( weekstart + Duration::Days( 6 ) ).Date(), CCAssemblyPlanQty := 0, DLAssemblyPlanQty := 0, TimeUnit := Translations::MP_GlobalParameters_Week() );
           weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
         }
       }
diff --git a/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
index 1c5b4cb..67af163 100644
--- a/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/Method_GetColumnByUnit.qbl
@@ -8,9 +8,9 @@
   TextBody:
   [*
     // 鐢勫叞楦� Aug-7-2024 (created)
-    periodname := period.Format( "M2/D2/Y" );
+    //periodname := period.Format( "M2/D2/Y" );
     
-    column := selectobject( this, Column, column, column.Name() = periodname and column.Period() = period and column.TimeUnit() = unit );
+    column := selectobject( this, Column, column, column.StartDate() <= period and column.EndDate() >= period and column.TimeUnit() = unit );
     
     return column;
   *]
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl
index 050172d..c197afd 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultCCProductionUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '闀挎槬鏈哄姞浜х嚎';
+    return '闀挎槬鏈哄姞绾�';
     //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl
index 4056b04..b9ca520 100644
--- a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultDLProductionUnit.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
-    return '澶ц繛鏈哄姞浜х嚎';
+    return '澶ц繛鏈哄姞绾�';
     //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultProductParent.qbl b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultProductParent.qbl
new file mode 100644
index 0000000..1cff05e
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineReport/StaticMethod_GetDefaultProductParent.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultProductParent () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Aug-14-2024 (created)
+    return '鏈哄姞浠�';
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
deleted file mode 100644
index 7e188ba..0000000
--- a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellAssemblyValue.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method SetCellAssemblyValue (
-  MachiningPipelineColumn column,
-  Boolean iscc,
-  Real quantity
-)
-{
-  TextBody:
-  [*
-    // 鐢勫叞楦� Jun-24-2024 (created)
-    cell := selectobject( this, Cell, cell, cell.Column() = column );
-    
-    if( iscc ){
-      cell.CCAssemblyPlanQty( cell.CCAssemblyPlanQty() + quantity );
-    } else {
-      cell.DLAssemblyPlanQty( cell.DLAssemblyPlanQty() + quantity );
-    }
-  *]
-}
diff --git a/_Main/BL/Type_MachiningPipelineRow/Method_SetCellTransferValue.qbl b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellTransferValue.qbl
new file mode 100644
index 0000000..40d4b74
--- /dev/null
+++ b/_Main/BL/Type_MachiningPipelineRow/Method_SetCellTransferValue.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCellTransferValue (
+  MachiningPipelineColumn column,
+  Boolean iscc,
+  Real quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, Cell, cell, cell.Column() = column );
+    
+    if( iscc ){
+      cell.CCTransferQty( cell.CCTransferQty() + quantity );
+    } else {
+      cell.DLTransferQty( cell.DLTransferQty() + quantity );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
index 5776315..23633d0 100644
--- a/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
+++ b/_Main/BL/Type_MachiningPipelineSource0/StaticMethod_Initialize.qbl
@@ -8,6 +8,7 @@
   [*
     // 鐢勫叞楦� Jun-24-2024 (created)
     owner.FinancialProductionSource( relflush );
+    productparent             := MachiningPipelineReport::GetDefaultProductParent();
     ccunit                    := MachiningPipelineReport::GetDefaultCCUnit();
     dlunit                    := MachiningPipelineReport::GetDefaultDLUnit();
     //allunit                   := EnginePipelineReport::GetDefaultAllUnit();
@@ -39,39 +40,48 @@
       //鏄惁灞炰簬澶ц繛鏈哄姞浜х嚎
       isdlproduction          := unit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() or exists( parentunits, Elements, punit, punit.ID() = MachiningPipelineReport::GetDefaultDLProductionUnit() );
       if( iscc or isdl ){
-        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() ){
-          row := table.GetRow( pisp.ProductID() );
-          
-          weekstart             := owner.StartOfPlanning().Date();
-          pispips               := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
-                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
-          
+        traverse( stockingpoint, ProductInStockingPoint_MP, pisp,  pisp.Product_MP().IsLeaf() and not pisp.IsSystem() 
+    //              and exists( pisp.Product_MP().GetAllParent(), Elements, e, e.ID() = productparent ) 
+                  and exists( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 ) ) ){
+          pispips             := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, not pispip.Period_MP().IsHistorical() 
+                                                  and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() and ( pispip.NewSupplyQuantity() <> 0 or pispip.PlannedInventoryLevelEnd() <> 0 ), pispip.Start() );
           traverse( pispips, Elements, pispip ){
+            supplyquantity    := [Number]pispip.NewSupplyQuantity();//鍥涜垗浜斿叆
             //澶�
-            daycolumn           := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
+            daycolumn         := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), pispip.Start().Date() );
             //鍛�
-            weekcolumn          := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), weekstart );
-            
-            supplyquantity      := [Real]ceil( pispip.NewSupplyQuantity() );//鍚戜笂鍙栨暣
-            inventoryquantity   := [Real]ceil( pispip.PlannedInventoryLevelEnd() );//鍚戜笂鍙栨暣
+            weekcolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), pispip.Start().Date() );
             
             //瑁呴厤绾�
             if( isccassemnly or isdlassemnly ){
-              row.SetCellAssemblyValue( daycolumn, isccassemnly, supplyquantity );
-              row.SetCellAssemblyValue( weekcolumn, isccassemnly, supplyquantity );
+              if( isccassemnly ){
+                daycolumn.CCAssemblyPlanQty( daycolumn.CCAssemblyPlanQty() + supplyquantity );
+                weekcolumn.CCAssemblyPlanQty( weekcolumn.CCAssemblyPlanQty() + supplyquantity );
+              } else {
+                daycolumn.DLAssemblyPlanQty( daycolumn.DLAssemblyPlanQty() + supplyquantity );
+                weekcolumn.DLAssemblyPlanQty( weekcolumn.DLAssemblyPlanQty() + supplyquantity );
+              } 
             }
             
-            //鏈哄姞绾�
-            if( isccproduction or isdlproduction ){
-              row.SetCellProductionValue( daycolumn, isccproduction, supplyquantity );
-              row.SetCellProductionValue( weekcolumn, isccproduction, supplyquantity );
-            }
-            //搴撳瓨
-            if( iscc or isdl ){
-              row.SetCellInventoryValue( daycolumn, iscc, inventoryquantity );
-              if( pispip.Start() = weekstart + Duration::Days( 6 ) or pispip.Period_MP() = endperiod ){
-                weekstart         := ( weekstart + Duration::Days( 7 ) ).Date();
-                row.SetCellInventoryValue( weekcolumn, iscc, inventoryquantity );
+            product           := pisp.Product_MP();
+            productparents    := product.GetAllParent();
+            if( exists( productparents, Elements, e, e.ID() = productparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+              row             := table.GetRow( pisp.ProductID() );
+              products.Add( pisp.Product_MP() );
+    
+              inventoryquantity:= [Number]pispip.PlannedInventoryLevelEnd();//鍥涜垗浜斿叆
+              
+              //鏈哄姞绾�
+              if( isccproduction or isdlproduction ){
+                row.SetCellProductionValue( daycolumn, isccproduction, [Real]supplyquantity );
+                row.SetCellProductionValue( weekcolumn, isccproduction, [Real]supplyquantity );
+              }
+              //搴撳瓨
+              if( iscc or isdl ){
+                row.SetCellInventoryValue( daycolumn, iscc, [Real]inventoryquantity );
+                if( weekcolumn.EndDate() = pispip.Start().Date() or pispip.Period_MP() = endperiod ){
+                  row.SetCellInventoryValue( weekcolumn, iscc, [Real]inventoryquantity );
+                }
               }
             }
           }
@@ -80,25 +90,33 @@
     }
     
     //鐢熸垚璋冩嫧鏁版嵁
-    traverse( owner, TransferPlanRow, tprow, ( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ) or ( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ) ){
-      row := selectobject( table, Row, row, row.Name() = tprow.Name() );
-      traverse( table, Column, column ){
-        cell := selectobject( row, Cell, cell, cell.Column() = column );
-        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){
-          tpcell := selectobject( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() = column.Period() );
-          if( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ){
-            cell.CCTransferQty( [Real]tpcell.Value() );
-          }else if( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
-            cell.DLTransferQty( [Real]tpcell.Value() );
-          }
-        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){
-          period := column.Period() + Duration::Days( 6 );
-          tpcell := selectobject( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() = period.Date() );
-          
-          if( tprow.SourceStockpoingPointID() = 'CC' and tprow.TargetStockpoingPointID() = 'DL' ){
-            cell.CCTransferQty( [Real]tpcell.Value() );
-          }else if( tprow.SourceStockpoingPointID() = 'DL' and tprow.TargetStockpoingPointID() = 'CC' ){
-            cell.DLTransferQty( [Real]tpcell.Value() );
+    traverse( owner, TransferPlanRow, tprow ){
+      product               := selectobject( owner, Product_MP, product, product.ID() = tprow.ProductID() );
+      productparents        := product.GetAllParent();
+      if( exists( productparents, Elements, e, e.ID() = productparent ) ){//鏌ヨ浜у搧绫诲瀷鏄彂鍔ㄦ満
+        //璧峰搴撳瓨鐐规槸鍚︽槸澶ц繛or闀挎槬
+        originsp              := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.SourceStockpoingPointID() );
+        originunit            := originsp.Unit();
+        originparentunits     := originunit.GetAllParent();
+        originiscc            := originsp.ID() = ccunit or originunit.ID() = ccunit or exists( originparentunits, Elements, punit, punit.ID() = ccunit );
+        originisdl            := originsp.ID() = dlunit or originunit.ID() = dlunit or exists( originparentunits, Elements, punit, punit.ID() = dlunit );
+        //鐩殑鍦版槸鍚︽槸闀挎槬澶栫搴�
+        destisp               := selectobject( owner, StockingPoint_MP, sp, sp.ID() = tprow.TargetStockpoingPointID() );
+        destiunit             := destisp.Unit();
+        destiparentunits      := destiunit.GetAllParent();
+        destiiscc             := destisp.ID() = ccunit or destiunit.ID() = ccunit or exists( destiparentunits, Elements, punit, punit.ID() = ccunit );
+        destiisdl             := destisp.ID() = dlunit or destiunit.ID() = dlunit or exists( destiparentunits, Elements, punit, punit.ID() = dlunit );
+        if( ( originiscc and destiisdl ) or ( originisdl and destiiscc ) ){
+          row := table.GetRow( tprow.ProductID() );
+          traverse( tprow, TransferPlanCell, tpcell, tpcell.TransferPlanColumn().ColumnDate() <> Date::MinDate() ){
+            //澶�
+            daycolumn        := table.GetColumnByUnit( Translations::MP_GlobalParameters_Day(), tpcell.TransferPlanColumn().ColumnDate() );
+            //鍛�
+            weekcolumn       := table.GetColumnByUnit( Translations::MP_GlobalParameters_Week(), tpcell.TransferPlanColumn().ColumnDate() );
+            quantity         := [Real]tpcell.Value();//鍥涜垗浜斿叆
+            
+            row.SetCellTransferValue( daycolumn, ( originiscc and destiisdl ), quantity );
+            row.SetCellTransferValue( weekcolumn, ( originiscc and destiisdl ), quantity );
           }
         }
       }
@@ -108,6 +126,10 @@
     i    := 0;
     traverse( rows, Elements, e ){
       e.RowNr( i );
+      traverse( e, Cell, cell ){
+        cell.CCAssemblyPlanQty( cell.Column().CCAssemblyPlanQty() );
+        cell.DLAssemblyPlanQty( cell.Column().DLAssemblyPlanQty() );
+      }
       i := i + 1;
     }
     showtable.Generate( search, products );
diff --git a/_Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl b/_Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl
index 63d74ca..53e032b 100644
--- a/_Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl
+++ b/_Main/BL/Type_Routing/StaticMethod_ThermalTrialRatio.qbl
@@ -28,17 +28,19 @@
     name := newrouting.Name().ReplaceAll( 'Copy', thermaltrial );
     newrouting.Name( name );
     newrouting.UpdateTypeIndex( name );
-    routing.Start( start );
-    routing.End( end );
+    
+    newrouting.Start( start );
+    newrouting.End( end );
     
     routingstep := newrouting.LastStep();
-    //info( '------------------', routingstep.Tool(), ',', unit.ID() );
-    newroutingstep := RoutingStep::Create( newrouting, thermaltrial, routingstep.Tool(), false );
     
+    newroutingstep := RoutingStep::Create( newrouting, thermaltrial, routingstep.Tool(), false );
+    spname      := ifexpr( unit.ID().EndsWith( '鎵归噺鐑瘯' ), unit.ID().ReplaceAll( '鎵归噺鐑瘯', '-' + thermaltrial ), unit.ID().ReplaceAll( '鐑瘯', '-' + thermaltrial ) );
+    info( '------------------', routingstep.Tool(), ',', unit.ID(), ',', spname );
     traverse( routingstep, Operation, operation ){
       id := Operation::GetConcatenatedID( newrouting.ID(), newroutingstep.Name(), unit.ID() );
     //  info( '------------------', operation.Name(), routingstep.Name(), newroutingstep.Name() );
-      stockingpoint := StockingPoint_MP::FindCreateUpdate( routing.MacroPlan(), thermaltrial, unit, newrouting, true );
+      stockingpoint := StockingPoint_MP::FindCreateUpdate( routing.MacroPlan(), spname, unit, newrouting, true );
       
       traverse( operation, OperationBOM, obom, not obom.IsInput() ){
         pisp := obom.PISPNodeInRouting().ProductInStockingPoint_MP();
diff --git a/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp b/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp
new file mode 100644
index 0000000..55dd648
--- /dev/null
+++ b/_Main/Sys/Repr/Global/CCEngineLogisticsCostCell.qrp
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+TypeRepresentation CCEngineLogisticsCostCell
+{
+  AttributeRepresentation Coefficient
+  {
+    AttributeKey: '[415136.0.986844757]'
+    Synonym: '绯绘暟'
+  }
+  AttributeRepresentation EstimatedTotalCost
+  {
+    AttributeKey: '[415136.0.986844738]'
+    Synonym: '棰勮鎬昏垂鐢�'
+  }
+  AttributeRepresentation FactoryToRentTransCost
+  {
+    AttributeKey: '[415136.0.986844780]'
+    Synonym: '鍘傚唴鍒板绉熷簱杩愯緭璐圭敤'
+  }
+  AttributeRepresentation RentEnterCost
+  {
+    AttributeKey: '[415136.0.986881422]'
+    Synonym: '澶栫搴撳叆搴撹垂鐢�'
+  }
+  AttributeRepresentation RentOutCost
+  {
+    AttributeKey: '[415136.0.986881432]'
+    Synonym: '澶栫搴撳嚭搴撹垂鐢�'
+  }
+  AttributeRepresentation RentStorageCost
+  {
+    AttributeKey: '[415136.0.986881445]'
+    Synonym: '澶栫搴撲粨鍌ㄨ垂鐢�'
+  }
+  AttributeRepresentation TotalCost
+  {
+    AttributeKey: '[415136.0.986844770]'
+    Synonym: '鎬昏垂鐢�'
+  }
+  RelationRepresentation Column { RelationKey: '[415136.0.986881392]' Visibility: 'Normal' }
+}
diff --git a/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp b/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp
new file mode 100644
index 0000000..6efbdbf
--- /dev/null
+++ b/_Main/Sys/Repr/Global/DLEngineLogisticsCostCell.qrp
@@ -0,0 +1,66 @@
+Quintiq file version 2.0
+#parent: #root
+TypeRepresentation DLEngineLogisticsCostCell
+{
+  AttributeRepresentation CCLongTransCoat
+  {
+    AttributeKey: '[415136.0.992900331]'
+    Synonym: '闀挎槬闀块�旇繍杈撹垂鐢�'
+  }
+  AttributeRepresentation CCRentEnterCost
+  {
+    AttributeKey: '[415136.0.992900044]'
+    Synonym: '闀挎槬澶栫搴撳叆搴撹垂鐢�'
+  }
+  AttributeRepresentation CCRentOutCost
+  {
+    AttributeKey: '[415136.0.992900047]'
+    Synonym: '闀挎槬澶栫搴撳嚭搴撹垂鐢�'
+  }
+  AttributeRepresentation CCRentStorageCost
+  {
+    AttributeKey: '[415136.0.992900050]'
+    Synonym: '闀挎槬澶栫搴撲粨鍌ㄨ垂鐢�'
+  }
+  AttributeRepresentation CCShortTransCost
+  {
+    AttributeKey: '[415136.0.992900341]'
+    Synonym: '闀挎槬鐭�旇繍杈撹垂鐢�'
+  }
+  AttributeRepresentation Coefficient
+  {
+    AttributeKey: '[415136.0.992900035]'
+    Synonym: '绯绘暟'
+  }
+  AttributeRepresentation DLRentEnterCost
+  {
+    AttributeKey: '[415136.0.992900241]'
+    Synonym: '澶ц繛澶栫搴撳叆搴撹垂鐢�'
+  }
+  AttributeRepresentation DLRentOutCost
+  {
+    AttributeKey: '[415136.0.992900248]'
+    Synonym: '澶ц繛澶栫搴撳嚭搴撹垂鐢�'
+  }
+  AttributeRepresentation DLRentStorageCost
+  {
+    AttributeKey: '[415136.0.992900261]'
+    Synonym: '澶ц繛澶栫搴撲粨鍌ㄨ垂鐢�'
+  }
+  AttributeRepresentation EstimatedTotalCost
+  {
+    AttributeKey: '[415136.0.992900038]'
+    Synonym: '棰勮鎬昏垂鐢�'
+  }
+  AttributeRepresentation FactoryToDLRentTransCost
+  {
+    AttributeKey: '[415136.0.992900041]'
+    Synonym: '鍘傚唴鍒板ぇ杩炲绉熷簱杩愯緭璐圭敤'
+  }
+  AttributeRepresentation TotalCost
+  {
+    AttributeKey: '[415136.0.992900053]'
+    Synonym: '鎬昏垂鐢�'
+  }
+  RelationRepresentation Column { RelationKey: '[415136.0.992900194]' Visibility: 'Normal' }
+}
diff --git a/_Main/Sys/Repr/Global/InventorySummaryCell.qrp b/_Main/Sys/Repr/Global/InventorySummaryCell.qrp
new file mode 100644
index 0000000..bd2db27
--- /dev/null
+++ b/_Main/Sys/Repr/Global/InventorySummaryCell.qrp
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+TypeRepresentation InventorySummaryCell
+{
+  AttributeRepresentation AverageInventory
+  {
+    AttributeKey: '[415136.0.865305023]'
+    Synonym: '骞冲潎搴撳瓨'
+  }
+  AttributeRepresentation EndingInventory
+  {
+    AttributeKey: '[415136.0.865304923]'
+    Synonym: '鏈熸湯搴撳瓨'
+  }
+  AttributeRepresentation MaximumInventory
+  {
+    AttributeKey: '[415136.0.865304943]'
+    Synonym: '鏈�澶у簱瀛�'
+  }
+  AttributeRepresentation MinimumInventory
+  {
+    AttributeKey: '[415136.0.865304933]'
+    Synonym: '鏈�灏忓簱瀛�'
+  }
+  RelationRepresentation AsFirstCellInColumn { RelationKey: '[415136.0.865304766]' Visibility: 'Normal' }
+}
diff --git a/_Main/Sys/Repr/Global/MachiningPipelineCell.qrp b/_Main/Sys/Repr/Global/MachiningPipelineCell.qrp
new file mode 100644
index 0000000..0e40a27
--- /dev/null
+++ b/_Main/Sys/Repr/Global/MachiningPipelineCell.qrp
@@ -0,0 +1,51 @@
+Quintiq file version 2.0
+#parent: #root
+TypeRepresentation MachiningPipelineCell
+{
+  AttributeRepresentation CCAssemblyPlanQty
+  {
+    AttributeKey: '[415136.0.886711536]'
+    Synonym: 'CC瑁呴厤璁″垝'
+  }
+  AttributeRepresentation CCInventoryQty
+  {
+    AttributeKey: '[415136.0.886711533]'
+    Synonym: 'CC搴撳瓨'
+  }
+  AttributeRepresentation CCProductionQty
+  {
+    AttributeKey: '[415136.0.886711530]'
+    Synonym: 'CC鐢熶骇璁″垝'
+  }
+  AttributeRepresentation CCTransferQty
+  {
+    AttributeKey: '[415136.0.894481175]'
+    Synonym: 'CC璋冩嫧璁″垝'
+  }
+  AttributeRepresentation DLAssemblyPlanQty
+  {
+    AttributeKey: '[415136.0.894481138]'
+    Synonym: 'DL瑁呴厤璁″垝'
+  }
+  AttributeRepresentation DLInventoryQty
+  {
+    AttributeKey: '[415136.0.894481161]'
+    Synonym: 'DL搴撳瓨'
+  }
+  AttributeRepresentation DLProductionQty
+  {
+    AttributeKey: '[415136.0.894481151]'
+    Synonym: 'DL鐢熶骇璁″垝'
+  }
+  AttributeRepresentation DLTransferQty
+  {
+    AttributeKey: '[415136.0.894481185]'
+    Synonym: 'DL璋冩嫧璁″垝'
+  }
+  AttributeRepresentation TotalInventoryQty
+  {
+    AttributeKey: '[415136.0.894481168]'
+    Synonym: 'CC+DL鎬诲簱瀛�'
+  }
+  RelationRepresentation AsFirstCellInColumn { RelationKey: '[415136.0.894469842]' Visibility: 'Normal' }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index a385b33..25803c6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -11,8 +11,9 @@
       BaseType: 'WebButton'
       Properties:
       [
+        Description: 'Financial production report'
         Image: 'DOCUMENT_REFRESH'
-        Label: 'Financial production report'
+        Label: '璐㈠姟浜ч噺鎶ヨ〃'
         Taborder: 0
       ]
     }
@@ -22,8 +23,9 @@
       BaseType: 'WebButton'
       Properties:
       [
+        Description: 'Financial sales report'
         Image: 'MONEY_COINS2'
-        Label: 'Financial sales report'
+        Label: '璐㈠姟閿�閲忔姤琛�'
         Taborder: 1
       ]
     }
@@ -33,8 +35,9 @@
       BaseType: 'WebButton'
       Properties:
       [
+        Description: 'Inventory summary report'
         Image: 'DOCUMENT_CHECK_EDIT'
-        Label: 'Inventory summary report'
+        Label: '搴撳瓨姹囨�绘姤琛�'
         Taborder: 2
       ]
     }
@@ -44,8 +47,9 @@
       BaseType: 'WebButton'
       Properties:
       [
+        Description: 'Financial weekly report'
         Image: 'DOCUMENT_DIRTY'
-        Label: 'Financial weekly report'
+        Label: '闀挎槬鍛ㄦ姤鎶ヨ〃'
         Taborder: 3
       ]
     }
@@ -70,8 +74,9 @@
       ]
       Properties:
       [
+        Description: 'Pipeline report'
         Image: 'DOCUMENT_CONNECTION'
-        Label: 'Pipeline report'
+        Label: '绠$嚎鎶ヨ〃'
         Taborder: 5
       ]
     }
@@ -93,7 +98,7 @@
       Properties:
       [
         Image: 'LOCATION_PIN'
-        Label: 'Machine logistics cost report'
+        Label: '鏈哄姞鐗╂祦鎴愭湰鎶ヨ〃'
         Taborder: 7
       ]
     }
@@ -130,6 +135,43 @@
         Taborder: 9
       ]
     }
+    Component bCC_EngineRackReport
+    {
+      #keys: '[413988.0.1477120930]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'SATELLITE'
+        Label: '闀挎槬鍙戝姩鏈烘枡鏋舵姤琛�'
+        Taborder: 10
+      ]
+    }
+    Component bDL_EngineRackReport
+    {
+      #keys: '[413988.0.1488511896]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EARTH_LOCATION'
+        Label: '澶ц繛鍙戝姩鏈烘枡鏋舵姤琛�'
+        Taborder: 11
+      ]
+    }
+    Component ButtonEngineLogisticsCostReport
+    {
+      #keys: '[415136.0.989557433]'
+      BaseType: 'WebButton'
+      Children:
+      [
+        #child: ContextMenuEngineLogisticsCostReport
+      ]
+      Properties:
+      [
+        Image: 'MONEY2'
+        Label: '鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+        Taborder: 12
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def
new file mode 100644
index 0000000..90dcee1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuEngineLogisticsCostReport.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component ContextMenuEngineLogisticsCostReport
+{
+  #keys: '[415136.0.989557478]'
+  BaseType: 'WebContextMenu'
+  Children:
+  [
+    Component MenuCCEngineLogisticsCostReport
+    {
+      #keys: '[415136.0.989557479]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: 'CC engine logistics cost report'
+        Image: 'MONEY2'
+        Taborder: 0
+        Title: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+      ]
+    }
+    Component MenuDLEngineLogisticsCostReport
+    {
+      #keys: '[415136.0.991620623]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: 'DL engine logistics cost report'
+        Image: 'MONEY2'
+        Taborder: 1
+        Title: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
index 6e53b06..3cd265a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuPipelineReport.def
@@ -11,9 +11,10 @@
       BaseType: 'WebMenu'
       Properties:
       [
+        Description: 'Engine pipeline report'
         Image: 'DOCUMENT_CONNECTION'
         Taborder: 0
-        Title: 'Engine pipeline report'
+        Title: '鍙戝姩鏈虹绾挎姤琛�'
       ]
     }
     Component MenuMachiningPipelineReport
@@ -22,9 +23,10 @@
       BaseType: 'WebMenu'
       Properties:
       [
+        Description: 'Machining pipeline report'
         Image: 'DOCUMENT_CONNECTION'
         Taborder: 1
-        Title: 'Machining pipeline report'
+        Title: '鏈哄姞浠剁绾挎姤琛�'
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bCC_EngineRackReport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bCC_EngineRackReport_OnClick.def
new file mode 100644
index 0000000..1a91ad9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bCC_EngineRackReport_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/bCC_EngineRackReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_bCC_EngineRackReport_OnClick
+{
+  #keys: '[413988.0.1477121059]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "CCEngineRackReport", true);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bDL_EngineRackReport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bDL_EngineRackReport_OnClick.def
new file mode 100644
index 0000000..470ceb9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_bDL_EngineRackReport_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/bDL_EngineRackReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_bDL_EngineRackReport_OnClick
+{
+  #keys: '[413988.0.1488512018]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "DLEngineRackReport", true);
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuCCEngineLogis.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuCCEngineLogis.def
new file mode 100644
index 0000000..3362b31
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuCCEngineLogis.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ContextMenuEngineLogisticsCostReport/MenuCCEngineLogisticsCostReport
+Response OnClick () id:Response_MacroPlanner_ContextMenuEngineLogisticsCostReport_MenuCCEngineLogisticsCostReport_OnClick
+{
+  #keys: '[415136.0.989557681]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "CC_engine_logistics_cost_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
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_DialogCreateEditLogisticsCostEngine/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostEngine/Component_pnlContent.def
index a5cade2..69737c7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostEngine/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostEngine/Component_pnlContent.def
@@ -5,17 +5,6 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component efFactory id:efFactory_245
-    {
-      #keys: '[413988.0.1457133347]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialogData.Data.Factory'
-        Label: '宸ュ巶'
-        Taborder: 0
-      ]
-    }
     Component efGeneration
     {
       #keys: '[413988.0.1457133350]'
@@ -93,6 +82,18 @@
         Taborder: 7
       ]
     }
+    Component ddslFactory
+    {
+      #keys: '[415754.0.98386037]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Factory'
+        Label: '宸ュ巶'
+        Strings: '澶ц繛宸ュ巶;闀挎槬宸ュ巶'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMachining/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMachining/Component_pnlContent.def
index 65628ad..b6ae3cb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMachining/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMachining/Component_pnlContent.def
@@ -5,17 +5,6 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component efFactory
-    {
-      #keys: '[413988.0.1457092631]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialogData.Data.Factory'
-        Label: '宸ュ巶'
-        Taborder: 0
-      ]
-    }
     Component efProduct
     {
       #keys: '[413988.0.1457092665]'
@@ -115,6 +104,18 @@
         Taborder: 9
       ]
     }
+    Component ddslFactory id:ddslFactory_653
+    {
+      #keys: '[415754.0.98423632]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Factory'
+        Label: '宸ュ巶'
+        Strings: '澶ц繛宸ュ巶;闀挎槬宸ュ巶'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMaterialRack/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMaterialRack/Component_pnlContent.def
index 3ff05c2..7df23a3 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMaterialRack/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostMaterialRack/Component_pnlContent.def
@@ -5,17 +5,6 @@
   BaseType: 'WebPanel'
   Children:
   [
-    Component efFactory
-    {
-      #keys: '[413988.0.1456914946]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialogData.Data.Factory'
-        Label: '宸ュ巶'
-        Taborder: 0
-      ]
-    }
     Component npWarehousingPrice
     {
       #keys: '[413988.0.1455874538]'
@@ -60,6 +49,18 @@
         Taborder: 4
       ]
     }
+    Component ddslFactory
+    {
+      #keys: '[415754.0.97113155]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Factory'
+        Label: '宸ュ巶'
+        Strings: '澶ц繛宸ュ巶;闀挎槬宸ュ巶'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Component_pnlContent.def
index 49bac54..79402d5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Component_pnlContent.def
@@ -16,28 +16,6 @@
         Taborder: 0
       ]
     }
-    Component efOrigin
-    {
-      #keys: '[413988.0.1458251274]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialogData.Data.Origin'
-        Label: '璧峰鍦�'
-        Taborder: 1
-      ]
-    }
-    Component efDestination
-    {
-      #keys: '[413988.0.1458549250]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        DataBinding: 'DataHolderDialogData.Data.Destination'
-        Label: '鐩殑鍦�'
-        Taborder: 2
-      ]
-    }
     Component npLoadingCapacity
     {
       #keys: '[413988.0.1456916992]'
@@ -60,6 +38,28 @@
         Taborder: 4
       ]
     }
+    Component ddslOrigin
+    {
+      #keys: '[415754.0.97111795]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Origin'
+        Label: '璧峰鍦�'
+        Taborder: 1
+      ]
+    }
+    Component ddslDestination
+    {
+      #keys: '[415754.0.97143070]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        DataBinding: 'DataHolderDialogData.Data.Destination'
+        Label: '鐩殑鍦�'
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslDestination_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslDestination_OnCreated.def
new file mode 100644
index 0000000..1537904
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslDestination_OnCreated.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: pnlContent/ddslDestination
+Response OnCreated () id:Response_pnlContent_ddslDestination_OnCreated
+{
+  #keys: '[415754.0.97143069]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      spmpids := selectuniquevalues( MacroPlan, StockingPoint_MP, tempSPMP, true, tempSPMP.ID() );
+      
+      this.Strings( spmpids.Concatenate( ";" ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslOrigin_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslOrigin_OnCreated.def
new file mode 100644
index 0000000..ae09d4e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditLogisticsCostTransport/Response_pnlContent_ddslOrigin_OnCreated.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: pnlContent/ddslOrigin
+Response OnCreated () id:Response_pnlContent_ddslOrigin_OnCreated
+{
+  #keys: '[415754.0.97111881]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      spmpids := selectuniquevalues( MacroPlan, StockingPoint_MP, tempSPMP, true, tempSPMP.ID() );
+      
+      this.Strings( spmpids.Concatenate( ";" ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Component_pnlContent.def
index a1be8e2..270f029 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Component_pnlContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Component_pnlContent.def
@@ -38,7 +38,6 @@
         DataBinding: 'DataHolderDialogData.Data.Name'
         Label: 'Name'
         Sorting: 'none'
-        Strings: '鏃╃彮;涓彮;澶滅彮'
         Taborder: 2
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Response_pnlContent_ddslName_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Response_pnlContent_ddslName_OnCreated.def
new file mode 100644
index 0000000..74052a9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditShiftDayTime/Response_pnlContent_ddslName_OnCreated.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: pnlContent/ddslName
+Response OnCreated () id:Response_pnlContent_ddslName_OnCreated
+{
+  #keys: '[415754.0.97151310]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      spns := selectuniquevalues( MacroPlan, ShiftPattern, tempSP, true, tempSP.Name() );
+      
+      this.Strings( spns.Concatenate( ";" ) );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def
index 20dc8c9..4c15147 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditThermalTrialRatio/Response_pnlActions_btnOk_OnClick.def
@@ -4,7 +4,6 @@
 {
   #keys: '[415136.0.756140039]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
   Precondition:
   [*
     return Routing::ValidateThermalTrialRatio( feedback, ddlUnit.Data(), [Number]efMaxCapacity.Text(), dsStartTime.Date(), dsEndTime.Date(), [Number]efThermalTrialRatio.Text() );
@@ -15,5 +14,6 @@
     [*
       Form.OnOK();
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
index adffbb1..1f2d31d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurve.def
@@ -11,7 +11,6 @@
       BaseType: 'WebEditField'
       Properties:
       [
-        Enabled: false
         NumberOfColumns: 60
         Taborder: 1
       ]
@@ -33,6 +32,7 @@
       BaseType: 'WebLabel'
       Properties:
       [
+        Label: 'Curve'
         NumberOfColumns: 0
         Taborder: 0
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurveEnable.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurveEnable.def
index e1fca08..7162d7b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurveEnable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pCurveEnable.def
@@ -32,5 +32,6 @@
     FixedSize: true
     Orientation: 'horizontal'
     Taborder: 7
+    Visible: false
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAEnable.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAEnable.def
index 914e317..6c66c50 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAEnable.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Component_pPPAEnable.def
@@ -11,7 +11,6 @@
       BaseType: 'WebCheckbox'
       Properties:
       [
-        Checked: true
         Label: '涓婁紶PPA'
         Taborder: 1
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def
index f23663f..97c1f53 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurveEnable_cCurveEnable_OnChanged.def
@@ -9,8 +9,8 @@
   {
     Body:
     [*
-      efCurve.Enabled( this.Checked(), "" );
-      cPreviousEditionCurve.Enabled( this.Checked(), "" );
+      //efCurve.Enabled( this.Checked(), "" );
+      //cPreviousEditionCurve.Enabled( this.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_bCurve_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_bCurve_OnClick.def
index 72eaf70..c88046e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_bCurve_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pCurve_bCurve_OnClick.def
@@ -7,7 +7,7 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return cCurveEnable.Checked();
+    //return cCurveEnable.Checked();
   *]
   QuillAction
   {
@@ -29,6 +29,8 @@
           efCurve.Text( fileName );
           dhBinaryDataCurve.Data( &webFileBinaryData );
           dhOriginalFileNameCurve.Data( fileName );
+          
+          cCurveEnable.Checked( true );
         }
       } onerror {
         WebMessageBox::Error( e.GeneralInformation() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def
index 49d9857..b1bd376 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      this.Enabled( cPPAEnable.Checked(), "" );
+      //this.Enabled( cPPAEnable.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def
index 56212dd..6e59ccd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAArchiveEnable_cPPAPPAArchiveEnable_OnUserChanged.def
@@ -27,6 +27,8 @@
         dhBinaryDataPPA.Data( BinaryData::FromBase64EncodedString( dhLocalBinaryDataPPA.Data().AsBase64EncodedString() ) );
         dhOriginalFileNamePPA.Data( dhLocalOriginalFileNamePPA.Data() );
       }
+      
+      cPPAEnable.Checked( true );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def
index 2bafc54..33d8285 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPAEnable_cPPAEnable_OnChanged.def
@@ -9,9 +9,9 @@
   {
     Body:
     [*
-      efPPA.Enabled( this.Checked(), "" );
-      cPPA.Enabled( this.Checked(), "" );
-      cPPAPPAArchiveEnable.Enabled( this.Checked(), "" );
+      //efPPA.Enabled( this.Checked(), "" );
+      //cPPA.Enabled( this.Checked(), "" );
+      //cPPAPPAArchiveEnable.Enabled( this.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_bPPA_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_bPPA_OnClick.def
index 0110168..46226c9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_bPPA_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_bPPA_OnClick.def
@@ -7,7 +7,7 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    return cPPAEnable.Checked();
+    //return cPPAEnable.Checked();
   *]
   QuillAction
   {
@@ -29,6 +29,8 @@
           efPPA.Text( fileName );
           dhBinaryDataPPA.Data( &webFileBinaryData );
           dhOriginalFileNamePPA.Data( fileName );
+          
+          cPPAEnable.Checked( true );
         }
       } onerror {
         WebMessageBox::Error( e.GeneralInformation() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnCreated.def
index 5b53a0b..6510f56 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPPA_cPPA_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      this.Enabled( cPPAEnable.Checked(), "" );
+      //this.Enabled( cPPAEnable.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def
index 2a9aa8d..feb6b37 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnCreated.def
@@ -9,7 +9,7 @@
   {
     Body:
     [*
-      this.Enabled( cCurveEnable.Checked(), "" );
+      //this.Enabled( cCurveEnable.Checked(), "" );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def
index 86af038..7fe5e41 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogRequirementUpload/Response_pPreviousEditionCurve_cPreviousEditionCurve_OnUserChanged.def
@@ -26,6 +26,8 @@
         dhBinaryDataCurve.Data( BinaryData::FromBase64EncodedString( dhLocalBinaryDataCurve.Data().AsBase64EncodedString() ) );
         dhOriginalFileNameCurve.Data( dhLocalOriginalFileNameCurve.Data() );
       }
+      
+      cCurveEnable.Checked( 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"
new file mode 100644
index 0000000..7474baa
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_MatrixEditorTable\043358.def"
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditorTable id:MatrixEditorTable_358
+{
+  #keys: '[415136.0.989500591]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.989500592]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCell
+        {
+          #keys: '[415136.0.989500593]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'CCEngineLogisticsCostReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Row.Cell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'RentEnterCost;RentOutCost;FactoryToRentTransCost;RentStorageCost;EstimatedTotalCost;Coefficient;TotalCost'
+        Column: 'Column'
+        Row: 'Row'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.989500594]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.989500595]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'CCEngineLogisticsCostReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Row'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.989500596]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.989500597]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'CCEngineLogisticsCostReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'Column'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable_1
+    #child: matrixeditorContextMenuTable_1
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportHeader.def
new file mode 100644
index 0000000..c2ab378
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportHeader.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelCCEngineLogisticsCostReportHeader
+{
+  #keys: '[415136.0.989500449]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelCCEngineLogisticsCostReportSearch
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportSearch.def
new file mode 100644
index 0000000..ce604b5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelCCEngineLogisticsCostReportSearch.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+Component PanelCCEngineLogisticsCostReportSearch
+{
+  #keys: '[415136.0.989500450]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelExport_670
+    #child: PanelPower_653
+    #child: PanelMQBMLB_667
+    #child: PanelGeneration_969
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def"
new file mode 100644
index 0000000..bb0fe40
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelExport\043670.def"
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelExport id:PanelExport_670
+{
+  #keys: '[415136.0.989500459]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonExport
+    {
+      #keys: '[415136.0.989500460]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSearch
+    {
+      #keys: '[415136.0.989500461]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'VIEW'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelGeneration\043969.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelGeneration\043969.def"
new file mode 100644
index 0000000..98fd409
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelGeneration\043969.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelGeneration id:PanelGeneration_969
+{
+  #keys: '[415136.0.989500453]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[415136.0.989500454]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelMQBMLB\043667.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelMQBMLB\043667.def"
new file mode 100644
index 0000000..095d66d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelMQBMLB\043667.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMQBMLB id:PanelMQBMLB_667
+{
+  #keys: '[415136.0.989500455]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.989500456]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelPower\043653.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelPower\043653.def"
new file mode 100644
index 0000000..8631fe8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelPower\043653.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelPower id:PanelPower_653
+{
+  #keys: '[415136.0.989500457]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslPower
+    {
+      #keys: '[415136.0.989500458]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Power'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelTable\043211.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelTable\043211.def"
new file mode 100644
index 0000000..8bec6f3
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_PanelTable\043211.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable id:PanelTable_211
+{
+  #keys: '[415136.0.989500590]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable_358
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable\0431.def"
new file mode 100644
index 0000000..84c5a9d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixEditorActionBarPageTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable id:matrixEditorActionBarPageTable_1
+{
+  #keys: '[415136.0.989500598]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixeditorContextMenuTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixeditorContextMenuTable\0431.def"
new file mode 100644
index 0000000..02ffa78
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Component_matrixeditorContextMenuTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable id:matrixeditorContextMenuTable_1
+{
+  #keys: '[415136.0.989500599]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def
new file mode 100644
index 0000000..ef0c204
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_MatrixEditorTable_358_OnUpdateValue.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: MatrixEditorTable_358
+Response OnUpdateValue (
+  CCEngineLogisticsCostRow row,
+  CCEngineLogisticsCostColumn column,
+  CCEngineLogisticsCostCell cell,
+  Number value,
+  Number oldvalue
+) id:Response_MatrixEditorTable_358_OnUpdateValue
+{
+  #keys: '[415136.0.989501207]'
+  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_FormCCEngineLogisticsCostReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def
new file mode 100644
index 0000000..0061f31
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_OnCreated.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormCCEngineLogisticsCostReport_OnCreated
+{
+  #keys: '[415136.0.989500680]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍒濆鍖�
+      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
+        CCEngineLogisticsCostReport::Initialize( MacroPlan );
+      //}
+      //info( '------------------1----------------' );
+      table := selectobject( MacroPlan, CCEngineLogisticsCostReport, table, table.IsShow() );
+      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( table.MacroPlan().CCEngineLogisticsCostSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonExport_OnClick.def
new file mode 100644
index 0000000..3956972
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelExport_670/ButtonExport
+Response OnClick () id:Response_PanelExport_670_ButtonExport_OnClick
+{
+  #keys: '[415136.0.989500440]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := CCEngineLogisticsCostReport::Download( MacroPlan );
+      
+      Application.Download( CCEngineLogisticsCostReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonSearch_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonSearch_OnClick.def
new file mode 100644
index 0000000..0396f68
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelExport_670_ButtonSearch_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelExport_670/ButtonSearch
+Response OnClick () id:Response_PanelExport_670_ButtonSearch_OnClick
+{
+  #keys: '[415136.0.989500439]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..845a6c6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelGeneration_969/ddslGeneration
+Response OnCreated () id:Response_PanelGeneration_969_ddslGeneration_OnCreated
+{
+  #keys: '[415136.0.989500446]'
+  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_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def
new file mode 100644
index 0000000..a3099b3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelGeneration_969/ddslGeneration
+Response OnSelectionChanged () id:Response_PanelGeneration_969_ddslGeneration_OnSelectionChanged
+{
+  #keys: '[415136.0.989500445]'
+  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_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..4c3fe96
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB_667/ddslMQBMLB
+Response OnCreated () id:Response_PanelMQBMLB_667_ddslMQBMLB_OnCreated
+{
+  #keys: '[415136.0.989500444]'
+  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_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def
new file mode 100644
index 0000000..6514388
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB_667/ddslMQBMLB
+Response OnSelectionChanged () id:Response_PanelMQBMLB_667_ddslMQBMLB_OnSelectionChanged
+{
+  #keys: '[415136.0.989500443]'
+  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_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnCreated.def
new file mode 100644
index 0000000..8e2b817
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelPower_653/ddslPower
+Response OnCreated () id:Response_PanelPower_653_ddslPower_OnCreated
+{
+  #keys: '[415136.0.989500442]'
+  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_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def
new file mode 100644
index 0000000..a5e290e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/Response_PanelPower_653_ddslPower_OnSelectionChanged.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelPower_653/ddslPower
+Response OnSelectionChanged () id:Response_PanelPower_653_ddslPower_OnSelectionChanged
+{
+  #keys: '[415136.0.989500441]'
+  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_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def
new file mode 100644
index 0000000..5428df3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCCEngineLogisticsCostReport/_ROOT_Component_FormCCEngineLogisticsCostReport.def
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCCEngineLogisticsCostReport
+{
+  #keys: '[415136.0.989500338]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component DataHolderTable id:DataHolderTable_437
+    {
+      #keys: '[415136.0.989500367]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'CCEngineLogisticsCostReport'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component dhSearch id:dhSearch_902
+    {
+      #keys: '[415136.0.989500384]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'CCEngineLogisticsCostSearch'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: PanelCCEngineLogisticsCostReportHeader
+    #child: PanelTable_211
+  ]
+  Properties:
+  [
+    Description: 'CC engine logistics cost report'
+    Image: 'MONEY2'
+    Title: '闀挎槬鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_MatrixEditor531.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_MatrixEditor531.def
new file mode 100644
index 0000000..6179223
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_MatrixEditor531.def
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditor531
+{
+  #keys: '[413988.0.1478231769]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell611
+    {
+      #keys: '[413988.0.1478231770]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor453
+        {
+          #keys: '[413988.0.1478231771]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'CC_EngineRackRow.CC_EngineRackCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'TotalQuantityOfMaterialRacks;NumberOfEmptyShelves;StorageFeesForRentedWarehouses;OutboundExpensesForRentedWarehouses;ExternalRentalWarehouseTransportationCosts;RentalWarehouseStorageFees;CleaningCost;EstimatedTotalCost;Coefficient;TotalCost'
+        Column: 'CC_EngineRackColumn'
+        Row: 'CC_EngineRackRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows933
+    {
+      #keys: '[413988.0.1478231774]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor852
+        {
+          #keys: '[413988.0.1478231775]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'CC_EngineRackRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Name'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns163
+    {
+      #keys: '[413988.0.1478231778]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor403
+        {
+          #keys: '[413988.0.1478231779]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'CC_EngineRackColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'StartDate'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage178
+    #child: matrixeditorContextMenu683
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns163'
+    ContextMenu: 'matrixeditorContextMenu683'
+    Rows: 'MatrixEditorRows933'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixEditorActionBarPage178.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixEditorActionBarPage178.def
new file mode 100644
index 0000000..f3c1018
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixEditorActionBarPage178.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage178
+{
+  #keys: '[413988.0.1478231782]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixeditorContextMenu683.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixeditorContextMenu683.def
new file mode 100644
index 0000000..8625d7e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_matrixeditorContextMenu683.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu683
+{
+  #keys: '[413988.0.1478231785]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pContent.def
new file mode 100644
index 0000000..565cb90
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pContent.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pContent
+{
+  #keys: '[413988.0.1478230471]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor531
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
new file mode 100644
index 0000000..67e1268
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Component_pHeader.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.0.1478230459]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bRefresh
+    {
+      #keys: '[413988.0.1478230548]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bRefresh_OnClick.def
new file mode 100644
index 0000000..f544dae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/Response_pHeader_bRefresh_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: pHeader/bRefresh
+Response OnClick () id:Response_pHeader_bRefresh_OnClick
+{
+  #keys: '[413988.0.1478230577]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      CC_EngineRackCell::CreateData( MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/_ROOT_Component_FormCC_EngineRackReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/_ROOT_Component_FormCC_EngineRackReport.def
new file mode 100644
index 0000000..4e8e307
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCC_EngineRackReport/_ROOT_Component_FormCC_EngineRackReport.def
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCC_EngineRackReport
+{
+  #keys: '[413988.0.1478230433]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pHeader
+    #child: pContent
+  ]
+}
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..70dd20a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_MatrixEditorTable_OnUpdateValue.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#parent: MatrixEditorTable
+Response OnUpdateValue (
+  DLEngineLogisticsCostRow row,
+  DLEngineLogisticsCostColumn column,
+  DLEngineLogisticsCostCell cell,
+  Number value,
+  Number oldvalue
+) id:Response_MatrixEditorTable_OnUpdateValue
+{
+  #keys: '[415136.0.992750480]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMatrixEditor_OnUpdateValue'
+  QuillAction
+  {
+    Body:
+    [*
+      table            := selectobject( MacroPlan, DLEngineLogisticsCostReport, report, not report.IsShow() );
+      info( focusedattribute );
+      //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_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def
new file mode 100644
index 0000000..ca7f4d4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/Response_OnCreated.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormDLEngineLogisticsCostReport_OnCreated
+{
+  #keys: '[415136.0.997148779]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  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..5e6807d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDLEngineLogisticsCostReport/_ROOT_Component_FormDLEngineLogisticsCostReport.def
@@ -0,0 +1,39 @@
+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:
+  [
+    Description: 'DL engine logistics cost report'
+    Image: 'MONEY2'
+    Title: '澶ц繛鍙戝姩鏈虹墿娴佹垚鏈姤琛�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def
new file mode 100644
index 0000000..e80f1a7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_MatrixEditor392.def
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditor392
+{
+  #keys: '[413988.0.1489707423]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCell613
+    {
+      #keys: '[413988.0.1489707424]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractor134
+        {
+          #keys: '[413988.0.1489707425]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'DL_EngineRackRow.DL_EngineRackCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'TotalQuantityOfMaterialRacks;NumberOfEmptyShelves;CCStorageFeesForRentedWarehouses;CCOutboundExpensesForRentedWarehouses;CCRentalWarehouseStorageFees;CCLineHaulCost;CCShortDistanceTransportationCosts;DLStorageFeesForRentedWarehouses;DLOutboundExpensesForRentedWarehouses;DLExternalRentalWarehouseTransportationCosts;DLRentalWarehouseStorageFees;CleaningCost;EstimatedTotalCost;Coefficient;TotalCost'
+        Column: 'DL_EngineRackColumn'
+        Row: 'DL_EngineRackRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRows494
+    {
+      #keys: '[413988.0.1489707428]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor670
+        {
+          #keys: '[413988.0.1489707429]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'DL_EngineRackRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Name'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumns989
+    {
+      #keys: '[413988.0.1489707432]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractor963
+        {
+          #keys: '[413988.0.1489707433]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'DL_EngineRackColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'StartDate'
+        SortCriteria: 'StartDate'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPage191
+    #child: matrixeditorContextMenu687
+  ]
+  Properties:
+  [
+    AllowMultipleAttributes: true
+    Columns: 'MatrixEditorColumns989'
+    ContextMenu: 'matrixeditorContextMenu687'
+    Rows: 'MatrixEditorRows494'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixEditorActionBarPage191.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixEditorActionBarPage191.def
new file mode 100644
index 0000000..850426c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixEditorActionBarPage191.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPage191
+{
+  #keys: '[413988.0.1489707436]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixeditorContextMenu687.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixeditorContextMenu687.def
new file mode 100644
index 0000000..70b409c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_matrixeditorContextMenu687.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenu687
+{
+  #keys: '[413988.0.1489707439]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pContent.def
new file mode 100644
index 0000000..d978a52
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pContent.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component pContent
+{
+  #keys: '[413988.0.1488511835]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditor392
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pHeader.def
new file mode 100644
index 0000000..d9d33b0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Component_pHeader.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pHeader
+{
+  #keys: '[413988.0.1488511824]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bRefresh
+    {
+      #keys: '[413988.0.1488540773]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'REFRESH'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Border: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def
new file mode 100644
index 0000000..198ae43
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: pHeader/bRefresh
+Response OnClick () id:Response_pHeader_bRefresh_OnClick
+{
+  #keys: '[413988.0.1488531173]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      DL_EngineRackCell::CreateData( MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/_ROOT_Component_FormDL_EngineRackReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/_ROOT_Component_FormDL_EngineRackReport.def
new file mode 100644
index 0000000..23cd4e6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/_ROOT_Component_FormDL_EngineRackReport.def
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormDL_EngineRackReport
+{
+  #keys: '[413988.0.1488511807]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pHeader
+    #child: pContent
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def
index 3a6bcc9..bac49a1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEnginePipelineReport/_ROOT_Component_FormEnginePipelineReport.def
@@ -42,7 +42,8 @@
   ]
   Properties:
   [
+    Description: 'Engine pipeline report'
     Image: 'DOCUMENT_CONNECTION'
-    Title: 'Engine pipeline report'
+    Title: '鍙戝姩鏈虹绾挎姤琛�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
index 146e986..7e63fb7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/_ROOT_Component_FormFinancialProductionReport.def
@@ -32,7 +32,8 @@
   ]
   Properties:
   [
+    Description: 'Financial production report'
     Image: 'DOCUMENT_REFRESH'
-    Title: 'Financial production report'
+    Title: '璐㈠姟浜ч噺鎶ヨ〃'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
index 248b71f..a30e8a2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
@@ -32,7 +32,8 @@
   ]
   Properties:
   [
+    Description: 'Financial sales report'
     Image: 'MONEY_COINS2'
-    Title: 'Financial sales report'
+    Title: '璐㈠姟閿�閲忔姤琛�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def
index af4455d..349ef4e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def
@@ -12,7 +12,8 @@
   ]
   Properties:
   [
+    Description: 'Financial weekly report'
     Image: 'DOCUMENT_DIRTY'
-    Title: 'Financial weekly report'
+    Title: '闀挎槬鍛ㄦ姤琛�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
index 18cc120..0f7034e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
@@ -32,7 +32,8 @@
   ]
   Properties:
   [
+    Description: 'Inventory summary report'
     Image: 'DOCUMENT_CHECK_EDIT'
-    Title: 'Inventory summary report'
+    Title: '搴撳瓨姹囨�绘姤琛�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
index 323e7bd..7d54e40 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormMachiningPipelineReport/_ROOT_Component_FormMachiningPipelineReport.def
@@ -32,7 +32,8 @@
   ]
   Properties:
   [
+    Description: 'Machining pipeline report'
     Image: 'DOCUMENT_CONNECTION'
-    Title: 'Machining pipeline report'
+    Title: '鏈哄姞浠剁绾挎姤琛�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/CCEngineRackReport.vw b/_Main/UI/MacroPlannerWebApp/Views/CCEngineRackReport.vw
new file mode 100644
index 0000000..dbdb6c2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/CCEngineRackReport.vw
@@ -0,0 +1,206 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormCC_EngineRackReport
+      {
+        title: 'QMacroPlanner::FormCC_EngineRackReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormCC_EngineRackReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormCC_EngineRackReport_pHeader
+          {
+            sizeRatio: 1
+          }
+          FormCC_EngineRackReport_pContent
+          {
+            sizeRatio: 1
+          }
+          FormCC_EngineRackReport_MatrixEditor531
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormCC_EngineRackReport.MatrixEditor531'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_TotalQuantityOfMaterialRacks
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalQuantityOfMaterialRacks'
+                    }
+                    attribute_NumberOfEmptyShelves
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'NumberOfEmptyShelves'
+                    }
+                    attribute_StorageFeesForRentedWarehouses
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'StorageFeesForRentedWarehouses'
+                    }
+                    attribute_OutboundExpensesForRentedWarehouses
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'OutboundExpensesForRentedWarehouses'
+                    }
+                    attribute_ExternalRentalWarehouseTransportationCosts
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 4
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'ExternalRentalWarehouseTransportationCosts'
+                    }
+                    attribute_RentalWarehouseStorageFees
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 5
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'RentalWarehouseStorageFees'
+                    }
+                    attribute_CleaningCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 6
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CleaningCost'
+                    }
+                    attribute_EstimatedTotalCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 7
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'EstimatedTotalCost'
+                    }
+                    attribute_Coefficient
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 8
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Coefficient'
+                    }
+                    attribute_TotalCost
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 9
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalCost'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'StartDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Name'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormGeneralSettings
+      {
+        title: 'General Settings'
+        shown: true
+        componentID: 'FormGeneralSettings'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormGeneralSettings_PanelContent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelGeneralParameter
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelLeadTimeDependent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelShelfLife
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelSustainability
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelForecastNetting
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelActions
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'SATELLITE'
+    description: ''
+  }
+  formatversion: 2
+  id: 'CCEngineRackReport'
+  name: 'CCEngineRackReport'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/CC_engine_logistics_cost_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/CC_engine_logistics_cost_report_view.vw
new file mode 100644
index 0000000..d2ca7d4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/CC_engine_logistics_cost_report_view.vw
@@ -0,0 +1,104 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormCCEngineLogisticsCostReport
+      {
+        title: 'QMacroPlanner::FormCCEngineLogisticsCostReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormCCEngineLogisticsCostReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 13
+        }
+        components
+        {
+          FormCCEngineLogisticsCostReport_PanelCCEngineLogisticsCostReportHeader
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_PanelCCEngineLogisticsCostReportSearch
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_PanelGeneration
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_PanelMQBMLB
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_PanelPower
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormCCEngineLogisticsCostReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 113
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormCCEngineLogisticsCostReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 27
+    image: 'MONEY2'
+    description: ''
+  }
+  formatversion: 2
+  id: 'CC_engine_logistics_cost_report_view'
+  name: 'CC engine logistics cost report view'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/DLEngineRackReport.vw b/_Main/UI/MacroPlannerWebApp/Views/DLEngineRackReport.vw
new file mode 100644
index 0000000..12f5037
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/DLEngineRackReport.vw
@@ -0,0 +1,89 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormDL_EngineRackReport
+      {
+        title: 'QMacroPlanner::FormDL_EngineRackReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormDL_EngineRackReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 14
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormDL_EngineRackReport_pHeader
+          {
+            sizeRatio: 1
+          }
+          FormDL_EngineRackReport_pContent
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+      form_FormGeneralSettings
+      {
+        title: 'General Settings'
+        shown: true
+        componentID: 'FormGeneralSettings'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormGeneralSettings_PanelContent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelGeneralParameter
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelLeadTimeDependent
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelShelfLife
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelSustainability
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelForecastNetting
+          {
+            sizeRatio: 1
+          }
+          FormGeneralSettings_PanelActions
+          {
+            sizeRatio: 1
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'DOCUMENT_MUSIC'
+    description: ''
+  }
+  formatversion: 2
+  id: 'DLEngineRackReport'
+  name: 'DLEngineRackReport'
+  isglobal: false
+  isroot: true
+}
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
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/DemandComparison.vw b/_Main/UI/MacroPlannerWebApp/Views/DemandComparison.vw
index 3f13663..177feb9 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/DemandComparison.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/DemandComparison.vw
@@ -2,6 +2,142 @@
 {
   viewcontents
   {
+    forms
+    {
+      form_FormDemandComparison
+      {
+        title: 'QMacroPlanner::FormDemandComparison'
+        shown: true
+        componentID: 'QMacroPlanner::FormDemandComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 17
+          columnPosition: 1
+          columnSpan: 11
+        }
+        components
+        {
+          FormDemandComparison_PanelDemandComparison294
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_PanelSelection
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_PanelSelectionChecks
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pSelectionPR
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pSelectionPP
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pSelectionBudget
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pSelectionPPA
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pSelectionIDS
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pSelectionCurve
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_PanelFilter
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_PanelOperation
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_pVersionInfomation
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_PanelDemandComparison
+          {
+            sizeRatio: 1
+          }
+          FormDemandComparison_MatrixEditor
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormDemandComparison.MatrixEditor'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_BaseVersion
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'BaseVersion'
+                    }
+                    attribute_CompareVersion
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'CompareVersion'
+                    }
+                    attribute_Gap
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Gap'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
     page: ''
     group: ''
     index: 0
diff --git a/_Main/UI/MacroPlannerWebApp/Views/LogisticsCostParameterSetting.vw b/_Main/UI/MacroPlannerWebApp/Views/LogisticsCostParameterSetting.vw
index e12a02c..3835185 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/LogisticsCostParameterSetting.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/LogisticsCostParameterSetting.vw
@@ -43,21 +43,12 @@
               subtotals: ''
               width: 82
             }
-            column_Product
-            {
-              columnId: 'Product'
-              dataPath: 'Product'
-              dataType: 'string'
-              index: 2
-              subtotals: ''
-              width: 63
-            }
             column_Factory
             {
               columnId: 'Factory'
               dataPath: 'Factory'
               dataType: 'string'
-              index: 3
+              index: 2
               subtotals: ''
               width: 60
             }
@@ -66,7 +57,7 @@
               columnId: 'PackagingCapacity'
               dataPath: 'PackagingCapacity'
               dataType: 'number'
-              index: 4
+              index: 3
               subtotals: ''
               width: 86
             }
@@ -75,7 +66,7 @@
               columnId: 'WarehousingPrice'
               dataPath: 'WarehousingPrice'
               dataType: 'number'
-              index: 5
+              index: 4
               subtotals: ''
               width: 126
             }
@@ -84,7 +75,7 @@
               columnId: 'OutboundPrice'
               dataPath: 'OutboundPrice'
               dataType: 'number'
-              index: 6
+              index: 5
               subtotals: ''
               width: 126
             }
@@ -93,7 +84,7 @@
               columnId: 'StoragePrice'
               dataPath: 'StoragePrice'
               dataType: 'number'
-              index: 7
+              index: 6
               subtotals: ''
               width: 124
             }
@@ -102,7 +93,7 @@
               columnId: 'OtherPrice'
               dataPath: 'OtherPrice'
               dataType: 'number'
-              index: 8
+              index: 7
               subtotals: ''
               width: 127
             }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw b/_Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw
index 7ecffee..7db21f8 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/ShiftPlan.vw
@@ -2,10 +2,94 @@
 {
   viewcontents
   {
-    image: 'COMPASSES'
+    forms
+    {
+      form_FormShihtPlan
+      {
+        title: 'QMacroPlanner::FormShihtPlan'
+        shown: true
+        componentID: 'QMacroPlanner::FormShihtPlan'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 17
+          columnPosition: 1
+          columnSpan: 9
+        }
+        components
+        {
+          FormShihtPlan_PanelMatrix
+          {
+            sizeRatio: 1
+          }
+          FormShihtPlan_pOperation
+          {
+            sizeRatio: 1
+          }
+          FormShihtPlan_MatrixEditorTimeCapacities
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormShihtPlan.MatrixEditorTimeCapacities'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Outcome
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Outcome'
+                    }
+                    attribute_Remark
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Remark'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'StartDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
     page: ''
     group: ''
     index: 0
+    image: 'COMPASSES'
     description: ''
   }
   formatversion: 2
diff --git "a/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw" "b/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw"
index 9b27eac..2fa4484 100644
--- "a/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw"
+++ "b/_var/_Main/ProjSettings/EditorTC/Views/\347\217\255\346\254\241\346\227\266\351\227\264\345\210\206\346\236\220_\133413988.0.1367211460\135.vw"
@@ -17,7 +17,7 @@
   CREATIONUSER 'quintiq/lihongji'
   UPDATEDATETIME '2024-07-16T11:47:37'
   UPDATEUSER 'quintiq/lihongji'
-  LASTACCESSDATE '2024-08-07'
+  LASTACCESSDATE '2024-08-12'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS

--
Gitblit v1.9.3