From b1831c94702a977123b28cb8bfefb3f1edfdced9 Mon Sep 17 00:00:00 2001
From: limj <limj@taizhitech.com>
Date: 星期四, 21 九月 2023 20:10:53 +0800
Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/TIANMA_JITUAN into dev_lmj

---
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def       |   17 
 _Main/BL/Type_CustomerOrder/StaticMethod_LockUnlock.qbl                                                                                                                       |   59 +
 _Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl                                                                                                         |    2 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInSeason.qbl                                                                                                       |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_listContextMenuCapacityAndSaleBudgeFilterYear#1.def                    |   25 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity4.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged.def                 |   18 
 _Main/UI/MacroPlannerWebApp/Views/OrderLock.vw                                                                                                                                |    4 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity3.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_ProductId.qbl                                                                                                                     |    7 
 _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/BL/Type_MappingAnnualBudget/Attribute_MonthlySales2.qbl                                                                                                                 |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_BusinessType.qbl                                                                                                                  |    8 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByYear.qbl                                                                                                        |   18 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInHalfYear.qbl                                                                                                     |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/_ROOT_Component_FormOrderLock.def                                                                                         |   11 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales9.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/_ROOT_Component_FormCapacityAndSaleBudgeFilterBusinessType.def                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                                                                   |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Response_PanelOrderLockHeader_545_RadioButtonGroupOrderLockHeader_OnChanged.def                                           |   18 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetBySeason.qbl                                                                                                              |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity6.qbl                                                                                                           |    8 
 _Main/BL/Relations/Relation_MappingAnnualBudget_MPSync_MPSync_MappingAnnualBudget.qbl                                                                                         |   23 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity5.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity10.qbl                                                                                                          |    8 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByMonth.qbl                                                                                                             |   22 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSaleByYear.qbl                                                                                                              |   20 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity11.qbl                                                                                                        |    8 
 _Main/BL/Type_OrderLockLog/Attribute_Notes.qbl                                                                                                                                |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity9.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByYear.qbl                                                                                                                 |    2 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales6.qbl                                                                                                                 |    8 
 _Main/BL/Type_MappingAnnualBudget/StaticMethod_GetSheetBySeason.qbl                                                                                                           |   21 
 _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/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/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity7.qbl                                                                                                         |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def                                                     |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_ListOrderLock#844.def                                                                                           |    3 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_MPSync_MPSync_Ca.qbl                                                                           |   23 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity2.qbl                                                                                                           |    8 
 _Main/BL/Type_MappingAnnualBudget/Method_GetSaleAmountInYear.qbl                                                                                                              |   15 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl                                                                            |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def |   16 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSaleByMonth.qbl                                                                                                                |    2 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart#95.qbl                                                                                                         |  301 ++++++++
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity9.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def             |   16 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/_ROOT_Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray.qbl                                            |   10 
 _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_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl                                                                                                        |    4 
 _Main/BL/Type_MappingAnnualBudget/Method_GetCapacityInSheetInYear.qbl                                                                                                         |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLock/Component_MatrixEditorProductPlanning#679.def                                                                             |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales1.qbl                                                                                                                 |    8 
 _Main/BL/Type_OrderLockLog/Attribute_IsLocked#2.qbl                                                                                                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_OnUserChecke.def |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_ListCapacityAndSaleBudgeFilterBusinessType_OnUserCheckedChanged#670.def             |   16 
 _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/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_MappingCustomerOrder/StaticMethod_GetNewSupplyBySeason.qbl                                                                                                      |   21 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity7.qbl                                                                                                           |    8 
 _Main/BL/Type_PRData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl                                                                                                          |   23 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByMonth.qbl                                                                                                       |   22 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales8.qbl                                                                                                                 |    8 
 _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/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listActionBarPageCapacityAndSaleBudgeFilterBusinessType.def                        |   10 
 _Main/UI/MacroPlannerWebApp/Views/SOP_Versions.vw                                                                                                                             |    4 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity5.qbl                                                                                                           |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPriorityPolicy/Response_DataHolderPriorityPolicySelectBusinessType_OnCreated.def                                                    |   17 
 _Main/BL/Type_MappingAnnualBudget/_ROOT_Type_MappingAnnualBudget.qbl                                                                                                          |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/_ROOT_Component_FormOrderLockLog.def                                                                                   |   43 +
 _Main/BL/Type_MappingAnnualBudget/Attribute_yearNo.qbl                                                                                                                        |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_PanelOrderLockLog.def                                                                                        |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_OnCreated.def                                                                                    |    6 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                          |   73 -
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/_ROOT_Component_FormCapacityAndSaleBudgeFilterItem.def                                               |    3 
 _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_MappingSaleBudge/StaticMethod_GetSheetByYear.qbl                                                                                                                |    2 
 _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_MPSync/Method_RefreshCapacityAndSaleBudgeFilter.qbl                                                                                                             |   20 
 _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_FormOrderLock/Response_PanelOrderLockHeader_545_ButtonOrderLockHeaderLock_OnClick.def                                                   |   37 +
 _Main/UI/MacroPlannerWebApp/Component_FormOrderLockLog/Component_ListOrderLockLog.def                                                                                         |   41 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                                                         |    3 
 _Main/BL/Type_PRHistoryData/StaticMethod_GeneratesTheSpecifiedXMLColumn.qbl                                                                                                   |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/_ROOT_Component_FormCapacityAndSaleBudgeChart.def                                                         |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_listContextMenuCapacityAndSaleBudgeFilterYear#1.def                                |   25 
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByHalfYear.qbl                                                                                                            |    2 
 _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/BL/Type_MappingAnnualBudget/Attribute_MonthlyModCapacity1.qbl                                                                                                           |    8 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySales5.qbl                                                                                                                 |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def                                     |   43 +
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Attribute_PlaceOfProductionOfArray.qbl                                                                       |    7 
 _Main/BL/Type_MappingAnnualBudget/Attribute_MonthlySheetCapacity8.qbl                                                                                                         |    8 
 _Main/BL/Type_MappingSaleBudge/Attribute_YearNo.qbl                                                                                                                           |    7 
 _Main/BL/Type_PRData/StaticMethod_ExportTheFileStream.qbl                                                                                                                     |   40 
 _Main/BL/Type_ScenarioManager/Method_CapacityAndSaleBudgeChart.qbl                                                                                                            |   66 +
 _Main/BL/Type_MappingSaleBudge/StaticMethod_GetSheetByMonth.qbl                                                                                                               |    2 
 _Main/BL/Type_MappingCustomerOrder/StaticMethod_GetNewSupplyByHalfYear.qbl                                                                                                    |   21 
 131 files changed, 1,952 insertions(+), 179 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/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_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_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_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_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/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/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/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

--
Gitblit v1.9.3