From 916984c1eb182dbdabf8f40007cdc1648bcd460e Mon Sep 17 00:00:00 2001
From: lihongji <3117313295@qq.com>
Date: 星期二, 09 七月 2024 13:19:32 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev

---
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def                                         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryProductSearch.def                                    |   19 
 _Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def                                             |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def                                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick#723.def                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def                                                                        |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedSalesSegment_OnDataChanged.def                    |   21 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl                                                              |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def             |   47 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def                                          |   16 
 _Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl                                                  |   23 
 _Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl                                                                                          |    7 
 _Main/BL/Type_FinancialWeeklyColumn/Attribute_Index.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def                                                                 |   34 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def                                                   |   17 
 _Main/BL/Type_InventorySummarySearch/Attribute_StartDate.qbl                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def                                |   16 
 _Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl                                                                                |    2 
 _Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl                                                                                         |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def                                                           |   24 
 _Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl                                                                                                |    6 
 _Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl                                                                                     |   63 
 _Main/BL/Type_FinancialWeeklyRow/_ROOT_Type_FinancialWeeklyRow.qbl                                                                                   |   10 
 _Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl                                                                                              |    7 
 _Main/BL/Type_ProductInStockingPointInPeriod#228/_ROOT_Type_ProductInStockingPointInPeriod.qbl                                                       |    6 
 _Main/BL/Relations/Relation_InventorySummaryReport_InventorySummaryColumn_InventorySummaryColum.qbl                                                  |   26 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_Download.qbl                                                                                        |   65 
 _Main/BL/Type_InventorySummaryCell/Attribute_MinimumInventory.qbl                                                                                    |    8 
 _Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl                                                                                                  |    8 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl                                                               |   27 
 _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl                                                                            |    1 
 _Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def                                                          |   59 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def                                                                          |   18 
 _Main/BL/Type_InventorySummarySource/StaticMethod_DownloadTemplate.qbl                                                                               |   40 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged#98.def                 |    2 
 _Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnCreated.def                                         |   23 
 _Main/BL/Type_FinancialWeeklyCell/_ROOT_Type_FinancialWeeklyCell.qbl                                                                                 |   10 
 _Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl                                                                                            |   14 
 _Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl                                                                                     |   53 
 _Main/BL/Type_FinancialWeeklyRow/DefaultValue_Name.qbl                                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def               |    2 
 _Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl                                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def                                  |   20 
 _Main/BL/Type_InventorySummaryReport/Attribute_ID.qbl                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_MatrixEditorTable.def                                                      |   97 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelUnit.def                                                             |   24 
 _Main/BL/Type_InventorySummaryReport/DefaultValue_ID.qbl                                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def                 |   16 
 _Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl                                                                                                  |    7 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl                                                       |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def                                                            |   10 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl                                                                                 |   40 
 _Main/BL/Type_FinancialWeeklyRow/Attribute_Name.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable#1.def                                          |   10 
 _Main/BL/Type_ExportXMLManager/Method_Export.qbl                                                                                                     |    9 
 _Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def                                           |   21 
 _Main/BL/Type_Test/StaticMethod_Test.qbl                                                                                                             |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def                                                               |   16 
 _Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl                                                                                                 |   21 
 _Main/BL/Type_FinancialWeeklyColumn/_ROOT_Type_FinancialWeeklyColumn.qbl                                                                             |   10 
 _Main/BL/Type_FinancialWeeklyReport/_ROOT_Type_FinancialWeeklyReport.qbl                                                                             |   10 
 _Main/BL/Type_InventorySummaryColumn/_ROOT_Type_InventorySummaryColumn.qbl                                                                           |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsEndDate_OnChanged.def                                              |   16 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl                                                                                   |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def                                        |   18 
 _Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl                                                                                               |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def                                                   |   19 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetColumnXML.qbl                                                                               |   45 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonInventorySummaryReport_OnCl.def       |   16 
 _Main/BL/Type_InventroySummaryRow/Attribute_Unit.qbl                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def                                          |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryColumnSearch.def                                     |   18 
 _Main/BL/Type_InventorySummaryColumn/Attribute_Name.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslMQBMLB_OnCreated.def                                             |   20 
 _Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl                                                                                 |   12 
 _Main/BL/Type_FinancialWeeklyReport/Attribute_ID.qbl                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def                             |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhEndDate_OnCreated.def                                              |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def                                           |   21 
 _Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl                                                                                                   |    7 
 _Main/BL/Type_InventorySummarySearch/Attribute_Power.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def                                                                    |   34 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def                                                                     |   35 
 _Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl                                                                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def                                                                        |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def                                           |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def                                                                        |   15 
 _Main/BL/Type_InventorySummaryReport/DefaultValue_Name.qbl                                                                                           |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def             |   22 
 _Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl                                                                        |   23 
 _Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl                                                                                           |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def                      |   20 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl                                                                                       |  104 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick#570.def                                              |   30 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultName.qbl                                                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialWeeklyReport_OnCli.def       |   16 
 _Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl                                                                                            |   13 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl                                                                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def                                                                |   59 
 _Main/BL/Type_InventroySummaryRow/_ROOT_Type_InventroySummaryRow.qbl                                                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit#715.def                                                           |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def                  |    2 
 _Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyColumn_FinancialWeeklyColumn_F.qbl                                                  |   26 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl                                                                           |   10 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl                                                                  |    7 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl                                                           |    7 
 _Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl                                                                                                   |    8 
 _Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl                                                                                     |    7 
 _Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl                                                                                       |   48 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def                    |    2 
 _Main/BL/Type_InventroySummaryRow/DefaultValue_Unit.qbl                                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def                   |    2 
 _Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl                                                                                                   |   78 
 _Main/BL/Type_FinancialSalesReport/Method_Generate.qbl                                                                                               |   44 
 _Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl                                                                            |    1 
 _Main/BL/Type_InventorySummarySearch/Attribute_MqbMlb.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def                                                |   16 
 _Main/BL/Type_InventorySummaryColumn/DefaultValue_Name.qbl                                                                                           |    6 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl                                   |    8 
 _Main/BL/Type_InventorySummarySearch/DefaultValue_MqbMlb.qbl                                                                                         |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def                                                       |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def                                             |   20 
 _Main/BL/Type_FinancialSalesRow/Method_Filter.qbl                                                                                                    |   22 
 _Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl                                                        |   23 
 _Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl                                                                                          |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixEditorActionBarPageTable.def                                         |   10 
 _Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl                                                                                   |    8 
 _Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl                                                                                                |    8 
 _Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl                                                                                         |   20 
 _Main/BL/Type_InventorySummaryCell/Attribute_MaximumInventory.qbl                                                                                    |    8 
 _Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl                                                                                     |   57 
 _Main/BL/Type_FinancialWeeklyReport/Method_GenerateColumn.qbl                                                                                        |   20 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def                                                     |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def                                                              |   46 
 _Main/BL/Type_InventroySummaryRow/Attribute_RowNr.qbl                                                                                                |    7 
 _Main/BL/Type_InventorySummarySearch/_ROOT_Type_InventorySummarySearch.qbl                                                                           |   10 
 _Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl                                                                  |   23 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl                                                                           |   10 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl                                                          |    7 
 _Main/BL/Type_ExportXMLManager/Attribute_SheetName.qbl                                                                                               |    7 
 _Main/BL/Relations/Relation_FinancialWeeklyReport_MacroPlan_MacroPlan_FinancialWeeklyReport.qbl                                                      |   23 
 _Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def                                |   24 
 _Main/BL/Type_FinancialWeeklyReport/DefaultValue_ID.qbl                                                                                              |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable#1.def                                        |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelMQBMLB.def                                                           |   24 
 _Main/BL/Type_FinancialWeeklyColumn/Attribute_Name.qbl                                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def                                     |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def                                  |   24 
 _Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay#687.def                                                     |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def                                                              |   24 
 _Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl                                                                                          |   36 
 _Main/BL/Type_InventorySummarySearch/DefaultValue_Power.qbl                                                                                          |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def              |    2 
 _Main/BL/Type_InventorySummarySearch/DefaultValue_Unit.qbl                                                                                           |    6 
 _Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl                                                                                  |   23 
 _Main/BL/Type_FinancialProductionCell/Function_CalcPlanValue.qbl                                                                                     |   13 
 _Main/BL/Type_InventorySummaryCell/_ROOT_Type_InventorySummaryCell.qbl                                                                               |   10 
 _Main/BL/Type_InventorySummaryCell/Attribute_EndingInventory.qbl                                                                                     |    8 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged#847.def             |   20 
 _Main/BL/Type_EmployeeType/Attribute_Name.qbl                                                                                                        |    7 
 _var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__[124808.0.140900041].vw                                                     |    2 
 _Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Views/Financial_weekly_report_view.vw                                                                                    |   92 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def                                        |   21 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def                                                                |  121 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower#858.def                                                          |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def                                                     |   48 
 _Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl                                                                               |   10 
 _Main/BL/Type_InventorySummaryReport/Attribute_IsShow.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def                                                           |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def                    |   20 
 _Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl                                                  |   23 
 _Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl                                                            |   23 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl                                                                               |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable#424.def                                                          |   14 
 _Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl                                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def                                                                |    6 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl                                                                                |   11 
 _Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl                                                                                   |    6 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl                                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def                                                           |    6 
 _Main/BL/Relations/Relation_FinancialWeeklyColumn_FinancialWeeklyCell_FinancialWeeklyCell_Finan.qbl                                                  |   26 
 _Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl                                                                                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomation.def                                                          |   53 
 _Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl                                                                                                  |    8 
 _Main/BL/Type_InventorySummaryCell/Attribute_AverageInventory.qbl                                                                                    |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged#599.def             |    2 
 _Main/BL/Type_FinancialWeeklyReport/Attribute_IsShow.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixEditorActionBarPageTable.def                                        |   10 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl                                                        |   27 
 _Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl                                                                                             |   26 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def                                                      |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def                  |    2 
 _Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl                                                                                               |    7 
 _Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl                                                                                     |    9 
 _Main/BL/Type_InventorySummarySource/Attribute_Name.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryHeader.def                                           |   16 
 _Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl                                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def                                                            |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnCreated.def                               |   23 
 _Main/BL/Type_InventorySummaryColumn/Attribute_Period.qbl                                                                                            |    7 
 _Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl                                                                                                    |    7 
 _Main/BL/Type_InventorySummarySource/StaticMethod_Upload.qbl                                                                                         |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def            |    2 
 _Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl                                                                               |    5 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultName.qbl                                                                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslPower_OnCreated.def                                              |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslGeneration_OnCreated.def                                         |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def                              |   20 
 _Main/BL/Type_FinancialWeeklyRow/Attribute_RowNr.qbl                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def                                              |   22 
 _Main/BL/Type_FinancialWeeklyColumn/DefaultValue_Name.qbl                                                                                            |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def                                                                |   24 
 _Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl                                                                                          |    8 
 _Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl                                                                                                   |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixeditorContextMenuTable.def                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def                                |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def                                                    |    1 
 _Main/BL/Type_InventorySummarySearch/Attribute_Unit.qbl                                                                                              |    8 
 _Main/BL/Type_InventorySummaryReport/_ROOT_Type_InventorySummaryReport.qbl                                                                           |   10 
 _Main/BL/Type_InventorySummaryColumn/Attribute_Index.qbl                                                                                             |    7 
 _Main/BL/Type_FinancialWeeklyCell/Attribute_Value.qbl                                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def                                       |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def                                      |   38 
 _Main/BL/Type_InventorySummarySearch/DefaultValue_Generation.qbl                                                                                     |    6 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl                                                                           |   10 
 _Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl                                                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixeditorContextMenuTable.def                                           |   10 
 _Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl                                                                                               |   39 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def                                           |   19 
 _Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl                                                                                              |    7 
 _Main/BL/Relations/Relation_InventorySummaryReport_InventroySummaryRow_InventroySummaryRow_Inve.qbl                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def                                                          |   18 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl                                                                |   17 
 _Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl                                                                                                |    7 
 _Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl                                                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def                                                           |   35 
 _Main/UI/MacroPlannerWebApp/Views/Inventory_summary_report_view.vw                                                                                   |  140 +
 _Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_MatrixEditorTable.def                                                     |   98 
 _Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl                                                  |   26 
 _Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl                                                                                                 |    7 
 _Main/BL/Type_FinancialWeeklyColumn/Attribute_Period.qbl                                                                                             |    7 
 _Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl                                                                                             |    6 
 _Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl                                                                                             |    2 
 _Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl                                                                                      |    7 
 _Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl                                                                                     |  135 +
 _Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl                                                                                            |   41 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def                                      |   46 
 _Main/BL/Type_FinancialWeeklyCell/DefaultValue_Value.qbl                                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def                    |   17 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def                                           |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable#623.def                                                   |   97 
 _Main/BL/Relations/Relation_InventorySummaryColumn_InventorySummaryCell_InventorySummaryCell_In.qbl                                                  |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def                                                    |   20 
 _Main/BL/Type_FinancialWeeklyReport/Attribute_Name.qbl                                                                                               |    8 
 _Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def                                          |   38 
 _Main/BL/Type_InventorySummarySearch/Attribute_Generation.qbl                                                                                        |    7 
 _Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def                                              |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelCategory.def                                                         |   29 
 _Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def                                       |   23 
 _Main/BL/Type_InventorySummarySearch/Attribute_EndDate.qbl                                                                                           |    8 
 _Main/BL/Type_InventorySummarySource/_ROOT_Type_InventorySummarySource.qbl                                                                           |   10 
 _Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl                                                                                          |    7 
 _Main/BL/Type_InventorySummarySource/DefaultValue_Name.qbl                                                                                           |    6 
 _Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl                                                  |   23 
 _Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl                                                                                           |    6 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl                                                                                         |   78 
 _Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl                                                                                       |  135 +
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost#154.def                                                           |   16 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl                                                                                |   11 
 _Main/BL/Type_InventroySummaryRow/DefaultValue_Name.qbl                                                                                              |    6 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl                                                                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def                                        |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPower.def                                                            |   24 
 _Main/BL/Relations/Relation_InventroySummaryRow_InventorySummaryCell_InventorySummaryCell_Inven.qbl                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def                                                                 |   96 
 _Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl                                                                                     |   10 
 _Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl                                                                                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB#603.def                                                         |   24 
 _Main/BL/Type_InventorySummaryReport/Method_Clear.qbl                                                                                                |   17 
 _Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl                                                                                           |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost#289.def                                                            |   59 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def                            |   20 
 _Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl                                                                                                   |    7 
 _Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl                                                                                   |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def                                                                |   40 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhFinelProduct_OnCreated.def                               |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelGeneration.def                                                       |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def                                     |   23 
 _Main/BL/Type_InventorySummaryReport/Attribute_Name.qbl                                                                                              |    8 
 _Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def                                                              |   46 
 _Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl                                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsStartDate_OnChanged.def                                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def                                |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_ButtonExport_OnClick.def                                        |   18 
 _Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl                                                                                            |    6 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl                                                                                      |  173 +
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def                                                                   |   63 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def                                                              |   46 
 _Main/BL/Type_InventroySummaryRow/Method_Filter.qbl                                                                                                  |   22 
 _Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl                                                                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration#844.def                                                     |   24 
 _Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw                                                                                                     |   16 
 _Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl                                                                                               |   21 
 _Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl                                                                                               |    7 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultAllUnit.qbl                                                                              |   10 
 _Main/BL/Type_InventroySummaryRow/Method_SetCellValue#0.qbl                                                                                          |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def                                                         |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def                                                |   18 
 _Main/BL/Type_LocalColumn/Function_CalcDate.qbl                                                                                                      |   13 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl                                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def                                             |   26 
 _Main/BL/Type_InventorySummaryReport/Method_Generate.qbl                                                                                             |   49 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def                                                 |   45 
 _Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport#545.def                                                         |   24 
 _Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw                                                                                     |  120 
 _Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl                                                                                |    9 
 _Main/BL/Type_InventroySummaryRow/Attribute_Name.qbl                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def |    2 
 _Main/BL/Type_FinancialSalesReport/Method_Clear.qbl                                                                                                  |   13 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def                 |    2 
 _Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation#568.def                                                          |   49 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def                                        |   21 
 _Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl                                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def                                               |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def                                         |   19 
 _Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultAllUnit.qbl                                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def                                                                         |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def                                         |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def                              |   20 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def       |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelTable.def                                                             |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelTable.def                                                            |   14 
 _Main/BL/Type_InventorySummaryColumn/Function_CalcIndex.qbl                                                                                          |   13 
 _Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl                                                                                              |    7 
 _Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl                                                                               |   11 
 _Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl                                                                                |    6 
 _Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl                                                                                   |   10 
 _Main/BL/Relations/Relation_InventorySummarySource_MacroPlan_MacroPlan_InventorySummarySource.qbl                                                    |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def          |    2 
 _Main/BL/Type_LocalColumn/Attribute_Date.qbl                                                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhStartDate_OnCreated.def                                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def                                                            |   25 
 _Main/BL/Type_InventorySummarySearch/Attribute_Category.qbl                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedProduct_OnDataChanged.def                         |   20 
 _Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl                                                  |   26 
 _Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def                                                            |   10 
 _Main/BL/Relations/Relation_FinancialWeeklyRow_FinancialWeeklyCell_FinancialWeeklyCell_Financia.qbl                                                  |   23 
 _Main/BL/Type_FinancialWeeklyReport/DefaultValue_Name.qbl                                                                                            |    6 
 _Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl                                                                                              |    6 
 _Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyRow_FinancialWeeklyRow_Financi.qbl                                                  |   23 
 _Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl                                                                                                |    8 
 _Main/BL/Type_InventroySummaryRow/StaticMethod_NewStaticMethod.qbl                                                                                   |    9 
 _Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl                                                                                             |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSummaryExport_OnClick.def                                |   22 
 _Main/BL/Type_FinancialProductionCell/Attribute_PlanValue.qbl                                                                                        |    8 
 _Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl                                                                               |   10 
 _Main/BL/Type_FinancialWeeklyColumn/Function_CalcIndex.qbl                                                                                           |   13 
 _Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl                                                                                               |    9 
 _Main/BL/Relations/Relation_InventorySummarySource_InventorySummaryReport_InventorySummaryRepor.qbl                                                  |   23 
 _Main/BL/Type_InventorySummarySource/Attribute_ID.qbl                                                                                                |    8 
 382 files changed, 7,517 insertions(+), 103 deletions(-)

diff --git a/_Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl b/_Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl
new file mode 100644
index 0000000..4063152
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EmployeeCost_EmployeeType_EmployeeType_EmployeeCost.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EmployeeCost_EmployeeType_EmployeeType_EmployeeCost
+{
+  #keys: '1[412672.1.2854689]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide EmployeeType
+  {
+    #keys: '3[412672.1.2854691][412672.1.2854690][412672.1.2854692]'
+    Cardinality: '0to1'
+    ObjectDefinition: EmployeeCost
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EmployeeCost
+  {
+    #keys: '3[412672.1.2854694][412672.1.2854693][412672.1.2854695]'
+    Cardinality: '1toN'
+    ObjectDefinition: EmployeeType
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl b/_Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl
new file mode 100644
index 0000000..116f104
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EmployeeCost_Unit_Unit_EmployeeCost.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EmployeeCost_Unit_Unit_EmployeeCost
+{
+  #keys: '1[412672.1.2854611]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Unit
+  {
+    #keys: '3[412672.1.2854613][412672.1.2854612][412672.1.2854614]'
+    Cardinality: '0to1'
+    ObjectDefinition: EmployeeCost
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EmployeeCost
+  {
+    #keys: '3[412672.1.2854616][412672.1.2854615][412672.1.2854617]'
+    Cardinality: '1toN'
+    ObjectDefinition: Unit
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl b/_Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl
new file mode 100644
index 0000000..8dc7a1c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_EmployeeType_MacroPlan_MacroPlan_EmployeeType.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation EmployeeType_MacroPlan_MacroPlan_EmployeeType
+{
+  #keys: '1[412672.1.2880055]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412672.1.2880057][412672.1.2880056][412672.1.2880058]'
+    Cardinality: '0to1'
+    ObjectDefinition: EmployeeType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide EmployeeType
+  {
+    #keys: '3[412672.1.2880060][412672.1.2880059][412672.1.2880061]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl b/_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl
new file mode 100644
index 0000000..bfe2c42
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_FinancialSalesColumn
+{
+  #keys: '1[415136.0.857450656]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.857450675][415136.0.857450669][415136.0.857450676][415136.0.857450670][415136.0.857450677][415136.0.857450671][415136.0.857450678][415136.0.857450672][415136.0.857450679][415136.0.857450673][415136.0.857450680][415136.0.857450674]'
+    SequenceElementSuffix: 'CellInColumn'
+    SequenceSuffix: 'CellInColumn'
+  }
+  RelationSide.LeftSide FinancialSalesCell
+  {
+    #keys: '3[415136.0.857450658][415136.0.857450657][415136.0.857450659]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialSalesColumn
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialSalesColumn
+  {
+    #keys: '3[415136.0.857450661][415136.0.857450660][415136.0.857450662]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl
new file mode 100644
index 0000000..107d9d8
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_FinancialSalesReport
+{
+  #keys: '1[415136.0.857450615]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.857450634][415136.0.857450628][415136.0.857450635][415136.0.857450629][415136.0.857450636][415136.0.857450630][415136.0.857450637][415136.0.857450631][415136.0.857450638][415136.0.857450632][415136.0.857450639][415136.0.857450633]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide FinancialSalesColumn
+  {
+    #keys: '3[415136.0.857450617][415136.0.857450616][415136.0.857450618]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialSalesReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialSalesReport
+  {
+    #keys: '3[415136.0.857450620][415136.0.857450619][415136.0.857450621]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl
new file mode 100644
index 0000000..8993e50
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_FinancialSalesReport
+{
+  #keys: '1[415136.0.857450551]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialSalesSource
+  {
+    #keys: '3[415136.0.857450553][415136.0.857450552][415136.0.857450554]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesReport
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialSalesReport
+  {
+    #keys: '3[415136.0.857450556][415136.0.857450555][415136.0.857450557]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialSalesSource
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl
new file mode 100644
index 0000000..e8a093d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSalesRow
+{
+  #keys: '1[415136.0.857450694]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialSalesCell
+  {
+    #keys: '3[415136.0.857450696][415136.0.857450695][415136.0.857450697]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialSalesRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialSalesRow
+  {
+    #keys: '3[415136.0.857450699][415136.0.857450698][415136.0.857450700]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl
new file mode 100644
index 0000000..5515d5d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_FinancialSalesRow
+{
+  #keys: '1[415136.0.857450585]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialSalesReport
+  {
+    #keys: '3[415136.0.857450587][415136.0.857450586][415136.0.857450588]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialSalesRow
+  {
+    #keys: '3[415136.0.857450590][415136.0.857450589][415136.0.857450591]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialSalesReport
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl
new file mode 100644
index 0000000..e037345
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_Fina.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesSource_FinancialSalesSearch_FinancialSalesSearch_FinancialSalesSource
+{
+  #keys: '1[415136.0.865304861]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialSalesSearch
+  {
+    #keys: '3[415136.0.865304863][415136.0.865304862][415136.0.865304864]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesSource
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialSalesSource
+  {
+    #keys: '3[415136.0.865304866][415136.0.865304865][415136.0.865304867]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesSearch
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl b/_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl
new file mode 100644
index 0000000..0986a76
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource
+{
+  #keys: '1[415136.0.857450485]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.857450487][415136.0.857450486][415136.0.857450488]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialSalesSource
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialSalesSource
+  {
+    #keys: '3[415136.0.857450490][415136.0.857450489][415136.0.857450491]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialWeeklyColumn_FinancialWeeklyCell_FinancialWeeklyCell_Finan.qbl b/_Main/BL/Relations/Relation_FinancialWeeklyColumn_FinancialWeeklyCell_FinancialWeeklyCell_Finan.qbl
new file mode 100644
index 0000000..d1549b6
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialWeeklyColumn_FinancialWeeklyCell_FinancialWeeklyCell_Finan.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialWeeklyColumn_FinancialWeeklyCell_FinancialWeeklyCell_FinancialWeeklyColumn
+{
+  #keys: '1[415136.0.880724166]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.880724185][415136.0.880724179][415136.0.880724186][415136.0.880724180][415136.0.880724187][415136.0.880724181][415136.0.880724188][415136.0.880724182][415136.0.880724189][415136.0.880724183][415136.0.880724190][415136.0.880724184]'
+    SequenceElementSuffix: 'CellInColumn'
+    SequenceSuffix: 'CellInColumn'
+  }
+  RelationSide.LeftSide FinancialWeeklyCell
+  {
+    #keys: '3[415136.0.880724168][415136.0.880724167][415136.0.880724169]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialWeeklyColumn
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialWeeklyColumn
+  {
+    #keys: '3[415136.0.880724171][415136.0.880724170][415136.0.880724172]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialWeeklyCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyColumn_FinancialWeeklyColumn_F.qbl b/_Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyColumn_FinancialWeeklyColumn_F.qbl
new file mode 100644
index 0000000..60e95e6
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyColumn_FinancialWeeklyColumn_F.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialWeeklyReport_FinancialWeeklyColumn_FinancialWeeklyColumn_FinancialWeeklyReport
+{
+  #keys: '1[415136.0.880724207]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.880724228][415136.0.880724222][415136.0.880724229][415136.0.880724223][415136.0.880724230][415136.0.880724224][415136.0.880724231][415136.0.880724225][415136.0.880724232][415136.0.880724226][415136.0.880724233][415136.0.880724227]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide FinancialWeeklyColumn
+  {
+    #keys: '3[415136.0.880724209][415136.0.880724208][415136.0.880724210]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialWeeklyReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialWeeklyReport
+  {
+    #keys: '3[415136.0.880724212][415136.0.880724211][415136.0.880724213]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialWeeklyColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyRow_FinancialWeeklyRow_Financi.qbl b/_Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyRow_FinancialWeeklyRow_Financi.qbl
new file mode 100644
index 0000000..1e7eb8b
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialWeeklyReport_FinancialWeeklyRow_FinancialWeeklyRow_Financi.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialWeeklyReport_FinancialWeeklyRow_FinancialWeeklyRow_FinancialWeeklyReport
+{
+  #keys: '1[415136.0.880724123]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialWeeklyRow
+  {
+    #keys: '3[415136.0.880724125][415136.0.880724124][415136.0.880724126]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialWeeklyReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide FinancialWeeklyReport
+  {
+    #keys: '3[415136.0.880724128][415136.0.880724127][415136.0.880724129]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialWeeklyRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialWeeklyReport_MacroPlan_MacroPlan_FinancialWeeklyReport.qbl b/_Main/BL/Relations/Relation_FinancialWeeklyReport_MacroPlan_MacroPlan_FinancialWeeklyReport.qbl
new file mode 100644
index 0000000..443896d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialWeeklyReport_MacroPlan_MacroPlan_FinancialWeeklyReport.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialWeeklyReport_MacroPlan_MacroPlan_FinancialWeeklyReport
+{
+  #keys: '1[415136.0.880700289]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.880700291][415136.0.880700290][415136.0.880700292]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialWeeklyReport
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialWeeklyReport
+  {
+    #keys: '3[415136.0.880700294][415136.0.880700293][415136.0.880700295]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialWeeklyRow_FinancialWeeklyCell_FinancialWeeklyCell_Financia.qbl b/_Main/BL/Relations/Relation_FinancialWeeklyRow_FinancialWeeklyCell_FinancialWeeklyCell_Financia.qbl
new file mode 100644
index 0000000..8992c88
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialWeeklyRow_FinancialWeeklyCell_FinancialWeeklyCell_Financia.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialWeeklyRow_FinancialWeeklyCell_FinancialWeeklyCell_FinancialWeeklyRow
+{
+  #keys: '1[415136.0.880700305]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide FinancialWeeklyCell
+  {
+    #keys: '3[415136.0.880700307][415136.0.880700306][415136.0.880700308]'
+    Cardinality: '1toN'
+    ObjectDefinition: FinancialWeeklyRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide FinancialWeeklyRow
+  {
+    #keys: '3[415136.0.880700310][415136.0.880700309][415136.0.880700311]'
+    Cardinality: '0to1'
+    ObjectDefinition: FinancialWeeklyCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventorySummaryColumn_InventorySummaryCell_InventorySummaryCell_In.qbl b/_Main/BL/Relations/Relation_InventorySummaryColumn_InventorySummaryCell_InventorySummaryCell_In.qbl
new file mode 100644
index 0000000..c042c63
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummaryColumn_InventorySummaryCell_InventorySummaryCell_In.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummaryColumn_InventorySummaryCell_InventorySummaryCell_InventorySummaryColumn
+{
+  #keys: '1[415136.0.865304752]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.865304771][415136.0.865304765][415136.0.865304772][415136.0.865304766][415136.0.865304773][415136.0.865304767][415136.0.865304774][415136.0.865304768][415136.0.865304775][415136.0.865304769][415136.0.865304776][415136.0.865304770]'
+    SequenceElementSuffix: 'CellInColumn'
+    SequenceSuffix: 'CellInColumn'
+  }
+  RelationSide.LeftSide InventorySummaryCell
+  {
+    #keys: '3[415136.0.865304754][415136.0.865304753][415136.0.865304755]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventorySummaryColumn
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide InventorySummaryColumn
+  {
+    #keys: '3[415136.0.865304757][415136.0.865304756][415136.0.865304758]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummaryCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventorySummaryReport_InventorySummaryColumn_InventorySummaryColum.qbl b/_Main/BL/Relations/Relation_InventorySummaryReport_InventorySummaryColumn_InventorySummaryColum.qbl
new file mode 100644
index 0000000..e1575bb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummaryReport_InventorySummaryColumn_InventorySummaryColum.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummaryReport_InventorySummaryColumn_InventorySummaryColumn_InventorySummaryReport
+{
+  #keys: '1[415136.0.865304722]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][415136.0.865304741][415136.0.865304735][415136.0.865304742][415136.0.865304736][415136.0.865304743][415136.0.865304737][415136.0.865304744][415136.0.865304738][415136.0.865304745][415136.0.865304739][415136.0.865304746][415136.0.865304740]'
+    SequenceElementSuffix: 'Column'
+    SequenceSuffix: 'Column'
+  }
+  RelationSide.LeftSide InventorySummaryColumn
+  {
+    #keys: '3[415136.0.865304724][415136.0.865304723][415136.0.865304725]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventorySummaryReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide InventorySummaryReport
+  {
+    #keys: '3[415136.0.865304727][415136.0.865304726][415136.0.865304728]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummaryColumn
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventorySummaryReport_InventroySummaryRow_InventroySummaryRow_Inve.qbl b/_Main/BL/Relations/Relation_InventorySummaryReport_InventroySummaryRow_InventroySummaryRow_Inve.qbl
new file mode 100644
index 0000000..b0030b0
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummaryReport_InventroySummaryRow_InventroySummaryRow_Inve.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummaryReport_InventroySummaryRow_InventroySummaryRow_InventorySummaryReport
+{
+  #keys: '1[415136.0.865304709]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InventroySummaryRow
+  {
+    #keys: '3[415136.0.865304711][415136.0.865304710][415136.0.865304712]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventorySummaryReport
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide InventorySummaryReport
+  {
+    #keys: '3[415136.0.865304714][415136.0.865304713][415136.0.865304715]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventroySummaryRow
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl b/_Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl
new file mode 100644
index 0000000..2fd19a0
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummarySearch_InventorySummarySource_InventorySummarySourc.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummarySearch_InventorySummarySource_InventorySummarySource_InventorySummarySearch
+{
+  #keys: '1[415136.0.865304882]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InventorySummarySource
+  {
+    #keys: '3[415136.0.865304884][415136.0.865304883][415136.0.865304885]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummarySearch
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InventorySummarySearch
+  {
+    #keys: '3[415136.0.865304887][415136.0.865304886][415136.0.865304888]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummarySource
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventorySummarySource_InventorySummaryReport_InventorySummaryRepor.qbl b/_Main/BL/Relations/Relation_InventorySummarySource_InventorySummaryReport_InventorySummaryRepor.qbl
new file mode 100644
index 0000000..2b2803e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummarySource_InventorySummaryReport_InventorySummaryRepor.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummarySource_InventorySummaryReport_InventorySummaryReport_InventorySummarySource
+{
+  #keys: '1[415136.0.865304908]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InventorySummaryReport
+  {
+    #keys: '3[415136.0.865304910][415136.0.865304909][415136.0.865304911]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventorySummarySource
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide InventorySummarySource
+  {
+    #keys: '3[415136.0.865304913][415136.0.865304912][415136.0.865304914]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummaryReport
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventorySummarySource_MacroPlan_MacroPlan_InventorySummarySource.qbl b/_Main/BL/Relations/Relation_InventorySummarySource_MacroPlan_MacroPlan_InventorySummarySource.qbl
new file mode 100644
index 0000000..ebfbb87
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventorySummarySource_MacroPlan_MacroPlan_InventorySummarySource.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventorySummarySource_MacroPlan_MacroPlan_InventorySummarySource
+{
+  #keys: '1[415136.0.865304895]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[415136.0.865304897][415136.0.865304896][415136.0.865304898]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummarySource
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InventorySummarySource
+  {
+    #keys: '3[415136.0.865304900][415136.0.865304899][415136.0.865304901]'
+    Cardinality: '0to1'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_InventroySummaryRow_InventorySummaryCell_InventorySummaryCell_Inven.qbl b/_Main/BL/Relations/Relation_InventroySummaryRow_InventorySummaryCell_InventorySummaryCell_Inven.qbl
new file mode 100644
index 0000000..eeac640
--- /dev/null
+++ b/_Main/BL/Relations/Relation_InventroySummaryRow_InventorySummaryCell_InventorySummaryCell_Inven.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation InventroySummaryRow_InventorySummaryCell_InventorySummaryCell_InventroySummaryRow
+{
+  #keys: '1[415136.0.865304782]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide InventorySummaryCell
+  {
+    #keys: '3[415136.0.865304784][415136.0.865304783][415136.0.865304785]'
+    Cardinality: '1toN'
+    ObjectDefinition: InventroySummaryRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide InventroySummaryRow
+  {
+    #keys: '3[415136.0.865304787][415136.0.865304786][415136.0.865304788]'
+    Cardinality: '0to1'
+    ObjectDefinition: InventorySummaryCell
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl b/_Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl
new file mode 100644
index 0000000..0a37108
--- /dev/null
+++ b/_Main/BL/Relations/Relation_OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation OvertimeMultiplier_MacroPlan_MacroPlan_OvertimeMultiplier
+{
+  #keys: '1[412672.1.2880092]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[412672.1.2880094][412672.1.2880093][412672.1.2880095]'
+    Cardinality: '0to1'
+    ObjectDefinition: OvertimeMultiplier
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide OvertimeMultiplier
+  {
+    #keys: '3[412672.1.2880097][412672.1.2880096][412672.1.2880098]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl b/_Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl
new file mode 100644
index 0000000..1a69023
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_BaseSalary.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BaseSalary
+{
+  #keys: '3[412672.1.2854665][412672.1.2854664][412672.1.2854666]'
+  Description: 'BaseSalary'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl b/_Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl
new file mode 100644
index 0000000..db99fe2
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_EmployeeNumber.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EmployeeNumber
+{
+  #keys: '3[412672.1.2854635][412672.1.2854634][412672.1.2854636]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl b/_Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl
new file mode 100644
index 0000000..16c94a8
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[412672.1.2854645][412672.1.2854644][412672.1.2854646]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl b/_Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl
new file mode 100644
index 0000000..bf8dc85
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/Attribute_TimeUnit.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TimeUnit
+{
+  #keys: '3[412672.1.2854655][412672.1.2854654][412672.1.2854656]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl b/_Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl
new file mode 100644
index 0000000..b1b021c
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/DefaultValue_TimeUnit.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  ISOValue: '鏈�'
+  TargetAttribute: TimeUnit
+}
diff --git a/_Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl b/_Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl
new file mode 100644
index 0000000..a056ac4
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/StaticMethod_Export.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Export (
+  const constcontent Units owner
+) as BinaryValue
+{
+  TextBody:
+  [*
+    // rislai Jul-3-2024 (created)
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>浜哄憳鎴愭湰</name>';
+    columnXML1 := "<column><name>浜哄憳绫诲埆</name><type>String</type>";
+    columnXML2 := "<column><name>浜烘暟</name><type>Number</type>";
+    columnXML3 := "<column><name>浜х嚎</name><type>String</type>";
+    columnXML4 := "<column><name>寮�濮嬫椂闂�</name><type>String</type>";
+    columnXML5 := "<column><name>鏃堕棿鍗曚綅</name><type>String</type>";
+    columnXML6 := "<column><name>鍩烘湰宸ヨ祫</name><type>Number</type>";
+    
+    costs := selectsortedset( owner,Elements.EmployeeCost,cost,cost.Unit().Name() );
+    traverse( costs,Elements,cost ){
+      columnXML1 := columnXML1 + '<cell value="' + cost.EmployeeType().Name() + '"/>'
+      columnXML2 := columnXML2 + '<cell value="' + [String]cost.EmployeeNumber() + '"/>'
+      columnXML3 := columnXML3 + '<cell value="' + cost.Unit().Name() + '"/>'
+      columnXML4 := columnXML4 + '<cell value="' + cost.StartDate().Format( "Y-M2-D2" ) + '"/>'
+      columnXML5 := columnXML5 + '<cell value="' + cost.TimeUnit() + '"/>'
+      columnXML6 := columnXML6 + '<cell value="' + cost.BaseSalary().Format( "N(Dec())" ) + '"/>'
+    }
+    columnXML1 := columnXML1 + "</column>";
+    columnXML2 := columnXML2 + "</column>";
+    columnXML3 := columnXML3 + "</column>";
+    columnXML4 := columnXML4 + "</column>";
+    columnXML5 := columnXML5 + "</column>";
+    columnXML6 := columnXML6 + "</column>";
+    
+    xmlTemplate := xmlTemplate + columnXML1 + columnXML2 + columnXML3 + columnXML4 + columnXML5 + columnXML6 + "</table>";
+    tableGroupHandle := TableGroupHandle::Create( "tableGroupHandle" );
+    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ));
+    tableGroupHandle.Add( tableHandle );
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl b/_Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl
new file mode 100644
index 0000000..fbd4e8e
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/StaticMethod_Import.qbl
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Import (
+  MacroPlan owner,
+  const GeneralExcelImportAndExportDataTable table
+)
+{
+  TextBody:
+  [*
+    // rislai Jul-3-2024 (created)
+    units := construct( Units );
+    unitIndexTree := NamedValueTree::Create();
+    
+    employeeTypes := construct( EmployeeTypes );
+    employeeTypeIndexTree := NamedValueTree::Create();
+    
+    costs := selectset( owner,Unit.EmployeeCost,cost,true );
+    traverse( costs,Elements,element ){
+      element.Delete(); 
+    }
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );//2024-07-03
+    
+    traverse( table,GeneralExcelImportAndExportDataRow,row ){
+      employeeType := null( EmployeeType );
+      employeeNumber := 0;
+      unit := null( Unit );
+      startDate := Date::MinDate();
+      timeUnit := "";
+      baseSalary := 0.0;
+      traverse( row,GeneralExcelImportAndExportDataCell,cell ){
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "浜哄憳绫诲埆" ){
+           employeeTypeHandle := employeeTypeIndexTree.GetHandle( cell.Value() );
+           index := guard( employeeTypeIndexTree.Root().Child( employeeTypeHandle ),null( NamedValue ));
+           if( not isnull( index )){
+              employeeType := employeeTypes.Element( index.GetValueAsNumber() ); 
+           }else{
+              employeeType := select( owner,EmployeeType,type,type.Name() = cell.Value() );
+              if( not isnull( employeeType )){
+                employeeTypes.Add( employeeType );
+                employeeTypeIndexTree.Root().AddChild( employeeTypeHandle,employeeTypes.Size() - 1 ); 
+              }
+           }
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "浜烘暟" ){
+           employeeNumber := [Number]cell.Value();
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "浜х嚎" ){
+           unitHandle := unitIndexTree.GetHandle( cell.Value() );
+           index := guard( unitIndexTree.Root().Child( unitHandle ),null( NamedValue ));
+           if( not isnull( index )){
+              unit := units.Element( index.GetValueAsNumber() ); 
+           }else{
+              unit := select( owner,Unit,temp_unit,temp_unit.ID() = cell.Value() );
+              if( not isnull( unit )){
+                units.Add( unit );
+                unitIndexTree.Root().AddChild( unitHandle,units.Size() - 1 ); 
+              }
+           }
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "寮�濮嬫椂闂�" ){
+           startDate := cnv2.Convert( cell.Value() );
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "鏃堕棿鍗曚綅" ){
+           timeUnit := cell.Value();
+         }
+         if( cell.GeneralExcelImportAndExportDataColumn().Name() = "鍩烘湰宸ヨ祫" ){
+           baseSalary := [Real]cell.Value();
+         }
+      }
+      if( not isnull( unit )){
+        unit.EmployeeCost( relnew,EmployeeType := employeeType,EmployeeNumber := employeeNumber,StartDate := startDate,TimeUnit := timeUnit,BaseSalary := baseSalary );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl b/_Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl
new file mode 100644
index 0000000..1129e59
--- /dev/null
+++ b/_Main/BL/Type_EmployeeCost/_ROOT_Type_EmployeeCost.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type EmployeeCost
+{
+  #keys: '5[412672.1.2854608][412672.1.2854606][0.0.0][412672.1.2854607][412672.1.2854609]'
+  BaseType: Object
+  Description: 'EmployeeCost'
+  StructuredName: 'EmployeeCosts'
+}
diff --git a/_Main/BL/Type_EmployeeType/Attribute_Name.qbl b/_Main/BL/Type_EmployeeType/Attribute_Name.qbl
new file mode 100644
index 0000000..067a7ad
--- /dev/null
+++ b/_Main/BL/Type_EmployeeType/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.2854680][412672.1.2854679][412672.1.2854681]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl b/_Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl
new file mode 100644
index 0000000..eca7ed2
--- /dev/null
+++ b/_Main/BL/Type_EmployeeType/_ROOT_Type_EmployeeType.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type EmployeeType
+{
+  #keys: '5[412672.1.2854676][412672.1.2854674][0.0.0][412672.1.2854675][412672.1.2854677]'
+  BaseType: Object
+  StructuredName: 'EmployeeTypes'
+}
diff --git a/_Main/BL/Type_ExportXMLManager/Attribute_SheetName.qbl b/_Main/BL/Type_ExportXMLManager/Attribute_SheetName.qbl
new file mode 100644
index 0000000..9731693
--- /dev/null
+++ b/_Main/BL/Type_ExportXMLManager/Attribute_SheetName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SheetName
+{
+  #keys: '3[412672.0.1121446115][412672.0.1121446114][412672.0.1121446116]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl b/_Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl
index 3b9cd77..0f9c6bf 100644
--- a/_Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl
+++ b/_Main/BL/Type_ExportXMLManager/Function_CalcFinalXML.qbl
@@ -5,7 +5,7 @@
   TextBody:
   [*
     // rislai Jun-20-2024 (created)
-    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>'+ this.Name() +'</name>';
+    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?><table><name>'+ this.SheetName() +'</name>';
     
     datas := selectsortedset( this,ExportXMLData,data,true,data.Priority() );
     
diff --git a/_Main/BL/Type_ExportXMLManager/Method_Export.qbl b/_Main/BL/Type_ExportXMLManager/Method_Export.qbl
index 76e648d..c8ae706 100644
--- a/_Main/BL/Type_ExportXMLManager/Method_Export.qbl
+++ b/_Main/BL/Type_ExportXMLManager/Method_Export.qbl
@@ -6,10 +6,15 @@
   [*
     // rislai Jun-21-2024 (created)
     tableGroupHandle := TableGroupHandle::Create( "tableGroupHandle" );
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( this.FinalXML() ) );
+    tableHandle := null( TableHandle );
+    try{
+      tableHandle := TableHandle::ImportXML( BinaryValue::Construct( this.FinalXML()));
+    }onerror{
+      this.Delete();
+      error( e );
+    }
     tableGroupHandle.Add( tableHandle );
     binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
-     
     return binaryData.AsBinaryValue();
   *]
 }
diff --git a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
index fdde1b7..1acc8ee 100644
--- a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
+++ b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitLocalTableXMLData.qbl
@@ -2,7 +2,8 @@
 #parent: #root
 StaticMethod AwaitLocalTableXMLData (
   const Strings columnXMLData,
-  RecycleBin owner
+  RecycleBin owner,
+  String tableName
 )
 {
   TextBody:
@@ -10,7 +11,7 @@
     // rislai Jun-21-2024 (created)
     manager := select( owner,ExportXMLManager,manager,manager.Name() = "LocalTableXML" );
     if( isnull( manager )){
-      manager := owner.ExportXMLManager( relnew,Name := "LocalTableXML" );
+      manager := owner.ExportXMLManager( relnew,Name := "LocalTableXML",SheetName := tableName );
     }else{
       manager.ExportXMLData( relflush );
     }
diff --git a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl
index fc5bb88..f8f7792 100644
--- a/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl
+++ b/_Main/BL/Type_ExportXMLManager/StaticMethod_AwaitShiftPlanXMLData.qbl
@@ -10,7 +10,7 @@
     // rislai Jun-20-2024 (created)
     manager := select( owner,ExportXMLManager,manager,manager.Name() = "ShiftPlanXML" );
     if( isnull( manager )){
-      manager := owner.ExportXMLManager( relnew,Name := "ShiftPlanXML" );
+      manager := owner.ExportXMLManager( relnew,Name := "ShiftPlanXML",SheetName := "Shift plan" );
     }else{
       manager.ExportXMLData( relflush );
     }
diff --git a/_Main/BL/Type_FinancialProductionCell/Attribute_PlanValue.qbl b/_Main/BL/Type_FinancialProductionCell/Attribute_PlanValue.qbl
new file mode 100644
index 0000000..87d0ca7
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionCell/Attribute_PlanValue.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlanValue
+{
+  #keys: '3[415136.0.880970239][415136.0.880970238][415136.0.880970240]'
+  Description: '璁″垝鍊�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_FinancialProductionCell/Function_CalcPlanValue.qbl b/_Main/BL/Type_FinancialProductionCell/Function_CalcPlanValue.qbl
new file mode 100644
index 0000000..b51c61d
--- /dev/null
+++ b/_Main/BL/Type_FinancialProductionCell/Function_CalcPlanValue.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcPlanValue
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-5-2024 (created)
+    
+    value := ifexpr( this.FinancialProductionColumn().FinancialProductionReport().FinancialProductionSource().MacroPlan().StartOfPlanning().StartOfMonth().Date() <= this.FinancialProductionColumn().Period(), [Real]this.Value(), 0 );
+    
+    this.PlanValue( value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl
index e469589..77d1f16 100644
--- a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -6,5 +6,6 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     return '闀挎槬';
+    //return 'Assembly Plant (France)';
   *]
 }
diff --git a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl
index 71132d4..4759121 100644
--- a/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl
+++ b/_Main/BL/Type_FinancialProductionReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -6,5 +6,6 @@
   [*
     // 鐢勫叞楦� Jun-25-2024 (created)
     return '澶ц繛';
+    //return 'Assembly Plant (Spain)';
   *]
 }
diff --git a/_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl b/_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl
new file mode 100644
index 0000000..4cd3ade
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Value
+{
+  #keys: '3[415136.0.857450650][415136.0.857450649][415136.0.857450651]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl b/_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl
new file mode 100644
index 0000000..913414b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Value
+}
diff --git a/_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl b/_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl
new file mode 100644
index 0000000..f1bc544
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesCell
+{
+  #keys: '5[415136.0.857450647][415136.0.857450645][0.0.0][415136.0.857450646][415136.0.857450648]'
+  BaseType: Object
+  Description: '璐㈠姟閿�閲忔姤琛ㄥ崟鍏冩牸'
+  StructuredName: 'FinancialSalesCells'
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl
new file mode 100644
index 0000000..ff0c958
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[415136.0.857450603][415136.0.857450602][415136.0.857450604]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..fc78517
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.857450606][415136.0.857450605][415136.0.857450607]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl
new file mode 100644
index 0000000..4f47768
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Period
+{
+  #keys: '3[415136.0.857450609][415136.0.857450608][415136.0.857450610]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl b/_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..56bbf20
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-21-2024 (created)
+    
+    value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+    
+    this.Index( value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl b/_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl
new file mode 100644
index 0000000..3e9adbd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesColumn
+{
+  #keys: '5[415136.0.857450600][415136.0.857450598][0.0.0][415136.0.857450599][415136.0.857450601]'
+  BaseType: Object
+  Description: '璐㈠姟閿�閲忓垪'
+  StructuredName: 'FinancialSalesColumns'
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl
new file mode 100644
index 0000000..bc94ba1
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.857450536][415136.0.857450535][415136.0.857450537]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl
new file mode 100644
index 0000000..b8c1b97
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsImport
+{
+  #keys: '3[415136.0.857450539][415136.0.857450538][415136.0.857450540]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl
new file mode 100644
index 0000000..86e138b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+  #keys: '3[415136.0.857450542][415136.0.857450541][415136.0.857450543]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl
new file mode 100644
index 0000000..5c81481
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.857450545][415136.0.857450544][415136.0.857450546]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl b/_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl b/_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl
new file mode 100644
index 0000000..60fd446
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Method Clear
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    this.FinancialSalesColumn( relflush );
+    this.FinancialSalesRow( relflush );
+    
+    this.GenerateColumn( this.FinancialSalesSource().MacroPlan() );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
new file mode 100644
index 0000000..767f175
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
@@ -0,0 +1,44 @@
+Quintiq file version 2.0
+#parent: #root
+Method Generate (
+  FinancialSalesSearch search,
+  Product_MPs products
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    table      := selectobject( this, FinancialSalesSource.FinancialSalesReport, 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.FinancialSalesRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.FinancialSalesRow( relsize ) );
+    traverse( table, FinancialSalesRow, row, row.Unit() = search.Unit() ){
+      productid  := construct( Strings );
+      productid.Add( row.Name() );
+      
+      if( productids.ContainsAll( productid ) ){
+        showrow := this.FinancialSalesRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
+        
+        traverse( row, FinancialSalesCell, cell ){
+          column   := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() );
+          
+          sumcell  := selectobject( column, FinancialSalesCell, c, c.FinancialSalesRow() = sumrow );
+          if( isnull( sumcell ) ){
+            sumcell := column.FinancialSalesCell( relnew, Value := '0' );
+            sumrow.FinancialSalesCell( relinsert, sumcell );
+          }
+          
+          showcell := column.FinancialSalesCell( relnew, Value := cell.Value() );
+          showrow.FinancialSalesCell( relinsert, showcell );
+          value := [Real]cell.Value() + [Real]sumcell.Value();
+          sumcell.Value( [String]value );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..8aed8c8
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/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.FinancialSalesColumn( relnew, Name := periodname, Period := periodtime );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
new file mode 100644
index 0000000..6cbc77d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GetRow.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRow (
+  String salessegment,
+  String product
+) as FinancialSalesRow
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    row := selectobject( this, FinancialSalesRow, row, row.Name() = product and row.Unit() = salessegment );
+    
+    if( isnull( row ) ){
+      row := this.FinancialSalesRow( relnew, Name := product, Unit := salessegment );
+      //鍒濆鍖栧崟鍏冩牸
+      row.InitializeCell( this );
+    }
+    
+    return row;
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl b/_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl
new file mode 100644
index 0000000..efa6489
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl
@@ -0,0 +1,53 @@
+Quintiq file version 2.0
+#parent: #root
+Method IdentifyNullValues
+{
+  TextBody:
+  [*
+    // 鍒犻櫎绌鸿鏁版嵁
+    productcolumn := selectobject( this, FinancialSalesColumn, column, column.Index() = 0 );
+    unitcolumn    := selectobject( this, FinancialSalesColumn, column, column.Index() = 1 );
+    //鍒犻櫎娌℃湁瀵瑰簲鏃ユ湡鏁版嵁鐨勮
+    traverse ( this, FinancialSalesRow, row ) {
+      if ( forall( row, FinancialSalesCell, cell, true, ( cell.FinancialSalesColumn() <> productcolumn or cell.FinancialSalesColumn() <> unitcolumn ) and cell.Value().TrimBoth() = "" ) ) {
+        row.Delete();
+      }
+    }
+    
+    // 鍒ゆ柇鏄惁瀛樺湪璐熸暟
+    traverse ( this, FinancialSalesRow.FinancialSalesCell, cell ) { 
+      if ( cell.FinancialSalesColumn().Index() <= 1 ) {
+        if ( cell.Value().TrimBoth() = "" ) {
+          error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
+        }
+      } else {
+        if ( cell.Value().TrimBoth() = "" ) {
+          cell.Value( '0' );
+    //      error( Translations::AC_SalesForecastInputSource_Error6() );
+        } else {
+          stn := StringToReal::StandardConverter();
+          if ( not stn.CanConvert( cell.Value().TrimBoth() ) ) {
+            error( Translations::MP_FinancialProductionReport_ImportIndetifyIllegalCharacter() );
+          } else {
+            if ( stn.Convert( cell.Value().TrimBoth() ) >= 0 ) {
+              cell.Value( [String]ceil( stn.Convert( cell.Value().TrimBoth() ) ) );
+            } else {
+              error( Translations::MP_FinancialProductionReport_ImportIndetifyNegativeNumber() );
+            }
+          }
+        }
+      }
+      
+      cell.FinancialSalesRow().DuplicateValueMarker( cell.FinancialSalesRow().DuplicateValueMarker()                  + 
+                                                        ifexpr( cell.FinancialSalesColumn().Index() = 0, "", "-" ) +
+                                                        cell.Value()
+                                                       );
+    }
+    
+    // 鍒ゆ柇鏄惁瀛樺湪閲嶅鏁版嵁
+    row := selectduplicates( this, FinancialSalesRow, row, true, row.DuplicateValueMarker() );
+    if ( row.Size() > 1 ) {
+      error( Translations::MP_FinancialProductionReport_ImportIndetifyDuplicateData() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl b/_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl
new file mode 100644
index 0000000..73d9cf9
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+#parent: #root
+Method ImportVerification
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-27-2024 (created)
+    owner           := this.FinancialSalesSource().MacroPlan();
+    startofthisyear := owner.StartOfPlanning().StartOfYear().Date();
+    startofnextyear := owner.StartOfPlanning().StartOfNextYear().Date();
+    
+    if ( exists( this, FinancialSalesColumn, column, ( column.Index() = 0 and column.Name() <> "Product" )             or 
+                                                      ( column.Index() = 1 and column.Name() <> "Unit" )  ) ){
+      error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
+    }
+    
+    indexcolumn := select( this, FinancialSalesColumn, column, column.Index() = 2 );
+    if ( isnull( indexcolumn ) ) {
+      error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
+    } else {
+      cnv2 := StringToDate::StandardConverter();
+      cnv2.SetCustomConversion();
+      cnv2.CustomFormatString( "dd/MM/yyyy" );
+    
+      while ( not isnull( indexcolumn ) ) {
+        if ( not cnv2.CanConvert( indexcolumn.Name() ) ) {
+          error( Translations::MP_FinancialProductionReport_ImportIndetifyIllegalTime() );
+        }
+        period := cnv2.Convert( indexcolumn.Name() );
+      //  info( "寮�濮嬫椂闂达細", this.SalesForecastInputSource().PlanningStartDate().Format( "Y-M2-D2" ),
+      //        "缁撴潫鏃堕棿锛�", this.SalesForecastInputSource().PlanningEndDate().Format( "Y-M2-D2" ),
+      //        "鍒楁椂闂达細", cnv2.Convert( indexColumn.name() ).Format( "Y-M2-D2" ) );
+        // 鍒ゆ柇鏄惁鍦ㄨ鍒掑懆鏈熷唴
+        if ( period <= startofthisyear or period >= startofnextyear ) {
+          error( Translations::MP_FinancialProductionReport_ImportIndetifyOverPeriod() );
+        }
+        indexcolumn := indexcolumn.NextColumn();
+      }
+    }
+    
+    productcolumn := selectobject( this, FinancialSalesColumn, column, column.Index() = 0 );
+    unitcolumn    := selectobject( this, FinancialSalesColumn, column, column.Index() = 1 );
+    
+    units         := selectuniquevalues( unitcolumn, FinancialSalesCell, cell, cell.Value() );
+    if( units.Size() <> 2 or ( units.Find( FinancialProductionReport::GetDefaultCCUnit() ) >= 0 
+                               and units.Find( FinancialProductionReport::GetDefaultDLUnit() ) >= 0 ) ){
+      error( Translations::MP_FinancialProductionReport_ImportIndetifyFactoryNoExist() );
+    }
+    
+    products     := selectuniquevalues( productcolumn, FinancialSalesCell, cell, cell.Value() );
+    productnames := selectuniquevalues( owner, Product_MP, product, product.ID() );
+    
+    if( not productnames.ContainsAll( products ) ){
+      error( Translations::MP_FinancialProductionReport_ImportIndetifyProductNoExist() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl b/_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl
new file mode 100644
index 0000000..d58822b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#parent: #root
+Method SyncRows
+{
+  TextBody:
+  [*
+    totalRows := 0;
+    totalColumns := this.FinancialSalesColumn( relsize );
+    
+    if ( totalColumns > 0 ) {
+      randomCol := select( this, FinancialSalesColumn, tempFPC, true );
+      totalRows := randomCol.FinancialSalesCell( relsize );
+      
+      this.FinancialSalesRow( relflush );
+      
+      cells := construct( FinancialSalesCells );
+      traverse ( this, FinancialSalesColumn, fpc ) {
+        cells.Add( fpc.FirstCellInColumn() );
+      }
+      
+      for ( i := 0; i < totalRows; i++ ) {
+        assert( selectvalues( cells, Elements, c, true, c.FinancialSalesColumn().Index() ).ToString( "" ) = 
+                selectvalues( selectsortedset( cells, Elements, c, true, c.FinancialSalesColumn().Index() ), Elements, c, true, c.FinancialSalesColumn().Index() ).ToString( "" ),
+                "Assertion error in FrockDataTable::syncRows: Cells not sorted by column index" );
+        row := this.FinancialSalesRow( relnew, RowNr := i );
+        
+        newCells := construct( FinancialSalesCells );
+        
+        traverse ( cells, Elements, c ) {
+          row.FinancialSalesCell( relinsert, c );
+          
+          newCells.Add( c.NextCellInColumn() );
+        }
+        
+        cells := &newCells;
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..14fdc56
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/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 'Financial sales';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl
new file mode 100644
index 0000000..356d9fd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultTripLeadingTime.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultTripLeadingTime () as Duration
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return Duration::Days( 2 );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl
new file mode 100644
index 0000000..4163b5e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentAll.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentAll () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '<All>';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl
new file mode 100644
index 0000000..05eb2ce
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentCC.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentCC () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬';
+    //return 'China';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl
new file mode 100644
index 0000000..062b883
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentDL.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentDL () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛';
+    //return 'Foregin';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl
new file mode 100644
index 0000000..70e1ce3
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentFS.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentFS () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '浣涘北';
+    //return 'Germany';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl
new file mode 100644
index 0000000..7ad4f41
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetSalesSegmentTJ.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSalesSegmentTJ () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶╂触';
+    //return 'USA';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl
new file mode 100644
index 0000000..a57ce47
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCLine.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointCCLine () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬瑁呴厤绾胯竟搴�';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointCCRent.qbl
new file mode 100644
index 0000000..d1d47c2
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/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_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl
new file mode 100644
index 0000000..7f89636
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetStockingPointDLLine.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetStockingPointDLLine () as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛瑁呴厤绾胯竟搴�';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLAddressType { }
+  XMLID Key { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLID QuintiqType { }
+  XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl
new file mode 100644
index 0000000..b72febd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialSalesCell
+  XMLID cell { }
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Value
+      XMLID value { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..7ff067e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialSalesColumn
+  XMLID column { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: cell
+      GenerateOutput: false
+      Relation: FinancialSalesCell
+      XMLID FinancialSalesCell { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..1a8667a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialSalesReport
+  XMLID table { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: column
+      GenerateOutput: false
+      Relation: FinancialSalesColumn
+      XMLID FinancialSalesColumn { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl
new file mode 100644
index 0000000..2cd2b1c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML FinancialSalesReportXML
+{
+  Direction: 'ImportExport'
+  Root: table
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLAddressType { }
+  XMLID Key { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+  XMLID QuintiqType { }
+  XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..341842b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialSalesColumn
+  XMLID column { }
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..1a8667a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+  IdField: Key
+  ObjectTypeField: QuintiqType
+  TargetType: FinancialSalesReport
+  XMLID table { }
+  Aggregates:
+  [
+    XMLAggregate
+    {
+      ElementDefinition: column
+      GenerateOutput: false
+      Relation: FinancialSalesColumn
+      XMLID FinancialSalesColumn { }
+    }
+  ]
+  Attributes:
+  [
+    XMLAttribute
+    {
+      Attribute: Name
+      XMLID name { }
+    }
+  ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl
new file mode 100644
index 0000000..205104a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML FinancialSalesReportXMLHeaders
+{
+  Direction: 'ImportExport'
+  Root: table
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl b/_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl
new file mode 100644
index 0000000..645566f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesReport
+{
+  #keys: '5[415136.0.857450533][415136.0.857450531][0.0.0][415136.0.857450532][415136.0.857450534]'
+  BaseType: Object
+  Description: '璐㈠姟閿�閲忔姤琛�'
+  StructuredName: 'FinancialSalesReports'
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl
new file mode 100644
index 0000000..57e3d1f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DuplicateValueMarker
+{
+  #keys: '3[415136.0.857450578][415136.0.857450577][415136.0.857450579]'
+  Description: '鍒ゆ柇鏄惁瀛樺湪閲嶅鍊�'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl
new file mode 100644
index 0000000..98dcd0d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.857450569][415136.0.857450568][415136.0.857450570]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..b0377b7
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[415136.0.857450572][415136.0.857450571][415136.0.857450573]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl
new file mode 100644
index 0000000..c8effb6
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.857450575][415136.0.857450574][415136.0.857450576]'
+  Description: '浜х嚎'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl b/_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl
new file mode 100644
index 0000000..bbb8a45
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: DuplicateValueMarker
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl
new file mode 100644
index 0000000..8c62e9b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  FinancialProductionSearch search,
+  Product_MPs products
+) declarative remote as Boolean
+{
+  Description: '杩囨护'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    allunit    := '<All>';
+    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() );
+    
+    productid  := construct( Strings );
+    productid.Add( this.Name() );
+    
+    return productids.ContainsAll( productid ) and this.Unit() = search.Unit();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
new file mode 100644
index 0000000..e262727
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+  FinancialSalesColumn column,
+  String unit
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := column.FinancialSalesCell( relnew, Value := '' );
+    
+    this.FinancialSalesCell( relinsert, cell );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
new file mode 100644
index 0000000..dd0f3b8
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+  FinancialSalesColumn column,
+  Real quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, FinancialSalesCell, cell, cell.FinancialSalesColumn() = column );
+          
+    value := [Real]cell.Value() + quantity;
+    cell.Value( [String]value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
new file mode 100644
index 0000000..0c6ebc7
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_InitializeCell.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitializeCell (
+  FinancialSalesReport table
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    traverse( table, FinancialSalesColumn, column ){
+      this.Initialize( column, this.Unit() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl b/_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl
new file mode 100644
index 0000000..99a2b84
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesRow
+{
+  #keys: '5[415136.0.857450566][415136.0.857450564][0.0.0][415136.0.857450565][415136.0.857450567]'
+  BaseType: Object
+  Description: '璐㈠姟閿�閲忚'
+  StructuredName: 'FinancialSalesRows'
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl
new file mode 100644
index 0000000..2f19f9d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.857450503][415136.0.857450502][415136.0.857450504]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..239bdc6
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+  #keys: '3[415136.0.857450506][415136.0.857450505][415136.0.857450507]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl
new file mode 100644
index 0000000..97f1960
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.857450509][415136.0.857450508][415136.0.857450510]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl
new file mode 100644
index 0000000..8491b88
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.857450512][415136.0.857450511][415136.0.857450513]'
+  Description: '浜х嚎'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl b/_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl
new file mode 100644
index 0000000..a529cb1
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesSearch
+{
+  #keys: '5[415136.0.857450500][415136.0.857450498][0.0.0][415136.0.857450499][415136.0.857450501]'
+  BaseType: Object
+  Description: '鏌ヨ绫�'
+  StructuredName: 'FinancialSalesSearchs'
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl
new file mode 100644
index 0000000..9872597
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FileBinaryValue
+{
+  #keys: '3[415136.0.857450463][415136.0.857450462][415136.0.857450464]'
+  ValueType: BinaryValue
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl
new file mode 100644
index 0000000..51e3fe5
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsImport
+{
+  #keys: '3[415136.0.857450466][415136.0.857450465][415136.0.857450467]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl
new file mode 100644
index 0000000..60d01bb
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsXLSX
+{
+  #keys: '3[415136.0.857450469][415136.0.857450468][415136.0.857450470]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl
new file mode 100644
index 0000000..1e9a85d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.857450472][415136.0.857450471][415136.0.857450473]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl
new file mode 100644
index 0000000..609affc
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UploadDateTime
+{
+  #keys: '3[415136.0.857450475][415136.0.857450474][415136.0.857450476]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl
new file mode 100644
index 0000000..f7b6f0f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UploadUser
+{
+  #keys: '3[415136.0.857450478][415136.0.857450477][415136.0.857450479]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl
new file mode 100644
index 0000000..8dde94e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UploadDateTime
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl
new file mode 100644
index 0000000..3dbb1dc
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UploadUser
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
new file mode 100644
index 0000000..1ddcfd6
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+Method AfterImport
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    allunit := FinancialProductionReport::GetDefaultAllUnit();
+    table   := selectobject( this.MacroPlan(), FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and not table.IsShow() );
+    //info( '--------------------------', table.Name() );
+    traverse( this, FinancialSalesReport, report ){
+      productcolumn := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Product' );
+      unitcolumn    := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Unit' );
+    //  info( '----------------------1-----------------', productcolumn.Name(), unitcolumn.Name() );
+      
+      traverse( report, FinancialSalesRow, row ){
+        product := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = productcolumn );
+        unit    := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = unitcolumn );
+    //    info( '----------------------2-----------------', product.Value(), unit.Value() );
+        
+        unitrow := selectobject( table, FinancialSalesRow, unitrow, unitrow.Name() = product.Value() and unitrow.Unit() = unit.Value() );
+        allrow  := selectobject( table, FinancialSalesRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
+    //    info( '----------------------3-----------------', unitrow.Name(), unitrow.Unit() );
+        // and product.Value() = '120 kW Rotor' and unit.Value() = 'Assembly Plant (Spain)'
+        traverse( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() <> productcolumn and cell.FinancialSalesColumn() <> unitcolumn ){
+          column   := cell.FinancialSalesColumn();
+          unitcell := selectobject( unitrow, FinancialSalesCell, unitcell, unitcell.FinancialSalesColumn().Name() = column.Name() );
+          allcell  := selectobject( allrow, FinancialSalesCell, allcell, allcell.FinancialSalesColumn().Name() = column.Name() );
+    //      info( isnull( unitcell ), isnull( allcell ), cell.Value(), unitcell.Value(), allcell.Value() );
+          if( not isnull( unitcell ) ){
+            unitcell.Value( cell.Value() );
+          }
+          if( not isnull( allcell ) ){
+            value := [Real]cell.Value() + [Real]allcell.Value();
+            allcell.Value( [String]value );
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl b/_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl
new file mode 100644
index 0000000..3bd0498
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Method IsExistFutureMonthData () as Boolean
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-26-2024 (created)
+    startofplanning := this.MacroPlan().StartOfPlanning().Date().Format( 'M2/D2/Y' );
+    columns         := selectset( this, FinancialSalesReport.FinancialSalesColumn, column, column.Name() > startofplanning );
+    return exists( columns, Elements.FinancialSalesCell, cell, cell.Value() <> '' );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl b/_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl
new file mode 100644
index 0000000..95c9a0a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+Method ReadStructure
+{
+  TextBody:
+  [*
+    tableGroupHandle := TableGroupHandle::Create( this.Name() );
+    tableGroupHandle := XLS::LoadTableGroupFromBinaryData( this.FileBinaryValue().AsBinaryData(), tableGroupHandle, true, this.IsXLSX() );
+    sheets := tableGroupHandle.TableNames();
+    
+    traverse ( sheets, Elements, sheetName ) {
+      tableHandle := tableGroupHandle.Table( sheetName );
+      tableXML := TableHandle::ExportXML( tableHandle );
+      
+    //  info( tableXML.AsQUILL() );
+      
+      FinancialSalesReport::XMLImportFinancialSalesReportXMLHeaders( tableXML );
+      xlstable := FinancialSalesReport::XMLImportFinancialSalesReportXML( tableXML );
+      
+      xlstable.SyncRows();
+      
+      xlstable.Name( sheetName );
+      xlstable.IsImport( true );
+      this.FinancialSalesReport( relinsert, &xlstable ); 
+      
+      Transaction::Transaction().Propagate( attribute( FinancialSalesColumn, Index ) );
+      
+      // 锛堝鍏ュ墠锛夌粰绌哄�艰祴浜堥粯璁ゅ�硷紙N/A锛�,骞朵笖鍒犻櫎绌鸿鏁版嵁鍜屾暟鎹牎楠�
+      xlstable.IdentifyNullValues();
+      
+      xlstable.ImportVerification();
+    }
+    //瀵煎叆鍚庡鐞嗘暟鎹�
+    //this.AfterImport();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
new file mode 100644
index 0000000..6fe5b7f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  Description: '涓嬭浇璐㈠姟鎶ヨ〃鏁版嵁'
+  TextBody:
+  [*
+    
+    table := selectobject( macroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and 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 );
+    //Unit
+    unitcolumnelement := xmlDOM.CreateElement( "column" );
+    unitnameelement   := xmlDOM.CreateElement( "name" );
+    unittypeelement   := xmlDOM.CreateElement( "type" );
+    unitnameelement.TextContent( 'Unit' );
+    unittypeelement.TextContent( "String" );
+    unitcolumnelement.AppendChild( unitnameelement );
+    unitcolumnelement.AppendChild( unittypeelement );
+    
+    tableElement.AppendChild( productcolumnelement ); 
+    tableElement.AppendChild( unitcolumnelement ); 
+    traverse ( table, FinancialSalesColumn, 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, FinancialSalesCell, cell, cell.FinancialSalesRow().RowNr() );
+    
+      traverse ( cells, Elements, c ) {
+        if( column.Index() = 0 ){
+          row := c.FinancialSalesRow();
+          //Product
+          productcellElement := xmlDOM.CreateElement( "cell" );
+          productcellElement.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement );
+          //Unit
+          unitcellElement := xmlDOM.CreateElement( "cell" );
+          unitcellElement.SetAttribute( "value", row.Unit() );
+          unitcolumnelement.AppendChild( unitcellElement );
+        }
+        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement.SetAttribute( "value", c.Value() ); 
+        columnelement.AppendChild( cellElement );
+      }
+      tableElement.AppendChild( columnelement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
new file mode 100644
index 0000000..a47c88a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DownloadTemplate (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  TextBody:
+  [*
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name><column><name>Product</name><type>String</type></column><column><name>Unit</name><type>String</type></column></table>' );
+    
+    tableElement              := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    startofyear               := macroPlan.StartOfPlanning().StartOfYear();
+    startofnextyear           := macroPlan.StartOfPlanning().StartOfNextYear();
+    
+    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+      columnElement := xmlDOM.CreateElement( "column" );
+      nameElement   := xmlDOM.CreateElement( "name" );
+      typeElement   := xmlDOM.CreateElement( "type" );
+      nameElement.TextContent( start.Format( "M2/D2/Y" ) );
+      typeElement.TextContent( "String" );
+      columnElement.AppendChild( nameElement );
+      columnElement.AppendChild( typeElement );
+      tableElement.AppendChild( columnElement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..804d079
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -0,0 +1,104 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MacroPlan owner
+)
+{
+  Description: '鍒濆鍖�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    owner.FinancialSalesSource( relflush );
+    products                  := construct( Product_MPs );
+    allsalessegment           := FinancialSalesReport::GetSalesSegmentAll();
+    ccsalessegment            := FinancialSalesReport::GetSalesSegmentCC();
+    dlsalessegment            := FinancialSalesReport::GetSalesSegmentDL();
+    tjsalessegment            := FinancialSalesReport::GetSalesSegmentTJ();
+    fssalessegment            := FinancialSalesReport::GetSalesSegmentFS();
+    ccspline                  := FinancialSalesReport::GetStockingPointCCLine();
+    dlspline                  := FinancialSalesReport::GetStockingPointDLLine();
+    ccrent                    := FinancialSalesReport::GetStockingPointCCRent();
+    
+    source                    := owner.FinancialSalesSource( relnew, IsImport := false, Name := FinancialSalesReport::GetDefaultName() );
+    table                     := source.FinancialSalesReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
+    showtable                 := source.FinancialSalesReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
+    startofplanning           := owner.StartOfPlanning();
+    //startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
+    
+    search                    := source.FinancialSalesSearch( relnew, Unit := allsalessegment, Generation := allsalessegment, MqbMlb := allsalessegment, Power := allsalessegment );
+    
+    table.GenerateColumn( owner );
+    
+    //浠嶧orecast鏌ヨ
+    traverse( owner, SalesDemand.astype( Forecast ), forecast, forecast.StartDate() < startofnextyear.Date() and ( ( forecast.SalesSegmentName() = ccsalessegment and forecast.Product_MP().MQBMLB() = 'MLB' ) 
+              or forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ) ){
+      product    := forecast.Product_MP();
+      allrow     := table.GetRow( allsalessegment, product.ID() );
+      periodtime := forecast.StartDate().StartOfMonth();
+      periodname := periodtime.Format( "M2/D2/Y" );
+      
+      if( products.Find( product ) < 0 ){
+        products.Add( product );
+      }
+    //  info( '------------------------', periodname, periodtime );
+      column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+    //  info( '------------------------', column.Name() );
+      //Forecast鐨凷ales Segment涓洪暱鏄ワ紝璇嗗埆鍑篗LB鐨勬墍鏈変骇鍝佹眹鎬�
+      if( forecast.SalesSegmentName() = ccsalessegment and product.MQBMLB() = 'MLB' ){
+    //    info( '------------------------', column.Name() );
+        ccrow := table.GetRow( ccsalessegment, product.ID() );
+    //    info( '------------------------', ccrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
+        ccrow.Initialize( column, forecast.Quantity() );
+      }else if( forecast.SalesSegmentName() = tjsalessegment or forecast.SalesSegmentName() = fssalessegment ){
+        //澶ц繛璐㈠姟閿�閲忥細棣栧厛鍦╢orecast鐣岄潰鏌ユ壘Sales Segment鏄ぉ娲ュ拰浣涘北鐨勬墍鏈夐渶姹傦紝姣忎釜浜у搧鎸夋湀姹囨�婚渶姹傛暟閲�
+    //    info( '------------------------', column.Name() );
+        dlrow := table.GetRow( dlsalessegment, product.ID() );
+    //    info( '------------------------', dlrow.FinancialSalesCell( relsize ), column.FinancialSalesCell( relsize ) );
+        dlrow.Initialize( column, forecast.Quantity() );
+      }
+      allrow.Initialize( column, forecast.Quantity() );
+    }
+    //浠嶱roduct planning鏌ユ壘搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴撶殑鎵�鏈塎QB浜у搧锛屽彇Total Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+    traverse( owner, Product_MP, product, product.IsLeaf() and product.MQBMLB() = 'MQB' ){//浜у搧涓篗QB
+      traverse( product, ProductInStockingPoint_MP, pisp, pisp.StockingPointID() = ccspline ){//搴撳瓨鐐逛负闀挎槬瑁呴厤绾胯竟搴�
+        traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
+                and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ){
+          periodtime := pispip.Start().StartOfMonth().Date();
+          periodname := periodtime.Format( "M2/D2/Y" );
+          column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+          ccrow := table.GetRow( ccsalessegment, product.ID() );
+          ccrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+          
+          allrow     := table.GetRow( allsalessegment, product.ID() );
+          allrow.Initialize( column, pispip.DependentDemandAndSalesDemandQuantity() );
+        }
+      }
+    }
+    startofnextyearlead       := startofplanning.StartOfNextYear() + FinancialSalesReport::GetDefaultTripLeadingTime();
+    //澶ц繛璐㈠姟閿�閲忥細闀挎槬鐨勯渶姹傞渶瑕佸湪trip plan閲岄潰鎵惧埌璧峰搴撳瓨鐐逛负澶ц繛瑁呴厤绾胯竟搴擄紝鐩殑鍦颁负闀挎槬澶栫搴撶殑浜у搧锛岀敱浜庨渶瑕佽�冭檻浜у搧杩愯緭lead time锛屾瘡涓湀鐨勬眹鎬绘暟鎹渶瑕佹帹杩熶袱澶╄繘琛岃绠�
+    traverse( owner, Unit.Lane.LaneLeg, laneleg, laneleg.OriginStockingPointID() = dlspline and laneleg.DestinationStockingPointID() = ccrent ){
+      traverse( laneleg, Trip, trip, trip.Arrival() < startofnextyearlead ){
+        periodtime := ( trip.Arrival() - FinancialSalesReport::GetDefaultTripLeadingTime() ).StartOfMonth().Date();
+        periodname := periodtime.Format( "M2/D2/Y" );
+        
+        column    := selectobject( table, FinancialSalesColumn, column, column.Name() = periodname and column.Period() = periodtime );
+        traverse( trip, ProductInTrip, pit ){
+          dlrow      := table.GetRow( dlsalessegment, pit.ProductID() );
+          dlrow.Initialize( column, pit.Quantity() );//鍙朤otal Demand瀛楁鎸夋湀姹囨�婚渶姹傛暟閲�
+          
+          allrow     := table.GetRow( allsalessegment, pit.ProductID() );
+          allrow.Initialize( column, pit.Quantity() );
+        }
+      }
+    }
+    
+    rows := selectsortedset( table, FinancialSalesRow, row, row.Name() );
+    i    := 0;
+    traverse( rows, Elements, e ){
+      e.RowNr( i );
+      i := i + 1;
+    }
+    showtable.Generate( search, products );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
new file mode 100644
index 0000000..df950f0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Upload (
+  MacroPlan owner,
+  BinaryValue binaryValue,
+  String filePath
+) as FinancialSalesSource
+{
+  TextBody:
+  [*
+    fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
+    
+    source := owner.FinancialSalesSource( relnew, FileBinaryValue := binaryValue,
+                                               Name                    := fileName,
+                                               IsXLSX                  := fileName.EndsWith( "xlsx" ),
+                                               IsImport                := true,
+                                               UploadDateTime          := DateTime::ActualTime().Format( "Y-M2-D2 H:m:s" ),
+                                               UploadUser              := guard( QuintiqUser::CurrentUser().Username(), "" ) );
+    
+    return source;
+  *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl b/_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl
new file mode 100644
index 0000000..96ba160
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesSource
+{
+  #keys: '5[415136.0.857450460][415136.0.857450458][0.0.0][415136.0.857450459][415136.0.857450461]'
+  BaseType: Object
+  Description: '璐㈠姟閿�閲忔姤琛�'
+  StructuredName: 'FinancialSalesSources'
+}
diff --git a/_Main/BL/Type_FinancialWeeklyCell/Attribute_Value.qbl b/_Main/BL/Type_FinancialWeeklyCell/Attribute_Value.qbl
new file mode 100644
index 0000000..d0100df
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyCell/Attribute_Value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Value
+{
+  #keys: '3[415136.0.880700281][415136.0.880700280][415136.0.880700282]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialWeeklyCell/DefaultValue_Value.qbl b/_Main/BL/Type_FinancialWeeklyCell/DefaultValue_Value.qbl
new file mode 100644
index 0000000..913414b
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyCell/DefaultValue_Value.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Value
+}
diff --git a/_Main/BL/Type_FinancialWeeklyCell/_ROOT_Type_FinancialWeeklyCell.qbl b/_Main/BL/Type_FinancialWeeklyCell/_ROOT_Type_FinancialWeeklyCell.qbl
new file mode 100644
index 0000000..dcfd66f
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyCell/_ROOT_Type_FinancialWeeklyCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialWeeklyCell
+{
+  #keys: '5[415136.0.880700278][415136.0.880700276][0.0.0][415136.0.880700277][415136.0.880700279]'
+  BaseType: Object
+  Description: '璐㈠姟鍛ㄦ姤鎶ヨ〃鍗曞厓鏍�'
+  StructuredName: 'FinancialWeeklyCells'
+}
diff --git a/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Index.qbl b/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Index.qbl
new file mode 100644
index 0000000..e9d1d66
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[415136.0.880700264][415136.0.880700263][415136.0.880700265]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Name.qbl b/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..8d33fbb
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.880700267][415136.0.880700266][415136.0.880700268]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Period.qbl b/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Period.qbl
new file mode 100644
index 0000000..89fbd65
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyColumn/Attribute_Period.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Period
+{
+  #keys: '3[415136.0.880700270][415136.0.880700269][415136.0.880700271]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_FinancialWeeklyColumn/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialWeeklyColumn/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyColumn/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialWeeklyColumn/Function_CalcIndex.qbl b/_Main/BL/Type_FinancialWeeklyColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..9adb565
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyColumn/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-21-2024 (created)1
+    
+    value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+    
+    this.Index( value );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyColumn/_ROOT_Type_FinancialWeeklyColumn.qbl b/_Main/BL/Type_FinancialWeeklyColumn/_ROOT_Type_FinancialWeeklyColumn.qbl
new file mode 100644
index 0000000..d58efd7
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyColumn/_ROOT_Type_FinancialWeeklyColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialWeeklyColumn
+{
+  #keys: '5[415136.0.880700261][415136.0.880700259][0.0.0][415136.0.880700260][415136.0.880700262]'
+  BaseType: Object
+  Description: '璐㈠姟鍛ㄦ姤鍒�'
+  StructuredName: 'FinancialWeeklyColumns'
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/Attribute_ID.qbl b/_Main/BL/Type_FinancialWeeklyReport/Attribute_ID.qbl
new file mode 100644
index 0000000..1615973
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.880700226][415136.0.880700225][415136.0.880700227]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/Attribute_IsShow.qbl b/_Main/BL/Type_FinancialWeeklyReport/Attribute_IsShow.qbl
new file mode 100644
index 0000000..91c8574
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/Attribute_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+  #keys: '3[415136.0.880700229][415136.0.880700228][415136.0.880700230]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/Attribute_Name.qbl b/_Main/BL/Type_FinancialWeeklyReport/Attribute_Name.qbl
new file mode 100644
index 0000000..f308987
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.880700232][415136.0.880700231][415136.0.880700233]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/DefaultValue_ID.qbl b/_Main/BL/Type_FinancialWeeklyReport/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialWeeklyReport/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialWeeklyReport/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..3e3dbae
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/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.FinancialWeeklyColumn( relnew, Name := periodname, Period := periodtime );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Download.qbl
new file mode 100644
index 0000000..1814b15
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Download.qbl
@@ -0,0 +1,65 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  Description: '涓嬭浇璐㈠姟鎶ヨ〃鏁版嵁'
+  TextBody:
+  [*
+    
+    table := macroPlan.FinancialWeeklyReport();
+    
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+    
+    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+    //琛屽悕
+    rowcolumnelement := xmlDOM.CreateElement( "column" );
+    rownameelement   := xmlDOM.CreateElement( "name" );
+    rowtypeelement   := xmlDOM.CreateElement( "type" );
+    rownameelement.TextContent( '' );
+    rowtypeelement.TextContent( "String" );
+    rowcolumnelement.AppendChild( rownameelement );
+    rowcolumnelement.AppendChild( rowtypeelement );
+    
+    tableElement.AppendChild( rowcolumnelement ); 
+    traverse ( table, FinancialWeeklyColumn, 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, FinancialWeeklyCell, cell, cell.FinancialWeeklyRow().RowNr() );
+    
+      traverse ( cells, Elements, c ) {
+        if( column.Index() = 0 ){
+          row := c.FinancialWeeklyRow();
+          //琛屽悕
+          rowcellElement := xmlDOM.CreateElement( "cell" );
+          rowcellElement.SetAttribute( "value", row.Name() );
+          rowcolumnelement.AppendChild( rowcellElement );
+        }
+        cellElement := xmlDOM.CreateElement( "cell" );
+        cellElement.SetAttribute( "value", c.Value() ); 
+        columnelement.AppendChild( cellElement );
+      }
+      tableElement.AppendChild( columnelement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( FinancialWeeklyReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultAllUnit.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultAllUnit.qbl
new file mode 100644
index 0000000..518f4c6
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultAllUnit.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultAllUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '<All>';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl
new file mode 100644
index 0000000..739a84b
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl
new file mode 100644
index 0000000..d544c74
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛';
+    //return 'Assembly Plant (Spain)';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..9b7d1de
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/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 'Financial weekly';
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..dcd3b98
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/StaticMethod_Initialize.qbl
@@ -0,0 +1,173 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MacroPlan owner
+)
+{
+  Description: '鍒濆鍖�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-4-2024 (created)
+    owner.FinancialWeeklyReport( relflush );
+    ccunit                    := FinancialWeeklyReport::GetDefaultCCUnit();
+    dlunit                    := FinancialWeeklyReport::GetDefaultDLUnit();
+    allunit                   := FinancialWeeklyReport::GetDefaultAllUnit();
+    defaultname               := FinancialWeeklyReport::GetDefaultName();
+    startofplanning           := owner.StartOfPlanning();
+    
+    table                     := owner.FinancialWeeklyReport( relnew, ID := defaultname, Name := defaultname );
+    //浜ч噺鎶ヨ〃
+    productiontable           := selectobject( owner, FinancialProductionSource.FinancialProductionReport, report, not report.IsImport() and not report.IsShow() );
+    //閿�閲忔姤琛�
+    salestable                := selectobject( owner, FinancialSalesSource.FinancialSalesReport, report, not report.IsImport() and not report.IsShow() );
+    
+    table.GenerateColumn( owner );
+    totalproduction           := table.FinancialWeeklyRow( relnew, Name := '鎬讳骇閲�', RowNr := 1 );
+    dlproduction              := table.FinancialWeeklyRow( relnew, Name := 'DL浜ч噺', RowNr := 2 );
+    ccproduction              := table.FinancialWeeklyRow( relnew, Name := 'CC浜ч噺', RowNr := 3 );
+    totalsales                := table.FinancialWeeklyRow( relnew, Name := '鎬婚攢閲�', RowNr := 4 );
+    dlsales                   := table.FinancialWeeklyRow( relnew, Name := 'DL閿�閲�', RowNr := 5 );
+    ccsales                   := table.FinancialWeeklyRow( relnew, Name := 'CC閿�閲�', RowNr := 6 );
+    //SUM
+    totalpvaluesum            := [Real]0;
+    dlpvaluesum               := [Real]0;
+    ccpvaluesum               := [Real]0;
+    totalsvaluesum            := [Real]0;
+    dlsvaluesum               := [Real]0;
+    ccsvaluesum               := [Real]0;
+    //绱閲�
+    totalpvaluecumulant       := [Real]0;
+    dlpvaluecumulant          := [Real]0;
+    ccpvaluecumulant          := [Real]0;
+    totalsvaluecumulant       := [Real]0;
+    dlsvaluecumulant          := [Real]0;
+    ccsvaluecumulant          := [Real]0;
+    
+    traverse( table, FinancialWeeklyColumn, column ){
+      productioncolumn      := selectobject( productiontable, FinancialProductionColumn, pcolumn, pcolumn.Name() = column.Name() and pcolumn.Period() = column.Period() );
+      salescolumn           := selectobject( salestable, FinancialSalesColumn, scolumn, scolumn.Name() = column.Name() and scolumn.Period() = column.Period() );
+      
+      //浜ч噺姹囨��
+      totalpvalue           := [Real]0;
+      dlpvalue              := [Real]0;
+      ccpvalue              := [Real]0;
+      traverse( productioncolumn, FinancialProductionCell, cell, [Real]cell.Value() > 0 ){
+        unit                := cell.FinancialProductionRow().Unit();
+        
+        if( unit = allunit ){
+          totalpvalue       := totalpvalue + [Real]cell.Value();
+          if( column.Period() = startofplanning.StartOfMonth().Date() ){
+            totalpvaluecumulant := totalpvaluecumulant - cell.PlanValue();
+          }
+        }else if( unit = dlunit ){
+          dlpvalue          := dlpvalue + [Real]cell.Value();
+          if( column.Period() = startofplanning.StartOfMonth().Date() ){
+            dlpvaluecumulant := dlpvaluecumulant - cell.PlanValue();
+          }
+        }else if( unit = ccunit ){
+          ccpvalue          := ccpvalue + [Real]cell.Value();
+          if( column.Period() = startofplanning.StartOfMonth().Date() ){
+            ccpvaluecumulant := ccpvaluecumulant - cell.PlanValue();
+          }
+        }
+      }
+      totalpcell            := column.FinancialWeeklyCell( relnew, Value := [String]totalpvalue );
+      totalproduction.FinancialWeeklyCell( relinsert, totalpcell );
+      dlpcell               := column.FinancialWeeklyCell( relnew, Value := [String]dlpvalue );
+      dlproduction.FinancialWeeklyCell( relinsert, dlpcell );
+      ccpcell               := column.FinancialWeeklyCell( relnew, Value := [String]ccpvalue );
+      ccproduction.FinancialWeeklyCell( relinsert, ccpcell );
+      
+      //閿�閲忔眹鎬�
+      totalsvalue           := [Real]0;
+      dlsvalue              := [Real]0;
+      ccsvalue              := [Real]0;
+      traverse( salescolumn, FinancialSalesCell, cell, [Real]cell.Value() > 0 ){
+        unit                := cell.FinancialSalesRow().Unit();
+        if( unit = allunit ){
+          totalsvalue       := totalsvalue + [Real]cell.Value();
+        }else if( unit = dlunit ){
+          dlsvalue          := dlsvalue + [Real]cell.Value();
+        }else if( unit = ccunit ){
+          ccsvalue          := ccsvalue + [Real]cell.Value();
+        }
+      }
+      totalscell            := column.FinancialWeeklyCell( relnew, Value := [String]totalsvalue );
+      totalsales.FinancialWeeklyCell( relinsert, totalscell );
+      dlscell               := column.FinancialWeeklyCell( relnew, Value := [String]dlsvalue );
+      dlsales.FinancialWeeklyCell( relinsert, dlscell );
+      ccscell               := column.FinancialWeeklyCell( relnew, Value := [String]ccsvalue );
+      ccsales.FinancialWeeklyCell( relinsert, ccscell );
+      
+      if( column.Period() < startofplanning.StartOfMonth().Date() ){
+        totalpvaluecumulant := totalpvaluecumulant + totalpvalue;
+        dlpvaluecumulant    := dlpvaluecumulant + dlpvalue;
+        ccpvaluecumulant    := ccpvaluecumulant + ccpvalue;
+        totalsvaluecumulant := totalsvaluecumulant + totalsvalue;
+        dlsvaluecumulant    := dlsvaluecumulant + dlsvalue;
+        ccsvaluecumulant    := ccsvaluecumulant + ccsvalue;
+      }
+      totalpvaluesum        := totalpvaluesum + totalpvalue;
+      dlpvaluesum           := dlpvaluesum + dlpvalue;
+      ccpvaluesum           := ccpvaluesum + ccpvalue;
+      totalsvaluesum        := totalsvaluesum + totalsvalue;
+      dlsvaluesum           := dlsvaluesum + dlsvalue;
+      ccsvaluesum           := ccsvaluesum + ccsvalue;
+    }
+    sumcolumn                 := table.FinancialWeeklyColumn( relnew, Name := 'SUM' );
+    cumulantcolumn            := table.FinancialWeeklyColumn( relnew, Name := '绱閲�' );
+    proportioncolumn          := table.FinancialWeeklyColumn( relnew, Name := '鍗犳瘮' );
+    //SUM
+    totalpcellsum           := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]totalpvaluesum );
+    totalproduction.FinancialWeeklyCell( relinsert, totalpcellsum );
+    dlpcellsum              := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]dlpvaluesum );
+    dlproduction.FinancialWeeklyCell( relinsert, dlpcellsum );
+    ccpcellsum              := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]ccpvaluesum );
+    ccproduction.FinancialWeeklyCell( relinsert, ccpcellsum );
+    totalscellsum           := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]totalsvaluesum );
+    totalsales.FinancialWeeklyCell( relinsert, totalscellsum );
+    dlscellsum              := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]dlsvaluesum );
+    dlsales.FinancialWeeklyCell( relinsert, dlscellsum );
+    ccscellsum              := sumcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluesum );
+    ccsales.FinancialWeeklyCell( relinsert, ccscellsum );
+    //绱閲�
+    totalpcellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalpvaluecumulant );
+    totalproduction.FinancialWeeklyCell( relinsert, totalpcellcumulant );
+    dlpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlpvaluecumulant );
+    dlproduction.FinancialWeeklyCell( relinsert, dlpcellcumulant );
+    ccpcellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccpvaluecumulant );
+    ccproduction.FinancialWeeklyCell( relinsert, ccpcellcumulant );
+    totalscellcumulant      := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]totalsvaluecumulant );
+    totalsales.FinancialWeeklyCell( relinsert, totalscellcumulant );
+    dlscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]dlsvaluecumulant );
+    dlsales.FinancialWeeklyCell( relinsert, dlscellcumulant );
+    ccscellcumulant         := cumulantcolumn.FinancialWeeklyCell( relnew, Value := [String]ccsvaluecumulant );
+    ccsales.FinancialWeeklyCell( relinsert, ccscellcumulant );
+    //鍗犳瘮
+    totalpvalueproportion   := guard( ( totalpvaluecumulant / totalpvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
+    totalpcellproportion    := proportioncolumn.FinancialWeeklyCell( relnew, Value := totalpvalueproportion );
+    totalproduction.FinancialWeeklyCell( relinsert, totalpcellproportion );
+    
+    dlpvalueproportion      := guard( ( dlpvaluecumulant / dlpvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
+    dlpcellproportion       := proportioncolumn.FinancialWeeklyCell( relnew, Value := dlpvalueproportion );
+    dlproduction.FinancialWeeklyCell( relinsert, dlpcellproportion );
+    
+    ccpvalueproportion      := guard( ( ccpvaluecumulant / ccpvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
+    ccpcellproportion       := proportioncolumn.FinancialWeeklyCell( relnew, Value := ccpvalueproportion );
+    ccproduction.FinancialWeeklyCell( relinsert, ccpcellproportion );
+    
+    totalsvalueproportion   := guard( ( totalsvaluecumulant / totalsvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
+    totalscellproportion    := proportioncolumn.FinancialWeeklyCell( relnew, Value := totalsvalueproportion );
+    totalsales.FinancialWeeklyCell( relinsert, totalscellproportion );
+    
+    dlsvalueproportion      := guard( ( dlsvaluecumulant / dlsvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
+    dlscellproportion       := proportioncolumn.FinancialWeeklyCell( relnew, Value := dlsvalueproportion );
+    dlsales.FinancialWeeklyCell( relinsert, dlscellproportion );
+    
+    ccsvalueproportion      := guard( ( ccsvaluecumulant / ccsvaluesum ).Format( 'N(Dec(2))' ), '0.00' );
+    ccscellproportion       := proportioncolumn.FinancialWeeklyCell( relnew, Value := ccsvalueproportion );
+    ccsales.FinancialWeeklyCell( relinsert, ccscellproportion );
+    
+    info( sumcolumn.FinancialWeeklyCell( relsize ), cumulantcolumn.FinancialWeeklyCell( relsize ), proportioncolumn.FinancialWeeklyCell( relsize ) );
+  *]
+}
diff --git a/_Main/BL/Type_FinancialWeeklyReport/_ROOT_Type_FinancialWeeklyReport.qbl b/_Main/BL/Type_FinancialWeeklyReport/_ROOT_Type_FinancialWeeklyReport.qbl
new file mode 100644
index 0000000..0d8d278
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyReport/_ROOT_Type_FinancialWeeklyReport.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialWeeklyReport
+{
+  #keys: '5[415136.0.880700223][415136.0.880700221][0.0.0][415136.0.880700222][415136.0.880700224]'
+  BaseType: Object
+  Description: '璐㈠姟鍛ㄦ姤鎶ヨ〃'
+  StructuredName: 'FinancialWeeklyReports'
+}
diff --git a/_Main/BL/Type_FinancialWeeklyRow/Attribute_Name.qbl b/_Main/BL/Type_FinancialWeeklyRow/Attribute_Name.qbl
new file mode 100644
index 0000000..f048b61
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.880700246][415136.0.880700245][415136.0.880700247]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialWeeklyRow/Attribute_RowNr.qbl b/_Main/BL/Type_FinancialWeeklyRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..1c9317f
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[415136.0.880700249][415136.0.880700248][415136.0.880700250]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialWeeklyRow/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialWeeklyRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialWeeklyRow/_ROOT_Type_FinancialWeeklyRow.qbl b/_Main/BL/Type_FinancialWeeklyRow/_ROOT_Type_FinancialWeeklyRow.qbl
new file mode 100644
index 0000000..e68f59a
--- /dev/null
+++ b/_Main/BL/Type_FinancialWeeklyRow/_ROOT_Type_FinancialWeeklyRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialWeeklyRow
+{
+  #keys: '5[415136.0.880700240][415136.0.880700238][0.0.0][415136.0.880700239][415136.0.880700241]'
+  BaseType: Object
+  Description: '璐㈠姟鍛ㄦ姤琛�'
+  StructuredName: 'FinancialWeeklyRows'
+}
diff --git a/_Main/BL/Type_InventorySummaryCell/Attribute_AverageInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Attribute_AverageInventory.qbl
new file mode 100644
index 0000000..cc4cf47
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryCell/Attribute_AverageInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute AverageInventory
+{
+  #keys: '3[415136.0.865305024][415136.0.865305023][415136.0.865305025]'
+  Description: '璇勪环搴撳瓨'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InventorySummaryCell/Attribute_EndingInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Attribute_EndingInventory.qbl
new file mode 100644
index 0000000..f51b0bc
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryCell/Attribute_EndingInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndingInventory
+{
+  #keys: '3[415136.0.865304924][415136.0.865304923][415136.0.865304925]'
+  Description: '鏈熸湯搴撳瓨'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InventorySummaryCell/Attribute_MaximumInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Attribute_MaximumInventory.qbl
new file mode 100644
index 0000000..341b8e7
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryCell/Attribute_MaximumInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MaximumInventory
+{
+  #keys: '3[415136.0.865304944][415136.0.865304943][415136.0.865304945]'
+  Description: '鏈�澶у簱瀛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InventorySummaryCell/Attribute_MinimumInventory.qbl b/_Main/BL/Type_InventorySummaryCell/Attribute_MinimumInventory.qbl
new file mode 100644
index 0000000..d686c7f
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryCell/Attribute_MinimumInventory.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MinimumInventory
+{
+  #keys: '3[415136.0.865304934][415136.0.865304933][415136.0.865304935]'
+  Description: '鏈�灏忓簱瀛�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_InventorySummaryCell/_ROOT_Type_InventorySummaryCell.qbl b/_Main/BL/Type_InventorySummaryCell/_ROOT_Type_InventorySummaryCell.qbl
new file mode 100644
index 0000000..153a82e
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryCell/_ROOT_Type_InventorySummaryCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventorySummaryCell
+{
+  #keys: '5[415136.0.865304684][415136.0.865304682][0.0.0][415136.0.865304683][415136.0.865304685]'
+  BaseType: Object
+  Description: '搴撳瓨姹囨�绘姤琛ㄥ崟鍏冩牸'
+  StructuredName: 'InventorySummaryCells'
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Attribute_Index.qbl b/_Main/BL/Type_InventorySummaryColumn/Attribute_Index.qbl
new file mode 100644
index 0000000..851f48d
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+  #keys: '3[415136.0.865304670][415136.0.865304669][415136.0.865304671]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Attribute_Name.qbl b/_Main/BL/Type_InventorySummaryColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..0503193
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.865304673][415136.0.865304672][415136.0.865304674]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Attribute_Period.qbl b/_Main/BL/Type_InventorySummaryColumn/Attribute_Period.qbl
new file mode 100644
index 0000000..5c8b136
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Attribute_Period.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Period
+{
+  #keys: '3[415136.0.865304676][415136.0.865304675][415136.0.865304677]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl b/_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl
new file mode 100644
index 0000000..9090596
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Attribute_TimeUnit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TimeUnit
+{
+  #keys: '3[415136.0.865101993][415136.0.865101992][415136.0.865101994]'
+  Description: 'day;week;month'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/DefaultValue_Name.qbl b/_Main/BL/Type_InventorySummaryColumn/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Function_CalcIndex.qbl b/_Main/BL/Type_InventorySummaryColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..56bbf20
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-21-2024 (created)
+    
+    value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+    
+    this.Index( value );
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl b/_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl
new file mode 100644
index 0000000..a85f1cd
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/Method_GenerateCell.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateCell (
+  InventoryPointSelections selections,
+  Strings ccstockingpointids,
+  Strings dlstockingpointids,
+  InventorySummaryReport table,
+  Date start,
+  Date end,
+  String productid,
+  String allunit,
+  String ccunit,
+  String dlunit
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-3-2024 (created)
+    //All
+    alldetails := selectset( selections, Elements.InventoryInterfaceDataDetail, detail, detail.PartNumber() = productid and detail.Date() >= start and detail.Date() <= end );
+    if( alldetails.Size() > 0 ){
+      allrow     := table.GetRow( allunit, productid );
+      allvalue := sum( alldetails, Elements, e, e.Quantity() );
+      allrow.SetCellValue( this, allvalue );
+      //闀挎槬
+      ccdetails := selectset( alldetails, Elements, detail, ccstockingpointids.Find( detail.InventoryPointSelection().StockpoingPoint() ) >= 0 );
+      if( ccdetails.Size() > 0 ){
+        ccrow := table.GetRow( ccunit, productid );
+        value := sum( ccdetails, Elements, e, e.Quantity() );
+        ccrow.SetCellValue( this, value );
+      }
+      //澶ц繛
+      dldetails := selectset( alldetails, Elements, detail, dlstockingpointids.Find( detail.InventoryPointSelection().StockpoingPoint() ) >= 0 );
+      if( dldetails.Size() > 0 ){
+        dlrow := table.GetRow( dlunit, productid );
+        value := sum( dldetails, Elements, e, e.Quantity() );
+        dlrow.SetCellValue( this, value );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryColumn/_ROOT_Type_InventorySummaryColumn.qbl b/_Main/BL/Type_InventorySummaryColumn/_ROOT_Type_InventorySummaryColumn.qbl
new file mode 100644
index 0000000..8025104
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryColumn/_ROOT_Type_InventorySummaryColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventorySummaryColumn
+{
+  #keys: '5[415136.0.865304667][415136.0.865304665][0.0.0][415136.0.865304666][415136.0.865304668]'
+  BaseType: Object
+  Description: '搴撳瓨姹囨�诲垪'
+  StructuredName: 'InventorySummaryColumns'
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Attribute_ID.qbl b/_Main/BL/Type_InventorySummaryReport/Attribute_ID.qbl
new file mode 100644
index 0000000..6c9df63
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.865304629][415136.0.865304628][415136.0.865304630]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Attribute_IsShow.qbl b/_Main/BL/Type_InventorySummaryReport/Attribute_IsShow.qbl
new file mode 100644
index 0000000..43d060a
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Attribute_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+  #keys: '3[415136.0.865304635][415136.0.865304634][415136.0.865304636]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Attribute_Name.qbl b/_Main/BL/Type_InventorySummaryReport/Attribute_Name.qbl
new file mode 100644
index 0000000..5951a3f
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.865304638][415136.0.865304637][415136.0.865304639]'
+  Description: '鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/DefaultValue_ID.qbl b/_Main/BL/Type_InventorySummaryReport/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/DefaultValue_Name.qbl b/_Main/BL/Type_InventorySummaryReport/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl b/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl
new file mode 100644
index 0000000..25d5339
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Method_Clear.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+Method Clear (
+  String timeunit,
+  DateTime starttime,
+  DateTime endtime
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    this.InventorySummaryColumn( relflush );
+    this.InventroySummaryRow( relflush );
+    
+    this.GenerateColumn( this.InventorySummarySource().MacroPlan(), timeunit, starttime, endtime );
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl b/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
new file mode 100644
index 0000000..f2bc208
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Method_Generate.qbl
@@ -0,0 +1,49 @@
+Quintiq file version 2.0
+#parent: #root
+Method Generate (
+  InventorySummarySearch search,
+  Product_MPs products
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    startofplanning           := search.InventorySummarySource().MacroPlan().StartOfPlanning();
+    startofyear               := startofplanning.StartOfYear();
+    startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
+    //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
+    if( search.StartDate().DateTime() < startofendyear and search.EndDate().DateTime() > startofyear ){
+      table      := selectobject( this, InventorySummarySource.InventorySummaryReport, report, not report.IsShow() );
+      allunit    := '<All>';
+      //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
+      this.Clear( search.Category(), search.StartDate().DateTime(), search.EndDate().DateTime() );
+      //杩囨护鍚庣殑浜у搧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.InventroySummaryRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.InventroySummaryRow( relsize ) );
+      sumrow.InitializeCell( this );
+      traverse( table, InventroySummaryRow, row, row.Unit() = search.Unit() ){
+        productid  := construct( Strings );
+        productid.Add( row.Name() );
+        
+        if( productids.ContainsAll( productid ) ){
+          showrow := this.InventroySummaryRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
+          
+          traverse( row, InventorySummaryCell, cell, cell.InventorySummaryColumn().TimeUnit() = search.Category() ){
+            column   := selectobject( this, InventorySummaryColumn, column, column.Name() = cell.InventorySummaryColumn().Name() );
+            
+            sumcell  := selectobject( column, InventorySummaryCell, c, c.InventroySummaryRow() = sumrow );
+            
+            showcell := column.InventorySummaryCell( relnew, EndingInventory := cell.EndingInventory(), MinimumInventory := cell.MinimumInventory(), MaximumInventory := cell.MaximumInventory(), AverageInventory := cell.AverageInventory() );
+            showrow.InventorySummaryCell( relinsert, showcell );
+            sumcell.EndingInventory( sumcell.EndingInventory() + cell.EndingInventory() );
+            sumcell.MinimumInventory( sumcell.MinimumInventory() + cell.MinimumInventory() );
+            sumcell.MaximumInventory( sumcell.MaximumInventory() + cell.MaximumInventory() );
+            sumcell.AverageInventory( sumcell.AverageInventory() + cell.AverageInventory() );
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl b/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..1b7156e
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Method_GenerateColumn.qbl
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateColumn (
+  MacroPlan owner,
+  String timeunit,
+  DateTime starttime,
+  DateTime endtime
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-25-2024 (created)
+    startofplanning           := owner.StartOfPlanning();
+    startofyear               := startofplanning.StartOfYear();
+    startofendyear            := startofplanning.StartOfNextYear() - Duration::Days( 1 );
+    //鏌ヨ鏃ユ湡杩斿洖闇�瑕佸湪璁″垝鏃ユ湡涔嬪唴
+    if( starttime < startofendyear and endtime > startofyear ){
+      if( starttime < startofyear ){
+        starttime := startofyear;
+      }
+      if( endtime > startofendyear ){
+        endtime := startofendyear;
+      }
+    for( start := starttime; start <= endtime; start := start.StartOfNextDay() ){
+      periodtime := start.Date();
+      periodname := periodtime.Format( "M2/D2/Y" );
+      
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Day() ){
+        this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Day() );
+      }
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Week() ){
+        weekend := ( start.StartOfNextWeek() - Duration::Days( 1 ) ).Date();
+        
+        if( periodtime = weekend ){
+          this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Week() );
+        }
+      }
+      if( timeunit = 'All' or timeunit = Translations::MP_GlobalParameters_Month() ){
+        monthend := ( start.StartOfNextMonth() - Duration::Days( 1 ) ).Date();
+        
+        if( periodtime = monthend ){
+          this.InventorySummaryColumn( relnew, Name := periodname, Period := periodtime, TimeUnit := Translations::MP_GlobalParameters_Month() );
+        }
+      }
+    }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl b/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl
new file mode 100644
index 0000000..7fc4aeb
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/Method_GetRow.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetRow (
+  String unit,
+  String product
+) as InventroySummaryRow
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    row := selectobject( this, InventroySummaryRow, row, row.Name() = product and row.Unit() = unit );
+    
+    if( isnull( row ) ){
+      row := this.InventroySummaryRow( relnew, Name := product, Unit := unit );
+      //鍒濆鍖栧崟鍏冩牸
+      row.InitializeCell( this );
+    }
+    
+    return row;
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultAllUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultAllUnit.qbl
new file mode 100644
index 0000000..518f4c6
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultAllUnit.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultAllUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '<All>';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl
new file mode 100644
index 0000000..739a84b
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '闀挎槬';
+    //return 'Assembly Plant (France)';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl
new file mode 100644
index 0000000..d544c74
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -0,0 +1,11 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLUnit () const as String
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    return '澶ц繛';
+    //return 'Assembly Plant (Spain)';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_InventorySummaryReport/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..fba1410
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/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 'Inventory summary';
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummaryReport/_ROOT_Type_InventorySummaryReport.qbl b/_Main/BL/Type_InventorySummaryReport/_ROOT_Type_InventorySummaryReport.qbl
new file mode 100644
index 0000000..d260b23
--- /dev/null
+++ b/_Main/BL/Type_InventorySummaryReport/_ROOT_Type_InventorySummaryReport.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventorySummaryReport
+{
+  #keys: '5[415136.0.865304626][415136.0.865304624][0.0.0][415136.0.865304625][415136.0.865304627]'
+  BaseType: Object
+  Description: '搴撳瓨姹囨�绘姤琛�'
+  StructuredName: 'InventorySummaryReports'
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_Category.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_Category.qbl
new file mode 100644
index 0000000..795b6e6
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_Category.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Category
+{
+  #keys: '3[415136.0.865101964][415136.0.865101963][415136.0.865101965]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_EndDate.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_EndDate.qbl
new file mode 100644
index 0000000..a0f273b
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_EndDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[415136.0.865304981][415136.0.865304980][415136.0.865304982]'
+  Description: '鎺ュ彈鏃ユ湡'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_Generation.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_Generation.qbl
new file mode 100644
index 0000000..f1d7453
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+  #keys: '3[415136.0.865304596][415136.0.865304595][415136.0.865304597]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_MqbMlb.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..c60b1d6
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+  #keys: '3[415136.0.865304599][415136.0.865304598][415136.0.865304600]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_Power.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_Power.qbl
new file mode 100644
index 0000000..e993cb3
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+  #keys: '3[415136.0.865304602][415136.0.865304601][415136.0.865304603]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_StartDate.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_StartDate.qbl
new file mode 100644
index 0000000..1f97228
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_StartDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[415136.0.865101837][415136.0.865101836][415136.0.865101838]'
+  Description: '寮�濮嬫棩鏈�'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/Attribute_Unit.qbl b/_Main/BL/Type_InventorySummarySearch/Attribute_Unit.qbl
new file mode 100644
index 0000000..b265b0c
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.865304605][415136.0.865304604][415136.0.865304606]'
+  Description: '浜х嚎'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/DefaultValue_Generation.qbl b/_Main/BL/Type_InventorySummarySearch/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_InventorySummarySearch/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/DefaultValue_Power.qbl b/_Main/BL/Type_InventorySummarySearch/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/DefaultValue_Unit.qbl b/_Main/BL/Type_InventorySummarySearch/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_InventorySummarySearch/_ROOT_Type_InventorySummarySearch.qbl b/_Main/BL/Type_InventorySummarySearch/_ROOT_Type_InventorySummarySearch.qbl
new file mode 100644
index 0000000..56a668e
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySearch/_ROOT_Type_InventorySummarySearch.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventorySummarySearch
+{
+  #keys: '5[415136.0.865304593][415136.0.865304591][0.0.0][415136.0.865304592][415136.0.865304594]'
+  BaseType: Object
+  Description: '鏌ヨ绫�'
+  StructuredName: 'InventorySummarySearchs'
+}
diff --git a/_Main/BL/Type_InventorySummarySource/Attribute_ID.qbl b/_Main/BL/Type_InventorySummarySource/Attribute_ID.qbl
new file mode 100644
index 0000000..77f645f
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[415136.0.865304968][415136.0.865304967][415136.0.865304969]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySource/Attribute_Name.qbl b/_Main/BL/Type_InventorySummarySource/Attribute_Name.qbl
new file mode 100644
index 0000000..56307c5
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.865304835][415136.0.865304834][415136.0.865304836]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventorySummarySource/DefaultValue_Name.qbl b/_Main/BL/Type_InventorySummarySource/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
new file mode 100644
index 0000000..2f2dbb5
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Download.qbl
@@ -0,0 +1,135 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  Description: '涓嬭浇璐㈠姟鎶ヨ〃鏁版嵁'
+  TextBody:
+  [*
+    
+    table := selectobject( macroPlan, InventorySummarySource.InventorySummaryReport, 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 );
+    //Unit
+    unitcolumnelement := xmlDOM.CreateElement( "column" );
+    unitnameelement   := xmlDOM.CreateElement( "name" );
+    unittypeelement   := xmlDOM.CreateElement( "type" );
+    unitnameelement.TextContent( 'Unit' );
+    unittypeelement.TextContent( "String" );
+    unitcolumnelement.AppendChild( unitnameelement );
+    unitcolumnelement.AppendChild( unittypeelement );
+    //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( unitcolumnelement ); 
+    tableElement.AppendChild( attricolumnelement );
+    traverse ( table, InventorySummaryColumn, 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, InventorySummaryCell, cell, cell.InventroySummaryRow().RowNr() );
+    
+      traverse ( cells, Elements, c ) {
+        if( column.Index() = 0 ){
+          row := c.InventroySummaryRow();
+          //Product
+          productcellElement1 := xmlDOM.CreateElement( "cell" );
+          productcellElement1.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement1 );
+          productcellElement2 := xmlDOM.CreateElement( "cell" );
+          productcellElement2.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement2 );
+          productcellElement3 := xmlDOM.CreateElement( "cell" );
+          productcellElement3.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement3 );
+          productcellElement4 := xmlDOM.CreateElement( "cell" );
+          productcellElement4.SetAttribute( "value", row.Name() );
+          productcolumnelement.AppendChild( productcellElement4 );
+          //Unit
+          unitcellElement1 := xmlDOM.CreateElement( "cell" );
+          unitcellElement1.SetAttribute( "value", row.Unit() );
+          unitcolumnelement.AppendChild( unitcellElement1 );
+          unitcellElement2 := xmlDOM.CreateElement( "cell" );
+          unitcellElement2.SetAttribute( "value", row.Unit() );
+          unitcolumnelement.AppendChild( unitcellElement2 );
+          unitcellElement3 := xmlDOM.CreateElement( "cell" );
+          unitcellElement3.SetAttribute( "value", row.Unit() );
+          unitcolumnelement.AppendChild( unitcellElement3 );
+          unitcellElement4 := xmlDOM.CreateElement( "cell" );
+          unitcellElement4.SetAttribute( "value", row.Unit() );
+          unitcolumnelement.AppendChild( unitcellElement4 );
+          //Attribute
+          //鏈熸湯搴撳瓨
+          endcellElement := xmlDOM.CreateElement( "cell" );
+          endcellElement.SetAttribute( "value", 'EndingInventory' );
+          attricolumnelement.AppendChild( endcellElement );
+          //鏈�灏忓簱瀛�
+          mincellElement := xmlDOM.CreateElement( "cell" );
+          mincellElement.SetAttribute( "value", 'MinimumInventory' );
+          attricolumnelement.AppendChild( mincellElement );
+          //鏈�澶у簱瀛�
+          maxcellElement := xmlDOM.CreateElement( "cell" );
+          maxcellElement.SetAttribute( "value", 'MaximumInventory' );
+          attricolumnelement.AppendChild( maxcellElement );
+          //骞冲潎搴撳瓨
+          avecellElement := xmlDOM.CreateElement( "cell" );
+          avecellElement.SetAttribute( "value", 'AverageInventory' );
+          attricolumnelement.AppendChild( avecellElement );
+        }
+        //鏈熸湯搴撳瓨
+        endcellElement := xmlDOM.CreateElement( "cell" );
+        endcellElement.SetAttribute( "value", [String]c.EndingInventory() );
+        columnelement.AppendChild( endcellElement );
+        //鏈�灏忓簱瀛�
+        mincellElement := xmlDOM.CreateElement( "cell" );
+        mincellElement.SetAttribute( "value", [String]c.MinimumInventory() );
+        columnelement.AppendChild( mincellElement );
+        //鏈�澶у簱瀛�
+        maxcellElement := xmlDOM.CreateElement( "cell" );
+        maxcellElement.SetAttribute( "value", [String]c.MaximumInventory() );
+        columnelement.AppendChild( maxcellElement );
+        //骞冲潎搴撳瓨
+        avecellElement := xmlDOM.CreateElement( "cell" );
+        avecellElement.SetAttribute( "value", [String]c.AverageInventory() );
+        columnelement.AppendChild( avecellElement );
+      }
+      tableElement.AppendChild( columnelement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM );
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( InventorySummaryReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_DownloadTemplate.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_DownloadTemplate.qbl
new file mode 100644
index 0000000..a47c88a
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_DownloadTemplate.qbl
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DownloadTemplate (
+  MacroPlan macroPlan
+) as BinaryValue
+{
+  TextBody:
+  [*
+    xmlDOMI := XMLDOMImplementation::Create();
+    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name><column><name>Product</name><type>String</type></column><column><name>Unit</name><type>String</type></column></table>' );
+    
+    tableElement              := xmlDOM.GetElementByTagName( "table", 0 );
+    
+    startofyear               := macroPlan.StartOfPlanning().StartOfYear();
+    startofnextyear           := macroPlan.StartOfPlanning().StartOfNextYear();
+    
+    for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+      columnElement := xmlDOM.CreateElement( "column" );
+      nameElement   := xmlDOM.CreateElement( "name" );
+      typeElement   := xmlDOM.CreateElement( "type" );
+      nameElement.TextContent( start.Format( "M2/D2/Y" ) );
+      typeElement.TextContent( "String" );
+      columnElement.AppendChild( nameElement );
+      columnElement.AppendChild( typeElement );
+      tableElement.AppendChild( columnElement );  
+    }
+    
+    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+    
+    //info( xmlString );
+    
+    tableGroupHandle := TableGroupHandle::Create( FinancialSalesReport::GetDefaultName() );
+    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+    tableGroupHandle.Add( tableHandle );
+    
+    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+    
+    return binaryData.AsBinaryValue();
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..455d0bc
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Initialize.qbl
@@ -0,0 +1,135 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+  MacroPlan owner,
+  InterfaceDataset interface
+)
+{
+  Description: '鍒濆鍖�'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    owner.InventorySummarySource( relflush );
+    products                  := construct( Product_MPs );
+    allunit                   := InventorySummaryReport::GetDefaultAllUnit();
+    ccunit                    := InventorySummaryReport::GetDefaultCCUnit();
+    dlunit                    := InventorySummaryReport::GetDefaultDLUnit();
+    
+    source                    := owner.InventorySummarySource( relnew, ID := InventorySummaryReport::GetDefaultName(), Name := InventorySummaryReport::GetDefaultName() );
+    table                     := source.InventorySummaryReport( relnew, ID := source.Name(), Name := source.Name() );
+    showtable                 := source.InventorySummaryReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsShow := true );
+    startofplanning           := owner.StartOfPlanning();
+    startofyear               := startofplanning.StartOfYear();
+    startofnextyear           := startofplanning.StartOfNextYear();
+    
+    search                    := source.InventorySummarySearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit, StartDate := Date::MinDate(), EndDate := Date::MaxDate() );
+    
+    table.GenerateColumn( owner, 'All', startofyear, startofnextyear );
+    //info( '-----------------------------------', table.InventorySummaryColumn( relsize ) );
+    //搴撳瓨鏁伴噺涓篈ctual inventories閲岄潰鐨勭偣Planned inventories瀛楁搴撳瓨閲忓姞鎬�
+    traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.IsLeaf() and not pisp.IsSystem() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){
+      unit := pisp.StockingPoint_MP().UnitID();
+      product := pisp.Product_MP();
+    //  info( '-----------------------------------', unit, product.ID() );
+      weekpispips := construct( ProductInStockingPointInPeriods );
+      monthpispips := construct( ProductInStockingPointInPeriods );
+      nextweek := startofplanning.StartOfNextWeek();
+      nextmonth := startofplanning.StartOfNextMonth();
+      
+      unitrow := table.GetRow( unit, product.ID() );
+      allrow     := table.GetRow( allunit, product.ID() );
+      pispips := selectsortedset( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning and pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day(), pispip.Start() );
+    //  info( '-----------------------------------', isnull( allrow ), pispips.Size() );
+      traverse( pispips, Elements, pispip, pispip.Start() = startofplanning ){
+    //    info( '-----------------------------------', pispip.Start() );
+        period     := pispip.Period_MP();
+        periodtime := period.Start().Date();
+        periodname := periodtime.Format( "M2/D2/Y" );
+        //澶╋紝閫夋嫨鏃ラ绮掑害鏃讹紝鏈熸湯搴撳瓨锛屾渶灏忓簱瀛橈紝鏈�澶у簱瀛樺拰骞冲潎搴撳瓨鐨勬暟鍊间繚鎸佷竴鑷�
+        daycolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Day() );
+        info( daycolumn.Name(), daycolumn.Period(), daycolumn.TimeUnit() );
+        unitrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+        allrow.SetCellValue( daycolumn, pispip.PlannedInventoryLevelEnd() );
+        
+        //鍛紝閫夋嫨鍛ㄦ椂锛屾湡鏈簱瀛樹负姣忎竴鍛ㄦ渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴鍛ㄥ簱瀛橀噺鏈�澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鍛ㄧ殑骞冲潎鍊�
+        if( period.Start() < nextweek ){
+          weekpispips.Add( pispip );
+          
+          weekend := nextweek - Duration::Days( 1 );
+          if( period.Start() = weekend ){
+            weekcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Week() );
+            
+            maxinventory := max( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            mininventory := min( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            aveinventory := average( weekpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            unitrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+            allrow.SetCellValue( weekcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+          }
+        }else{
+          weekpispips.Flush();
+          weekpispips.Add( pispip );
+          nextweek := nextweek.StartOfNextWeek();
+        }
+        
+        //鏈堬紝閫夋嫨鏈堟椂锛屾湡鏈簱瀛樹负姣忎竴鏈堟渶鍚庝竴澶╃殑姹囨�诲簱瀛樹俊鎭紝鏈�灏忓簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶灏忕殑涓�澶╃殑鏁板�硷紝鏈�澶у簱瀛樹负杩欎竴涓湀搴撳瓨閲忔渶澶х殑涓�澶╃殑鏁板�硷紝骞冲潎搴撳瓨涓鸿鏈堢殑骞冲潎鍊�
+        if( period.Start() < nextmonth ){
+          monthpispips.Add( pispip );
+          
+          monthend := nextmonth - Duration::Days( 1 );
+          if( period.Start() = monthend ){
+            monthcolumn := selectobject( table, InventorySummaryColumn, column, column.Name() = periodname, column.Period() = periodtime, column.TimeUnit() = Translations::MP_GlobalParameters_Month() );
+            
+            maxinventory := max( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            mininventory := min( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            aveinventory := average( monthpispips, Elements, e, e.PlannedInventoryLevelEnd() );
+            unitrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+            allrow.SetCellValue( monthcolumn, pispip.PlannedInventoryLevelEnd(), mininventory, maxinventory, aveinventory );
+          }
+        }else{
+          monthpispips.Flush();
+          monthpispips.Add( pispip );
+          nextmonth := nextmonth.StartOfNextMonth();
+        }
+      }
+    }
+    //棣栧厛鍦‥ntities閲岃瘑鍒埗绾nit涓洪暱鏄�/澶ц繛鐨勬墍鏈夊簱瀛樼偣
+    //闀挎槬搴撳瓨鐐�
+    ccsps := construct( Strings );
+    //澶ц繛搴撳瓨鐐�
+    dlsps := construct( Strings );
+    allsps := construct( Strings );
+    traverse( owner, Unit, unit, unit.ID() = ccunit or unit.ID() = dlunit ){
+      if( unit.ID() = ccunit ){
+        ccsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() );
+      }
+      if( unit.ID() = dlunit ){
+        dlsps := selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() );
+      }
+      allsps := allsps.Union( selectuniquevalues( unit, StockingPoint_MP, sp, sp.ID() ) );
+    }
+    //鍐嶅湪搴撳瓨鏇存柊鐨勫瓙鐣岄潰搴撳瓨鐐归�夋嫨涓壘鍒拌繖浜涘簱瀛樼偣鎵�鍏宠仈鐨勫凡鍕鹃�夊簱浣�
+    selections := selectset( interface, InventoryPointSelection, selection, allsps.Find( selection.StockpoingPoint() ) >= 0 and selection.IsIncluded() );
+    productids := selectuniquevalues( selections, Elements, selection, selection.ProductID() );
+    //鏈�鍚庡皢杩欎簺搴撲綅涓浂浠跺彿鐨勬暟閲忚繘琛屽姞鎬�
+    traverse( table, InventorySummaryColumn, column, column.Period() < startofplanning.Date() ){
+      traverse( productids, Elements, productid ){
+        if( column.TimeUnit() = Translations::MP_GlobalParameters_Day() ){//澶�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period(), column.Period(), productid, allunit, ccunit, dlunit );
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Week() ){//鍛�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfWeek(), column.Period(), productid, allunit, ccunit, dlunit );
+        }else if( column.TimeUnit() = Translations::MP_GlobalParameters_Month() ){//鏈�
+          column.GenerateCell( selections, ccsps, dlsps, table, column.Period().StartOfMonth(), column.Period(), productid, allunit, ccunit, dlunit );
+        }
+      }
+    }
+      
+        
+    rows := selectsortedset( table, InventroySummaryRow, 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_InventorySummarySource/StaticMethod_Upload.qbl b/_Main/BL/Type_InventorySummarySource/StaticMethod_Upload.qbl
new file mode 100644
index 0000000..df950f0
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/StaticMethod_Upload.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Upload (
+  MacroPlan owner,
+  BinaryValue binaryValue,
+  String filePath
+) as FinancialSalesSource
+{
+  TextBody:
+  [*
+    fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
+    
+    source := owner.FinancialSalesSource( relnew, FileBinaryValue := binaryValue,
+                                               Name                    := fileName,
+                                               IsXLSX                  := fileName.EndsWith( "xlsx" ),
+                                               IsImport                := true,
+                                               UploadDateTime          := DateTime::ActualTime().Format( "Y-M2-D2 H:m:s" ),
+                                               UploadUser              := guard( QuintiqUser::CurrentUser().Username(), "" ) );
+    
+    return source;
+  *]
+}
diff --git a/_Main/BL/Type_InventorySummarySource/_ROOT_Type_InventorySummarySource.qbl b/_Main/BL/Type_InventorySummarySource/_ROOT_Type_InventorySummarySource.qbl
new file mode 100644
index 0000000..3ba4e03
--- /dev/null
+++ b/_Main/BL/Type_InventorySummarySource/_ROOT_Type_InventorySummarySource.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventorySummarySource
+{
+  #keys: '5[415136.0.865304823][415136.0.865304821][0.0.0][415136.0.865304822][415136.0.865304824]'
+  BaseType: Object
+  Description: '搴撳瓨姹囨�绘姤琛�'
+  StructuredName: 'InventorySummarySources'
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Attribute_Name.qbl b/_Main/BL/Type_InventroySummaryRow/Attribute_Name.qbl
new file mode 100644
index 0000000..b941a62
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[415136.0.865304652][415136.0.865304651][415136.0.865304653]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Attribute_RowNr.qbl b/_Main/BL/Type_InventroySummaryRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..05992ac
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+  #keys: '3[415136.0.865304655][415136.0.865304654][415136.0.865304656]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Attribute_Unit.qbl b/_Main/BL/Type_InventroySummaryRow/Attribute_Unit.qbl
new file mode 100644
index 0000000..066f3de
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+  #keys: '3[415136.0.865304658][415136.0.865304657][415136.0.865304659]'
+  Description: '浜х嚎'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/DefaultValue_Name.qbl b/_Main/BL/Type_InventroySummaryRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/DefaultValue_Unit.qbl b/_Main/BL/Type_InventroySummaryRow/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_Filter.qbl b/_Main/BL/Type_InventroySummaryRow/Method_Filter.qbl
new file mode 100644
index 0000000..8c62e9b
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Method_Filter.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+  FinancialProductionSearch search,
+  Product_MPs products
+) declarative remote as Boolean
+{
+  Description: '杩囨护'
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    allunit    := '<All>';
+    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() );
+    
+    productid  := construct( Strings );
+    productid.Add( this.Name() );
+    
+    return productids.ContainsAll( productid ) and this.Unit() = search.Unit();
+  *]
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl b/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl
new file mode 100644
index 0000000..4adcb27
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Method_Initialize.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+  InventorySummaryColumn column,
+  String unit
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := column.InventorySummaryCell( relnew, AverageInventory := 0, EndingInventory := 0, MaximumInventory := 0, MinimumInventory := 0 );
+    
+    this.InventorySummaryCell( relinsert, cell );
+  *]
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl b/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl
new file mode 100644
index 0000000..46259bb
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Method_InitializeCell.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method InitializeCell (
+  InventorySummaryReport table
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-28-2024 (created)
+    traverse( table, InventorySummaryColumn, column ){
+      this.Initialize( column, this.Unit() );
+    }
+  *]
+}
diff --git "a/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue\0430.qbl" "b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue\0430.qbl"
new file mode 100644
index 0000000..20f91c4
--- /dev/null
+++ "b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue\0430.qbl"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCellValue (
+  InventorySummaryColumn column,
+  Real quantity
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
+    
+    cell.AverageInventory( cell.AverageInventory() + quantity );
+    cell.EndingInventory( cell.EndingInventory() + quantity );
+    cell.MaximumInventory( cell.MaximumInventory() + quantity );
+    cell.MinimumInventory( cell.MinimumInventory() + quantity );
+  *]
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl
new file mode 100644
index 0000000..7f6b3b2
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/Method_SetCellValue0.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCellValue (
+  InventorySummaryColumn column,
+  Real endinginventory,
+  Real minimuminventory,
+  Real maximuminventory,
+  Real averageinventory
+)
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jun-24-2024 (created)
+    cell := selectobject( this, InventorySummaryCell, cell, cell.InventorySummaryColumn() = column );
+    
+    cell.AverageInventory( cell.AverageInventory() + averageinventory );
+    cell.EndingInventory( cell.EndingInventory() + endinginventory );
+    cell.MaximumInventory( cell.MaximumInventory() + maximuminventory );
+    cell.MinimumInventory( cell.MinimumInventory() + minimuminventory );
+  *]
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/StaticMethod_NewStaticMethod.qbl b/_Main/BL/Type_InventroySummaryRow/StaticMethod_NewStaticMethod.qbl
new file mode 100644
index 0000000..dc906f4
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/StaticMethod_NewStaticMethod.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod NewStaticMethod
+{
+  TextBody:
+  [*
+    // 鐢勫叞楦� Jul-1-2024 (created)
+  *]
+}
diff --git a/_Main/BL/Type_InventroySummaryRow/_ROOT_Type_InventroySummaryRow.qbl b/_Main/BL/Type_InventroySummaryRow/_ROOT_Type_InventroySummaryRow.qbl
new file mode 100644
index 0000000..746a1ea
--- /dev/null
+++ b/_Main/BL/Type_InventroySummaryRow/_ROOT_Type_InventroySummaryRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type InventroySummaryRow
+{
+  #keys: '5[415136.0.865304646][415136.0.865304644][0.0.0][415136.0.865304645][415136.0.865304647]'
+  BaseType: Object
+  Description: '搴撳瓨姹囨�昏'
+  StructuredName: 'InventroySummaryRows'
+}
diff --git a/_Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl b/_Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl
new file mode 100644
index 0000000..14538b0
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/Attribute_RealValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RealValue
+{
+  #keys: '3[412672.1.5620867][412672.1.5620866][412672.1.5620868]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl
new file mode 100644
index 0000000..27c9816
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GetCell.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCell (
+  String cellKey,
+  NamedValueTree cellIndexTree,
+  LocalCell_Defaults cells,
+  LocalRow row,
+  LocalColumn column
+) as LocalCell_Default
+{
+  TextBody:
+  [*
+    // rislai Jul-8-2024 (created)
+    cellHandle := cellIndexTree.GetHandle( cellKey );
+    cellIndex := guard( cellIndexTree.Root().Child( cellHandle ),null( NamedValue ));
+    cell := null( LocalCell_Default );
+    if( isnull( cell )){
+       cell := row.LocalCell( relnew,LocalCell_Default,LocalColumn := column );
+       cells.Add( cell );
+       cellIndexTree.Root().AddChild( cellHandle,cells.Size() - 1 );
+    }else{
+      cell := cells.Element( cellIndex.GetValueAsNumber() );
+    }
+    return cell;
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl
new file mode 100644
index 0000000..c7e6f6a
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_NewStaticMethod.qbl
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod NewStaticMethod (
+  const constcontent ShiftPlans shiftPlans,
+  RecycleBin owner
+)
+{
+  TextBody:
+  [*
+    // rislai Jul-4-2024 (created)
+    table := owner.LocalTable( relnew,Name := "");
+    
+    column1 := table.LocalColumn( relnew,Name := "宸ュ巶" );
+    column2 := table.LocalColumn( relnew,Name := "浜х嚎" );
+    
+    column3 := table.LocalColumn( relnew,Name := "鐢熶骇澶╂暟" );
+    column4 := table.LocalColumn( relnew,Name := "鍔犵彮鏃堕暱" );
+    column5 := table.LocalColumn( relnew,Name := "娆犲伐鏃堕暱" );
+    column6 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝椂闀�" );
+    column7 := table.LocalColumn( relnew,Name := "鍔犵彮璐�" );
+    column8 := table.LocalColumn( relnew,Name := "娆犲伐璐�" );
+    column9 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝垂" );
+    
+    unitIDs := selectuniquevalues( shiftPlans,Elements.UnitPeriodTime.Unit,unit,unit.ID() );
+    
+    rows := construct( LocalRows );
+    rowIndexTree := NamedValueTree::Create();
+    
+    cells := construct( LocalCell_Defaults );
+    cellIndexTree := NamedValueTree::Create();
+    
+    traverse( unitIDs,Elements,element ){
+      row := table.LocalRow( relnew,Index := table.GetRowIndexCache() );
+      rowHandle := rowIndexTree.GetHandle( element );
+      rows.Add( row );
+      rowIndexTree.Root().AddChild( rowHandle,rows.Size() - 1 );
+    }
+    
+    traverse( shiftPlans,Elements,shiftPlan ){
+      rowKey := shiftPlan.UnitPeriodTime().Unit().ID();
+      row := rows.Element( rowIndexTree.Root().Child( rowIndexTree.GetHandle( rowKey )).GetValueAsNumber() );
+      
+      gongchangCell := LocalCell_Default::GetCell(  rowKey + "宸ュ巶", cellIndexTree, cells, row, column1 );
+      chanxianxCell := LocalCell_Default::GetCell(  rowKey + "浜х嚎", cellIndexTree, cells, row, column2 );
+      
+      shengchanCell := LocalCell_Default::GetCell(  rowKey + "鐢熶骇澶╂暟", cellIndexTree, cells, row, column3 );
+      jiabanCell := LocalCell_Default::GetCell(  rowKey + "鍔犵彮鏃堕暱", cellIndexTree, cells, row, column4 );
+      qiangongCell := LocalCell_Default::GetCell(  rowKey + "娆犲伐鏃堕暱", cellIndexTree, cells, row, column5 );
+      jiejiariCell := LocalCell_Default::GetCell(  rowKey + "鑺傚亣鏃ュ姞鐝椂闀�", cellIndexTree, cells, row, column6 );
+      
+      jiabanfeiCell := LocalCell_Default::GetCell(  rowKey + "鍔犵彮璐�", cellIndexTree, cells, row, column7 );
+      qiangongfeiCell := LocalCell_Default::GetCell(  rowKey + "娆犲伐璐�", cellIndexTree, cells, row, column8 );
+      jiejiarifeiCell := LocalCell_Default::GetCell(  rowKey + "鑺傚亣鏃ュ姞鐝垂", cellIndexTree, cells, row, column9 );
+      
+      if( shiftPlan.Outcome() <> "" ){
+        
+      }else{
+        
+      }
+      
+    }
+  *]
+}
diff --git a/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl b/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
new file mode 100644
index 0000000..695ab4b
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_Default/_ROOT_Type_LocalCell_Default.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization LocalCell_Default
+{
+  #keys: '2[412672.1.5620864][412672.1.5620859]'
+  Parent: LocalCell
+  StructuredName: 'LocalCell_Defaults'
+}
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
index 4364350..d19420b 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_AsyncExport.qbl
@@ -3,7 +3,8 @@
 StaticMethod AsyncExport (
   RecycleBin recycleBin,
   const constcontent LocalRows rows,
-  const constcontent LocalColumns columns
+  const constcontent LocalColumns columns,
+  const MacroPlan macroPlan
 )
 {
   TextBody:
@@ -17,15 +18,15 @@
     flag := true;
     traverse( sortColumns,Elements,sortColumn ){
       if( flag ){
-        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute" );
+        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
         columnstring := columnstring.Merge( attributeXML )
         flag := false;
       }
       
-      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data");
+      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
       columnstring := columnstring.Merge( cellxml);
     }
      
-    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin );
+    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
   *]
 }
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
index d7d8942..3c0055a 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_Compared.qbl
@@ -3,13 +3,15 @@
 StaticMethod Compared (
   RecycleBin recycleBin,
   String baseVersionPath,
-  String compareVersionPath
+  String compareVersionPath,
+  String baseVersionName,
+  String compareVersionName
 ) as LocalTable
 {
   TextBody:
   [*
     // rislai Jun-20-2024 (created)
-    localTable := recycleBin.LocalTable( relnew,Name := baseVersionPath + "__" + compareVersionPath);
+    localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
     
     baseVersionFile := OSFile::Construct();
     compareVersionFile := OSFile::Construct();
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl
index c766db0..1072935 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetAttributeNames.qbl
@@ -7,8 +7,6 @@
     // rislai Jun-21-2024 (created)
     attributeNames := construct( Strings );
     
-    attributeNames.Add( "BaseVersionValue" );
-    attributeNames.Add( "CompareVersionValue" );
     attributeNames.Add( "BaseVersion" );
     attributeNames.Add( "CompareVersion" );
     attributeNames.Add( "Gap" );
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetColumnXML.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetColumnXML.qbl
index 308ed41..6d45dc4 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetColumnXML.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GetColumnXML.qbl
@@ -4,7 +4,8 @@
   const constcontent LocalRows rows,
   const LocalColumn column,
   const Strings attributeNames,
-  String type
+  String type,
+  const MacroPlan macroPlan
 ) const as String
 {
   TextBody:
@@ -30,6 +31,11 @@
       columnXML := columnXML + "</column>";
     }
     if( type = "attribute" ){
+      columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
+      columnXML0_2 := "<column><name>Generation</name><type>String</type>";
+      columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
+      columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
+      
       columnXML1 := "<column><name>Product ID</name><type>String</type>";
       columnXML2 := "<column><name>Attribute</name><type>String</type>";
       
@@ -39,16 +45,51 @@
           if( flag ){
             cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
             columnXML1 := columnXML1 + cellXML;
+            
+            salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "浜у湴");
+            if( not isnull( salesSegment )){
+              cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "绌�",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
+              columnXML0_1 := columnXML0_1 + cellXML0_1;
+            }else{
+              cellXML0_1 := '<cell value="  "/>'
+              columnXML0_1 := columnXML0_1 + cellXML0_1;
+            }
+            
+            product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
+            if( not isnull( product )){
+              cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
+              cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
+              cellXML0_4 := '<cell value="' + product.Power() + '"/>';
+              columnXML0_2 := columnXML0_2 + cellXML0_2;
+              columnXML0_3 := columnXML0_3 + cellXML0_3;
+              columnXML0_4 := columnXML0_4 + cellXML0_4;
+            }else{
+              cellXML0_2 := '<cell value="  "/>';
+              cellXML0_3 := '<cell value="  "/>';
+              cellXML0_4 := '<cell value="  "/>';
+              columnXML0_2 := columnXML0_2 + cellXML0_2;
+              columnXML0_3 := columnXML0_3 + cellXML0_3;
+              columnXML0_4 := columnXML0_4 + cellXML0_4;
+            }
+            
             flag := false;
           }else{
             cellXML := '<cell value="  "/>'
             columnXML1 := columnXML1 + cellXML;
+            cellXML0_1 := '<cell value="  "/>'
+            cellXML0_2 := '<cell value="  "/>';
+            cellXML0_3 := '<cell value="  "/>';
+            cellXML0_4 := '<cell value="  "/>';
+            columnXML0_1 := columnXML0_1 + cellXML0_1;
+            columnXML0_2 := columnXML0_2 + cellXML0_2;
+            columnXML0_3 := columnXML0_3 + cellXML0_3;
+            columnXML0_4 := columnXML0_4 + cellXML0_4;
           }
           cellXML := '<cell value="' + e + '"/>'
           columnXML2 := columnXML2 + cellXML;
         }
       }
-      columnXML := columnXML1 + "</column>" + columnXML2 + "</column>";
+      columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
     }
      
     return columnXML;
diff --git a/_Main/BL/Type_LocalColumn/Attribute_Date.qbl b/_Main/BL/Type_LocalColumn/Attribute_Date.qbl
new file mode 100644
index 0000000..9b0c643
--- /dev/null
+++ b/_Main/BL/Type_LocalColumn/Attribute_Date.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Date
+{
+  #keys: '3[412672.0.1120948156][412672.0.1120948155][412672.0.1120948157]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl b/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl
new file mode 100644
index 0000000..2e99838
--- /dev/null
+++ b/_Main/BL/Type_LocalColumn/Function_CalcDate.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcDate
+{
+  TextBody:
+  [*
+    // rislai Jun-28-2024 (created)
+    if( not this.IsAttrbuteColumn() ){
+      names := this.Name().Tokenize( "/" );
+      this.Date( guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() ));
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl b/_Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl
new file mode 100644
index 0000000..59d8880
--- /dev/null
+++ b/_Main/BL/Type_MacroPlan/Attribute_StandardWorkingDay.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StandardWorkingDay
+{
+  #keys: '3[412672.1.2880078][412672.1.2880077][412672.1.2880079]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl b/_Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl
new file mode 100644
index 0000000..d75b63e
--- /dev/null
+++ b/_Main/BL/Type_OvertimeMultiplier/Attribute_Multiplier.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Multiplier
+{
+  #keys: '3[412672.1.2880116][412672.1.2880115][412672.1.2880117]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl b/_Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl
new file mode 100644
index 0000000..be45e57
--- /dev/null
+++ b/_Main/BL/Type_OvertimeMultiplier/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[412672.1.2880106][412672.1.2880105][412672.1.2880107]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl b/_Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl
new file mode 100644
index 0000000..613e4bb
--- /dev/null
+++ b/_Main/BL/Type_OvertimeMultiplier/_ROOT_Type_OvertimeMultiplier.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type OvertimeMultiplier
+{
+  #keys: '5[412672.1.2880089][412672.1.2880087][0.0.0][412672.1.2880088][412672.1.2880090]'
+  BaseType: Object
+  Description: 'OvertimeMultiplier'
+  StructuredName: 'OvertimeMultipliers'
+}
diff --git "a/_Main/BL/Type_ProductInStockingPointInPeriod\043228/_ROOT_Type_ProductInStockingPointInPeriod.qbl" "b/_Main/BL/Type_ProductInStockingPointInPeriod\043228/_ROOT_Type_ProductInStockingPointInPeriod.qbl"
new file mode 100644
index 0000000..48d9cd9
--- /dev/null
+++ "b/_Main/BL/Type_ProductInStockingPointInPeriod\043228/_ROOT_Type_ProductInStockingPointInPeriod.qbl"
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ProductInStockingPointInPeriod #extension
+{
+}
diff --git a/_Main/BL/Type_Test/StaticMethod_Test.qbl b/_Main/BL/Type_Test/StaticMethod_Test.qbl
index 9d0c69d..cc86dfc 100644
--- a/_Main/BL/Type_Test/StaticMethod_Test.qbl
+++ b/_Main/BL/Type_Test/StaticMethod_Test.qbl
@@ -9,25 +9,8 @@
 {
   TextBody:
   [*
-    // rislai Jun-9-2024 (created)
-    archive.ArchivePR( relnew,Name := "PR72.SP_20240604_VWED.xlsx",FilePath := "C:\Excel\PR72.SP_20240604_VWED.xlsx");
-    
-    archive.ArchivePR( relnew,Name := "PR72.SP_20240605_VWED.xlsx",FilePath := "C:\Excel\PR72.SP_20240605_VWED.xlsx");
-    
-    
-    //testTree := NamedValueTree::Create();
-    //
-    //testTreeHandel := testTree.GetHandle( "test1" );
-    //testTreeHandel2 := testTree.GetHandle( "test2" );
-    //
-    //testTree.Root().AddChild( testTreeHandel,1 );
-    //
-    //info( testTree.Root().Child( testTreeHandel ).GetValueAsNumber() );
-    //try{
-    //  info( testTree.Root().Child( testTreeHandel2 ).GetValueAsNumber() ); 
-    //}onerror{
-    //  testTree.Root().AddChild( testTreeHandel,2 );
-    //}
-    //info( testTree.Root().Child( testTreeHandel ).GetValueAsNumber() );
+    name := "2020/04/01";
+    names := name.Tokenize( "/" );
+      info( guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() ));
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
index 645df5f..a8a3635 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDataViews.def
@@ -10,5 +10,12 @@
         #child: ContextMenuCapacities
       ]
     }
+    Component ButtonDataFinances #extension
+    {
+      Children:
+      [
+        #child: ContextMenuFinances
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index 10df23f..ab55c75 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -16,6 +16,39 @@
         Taborder: 0
       ]
     }
+    Component ButtonFinancialSalesReport
+    {
+      #keys: '[415136.0.861863635]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'MONEY_COINS2'
+        Label: 'Financial sales report'
+        Taborder: 1
+      ]
+    }
+    Component ButtonInventorySummaryReport
+    {
+      #keys: '[415136.0.862201699]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOCUMENT_CHECK_EDIT'
+        Label: 'Inventory summary report'
+        Taborder: 2
+      ]
+    }
+    Component ButtonFinancialWeeklyReport
+    {
+      #keys: '[415136.0.882254645]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DOCUMENT_DIRTY'
+        Label: 'Financial weekly report'
+        Taborder: 3
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def
new file mode 100644
index 0000000..bcde51c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuFinances.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ContextMenuFinances #extension
+{
+  Children:
+  [
+    Component MenuLaborCost
+    {
+      #keys: '[412672.1.7721142]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'MONEY_BILL_FIRE'
+        Taborder: 6
+        Title: 'Labor cost'
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def
new file mode 100644
index 0000000..117f477
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClic.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonFinancialSalesReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialSalesReport_OnClick
+{
+  #keys: '[415136.0.861863801]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Financial_sales_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialWeeklyReport_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialWeeklyReport_OnCli.def
new file mode 100644
index 0000000..980aac3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialWeeklyReport_OnCli.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonFinancialWeeklyReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonFinancialWeeklyReport_OnClick
+{
+  #keys: '[415136.0.882254805]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Financial_weekly_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonInventorySummaryReport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonInventorySummaryReport_OnCl.def
new file mode 100644
index 0000000..616a1fb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonInventorySummaryReport_OnCl.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonInventorySummaryReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonInventorySummaryReport_OnClick
+{
+  #keys: '[415136.0.862201823]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Inventory_summary_report_view", true);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def
new file mode 100644
index 0000000..f7b67bb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ContextMenuFinances/MenuLaborCost
+Response OnClick () id:Response_MacroPlanner_ContextMenuFinances_MenuLaborCost_OnClick
+{
+  #keys: '[412672.1.7721201]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      // Open view
+      ApplicationMacroPlanner.OpenView( 'Labor_Costs', ButtonDataFinances );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def
new file mode 100644
index 0000000..2b90952
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlActions.def
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+Component pnlActions
+{
+  #keys: '[412672.1.7045777]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component btnOk
+    {
+      #keys: '[412672.1.7045781]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'OK'
+        Taborder: 0
+      ]
+    }
+    Component btnCancel
+    {
+      #keys: '[412672.1.7045783]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: 'Cancel'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    Border: true
+    ExcludeFromActiveComponent: true
+    FixedSize: true
+    Orientation: 'horizontal'
+    Padding: 'true'
+    Style: 'footer'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def
new file mode 100644
index 0000000..6efd64a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlContent.def
@@ -0,0 +1,121 @@
+Quintiq file version 2.0
+Component pnlContent
+{
+  #keys: '[412672.1.7045775]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhEmployeeCost
+    {
+      #keys: '[412672.1.7045839]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[EmployeeCost]*'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component ddlEmployeeType
+    {
+      #keys: '[412672.1.6911529]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'EmployeeType'
+      Children:
+      [
+        Component deContent
+        {
+          #keys: '[412672.1.6911531]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'EmployeeType'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.EmployeeType'
+        DisplayField: 'Name'
+        Label: '浜哄憳绫诲瀷'
+        Taborder: 1
+      ]
+    }
+    Component npEmployeeNumber
+    {
+      #keys: '[412672.1.6911553]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.EmployeeNumber'
+        Label: '浜烘暟'
+        Taborder: 2
+      ]
+    }
+    Component dsStartDate
+    {
+      #keys: '[412672.1.6911583]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.StartDate'
+        Label: '寮�濮嬫椂闂�'
+        Taborder: 5
+      ]
+    }
+    Component efStandardWorkingDay
+    {
+      #keys: '[412672.1.7276727]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'MacroPlan.StandardWorkingDay'
+        Enabled: false
+        Label: '鏍囧噯宸ヤ綔澶╂暟'
+        Taborder: 7
+      ]
+    }
+    Component efTimeUnit
+    {
+      #keys: '[412672.1.7276817]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.TimeUnit'
+        Enabled: false
+        Label: '鏍囧噯鏃堕棿鍗曞厓'
+        Taborder: 6
+        Text: '鏈�'
+      ]
+    }
+    Component npBaseSalary
+    {
+      #keys: '[412672.1.7343332]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.BaseSalary'
+        Label: '鍩烘湰宸ヨ祫'
+        Taborder: 8
+      ]
+    }
+    #child: pnlUnit
+    Component lblUnit
+    {
+      #keys: '[412672.1.7796497]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        DataBinding: 'ddlUnit.Data.ID'
+        Taborder: 4
+      ]
+    }
+  ]
+  Properties:
+  [
+    Padding: 'true'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def
new file mode 100644
index 0000000..7078ef4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Component_pnlUnit.def
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+Component pnlUnit
+{
+  #keys: '[412672.1.7514476]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddlUnit id:ddlUnit_608
+    {
+      #keys: '[412672.1.7514540]'
+      BaseType: 'WebDropDownList'
+      Databinding: 'Unit'
+      Children:
+      [
+        Component deContent655 id:deContent655_364
+        {
+          #keys: '[412672.1.7514541]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Entity]'
+            Source: 'ApplicationMacroPlanner.DataHolderEntities'
+            Taborder: 0
+            Transformation: 'Elements.astype(Unit)'
+          ]
+        }
+      ]
+      Properties:
+      [
+        DataBinding: 'dhEmployeeCost.Data.Unit'
+        DisplayField: 'ID'
+        Enabled: false
+        Label: '浜х嚎'
+        Taborder: 0
+      ]
+    }
+    Component Button671 id:Button671_325
+    {
+      #keys: '[412672.1.7514568]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LOCK'
+        Taborder: 1
+      ]
+    }
+    Component cbUnit
+    {
+      #keys: '[412672.1.7578755]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Taborder: 2
+        Visible: false
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def
new file mode 100644
index 0000000..ea59274
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_Edit.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+Method Edit (
+  EmployeeCost data
+) id:Method_DialogEditEmployeeCost_Edit
+{
+  #keys: '[412672.1.7420837]'
+  Body:
+  [*
+    dhEmployeeCost.Data( shadow(data));
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def
new file mode 100644
index 0000000..7d2d977
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Method_New.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+Method New () id:Method_DialogEditEmployeeCost_New
+{
+  #keys: '[412672.1.7277241]'
+  Body:
+  [*
+    ddlEmployeeType.Enabled( false,"" );
+    npEmployeeNumber.Enabled( false,"" );
+    dsStartDate.Enabled( false,"" );
+    npBaseSalary.Enabled( false,"" );
+    
+    ddlUnit.Enabled( true,"" );
+    cbUnit.Checked( true );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def
new file mode 100644
index 0000000..06d3ffd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnCancel_OnClick.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnCancel
+Response OnClick () id:Response_pnlActions_btnCancel_OnClick
+{
+  #keys: '[412672.1.7045787]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.Close();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def
new file mode 100644
index 0000000..ecf51c3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlActions_btnOk_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: pnlActions/btnOk
+Response OnClick () id:Response_pnlActions_btnOk_OnClick
+{
+  #keys: '[412672.1.7045786]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      Form.ApplyChanges();
+      dhEmployeeCost.Data().Commit();
+      Form.Close();
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick\043570.def" "b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick\043570.def"
new file mode 100644
index 0000000..19806d3
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/Response_pnlUnit_Button671_OnClick\043570.def"
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: pnlUnit/Button671_325
+Response OnClick () id:Response_PanelStandardWorkingDay_Button671_OnClick_570
+{
+  #keys: '[412672.1.7514567]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    return cbUnit.Checked();
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      this.Image( "LOCK" );
+      ddlEmployeeType.Enabled( true,"" );
+      npEmployeeNumber.Enabled( true,"" );
+      dsStartDate.Enabled( true,"" );
+      npBaseSalary.Enabled( true,"" );
+      
+      ddlUnit.Enabled( false,"" );
+      cbUnit.Checked( false );
+      
+      unit := ddlUnit.Data();
+      dhEmployeeCost.Data( unit.EmployeeCost( relshadow ));
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def
new file mode 100644
index 0000000..407d633
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogEditEmployeeCost/_ROOT_Component_DialogEditEmployeeCost.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent DialogEditEmployeeCost
+{
+  #keys: '[412672.1.7045773]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: pnlContent
+    #child: pnlActions
+  ]
+  Properties:
+  [
+    Alignment: 'trailing'
+    EnterButton: 'btnOk'
+    EscapeButton: 'btnCancel'
+    ExcludeFromActiveComponent: true
+    Padding: 'false'
+    Title: 'Edit'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def
index e22590b..df39242 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_MatrixEditor.def
@@ -26,7 +26,7 @@
       ]
       Properties:
       [
-        Attributes: 'BaseVersionValue;CompareVersionValue;BaseVersion;CompareVersion;Gap'
+        Attributes: 'BaseVersion;CompareVersion;Gap'
         Column: 'LocalColumn'
         Row: 'LocalRow'
         Taborder: 0
@@ -45,6 +45,8 @@
           Properties:
           [
             DataType: 'LocalTable'
+            FilterArguments: 'checkedProduct:QMacroPlanner::FormDemandComparison.dhFinelProduct'
+            FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
             Source: 'dhComparisonData'
             Taborder: 0
             Transformation: 'LocalRow'
@@ -71,6 +73,8 @@
           Properties:
           [
             DataType: 'LocalTable'
+            FilterArguments: 'startDate:QMacroPlanner::FormDemandComparison.dhStartDate;endDate:QMacroPlanner::FormDemandComparison.dhEndDate'
+            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date()'
             Source: 'dhComparisonData'
             Taborder: 0
             Transformation: 'LocalColumn'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def
index c3618ae..e6b3648 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison.def
@@ -16,6 +16,66 @@
         Taborder: 1
       ]
     }
+    Component dhCheckedProduct
+    {
+      #keys: '[412672.0.1121211408]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Product_MP]*'
+      Children:
+      [
+        Component deCheckedProduct
+        {
+          #keys: '[412672.0.1121633584]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[Product_MP]'
+            Source: 'ApplicationMacroPlanner.DataHolderCheckedProduct'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component dhFinelProduct
+    {
+      #keys: '[412672.0.1121876690]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[Product_MP]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component dhCheckedSalesSegment
+    {
+      #keys: '[412672.0.1122338152]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[SalesSegment_MP]*'
+      Children:
+      [
+        Component deCheckedSalesSegment
+        {
+          #keys: '[412672.0.1122072068]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'structured[SalesSegment_MP]'
+            Source: 'ApplicationMacroPlanner.DataHolderCheckedSalesSegment'
+            Taborder: 0
+            Transformation: 'Elements'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def
index b962093..d5ae537 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelDemandComparison294.def
@@ -7,6 +7,7 @@
   [
     #child: PanelSelection
     #child: PanelOperation_568
+    #child: PanelFilter
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def
new file mode 100644
index 0000000..939065e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelFilter.def
@@ -0,0 +1,96 @@
+Quintiq file version 2.0
+Component PanelFilter
+{
+  #keys: '[412672.0.1119852113]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[412672.0.1119852174]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+    Component ddslMQBMLB
+    {
+      #keys: '[412672.0.1119852186]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 1
+      ]
+    }
+    Component ddslPower
+    {
+      #keys: '[412672.0.1119852198]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '鍔熺巼'
+        Taborder: 2
+      ]
+    }
+    Component dsStartDate
+    {
+      #keys: '[412672.0.1119852248]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start Date'
+        Taborder: 3
+      ]
+    }
+    Component dsEndDate
+    {
+      #keys: '[412672.0.1119852261]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 9999-12-31
+        Label: 'End Date'
+        Taborder: 5
+      ]
+    }
+    Component ButtonFilter
+    {
+      #keys: '[412672.0.1121729150]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '杩囨护'
+        Taborder: 7
+      ]
+    }
+    Component dhStartDate
+    {
+      #keys: '[412672.0.1122339350]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Date*'
+      Properties:
+      [
+        Taborder: 4
+      ]
+    }
+    Component dhEndDate
+    {
+      #keys: '[412672.0.1122339363]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Date*'
+      Properties:
+      [
+        Taborder: 6
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def"
index cfb9153..f54864f 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_PanelOperation\043568.def"
@@ -12,47 +12,7 @@
       Properties:
       [
         Label: '寮�濮嬪姣�'
-        Taborder: 4
-      ]
-    }
-    Component efBaseVersion
-    {
-      #keys: '[412672.0.1111643258]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '鍩哄噯闇�姹傜増鏈細'
-        Taborder: 0
-      ]
-    }
-    Component efCompareVersion
-    {
-      #keys: '[412672.0.1111643271]'
-      BaseType: 'WebEditField'
-      Properties:
-      [
-        Label: '瀵规瘮闇�姹傜増鏈細'
-        Taborder: 2
-      ]
-    }
-    Component dhCompareVersionPath
-    {
-      #keys: '[412672.0.1111643374]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'String*'
-      Properties:
-      [
         Taborder: 3
-      ]
-    }
-    Component dhBaseVersionPath
-    {
-      #keys: '[412672.0.1111643396]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'String*'
-      Properties:
-      [
-        Taborder: 1
       ]
     }
     Component dhXMLDataListener id:dhXMLDataListener_906
@@ -78,7 +38,7 @@
       ]
       Properties:
       [
-        Taborder: 7
+        Taborder: 2
       ]
     }
     Component bExport id:bExport_98
@@ -89,7 +49,7 @@
       [
         Image: 'EXPORT1'
         Label: '瀵煎嚭'
-        Taborder: 5
+        Taborder: 0
       ]
     }
     Component bDownload id:bDownload_352
@@ -100,13 +60,14 @@
       [
         Image: 'DOWNLOAD'
         Label: '涓嬭浇'
-        Taborder: 6
+        Taborder: 1
       ]
     }
+    #child: pVersionInfomation
   ]
   Properties:
   [
     Orientation: 'horizontal'
-    Taborder: 1
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomation.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomation.def
new file mode 100644
index 0000000..9d0dfe9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Component_pVersionInfomation.def
@@ -0,0 +1,53 @@
+Quintiq file version 2.0
+Component pVersionInfomation
+{
+  #keys: '[412672.0.1119852729]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component dhBaseVersionPath id:dhBaseVersionPath_640
+    {
+      #keys: '[412672.0.1119852775]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component dhCompareVersionPath id:dhCompareVersionPath_582
+    {
+      #keys: '[412672.0.1119852802]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'String*'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+    Component lBaseVersionName
+    {
+      #keys: '[412672.0.1119853064]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鍩哄噯闇�姹傜増鏈細'
+        Taborder: 0
+      ]
+    }
+    Component lCompareVersionName
+    {
+      #keys: '[412672.0.1119853066]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '瀵规瘮闇�姹傜増鏈細'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedProduct_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedProduct_OnDataChanged.def
new file mode 100644
index 0000000..038f6f7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedProduct_OnDataChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison/dhCheckedProduct
+Response OnDataChanged () id:Response_PanelDemandComparison_dhCheckedProduct_OnDataChanged
+{
+  #keys: '[412672.0.1122118230]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( this.Data().Size() <> 0 ){
+        dhFinelProduct.Data( this.Data().Copy() ); 
+      }else{
+        dhFinelProduct.Data( DataHolderProduct.Data().Copy() ); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedSalesSegment_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedSalesSegment_OnDataChanged.def
new file mode 100644
index 0000000..1500156
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhCheckedSalesSegment_OnDataChanged.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison/dhCheckedSalesSegment
+Response OnDataChanged () id:Response_PanelDemandComparison_dhCheckedSalesSegment_OnDataChanged
+{
+  #keys: '[412672.0.1122600939]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( this.Data().Size() <> 0 ){
+        prods := selectset( dhFinelProduct.Data(),Elements,element,exists( this.Data(),Elements.SalesDemand.Product_MP,prod,element = prod ));
+        dhFinelProduct.Data( &prods );
+      }else{
+        dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhFinelProduct_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhFinelProduct_OnCreated.def
new file mode 100644
index 0000000..306233c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelDemandComparison_dhFinelProduct_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison/dhFinelProduct
+Response OnCreated () id:Response_PanelDemandComparison_dhFinelProduct_OnCreated
+{
+  #keys: '[412672.0.1122081581]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( DataHolderProduct.Data().Copy() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def
new file mode 100644
index 0000000..f0b4966
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ButtonFilter_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelFilter/ButtonFilter
+Response OnClick () id:Response_PanelFilter_ButtonFilter_OnClick
+{
+  #keys: '[412672.0.1121729757]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      products := dhCheckedProduct.Data().Copy();
+      if( ddslGeneration.Text() <> "<All>" ){
+        products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
+      }
+      if( ddslMQBMLB.Text() <> "<All>" ){
+        products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
+      }
+      if( ddslPower.Text() <> "<All>" ){
+        products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
+      }
+      dhFinelProduct.Data( &products );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..e5c27fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslGeneration_OnCreated.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelFilter/ddslGeneration
+Response OnCreated () id:Response_PanelFilter_ddslGeneration_OnCreated
+{
+  #keys: '[412672.0.1121755350]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Generation() );
+      
+      res := strings.Concatenate( ";" );
+      
+      this.Strings( "<All>;" + res );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..209a4ce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelFilter/ddslMQBMLB
+Response OnCreated () id:Response_PanelFilter_ddslMQBMLB_OnCreated
+{
+  #keys: '[412672.0.1121815924]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.MQBMLB() );
+      
+      res := strings.Concatenate( ";" );
+      
+      this.Strings( "<All>;" + res );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslPower_OnCreated.def
new file mode 100644
index 0000000..e419a94
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_ddslPower_OnCreated.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelFilter/ddslPower
+Response OnCreated () id:Response_PanelFilter_ddslPower_OnCreated
+{
+  #keys: '[412672.0.1121816007]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Power() );
+      
+      res := strings.Concatenate( ";" );
+      
+      this.Strings( "<All>;" + res );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhEndDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhEndDate_OnCreated.def
new file mode 100644
index 0000000..23bc52c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhEndDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter/dhEndDate
+Response OnCreated () id:Response_PanelFilter_dhEndDate_OnCreated
+{
+  #keys: '[412672.0.1122841072]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( Date::MaxDate() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhStartDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhStartDate_OnCreated.def
new file mode 100644
index 0000000..d80fb7d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dhStartDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter/dhStartDate
+Response OnCreated () id:Response_PanelFilter_dhStartDate_OnCreated
+{
+  #keys: '[412672.0.1122841156]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data( Date::MinDate() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsEndDate_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsEndDate_OnChanged.def
new file mode 100644
index 0000000..0f579a8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsEndDate_OnChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter/dsEndDate
+Response OnChanged () id:Response_PanelFilter_dsEndDate_OnChanged
+{
+  #keys: '[412672.0.1122665296]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dhEndDate.Data( this.Date() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsStartDate_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsStartDate_OnChanged.def
new file mode 100644
index 0000000..eaa6855
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelFilter_dsStartDate_OnChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter/dsStartDate
+Response OnChanged () id:Response_PanelFilter_dsStartDate_OnChanged
+{
+  #keys: '[412672.0.1122665180]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dhStartDate.Data( this.Date() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
index e372ac2..76c486e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_ButtonCompare_OnClick.def
@@ -10,7 +10,7 @@
     Body:
     [*
       
-      table := LocalCell_DemandComparison::Compared( RecycleBin,dhBaseVersionPath.Data(),dhCompareVersionPath.Data() );
+      table := LocalCell_DemandComparison::Compared( RecycleBin,dhBaseVersionPath.Data(),dhCompareVersionPath.Data(),lBaseVersionName.Text(),lCompareVersionName.Text() );
       dhComparisonData.Data( table );
     *]
     GroupServerCalls: false
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def"
index 585ba3c..7d10d9a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_PanelOperation_568_bExport_OnClick\043723.def"
@@ -9,9 +9,9 @@
   {
     Body:
     [*
-      rows := selectset( dhComparisonData.Data(),LocalRow,row,true );
-      columns := selectset( dhComparisonData.Data( ),LocalColumn,column,true );
-      LocalCell_DemandComparison::AsyncExport( RecycleBin, rows, columns );
+      rows := selectset( dhComparisonData.Data(),LocalRow,row,exists( dhFinelProduct.Data(),Elements,product,product.ID() = row.Name() ) );
+      columns := selectset( dhComparisonData.Data( ),LocalColumn,column,not column.IsAttrbuteColumn() and dhStartDate.Data() <= column.Date() and dhEndDate.Data() > column.Date() );
+      LocalCell_DemandComparison::AsyncExport( RecycleBin, rows, columns ,MacroPlan );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def
index 8cfbed8..69e9ffc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListBaseVersionBudget_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       dhBaseVersionPR.Data( selection );
       this.Tooltip( selection.Name() );
-      efBaseVersion.Text( selection.Name() );
+      lBaseVersionName.Text( selection.Name() );
       dhBaseVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def
index 2a0e750..7c66484 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionBudget_DropDownListCompareVersionBudget_OnSelectionChange.def
@@ -14,7 +14,7 @@
     [*
       this.Tooltip( selection.Name() );
       
-      efCompareVersion.Text( selection.Name() );
+      lCompareVersionName.Text( selection.Name() );
       dhCompareVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def
index a220cc2..7023788 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListBaseVersionCurve_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       dhBaseVersionPR.Data( selection );
       this.Tooltip( selection.Name() );
-      efBaseVersion.Text( selection.Name() );
+      lBaseVersionName.Text( selection.Name() );
       dhBaseVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def
index a427350..15c0069 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionCurve_DropDownListCompareVersionCurve_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       this.Tooltip( selection.Name() );
       
-      efCompareVersion.Text( selection.Name() );
+      lCompareVersionName.Text( selection.Name() );
       dhCompareVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def
index 5500771..0f02dcb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DataExtractorOperationIDS_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       this.Tooltip( selection.Name() );
       
-      efCompareVersion.Text( selection.Name() );
+      lCompareVersionName.Text( selection.Name() );
       dhCompareVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def
index d5d74b3..e073306 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionIDS_DropDownListBaseVersionIDS_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       dhBaseVersionPR.Data( selection );
       this.Tooltip( selection.Name() );
-      efBaseVersion.Text( selection.Name() );
+      lBaseVersionName.Text( selection.Name() );
       dhBaseVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def
index 3962e2c..16667cd 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListBaseVersionPPA_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       dhBaseVersionPR.Data( selection );
       this.Tooltip( selection.Name() );
-      efBaseVersion.Text( selection.Name() );
+      lBaseVersionName.Text( selection.Name() );
       dhBaseVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def
index eb49f2b..edd14ce 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPPA_DropDownListCompareVersionPPA_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       this.Tooltip( selection.Name() );
       
-      efCompareVersion.Text( selection.Name() );
+      lCompareVersionName.Text( selection.Name() );
       dhCompareVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def
index ffcbefc..5c17713 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListBaseVersionPP_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       dhBaseVersionPR.Data( selection );
       this.Tooltip( selection.Name() );
-      efBaseVersion.Text( selection.Name() );
+      lBaseVersionName.Text( selection.Name() );
       dhBaseVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def
index d46fc20..8055aaf 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPP_DropDownListCompareVersionPP_OnSelectionChanged.def
@@ -14,7 +14,7 @@
     [*
       this.Tooltip( selection.Name() );
       
-      efCompareVersion.Text( selection.Name() );
+      lCompareVersionName.Text( selection.Name() );
       dhCompareVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged\04398.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged\04398.def"
index e477b8f..5a1fb6f 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged\04398.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListBaseVersionPR_OnSelectionChanged\04398.def"
@@ -14,7 +14,7 @@
     [*
       dhBaseVersionPR.Data( selection );
       this.Tooltip( selection.Name() );
-      efBaseVersion.Text( selection.Name() );
+      lBaseVersionName.Text( selection.Name() );
       dhBaseVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged\043599.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged\043599.def"
index 10a3e31..d5fe96a 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged\043599.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormDemandComparison/Response_pSelectionPR_DropDownListCompareVersionPR_OnSelectionChanged\043599.def"
@@ -14,7 +14,7 @@
     [*
       this.Tooltip( selection.Name() );
       
-      efCompareVersion.Text( selection.Name() );
+      lCompareVersionName.Text( selection.Name() );
       dhCompareVersionPath.Data( selection.FilePath() );
     *]
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost\043289.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost\043289.def"
new file mode 100644
index 0000000..365f711
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeCost\043289.def"
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListEmployeeCost
+{
+  #keys: '[412672.1.3030900]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor422
+    {
+      #keys: '[412672.1.3030901]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[Entity]'
+        Source: 'ApplicationMacroPlanner.DataHolderEntities'
+        Taborder: 0
+        Transformation: 'Elements.astype(Unit).EmployeeCost'
+      ]
+    }
+    #child: listActionBarPage216
+    Component DataSetLevel775
+    {
+      #keys: '[412672.1.3030906]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu383
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EmployeeType.Name","title":"浜哄憳绫诲埆","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EmployeeType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EmployeeNumber","title":"浜烘暟","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EmployeeNumber"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Unit.Name","title":"浜х嚎","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Unit.ID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TimeUnit","title":"鏃堕棿鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TimeUnit"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BaseSalary","title":"鍩烘湰宸ヨ祫","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BaseSalary"}}]'
+        ContextMenu: 'listContextMenu383'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListEmployeeCost_WebMenu_OnClick
+    {
+      #keys: '[412672.1.5813308]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[33.0.20370560]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def
new file mode 100644
index 0000000..ada4b10
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListEmployeeType.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListEmployeeType
+{
+  #keys: '[412672.1.3032264]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor670
+    {
+      #keys: '[412672.1.3032265]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'external[MacroPlan]'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'EmployeeType'
+      ]
+    }
+    #child: listActionBarPage989
+    Component DataSetLevel963
+    {
+      #keys: '[412672.1.3032270]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu191
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"浜哄憳绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}}]'
+        ContextMenu: 'listContextMenu191'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListEmployeeType_WebMenu_OnClick
+    {
+      #keys: '[412672.1.6984546]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[33.0.12092751]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def
new file mode 100644
index 0000000..d62d6a7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_ListOvertimeMultiplier.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListOvertimeMultiplier
+{
+  #keys: '[412672.1.3031897]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractor427
+    {
+      #keys: '[412672.1.3031898]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'OvertimeMultiplier'
+      ]
+    }
+    #child: listActionBarPage392
+    Component DataSetLevel613
+    {
+      #keys: '[412672.1.3031903]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenu134
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Multiplier","title":"鍊嶇巼","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Multiplier"}}]'
+        ContextMenu: 'listContextMenu134'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+    {
+      #keys: '[412672.1.3001707]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[29.0.12954279]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def
new file mode 100644
index 0000000..2a61687
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel189.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component Panel189
+{
+  #keys: '[412672.1.3030708]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelEmployeeCost
+    #child: Panel972
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def
new file mode 100644
index 0000000..5766ca0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel700.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component Panel700
+{
+  #keys: '[412672.1.3030760]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelEmployeeType
+    #child: PanelOvertimeMultiplier
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def
new file mode 100644
index 0000000..19e5ecb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_Panel972.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component Panel972
+{
+  #keys: '[412672.1.3030746]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: Panel700
+    #child: PanelStandardWorkingDay
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def
new file mode 100644
index 0000000..c4587fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelAction.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelAction
+{
+  #keys: '[412672.1.5890812]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonImport
+    {
+      #keys: '[412672.1.5890863]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 0
+      ]
+    }
+    Component ButtonExport1
+    {
+      #keys: '[412672.1.5890876]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def
new file mode 100644
index 0000000..a47b227
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelActions
+{
+  #keys: '[412672.1.3091200]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonOK id:ButtonOK_780
+    {
+      #keys: '[412672.1.3091238]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CHECK2'
+        Taborder: 0
+      ]
+    }
+    Component ButtonCalcel
+    {
+      #keys: '[412672.1.3091262]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def
new file mode 100644
index 0000000..7578258
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelActions526.def
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelActions526
+{
+  #keys: '[412672.1.6984289]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonOK338
+    {
+      #keys: '[412672.1.6984290]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'CHECK2'
+        Taborder: 0
+      ]
+    }
+    Component ButtonCalcel267
+    {
+      #keys: '[412672.1.6984291]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def
new file mode 100644
index 0000000..03a43fd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditEmployeeType.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component PanelEditEmployeeType
+{
+  #keys: '[412672.1.6984140]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component EditFieldEditEmployeeType
+    {
+      #keys: '[412672.1.6984180]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEditEmployeeType.Data.Name'
+        Label: '浜哄憳绫诲瀷'
+        Taborder: 0
+      ]
+    }
+    #child: PanelActions526
+    Component dhEditEmployeeType
+    {
+      #keys: '[412672.1.6984295]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[EmployeeType]*'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+    Visible: false
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def
new file mode 100644
index 0000000..93087e3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEditOvertimeMultiplier.def
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+Component PanelEditOvertimeMultiplier
+{
+  #keys: '[412672.1.3001087]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component EditFieldEditOvertimeMultiplier
+    {
+      #keys: '[412672.1.3001163]'
+      BaseType: 'WebEditField'
+      Properties:
+      [
+        DataBinding: 'dhEditOvertimeMultiplier.Data.Name'
+        Label: '鍚嶇О'
+        Taborder: 0
+      ]
+    }
+    Component NumberPickerEditOvertimeMultiplier
+    {
+      #keys: '[412672.1.3001177]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'dhEditOvertimeMultiplier.Data.Multiplier'
+        Label: '鍊嶇巼'
+        Taborder: 1
+      ]
+    }
+    Component dhEditOvertimeMultiplier
+    {
+      #keys: '[412672.1.3001190]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'shadow[OvertimeMultiplier]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    #child: PanelActions
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 0
+    Visible: false
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost\043154.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost\043154.def"
new file mode 100644
index 0000000..9049624
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeCost\043154.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelEmployeeCost
+{
+  #keys: '[412672.1.3030727]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListEmployeeCost
+    #child: PanelAction
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '浜哄憳鎴愭湰'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def
new file mode 100644
index 0000000..7062b6b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelEmployeeType.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelEmployeeType
+{
+  #keys: '[412672.1.3030869]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListEmployeeType
+    #child: PanelEditEmployeeType
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '浜哄憳绫诲瀷'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def
new file mode 100644
index 0000000..92ff091
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelOvertimeMultiplier.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelOvertimeMultiplier
+{
+  #keys: '[412672.1.3030850]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOvertimeMultiplier
+    #child: PanelEditOvertimeMultiplier
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '鍔犵彮鍊嶇巼'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay\043687.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay\043687.def"
new file mode 100644
index 0000000..2579c92
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_PanelStandardWorkingDay\043687.def"
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component PanelStandardWorkingDay
+{
+  #keys: '[412672.1.3030780]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component NumberPicker287
+    {
+      #keys: '[412672.1.3032925]'
+      BaseType: 'WebNumberPicker'
+      Properties:
+      [
+        DataBinding: 'MacroPlan.StandardWorkingDay'
+        Enabled: false
+        Label: '鏍囧噯宸ヤ綔澶╂暟'
+        Taborder: 0
+      ]
+    }
+    Component Button671
+    {
+      #keys: '[412672.1.3032980]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'LOCK'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+    Title: '鏍囧噯宸ヤ綔澶╂暟'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def
new file mode 100644
index 0000000..c2e4e9e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage216.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage216
+{
+  #keys: '[412672.1.3030903]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def
new file mode 100644
index 0000000..92a7603
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage392.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage392
+{
+  #keys: '[412672.1.3031900]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def
new file mode 100644
index 0000000..41a39cf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listActionBarPage989.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPage989
+{
+  #keys: '[412672.1.3032267]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def
new file mode 100644
index 0000000..f4dabca
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu134.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenu134
+{
+  #keys: '[412672.1.3031905]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuCreate
+    {
+      #keys: '[412672.1.3001739]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit
+    {
+      #keys: '[412672.1.3001760]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit...'
+      ]
+    }
+    Component MenuDelete
+    {
+      #keys: '[412672.1.3001781]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete...'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def
new file mode 100644
index 0000000..7089752
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu191.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenu191
+{
+  #keys: '[412672.1.3032272]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuCreate583
+    {
+      #keys: '[412672.1.6984223]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit782
+    {
+      #keys: '[412672.1.6984249]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit...'
+      ]
+    }
+    Component MenuDelete195
+    {
+      #keys: '[412672.1.6984266]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete...'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def
new file mode 100644
index 0000000..7be6098
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Component_listContextMenu383.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component listContextMenu383
+{
+  #keys: '[412672.1.3030908]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuDelete300
+    {
+      #keys: '[412672.1.5813289]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DELETE'
+        Taborder: 5
+        Title: 'Delete...'
+      ]
+    }
+    Component MenuCreate187
+    {
+      #keys: '[412672.1.7546519]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'ADD2'
+        Taborder: 3
+        Title: 'Create...'
+      ]
+    }
+    Component MenuEdit854
+    {
+      #keys: '[412672.1.7546633]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PENCIL'
+        Taborder: 4
+        Title: 'Edit...'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def
new file mode 100644
index 0000000..c552df2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuCreate187_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnClick () id:Response_ListEmployeeCost_MenuCreate187_OnClick
+{
+  #keys: '[412672.1.7546539]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeCost/Responsedef_ListEmployeeCost_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuCreate187'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditEmployeeCost );
+      dlg.New();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def
new file mode 100644
index 0000000..3052e54
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuDelete300_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnClick (
+  structured[EmployeeCost] selection
+) id:Response_ListEmployeeCost_MenuDelete300_OnClick
+{
+  #keys: '[412672.1.5802665]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeCost/Responsedef_ListEmployeeCost_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete300'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection,Elements,element ){
+        element.Delete(); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def
new file mode 100644
index 0000000..a7d56c0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_MenuEdit854_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnClick (
+  EmployeeCost selection
+) id:Response_ListEmployeeCost_MenuEdit854_OnClick
+{
+  #keys: '[412672.1.7546659]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeCost/Responsedef_ListEmployeeCost_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit854'
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditEmployeeCost );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def
new file mode 100644
index 0000000..18a4cd7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeCost_OnDoubleClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListEmployeeCost
+Response OnDoubleClick (
+  EmployeeCost selection
+) id:Response_ListEmployeeCost_OnDoubleClick
+{
+  #keys: '[412672.1.7422359]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnDoubleClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      dlg := construct( DialogEditEmployeeCost );
+      dlg.Edit( selection );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def
new file mode 100644
index 0000000..5ce7c23
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuCreate583_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListEmployeeType
+Response OnClick () id:Response_ListEmployeeType_MenuCreate583_OnClick
+{
+  #keys: '[412672.1.6984709]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeType/Responsedef_ListEmployeeType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuCreate583'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditEmployeeType.Visible( true );
+      dhEditEmployeeType.Data( MacroPlan.EmployeeType( relshadow ));
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def
new file mode 100644
index 0000000..f28554c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuDelete195_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListEmployeeType
+Response OnClick (
+  structured[EmployeeType] selection
+) id:Response_ListEmployeeType_MenuDelete195_OnClick
+{
+  #keys: '[412672.1.6984976]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeType/Responsedef_ListEmployeeType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete195'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection,Elements,element ){
+        element.Delete(); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def
new file mode 100644
index 0000000..5d53dc0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListEmployeeType_MenuEdit782_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListEmployeeType
+Response OnClick (
+  EmployeeType selection
+) id:Response_ListEmployeeType_MenuEdit782_OnClick
+{
+  #keys: '[412672.1.6984805]'
+  CanBindMultiple: false
+  DefinitionID => /ListEmployeeType/Responsedef_ListEmployeeType_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit782'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditEmployeeType.Visible( true );
+      dhEditEmployeeType.Data( shadow(selection) );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def
new file mode 100644
index 0000000..9324150
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuCreate_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListOvertimeMultiplier
+Response OnClick () id:Response_ListOvertimeMultiplier_MenuCreate_OnClick
+{
+  #keys: '[412672.1.3002215]'
+  CanBindMultiple: false
+  DefinitionID => /ListOvertimeMultiplier/Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuCreate'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditOvertimeMultiplier.Visible( true );
+      
+      
+      dhEditOvertimeMultiplier.Data( MacroPlan.OvertimeMultiplier( relshadow ) );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def
new file mode 100644
index 0000000..7426826
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuDelete_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: ListOvertimeMultiplier
+Response OnClick (
+  structured[OvertimeMultiplier] selection
+) id:Response_ListOvertimeMultiplier_MenuDelete_OnClick
+{
+  #keys: '[412672.1.3001913]'
+  CanBindMultiple: false
+  DefinitionID => /ListOvertimeMultiplier/Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuDelete'
+  QuillAction
+  {
+    Body:
+    [*
+      traverse( selection,Elements,element ){
+        element.Delete(); 
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def
new file mode 100644
index 0000000..2157065
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_ListOvertimeMultiplier_MenuEdit_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: ListOvertimeMultiplier
+Response OnClick (
+  OvertimeMultiplier selection
+) id:Response_ListOvertimeMultiplier_MenuEdit_OnClick
+{
+  #keys: '[412672.1.3002036]'
+  CanBindMultiple: false
+  DefinitionID => /ListOvertimeMultiplier/Responsedef_ListOvertimeMultiplier_WebMenu_OnClick
+  GroupServerCalls: true
+  Initiator: 'MenuEdit'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditOvertimeMultiplier.Visible( true );
+      dhEditOvertimeMultiplier.Data( shadow( selection ) );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def
new file mode 100644
index 0000000..11b82ee
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonExport1_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelAction/ButtonExport1
+Response OnClick () id:Response_PanelAction_ButtonExport1_OnClick
+{
+  #keys: '[412672.1.5850508]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      units := selectset( DataHolderEntities.Data(),Elements.astype( Unit ),unit,true );
+      binaryValue := EmployeeCost::Export( units );
+      Application.Download( "浜哄憳鎴愭湰_" + DateTime::Now().Format( "YM2D2H2mmss" ) + ".xlsx", binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def
new file mode 100644
index 0000000..b33958c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelAction_ButtonImport_OnClick.def
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: PanelAction/ButtonImport
+Response OnClick () id:Response_PanelAction_ButtonImport_OnClick
+{
+  #keys: '[412672.1.7045119]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          generalExcelImportAndExportDataSource := GeneralExcelImportAndExportDataSource::Upload( RecycleBin, webFileBinaryData, fileName );
+          generalExcelImportAndExportDataSource.ReadStructure();
+          
+          selection := select( generalExcelImportAndExportDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
+          
+          EmployeeCost::Import( MacroPlan, selection );
+          
+          // 鍚庣画鍒犻櫎
+          generalExcelImportAndExportDataSource.Delete();
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def
new file mode 100644
index 0000000..537b24a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonCalcel267_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelActions526/ButtonCalcel267
+Response OnClick () id:Response_PanelActions526_ButtonCalcel267_OnClick
+{
+  #keys: '[412672.1.6984287]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditEmployeeType.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def
new file mode 100644
index 0000000..b5fcee3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions526_ButtonOK338_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelActions526/ButtonOK338
+Response OnClick () id:Response_PanelActions526_ButtonOK338_OnClick
+{
+  #keys: '[412672.1.6984288]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhEditEmployeeType.Data())){
+        Form.ApplyChanges();
+        dhEditEmployeeType.Data().Commit();
+      }
+      PanelEditEmployeeType.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def
new file mode 100644
index 0000000..39c486a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonCalcel_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelActions/ButtonCalcel
+Response OnClick () id:Response_PanelActions_ButtonCalcel_OnClick
+{
+  #keys: '[412672.1.3091500]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      PanelEditOvertimeMultiplier.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def
new file mode 100644
index 0000000..98da954
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelActions_ButtonOK_OnClick.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelActions/ButtonOK_780
+Response OnClick () id:Response_PanelActions_ButtonOK_OnClick
+{
+  #keys: '[412672.1.3091237]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      if( not isnull( dhEditOvertimeMultiplier.Data())){
+        Form.ApplyChanges();
+        dhEditOvertimeMultiplier.Data().Commit();
+      }
+      PanelEditOvertimeMultiplier.Visible( false );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def
new file mode 100644
index 0000000..c61abf1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_Button671_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelStandardWorkingDay/Button671
+Response OnClick () id:Response_PanelStandardWorkingDay_Button671_OnClick
+{
+  #keys: '[412672.1.3033025]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      NumberPicker287.Enabled( not NumberPicker287.Enabled(),"" );
+      if( not NumberPicker287.Enabled() ){
+        this.Image( "LOCK" );
+      }else{
+        this.Image( "LOCK_OPEN" );
+      }
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def
new file mode 100644
index 0000000..145c0aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/Response_PanelStandardWorkingDay_NumberPicker287_OnChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelStandardWorkingDay/NumberPicker287
+Response OnChanged () id:Response_PanelStandardWorkingDay_NumberPicker287_OnChanged
+{
+  #keys: '[412672.1.6920929]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebNumberPicker_OnChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      MacroPlan.StandardWorkingDay( this.Number() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def
new file mode 100644
index 0000000..12b804d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormEmployeeCost/_ROOT_Component_FormEmployeeCost.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormEmployeeCost
+{
+  #keys: '[412672.1.5334387]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: Panel189
+  ]
+  Properties:
+  [
+    Description: 'EmployeeCosts'
+    Image: 'MONEY_BILL_FIRE'
+    Title: 'Labor Costs'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
index 62f7985..d90dc62 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_OnCreated.def
@@ -10,12 +10,12 @@
     Body:
     [*
       //鍒濆鍖�
-      if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
+      //if( not exists( MacroPlan, FinancialProductionSource, source, not source.IsImport() ) ){
         FinancialProductionSource::Initialize( MacroPlan );
-      }
+      //}
       //info( '------------------1----------------' );
       table := selectobject( MacroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
-      info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
       DataHolderTable.Data( table );
       
       dhSearch.Data( table.FinancialProductionSource().FinancialProductionSearch() );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
index 13d7fd4..9b9d0c5 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelExport_ButtonExport_OnClick.def
@@ -15,7 +15,7 @@
     [*
       binaryValue := FinancialProductionSource::Download( MacroPlan );
       
-      Application.Download( "Financial productions.xlsx", binaryValue.AsBinaryData() );
+      Application.Download( FinancialProductionReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
index 176b03b..3749d2c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialProductionReport/Response_PanelFinancialProductionReportOperation_ButtonProductionExport_OnCl.def
@@ -15,7 +15,7 @@
     [*
       binaryValue := FinancialProductionSource::DownloadTemplate( MacroPlan );
       
-      Application.Download( "Financial productions.xlsx", binaryValue.AsBinaryData() );
+      Application.Download( FinancialProductionReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def"
new file mode 100644
index 0000000..9a203ad
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_MatrixEditorTable\043623.def"
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+Component MatrixEditorTable id:MatrixEditorTable_623
+{
+  #keys: '[415136.0.858621867]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.858621868]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCell
+        {
+          #keys: '[415136.0.858621869]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'FinancialSalesReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'FinancialSalesColumn.FinancialSalesCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Value'
+        Column: 'FinancialSalesColumn'
+        Row: 'FinancialSalesRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.858621870]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.858621871]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'FinancialSalesReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'FinancialSalesRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.858621872]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.858621873]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'FinancialSalesReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'FinancialSalesColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable_1
+    #child: matrixeditorContextMenuTable_1
+  ]
+  Properties:
+  [
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
new file mode 100644
index 0000000..78299c1
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelExport\043545.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelExport id:PanelExport_545
+{
+  #keys: '[415136.0.858621784]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonExport
+    {
+      #keys: '[415136.0.858621785]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def
new file mode 100644
index 0000000..c5804ea
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportHeader.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReportHeader
+{
+  #keys: '[415136.0.858621774]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelFinancialSalesReportSearch
+    #child: PanelFinancialSalesReportOperation
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
new file mode 100644
index 0000000..5a9bec8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportOperation.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReportOperation
+{
+  #keys: '[415136.0.858621786]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelFinancialSalesReportOperation
+    {
+      #keys: '[415136.0.858621787]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        NumberOfColumns: 15
+        Taborder: 0
+        Text: 'Sales import'
+      ]
+    }
+    Component ButtonSalesImport
+    {
+      #keys: '[415136.0.858621788]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 1
+      ]
+    }
+    Component ButtonSalesExport
+    {
+      #keys: '[415136.0.858621789]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def
new file mode 100644
index 0000000..d6ff179
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelFinancialSalesReportSearch.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+Component PanelFinancialSalesReportSearch
+{
+  #keys: '[415136.0.858621775]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelUnit_715
+    #child: PanelGeneration_844
+    #child: PanelMQBMLB_603
+    #child: PanelPower_858
+    #child: PanelExport_545
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def"
new file mode 100644
index 0000000..ab48548
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelGeneration\043844.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelGeneration id:PanelGeneration_844
+{
+  #keys: '[415136.0.858621778]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[415136.0.858621779]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def"
new file mode 100644
index 0000000..37da59e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelMQBMLB\043603.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMQBMLB id:PanelMQBMLB_603
+{
+  #keys: '[415136.0.858621780]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.858621781]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def"
new file mode 100644
index 0000000..e41599f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelPower\043858.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelPower id:PanelPower_858
+{
+  #keys: '[415136.0.858621782]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslPower
+    {
+      #keys: '[415136.0.858621783]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Power'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def"
new file mode 100644
index 0000000..b9632a5
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelTable\043424.def"
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable id:PanelTable_424
+{
+  #keys: '[415136.0.858621866]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable_623
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def"
new file mode 100644
index 0000000..2d6d002
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_PanelUnit\043715.def"
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelUnit id:PanelUnit_715
+{
+  #keys: '[415136.0.858621776]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslUnit
+    {
+      #keys: '[415136.0.858621777]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Unit'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def"
new file mode 100644
index 0000000..1023bac
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixEditorActionBarPageTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable id:matrixEditorActionBarPageTable_1
+{
+  #keys: '[415136.0.858621874]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def"
new file mode 100644
index 0000000..71dfdc9
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Component_matrixeditorContextMenuTable\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable id:matrixeditorContextMenuTable_1
+{
+  #keys: '[415136.0.858621875]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
new file mode 100644
index 0000000..68f009c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_OnCreated.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormFinancialSalesReport_OnCreated
+{
+  #keys: '[415136.0.858683122]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      //if( not exists( MacroPlan, FinancialSalesSource, source, not source.IsImport() ) ){
+        FinancialSalesSource::Initialize( MacroPlan );
+      //}
+      //info( '------------------1----------------' );
+      table := selectobject( MacroPlan, FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and table.IsShow() );
+      //info( '------------------2----------------', table.IsImport(), table.IsShow() );
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( table.FinancialSalesSource().FinancialSalesSearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def
new file mode 100644
index 0000000..aa945e3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelExport_545_ButtonExport_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelExport_545/ButtonExport
+Response OnClick () id:Response_PanelExport_545_ButtonExport_OnClick
+{
+  #keys: '[415136.0.858621765]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialSalesSource::Download( MacroPlan );
+      
+      Application.Download( FinancialSalesReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+      //owner.FinancialSalesSource( relflush );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def
new file mode 100644
index 0000000..7eea40f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelFinancialSalesReportOperation/ButtonSalesExport
+Response OnClick () id:Response_PanelFinancialSalesReportOperation_ButtonSalesExport_OnClick
+{
+  #keys: '[415136.0.858621763]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialSalesSource::DownloadTemplate( MacroPlan );
+      
+      Application.Download( FinancialSalesReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def
new file mode 100644
index 0000000..99db221
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick.def
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: PanelFinancialSalesReportOperation/ButtonSalesImport
+Response OnClick () id:Response_PanelFinancialSalesReportOperation_ButtonSalesImport_OnClick
+{
+  #keys: '[415136.0.858621764]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      try {
+        uploadJsonString := Application.GetFile();
+        if ( uploadJsonString <> "" ) {
+          uploadJson := JSON::Parse( uploadJsonString );
+          Archive::VerifyTheFileName( uploadJson );
+                
+          fileName := uploadJson.Get( "name" ).GetString();
+          base64String := uploadJson.Get( "data" ).GetString();
+              
+          webFileBinaryData := BinaryData::FromBase64EncodedString( base64String ).AsBinaryValue();
+          
+          source := FinancialSalesSource::Upload( MacroPlan, webFileBinaryData, fileName );
+          source.ReadStructure();
+          //濡傛灉瀛樺湪璁″垝寮�濮嬪悗鐨勬棩鏈熸暟鎹渶瑕佺偣鍑荤‘璁�
+          if( not source.IsExistFutureMonthData() or 
+              ( source.IsExistFutureMonthData() and WebMessageBox::Question( this, Translations::MP_FinancialProductionReport_Question(), 'Yes|No' ) = 0 ) ){
+             source.AfterImport();
+             DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+          }
+          
+          WebMessageBox::Success( Translations::A_VWED_Success() );
+          traverse( MacroPlan, FinancialSalesSource, psource, psource.IsImport() and psource <> source ){
+            psource.Delete();
+          }
+        }
+      } onerror {
+        WebMessageBox::Error( e.GeneralInformation() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..e0e4fcd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelGeneration_844/ddslGeneration
+Response OnCreated () id:Response_PanelGeneration_844_ddslGeneration_OnCreated
+{
+  #keys: '[415136.0.858621771]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Generation() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
new file mode 100644
index 0000000..6c500d5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelGeneration_844/ddslGeneration
+Response OnSelectionChanged () id:Response_PanelGeneration_844_ddslGeneration_OnSelectionChanged
+{
+  #keys: '[415136.0.858621770]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //浠f暟鏀瑰彉鍚庡埛鏂版樉绀�
+      if( dhSearch.Data().Generation() <> selection ){
+        dhSearch.Data().Generation( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..f86feef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB_603/ddslMQBMLB
+Response OnCreated () id:Response_PanelMQBMLB_603_ddslMQBMLB_OnCreated
+{
+  #keys: '[415136.0.858621769]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.MQBMLB() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
new file mode 100644
index 0000000..1fd2082
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB_603/ddslMQBMLB
+Response OnSelectionChanged () id:Response_PanelMQBMLB_603_ddslMQBMLB_OnSelectionChanged
+{
+  #keys: '[415136.0.858621768]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //妯旱鍒舵敼鍙樺悗鍒锋柊鏄剧ず
+      if( dhSearch.Data().MqbMlb() <> selection ){
+        dhSearch.Data().MqbMlb( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def
new file mode 100644
index 0000000..6f642a4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnCreated.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: PanelPower_858/ddslPower
+Response OnCreated () id:Response_PanelPower_858_ddslPower_OnCreated
+{
+  #keys: '[415136.0.858621767]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      values := selectuniquevalues( MacroPlan, Product_MP, tempPMP, true, tempPMP.Power() );
+      
+      valueString := values.Concatenate( ";" );
+      valueString := selectuniquevalues( valueString.Tokenize( ";" ), Elements, tempS, true, tempS ).Concatenate( ";" );
+      
+      valueString := "<All>" + ifexpr( valueString = "", "", ";" ) + valueString;
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
new file mode 100644
index 0000000..45a6525
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelPower_858_ddslPower_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelPower_858/ddslPower
+Response OnSelectionChanged () id:Response_PanelPower_858_ddslPower_OnSelectionChanged
+{
+  #keys: '[415136.0.858621766]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍔熺巼鏀瑰彉鍚庡埛鏂版樉绀�
+      if( dhSearch.Data().Power() <> selection ){
+        dhSearch.Data().Power( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
new file mode 100644
index 0000000..5424b65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnCreated.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelUnit_715/ddslUnit
+Response OnCreated () id:Response_PanelUnit_715_ddslUnit_OnCreated
+{
+  #keys: '[415136.0.858621773]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      
+      valueString := "<All>;" + FinancialSalesReport::GetSalesSegmentCC() + ";" + FinancialSalesReport::GetSalesSegmentDL();
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
new file mode 100644
index 0000000..3d59900
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/Response_PanelUnit_715_ddslUnit_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelUnit_715/ddslUnit
+Response OnSelectionChanged () id:Response_PanelUnit_715_ddslUnit_OnSelectionChanged
+{
+  #keys: '[415136.0.858621772]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //Unit鏇存柊鍚庣敓鎴愭柊鐨勬樉绀�
+      if( dhSearch.Data().Unit() <> selection ){
+        dhSearch.Data().Unit( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
new file mode 100644
index 0000000..248b71f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormFinancialSalesReport
+{
+  #keys: '[415136.0.857870750]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component DataHolderTable id:DataHolderTable_847
+    {
+      #keys: '[415136.0.857870828]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'FinancialSalesReport'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component dhSearch id:dhSearch_424
+    {
+      #keys: '[415136.0.857870874]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'FinancialSalesSearch'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: PanelTable_424
+    #child: PanelFinancialSalesReportHeader
+  ]
+  Properties:
+  [
+    Image: 'MONEY_COINS2'
+    Title: 'Financial sales report'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_MatrixEditorTable.def
new file mode 100644
index 0000000..4b02630
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_MatrixEditorTable.def
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+Component MatrixEditorTable
+{
+  #keys: '[415136.0.881011903]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.881011904]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorTable
+        {
+          #keys: '[415136.0.881011905]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'FinancialWeeklyReport.FinancialWeeklyColumn.FinancialWeeklyCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'Value'
+        Column: 'FinancialWeeklyColumn'
+        Row: 'FinancialWeeklyRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.881011908]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.881011909]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'FinancialWeeklyReport.FinancialWeeklyRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.881011912]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.881011913]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'FinancialWeeklyReport.FinancialWeeklyColumn'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'Index'
+        Taborder: 2
+      ]
+    }
+    #child: matrixEditorActionBarPageTable
+    #child: matrixeditorContextMenuTable
+  ]
+  Properties:
+  [
+    Columns: 'MatrixEditorColumnsTable'
+    ContextMenu: 'matrixeditorContextMenuTable'
+    Rows: 'MatrixEditorRowsTable'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def
new file mode 100644
index 0000000..8d20e9e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelHeader.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component PanelHeader
+{
+  #keys: '[415136.0.881011755]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonExport
+    {
+      #keys: '[415136.0.881011811]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'EXPORT1'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelTable.def
new file mode 100644
index 0000000..410f2fd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_PanelTable.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable
+{
+  #keys: '[415136.0.881011874]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixEditorActionBarPageTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixEditorActionBarPageTable.def
new file mode 100644
index 0000000..4e80537
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixEditorActionBarPageTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable
+{
+  #keys: '[415136.0.881011916]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixeditorContextMenuTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixeditorContextMenuTable.def
new file mode 100644
index 0000000..d8d4084
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Component_matrixeditorContextMenuTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable
+{
+  #keys: '[415136.0.881011919]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def
new file mode 100644
index 0000000..3cf4d42
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormFinancialWeeklyReport_OnCreated
+{
+  #keys: '[415136.0.882110991]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      FinancialWeeklyReport::Initialize( MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_ButtonExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_ButtonExport_OnClick.def
new file mode 100644
index 0000000..d0c2cab
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/Response_PanelHeader_ButtonExport_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelHeader/ButtonExport
+Response OnClick () id:Response_PanelHeader_ButtonExport_OnClick
+{
+  #keys: '[415136.0.882111199]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := FinancialWeeklyReport::Download( MacroPlan );
+      
+      Application.Download( FinancialWeeklyReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def
new file mode 100644
index 0000000..af4455d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialWeeklyReport/_ROOT_Component_FormFinancialWeeklyReport.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormFinancialWeeklyReport
+{
+  #keys: '[415136.0.881011703]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelHeader
+    #child: PanelTable
+  ]
+  Properties:
+  [
+    Image: 'DOCUMENT_DIRTY'
+    Title: 'Financial weekly report'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_MatrixEditorTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_MatrixEditorTable.def
new file mode 100644
index 0000000..19c25a9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_MatrixEditorTable.def
@@ -0,0 +1,98 @@
+Quintiq file version 2.0
+Component MatrixEditorTable
+{
+  #keys: '[415136.0.864612253]'
+  BaseType: 'WebMatrixEditor'
+  Children:
+  [
+    Component MatrixEditorCellTable
+    {
+      #keys: '[415136.0.864612254]'
+      BaseType: 'WebMatrixEditorCell'
+      Children:
+      [
+        Component DataExtractorCell
+        {
+          #keys: '[415136.0.864612255]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InventorySummaryReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'InventorySummaryColumn.InventorySummaryCell'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Attributes: 'EndingInventory;MinimumInventory;MaximumInventory;AverageInventory'
+        Column: 'InventorySummaryColumn'
+        Row: 'InventroySummaryRow'
+        Taborder: 0
+      ]
+    }
+    Component MatrixEditorRowsTable
+    {
+      #keys: '[415136.0.864612256]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorRow
+        {
+          #keys: '[415136.0.864612257]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InventorySummaryReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'InventroySummaryRow'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Legend: 'Name'
+        SortCriteria: 'RowNr'
+        Taborder: 1
+      ]
+    }
+    Component MatrixEditorColumnsTable
+    {
+      #keys: '[415136.0.864612258]'
+      BaseType: 'WebMatrixEditorHeaderLevel'
+      Children:
+      [
+        Component DataExtractorColumn
+        {
+          #keys: '[415136.0.864612259]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'InventorySummaryReport'
+            Source: 'DataHolderTable'
+            Taborder: 0
+            Transformation: 'InventorySummaryColumn'
+          ]
+        }
+      ]
+      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_FormInventorySummaryReport/Component_PanelCategory.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelCategory.def
new file mode 100644
index 0000000..fe8fadd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelCategory.def
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+Component PanelCategory
+{
+  #keys: '[415136.0.862221867]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component RadioButtonGroupUseForPlanning id:RadioButtonGroupUseForPlanning_545
+    {
+      #keys: '[415136.0.862222092]'
+      BaseType: 'WebRadioButtonGroup'
+      Properties:
+      [
+        ButtonLabels: 'Day;Week;Month'
+        ButtonValues: 'Day;Week;Month'
+        Orientation: 'horizontal'
+        ShowTitle: false
+        Taborder: 0
+        Title: 'Periods'
+        Tooltip: '<html>Select if the periods are used for planning or merely for visualization.<br>The planning periods define the granularity at which planning is done.<br>In case of overlapping planning periods, the smallest ones are used.<br>The planning periods are shown in the period overview in blue.</html>'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def
new file mode 100644
index 0000000..cded950
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelExport.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelExport
+{
+  #keys: '[415136.0.862221896]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ButtonSummaryExport
+    {
+      #keys: '[415136.0.862221939]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'IMPORT1'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelGeneration.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelGeneration.def
new file mode 100644
index 0000000..27105c8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelGeneration.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelGeneration
+{
+  #keys: '[415136.0.864612093]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslGeneration
+    {
+      #keys: '[415136.0.864612094]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Generation'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryColumnSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryColumnSearch.def
new file mode 100644
index 0000000..c91046e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryColumnSearch.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component PanelInventorySummaryColumnSearch
+{
+  #keys: '[415136.0.864612101]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelPeriod
+    #child: PanelExport
+    #child: PanelCategory
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryHeader.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryHeader.def
new file mode 100644
index 0000000..e149da6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryHeader.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelInventorySummaryHeader
+{
+  #keys: '[415136.0.864612089]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelInventorySummaryProductSearch
+    #child: PanelInventorySummaryColumnSearch
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryProductSearch.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryProductSearch.def
new file mode 100644
index 0000000..bfd68b1
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelInventorySummaryProductSearch.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+Component PanelInventorySummaryProductSearch
+{
+  #keys: '[415136.0.864612090]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelUnit
+    #child: PanelGeneration
+    #child: PanelMQBMLB
+    #child: PanelPower
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelMQBMLB.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelMQBMLB.def
new file mode 100644
index 0000000..b261493
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelMQBMLB.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelMQBMLB
+{
+  #keys: '[415136.0.864612095]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslMQBMLB
+    {
+      #keys: '[415136.0.864612096]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'MQB/MLB'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 2
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def
new file mode 100644
index 0000000..188ac98
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPeriod.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelPeriod
+{
+  #keys: '[415136.0.862221329]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component DateSelectorStart
+    {
+      #keys: '[415136.0.862221355]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Label: 'Start date'
+        Taborder: 0
+      ]
+    }
+    Component DateSelectorEnd
+    {
+      #keys: '[415136.0.862221609]'
+      BaseType: 'WebDateSelector'
+      Properties:
+      [
+        Date: 9999-12-31
+        Label: 'End date'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPower.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPower.def
new file mode 100644
index 0000000..f59f987
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelPower.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelPower
+{
+  #keys: '[415136.0.864612097]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslPower
+    {
+      #keys: '[415136.0.864612098]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Power'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelTable.def
new file mode 100644
index 0000000..636f0fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelTable.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelTable
+{
+  #keys: '[415136.0.864612252]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: MatrixEditorTable
+  ]
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelUnit.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelUnit.def
new file mode 100644
index 0000000..4990a44
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_PanelUnit.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component PanelUnit
+{
+  #keys: '[415136.0.864612091]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component ddslUnit
+    {
+      #keys: '[415136.0.864612092]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: 'Unit'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixEditorActionBarPageTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixEditorActionBarPageTable.def
new file mode 100644
index 0000000..ece6871
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixEditorActionBarPageTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageTable
+{
+  #keys: '[415136.0.864612260]'
+  BaseType: 'matrixEditorActionBarPage'
+  Properties:
+  [
+    Taborder: 3
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixeditorContextMenuTable.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixeditorContextMenuTable.def
new file mode 100644
index 0000000..e7171db
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Component_matrixeditorContextMenuTable.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuTable
+{
+  #keys: '[415136.0.864612261]'
+  BaseType: 'matrixeditorContextMenu'
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
new file mode 100644
index 0000000..ca45d5d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_OnCreated.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormInventorySummaryReport_OnCreated
+{
+  #keys: '[415136.0.864612555]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      //if( not isnull( MacroPlan.InventorySummarySource() ) ){
+        InventorySummarySource::Initialize( MacroPlan, InterfaceDataset );
+      //}
+      //info( '------------------1----------------' );
+      table := selectobject( MacroPlan, InventorySummarySource.InventorySummaryReport, table, table.IsShow() );
+      //info( '------------------2----------------', table.IsShow() );
+      DataHolderTable.Data( table );
+      
+      dhSearch.Data( table.InventorySummarySource().InventorySummarySearch() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def"
new file mode 100644
index 0000000..83bb279
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnChanged\043847.def"
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelCategory/RadioButtonGroupUseForPlanning_545
+Response OnChanged () id:Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged_847
+{
+  #keys: '[415136.0.862222091]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebRadioButtonGroup_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鍖洪棿鏀瑰彉鍚庡埛鏂版樉绀�
+      if( dhSearch.Data().Category() <> this.BoundValue() ){
+        dhSearch.Data().Category( this.BoundValue() );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def
new file mode 100644
index 0000000..cfe85d3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelCategory/RadioButtonGroupUseForPlanning_545
+Response OnCreated () id:Response_PanelCategory_RadioButtonGroupUseForPlanning_OnCreated
+{
+  #keys: '[415136.0.875614032]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.ButtonValues( Translations::MP_GlobalParameters_Day() + ';' + Translations::MP_GlobalParameters_Week() + ';' + Translations::MP_GlobalParameters_Month() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSummaryExport_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSummaryExport_OnClick.def
new file mode 100644
index 0000000..dda4e49
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelExport_ButtonSummaryExport_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelExport/ButtonSummaryExport
+Response OnClick () id:Response_PanelExport_ButtonSummaryExport_OnClick
+{
+  #keys: '[415136.0.862221938]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      binaryValue := InventorySummarySource::Download( MacroPlan );
+      
+      Application.Download( InventorySummaryReport::GetDefaultName() + '.xlsx', binaryValue.AsBinaryData() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..0659423
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/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.864612086]'
+  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_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
new file mode 100644
index 0000000..41e1fd3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelGeneration_ddslGeneration_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelGeneration/ddslGeneration
+Response OnSelectionChanged () id:Response_PanelGeneration_ddslGeneration_OnSelectionChanged
+{
+  #keys: '[415136.0.864612085]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //浠f暟鏀瑰彉鍚庡埛鏂版樉绀�
+      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_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..31df8e8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/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.864612084]'
+  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_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
new file mode 100644
index 0000000..a86bd8c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelMQBMLB/ddslMQBMLB
+Response OnSelectionChanged () id:Response_PanelMQBMLB_ddslMQBMLB_OnSelectionChanged
+{
+  #keys: '[415136.0.864612083]'
+  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_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
new file mode 100644
index 0000000..503f315
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorEnd_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod/DateSelectorEnd
+Response OnChanged () id:Response_PanelPeriod_DateSelectorEnd_OnChanged
+{
+  #keys: '[415136.0.862221640]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() < DateSelectorStart.Date() ){
+        this.HintError( 'The end date cannot be less than the start date!' );
+      }else{
+        if( dhSearch.Data().EndDate() <> this.Date() ){
+          dhSearch.Data().EndDate( this.Date() );
+          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
new file mode 100644
index 0000000..ba04b08
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPeriod_DateSelectorStart_OnChanged.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPeriod/DateSelectorStart
+Response OnChanged () id:Response_PanelPeriod_DateSelectorStart_OnChanged
+{
+  #keys: '[415136.0.862221461]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //鏃ユ湡鏀瑰彉鍚庡埛鏂版樉绀�
+      if( this.Date() > DateSelectorEnd.Date() ){
+        this.HintError( 'The start date cannot be later than the end date!' );
+      }else{
+        if( dhSearch.Data().StartDate() <> this.Date() ){
+          dhSearch.Data().StartDate( this.Date() );
+          DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+        }
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnCreated.def
new file mode 100644
index 0000000..24138aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/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.864612082]'
+  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_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
new file mode 100644
index 0000000..01ad63c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelPower_ddslPower_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelPower/ddslPower
+Response OnSelectionChanged () id:Response_PanelPower_ddslPower_OnSelectionChanged
+{
+  #keys: '[415136.0.864612081]'
+  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_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def
new file mode 100644
index 0000000..81f2cba
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnCreated.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: PanelUnit/ddslUnit
+Response OnCreated () id:Response_PanelUnit_ddslUnit_OnCreated
+{
+  #keys: '[415136.0.864612088]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      
+      valueString := "<All>;" + InventorySummaryReport::GetDefaultCCUnit() + ";" + InventorySummaryReport::GetDefaultDLUnit();
+      
+      this.Strings( valueString );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
new file mode 100644
index 0000000..a4cb7ef
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/Response_PanelUnit_ddslUnit_OnSelectionChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelUnit/ddslUnit
+Response OnSelectionChanged () id:Response_PanelUnit_ddslUnit_OnSelectionChanged
+{
+  #keys: '[415136.0.864612087]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      //Unit鏇存柊鍚庣敓鎴愭柊鐨勬樉绀�
+      if( dhSearch.Data().Unit() <> selection ){
+        dhSearch.Data().Unit( selection );
+        DataHolderTable.Data().Generate( dhSearch.Data(), DataHolderProduct.Data() );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
new file mode 100644
index 0000000..18cc120
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInventorySummaryReport/_ROOT_Component_FormInventorySummaryReport.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormInventorySummaryReport
+{
+  #keys: '[415136.0.864611956]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    Component DataHolderTable
+    {
+      #keys: '[415136.0.864612009]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'InventorySummaryReport'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    Component dhSearch
+    {
+      #keys: '[415136.0.864612034]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'InventorySummarySearch'
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+    #child: PanelInventorySummaryHeader
+    #child: PanelTable
+  ]
+  Properties:
+  [
+    Image: 'DOCUMENT_CHECK_EDIT'
+    Title: 'Inventory summary report'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw
new file mode 100644
index 0000000..e5dcb48
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Financial_sales_report_view.vw
@@ -0,0 +1,120 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormFinancialSalesReport
+      {
+        title: 'QMacroPlanner::FormFinancialSalesReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormFinancialSalesReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormFinancialSalesReport_PanelFinancialSalesReportHeader
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelFinancialSalesReportSearch
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelUnit
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelGeneration
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelMQBMLB
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelPower
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelExport
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelFinancialSalesReportOperation
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormFinancialSalesReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormFinancialSalesReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Value
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Value'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 17
+    image: 'MONEY_COINS2'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Financial_sales_report_view'
+  name: 'Financial sales report view'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Financial_weekly_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Financial_weekly_report_view.vw
new file mode 100644
index 0000000..64db5a0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Financial_weekly_report_view.vw
@@ -0,0 +1,92 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormFinancialWeeklyReport
+      {
+        title: 'QMacroPlanner::FormFinancialWeeklyReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormFinancialWeeklyReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 13
+        }
+        components
+        {
+          FormFinancialWeeklyReport_PanelHeader
+          {
+            sizeRatio: 1
+          }
+          FormFinancialWeeklyReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormFinancialWeeklyReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 67
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormFinancialWeeklyReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_Value
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Value'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 19
+    image: 'DOCUMENT_DIRTY'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Financial_weekly_report_view'
+  name: 'Financial weekly report view'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Inventory_summary_report_view.vw b/_Main/UI/MacroPlannerWebApp/Views/Inventory_summary_report_view.vw
new file mode 100644
index 0000000..f1f7de6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Inventory_summary_report_view.vw
@@ -0,0 +1,140 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormInventorySummaryReport
+      {
+        title: 'QMacroPlanner::FormInventorySummaryReport'
+        shown: true
+        componentID: 'QMacroPlanner::FormInventorySummaryReport'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 15
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormInventorySummaryReport_PanelInventorySummaryHeader
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelInventorySummaryProductSearch
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelUnit
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelGeneration
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelMQBMLB
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelPower
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelInventorySummaryColumnSearch
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_PanelTable
+          {
+            sizeRatio: 1
+          }
+          FormInventorySummaryReport_MatrixEditorTable
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QMacroPlanner::FormInventorySummaryReport.MatrixEditorTable'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_EndingInventory
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'EndingInventory'
+                    }
+                    attribute_MinimumInventory
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'MinimumInventory'
+                    }
+                    attribute_MaximumInventory
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'MaximumInventory'
+                    }
+                    attribute_AverageInventory
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 3
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'AverageInventory'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'Index'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'RowNr'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 18
+    image: 'DOCUMENT_CHECK_EDIT'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Inventory_summary_report_view'
+  name: 'Inventory summary report view'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw b/_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw
new file mode 100644
index 0000000..6bec5b0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    page: ''
+    group: ''
+    index: 0
+    image: 'MONEY_BILL_FIRE'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Labor_Costs'
+  name: 'Labor_Costs'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw" "b/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw"
index 1ffab78..582d5eb 100644
--- "a/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw"
+++ "b/_var/_Main/ProjSettings/MacroPlanner/Views/Empty__dialog_initialization__\133124808.0.140900041\135.vw"
@@ -16,7 +16,7 @@
   CREATIONUSER ''
   UPDATEDATETIME '2017-06-05T15:08:50'
   UPDATEUSER 'quintiq/dwe2'
-  LASTACCESSDATE '2020-03-25'
+  LASTACCESSDATE '2024-06-28'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS

--
Gitblit v1.9.3