From e8be76a40ae0b3cb1d37a6e91e25c1284a50347f Mon Sep 17 00:00:00 2001
From: Administrator <renhui.hao@capgemini.com>
Date: 星期四, 21 九月 2023 20:59:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'refs/remotes/origin/dev'

---
 _Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl                                                                                                                   |    7 
 _Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl                                                                                                         |    2 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl                                                                                                       |   19 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl                                                                                                             |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listContextMenuCapacityAndSaleBudgeFilterYear#1.def                    |   25 
 _Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl                                                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Views/OrderLock.vw                                                                                                                                |    4 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl                                                                                                            |   22 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl                                                                                                                |    8 
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl                                                                                        |   17 
 _Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl                                                                                                              |   34 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInPCSInYear.qbl                                                                                                           |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def                                                                    |    4 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl                                                                                                        |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def                                                                                         |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def                                                                   |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def                                                 |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/_ROOT_Component_FormCapacityAndSaleBudgeFilterBusinessType.def                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                                                                   |    3 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def                                                                     |    7 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl                                                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def                                                                               |    9 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl                                                                                                           |    8 
 _Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl                                                                                         |   23 
 _Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl                                                                                   |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl                                                                                                              |   20 
 _Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl                                                                                                                  |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl                                                                                                        |    8 
 _Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl                                                                                                                       |    7 
 _Main/BL/Type_OrderLockLog/Attribute_Notes.qbl                                                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp                                                                                                               |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl                                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def                                                                  |   59 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def                                                                        |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def                                      |   24 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl                                                                                                           |   21 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl                                                                                               |   14 
 _Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl                                                                                                             |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def                                                                                    |   15 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def                                                 |   38 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyCoefficient#902.def                                                                     |   34 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def                                                     |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def                                                                        |   10 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl                                                                           |   23 
 _Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl                                                                                                                    |    0 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl                                                                                                           |    8 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl                                                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def                                      |   24 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def             |   16 
 _Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl                                                                                                                         |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl                                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh#171.def |   16 
 _Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl                                                                                                                 |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl                                                                                                         |    8 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def                                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning#679.def                                                                             |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl                                                                                                                 |    8 
 _Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl                                                                                                                       |    6 
 _Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def                                                                                               |    2 
 _Main/BL/Type_OrderLockLog/Attribute_IsLocked#2.qbl                                                                                                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged#670.def             |   16 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl                                                                                                      |   21 
 _Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl                                                                                                                         |    7 
 _Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl                                                                                                          |   23 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl                                                                                                       |   22 
 _Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl                                                                                                                   |    7 
 _Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl                                                                                                               |    6 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl                                                                                              |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listActionBarPageCapacityAndSaleBudgeFilterBusinessType.def                        |   10 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl                                                                                                          |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def                                                                     |    7 
 _Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl                                                                                                                |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def                                                    |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_PanelSalesDemands.def                                                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def                                                                  |    4 
 _Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl                                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def                                                                                    |    6 
 _Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl                                                                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def                                     |   20 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                          |   73 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton#713.def                                                                 |   49 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/_ROOT_Component_FormCapacityAndSaleBudgeFilterYear.def                                               |    3 
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/Attribute_BusinessType.qbl                                                                                               |    7 
 _Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl                                                                                                         |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl                                                                                                        |    8 
 _Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl                                                                                                                    |    9 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl                                                                                                                |    2 
 _Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl                                                                                                             |   20 
 _Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl                                                                                                                        |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def                                                                 |   10 
 _Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl                                                                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def                                                   |   37 
 _Main/BL/Type_PRHistoryData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl                                                                                                   |   23 
 _Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl                                                                                             |   23 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl                                                                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def                                               |   22 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl                                                                                                           |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl                                                                                                                 |    8 
 _Main/BL/Type_PriorityResult/Attribute_ProductID.qbl                                                                                                                          |    7 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Attribute_PlaceOfProductionOfArray.qbl                                                                       |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl                                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def                                        |   21 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl                                                                                                            |   66 
 _Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl                                                                                                                     |    7 
 _Main/BL/Type_PriorityResult/Attribute_Quantity.qbl                                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def                                               |   22 
 _Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl                                                                                                                    |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def       |   17 
 _Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl                                                                                                                       |   59 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged.def                 |   18 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl                                                                                                                     |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl                                                                                                                 |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl                                                                                                                  |    8 
 _Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl                                                                                                                     |   25 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl                                                                                                     |   19 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl                                                                                                                 |    8 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl                                                                                                           |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def                                           |   18 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl                                                                                                          |    8 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl                                                                                                             |   22 
 _Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl                                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def                                                                       |    8 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl                                                                                                                 |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw                                                                                                                          | 2258 +++++++++++++++++++++++
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listActionBarPageOrderLockLog.def                                                                            |   10 
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/_ROOT_Type_CapacityAndSaleBudgeFilterBusinessType.qbl                                                                    |   10 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSal.qbl                                                                           |   23 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl                                                                                                             |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/_ROOT_Component_FormCapacityAndSaleBudgeFilterMonth.def                                             |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def                                                  |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def                                                                                           |    6 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl                                                                                                         |    8 
 _Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl                                                                                                                      |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def                                                                               |   33 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock#844.def                                                                                           |    3 
 _Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl                                                                                |   10 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl                                                                                                              |    0 
 _Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl                                                                                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def |   16 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl                                                                                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails#633.def                                                                         |   46 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl                                                                                                         |  301 +++
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl                                                                                                    |    7 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray.qbl                                            |   10 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl                                                                                                         |    6 
 _Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl                                                                                                        |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def                                                               |   22 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl                                                                                                         |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def                                                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def                                                   |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def                                                                           |   46 
 _Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl                                                                                                                     |   43 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def |   18 
 _Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl                                                                                                                     |    7 
 _Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl                                                                                                  |   11 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl                                                                                                                  |    6 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl                                                                                                         |    8 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl                                                                                                      |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl                                                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def                                                 |   22 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrPlaceOfProductionOfArray.qbl                                                                           |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl                                                                                                           |    8 
 _Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl                                                                                                               |    0 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def                                                               |   28 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails#743.def                                                                     |   41 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl                                                                                                          |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl                                                                                                        |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def                                                              |    6 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl                                                                                                         |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listActionBarPageCapacityAndSaleBudgeFilterPlaceOfProductionOfArra.def |   10 
 _Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw                                                                                                                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def                                               |   21 
 _Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl                                                                                                          |   10 
 _Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl                                                                                                                |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/_ROOT_Component_FormOrderLockLog.def                                                                                   |   43 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_PanelOrderLockLog.def                                                                                        |   14 
 _Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl                                                                           |   23 
 _Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl                                                                                                            |    7 
 _Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl                                                                                                        |    9 
 _Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl                                                                                                                 |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def                                       |   21 
 _Main/BL/Type_PriorityResult/Attribute_Customer.qbl                                                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/_ROOT_Component_FormCapacityAndSaleBudgeFilterItem.def                                               |    3 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl                                                                                                          |    6 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl                                                                                                          |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listContextMenuOrderLockLog.def                                                                              |   10 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def                                                                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def             |   43 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_ListOrderLock_844_OnUserCheckedChanged.def                                                                       |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_ListOrderLockLog.def                                                                                         |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                                                         |    3 
 _Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl                                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def                                                         |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def                                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listContextMenuCapacityAndSaleBudgeFilterYear#1.def                                |   25 
 _Main/BL/Type_CustomerOrder/Attribute_IsLocked.qbl                                                                                                                            |    8 
 _Main/BL/Type_MPSync/StaticMethod_TestData.qbl                                                                                                                                |   63 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def                                                                                     |   41 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def                                                                          |   10 
 /dev/null                                                                                                                                                                     |   90 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def                                     |   43 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def                                                                |   10 
 _Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl                                                                                                                           |    7 
 _Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl                                                                                                           |    7 
 _Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl                                                                                                                     |   40 
 _Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl                                                                                                                |    6 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl                                                                                                               |    2 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl                                                                                                    |   21 
 _Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl                                                                                                              |    7 
 225 files changed, 5,427 insertions(+), 323 deletions(-)

diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSal.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSal.qbl
new file mode 100644
index 0000000..fe18a82
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSal.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterBusinessType_MPSync_MPSync_CapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '1[414384.0.873958122]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MPSync
+  {
+    #keys: '3[414384.0.873958124][414384.0.873958123][414384.0.873958125]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterBusinessType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterBusinessType
+  {
+    #keys: '3[414384.0.873958127][414384.0.873958126][414384.0.873958128]'
+    Cardinality: '1toN'
+    ObjectDefinition: MPSync
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl
new file mode 100644
index 0000000..ef6b268
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '1[414384.0.873958138]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MPSync
+  {
+    #keys: '3[414384.0.873958140][414384.0.873958139][414384.0.873958141]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+  {
+    #keys: '3[414384.0.873958143][414384.0.873958142][414384.0.873958144]'
+    Cardinality: '1toN'
+    ObjectDefinition: MPSync
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl b/_Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl
new file mode 100644
index 0000000..4f9165c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget
+{
+  #keys: '1[414384.0.874289921]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MPSync
+  {
+    #keys: '3[414384.0.874289923][414384.0.874289922][414384.0.874289924]'
+    Cardinality: '0to1'
+    ObjectDefinition: MappingAnnualBudget
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide MappingAnnualBudget
+  {
+    #keys: '3[414384.0.874289926][414384.0.874289925][414384.0.874289927]'
+    Cardinality: '1toN'
+    ObjectDefinition: MPSync
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl b/_Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl
new file mode 100644
index 0000000..a9e64fe
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_Prio.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityResultBusinessTypeDetail_PriorityResult_PriorityResult_PriorityResultBusinessTypeDetail
+{
+  #keys: '1[414382.0.504275181]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PriorityResult
+  {
+    #keys: '3[414382.0.504275183][414382.0.504275182][414382.0.504275184]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityResultBusinessTypeDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityResultBusinessTypeDetail
+  {
+    #keys: '3[414382.0.504275186][414382.0.504275185][414382.0.504275187]'
+    Cardinality: '1toN'
+    ObjectDefinition: PriorityResult
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl b/_Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl
new file mode 100644
index 0000000..bdd10c4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityRes.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityResultGroupDetail_PriorityResult_PriorityResult_PriorityResultGroupDetail
+{
+  #keys: '1[414382.0.504275195]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PriorityResult
+  {
+    #keys: '3[414382.0.504275197][414382.0.504275196][414382.0.504275198]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityResultGroupDetail
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityResultGroupDetail
+  {
+    #keys: '3[414382.0.504275200][414382.0.504275199][414382.0.504275201]'
+    Cardinality: '1toN'
+    ObjectDefinition: PriorityResult
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl b/_Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl
new file mode 100644
index 0000000..2a02cb7
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PriorityResult_MacroPlan_MacroPlan_PriorityResult.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PriorityResult_MacroPlan_MacroPlan_PriorityResult
+{
+  #keys: '1[414382.0.504275161]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide MacroPlan
+  {
+    #keys: '3[414382.0.504275163][414382.0.504275162][414382.0.504275164]'
+    Cardinality: '0to1'
+    ObjectDefinition: PriorityResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PriorityResult
+  {
+    #keys: '3[414382.0.504275166][414382.0.504275165][414382.0.504275167]'
+    Cardinality: '1toN'
+    ObjectDefinition: MacroPlan
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl
index 63bb032..a8afdb0 100644
--- a/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudge/Attribute_BusinessType.qbl
@@ -3,6 +3,6 @@
 Attribute BusinessType
 {
   #keys: '3[414384.0.810464687][414384.0.810464686][414384.0.810464688]'
-  Description: '涓氬姟绫诲瀷'
+  Description: '涓氬姟绫诲瀷(浜嬩笟閮�)'
   ValueType: String
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrOrgCode.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrPlaceOfProductionOfArray.qbl
similarity index 78%
rename from _Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrOrgCode.qbl
rename to _Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrPlaceOfProductionOfArray.qbl
index bd447f7..58725cf 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrOrgCode.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/Attribute_BusinessTypeOrPlaceOfProductionOfArray.qbl
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute BusinessTypeOrOrgCode
+Attribute BusinessTypeOrPlaceOfProductionOfArray
 {
   #keys: '3[414384.0.852466562][414384.0.852466561][414384.0.852466563]'
   Description: '浜嬩笟閮�/闈㈡澘鍩哄湴'
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
index 0f370d3..39c29d0 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
@@ -20,7 +20,7 @@
         for( j := 1; j <= 12; j := j + 1 ) {
           monthString := "MONTH" + ifexpr( j < 10, "0" + [String]j, [String]j );
           scenarioManager.CapacityAndSaleBudgeChartElement( relnew, 
-                                                            BusinessTypeOrOrgCode := businessTypeString, 
+                                                            BusinessTypeOrPlaceOfProductionOfArray := businessTypeString, 
                                                             TimeStringAndScenarioName := monthString + " - " + scenarioName, 
                                                             Quantity := Real::Random( 20.0, 30.0 ) );
         }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/Attribute_BusinessType.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..17fd28b
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414384.0.874249290][414384.0.874249289][414384.0.874249291]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
new file mode 100644
index 0000000..4e3f888
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateIfNotExist (
+  MPSync parent,
+  String value
+)
+{
+  TextBody:
+  [*
+    // yypsybs Sep-15-2023 (created)
+    old := select( parent, CapacityAndSaleBudgeFilterBusinessType, item, item.BusinessType() = value );
+    if( isnull( old ) ) {
+      parent.CapacityAndSaleBudgeFilterBusinessType( relnew, 
+                                                     BusinessType := value );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/_ROOT_Type_CapacityAndSaleBudgeFilterBusinessType.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/_ROOT_Type_CapacityAndSaleBudgeFilterBusinessType.qbl
new file mode 100644
index 0000000..8232f6d
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/_ROOT_Type_CapacityAndSaleBudgeFilterBusinessType.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '5[414384.0.874249287][414384.0.874249285][0.0.0][414384.0.874249286][414384.0.874249288]'
+  BaseType: Object
+  Description: '瀵规瘮浜嬩笟閮�'
+  StructuredName: 'CapacityAndSaleBudgeFilterBusinessTypes'
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
index a977b0a..ae10a43 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
@@ -4,7 +4,7 @@
   ScenarioManager parent
 )
 {
-  Description: '鍒濆鍖栨湀浠�'
+  Description: '鍒濆鍖栧勾浠�'
   TextBody:
   [*
     // yypsybs Sep-15-2023 (created)
@@ -13,7 +13,7 @@
       if( existList.Find( i ) = -1 ) {
         parent.CapacityAndSaleBudgeFilterMonth( relnew, 
                                                 MonthNo := i );
-      }
+      }  
     }
   *]
 }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Attribute_PlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Attribute_PlaceOfProductionOfArray.qbl
new file mode 100644
index 0000000..252f523
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Attribute_PlaceOfProductionOfArray.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlaceOfProductionOfArray
+{
+  #keys: '3[414384.0.873958113][414384.0.873958112][414384.0.873958114]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
new file mode 100644
index 0000000..6bb6aff
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateIfNotExist (
+  MPSync parent,
+  String value
+)
+{
+  TextBody:
+  [*
+    // yypsybs Sep-15-2023 (created)
+    old := select( parent, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, item, item.PlaceOfProductionOfArray() = value );
+    if( isnull( old ) ) {
+      parent.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relnew, 
+                                                                 PlaceOfProductionOfArray := value );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray.qbl
new file mode 100644
index 0000000..c5c8dae
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '5[414384.0.873958110][414384.0.873958108][0.0.0][414384.0.873958109][414384.0.873958111]'
+  BaseType: Object
+  Description: '瀵规瘮浜嬩笟閮�'
+  StructuredName: 'CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays'
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
index c0ddc68..822bde4 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
@@ -10,7 +10,7 @@
     // yypsybs Sep-15-2023 (created)
     existList := selectuniquevalues( parent, CapacityAndSaleBudgeFilterYear, item, item.YearNo() );
     nowYear := Date::Today().Year();
-    for( i := nowYear; i <= nowYear + 10; i++ ) {
+    for( i := nowYear - 10; i <= nowYear; i++ ) {
       if( existList.Find( i ) = -1 ) {
         parent.CapacityAndSaleBudgeFilterYear( relnew, 
                                                YearNo := i );
diff --git a/_Main/BL/Type_CustomerOrder/Attribute_IsLocked.qbl b/_Main/BL/Type_CustomerOrder/Attribute_IsLocked.qbl
new file mode 100644
index 0000000..34516aa
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/Attribute_IsLocked.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsLocked
+{
+  #keys: '3[412960.0.250388873][412960.0.250388872][412960.0.250388874]'
+  Description: '鏄惁琚攣瀹�'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl b/_Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl
new file mode 100644
index 0000000..755761e
--- /dev/null
+++ b/_Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod LockUnlock (
+  MacroPlan owner,
+  CustomerOrders customerorders,
+  Boolean lock
+)
+{
+  Description: '閿佸畾/瑙i攣璁㈠崟'
+  TextBody:
+  [*
+    // Administrator Sep-21-2023 (created)
+    lastmodifytime := DateTime::ActualTime();
+    lastmodify := QuintiqUser::CurrentUser().Username();
+    if( lock ){
+      traverse( customerorders, Elements, order ){
+        order.IsLocked( lock );
+        order.LastModify( lastmodify );
+        order.LastModifyTime( lastmodifytime );
+        owner.OrderLockLog( relnew, 
+                            CustomerName := order.CustomerName(), 
+                            End := order.First().AsPlanningBaseSalesDemandInPeriod().End().Date(), 
+                            EndDate := order.EndDate(), 
+                            IsLocked := order.IsLocked(), 
+                            LastModify := order.LastModify(), 
+                            LastModifyTime := order.LastModifyTime(), 
+                            OrderID := order.OrderID(), 
+                            Price := order.Price(), 
+                            ProductID := order.ProductID(), 
+                            Quantity := order.Quantity(), 
+                            SalesSegmentName := order.SalesSegmentName(), 
+                            StockingPointID := order.StockingPointID(), 
+                            UnitOfMeasureName := order.UnitOfMeasureName(), 
+                            Notes := "娣诲姞閿佸畾" );
+        }
+      }else{
+        traverse( customerorders, Elements, order ){
+          order.IsLocked( lock );
+          order.LastModify( lastmodify );
+          order.LastModifyTime( lastmodifytime );
+          owner.OrderLockLog( relnew, 
+                              CustomerName := order.CustomerName(), 
+                              End := order.First().AsPlanningBaseSalesDemandInPeriod().End().Date(), 
+                              EndDate := order.EndDate(), 
+                              IsLocked := order.IsLocked(), 
+                              LastModify := order.LastModify(), 
+                              LastModifyTime := order.LastModifyTime(), 
+                              OrderID := order.OrderID(), 
+                              Price := order.Price(), 
+                              ProductID := order.ProductID(), 
+                              Quantity := order.Quantity(), 
+                              SalesSegmentName := order.SalesSegmentName(), 
+                              StockingPointID := order.StockingPointID(), 
+                              UnitOfMeasureName := order.UnitOfMeasureName(), 
+                              Notes := "瑙i櫎閿佸畾" );
+        }
+      }
+  *]
+}
diff --git a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
index 468a85c..15c7113 100644
--- a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
+++ b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_CreateFillingCapacityOrderScheme.qbl
@@ -57,7 +57,7 @@
       
          fillingOrder := owner.FillingCapacityOrder(relnew,BusinessType := order.BusinessType(),Customer := order.Customer(),CustomerID := order.CustomerID(),
                                                                            DemandDate := order.DemandDate(),ForecastDemandDate := order.ForecastDemandDate(),IsFilling := true,
-                                                                           OrderType := 'Pulling',PanelBigSheetQuantity := order.PanelBigSheetQuantity(),ProductID := order.ProductID(),
+                                                                           OrderType := '鎻愭媺',PanelBigSheetQuantity := order.PanelBigSheetQuantity(),ProductID := order.ProductID(),
                                                                            Quantity := order.Quantity(),SalesSegmentName := order.SalesSegmentName(),SalesAmount := order.SalesAmount(),
                                                                            SchemeName := schemeName,StockingPointID := order.StockingPointID(),UnitOfMeasureName := order.UnitOfMeasureName(),
                                                                            VerNo := verNoOrder.VerNo()
diff --git a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl
index 5040b96..2dbd374 100644
--- a/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl
+++ b/_Main/BL/Type_FilllingCapacityOrderScheme/StaticMethod_HasAlreadyRelease.qbl
@@ -7,10 +7,17 @@
   TextBody:
   [*
     // NBoTk Sep-19-2023 (created)
-    
+    check := false;
     value := selectobject( owner,FilllingCapacityOrderScheme,scheme,
                           scheme.IsRelease()
                           )
-    return value.IsRelease();
+    
+    
+    
+    if(not isnull( value)  )
+    {
+      check := true;
+    }
+    return check;
   *]
 }
diff --git a/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl
new file mode 100644
index 0000000..6c1f176
--- /dev/null
+++ b/_Main/BL/Type_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method RefreshCapacityAndSaleBudgeFilter
+{
+  TextBody:
+  [*
+    // yypsybs Sep-21-2023 (created)
+    info( "=====RefreshCapacityAndSaleBudgeFilter====" );
+    businessTypes := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, item.BusinessType() );
+    info( [String]businessTypes.Size() );
+    traverse( businessTypes, Elements, businessType ) {
+      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( this, businessType );
+    }
+    placeOfProductionOfArrays := selectuniquevalues( this, MappingCapacityAndSaleBudge, item, item.PlaceOfProductionOfArray() );
+    info( [String]placeOfProductionOfArrays.Size() );
+    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
+      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( this, placeOfProductionOfArray );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl b/_Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
index d59f61d..331fe2d 100644
--- a/_Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
+++ b/_Main/BL/Type_MPSync/StaticMethod_CapacityAndSaleBudgeYearsString.qbl
@@ -6,7 +6,7 @@
   [*
     // yypsybs Sep-19-2023 (created)
     years := construct( Strings );;
-    for( i := Date::ActualDate().Year(); i < Date::ActualDate().Year() + 10; i := i + 1 ) {
+    for( i := Date::ActualDate().Year() - 10; i <= Date::ActualDate().Year(); i := i + 1 ) {
       years.Add( [String]i );
     }
     return ifexpr( years.Size() > 0, years.Concatenate( ";" ), "" );
diff --git a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
index 3cb7643..87c2b27 100644
--- a/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_MPSync/StaticMethod_TestData.qbl
@@ -12,32 +12,53 @@
     info( "MPSync::TestData" );
     
     productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
-    
     info( "productCodeList : " + [String]productCodeList.Size() );
     
     mpSync.MappingCapacityAndSaleBudge( relflush );
-    for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
-      productCode := productCodeList.Element( i - 1 );
-      mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
-                                                                         ProductCode := productCode,
-                                                                         BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3 + 1), 
-                                                                         PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4 + 1)
-                                                                          );
-      for( month := 1; month <= 12; month := month + 1 ) {
-        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]month );
-        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
-        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]month );
-        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
-        field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]month );
-        field.Set( mappingCapacityAndSaleBudge, Real::Random( 20.0, 30.0 ) );
+    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year(); year := year + 1 ) {
+      for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
+        productCode := productCodeList.Element( i - 1 );
+        mappingCapacityAndSaleBudge := mpSync.MappingCapacityAndSaleBudge( relnew, 
+                                                                           YearNo := year,
+                                                                           ProductCode := productCode,
+                                                                           BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3 + 1), 
+                                                                           PlaceOfProductionOfArray := "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4 + 1)
+                                                                            );
+        for( month := 1; month <= 12; month := month + 1 ) {
+          field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInPCSInMonth" + [String]month );
+          field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
+          field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "CapacityInSheetInMonth" + [String]month );
+          field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
+          field := Reflection::FindAttribute( "MappingCapacityAndSaleBudge", "SaleAmountInMonth" + [String]month );
+          field.Set( mappingCapacityAndSaleBudge, Real::Random( 20000.0, 30000.0 ) );
+        }
+        mappingCapacityAndSaleBudge.CapacityInPCSTotal( mappingCapacityAndSaleBudge.GetCapacityInPCSInYear() );
+        mappingCapacityAndSaleBudge.CapacityInSheetTotal( mappingCapacityAndSaleBudge.GetCapacityInSheetInYear() );
+        mappingCapacityAndSaleBudge.SaleAmountTotal( mappingCapacityAndSaleBudge.GetSaleAmountInYear() );
       }
-      mappingCapacityAndSaleBudge.CapacityInPCSTotal( mappingCapacityAndSaleBudge.GetCapacityInPCSInYear() );
-      mappingCapacityAndSaleBudge.CapacityInSheetTotal( mappingCapacityAndSaleBudge.GetCapacityInSheetInYear() );
-      mappingCapacityAndSaleBudge.SaleAmountTotal( mappingCapacityAndSaleBudge.GetSaleAmountInYear() );
     }
+    result1 := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    info( "test MappingCapacityAndSaleBudge size : " + [String]result1.Size() );
     
-    result := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
-    
-    info( "MappingCapacityAndSaleBudge size : " + [String]result.Size() );
+    mpSync.MappingAnnualBudget( relflush );
+    for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year(); year := year + 1 ) {
+      for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
+        productCode := productCodeList.Element( i - 1 );
+        mappingAnnualBudget := mpSync.MappingAnnualBudget( relnew, 
+                                                           YearNo := year,
+                                                           ProductId := productCode
+                                                            );
+        for( month := 1; month <= 12; month := month + 1 ) {
+          field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlyModCapacity" + [String]month );
+          field.Set( mappingAnnualBudget, Real::Random( 20000.0, 30000.0 ) );
+          field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]month );
+          field.Set( mappingAnnualBudget, Real::Random( 20000.0, 30000.0 ) );
+          field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySales" + [String]month );
+          field.Set( mappingAnnualBudget, Real::Random( 20000.0, 30000.0 ) );
+        }
+      }
+    }
+    result2 := selectset( mpSync, MappingAnnualBudget, item, true );
+    info( "test MappingAnnualBudget size : " + [String]result2.Size() );
   *]
 }
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..a122190
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414384.0.874289974][414384.0.874289973][414384.0.874289975]'
+  Description: '涓氬姟绫诲瀷'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl
new file mode 100644
index 0000000..a947f89
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity1
+{
+  #keys: '3[414384.0.874289977][414384.0.874289976][414384.0.874289978]'
+  Description: '1鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl
new file mode 100644
index 0000000..b1f45a3
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity10
+{
+  #keys: '3[414384.0.874290004][414384.0.874290003][414384.0.874290005]'
+  Description: '10鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl
new file mode 100644
index 0000000..230ec57
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity11
+{
+  #keys: '3[414384.0.874290007][414384.0.874290006][414384.0.874290008]'
+  Description: '11鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl
new file mode 100644
index 0000000..d959531
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity12
+{
+  #keys: '3[414384.0.874290010][414384.0.874290009][414384.0.874290011]'
+  Description: '12鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl
new file mode 100644
index 0000000..0cad4a5
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity2
+{
+  #keys: '3[414384.0.874289980][414384.0.874289979][414384.0.874289981]'
+  Description: '2鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl
new file mode 100644
index 0000000..83b2395
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity3
+{
+  #keys: '3[414384.0.874289983][414384.0.874289982][414384.0.874289984]'
+  Description: '3鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl
new file mode 100644
index 0000000..587cb6d
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity4
+{
+  #keys: '3[414384.0.874289986][414384.0.874289985][414384.0.874289987]'
+  Description: '4鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl
new file mode 100644
index 0000000..188baf2
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity5
+{
+  #keys: '3[414384.0.874289989][414384.0.874289988][414384.0.874289990]'
+  Description: '5鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl
new file mode 100644
index 0000000..0b85232
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity6
+{
+  #keys: '3[414384.0.874289992][414384.0.874289991][414384.0.874289993]'
+  Description: '6鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl
new file mode 100644
index 0000000..1ec701b
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity7
+{
+  #keys: '3[414384.0.874289995][414384.0.874289994][414384.0.874289996]'
+  Description: '7鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl
new file mode 100644
index 0000000..66f263c
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity8
+{
+  #keys: '3[414384.0.874289998][414384.0.874289997][414384.0.874289999]'
+  Description: '8鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl
new file mode 100644
index 0000000..3e6b697
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlyModCapacity9
+{
+  #keys: '3[414384.0.874290001][414384.0.874290000][414384.0.874290002]'
+  Description: '9鏈堟ā缁勪骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl
new file mode 100644
index 0000000..f8d4c4d
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales1
+{
+  #keys: '3[414384.0.874290049][414384.0.874290048][414384.0.874290050]'
+  Description: '1鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl
new file mode 100644
index 0000000..e4969d8
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales10
+{
+  #keys: '3[414384.0.874290076][414384.0.874290075][414384.0.874290077]'
+  Description: '10鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl
new file mode 100644
index 0000000..e91c4cd
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales11
+{
+  #keys: '3[414384.0.874290079][414384.0.874290078][414384.0.874290080]'
+  Description: '11鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl
new file mode 100644
index 0000000..30a1a0b
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales12
+{
+  #keys: '3[414384.0.874290082][414384.0.874290081][414384.0.874290083]'
+  Description: '12鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl
new file mode 100644
index 0000000..898e38f
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales2
+{
+  #keys: '3[414384.0.874290052][414384.0.874290051][414384.0.874290053]'
+  Description: '2鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl
new file mode 100644
index 0000000..15a94ae
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales3
+{
+  #keys: '3[414384.0.874290055][414384.0.874290054][414384.0.874290056]'
+  Description: '3鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl
new file mode 100644
index 0000000..43b4653
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales4
+{
+  #keys: '3[414384.0.874290058][414384.0.874290057][414384.0.874290059]'
+  Description: '4鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl
new file mode 100644
index 0000000..7e5dce4
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales5
+{
+  #keys: '3[414384.0.874290061][414384.0.874290060][414384.0.874290062]'
+  Description: '5鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl
new file mode 100644
index 0000000..541e0c5
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales6
+{
+  #keys: '3[414384.0.874290064][414384.0.874290063][414384.0.874290065]'
+  Description: '6鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl
new file mode 100644
index 0000000..38e195c
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales7
+{
+  #keys: '3[414384.0.874290067][414384.0.874290066][414384.0.874290068]'
+  Description: '7鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl
new file mode 100644
index 0000000..2ba343e
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales8
+{
+  #keys: '3[414384.0.874290070][414384.0.874290069][414384.0.874290071]'
+  Description: '8鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl
new file mode 100644
index 0000000..dc656a9
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySales9
+{
+  #keys: '3[414384.0.874290073][414384.0.874290072][414384.0.874290074]'
+  Description: '9鏈堥攢鍞'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl
new file mode 100644
index 0000000..2bddbc1
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity1.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity1
+{
+  #keys: '3[414384.0.874290013][414384.0.874290012][414384.0.874290014]'
+  Description: '1鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl
new file mode 100644
index 0000000..9526d3c
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity10.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity10
+{
+  #keys: '3[414384.0.874290040][414384.0.874290039][414384.0.874290041]'
+  Description: '10鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl
new file mode 100644
index 0000000..5a8257c
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity11
+{
+  #keys: '3[414384.0.874290043][414384.0.874290042][414384.0.874290044]'
+  Description: '11鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl
new file mode 100644
index 0000000..245bdd7
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity12.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity12
+{
+  #keys: '3[414384.0.874290046][414384.0.874290045][414384.0.874290047]'
+  Description: '12鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl
new file mode 100644
index 0000000..c76ddae
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity2.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity2
+{
+  #keys: '3[414384.0.874290016][414384.0.874290015][414384.0.874290017]'
+  Description: '2鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl
new file mode 100644
index 0000000..b7b9a0b
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity3
+{
+  #keys: '3[414384.0.874290019][414384.0.874290018][414384.0.874290020]'
+  Description: '3鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl
new file mode 100644
index 0000000..666fb83
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity4.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity4
+{
+  #keys: '3[414384.0.874290022][414384.0.874290021][414384.0.874290023]'
+  Description: '4鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl
new file mode 100644
index 0000000..534a9d8
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity5
+{
+  #keys: '3[414384.0.874290025][414384.0.874290024][414384.0.874290026]'
+  Description: '5鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl
new file mode 100644
index 0000000..02aca20
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity6.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity6
+{
+  #keys: '3[414384.0.874290028][414384.0.874290027][414384.0.874290029]'
+  Description: '6鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl
new file mode 100644
index 0000000..51d0978
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity7
+{
+  #keys: '3[414384.0.874290031][414384.0.874290030][414384.0.874290032]'
+  Description: '7鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl
new file mode 100644
index 0000000..9551e3c
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity8
+{
+  #keys: '3[414384.0.874290034][414384.0.874290033][414384.0.874290035]'
+  Description: '8鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl
new file mode 100644
index 0000000..206054f
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MonthlySheetCapacity9
+{
+  #keys: '3[414384.0.874290037][414384.0.874290036][414384.0.874290038]'
+  Description: '9鏈堝疄鏁板ぇ寮犱骇鑳�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl
new file mode 100644
index 0000000..9f8ca6f
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductId
+{
+  #keys: '3[414384.0.874289946][414384.0.874289945][414384.0.874289947]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl b/_Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl
new file mode 100644
index 0000000..c970d34
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute YearNo
+{
+  #keys: '3[414384.0.874290125][414384.0.874290124][414384.0.874290126]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/DefaultValue_BusinessType.qbl b/_Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl
similarity index 100%
rename from _Main/BL/Type_CapacityAndSaleBudgeChartRow/DefaultValue_BusinessType.qbl
rename to _Main/BL/Type_MappingAnnualBudget/DefaultValue_BusinessType.qbl
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInPCSInYear.qbl
new file mode 100644
index 0000000..1d8303d
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInPCSInYear.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInPCSInYear () as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlyModCapacity" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
new file mode 100644
index 0000000..3606369
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInHalfYear (
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    fromMonth := 1 + ( halfNo - 1 ) * 6;
+    toMonth := 6 + ( halfNo - 1 ) * 6;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
new file mode 100644
index 0000000..9023738
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInSeason (
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    fromMonth := 1 + ( seasonNo - 1 ) * 3;
+    toMonth := 3 + ( seasonNo - 1 ) * 3;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl
new file mode 100644
index 0000000..7828eb3
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetCapacityInSheetInYear () as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl
new file mode 100644
index 0000000..bbb3166
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetSaleAmountInYear () as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySales" + [String]i );
+      result := result + field.GetReal( this );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl
new file mode 100644
index 0000000..e85f742
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByMonth (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: '閿�鍞锛圵锛�'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySales" + [String]monthNo );
+    value := sum( parent, 
+                  MappingAnnualBudget, 
+                  item, 
+                  item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                  field.GetReal( item ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl
new file mode 100644
index 0000000..679009e
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSaleByYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo
+) as Real
+{
+  Description: '閿�鍞锛圵锛�'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingAnnualBudget, 
+                   item, 
+                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   item.GetSaleAmountInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl
new file mode 100644
index 0000000..0bc221e
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByHalfYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingAnnualBudget, 
+                   item, 
+                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   item.GetCapacityInSheetInHalfYear( halfNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl
new file mode 100644
index 0000000..18801f0
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByMonth (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  Description: '浜ц兘-瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    field := Reflection::FindAttribute( "MappingAnnualBudget", "MonthlySheetCapacity" + [String]monthNo );
+    value := sum( parent, 
+                  MappingAnnualBudget, 
+                  item, 
+                  item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                  field.GetReal( item ) );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl
new file mode 100644
index 0000000..0d6087b
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetBySeason (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingAnnualBudget, 
+                   item, 
+                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   item.GetCapacityInSheetInSeason( seasonNo ) );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl
new file mode 100644
index 0000000..e63a38a
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetByYear.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetSheetByYear (
+  Strings productNo,
+  MPSync parent,
+  Number yearNo
+) as Real
+{
+  Description: '浜ц兘 - 瀹炴暟澶у紶'
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( parent, 
+                   MappingAnnualBudget, 
+                   item, 
+                   item.YearNo() = yearNo and productNo.Find( item.ProductId() ) > -1,
+                   item.GetCapacityInSheetInYear() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl b/_Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl
new file mode 100644
index 0000000..eeab2ce
--- /dev/null
+++ b/_Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type MappingAnnualBudget
+{
+  #keys: '5[414384.0.874289918][414384.0.874289916][0.0.0][414384.0.874289917][414384.0.874289919]'
+  BaseType: Object
+  Description: '骞村害棰勭畻鏁版嵁'
+  StructuredName: 'MappingAnnualBudgets'
+}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl
new file mode 100644
index 0000000..27563ee
--- /dev/null
+++ b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNewSupplyByHalfYear (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number halfNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    fromMonth := 1 + ( halfNo - 1 ) * 6;
+    toMonth := 6 + ( halfNo - 1 ) * 6;
+    result := 0.0;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      result := result + MappingCustomerOrder::GetNewSupplyByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl
new file mode 100644
index 0000000..478e518
--- /dev/null
+++ b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNewSupplyByMonth (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number monthNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    result := sum( macroPlan, 
+                   MappingCustomerOrder, 
+                   item, 
+                   productNo.Find( item.ProductID() ) > -1 
+                   and item.OrderDate().Year() = yearNo
+                   and item.OrderDate().Month() = monthNo,
+                   item.Quantity() * item.Price() );
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl
new file mode 100644
index 0000000..1a6ad83
--- /dev/null
+++ b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNewSupplyBySeason (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo,
+  Number seasonNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-18-2023 (created)
+    fromMonth := 1 + ( seasonNo - 1 ) * 3;
+    toMonth := 3 + ( seasonNo - 1 ) * 3;
+    result := 0.0;
+    for( i := fromMonth; i <= toMonth; i := i + 1 ) {
+      result := result + MappingCustomerOrder::GetNewSupplyByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl
new file mode 100644
index 0000000..bd09df8
--- /dev/null
+++ b/_Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNewSupplyByYear (
+  Strings productNo,
+  MacroPlan macroPlan,
+  Number yearNo
+) as Real
+{
+  TextBody:
+  [*
+    // yypsybs Sep-21-2023 (created)
+    result := 0.0;
+    for( i := 1; i <= 12; i := i + 1 ) {
+      result := result + MappingCustomerOrder::GetNewSupplyByMonth( productNo, macroPlan, yearNo, i );
+    }
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl b/_Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl
new file mode 100644
index 0000000..3816a37
--- /dev/null
+++ b/_Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute YearNo
+{
+  #keys: '3[414384.0.874271421][414384.0.874271420][414384.0.874271422]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
index a004017..d972699 100644
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl
@@ -15,7 +15,7 @@
     value := sum( parent, 
                   MappingCapacityAndSaleBudge, 
                   item, 
-                  productNo.Find( item.ProductCode() ) > -1,
+                  item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
                   field.GetReal( item ) );
     return value;
   *]
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
index c5ef67c..0d32878 100644
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl
@@ -13,7 +13,7 @@
     result := sum( parent, 
                    MappingCapacityAndSaleBudge, 
                    item, 
-                   productNo.Find( item.ProductCode() ) > -1,
+                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
                    item.GetSaleAmountInYear() );
     return result;
   *]
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
index d0d21e7..b3c236b 100644
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl
@@ -14,7 +14,7 @@
     result := sum( parent, 
                    MappingCapacityAndSaleBudge, 
                    item, 
-                   productNo.Find( item.ProductCode() ) > -1,
+                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
                    item.GetCapacityInSheetInHalfYear( halfNo ) );
     return result;
   *]
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
index 03c0529..8e0721d 100644
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl
@@ -15,7 +15,7 @@
     value := sum( parent, 
                   MappingCapacityAndSaleBudge, 
                   item, 
-                  productNo.Find( item.ProductCode() ) > -1,
+                  item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
                   field.GetReal( item ) );
     return value;
   *]
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
index 3426e30..db1803a 100644
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl
@@ -11,15 +11,10 @@
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    
-    list := selectset( parent, 
-                       MappingCapacityAndSaleBudge, 
-                       item, 
-                       productNo.Find( item.ProductCode() ) > -1 );
     result := sum( parent, 
                    MappingCapacityAndSaleBudge, 
                    item, 
-                   productNo.Find( item.ProductCode() ) > -1,
+                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
                    item.GetCapacityInSheetInSeason( seasonNo ) );
     return result;
   *]
diff --git a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
index 124d7ff..21a4a50 100644
--- a/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
+++ b/_Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl
@@ -13,7 +13,7 @@
     result := sum( parent, 
                    MappingCapacityAndSaleBudge, 
                    item, 
-                   productNo.Find( item.ProductCode() ) > -1,
+                   item.YearNo() = yearNo and productNo.Find( item.ProductCode() ) > -1,
                    item.GetCapacityInSheetInYear() );
     return result;
   *]
diff --git "a/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl" "b/_Main/BL/Type_OrderLockLog/Attribute_IsLocked\0432.qbl"
similarity index 87%
rename from "_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl"
rename to "_Main/BL/Type_OrderLockLog/Attribute_IsLocked\0432.qbl"
index 7594124..05d9136 100644
--- "a/_Main/BL/Type_OrderLockLog/Attribute_IsFirmed\0432.qbl"
+++ "b/_Main/BL/Type_OrderLockLog/Attribute_IsLocked\0432.qbl"
@@ -1,6 +1,6 @@
 Quintiq file version 2.0
 #parent: #root
-Attribute IsFirmed
+Attribute IsLocked
 {
   #keys: '3[412960.0.217504477][412960.0.217504476][412960.0.217504478]'
   ValueType: Boolean
diff --git a/_Main/BL/Type_OrderLockLog/Attribute_Notes.qbl b/_Main/BL/Type_OrderLockLog/Attribute_Notes.qbl
new file mode 100644
index 0000000..2951098
--- /dev/null
+++ b/_Main/BL/Type_OrderLockLog/Attribute_Notes.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[412960.0.250388891][412960.0.250388890][412960.0.250388892]'
+  Description: '澶囨敞'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
index 5a26632..cf729ec 100644
--- a/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl
@@ -43,26 +43,26 @@
     tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
     
     traverse ( toExportList, Elements, toExport ) {
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "鐗╂枡缂栫爜" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "鐗╂枡鍚嶇О" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsPanelMaterial(), "闈㈡澘鐗╂枡鏍囪瘑" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.ProduceRequiredDate() = Date::MinDate(), "", dateToString.Convert( toExport.ProduceRequiredDate() ) ), "浜よ揣鏃ユ湡" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.PRSuggestionDate() = Date::MinDate(), "", dateToString.Convert( toExport.PRSuggestionDate() ) ), "PR寤鸿鏃ユ湡" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "浜よ揣鏁伴噺" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "涓氬姟绫诲瀷" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrganCode(), "缁勭粐缂栫爜" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsLongLeadItem(), "鏄惁闀垮懆鏈�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsGenericMaterial(), "鏄惁涓撶敤鏂�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MaterialMRPType(), "鐗╂枡璁″垝绛栫暐" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.LeadTime(), "鎻愬墠鏈�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendTimeString(), "鍙戦�佹椂闂�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendBy(), "鍙戦�佷汉" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "鐗╂枡缂栫爜" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "鐗╂枡鍚嶇О" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsPanelMaterial(), "闈㈡澘鐗╂枡鏍囪瘑" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.ProduceRequiredDate() = Date::MinDate(), "", dateToString.Convert( toExport.ProduceRequiredDate() ) ), "浜よ揣鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.PRSuggestionDate() = Date::MinDate(), "", dateToString.Convert( toExport.PRSuggestionDate() ) ), "PR寤鸿鏃ユ湡" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "浜よ揣鏁伴噺" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "涓氬姟绫诲瀷" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrganCode(), "缁勭粐缂栫爜" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsLongLeadItem(), "鏄惁闀垮懆鏈�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.IsGenericMaterial(), "鏄惁涓撶敤鏂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MaterialMRPType(), "鐗╂枡璁″垝绛栫暐" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.LeadTime(), "鎻愬墠鏈�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendTimeString(), "鍙戦�佹椂闂�" );
+      PRData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendBy(), "鍙戦�佷汉" );
     }
     
     xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
diff --git a/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl b/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
new file mode 100644
index 0000000..f40c634
--- /dev/null
+++ b/_Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GeneratesTheSpecifiedXMLColumn (
+  XMLDOMDocument xmlDOMDocument,
+  XMLDOMElement tableElement,
+  String value,
+  String columnName
+)
+{
+  TextBody:
+  [*
+    columnElements := tableElement.GetElementsByTagName( "column" );
+    
+    traverse ( columnElements, Elements, ce ) {
+      nameElement := ce.GetElementByTagName( "name", 0 );
+      if ( nameElement.TextContent() = columnName ) {
+        cell := xmlDOMDocument.CreateElement( "cell" );
+        cell.SetAttribute( "value", value );
+        ce.AppendChild( cell );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
index c0a44ae..dea5e41 100644
--- a/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
+++ b/_Main/BL/Type_PRHistoryData/StaticMethod_ExportTheFileStream.qbl
@@ -40,23 +40,23 @@
     tableElement:= xmlDOMDocument.GetElementByTagName( "table", 0 );
     
     traverse ( toExportList, Elements, toExport ) {
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "闆朵欢鍙�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "闆朵欢鍚嶇О" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.ProduceRequiredDate() = Date::MinDate(), "", dateToString.Convert( toExport.ProduceRequiredDate() ) ), "浜よ揣鏃ユ湡" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "闇�姹傛暟閲�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "浜嬩笟閮�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrganCode(), "缁勭粐缂栫爜" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendTimeString(), "鍙戦�佹椂闂�" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReleaseBy(), "鍙戦�佷汉" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveTimeString(), "ERP鎺ユ敹鏃堕棿" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveStatus(), "ERP鎺ユ敹鐘舵��" );
-      MatAttrSettingAndPlanStrategy::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveError(), "閿欒淇℃伅鎻忚堪" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductID(), "闆朵欢鍙�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProductName(), "闆朵欢鍚嶇О" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, ifexpr( toExport.ProduceRequiredDate() = Date::MinDate(), "", dateToString.Convert( toExport.ProduceRequiredDate() ) ), "浜よ揣鏃ユ湡" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, [String]toExport.Quantity(), "闇�姹傛暟閲�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.MRPCalverNo(), "MRP璁$畻鐗堟湰鍙�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.BusinessType(), "浜嬩笟閮�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.OrganCode(), "缁勭粐缂栫爜" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderCode(), "渚涘簲鍟嗕唬鐮�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ProviderName(), "渚涘簲鍟嗗悕绉�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.StockingPointID(), "鏀惰揣搴撳瓨鐐�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.UnitOfMeasure(), "璁¢噺鍗曚綅" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendStatus(), "PR鏁版嵁鍙戦�佺姸鎬�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.SendTimeString(), "鍙戦�佹椂闂�" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReleaseBy(), "鍙戦�佷汉" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveTimeString(), "ERP鎺ユ敹鏃堕棿" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveStatus(), "ERP鎺ユ敹鐘舵��" );
+      PRHistoryData::GeneratesTheSpecifiedXMLColumn( xmlDOMDocument, tableElement, toExport.ReceiveError(), "閿欒淇℃伅鎻忚堪" );
     }
     
     xmlDOMSerializer := xmlDOMImplementation.CreateSerializer();
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
new file mode 100644
index 0000000..f40c634
--- /dev/null
+++ b/_Main/BL/Type_PRHistoryData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GeneratesTheSpecifiedXMLColumn (
+  XMLDOMDocument xmlDOMDocument,
+  XMLDOMElement tableElement,
+  String value,
+  String columnName
+)
+{
+  TextBody:
+  [*
+    columnElements := tableElement.GetElementsByTagName( "column" );
+    
+    traverse ( columnElements, Elements, ce ) {
+      nameElement := ce.GetElementByTagName( "name", 0 );
+      if ( nameElement.TextContent() = columnName ) {
+        cell := xmlDOMDocument.CreateElement( "cell" );
+        cell.SetAttribute( "value", value );
+        ce.AppendChild( cell );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
new file mode 100644
index 0000000..9434404
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetCoeffcientByName.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetCoeffcientByName (
+  MacroPlan owner,
+  String businessType,
+  String name
+) as Real
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    
+    data := selectobject( owner,PriorityFactor,p,
+                          p.BusinessType() = businessType and p.Name() = name
+                          )
+    
+    return data.Coefficient();
+  *]
+}
diff --git a/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
new file mode 100644
index 0000000..98115c4
--- /dev/null
+++ b/_Main/BL/Type_PriorityFactor/StaticMethod_GetNameList.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetNameList (
+  MacroPlan owner,
+  String businessType
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    value := "";
+    
+    strList := selectuniquevalues(  owner,PriorityFactor,p,
+                                   p.BusinessType() = businessType,
+                                    p.Name()
+                                   );
+    
+    if( not isnull( strList )  )
+    {
+       value := strList.Concatenate( ";" );
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
new file mode 100644
index 0000000..55e5bd0
--- /dev/null
+++ b/_Main/BL/Type_PriorityPolicy/StaticMethod_RollBackStr.qbl
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RollBackStr (
+  MacroPlan owner,
+  String businessType,
+  String stringData
+) as String
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    value := stringData;
+    
+    symbolList := construct( structured[String]);
+    symbolList.Add( "+")
+    symbolList.Add( "-")
+    symbolList.Add( "x")
+    symbolList.Add( "/")
+    symbolList.Add( "(")
+    symbolList.Add( ")")
+    
+    traverse( symbolList,Elements,e)
+    {
+        if( stringData.EndsWith( e ))
+        {
+             end := stringData.Length() - e.Length();
+             value := stringData.SubString( 0,end);
+        } 
+    }
+    
+    nameList := PriorityFactor::GetDataByBusinessType(  owner,businessType);       
+    traverse( nameList,Elements,e)
+    {
+        if( stringData.EndsWith( e.Name()))
+        {
+             end := stringData.Length() - e.Name().Length();
+             value := stringData.SubString( 0,end);
+        } 
+    }
+    
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..16f7189
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414382.0.504275379][414382.0.504275378][414382.0.504275380]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl b/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
new file mode 100644
index 0000000..21774fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414382.0.504275376][414382.0.504275375][414382.0.504275377]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl b/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..afabecd
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414382.0.504275385][414382.0.504275384][414382.0.504275386]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl b/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
new file mode 100644
index 0000000..5088806
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_DemandDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DemandDate
+{
+  #keys: '3[414382.0.504275370][414382.0.504275369][414382.0.504275371]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl b/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
new file mode 100644
index 0000000..6f38dd5
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_PriorityResultScore.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityResultScore
+{
+  #keys: '3[414382.0.504275396][414382.0.504275395][414382.0.504275397]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl b/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
new file mode 100644
index 0000000..b9b828f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414382.0.504275367][414382.0.504275366][414382.0.504275368]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl b/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
new file mode 100644
index 0000000..b18ef2c
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414382.0.504275361][414382.0.504275360][414382.0.504275362]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..1ade98f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414382.0.504275382][414382.0.504275381][414382.0.504275383]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl b/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..db04a7f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414382.0.504275364][414382.0.504275363][414382.0.504275365]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..8877500
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414382.0.504275373][414382.0.504275372][414382.0.504275374]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/DefaultValue_BusinessType.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl
similarity index 100%
copy from _Main/BL/Type_CapacityAndSaleBudgeChartRow/DefaultValue_BusinessType.qbl
copy to _Main/BL/Type_PriorityResult/DefaultValue_BusinessType.qbl
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl
new file mode 100644
index 0000000..98649b2
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_ProductID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: ProductID
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..fbb83fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..b2012de
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl b/_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl
new file mode 100644
index 0000000..cd7846f
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/Function_CalcPriorityResultScore.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcPriorityResultScore
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    
+    businessTypeScore := max( this,PriorityResultBusinessTypeDetail,p,
+                              p.PriorityTotalScore()
+                              );
+    
+    groupScore := max( this,PriorityResultGroupDetail,p,
+                       p.PriorityTotalScore()
+                       );
+    
+    value := maxvalue( businessTypeScore,groupScore);
+    
+    this.PriorityResultScore( value );
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl b/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
new file mode 100644
index 0000000..3d6983a
--- /dev/null
+++ b/_Main/BL/Type_PriorityResult/_ROOT_Type_PriorityResult.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PriorityResult
+{
+  #keys: '5[414382.0.504275125][414382.0.504275123][0.0.0][414382.0.504275124][414382.0.504275126]'
+  BaseType: Object
+  StructuredName: 'PriorityResults'
+}
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
new file mode 100644
index 0000000..5e14913
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_CheckCanTopping.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CheckCanTopping (
+  PriorityResultBusinessTypeDetail businessTypeDetails
+) as Boolean
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    groupDetails := selectset( businessTypeDetails.PriorityResult(),PriorityResultGroupDetail,p,true);
+    
+    return isnull( groupDetails);
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
new file mode 100644
index 0000000..8030509
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/StaticMethod_EmergencyTopping.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod EmergencyTopping (
+  MacroPlan owner,
+  PriorityResultBusinessTypeDetail businessTypeDetails
+)
+{
+  TextBody:
+  [*
+    // NBoTk Sep-21-2023 (created)
+    
+    
+    maxPriorityResult := max( owner,PriorityResult,p,
+                              p.PriorityResultScore()
+                              );
+    
+    topScore := maxPriorityResult + 1;
+    businessTypeDetails.PriorityTotalScore(topScore);
+  *]
+}
diff --git a/_Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl b/_Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl
new file mode 100644
index 0000000..77e783e
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultBusinessTypeDetail/_ROOT_Type_PriorityResultBusinessTypeDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization PriorityResultBusinessTypeDetail
+{
+  #keys: '2[414382.0.504275146][414382.0.504275145]'
+  Description: '浜嬩笟閮ㄤ紭鍏堢骇缁撴灉鏄庣粏'
+  Parent: PriorityResultDetail
+  StructuredName: 'PriorityResultBusinessTypeDetails'
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..0d853fd
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_BusinessType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414382.0.504275420][414382.0.504275419][414382.0.504275421]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
new file mode 100644
index 0000000..e5c3e9e
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_Customer.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Customer
+{
+  #keys: '3[414382.0.504275411][414382.0.504275410][414382.0.504275412]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
new file mode 100644
index 0000000..3afa6f2
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_CustomerID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomerID
+{
+  #keys: '3[414382.0.504275429][414382.0.504275428][414382.0.504275430]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
new file mode 100644
index 0000000..8218754
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_DemandDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DemandDate
+{
+  #keys: '3[414382.0.504275423][414382.0.504275422][414382.0.504275424]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
new file mode 100644
index 0000000..30c7925
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorGradingName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityFactorGradingName
+{
+  #keys: '3[414382.0.504275468][414382.0.504275467][414382.0.504275469]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
new file mode 100644
index 0000000..2941275
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityFactorName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityFactorName
+{
+  #keys: '3[414382.0.504275458][414382.0.504275457][414382.0.504275459]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
new file mode 100644
index 0000000..58f721a
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityPolicyName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityPolicyName
+{
+  #keys: '3[414382.0.504275439][414382.0.504275438][414382.0.504275440]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
new file mode 100644
index 0000000..7ef6592
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityResultScore.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityResultScore
+{
+  #keys: '3[414382.0.504275426][414382.0.504275425][414382.0.504275427]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl
new file mode 100644
index 0000000..6be72f0
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_PriorityTotalScore.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PriorityTotalScore
+{
+  #keys: '3[414382.0.504275485][414382.0.504275484][414382.0.504275486]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
new file mode 100644
index 0000000..6da2ce3
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414382.0.504275414][414382.0.504275413][414382.0.504275415]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
new file mode 100644
index 0000000..96cedff
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_SalesSegmentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesSegmentName
+{
+  #keys: '3[414382.0.504275435][414382.0.504275434][414382.0.504275436]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..6f0a2fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414382.0.504275417][414382.0.504275416][414382.0.504275418]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..7abadad
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414382.0.504275432][414382.0.504275431][414382.0.504275433]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/DefaultValue_BusinessType.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl
similarity index 100%
copy from _Main/BL/Type_CapacityAndSaleBudgeChartRow/DefaultValue_BusinessType.qbl
copy to _Main/BL/Type_PriorityResultDetail/DefaultValue_BusinessType.qbl
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl
new file mode 100644
index 0000000..e02a336
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_Customer.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: Customer
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl
new file mode 100644
index 0000000..66ae438
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_CustomerID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: CustomerID
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl
new file mode 100644
index 0000000..521966d
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_SalesSegmentName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: SalesSegmentName
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl
new file mode 100644
index 0000000..fbb83fc
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_StockingPointID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: StockingPointID
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl b/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..b2012de
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/DefaultValue_UnitOfMeasureName.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+  TargetAttribute: UnitOfMeasureName
+}
diff --git a/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl b/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
new file mode 100644
index 0000000..26b2f55
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultDetail/_ROOT_Type_PriorityResultDetail.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PriorityResultDetail
+{
+  #keys: '5[414382.0.504275135][414382.0.504275133][0.0.0][414382.0.504275134][414382.0.504275136]'
+  BaseType: Object
+  StructuredName: 'PriorityResultDetails'
+}
diff --git a/_Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl b/_Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl
new file mode 100644
index 0000000..427aa63
--- /dev/null
+++ b/_Main/BL/Type_PriorityResultGroupDetail/_ROOT_Type_PriorityResultGroupDetail.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization PriorityResultGroupDetail
+{
+  #keys: '2[414382.0.504275155][414382.0.504275154]'
+  Description: '闆嗗洟浼樺厛绾х粨鏋滄槑缁�'
+  Parent: PriorityResultDetail
+  StructuredName: 'PriorityResultGroupDetails'
+}
diff --git "a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl" "b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl"
new file mode 100644
index 0000000..2c07b9d
--- /dev/null
+++ "b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart\04395.qbl"
@@ -0,0 +1,301 @@
+Quintiq file version 2.0
+#parent: #root
+Method CapacityAndSaleBudgeChart (
+  MacroPlans macroPlans,
+  Boolean isCapacity,
+  String groupBy,
+  String byBusinessTypeOrByOrgCode,
+  CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
+  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months,
+  MPSync mpSync,
+  GlobalOTDTable otdTable,
+  MacroPlan mappingParent
+)
+{
+  Description: '鎸夊叆鍙傚鐞嗘暟鎹紝浜х敓闇�瑕佺殑CapacityAndSaleBudgeChartElement'
+  TextBody:
+  [*
+    // yypsybs Sep-19-2023 (created)
+    // true, false
+    info( isCapacity );
+    // 鏈�;瀛e害;鍗婂勾;骞�
+    info( groupBy );
+    // 闈㈡澘鍩哄湴;浜嬩笟閮�
+    info( byBusinessTypeOrByOrgCode );
+    traverse( businessTypes, Elements, businessType ) {
+      info( "businessType : " + businessType.BusinessType() );
+    }
+    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
+      info( "placeOfProductionOfArray : " + placeOfProductionOfArray.PlaceOfProductionOfArray() );
+    }
+    traverse( macroPlans, Elements, macroPlan ) {
+      info( "macroPlan : " + macroPlan.ScenarioName() );  
+    }
+    // 骞翠唤涓嶉�夋椂鍏ㄩ��
+    if( years.Size() = 0 ) {
+      years := selectsortedset( this, CapacityAndSaleBudgeFilterYear, item, true, item.YearNo() );
+    }
+    traverse( years, Elements, year ) {
+      info( "yearNo : " + [String]year.YearNo() );
+    }
+    // 鏈堜唤涓嶉�夋椂鍏ㄩ��
+    if( months.Size() = 0 ) {
+      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, true, item.MonthNo() );
+    }
+    traverse( months, Elements, month ) {
+      info( "monthNo : " + [String]month.MonthNo() );
+    }
+    
+    // ====娓呯悊鏃ф暟鎹�====
+    this.CapacityAndSaleBudgeChartRow( relflush );
+    this.CapacityAndSaleBudgeChartElement( relflush );
+    
+    // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
+    historyData := selectset( mpSync, MappingCapacityAndSaleBudge, item, true );
+    if( businessTypes.Size() > 0 ) {
+      businessTypeStrings := selectuniquevalues( businessTypes, Elements, item, true, item.BusinessType() );
+      historyData := selectset( historyData, Elements, item, businessTypeStrings.Find( item.BusinessType() ) > -1 );
+    }
+    if( placeOfProductionOfArrays.Size() > 0 ) {
+      placeOfProductionOfArrayStrings := selectuniquevalues( placeOfProductionOfArrays, Elements, item, true, item.PlaceOfProductionOfArray() );
+      historyData := selectset( historyData, Elements, item, placeOfProductionOfArrayStrings.Find( item.PlaceOfProductionOfArray() ) > -1 );
+    }
+    //info( "historyData : " + [String]historyData.Size() );
+    traverse( historyData, Elements, item ) {
+      row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, item.BusinessType(), item.PlaceOfProductionOfArray() );
+      // 璁板綍姣忚鍖呭惈鍝簺product
+      CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, item.ProductCode() );
+    }
+    rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
+    //info( "rows : " + [String]rows.Size() );
+    placeOfProductionOfArrayList := selectuniquevalues( historyData, Elements, item, item.PlaceOfProductionOfArray() );
+    businessTypeList := selectuniquevalues( historyData, Elements, item, item.BusinessType() );
+    // 鐢熸垚鍥捐〃鍏冪礌
+    traverse( years, Elements, year ) {
+      info( "process year start : " + [String]year.YearNo() );
+      if( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "骞�" ) {
+        // 鐩爣
+        traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
+          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
+          this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
+                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                 Quantity := ifexpr( isCapacity,
+                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
+                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
+                                                 );  
+          // S&OP
+          traverse( macroPlans, Elements, macroPlan ) {
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
+                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
+                                                                       )
+                                                   ); 
+          }                    
+        }
+      } 
+      if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鍗婂勾" ) {
+        for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
+          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
+            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
+                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
+                                                   );  
+            // S&OP
+            traverse( macroPlans, Elements, macroPlan ) {
+              this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                     TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
+                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                     Quantity := ifexpr( isCapacity,
+                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
+                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) 
+                                                                         )
+                                                     ); 
+            }                    
+          }
+        }
+      }
+      if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "瀛e害" ) {
+        for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
+          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
+            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
+      //      info( "productCodeList : " + [String]productCodeList.Size() );
+      //      info( "MappingCapacityAndSaleBudge::GetSheetBySeason : " + [String]MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) );
+      //      info( "seasonNo : " + [String]seasonNo );
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
+                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
+                                                   );  
+      //      info( "productCodeList : " + [String]productCodeList.Size() );
+            // S&OP
+            traverse( macroPlans, Elements, macroPlan ) {
+              this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                     TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
+                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                     Quantity := ifexpr( isCapacity,
+                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
+                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
+                                                                         )
+                                                     ); 
+            }                    
+          }
+        }
+      }
+      if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鏈�" ) {
+        traverse( months, Elements, month ) {
+          info( "process month start : " + [String]month.MonthNo() );
+          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
+          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
+            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
+                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
+                                                   );  
+            // S&OP
+            traverse( macroPlans, Elements, macroPlan ) {
+              this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                     TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
+                                                     BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
+                                                     Quantity := ifexpr( isCapacity,
+                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
+                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
+                                                                         )
+                                                     ); 
+            }
+          }
+          info( "process month end : " + [String]month.MonthNo() );
+        }
+      }
+      if( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "骞�" ) {
+        // 鐩爣
+        traverse( businessTypeList, Elements, businessType ) {
+          productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
+          this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
+                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                 Quantity := ifexpr( isCapacity,
+                                                                     MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, year.YearNo() ),
+                                                                     MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, year.YearNo() ) )
+                                                 );  
+          // S&OP
+          traverse( macroPlans, Elements, macroPlan ) {
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ),
+                                                                       MappingCustomerOrder::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
+                                                                       )
+                                                   ); 
+          }                    
+        }
+      } 
+      if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鍗婂勾" ) {
+        for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
+          traverse( businessTypeList, Elements, businessType ) {
+            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ),
+                                                                       MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, year.YearNo(), halfNo ) )
+                                                   );  
+            // S&OP
+            traverse( macroPlans, Elements, macroPlan ) {
+              this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                     TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
+                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                     Quantity := ifexpr( isCapacity,
+                                                                         Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
+                                                                         MappingCustomerOrder::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) 
+                                                                         )
+                                                     ); 
+            }                    
+          }
+        }
+      }
+      if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "瀛e害" ) {
+        for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
+          info( "process season start : " + [String]seasonNo );
+          traverse( businessTypeList, Elements, businessType ) {
+            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ),
+                                                                       MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, year.YearNo(), seasonNo ) )
+                                                   );  
+            // S&OP
+            traverse( macroPlans, Elements, macroPlan ) {
+              this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                     TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
+                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                     Quantity := ifexpr( isCapacity,
+                                                                         Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
+                                                                         MappingCustomerOrder::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
+                                                                         )
+                                                     ); 
+            }                    
+          }
+          info( "process season end : " + [String]seasonNo );
+        }
+      }
+      if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鏈�" ) {
+        traverse( months, Elements, month ) {
+          info( "process month start : " + [String]month.MonthNo() );
+          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
+          traverse( businessTypeList, Elements, businessType ) {
+            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
+            this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                   Quantity := ifexpr( isCapacity,
+                                                                       MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ),
+                                                                       MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, year.YearNo(), month.MonthNo() ) )
+                                                   );  
+            // S&OP
+            traverse( macroPlans, Elements, macroPlan ) {
+              this.CapacityAndSaleBudgeChartElement( relnew, 
+                                                     TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
+                                                     BusinessTypeOrPlaceOfProductionOfArray := businessType, 
+                                                     Quantity := ifexpr( isCapacity,
+                                                                         Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
+                                                                         MappingCustomerOrder::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
+                                                                         )
+                                                     ); 
+            }            
+          }
+          info( "process month end : " + [String]month.MonthNo() );
+        }
+      }
+      info( "process year end : " + [String]year.YearNo() )
+    }
+    //info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
+    //traverse( this, CapacityAndSaleBudgeChartRow, row ) {
+    //  info( "==鈫�==" );
+    //  info( row.BusinessType() );
+    //  info( row.PlaceOfProductionOfArray() );
+    //  elements := selectset( row, CapacityAndSaleBudgeChartRowProduct, cell, true );
+    //  info( elements.Size() );
+    //  info( row.GetProductCodes().Concatenate( " | " ) );
+    //  info( "==鈫�==" );
+    //}
+  *]
+}
diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
index 69f306b..2f62201 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl
@@ -13,7 +13,11 @@
   MacroPlan mappingParent
 )
 {
-  Description: '鎸夊叆鍙傚鐞嗘暟鎹紝浜х敓闇�瑕佺殑CapacityAndSaleBudgeChartElement'
+  Description:
+  [*
+    鎸夊叆鍙傚鐞嗘暟鎹紝浜х敓闇�瑕佺殑CapacityAndSaleBudgeChartElement
+    锛侊紒锛侊紒搴熷純锛侊紒锛侊紒
+  *]
   TextBody:
   [*
     // yypsybs Sep-19-2023 (created)
@@ -56,18 +60,20 @@
         productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
         this.CapacityAndSaleBudgeChartElement( relnew, 
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
-                                               BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                Quantity := ifexpr( isCapacity,
                                                                    MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
-                                                                   MappingForecast::GetQuantityByYear( productCodeList, mappingParent, [Number]year ) )
+                                                                   // todo QID 23
+                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                                );  
         // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
-                                                 BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ),
+                                                                     // todo
                                                                      0.0 )
                                                  ); 
         }                    
@@ -79,16 +85,16 @@
           productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-                                                 BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
-                                                                     MappingForecast::GetQuantityByHalfYear( productCodeList, mappingParent, [Number]year, halfNo ) )
+                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( isCapacity,
                                                                        Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ),
                                                                        0.0 )
@@ -106,17 +112,17 @@
     //      info( "seasonNo : " + [String]seasonNo );
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
-                                                 BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
-                                                                     MappingForecast::GetQuantityBySeason( productCodeList, mappingParent, [Number]year, seasonNo ) )
+                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                  );  
     //      info( "productCodeList : " + [String]productCodeList.Size() );
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( isCapacity,
                                                                        Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ),
                                                                        0.0 )
@@ -127,20 +133,21 @@
     }
     if ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鏈�" ) {
       for( monthNo := 1; monthNo <= 12; monthNo := monthNo + 1 ) {
+        monthNoString := ifexpr( monthNo <= 9, "0" + [String]monthNo, [String]monthNo );
         traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
           productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
           this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-鐩爣",
-                                                 BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
+                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
-                                                                     MappingForecast::GetQuantityByMonth( productCodeList, mappingParent, [Number]year, monthNo ) )
+                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrOrgCode := placeOfProductionOfArray, 
+                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
+                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
                                                    Quantity := ifexpr( isCapacity,
                                                                        Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ),
                                                                        0.0 )
@@ -155,16 +162,16 @@
         productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
         this.CapacityAndSaleBudgeChartElement( relnew, 
                                                TimeStringAndScenarioName := [String]year + "骞�-鐩爣",
-                                               BusinessTypeOrOrgCode := businessType, 
+                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                Quantity := ifexpr( isCapacity,
                                                                    MappingCapacityAndSaleBudge::GetSheetByYear( productCodeList, mpSync, [Number]year ),
-                                                                   MappingForecast::GetQuantityByYear( productCodeList, mappingParent, [Number]year ) )
+                                                                   MappingAnnualBudget::GetSheetByYear( productCodeList, mpSync, [Number]year ) )
                                                );  
         // S&OP
         traverse( macroPlans, Elements, macroPlan ) {
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + macroPlan.ScenarioName(),
-                                                 BusinessTypeOrOrgCode := businessType, 
+                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, [Number]year ),
                                                                      0.0 )
@@ -178,16 +185,16 @@
           productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-                                                 BusinessTypeOrOrgCode := businessType, 
+                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      MappingCapacityAndSaleBudge::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ),
-                                                                     MappingForecast::GetQuantityByHalfYear( productCodeList, mappingParent, [Number]year, halfNo ) )
+                                                                     MappingAnnualBudget::GetSheetByHalfYear( productCodeList, mpSync, [Number]year, halfNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrOrgCode := businessType, 
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( isCapacity,
                                                                        Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, [Number]year, halfNo ),
                                                                        0.0 )
@@ -202,16 +209,16 @@
           productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
           this.CapacityAndSaleBudgeChartElement( relnew, 
                                                  TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
-                                                 BusinessTypeOrOrgCode := businessType, 
+                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      MappingCapacityAndSaleBudge::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ),
-                                                                     MappingForecast::GetQuantityBySeason( productCodeList, mappingParent, [Number]year, seasonNo ) )
+                                                                     MappingAnnualBudget::GetSheetBySeason( productCodeList, mpSync, [Number]year, seasonNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
                                                    TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrOrgCode := businessType, 
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( isCapacity,
                                                                        Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, [Number]year, seasonNo ),
                                                                        0.0 )
@@ -222,20 +229,21 @@
     }
     if ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鏈�" ) {
       for( monthNo := 1; monthNo <= 12; monthNo := monthNo + 1 ) {
+        monthNoString := ifexpr( monthNo <= 9, "0" + [String]monthNo, [String]monthNo );
         traverse( businessTypeList, Elements, businessType ) {
           productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
           this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-鐩爣",
-                                                 BusinessTypeOrOrgCode := businessType, 
+                                                 TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
+                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                  Quantity := ifexpr( isCapacity,
                                                                      MappingCapacityAndSaleBudge::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ),
-                                                                     MappingForecast::GetQuantityByMonth( productCodeList, mappingParent, [Number]year, monthNo ) )
+                                                                     MappingAnnualBudget::GetSheetByMonth( productCodeList, mpSync, [Number]year, monthNo ) )
                                                  );  
           // S&OP
           traverse( macroPlans, Elements, macroPlan ) {
             this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + [String]monthNo + "鏈�-" + macroPlan.ScenarioName(),
-                                                   BusinessTypeOrOrgCode := businessType, 
+                                                   TimeStringAndScenarioName := [String]year + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
                                                    Quantity := ifexpr( isCapacity,
                                                                        Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, [Number]year, monthNo ),
                                                                        0.0 )
diff --git a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
index 6688d88..a441cd3 100644
--- a/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl
@@ -52,7 +52,7 @@
         // 璁板綍姣忚鍖呭惈鍝簺product
         CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
       } else {
-    //    info( "111111" );
+        info( "no boms for product : " + productCode );
       }
     }
     info( "CapacityAndSaleBudgeCompareItemRow : " + [String]selectset( this, CapacityAndSaleBudgeCompareItemRow, item, true ).Size() );
@@ -71,32 +71,29 @@
     // 鏍煎紡锛� 闈㈡澘鍒嗛厤閲� - 骞� - 鏈堬紙1-12 & total锛� - 骞村害棰勭畻/scenarioName
     info( "dealing 闈㈡澘鍒嗛厤閲�" )
     if( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
-      // 鍘嗗彶鏁版嵁
-      traverse( months, Elements, month ) {
-        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
+      traverse( years, Elements, year ) {
+        // 鍘嗗彶鏁版嵁
+        traverse( months, Elements, month ) {
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
+          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+            cellReal := MappingCapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
+            cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+          }
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := MappingCapacityAndSaleBudge::GetSheetByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
-    //      cellReal := Real::Random( 1.0, 999.0 );
-          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          cellReal := MappingCapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), mpSync, year.YearNo() );
+          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
-      }
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-total-骞村害棰勭畻" );
-      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cellReal := MappingCapacityAndSaleBudge::GetSheetByYear( row.GetProductCodes(), mpSync, DateTime::Now().Year() );
-    //    cellReal := Real::Random( 1.0, 999.0 );
-        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      }
-      // S&OP鏁版嵁
-      traverse( years, Elements, year ) {
+        // S&OP鏁版嵁
         traverse( macroPlans, Elements, macroPlan ) {
           traverse( months, Elements, month ) {
             columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
                                                                                     "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
             traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
               cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-    //          cellReal := Real::Random( 1.0, 999.0 );
               cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
               cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
             }
@@ -105,7 +102,6 @@
                                                                                  "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
             cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-    //        cellReal := Real::Random( 1.0, 999.0 );
             cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
@@ -115,37 +111,36 @@
     // 骞村害閿�鍞
     info( "dealing 閿�鍞" )
     if( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) {
-      // 鍘嗗彶鏁版嵁
-      traverse( months, Elements, month ) {
-        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + "-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
+      traverse( years, Elements, year ) {
+        // 鍘嗗彶鏁版嵁
+        traverse( months, Elements, month ) {
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
+          traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+            cellReal := MappingCapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), mpSync, year.YearNo(), month.MonthNo() );
+            cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+            cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+          }
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
         traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cellReal := MappingCapacityAndSaleBudge::GetSaleByMonth( row.GetProductCodes(), mpSync, DateTime::Now().Year(), month.MonthNo() );
-    //      cellReal := Real::Random( 1.0, 999.0 );
-          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          cellReal := MappingCapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), mpSync, year.YearNo() );
+          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
-      }
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-total-骞村害棰勭畻" );
-      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cellReal := MappingCapacityAndSaleBudge::GetSaleByYear( row.GetProductCodes(), mpSync, DateTime::Now().Year() );
-    //    cellReal := Real::Random( 1.0, 999.0 );
-        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      }
-      // S&OP鏁版嵁
-      traverse( years, Elements, year ) {
+        // S&OP鏁版嵁
         traverse( macroPlans, Elements, macroPlan ) {
           traverse( months, Elements, month ) {
             columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
             traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-              cellReal := MappingForecast::GetBalanceByMonth( row.GetProductCodes(), mappingParent, year.YearNo(), month.MonthNo() );
+              cellReal := MappingAnnualBudget::GetSaleByMonth( row.GetProductCodes(), mpSync, year.YearNo(), month.MonthNo() );
               cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
               cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
             }
           }
           columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := MappingForecast::GetBalanceByYear( row.GetProductCodes(), mappingParent, year.YearNo() );
+            // QID 23
+            cellReal := MappingAnnualBudget::GetSaleByYear( row.GetProductCodes(), mpSync, year.YearNo() );
             cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
             cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
           }
@@ -158,7 +153,8 @@
       // 鍘嗗彶鏁版嵁
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        // todo
+        // todo 
+        // QID 23
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
@@ -178,6 +174,7 @@
       columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-骞村害棰勭畻" );
       traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
         // todo
+        // QID 23
         cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
         cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
       }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
index 72e5ee3..2ee31ab 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/_ROOT_Component_ApplicationMacroPlanner.def
@@ -43,5 +43,25 @@
         Taborder: 42
       ]
     }
+    Component DataHolderCapacityAndSaleBudgeFilterBusinessType
+    {
+      #keys: '[414384.0.874472860]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[CapacityAndSaleBudgeFilterBusinessType]*'
+      Properties:
+      [
+        Taborder: 43
+      ]
+    }
+    Component DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    {
+      #keys: '[414384.0.874472866]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[CapacityAndSaleBudgeFilterPlaceOfProductionOfArray]*'
+      Properties:
+      [
+        Taborder: 44
+      ]
+    }
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
index 58589ca..4170b61 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Method_New.def
@@ -9,7 +9,7 @@
   [*
     
     data := owner.FillingCapacityOrder(relshadow);
-    data.OrderType("Pulling")
+    data.OrderType("鎻愭媺")
     
     DataHolderFillingCapacityOrder.Data(&data);
     
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
index 732c296..89f4bc2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogFillingCapacityOrder/Response_pnlActions_btnOk_OnClick.def
@@ -9,8 +9,8 @@
     feedback := Translations::FilllingCapacity_ValidateInput();
     
     checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
-                  and not dropDownStringListStockPointID.Text() = '' and dropDownStringListCustomer.Text() = ''
-                  and not edtQuantity.Text() = '' and dropDownStringListUnitOfMeasureName.Text() = ''
+                  and not dropDownStringListStockPointID.Text() = '' and not dropDownStringListCustomer.Text() = ''
+                  and not edtQuantity.Text() = '' and not dropDownStringListUnitOfMeasureName.Text() = ''
                   and not edtSalesAmount.Text() = ''
     
     return checkValue;
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def
index 4c52dcb..e9d82ba 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogHistoricalSalesOrders/Response_pnlActions_btnOk_OnClick.def
@@ -4,15 +4,14 @@
 {
   #keys: '[414382.0.391970684]'
   DefinitionID: 'Responsedef_WebButton_OnClick'
-  GroupServerCalls: true
   Precondition:
   [*
     feedback := Translations::FilllingCapacity_ValidateInput();
     
     checkValue := not dropDownStringListProductID.Text() = '' and not dropDownStringListSalesSegmentName.Text() = ''
-                  and not dropDownStringListStockPointID.Text() = '' and dropDownStringListCustomer.Text() = ''
-                  and not edtQuantity.Text() = '' and dropDownStringListUnitOfMeasureName.Text() = ''
-                  and edtSalesAmount.Text() = ''
+                  and not dropDownStringListStockPointID.Text() = '' and not dropDownStringListCustomer.Text() = ''
+                  and not edtQuantity.Text() = '' and not dropDownStringListUnitOfMeasureName.Text() = ''
+                  and not edtSalesAmount.Text() = ''
     
     return checkValue;
   *]
@@ -22,5 +21,6 @@
     [*
       Form.ClickBtnOk()
     *]
+    GroupServerCalls: false
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def
index 20a11fc..6b89082 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogNewPriorityPolicy/Method_ClickBtnOk.def
@@ -14,12 +14,6 @@
     
     DataHolderNewPriorityPolicy.Data().Commit();
     
-    //if( not isnull( DataHolderForm.Data() ) )
-    //{
-    //  // Access the form, select the new assumption
-    //  DataHolderForm.Data().ListAssumptions().SelectByKey( DataHolderDialogData.Data().WrappedInstance().Key() );
-    //}
-    
     this.Close();
   *]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index 478593e..1e5e82c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -12,6 +12,7 @@
       Properties:
       [
         DataType: 'MPSync'
+        FixedFilter: 'object.YearNo() = Date::ActualDate().Year()'
         Source: 'MPSync'
         Taborder: 0
         Transformation: 'MappingCapacityAndSaleBudge'
@@ -28,7 +29,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"OrgCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechnology","title":"DisplayTechnology","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechnology"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineAndSpecification","title":"LineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfEvaporation","title":"PlaceOfProductionOfEvaporation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfEvaporation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Resolution","title":"Resolution","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Resolution"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfCut","title":"NumberOfCut","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfCut"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfMask","title":"NumberOfMask","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfMask"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth1","title":"CapacityInPCSInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth2","title":"CapacityInPCSInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth3","title":"CapacityInPCSInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth4","title":"CapacityInPCSInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth5","title":"CapacityInPCSInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth6","title":"CapacityInPCSInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth7","title":"CapacityInPCSInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth8","title":"CapacityInPCSInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth9","title":"CapacityInPCSInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth10","title":"CapacityInPCSInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth11","title":"CapacityInPCSInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth12","title":"CapacityInPCSInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSTotal","title":"CapacityInPCSTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth1","title":"CapacityInSheetInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth2","title":"CapacityInSheetInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth3","title":"CapacityInSheetInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth4","title":"CapacityInSheetInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth5","title":"CapacityInSheetInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth6","title":"CapacityInSheetInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth7","title":"CapacityInSheetInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth8","title":"CapacityInSheetInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth9","title":"CapacityInSheetInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth10","title":"CapacityInSheetInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth11","title":"CapacityInSheetInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth12","title":"CapacityInSheetInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetTotal","title":"CapacityInSheetTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth1","title":"SaleAmountInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth2","title":"SaleAmountInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth3","title":"SaleAmountInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth5","title":"SaleAmountInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth4","title":"SaleAmountInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth6","title":"SaleAmountInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth7","title":"SaleAmountInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth8","title":"SaleAmountInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth9","title":"SaleAmountInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth10","title":"SaleAmountInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth11","title":"SaleAmountInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth12","title":"SaleAmountInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountTotal","title":"SaleAmountTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountTotal"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Deleted","title":"Deleted","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Deleted"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"YearNo","title":"YearNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"YearNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrgCode","title":"OrgCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrgCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DisplayTechnology","title":"DisplayTechnology","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DisplayTechnology"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineAndSpecification","title":"LineAndSpecification","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineAndSpecification"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductCode","title":"ProductCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfEvaporation","title":"PlaceOfProductionOfEvaporation","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfEvaporation"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Resolution","title":"Resolution","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Resolution"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ShippingForm","title":"ShippingForm","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ShippingForm"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfCut","title":"NumberOfCut","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfCut"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityEquivalent","title":"CapacityEquivalent","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityEquivalent"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfMask","title":"NumberOfMask","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfMask"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth1","title":"CapacityInPCSInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth2","title":"CapacityInPCSInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth3","title":"CapacityInPCSInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth4","title":"CapacityInPCSInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth5","title":"CapacityInPCSInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth6","title":"CapacityInPCSInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth7","title":"CapacityInPCSInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth8","title":"CapacityInPCSInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth9","title":"CapacityInPCSInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth10","title":"CapacityInPCSInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth11","title":"CapacityInPCSInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSInMonth12","title":"CapacityInPCSInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInPCSTotal","title":"CapacityInPCSTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInPCSTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth1","title":"CapacityInSheetInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth2","title":"CapacityInSheetInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth3","title":"CapacityInSheetInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth4","title":"CapacityInSheetInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth5","title":"CapacityInSheetInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth6","title":"CapacityInSheetInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth7","title":"CapacityInSheetInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth8","title":"CapacityInSheetInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth9","title":"CapacityInSheetInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth10","title":"CapacityInSheetInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth11","title":"CapacityInSheetInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetInMonth12","title":"CapacityInSheetInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CapacityInSheetTotal","title":"CapacityInSheetTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CapacityInSheetTotal"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth1","title":"SaleAmountInMonth1","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth2","title":"SaleAmountInMonth2","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth3","title":"SaleAmountInMonth3","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth5","title":"SaleAmountInMonth5","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth4","title":"SaleAmountInMonth4","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth6","title":"SaleAmountInMonth6","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth7","title":"SaleAmountInMonth7","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth8","title":"SaleAmountInMonth8","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth9","title":"SaleAmountInMonth9","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth10","title":"SaleAmountInMonth10","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth11","title":"SaleAmountInMonth11","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountInMonth12","title":"SaleAmountInMonth12","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountInMonth12"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SaleAmountTotal","title":"SaleAmountTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SaleAmountTotal"}}]'
         ContextMenu: 'listContextMenuCapacityAndSaleBudge'
         SortCriteria: 'BusinessType;OrgCode;ProductCode'
         Taborder: 2
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
index b3e0a3c..168d51b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -11,6 +11,7 @@
   ]
   Properties:
   [
-    Title: '浜ч攢棰勭畻'
+    Description: '骞村害浜ч攢棰勭畻'
+    Title: '骞村害浜ч攢棰勭畻'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
index 9cb5a75..d6e755a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
@@ -47,7 +47,7 @@
             }
             WebChartConfigGroup
             {
-              Label: 'BusinessTypeOrOrgCode'
+              Label: 'BusinessTypeOrPlaceOfProductionOfArray'
               SequenceNr: 1
             }
           }
@@ -62,7 +62,7 @@
             }
             WebChartConfigGroup
             {
-              Label: 'BusinessTypeOrOrgCode'
+              Label: 'BusinessTypeOrPlaceOfProductionOfArray'
               SequenceNr: 1
             }
             Default: 'Stacked bar'
@@ -70,7 +70,7 @@
             MergeStackedBars: true
           }
         *]
-        Groups: 'TimeStringAndScenarioName,BusinessTypeOrOrgCode'
+        Groups: 'TimeStringAndScenarioName,BusinessTypeOrPlaceOfProductionOfArray'
         Taborder: 0
       ]
     }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
index 8011270..ccb0ea2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -16,9 +16,10 @@
                                                  CheckboxIsCapacity.Checked(),
                                                  DropDownTimeGroup.Text(),
                                                  DropDownByBusinessTypeOrByOrgCode.Text(),
-                                                 DropDownBusinessTypes.Text(),
-                                                 DropDownPlaceOfProductionOfArrays.Text(),
-                                                 DropDownYears.Text(),
+                                                 DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
+                                                 DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
+                                                 DataHolderCapacityAndSaleBudgeFilterYear.Data(),
+                                                 DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
                                                  MPSync, 
                                                  GlobalOTDTable, 
                                                  MacroPlan );
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
index 51a6e54..4cba0cb 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def
@@ -9,11 +9,7 @@
   {
     Body:
     [*
-      CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
-      
-      DropDownBusinessTypes.Strings( MPSync.CapacityAndSaleBudgeBusinessTypeString() );
-      DropDownPlaceOfProductionOfArrays.Strings( MPSync.CapacityAndSaleBudgePlaceOfProductionOfArrayString() );
-      DropDownYears.Strings( MPSync::CapacityAndSaleBudgeYearsString() );
+      //CapacityAndSaleBudgeChartElement::TestData( ScenarioManager );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
index 456fb75..3684ed8 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def
@@ -26,6 +26,7 @@
       [
         Label: '骞翠唤'
         Taborder: 2
+        Visible: false
       ]
     }
     Component DropDownBusinessTypes
@@ -37,6 +38,7 @@
         AllowEmpty: true
         Label: '浜嬩笟閮�'
         Taborder: 3
+        Visible: false
       ]
     }
     Component DropDownPlaceOfProductionOfArrays
@@ -48,6 +50,7 @@
         AllowEmpty: true
         Label: '闈㈡澘鍩哄湴'
         Taborder: 4
+        Visible: false
       ]
     }
     Component CheckboxIsCapacity
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
index f4be476..9602b8e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
@@ -21,6 +21,7 @@
   ]
   Properties:
   [
-    Title: '浜ч攢棰勭畻瀵规瘮'
+    Description: '骞村害浜ч攢棰勭畻瀵规瘮'
+    Title: '骞村害浜ч攢棰勭畻瀵规瘮'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
new file mode 100644
index 0000000..9d8acf7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListCapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '[414384.0.875704540]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorCapacityAndSaleBudgeFilterBusinessType
+    {
+      #keys: '[414384.0.875704541]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MPSync'
+        Source: 'MPSync'
+        Taborder: 0
+        Transformation: 'CapacityAndSaleBudgeFilterBusinessType'
+      ]
+    }
+    #child: listActionBarPageCapacityAndSaleBudgeFilterBusinessType
+    Component DataSetLevelCapacityAndSaleBudgeFilterBusinessType
+    {
+      #keys: '[414384.0.875704543]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuCapacityAndSaleBudgeFilterYear_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}}]'
+        ContextMenu: 'listContextMenuCapacityAndSaleBudgeFilterYear'
+        SortCriteria: 'YearNo'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listActionBarPageCapacityAndSaleBudgeFilterBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listActionBarPageCapacityAndSaleBudgeFilterBusinessType.def
new file mode 100644
index 0000000..2cd170b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listActionBarPageCapacityAndSaleBudgeFilterBusinessType.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageCapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '[414384.0.875704542]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listContextMenuCapacityAndSaleBudgeFilterYear\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listContextMenuCapacityAndSaleBudgeFilterYear\0431.def"
new file mode 100644
index 0000000..0e679a0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listContextMenuCapacityAndSaleBudgeFilterYear\0431.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuCapacityAndSaleBudgeFilterYear id:listContextMenuCapacityAndSaleBudgeFilterYear_1
+{
+  #keys: '[414384.0.875704544]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuRefresh
+    {
+      #keys: '[414384.0.875575024]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: 'Refresh'
+        Image: 'ARROW_CIRCLE2'
+        Taborder: 3
+        Title: 'Refresh'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged\043670.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged\043670.def"
new file mode 100644
index 0000000..94b6bc0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged\043670.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ListCapacityAndSaleBudgeFilterBusinessType
+Response OnUserCheckedChanged () id:Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged_670
+{
+  #keys: '[414384.0.875704537]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderCapacityAndSaleBudgeFilterBusinessType.Data().Flush();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged.def
new file mode 100644
index 0000000..14d1648
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListCapacityAndSaleBudgeFilterBusinessType
+Response OnUserCheckedChanged (
+  structured[CapacityAndSaleBudgeFilterBusinessType] checkeditems
+) id:Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged
+{
+  #keys: '[414384.0.875704536]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderCapacityAndSaleBudgeFilterBusinessType.Data( checkeditems.Copy() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
new file mode 100644
index 0000000..682a492
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: listContextMenuCapacityAndSaleBudgeFilterYear_1/MenuRefresh
+Response OnClick () id:Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick
+{
+  #keys: '[414384.0.875575116]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      MPSync.RefreshCapacityAndSaleBudgeFilter();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/_ROOT_Component_FormCapacityAndSaleBudgeFilterBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/_ROOT_Component_FormCapacityAndSaleBudgeFilterBusinessType.def
new file mode 100644
index 0000000..c943bf4
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/_ROOT_Component_FormCapacityAndSaleBudgeFilterBusinessType.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '[414384.0.875704417]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListCapacityAndSaleBudgeFilterBusinessType
+  ]
+  Properties:
+  [
+    Description: '骞村害浜ч攢棰勭畻浜嬩笟閮ㄧ瓫閫�'
+    Title: '骞村害浜ч攢棰勭畻浜嬩笟閮ㄧ瓫閫�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/_ROOT_Component_FormCapacityAndSaleBudgeFilterItem.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/_ROOT_Component_FormCapacityAndSaleBudgeFilterItem.def
index 407564c..b951bed 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/_ROOT_Component_FormCapacityAndSaleBudgeFilterItem.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/_ROOT_Component_FormCapacityAndSaleBudgeFilterItem.def
@@ -11,6 +11,7 @@
   ]
   Properties:
   [
-    Title: '浜ч攢棰勭畻瀵规瘮椤圭瓫閫�'
+    Description: '骞村害浜ч攢棰勭畻瀵规瘮椤�'
+    Title: '骞村害浜ч攢棰勭畻瀵规瘮椤�'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/_ROOT_Component_FormCapacityAndSaleBudgeFilterMonth.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/_ROOT_Component_FormCapacityAndSaleBudgeFilterMonth.def
index 8328a22..f53cae7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/_ROOT_Component_FormCapacityAndSaleBudgeFilterMonth.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/_ROOT_Component_FormCapacityAndSaleBudgeFilterMonth.def
@@ -11,6 +11,7 @@
   ]
   Properties:
   [
-    Title: '浜ч攢棰勭畻瀵规瘮鏈堜唤绛涢��'
+    Description: '骞村害浜ч攢棰勭畻鏈堜唤绛涢��'
+    Title: '骞村害浜ч攢棰勭畻鏈堜唤绛涢��'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
new file mode 100644
index 0000000..76e4e36
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+Component ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '[414384.0.875704517]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    {
+      #keys: '[414384.0.875704518]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MPSync'
+        Source: 'MPSync'
+        Taborder: 0
+        Transformation: 'CapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
+      ]
+    }
+    #child: listActionBarPageCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    Component DataSetLevelCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    {
+      #keys: '[414384.0.875704520]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuCapacityAndSaleBudgeFilterYear_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlaceOfProductionOfArray","title":"PlaceOfProductionOfArray","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlaceOfProductionOfArray"}}]'
+        ContextMenu: 'listContextMenuCapacityAndSaleBudgeFilterYear'
+        SortCriteria: 'YearNo'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    SelectionCheckboxes: true
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listActionBarPageCapacityAndSaleBudgeFilterPlaceOfProductionOfArra.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listActionBarPageCapacityAndSaleBudgeFilterPlaceOfProductionOfArra.def
new file mode 100644
index 0000000..37d038c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listActionBarPageCapacityAndSaleBudgeFilterPlaceOfProductionOfArra.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '[414384.0.875704519]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listContextMenuCapacityAndSaleBudgeFilterYear\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listContextMenuCapacityAndSaleBudgeFilterYear\0431.def"
new file mode 100644
index 0000000..6485a80
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listContextMenuCapacityAndSaleBudgeFilterYear\0431.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuCapacityAndSaleBudgeFilterYear id:listContextMenuCapacityAndSaleBudgeFilterYear_1
+{
+  #keys: '[414384.0.875704521]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuRefresh id:MenuRefresh_332
+    {
+      #keys: '[414384.0.875925487]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: 'Refresh'
+        Image: 'ARROW_CIRCLE2'
+        Taborder: 3
+        Title: 'Refresh'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def"
new file mode 100644
index 0000000..f254f69
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCh\043171.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+Response OnUserCheckedChanged () id:Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCheckedChanged_171
+{
+  #keys: '[414384.0.875704514]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderCapacityAndSaleBudgeFilterYear.Data().Flush();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def
new file mode 100644
index 0000000..5d9bdf7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+Response OnUserCheckedChanged (
+  structured[CapacityAndSaleBudgeFilterYear] checkeditems
+) id:Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserCheckedChanged
+{
+  #keys: '[414384.0.875704513]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderCapacityAndSaleBudgeFilterYear.Data( checkeditems.Copy() );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def"
new file mode 100644
index 0000000..bda9b55
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC\043663.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: listContextMenuCapacityAndSaleBudgeFilterYear_1/MenuRefresh_332
+Response OnClick () id:Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick_663
+{
+  #keys: '[414384.0.875925486]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      MPSync.RefreshCapacityAndSaleBudgeFilter();
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
new file mode 100644
index 0000000..108d3c2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '[414384.0.875704457]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+  ]
+  Properties:
+  [
+    Description: '骞村害浜ч攢棰勭畻闈㈡澘鍩哄湴绛涢��'
+    Title: '骞村害浜ч攢棰勭畻闈㈡澘鍩哄湴绛涢��'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/_ROOT_Component_FormCapacityAndSaleBudgeFilterYear.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/_ROOT_Component_FormCapacityAndSaleBudgeFilterYear.def
index 54553b8..60c9c18 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/_ROOT_Component_FormCapacityAndSaleBudgeFilterYear.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/_ROOT_Component_FormCapacityAndSaleBudgeFilterYear.def
@@ -11,6 +11,7 @@
   ]
   Properties:
   [
-    Title: '浜ч攢棰勭畻瀵规瘮骞翠唤绛涢��'
+    Description: '骞村害浜ч攢棰勭畻骞翠唤绛涢��'
+    Title: '骞村害浜ч攢棰勭畻骞翠唤绛涢��'
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def
index fc51ac5..92f2bb9 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuDelete_OnClick.def
@@ -10,9 +10,12 @@
   Initiator: 'MenuDelete'
   Precondition:
   [*
+    //feedback := Translations::FilllingCapacity_NotRelease();
+    //checkValue := not FilllingCapacityOrderScheme::HasAlreadyRelease( MacroPlan);
+    //return checkValue;
     feedback := Translations::FilllingCapacity_NotRelease();
-    checkValue := FilllingCapacityOrderScheme::HasAlreadyRelease( MacroPlan);
-    return checkValue;
+    checkValue := selectobject( MacroPlan,FilllingCapacityOrderScheme,scheme,scheme.IsRelease())
+    return isnull( checkValue );
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def
index 0cfb628..bf1e37b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFillingScheme/Response_ListFillingScheme_MenuRelease_OnClick.def
@@ -11,8 +11,8 @@
   Precondition:
   [*
     feedback := Translations::FilllingCapacity_NotRelease();
-    checkValue := FilllingCapacityOrderScheme::HasAlreadyRelease( MacroPlan);
-    return checkValue;
+    checkValue := selectobject( MacroPlan,FilllingCapacityOrderScheme,scheme,scheme.IsRelease())
+    return isnull( checkValue );
   *]
   QuillAction
   {
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_PanelSalesDemands.def b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_PanelSalesDemands.def
index 743b727..4bfe5b1 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_PanelSalesDemands.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormForecasts/Component_PanelSalesDemands.def
@@ -1,7 +1,6 @@
 Quintiq file version 2.0
 Component PanelSalesDemands #extension
 {
-  #error 102458: "Class Component with id 'PanelSalesDemands' cannot find its child with id 'PanelAllSalesDemands'. The file / folder structure might be corrupted due to integration."
   Children:
   [
     Component DataHolderSalesDemands #extension
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
index 17d2167..899294d 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock\043844.def"
@@ -29,7 +29,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsFirmed","title":"IsFirmed","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsFirmed"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"First.AsPlanningBaseSalesDemandInPeriod.End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"First.AsPlanningBaseSalesDemandInPeriod.End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLocked","title":"IsLocked","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLocked"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"First.AsPlanningBaseSalesDemandInPeriod.End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"First.AsPlanningBaseSalesDemandInPeriod.End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}}]'
         ContextMenu: 'listContextMenuOrderLock'
         Taborder: 2
       ]
@@ -37,6 +37,7 @@
   ]
   Properties:
   [
+    SelectionCheckboxes: true
     Taborder: 0
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
index 401adf5..d44104e 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning\043679.def"
@@ -45,12 +45,11 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'CustomerOrder'
-            ExtractionMode: 'Selected'
+            DataType: 'structured[CustomerOrder]'
             FixedFilter: 'not object.IsSystem() and object.IsLeaf()'
-            Source: 'ListOrderLock'
+            Source: 'DataHolderOrderLockCheckedOrder'
             Taborder: 0
-            Transformation: 'ProductInStockingPoint_MP'
+            Transformation: 'Elements.ProductInStockingPoint_MP'
           ]
         }
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_ListOrderLock_844_OnUserCheckedChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_ListOrderLock_844_OnUserCheckedChanged.def
new file mode 100644
index 0000000..fd1aa78
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_ListOrderLock_844_OnUserCheckedChanged.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: ListOrderLock_844
+Response OnUserCheckedChanged (
+  structured[CustomerOrder] checkeditems
+) id:Response_ListOrderLock_844_OnUserCheckedChanged
+{
+  #keys: '[412960.0.246680266]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserCheckedChanged'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderOrderLockCheckedOrder.Data( checkeditems.Copy() );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def
new file mode 100644
index 0000000..97a5fce
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/ButtonOrderLockHeaderLock
+Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick
+{
+  #keys: '[412960.0.245380616]'
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    checkorders := DataHolderOrderLockCheckedOrder.Data();
+    pispips := construct( ProductInStockingPointInPeriods );
+    traverse( checkorders, Elements, order ){
+      pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ) );
+      }
+    return ProductInStockingPointInPeriod::CanLockUnlock( pispips, feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      checkorders := DataHolderOrderLockCheckedOrder.Data();
+      pispips := construct( ProductInStockingPointInPeriods );
+      macroplan := MacroPlan;
+      traverse( checkorders, Elements, order ){
+        pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ) );
+        }
+      
+      pispipLeafs := selectset( pispips, 
+                                Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), 
+                                pispip, 
+                                true );
+      
+      CustomerOrder::LockUnlock( macroplan, checkorders, true );
+      ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, true, true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def
new file mode 100644
index 0000000..6283853
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick.def
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: PanelOrderLockHeader_545/ButtonOrderLockHeaderUnlock
+Response OnClick () id:Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderUnlock_OnClick
+{
+  #keys: '[412960.0.250520489]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  GroupServerCalls: true
+  Precondition:
+  [*
+    checkorders := DataHolderOrderLockCheckedOrder.Data();
+    pispips := construct( ProductInStockingPointInPeriods );
+    traverse( checkorders, Elements, order ){
+      pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ) );
+      }
+    return ProductInStockingPointInPeriod::CanLockUnlock( pispips, feedback );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      checkorders := DataHolderOrderLockCheckedOrder.Data();
+      pispips := construct( ProductInStockingPointInPeriods );
+      macroplan := MacroPlan;
+      traverse( checkorders, Elements, order ){
+        pispips.Add( selectset( order, ProductInStockingPoint_MP.ProductInStockingPointInPeriod, pispip, true ) );
+        }
+      
+      pispipLeafs := selectset( pispips, 
+                                Elements.astype( ProductInStockingPointInPeriodPlanningLeaf ), 
+                                pispip, 
+                                true );
+      
+      CustomerOrder::LockUnlock( macroplan, checkorders, false );
+      ProductInStockingPointInPeriod::LockUnlockPlanning( pispipLeafs, false, true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
index 5e6da38..c393843 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def
@@ -19,18 +19,18 @@
       newfilter := "";
       findcount := 0;
       traverse( existfilterlist, Elements, filter ){
-        if( filter.FindString( "IsFirmed()", 0 ) >= 0 ){
+        if( filter.FindString( "IsLocked()", 0 ) >= 0 ){
           if( this.BoundValue() = "locked" ){
             if( newfilter = "" ){
-              newfilter := "( object.IsFirmed() = true )";
+              newfilter := "( object.IsLocked() = true )";
               }else{
-                newfilter := newfilter + " and " + "( object.IsFirmed() = true )";
+                newfilter := newfilter + " and " + "( object.IsLocked() = true )";
                 }
             }else if( this.BoundValue() = "unlocked" ){
               if( newfilter = "" ){
-                newfilter := "( object.IsFirmed() = false )";
+                newfilter := "( object.IsLocked() = false )";
                 }else{
-                  newfilter := newfilter + " and " + "( object.IsFirmed() = false )";
+                  newfilter := newfilter + " and " + "( object.IsLocked() = false )";
                   }
               }else if( this.BoundValue() = "all" ){
                 newfilter := newfilter + "";
@@ -48,15 +48,15 @@
       if( findcount = 0 ){
         if( this.BoundValue() = "locked" ){
           if( newfilter = "" ){
-            newfilter := "( object.IsFirmed() = true )";
+            newfilter := "( object.IsLocked() = true )";
             }else{
-              newfilter := newfilter + " and " + "( object.IsFirmed() = true )";
+              newfilter := newfilter + " and " + "( object.IsLocked() = true )";
               }
           }else if( this.BoundValue() = "unlocked" ){
             if( newfilter = "" ){
-              newfilter := "( object.IsFirmed() = false )";
+              newfilter := "( object.IsLocked() = false )";
               }else{
-                newfilter := newfilter + " and " + "( object.IsFirmed() = false )";
+                newfilter := newfilter + " and " + "( object.IsLocked() = false )";
                 }
             }else if( this.BoundValue() = "all" ){
               newfilter := newfilter + "";
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
index 6834735..05d0114 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def
@@ -45,6 +45,17 @@
         Taborder: 2
       ]
     }
+    Component DataHolderOrderLockCheckedOrder
+    {
+      #keys: '[412960.0.245361440]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[CustomerOrder]*'
+      Properties:
+      [
+        Description: '鍌ㄥ瓨閫変腑鐨勮鍗曟暟鎹�'
+        Taborder: 3
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_ListOrderLockLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_ListOrderLockLog.def
new file mode 100644
index 0000000..bcf75de
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_ListOrderLockLog.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListOrderLockLog
+{
+  #keys: '[412960.0.251923186]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorOrderLockLog473
+    {
+      #keys: '[412960.0.251923187]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[OrderLockLog]'
+        Source: 'DataHolderOrderLockLog'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPageOrderLockLog
+    Component DataSetLevelOrderLockLog
+    {
+      #keys: '[412960.0.251923192]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuOrderLockLog
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrderID","title":"OrderID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrderID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CustomerName","title":"CustomerName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CustomerName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EndDate","title":"EndDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EndDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"IsLocked","title":"IsLocked","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"IsLocked"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"End","title":"End","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModify","title":"LastModify","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModify"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LastModifyTime","title":"LastModifyTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LastModifyTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Notes","title":"Notes","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Notes"}}]'
+        ContextMenu: 'listContextMenuOrderLockLog'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_PanelOrderLockLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_PanelOrderLockLog.def
new file mode 100644
index 0000000..05a7b19
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_PanelOrderLockLog.def
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+Component PanelOrderLockLog
+{
+  #keys: '[412960.0.250590911]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListOrderLockLog
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listActionBarPageOrderLockLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listActionBarPageOrderLockLog.def
new file mode 100644
index 0000000..ab944bf
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listActionBarPageOrderLockLog.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageOrderLockLog
+{
+  #keys: '[412960.0.251923189]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listContextMenuOrderLockLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listContextMenuOrderLockLog.def
new file mode 100644
index 0000000..3f440f5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_listContextMenuOrderLockLog.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuOrderLockLog
+{
+  #keys: '[412960.0.251923194]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/_ROOT_Component_FormOrderLockLog.def b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/_ROOT_Component_FormOrderLockLog.def
new file mode 100644
index 0000000..9c391a6
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/_ROOT_Component_FormOrderLockLog.def
@@ -0,0 +1,43 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormOrderLockLog
+{
+  #keys: '[412960.0.248150315]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelOrderLockLog
+    Component DataHolderOrderLockLog
+    {
+      #keys: '[412960.0.250590928]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[OrderLockLog]*'
+      Children:
+      [
+        Component DataExtractorOrderLockLog
+        {
+          #keys: '[412960.0.250590940]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'MacroPlan'
+            Source: 'MacroPlan'
+            Taborder: 0
+            Transformation: 'OrderLockLog'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Description: '璁㈠崟閿佸畾/瑙i攣鏃ュ織'
+    Image: 'TEXT_LOCK'
+    Title: '璁㈠崟閿佸畾/瑙i攣鏃ュ織'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
index 31e9e65..b5d4a7b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_ListPriorityPolicy.def
@@ -28,7 +28,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Formula","title":"Formula","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Formula"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CalculateValue","title":"CalculateValue","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CalculateValue"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Desc","title":"Desc","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":""}}]'
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Formula","title":"Formula","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Formula"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"CalculateValue","title":"CalculateValue","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"CalculateValue"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Desc","title":"Desc","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Desc"}}]'
         ContextMenu: 'listContextMenuPriorityPolicy'
         Taborder: 2
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyCoefficient\043902.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyCoefficient\043902.def"
new file mode 100644
index 0000000..e2c6e2f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyCoefficient\043902.def"
@@ -0,0 +1,34 @@
+Quintiq file version 2.0
+Component PanelPriorityPolicyCoefficient id:PanelPriorityPolicyCoefficient_902
+{
+  #keys: '[414382.0.494931779]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelPriorityPolicyCoefficient
+    {
+      #keys: '[414382.0.494931780]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鍥犲瓙鐨勭郴鏁�'
+        Taborder: 0
+      ]
+    }
+    Component ButtonCommit
+    {
+      #keys: '[414382.0.494931877]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Label: '瀹屾垚'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
new file mode 100644
index 0000000..1923a0f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperation.def
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component PanelPriorityPolicyOperation
+{
+  #keys: '[414382.0.495572021]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component PanelPriorityPolicyOperationName
+    {
+      #keys: '[414382.0.494931391]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '浼樺厛绾х瓥鐣ュ悕绉�:'
+        Taborder: 0
+      ]
+    }
+    Component LabelFormula id:LabelFormula_223
+    {
+      #keys: '[414382.0.494931658]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '鍏紡:'
+        Taborder: 1
+      ]
+    }
+    Component LabelCalculateValue id:LabelCalculateValue_943
+    {
+      #keys: '[414382.0.494931674]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '璁$畻鍊�:'
+        Taborder: 2
+      ]
+    }
+    #child: PanelPriorityPolicyOperationButton
+    #child: PanelPriorityPolicyCoefficient_902
+  ]
+  Properties:
+  [
+    Taborder: 3
+    Title: '浼樺厛绾х瓥鐣ラ厤缃�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton\043713.def"
similarity index 68%
rename from _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def
rename to "_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton\043713.def"
index 34a03b8..9c91139 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyOperation.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Component_PanelPriorityPolicyOperationButton\043713.def"
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component PanelPriorityPolicyOperation
+Component PanelPriorityPolicyOperationButton
 {
-  #keys: '[414382.0.490130786]'
+  #keys: '[414382.0.494931742]'
   BaseType: 'WebPanel'
   Children:
   [
     Component ButtonAddPriorityPolicy
     {
-      #keys: '[414382.0.490130807]'
+      #keys: '[414382.0.494931743]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -17,7 +17,7 @@
     }
     Component Buttonplus
     {
-      #keys: '[414382.0.490130825]'
+      #keys: '[414382.0.494931744]'
       BaseType: 'WebButton'
       Properties:
       [
@@ -27,69 +27,74 @@
     }
     Component ButtonSubtract
     {
-      #keys: '[414382.0.490130836]'
+      #keys: '[414382.0.494931745]'
       BaseType: 'WebButton'
       Properties:
       [
+        Label: '*'
         Taborder: 3
-      ]
-    }
-    Component StringListPriorityPolicyOperation
-    {
-      #keys: '[414382.0.492194048]'
-      BaseType: 'WebDropDownStringList'
-      Properties:
-      [
-        Label: '浼樺厛绾у洜瀛�:'
-        Taborder: 0
       ]
     }
     Component ButtonMultiply
     {
-      #keys: '[414382.0.490151249]'
+      #keys: '[414382.0.494931747]'
       BaseType: 'WebButton'
       Properties:
       [
+        Label: 'x'
         Taborder: 4
       ]
     }
     Component ButtonDivide
     {
-      #keys: '[414382.0.490151283]'
+      #keys: '[414382.0.494931748]'
       BaseType: 'WebButton'
       Properties:
       [
+        Label: '/'
         Taborder: 5
       ]
     }
     Component ButtonLeftParenthesis
     {
-      #keys: '[414382.0.490151322]'
+      #keys: '[414382.0.494931749]'
       BaseType: 'WebButton'
       Properties:
       [
+        Label: '('
         Taborder: 6
       ]
     }
     Component ButtonRightParenthesis
     {
-      #keys: '[414382.0.490151325]'
+      #keys: '[414382.0.494931750]'
       BaseType: 'WebButton'
       Properties:
       [
+        Label: ')'
         Taborder: 7
       ]
     }
     Component ButtonRollBack
     {
-      #keys: '[414382.0.490151327]'
+      #keys: '[414382.0.494931751]'
       BaseType: 'WebButton'
       Properties:
       [
+        Label: '<-'
         Taborder: 8
       ]
     }
-    #child: PanelPriorityPolicyCoefficient
+    Component DropDownStringList
+    {
+      #keys: '[414382.0.501480353]'
+      BaseType: 'WebDropDownStringList'
+      Properties:
+      [
+        Label: '浼樺厛绾у洜瀛�'
+        Taborder: 0
+      ]
+    }
   ]
   Properties:
   [
@@ -97,6 +102,6 @@
     MinimumColumns: 10
     MinimumRows: 1
     Orientation: 'horizontal'
-    Taborder: 4
+    Taborder: 3
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def
new file mode 100644
index 0000000..d3d9c4a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: DataHolderPriorityPolicySelectBusinessType
+Response OnCreated () id:Response_FormPriorityPolicy_DataHolderPriorityPolicySelectBusinessType_OnCreated
+{
+  #keys: '[414382.0.493813692]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      this.Data(PriorityPolicyBusinessType.Text());
+    *]
+    GroupServerCalls: false
+  }
+}
+
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
index 64b4ab9..89b9c11 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicy_OnDataChanged.def
@@ -2,7 +2,7 @@
 #parent: DataHolderPriorityPolicy
 Response OnDataChanged () id:Response_FormPriorityPolicy_DataHolderPriorityPolicy_OnDataChanged
 {
-  #keys: '[414382.0.491200369]'
+  #keys: '[414382.0.502145694]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
   QuillAction
@@ -10,7 +10,7 @@
     Body:
     [*
       list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
-      DataHolderPriorityPolicy.Data(&list);
+      this.Data(&list);
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
index fc6f40c..b956173 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_MenuEdit_OnClick.def
@@ -1,6 +1,8 @@
 Quintiq file version 2.0
 #parent: ListPriorityPolicy
-Response OnClick () id:Response_ListPriorityPolicy_MenuEdit_OnClick
+Response OnClick (
+  PriorityPolicy selection
+) id:Response_ListPriorityPolicy_MenuEdit_OnClick
 {
   #keys: '[414382.0.489382588]'
   CanBindMultiple: false
@@ -10,7 +12,8 @@
   {
     Body:
     [*
-      ApplicationMacroPlanner.OpenForm( 'FormPriorityPolicyOperation');
+      PanelPriorityPolicyOperation.Visible(true);
+      PanelPriorityPolicyOperationName.Text(selection.Name());
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def
new file mode 100644
index 0000000..e16df3d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_ListPriorityPolicy_OnUserSelectionChanged.def
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: ListPriorityPolicy
+Response OnUserSelectionChanged (
+  PriorityPolicy selection
+) id:Response_ListPriorityPolicy_OnUserSelectionChanged
+{
+  #keys: '[414382.0.503822635]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      PanelPriorityPolicyOperationName.Text(selection.Name());
+      
+      businessType := PriorityPolicyBusinessType.Text();
+      str := PriorityFactor::GetNameList( MacroPlan, businessType);
+      DropDownStringList.Strings(str);
+      
+      data := shadow( selection );
+      DataHolderEditPriorityPolicy.Data( &data );
+      
+      //coefficient := PriorityFactor::GetCoeffcientByName( MacroPlan,businessType,DropDownStringList.Text());
+      //LabelPriorityPolicyCoefficient.Text([String]coefficient);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
new file mode 100644
index 0000000..d645e29
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyCoefficient_902/ButtonCommit
+Response OnClick () id:Response_PanelPriorityPolicyCoefficient_902_ButtonCommit_OnClick
+{
+  #keys: '[414382.0.506250033]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      DataHolderEditPriorityPolicy.Data().Formula(LabelFormula.Text());
+      DataHolderEditPriorityPolicy.Data().CalculateValue(LabelCalculateValue.Text());
+      DataHolderEditPriorityPolicy.Data().Commit();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
new file mode 100644
index 0000000..3b56ae5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonAddPriorityPolicy
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonAddPriorityPolicy_OnClick
+{
+  #keys: '[414382.0.502145449]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      coefficient := LabelPriorityPolicyCoefficient.Text();
+      text := DropDownStringList.Text();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      textCalculate := DropDownStringList.Text() + "[" + coefficient + "*L]";
+      calculateText := LabelCalculateValue.Text() + textCalculate;
+      LabelCalculateValue.Text(calculateText);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
new file mode 100644
index 0000000..11b1352
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonDivide
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonDivide_OnClick
+{
+  #keys: '[414382.0.500261587]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
new file mode 100644
index 0000000..f4eb5c3
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonLeftParenthesis
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonLeftParenthesis_OnClick
+{
+  #keys: '[414382.0.500261667]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
new file mode 100644
index 0000000..2f09779
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonMultiply
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonMultiply_OnClick
+{
+  #keys: '[414382.0.500261507]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
new file mode 100644
index 0000000..292ba04
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonRightParenthesis
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonRightParenthesis_OnClick
+{
+  #keys: '[414382.0.500261748]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
new file mode 100644
index 0000000..f8952da
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonRollBack
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonRollBack_OnClick
+{
+  #keys: '[414382.0.506055261]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      businessType := PriorityPolicyBusinessType.Text();
+      formulaText := PriorityPolicy::RollBackStr( MacroPlan,businessType,LabelFormula.Text());
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := PriorityPolicy::RollBackStr( MacroPlan,businessType,LabelCalculateValue.Text());
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
new file mode 100644
index 0000000..77d6f0a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/ButtonSubtract
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_ButtonSubtract_OnClick
+{
+  #keys: '[414382.0.500261427]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
new file mode 100644
index 0000000..926a7be
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/Buttonplus
+Response OnClick () id:Response_PanelPriorityPolicyOperationButton_Buttonplus_OnClick
+{
+  #keys: '[414382.0.500261347]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      text := this.Label();
+      
+      formulaText := LabelFormula.Text() + text;
+      LabelFormula.Text(formulaText);
+      
+      calculateTest := LabelCalculateValue.Text() + text;
+      LabelCalculateValue.Text(calculateTest);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def
new file mode 100644
index 0000000..9debaba
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionCh.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelPriorityPolicyOperationButton/DropDownStringList
+Response OnSelectionChanged () id:Response_PanelPriorityPolicyOperationButton_DropDownStringList_OnSelectionChanged
+{
+  #keys: '[414382.0.507827790]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebDropDownStringList_OnSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      info( "select changeed" );
+      businessType := PriorityPolicyBusinessType.Text();
+      coefficient := PriorityFactor::GetCoeffcientByName( MacroPlan,businessType,DropDownStringList.Text());
+      LabelPriorityPolicyCoefficient.Text([String]coefficient);
+      info("coefficient := " + [String]coefficient  );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
index a06057d..6ed7e84 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_PriorityPolicyBusinessType_OnSelectionChanged.def
@@ -11,7 +11,6 @@
     [*
       list := PriorityPolicy::GetDataByBusinessType( MacroPlan, PriorityPolicyBusinessType.Text());
       DataHolderPriorityPolicy.Data(&list);
-      DataHolderPriorityPolicySelectBusinessType.Data( PriorityPolicyBusinessType.Text());
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
index 75ab278..cd5d437 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/_ROOT_Component_FormPriorityPolicy.def
@@ -28,14 +28,15 @@
       ]
     }
     #child: ListPriorityPolicy
-    Component DataHolderPriorityPolicySelectBusinessType
+    #child: PanelPriorityPolicyOperation
+    Component DataHolderEditPriorityPolicy
     {
-      #keys: '[414382.0.490151931]'
+      #keys: '[414382.0.505995334]'
       BaseType: 'WebDataHolder'
-      Databinding: 'String'
+      Databinding: 'shadow[PriorityPolicy]*'
       Properties:
       [
-        Taborder: 3
+        Taborder: 4
       ]
     }
   ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient\043428.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient\043428.def"
deleted file mode 100644
index dbf9712..0000000
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Component_PanelPriorityPolicyCoefficient\043428.def"
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-Component PanelPriorityPolicyCoefficient
-{
-  #keys: '[414382.0.491374606]'
-  BaseType: 'WebPanel'
-  Children:
-  [
-    Component LabelPriorityPolicyCoefficient
-    {
-      #keys: '[414382.0.491374627]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Label: '鍥犲瓙鐨勭郴鏁�'
-        Taborder: 0
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 9
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def
deleted file mode 100644
index 6165dce..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated.def
+++ /dev/null
@@ -1,18 +0,0 @@
-Quintiq file version 2.0
-#parent: DataHolderPriorityPolicyOperationPriorityFactor
-Response OnCreated () id:Response_FormPriorityPolicyOperation_DataHolderPriorityPolicyOperationPriorityFactor_OnCreated
-{
-  #keys: '[414382.0.490152499]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      businessType := DataHolderPriorityPolicySelectBusinessType.Data();
-      list := PriorityFactor::GetDataByBusinessType( MacroPlan,businessType);
-      this.Data(&list);
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def
deleted file mode 100644
index b6f1c25..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCr.def
+++ /dev/null
@@ -1,16 +0,0 @@
-Quintiq file version 2.0
-#parent: PanelPriorityPolicyOperation/StringListPriorityPolicyOperation
-Response OnCreated () id:Response_PanelPriorityPolicyOperation_StringListPriorityPolicyOperation_OnCreated
-{
-  #keys: '[414382.0.490112531]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebComponent_OnCreated'
-  QuillAction
-  {
-    Body:
-    [*
-      list := DataHolderPriorityPolicyOperationPriorityFactor.Data();
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def
deleted file mode 100644
index 25d030b..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicyOperation/_ROOT_Component_FormPriorityPolicyOperation.def
+++ /dev/null
@@ -1,90 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: MacroPlannerWebApp
-OrphanComponent FormPriorityPolicyOperation
-{
-  #keys: '[414382.0.489382838]'
-  BaseType: 'WebForm'
-  Children:
-  [
-    Component PriorityPolicyName
-    {
-      #keys: '[414382.0.489442519]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Label: '浼樺厛绾х瓥鐣ュ悕绉�:'
-        Taborder: 0
-      ]
-    }
-    Component DataHolderPriorityPolicyOperation
-    {
-      #keys: '[414382.0.489442547]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'PriorityPolicy'
-      Properties:
-      [
-        Taborder: 1
-      ]
-    }
-    Component LabelFormula
-    {
-      #keys: '[414382.0.489443040]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Label: '鍏紡:'
-        Taborder: 2
-      ]
-    }
-    Component LabelCalculateValue
-    {
-      #keys: '[414382.0.489443084]'
-      BaseType: 'WebLabel'
-      Properties:
-      [
-        Label: '璁$畻鍊�:'
-        Taborder: 3
-      ]
-    }
-    #child: PanelPriorityPolicyOperation
-    Component DataHolderPriorityPolicySelectBusinessType
-    {
-      #keys: '[414382.0.490152351]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'String'
-      Children:
-      [
-        Component DataExtractorPriorityPolicySelectBusinessType
-        {
-          #keys: '[414382.0.490152374]'
-          BaseType: 'WebDataExtractor'
-          Properties:
-          [
-            DataType: 'String'
-            Source: 'DataHolderPriorityPolicySelectBusinessType'
-            Taborder: 0
-          ]
-        }
-      ]
-      Properties:
-      [
-        Taborder: 5
-      ]
-    }
-    Component DataHolderPriorityPolicyOperationPriorityFactor
-    {
-      #keys: '[414382.0.490152466]'
-      BaseType: 'WebDataHolder'
-      Databinding: 'structured[PriorityFactor]*'
-      Properties:
-      [
-        Taborder: 6
-      ]
-    }
-  ]
-  Properties:
-  [
-    Title: '浼樺厛绾х瓥鐣ラ厤缃�'
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def
new file mode 100644
index 0000000..cb600ee
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResult.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListPriorityResult
+{
+  #keys: '[414382.0.506312194]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityResult
+    {
+      #keys: '[414382.0.506312195]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'MacroPlan'
+        Source: 'MacroPlan'
+        Taborder: 0
+        Transformation: 'PriorityResult'
+      ]
+    }
+    #child: listActionBarPagePriorityResult
+    Component DataSetLevelPriorityResult
+    {
+      #keys: '[414382.0.506312200]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityResult
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"ProductID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandDate","title":"DemandDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityResultScore","title":"PriorityResultScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityResultScore"}}]'
+        ContextMenu: 'listContextMenuPriorityResult'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def
new file mode 100644
index 0000000..cb72c11
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultBusinessTypeDetails.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPriorityResultBusinessTypeDetails
+{
+  #keys: '[414382.0.506313048]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityResultDetails
+    {
+      #keys: '[414382.0.506313049]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[PriorityResultBusinessTypeDetail]'
+        Source: 'DataHolderPriorityResultBusinessTypeDetails'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPagePriorityResultDetails
+    Component DataSetLevelPriorityResultDetails
+    {
+      #keys: '[414382.0.506313054]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityResultDetails
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandDate","title":"DemandDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityResultScore","title":"PriorityResultScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityResultScore"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityPolicyName","title":"PriorityPolicyName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityPolicyName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorName","title":"PriorityFactorName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorGradingName","title":"PriorityFactorGradingName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorGradingName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityTotalScore","title":"PriorityTotalScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityTotalScore"}}]'
+        ContextMenu: 'listContextMenuPriorityResultDetails'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 2
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPriorityResultBusinessTypeDetails_WebMenu_OnClick
+    {
+      #keys: '[414382.0.506320636]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[1275.0.8208190]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails\043743.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails\043743.def"
new file mode 100644
index 0000000..d589b28
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_ListPriorityResultGroupDetails\043743.def"
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListPriorityResultGroupDetails
+{
+  #keys: '[414382.0.506313387]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPriorityResultDetails859
+    {
+      #keys: '[414382.0.506313388]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'structured[PriorityResultGroupDetail]'
+        Source: 'DataHolderPriorityResultGroupDetails'
+        Taborder: 0
+        Transformation: 'Elements'
+      ]
+    }
+    #child: listActionBarPagePriorityResultDetails642
+    Component DataSetLevelPriorityResultDetails872
+    {
+      #keys: '[414382.0.506313393]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPriorityResultDetails590
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesSegmentName","title":"SalesSegmentName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesSegmentName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"StockingPointID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Customer","title":"Customer","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Customer"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BusinessType","title":"BusinessType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BusinessType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"Quantity","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasureName","title":"UnitOfMeasureName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasureName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DemandDate","title":"DemandDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DemandDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityResultScore","title":"PriorityResultScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityResultScore"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityPolicyName","title":"PriorityPolicyName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityPolicyName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorName","title":"PriorityFactorName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityFactorGradingName","title":"PriorityFactorGradingName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityFactorGradingName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PriorityTotalScore","title":"PriorityTotalScore","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PriorityTotalScore"}}]'
+        ContextMenu: 'listContextMenuPriorityResultDetails590'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 4
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def
new file mode 100644
index 0000000..842f6ec
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResult.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelPriorityResult
+{
+  #keys: '[414382.0.506311784]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPriorityResult
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '浼樺厛绾х粨鏋滃垪琛�'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails\043633.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails\043633.def"
new file mode 100644
index 0000000..d8d93f4
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_PanelPriorityResultDetails\043633.def"
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+Component PanelPriorityResultDetails
+{
+  #keys: '[414382.0.506311801]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component LabelPriorityResultProductID
+    {
+      #keys: '[414382.0.506311846]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '浜у搧缂栫爜:'
+        Taborder: 0
+      ]
+    }
+    Component LabelPriorityResultBusinessTypeDetails
+    {
+      #keys: '[414382.0.506311875]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '浜嬩笟閮ㄤ紭鍏堢骇寰楀垎璇︽儏'
+        Taborder: 1
+      ]
+    }
+    Component LabelPriorityResultGroupDetails
+    {
+      #keys: '[414382.0.506311903]'
+      BaseType: 'WebLabel'
+      Properties:
+      [
+        Label: '闆嗗洟浼樺厛绾у緱鍒嗚鎯�'
+        Taborder: 3
+      ]
+    }
+    #child: ListPriorityResultBusinessTypeDetails
+    #child: ListPriorityResultGroupDetails
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '浼樺厛绾х粨鏋滄槑缁�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def
new file mode 100644
index 0000000..4da1e32
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityResult
+{
+  #keys: '[414382.0.506312197]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def
new file mode 100644
index 0000000..4951c85
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityResultDetails
+{
+  #keys: '[414382.0.506313051]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def
new file mode 100644
index 0000000..2f67232
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listActionBarPagePriorityResultDetails642.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePriorityResultDetails642
+{
+  #keys: '[414382.0.506313390]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def
new file mode 100644
index 0000000..33df24f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityResult
+{
+  #keys: '[414382.0.506312202]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def
new file mode 100644
index 0000000..8a23813
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityResultDetails
+{
+  #keys: '[414382.0.506313056]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuEmergencyTopping
+    {
+      #keys: '[414382.0.506320730]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'GEAR_TIME'
+        Taborder: 3
+        Title: 'Emergency Topping'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def
new file mode 100644
index 0000000..248d2aa
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Component_listContextMenuPriorityResultDetails590.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuPriorityResultDetails590
+{
+  #keys: '[414382.0.506313395]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def
new file mode 100644
index 0000000..430d449
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick.def
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: ListPriorityResultBusinessTypeDetails
+Response OnClick (
+  PriorityResultBusinessTypeDetail selection
+) id:Response_ListPriorityResultBusinessTypeDetails_MenuEmergencyTopping_OnClick
+{
+  #keys: '[414382.0.507572437]'
+  CanBindMultiple: false
+  DefinitionID => /ListPriorityResultBusinessTypeDetails/Responsedef_ListPriorityResultBusinessTypeDetails_WebMenu_OnClick
+  Initiator: 'MenuEmergencyTopping'
+  Precondition:
+  [*
+    return PriorityResultBusinessTypeDetail::CheckCanTopping(selection);
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      // 绱ф�ョ疆椤�
+      PriorityResultBusinessTypeDetail::EmergencyTopping( MacroPlan,selection);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def
new file mode 100644
index 0000000..493baf0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/Response_ListPriorityResult_OnUserSelectionChanged.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: ListPriorityResult
+Response OnUserSelectionChanged (
+  PriorityResult selection
+) id:Response_ListPriorityResult_OnUserSelectionChanged
+{
+  #keys: '[414382.0.506312631]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebList_OnUserSelectionChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      businessTypeDetails := selectset( selection,PriorityResultBusinessTypeDetail,p,true);
+      DataHolderPriorityResultBusinessTypeDetails.Data(&businessTypeDetails);
+      
+      groupDetails := selectset( selection,PriorityResultGroupDetail,p,true);
+      DataHolderPriorityResultGroupDetails.Data( &groupDetails);
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def
new file mode 100644
index 0000000..99f642d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPriorityResult/_ROOT_Component_FormPriorityResult.def
@@ -0,0 +1,33 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPriorityResult
+{
+  #keys: '[414382.0.506311765]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelPriorityResultDetails
+    #child: PanelPriorityResult
+    Component DataHolderPriorityResultBusinessTypeDetails
+    {
+      #keys: '[414382.0.506312058]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityResultBusinessTypeDetail]*'
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+    Component DataHolderPriorityResultGroupDetails
+    {
+      #keys: '[414382.0.506312077]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[PriorityResultGroupDetail]*'
+      Properties:
+      [
+        Taborder: 3
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw b/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
index 42bce1a..0cae0ba 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/OrderLock.vw
@@ -337,10 +337,10 @@
     userconfigurableinformation
     {
     }
-    page: 'applicationDevelopmentActionBarPageDef'
-    group: ''
     index: 2
     image: 'DOCUMENT_LOCK'
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
     description: ''
   }
   formatversion: 2
diff --git a/_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw b/_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw
new file mode 100644
index 0000000..3489b0c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/PriorityResults.vw
@@ -0,0 +1,2258 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_1
+      {
+        title: 'Scenario manager'
+        shown: true
+        componentID: 'FormScenarioManager'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormScenarioManager_ListScenario
+          {
+          }
+          FormScenarioManager_DataSetLevelScenario
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 90
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 197
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 2
+              subtotals: ''
+              width: 91
+            }
+            column_ChangedOn
+            {
+              columnId: 'ChangedOn'
+              dataPath: 'ChangedOn'
+              dataType: 'datetime'
+              title: 'Changed on'
+              index: 3
+              subtotals: ''
+              width: 99
+            }
+            column_StorageMode
+            {
+              columnId: 'StorageMode'
+              dataPath: 'StorageMode'
+              dataType: 'string'
+              title: 'StorageMode'
+              index: 4
+              subtotals: ''
+              width: 40
+            }
+          }
+        }
+      }
+      form_legacy_2
+      {
+        title: 'Assumptions'
+        shown: true
+        componentID: 'FormAssumptions'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 9
+          rowSpan: 8
+          columnPosition: 1
+          columnSpan: 5
+        }
+        components
+        {
+          FormAssumptions_ListAssumptions
+          {
+          }
+          FormAssumptions_DataSetLevelAssumptions
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              title: '绫诲埆'
+              index: 1
+              subtotals: ''
+              width: 108
+            }
+            column_Importance
+            {
+              columnId: 'Importance'
+              dataPath: 'Importance'
+              dataType: 'string'
+              title: '閲嶈鎬�'
+              index: 2
+              subtotals: ''
+              width: 110
+            }
+            column_Title
+            {
+              columnId: 'Title'
+              dataPath: 'Title'
+              dataType: 'string'
+              title: '鏍囬'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_ChangedBy
+            {
+              columnId: 'ChangedBy'
+              dataPath: 'ChangedBy'
+              dataType: 'string'
+              title: 'Changed by'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_CreatedOn
+            {
+              columnId: 'CreatedOn'
+              dataPath: 'CreatedOn'
+              dataType: 'datetime'
+              title: 'Created on'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormScenariosKPIsComparison
+      {
+        title: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        shown: true
+        componentID: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 16
+          columnPosition: 6
+          columnSpan: 7
+        }
+        components
+        {
+          FormScenariosKPIsComparison_MatrixEditorFinancialKPIs
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 200
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormScenariosKPIsComparison.MatrixEditorFinancialKPIs'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_DisplayValue
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'DisplayValue'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: ''
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'KPISetting.DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 0
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 1
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_1
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 2
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_1
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 3
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_2
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 4
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_2
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 5
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_3
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 6
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_3
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 7
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_4
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 8
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_4
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 9
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_5
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 10
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_5
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 11
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_6
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 12
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_6
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 13
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_7
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 14
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_7
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 15
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormSanityCheck
+      {
+        title: 'Sanity Check'
+        shown: false
+        componentID: 'FormSanityCheck'
+        layout
+        {
+          mode: 'dockright'
+          index: 16
+        }
+        components
+        {
+          FormSanityCheck_PanelSanityCheckToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckContent
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckGroup
+          {
+            sizeRatio: 4
+          }
+          FormSanityCheck_ListSanityCheckGroup
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckGroup
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Group
+            {
+              columnId: 'Group'
+              dataPath: 'Group'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 270
+            }
+            column__Expr3
+            {
+              columnId: '_Expr3'
+              dataPath: '_Expr3'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 95
+            }
+          }
+          FormSanityCheck_PanelSanityCheckMessage
+          {
+            sizeRatio: 5
+          }
+          FormSanityCheck_ListSanityCheckMessage
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckMessage
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Messages
+            {
+              columnId: 'Messages'
+              dataPath: 'Messages'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 32
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 585
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_8
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 17
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_8
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 18
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_9
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 19
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_9
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 20
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_10
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 21
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_10
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 22
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_11
+      {
+        title: 'Optimizer Puzzles'
+        shown: true
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 23
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_11
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 24
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_12
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 25
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_12
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 26
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_13
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 27
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_13
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 28
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_14
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 29
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_14
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 30
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormOptimizerPuzzles_15
+      {
+        title: 'Optimizer Puzzles'
+        shown: false
+        componentID: 'FormOptimizerPuzzles'
+        layout
+        {
+          mode: 'dockright'
+          index: 31
+        }
+        components
+        {
+          FormOptimizerPuzzles_ListOptimizerPuzzles
+          {
+          }
+          FormOptimizerPuzzles_DataSetLevelOptimizerPuzzles
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 109
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              title: '鎻忚堪'
+              index: 2
+              subtotals: ''
+              width: 207
+            }
+          }
+        }
+      }
+      form_FormKPI_15
+      {
+        title: 'KPI Dashboard'
+        shown: false
+        componentID: 'FormKPI'
+        layout
+        {
+          mode: 'dockright'
+          index: 32
+        }
+        components
+        {
+          FormKPI_PanelKPI
+          {
+            sizeRatio: 1
+            activeChild: 'PanelKPISelection'
+          }
+          FormKPI_PanelKPIDashboard
+          {
+            sizeRatio: 1
+          }
+          FormKPI_PanelKPISelection
+          {
+            sizeRatio: 1
+          }
+          FormKPI_ListKPISelection
+          {
+            QuillViewData
+            {
+              Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume'
+            }
+          }
+          FormKPI_DataSetLevelKPISelection
+          {
+            groupDepth: -1
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              title: 'All constraints'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 1
+              subtotals: ''
+              width: 200
+            }
+          }
+        }
+      }
+      form_FormSanityCheck_1
+      {
+        title: 'Sanity Check'
+        shown: false
+        componentID: 'FormSanityCheck'
+        layout
+        {
+          mode: 'dockright'
+          index: 33
+        }
+        components
+        {
+          FormSanityCheck_PanelSanityCheckToolbar
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckContent
+          {
+            sizeRatio: 1
+          }
+          FormSanityCheck_PanelSanityCheckGroup
+          {
+            sizeRatio: 4
+          }
+          FormSanityCheck_ListSanityCheckGroup
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckGroup
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Group
+            {
+              columnId: 'Group'
+              dataPath: 'Group'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 270
+            }
+            column__Expr3
+            {
+              columnId: '_Expr3'
+              dataPath: '_Expr3'
+              dataType: 'number'
+              index: 4
+              subtotals: ''
+              width: 95
+            }
+          }
+          FormSanityCheck_PanelSanityCheckMessage
+          {
+            sizeRatio: 5
+          }
+          FormSanityCheck_ListSanityCheckMessage
+          {
+          }
+          FormSanityCheck_DataSetLevelSanityCheckMessage
+          {
+            groupDepth: -1
+            sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description'
+            column_All_constraints
+            {
+              columnId: 'All constraints'
+              dataPath: 'All constraints'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 32
+            }
+            column_Show
+            {
+              columnId: 'Show'
+              dataPath: 'Show'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 32
+            }
+            column_Category
+            {
+              columnId: 'Category'
+              dataPath: 'Category'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 32
+            }
+            column_Messages
+            {
+              columnId: 'Messages'
+              dataPath: 'Messages'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 32
+            }
+            column_Description
+            {
+              columnId: 'Description'
+              dataPath: 'Description'
+              dataType: 'string'
+              index: 4
+              subtotals: ''
+              width: 585
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 15
+    image: ''
+    description: ''
+  }
+  formatversion: 2
+  id: 'PriorityResults'
+  name: 'PriorityResults'
+  isglobal: false
+  isroot: true
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw b/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
index 6f6e533..4bba15d 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw
@@ -337,10 +337,10 @@
     userconfigurableinformation
     {
     }
-    page: 'applicationDevelopmentActionBarPageDef'
-    group: ''
     index: 1
     image: 'WINDOW_TIME'
+    page: 'applicationDevelopmentActionBarPageDef'
+    group: ''
     description: ''
   }
   formatversion: 2
diff --git a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
index b4cfb85..74c8fca 100644
--- a/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
+++ b/_Main/UI/MacroPlannerWebApp/_ROOT_Project_MacroPlannerWebApp.qp
@@ -5,7 +5,7 @@
   ProjectProperties
   {
     ApplicationComponentName: 'ApplicationMacroPlanner'
-    BuildVersion: '2022.3.0.34'
+    BuildVersion: '2022.3.0.113'
     Description: 'Quintiq Macro Planner'
     ProjectKind: 'WebClient'
   }

--
Gitblit v1.9.3