From 019f70bf90f944008fd04471d9471cd28c1154d6 Mon Sep 17 00:00:00 2001
From: yypsybs <yypsybs@foxmail.com>
Date: 星期二, 17 十月 2023 14:54:29 +0800
Subject: [PATCH] 转移中间数据至globalOtdSop

---
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl                                                                                            |    2 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl                                                                                                               |    0 
 _Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl                                                                                                         |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl                                                                                          |   22 +
 _Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl                                                                                                        |    2 
 _Main/BL/Type_PRHistoryData/Method_Recall.qbl                                                                                                                                 |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def                                                   |    4 
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl                                                                                        |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl                                                                                                  |   95 +++++
 _Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl                                                                                                  |    2 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl                                                                                                      |    9 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl                                                                           |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def                                                     |    4 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl                                                                           |   23 +
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl                                                                                                       |    3 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def                                                                             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData#844.def                                                                                   |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl                                                                                               |   22 +
 _Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl                                                                                         |   23 +
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl                                                                                                |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def                                                       |    2 
 _Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl                                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def                                                                    |    8 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl                                                                           |   23 +
 _Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl                                                                                                  |    7 
 _Main/BL/Type_PRData/StaticMethod_DoCall.qbl                                                                                                                                  |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def                                                                   |   12 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl                                                                           |   23 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def                                                              |    4 
 _Main/BL/Type_PRHistoryData/Method_PrintCall.qbl                                                                                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def                                                                |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def                                                     |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl                                                                                                  |    2 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl                                                                                                       |    0 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl                                                                                               |    2 
 _Main/BL/Type_PRData/Method_PrintCall.qbl                                                                                                                                     |    5 
 _Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl                                                                                                                           |    2 
 _Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl                                                                                                |    2 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl                                                                                                      |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl                                                                                                   |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl                                                                                                 |    2 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl                                                                           |   23 +
 _Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl                                                                                                 |   15 +
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason#000.qbl                                                                                             |   26 +
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl                                                                           |   24 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def                                                   |   12 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl                                                                           |   23 +
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl                                                                                              |    2 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl                                                                                                 |   29 +
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl                                                                                                        |    4 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl                                                                           |   23 +
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick#623.def                                                                        |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def             |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def                                                  |   18 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl                                                                           |   23 +
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl                                                                                                 |   93 +++++
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def                                                                         |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl                                                                                                   |   18 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl                                                                                                         |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl                                                                                              |   18 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl                                                                                            |   26 +
 _Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning#662.qbl                                                                                                                  |    6 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def                                                  |   10 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                                             |   12 
 /dev/null                                                                                                                                                                     |   21 -
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl                                                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def                                     |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnC#663.def |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def             |    2 
 _Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl                                                                                                |   18 
 _Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def                                                                                    |    4 
 _Main/BL/Type_PRData/Method_DoCall.qbl                                                                                                                                        |    5 
 73 files changed, 659 insertions(+), 184 deletions(-)

diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl
new file mode 100644
index 0000000..9b5d714
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_Capacity.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeChartElement_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeChartElement
+{
+  #keys: '1[414384.0.999194645]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.999194647][414384.0.999194646][414384.0.999194648]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeChartElement
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeChartElement
+  {
+    #keys: '3[414384.0.999194650][414384.0.999194649][414384.0.999194651]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl
deleted file mode 100644
index 2d5380f..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_Capa.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeChartElement_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeChartElement
-{
-  #keys: '1[414384.0.921264786]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264788][414384.0.921264787][414384.0.921264789]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeChartElement
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeChartElement
-  {
-    #keys: '3[414384.0.921264791][414384.0.921264790][414384.0.921264792]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl
new file mode 100644
index 0000000..98fd182
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndS.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeChartRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeChartRow
+{
+  #keys: '1[414384.0.996881297]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881299][414384.0.996881298][414384.0.996881300]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeChartRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeChartRow
+  {
+    #keys: '3[414384.0.996881302][414384.0.996881301][414384.0.996881303]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl
deleted file mode 100644
index a5fe974..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_Capacity.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeChartRow_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeChartRow
-{
-  #keys: '1[414384.0.921264769]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264771][414384.0.921264770][414384.0.921264772]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeChartRow
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeChartRow
-  {
-    #keys: '3[414384.0.921264774][414384.0.921264773][414384.0.921264775]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl
new file mode 100644
index 0000000..bb2e1ee
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_Cap.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeCompareItemColumn_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeCompareItemColumn
+{
+  #keys: '1[414384.0.996881443]'
+  ProceduralSequenceRelationStrategy
+  {
+    #keys: '13[0.0.0][414384.0.996881465][414384.0.996881459][414384.0.996881466][414384.0.996881460][414384.0.996881467][414384.0.996881461][414384.0.996881468][414384.0.996881462][414384.0.996881469][414384.0.996881463][414384.0.996881470][414384.0.996881464]'
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881445][414384.0.996881444][414384.0.996881446]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeCompareItemColumn
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeCompareItemColumn
+  {
+    #keys: '3[414384.0.996881448][414384.0.996881447][414384.0.996881449]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl
deleted file mode 100644
index 132284d..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable.qbl
+++ /dev/null
@@ -1,24 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeCompareItemColumn_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeCompareItemColumn
-{
-  #keys: '1[414384.0.921264730]'
-  ProceduralSequenceRelationStrategy
-  {
-    #keys: '13[0.0.0][414384.0.921264749][414384.0.921264743][414384.0.921264750][414384.0.921264744][414384.0.921264751][414384.0.921264745][414384.0.921264752][414384.0.921264746][414384.0.921264753][414384.0.921264747][414384.0.921264754][414384.0.921264748]'
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264732][414384.0.921264731][414384.0.921264733]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeCompareItemColumn
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeCompareItemColumn
-  {
-    #keys: '3[414384.0.921264735][414384.0.921264734][414384.0.921264736]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl
new file mode 100644
index 0000000..9fb092c
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_Capaci.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeCompareItemRow_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeCompareItemRow
+{
+  #keys: '1[414384.0.996881317]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881319][414384.0.996881318][414384.0.996881320]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeCompareItemRow
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeCompareItemRow
+  {
+    #keys: '3[414384.0.996881322][414384.0.996881321][414384.0.996881323]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl
deleted file mode 100644
index d33c56f..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_Ca.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeCompareItemRow_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeCompareItemRow
-{
-  #keys: '1[414384.0.921264713]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264715][414384.0.921264714][414384.0.921264716]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeCompareItemRow
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeCompareItemRow
-  {
-    #keys: '3[414384.0.921264718][414384.0.921264717][414384.0.921264719]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl
new file mode 100644
index 0000000..8e2a345
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_Ca.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterBusinessType_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterBusinessType
+{
+  #keys: '1[414384.0.996881340]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881342][414384.0.996881341][414384.0.996881343]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterBusinessType
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterBusinessType
+  {
+    #keys: '3[414384.0.996881345][414384.0.996881344][414384.0.996881346]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl
deleted file mode 100644
index f0b0349..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTabl.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterBusinessType_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterBusinessType
-{
-  #keys: '1[414384.0.921264696]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264698][414384.0.921264697][414384.0.921264699]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterBusinessType
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterBusinessType
-  {
-    #keys: '3[414384.0.921264701][414384.0.921264700][414384.0.921264702]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
new file mode 100644
index 0000000..d2d3db4
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterItem_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterItem
+{
+  #keys: '1[414384.0.996881358]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881360][414384.0.996881359][414384.0.996881361]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterItem
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterItem
+  {
+    #keys: '3[414384.0.996881363][414384.0.996881362][414384.0.996881364]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
deleted file mode 100644
index 7933192..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterItem_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterItem
-{
-  #keys: '1[414384.0.921264679]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264681][414384.0.921264680][414384.0.921264682]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterItem
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterItem
-  {
-    #keys: '3[414384.0.921264684][414384.0.921264683][414384.0.921264685]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl
new file mode 100644
index 0000000..5dcd675
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityA.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterMonth_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterMonth
+{
+  #keys: '1[414384.0.996881381]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881383][414384.0.996881382][414384.0.996881384]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterMonth
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterMonth
+  {
+    #keys: '3[414384.0.996881386][414384.0.996881385][414384.0.996881387]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl
deleted file mode 100644
index d8b447f..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_Capac.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterMonth_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterMonth
-{
-  #keys: '1[414384.0.921264662]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264664][414384.0.921264663][414384.0.921264665]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterMonth
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterMonth
-  {
-    #keys: '3[414384.0.921264667][414384.0.921264666][414384.0.921264668]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl
new file mode 100644
index 0000000..2a10a12
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_Glo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+{
+  #keys: '1[414384.0.996881401]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881403][414384.0.996881402][414384.0.996881404]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
+  {
+    #keys: '3[414384.0.996881406][414384.0.996881405][414384.0.996881407]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl
deleted file mode 100644
index e10c202..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_G.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterPlaceOfProductionOfArray_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
-{
-  #keys: '1[414384.0.921264645]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264647][414384.0.921264646][414384.0.921264648]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterPlaceOfProductionOfArray
-  {
-    #keys: '3[414384.0.921264650][414384.0.921264649][414384.0.921264651]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
new file mode 100644
index 0000000..74e2009
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeFilterYear_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeFilterYear
+{
+  #keys: '1[414384.0.996881421]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.996881423][414384.0.996881422][414384.0.996881424]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeFilterYear
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeFilterYear
+  {
+    #keys: '3[414384.0.996881426][414384.0.996881425][414384.0.996881427]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
deleted file mode 100644
index 8df8fb7..0000000
--- a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_Capaci.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation CapacityAndSaleBudgeFilterYear_GlobalOTDTable_GlobalOTDTable_CapacityAndSaleBudgeFilterYear
-{
-  #keys: '1[414384.0.921264628]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.921264630][414384.0.921264629][414384.0.921264631]'
-    Cardinality: '0to1'
-    ObjectDefinition: CapacityAndSaleBudgeFilterYear
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide CapacityAndSaleBudgeFilterYear
-  {
-    #keys: '3[414384.0.921264633][414384.0.921264632][414384.0.921264634]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl b/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl
new file mode 100644
index 0000000..cdcda63
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PRHistoryData_GlobalOTDSOP_GlobalOTDSOP_PRHistoryData
+{
+  #keys: '1[414384.0.999194777]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414384.0.999194779][414384.0.999194778][414384.0.999194780]'
+    Cardinality: '0to1'
+    ObjectDefinition: PRHistoryData
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PRHistoryData
+  {
+    #keys: '3[414384.0.999194782][414384.0.999194781][414384.0.999194783]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData.qbl b/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData.qbl
deleted file mode 100644
index f5e24f8..0000000
--- a/_Main/BL/Relations/Relation_PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation PRHistoryData_GlobalOTDTable_GlobalOTDTable_PRHistoryData
-{
-  #keys: '1[414384.0.789498541]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide GlobalOTDTable
-  {
-    #keys: '3[414384.0.789498543][414384.0.789498542][414384.0.789498544]'
-    Cardinality: '0to1'
-    ObjectDefinition: PRHistoryData
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide PRHistoryData
-  {
-    #keys: '3[414384.0.789498546][414384.0.789498545][414384.0.789498547]'
-    Cardinality: '1toN'
-    ObjectDefinition: GlobalOTDTable
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl b/_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl
deleted file mode 100644
index 743c739..0000000
--- a/_Main/BL/Relations/Relation_YuxTest_MPSync_MPSync_YuxTest.qbl
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Relation YuxTest_MPSync_MPSync_YuxTest
-{
-  #keys: '1[414384.0.915854641]'
-  DefaultRelationStrategy
-  {
-  }
-  RelationSide.LeftSide MPSync
-  {
-    #keys: '3[414384.0.915854643][414384.0.915854642][414384.0.915854644]'
-    Cardinality: '0to1'
-    ObjectDefinition: YuxTest
-    OwningSide: 'Reference'
-  }
-  RelationSide.RightSide YuxTest
-  {
-    #keys: '3[414384.0.915854646][414384.0.915854645][414384.0.915854647]'
-    Cardinality: '1toN'
-    ObjectDefinition: MPSync
-    OwningSide: 'Owned'
-  }
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
index 3d1269f..db5dca4 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_TestData.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod TestData (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鐢熸垚娴嬭瘯鏁版嵁'
@@ -12,7 +12,6 @@
     info( "鐢熸垚骞村害浜ч攢棰勭畻鎶ヨ〃娴嬭瘯鏁版嵁" )
     
     parent.CapacityAndSaleBudgeChartElement( relflush );
-    
     for( sc := 0; sc < 4; sc := sc + 1 ) {
       scenarioName := "SC" + [String]sc;
       for( i := 0; i < 4; i := i + 1 ) {
@@ -20,9 +19,9 @@
         for( j := 1; j <= 12; j := j + 1 ) {
           monthString := "MONTH" + ifexpr( j < 10, "0" + [String]j, [String]j );
           parent.CapacityAndSaleBudgeChartElement( relnew, 
-                                                            BusinessTypeOrPlaceOfProductionOfArray := businessTypeString, 
-                                                            TimeStringAndScenarioName := monthString + " - " + scenarioName, 
-                                                            Quantity := Real::Random( 20.0, 30.0 ) );
+                                                   BusinessTypeOrPlaceOfProductionOfArray := businessTypeString, 
+                                                   TimeStringAndScenarioName := monthString + " - " + scenarioName, 
+                                                   Quantity := Real::Random( 20.0, 30.0 ) );
         }
       }
     }
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
index 76a61fb..920eb5b 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartRow/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String businessType,
   String placeOfProductionOfArray
 ) as CapacityAndSaleBudgeChartRow
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
index 77bfe99..7caa364 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String columnName
 ) as CapacityAndSaleBudgeCompareItemColumn
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
index 7a485f5..230f93e 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemRow/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String businessType,
   String placeOfProductionOfArray
 ) as CapacityAndSaleBudgeCompareItemRow
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
index 33a800b..08b6273 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String value
 )
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
index e05188e..b012fc8 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String itemName
 )
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
index 14b634a..3601509 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterItem/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initial (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鍒濆鍖栧姣旈」'
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
index f14808d..8159900 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterMonth/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initial (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鍒濆鍖栧勾浠�'
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
index 3e96143..f8c8fc9 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_CreateIfNotExist.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateIfNotExist (
-  GlobalOTDTable parent,
+  GlobalOTDSOP parent,
   String value
 )
 {
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
index dc5898d..72badb3 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterYear/StaticMethod_Initial.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Initial (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 )
 {
   Description: '鍒濆鍖栧勾浠�'
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl
deleted file mode 100644
index 15f1b3b..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_RefreshCapacityAndSaleBudgeFilter.qbl
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method RefreshCapacityAndSaleBudgeFilter (
-  Boolean deleteBeforeCreate
-)
-{
-  TextBody:
-  [*
-    if( deleteBeforeCreate ) {
-      this.CapacityAndSaleBudgeFilterBusinessType( relflush );
-      this.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
-    }
-    // yypsybs Sep-21-2023 (created)
-    debuginfo( "=====RefreshCapacityAndSaleBudgeFilter====" );
-    businessTypes := selectuniquevalues( this, Global_MappingAnnualBudgetData, item, item.BusinessType() );
-    debuginfo( [String]businessTypes.Size() );
-    traverse( businessTypes, Elements, businessType ) {
-      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( this, businessType );
-    }
-    placeOfProductionOfArrays := selectuniquevalues( this, Global_MappingAnnualBudgetData, item, item.OrgCodeFromBom() );
-    debuginfo( [String]placeOfProductionOfArrays.Size() );
-    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
-      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( this, placeOfProductionOfArray );
-    }
-  *]
-}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl" b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
similarity index 100%
rename from "_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeChart\043156.qbl"
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
similarity index 96%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index 6937389..64a208a 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -5,7 +5,7 @@
   CapacityAndSaleBudgeFilterItems items,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  GlobalOTDTable otdTable
+  const GlobalOTDTable otdTable
 )
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
@@ -35,7 +35,7 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    historyData := selectset( this, Global_MappingAnnualBudgetData, item, true );
+    historyData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
     debuginfo( "historyData : " + [String]historyData.Size() );
     
     traverse( historyData, Elements, one ) {
@@ -77,14 +77,14 @@
         traverse( months, Elements, month ) {
           columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), this, DateTime::Now().Year(), month.MonthNo() );
+            cellReal := Global_MappingForecast::GetQuantityByMonth( row.GetProductCodes(), otdTable, 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 := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), this, year.YearNo() );
+          cellReal := Global_MappingForecast::GetQuantityByYear( row.GetProductCodes(), otdTable, year.YearNo() );
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
@@ -120,14 +120,14 @@
         traverse( months, Elements, month ) {
           columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
           traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-            cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), this, year.YearNo(), month.MonthNo() );
+            cellReal := Global_MappingAnnualBudgetData::GetSaleByMonth( row.GetProductCodes(), otdTable, 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 := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), this, year.YearNo() );
+          cellReal := Global_MappingAnnualBudgetData::GetSaleByYear( row.GetProductCodes(), otdTable, year.YearNo() );
           cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
           cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
         }
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompareExport.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl
similarity index 100%
rename from _Main/BL/Type_GlobalDTOTable/Method_CapacityAndSaleBudgeCompareExport.qbl
rename to _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompareExport.qbl
diff --git a/_Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl
new file mode 100644
index 0000000..cda1cca
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_RefreshCapacityAndSaleBudgeFilter.qbl
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod RefreshCapacityAndSaleBudgeFilter (
+  Boolean deleteBeforeCreate,
+  const GlobalOTDTable otdTable,
+  GlobalOTDSOP otdSop
+)
+{
+  TextBody:
+  [*
+    // yypsybs Oct-17-2023 (created)
+    if( deleteBeforeCreate ) {
+      otdSop.CapacityAndSaleBudgeFilterBusinessType( relflush );
+      otdSop.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );  
+    }
+    // yypsybs Sep-21-2023 (created)
+    debuginfo( "=====RefreshCapacityAndSaleBudgeFilter====" );
+    businessTypes := selectuniquevalues( otdTable, Global_MappingAnnualBudgetData, item, item.BusinessType() );
+    debuginfo( [String]businessTypes.Size() );
+    traverse( businessTypes, Elements, businessType ) {
+      CapacityAndSaleBudgeFilterBusinessType::CreateIfNotExist( otdSop, businessType );
+    }
+    placeOfProductionOfArrays := selectuniquevalues( otdTable, Global_MappingAnnualBudgetData, item, item.OrgCodeFromBom() );
+    debuginfo( [String]placeOfProductionOfArrays.Size() );
+    traverse( placeOfProductionOfArrays, Elements, placeOfProductionOfArray ) {
+      CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::CreateIfNotExist( otdSop, placeOfProductionOfArray );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
index 947ff12..68956ea 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInPCSInYear.qbl
@@ -1,15 +1,23 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInPCSInYear () as Real
+Method GetCapacityInPCSInYear () const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlyModCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
-    }
+    result := result + [Real]this.MonthlyModCapacity1();
+    result := result + [Real]this.MonthlyModCapacity2();
+    result := result + [Real]this.MonthlyModCapacity3();
+    result := result + [Real]this.MonthlyModCapacity4();
+    result := result + [Real]this.MonthlyModCapacity5();
+    result := result + [Real]this.MonthlyModCapacity6();
+    result := result + [Real]this.MonthlyModCapacity7();
+    result := result + [Real]this.MonthlyModCapacity8();
+    result := result + [Real]this.MonthlyModCapacity9();
+    result := result + [Real]this.MonthlyModCapacity10();
+    result := result + [Real]this.MonthlyModCapacity11();
+    result := result + [Real]this.MonthlyModCapacity12();
     return result;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
index cfe0c10..a9c7789 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInHalfYear.qbl
@@ -2,17 +2,27 @@
 #parent: #root
 Method GetCapacityInSheetInHalfYear (
   Number halfNo
-) as Real
+) const 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( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( halfNo = 1 ) {
+      result := result + [Real]this.MonthlySheetCapacity1();
+      result := result + [Real]this.MonthlySheetCapacity2();
+      result := result + [Real]this.MonthlySheetCapacity3();
+      result := result + [Real]this.MonthlySheetCapacity4();
+      result := result + [Real]this.MonthlySheetCapacity5();
+      result := result + [Real]this.MonthlySheetCapacity6();
+    }
+    if( halfNo = 2 ) {
+      result := result + [Real]this.MonthlySheetCapacity7();
+      result := result + [Real]this.MonthlySheetCapacity8();
+      result := result + [Real]this.MonthlySheetCapacity9();
+      result := result + [Real]this.MonthlySheetCapacity10();
+      result := result + [Real]this.MonthlySheetCapacity11();
+      result := result + [Real]this.MonthlySheetCapacity12();
     }
     return result;
   *]
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
index 7da4592..66432bd 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInSeason.qbl
@@ -2,17 +2,31 @@
 #parent: #root
 Method GetCapacityInSheetInSeason (
   Number seasonNo
-) as Real
+) const 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( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( seasonNo = 1 ) {
+      result := result + [Real]this.MonthlySheetCapacity1();
+      result := result + [Real]this.MonthlySheetCapacity2();
+      result := result + [Real]this.MonthlySheetCapacity3();
+    }
+    if( seasonNo = 2 ) {
+      result := result + [Real]this.MonthlySheetCapacity4();
+      result := result + [Real]this.MonthlySheetCapacity5();
+      result := result + [Real]this.MonthlySheetCapacity6();
+    }
+    if( seasonNo = 3 ) {
+      result := result + [Real]this.MonthlySheetCapacity7();
+      result := result + [Real]this.MonthlySheetCapacity8();
+      result := result + [Real]this.MonthlySheetCapacity9();
+    }
+    if( seasonNo = 4 ) {
+      result := result + [Real]this.MonthlySheetCapacity10();
+      result := result + [Real]this.MonthlySheetCapacity11();
+      result := result + [Real]this.MonthlySheetCapacity12();
     }
     return result;
   *]
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
index d044dac..e4e1ff1 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetCapacityInSheetInYear.qbl
@@ -1,15 +1,23 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetCapacityInSheetInYear () as Real
+Method GetCapacityInSheetInYear () const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]i );
-      result := result + [Real]field.GetString( this );
-    }
+    result := result + [Real]this.MonthlySheetCapacity1();
+    result := result + [Real]this.MonthlySheetCapacity2();
+    result := result + [Real]this.MonthlySheetCapacity3();
+    result := result + [Real]this.MonthlySheetCapacity4();
+    result := result + [Real]this.MonthlySheetCapacity5();
+    result := result + [Real]this.MonthlySheetCapacity6();
+    result := result + [Real]this.MonthlySheetCapacity7();
+    result := result + [Real]this.MonthlySheetCapacity8();
+    result := result + [Real]this.MonthlySheetCapacity9();
+    result := result + [Real]this.MonthlySheetCapacity10();
+    result := result + [Real]this.MonthlySheetCapacity11();
+    result := result + [Real]this.MonthlySheetCapacity12();
     return result;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
index d882fef..bbddd8b 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInHalfYear.qbl
@@ -2,17 +2,27 @@
 #parent: #root
 Method GetSaleAmountInHalfYear (
   Number halfNo
-) as Real
+) const 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( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( halfNo = 1 ) {
+      result := result + [Real]this.MonthlySales1();
+      result := result + [Real]this.MonthlySales2();
+      result := result + [Real]this.MonthlySales3();
+      result := result + [Real]this.MonthlySales4();
+      result := result + [Real]this.MonthlySales5();
+      result := result + [Real]this.MonthlySales6();
+    }
+    if( halfNo = 2 ) {
+      result := result + [Real]this.MonthlySales7();
+      result := result + [Real]this.MonthlySales8();
+      result := result + [Real]this.MonthlySales9();
+      result := result + [Real]this.MonthlySales10();
+      result := result + [Real]this.MonthlySales11();
+      result := result + [Real]this.MonthlySales12();
     }
     return result;
   *]
diff --git "a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl" "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
index c35dd6e..767082c 100644
--- "a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
+++ "b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInSeason\043000.qbl"
@@ -2,17 +2,31 @@
 #parent: #root
 Method GetSaleAmountInSeason (
   Number seasonNo
-) as Real
+) const 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( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
-      result := result + [Real]field.GetString( this );
+    if( seasonNo = 1 ) {
+      result := result + [Real]this.MonthlySales1();
+      result := result + [Real]this.MonthlySales2();
+      result := result + [Real]this.MonthlySales3();
+    }
+    if( seasonNo = 2 ) {
+      result := result + [Real]this.MonthlySales4();
+      result := result + [Real]this.MonthlySales5();
+      result := result + [Real]this.MonthlySales6();
+    }
+    if( seasonNo = 3 ) {
+      result := result + [Real]this.MonthlySales7();
+      result := result + [Real]this.MonthlySales8();
+      result := result + [Real]this.MonthlySales9();
+    }
+    if( seasonNo = 4 ) {
+      result := result + [Real]this.MonthlySales10();
+      result := result + [Real]this.MonthlySales11();
+      result := result + [Real]this.MonthlySales12();
     }
     return result;
   *]
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
index 0b05b26..1ac640e 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/Method_GetSaleAmountInYear.qbl
@@ -1,15 +1,23 @@
 Quintiq file version 2.0
 #parent: #root
-Method GetSaleAmountInYear () as Real
+Method GetSaleAmountInYear () const as Real
 {
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
     result := 0.0;
-    for( i := 1; i <= 12; i := i + 1 ) {
-      field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]i );
-      result := result + [Real]field.GetString( this );
-    }
+    result := result + [Real]this.MonthlySales1();
+    result := result + [Real]this.MonthlySales2();
+    result := result + [Real]this.MonthlySales3();
+    result := result + [Real]this.MonthlySales4();
+    result := result + [Real]this.MonthlySales5();
+    result := result + [Real]this.MonthlySales6();
+    result := result + [Real]this.MonthlySales7();
+    result := result + [Real]this.MonthlySales8();
+    result := result + [Real]this.MonthlySales9();
+    result := result + [Real]this.MonthlySales10();
+    result := result + [Real]this.MonthlySales11();
+    result := result + [Real]this.MonthlySales12();
     return result;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
index a73decb..949e701 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByHalfYear.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number halfNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
index 287c1d6..64a2694 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByMonth.qbl
@@ -2,21 +2,100 @@
 #parent: #root
 StaticMethod GetSaleByMonth (
   Strings productNo,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo,
   Number monthNo
-) as Real
+) const as Real
 {
   Description: '閿�鍞锛圵锛�'
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]monthNo );
-    value := sum( parent, 
-                  Global_MappingAnnualBudgetData, 
-                  item, 
-                  item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
-                  [Real]field.GetString( item ) );
+    value := 0.0;
+    if( monthNo = 1 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales1() );
+    }
+    if( monthNo = 2 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales2() );
+    }
+    if( monthNo = 3 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales3() );
+    }
+    if( monthNo = 4 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales4() );
+    }
+    if( monthNo = 5 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales5() );
+    }
+    if( monthNo = 6 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales6() );
+    }
+    if( monthNo = 7 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales7() );
+    }
+    if( monthNo = 8 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales8() );
+    }
+    if( monthNo = 9 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales9() );
+    }
+    if( monthNo = 10 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales10() );
+    }
+    if( monthNo = 11 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales11() );
+    }
+    if( monthNo = 12 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySales12() );
+    }
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
index e7f39db..2f2c0b8 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleBySeason.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number seasonNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
index 5377001..5084897 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSaleByYear.qbl
@@ -2,9 +2,9 @@
 #parent: #root
 StaticMethod GetSaleByYear (
   Strings productNo,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo
-) as Real
+) const as Real
 {
   Description: '閿�鍞锛圵锛�'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
index d356e4c..75c58df 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByHalfYear.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number halfNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
index 86986c8..f8ea529 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByMonth.qbl
@@ -5,18 +5,97 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number monthNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘-瀹炴暟澶у紶'
   TextBody:
   [*
     // yypsybs Sep-18-2023 (created)
-    field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]monthNo );
-    value := sum( parent, 
-                  Global_MappingAnnualBudgetData, 
-                  item, 
-                  item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
-                  [Real]field.GetString( item ) );
+    value := 0.0;
+    if( monthNo = 1 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity1() );
+    }
+    if( monthNo = 2 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity2() );
+    }
+    if( monthNo = 3 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity3() );
+    }
+    if( monthNo = 4 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity4() );
+    }
+    if( monthNo = 5 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity5() );
+    }
+    if( monthNo = 6 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity6() );
+    }
+    if( monthNo = 7 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity7() );
+    }
+    if( monthNo = 8 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity8() );
+    }
+    if( monthNo = 9 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity9() );
+    }
+    if( monthNo = 10 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity10() );
+    }
+    if( monthNo = 11 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity11() );
+    }
+    if( monthNo = 12 ) {
+      value := sum( parent, 
+                    Global_MappingAnnualBudgetData, 
+                    item, 
+                    item.YearNo() = [String]yearNo and productNo.Find( item.ProductID() ) > -1,
+                    [Real]item.MonthlySheetCapacity12() );
+    }
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
index 4b9775a..0825f00 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetBySeason.qbl
@@ -5,7 +5,7 @@
   GlobalOTDTable parent,
   Number yearNo,
   Number seasonNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
index a98de35..d09d253 100644
--- a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_GetSheetByYear.qbl
@@ -4,7 +4,7 @@
   Strings productNo,
   GlobalOTDTable parent,
   Number yearNo
-) as Real
+) const as Real
 {
   Description: '浜ц兘 - 瀹炴暟澶у紶'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
index 8b16514..d4be7f7 100644
--- a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByMonth.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 StaticMethod GetQuantityByMonth (
   Strings productCodes,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo,
   Number monthNo
 ) as Real
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
index f922dcf..a0df7e4 100644
--- a/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_GetQuantityByYear.qbl
@@ -2,11 +2,10 @@
 #parent: #root
 StaticMethod GetQuantityByYear (
   Strings productCodes,
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   Number yearNo
 ) as Real
 {
-  Description: ''
   TextBody:
   [*
     // yypsybs Sep-19-2023 (created)
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
index 314d139..e11666f 100644
--- a/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_GetByProductId.qbl
@@ -1,9 +1,9 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetByProductId (
-  GlobalOTDTable otdTable,
+  const GlobalOTDTable otdTable,
   String productId
-) as Global_MappingOperation
+) as const Global_MappingOperation
 {
   TextBody:
   [*
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
index ef81738..6dcd0ec 100644
--- a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_GetByProductId.qbl
@@ -1,9 +1,9 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetByProductId (
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   String productId
-) as Global_MappingProduct_MP
+) as const Global_MappingProduct_MP
 {
   Description: '鏍规嵁鏂欏彿鏌ヨ褰�'
   TextBody:
diff --git a/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl b/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
index 9038655..074991b 100644
--- a/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
+++ b/_Main/BL/Type_Global_MappingProviderCapacity/StaticMethod_GetByProductId.qbl
@@ -1,13 +1,14 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod GetByProductId (
-  GlobalOTDTable parent,
+  const GlobalOTDTable parent,
   String productId
-) as Global_MappingProviderCapacity
+) as const Global_MappingProviderCapacity
 {
   TextBody:
   [*
     // yypsybs Oct-10-2023 (created)
-    return select( parent, Global_MappingProviderCapacity, item, item.ProductID() = productId );
+    value := select( parent, Global_MappingProviderCapacity, item, item.ProductID() = productId )
+    return value;
   *]
 }
diff --git a/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl
new file mode 100644
index 0000000..179e734
--- /dev/null
+++ b/_Main/BL/Type_MatAttrSettingAndPlanningStrategy/StaticMethod_GetByMatCode.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetByMatCode (
+  const GlobalOTDTable parent,
+  String matCode
+) as const MatAttrSettingAndPlanStrategy
+{
+  Description: '鑾峰彇鏃犳硶淇敼鐨�'
+  TextBody:
+  [*
+    // yypsybs Oct-17-2023 (created)
+    value := select( parent, MatAttrSettingAndPlanStrategy, item, true, matCode = item.MatCode() );
+    return value;
+  *]
+}
diff --git a/_Main/BL/Type_PRData/Method_DoCall.qbl b/_Main/BL/Type_PRData/Method_DoCall.qbl
index 3e8d9b5..13f4f7c 100644
--- a/_Main/BL/Type_PRData/Method_DoCall.qbl
+++ b/_Main/BL/Type_PRData/Method_DoCall.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 Method DoCall (
-  GlobalOTDTable globalData,
+  const GlobalOTDTable globalData,
+  GlobalOTDSOP otdSop,
   String callBy
 ) as PRHistoryData
 {
@@ -9,7 +10,7 @@
   TextBody:
   [*
     // yypsybs Sep-11-2023 (created)
-    result := globalData.PRHistoryData( relnew );
+    result := otdSop.PRHistoryData( relnew );
     
     // 鐓ф惉閮ㄥ垎
     result.AuthorizationStatus( this.AuthorizationStatus() );
diff --git a/_Main/BL/Type_PRData/Method_PrintCall.qbl b/_Main/BL/Type_PRData/Method_PrintCall.qbl
index 180f056..33b1ac8 100644
--- a/_Main/BL/Type_PRData/Method_PrintCall.qbl
+++ b/_Main/BL/Type_PRData/Method_PrintCall.qbl
@@ -1,14 +1,15 @@
 Quintiq file version 2.0
 #parent: #root
 Method PrintCall (
-  GlobalOTDTable globalData,
+  const GlobalOTDTable globalData,
+  GlobalOTDSOP otdSop,
   String callBy
 ) as String
 {
   TextBody:
   [*
     // yypsybs Sep-11-2023 (created)
-    result := globalData.PRHistoryData( relnew );
+    result := otdSop.PRHistoryData( relnew );
     
     // 鐓ф惉閮ㄥ垎
     result.AuthorizationStatus( this.AuthorizationStatus() );
diff --git a/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl b/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
index 6de8c17..63825e9 100644
--- a/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
+++ b/_Main/BL/Type_PRData/StaticMethod_DoCall.qbl
@@ -1,7 +1,8 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod DoCall (
-  GlobalOTDTable globalData,
+  const GlobalOTDTable globalData,
+  GlobalOTDSOP otdSop,
   PRDatas toCalls,
   String callBy
 )
@@ -13,7 +14,7 @@
     nowNo := 1;
     traverse( toCalls, Elements, toCall, toCall.PRReleaseStatus() = "" ) {
       info ( "DoCall " + [String]nowNo + "/" + [String]toCalls.Size() + " PR" );
-      toCall.DoCall( globalData, callBy );  
+      toCall.DoCall( globalData, otdSop, callBy );  
       nowNo := nowNo + 1;
     }
   *]
diff --git "a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl" "b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
index 1b30f35..8ed3fb2 100644
--- "a/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
+++ "b/_Main/BL/Type_PRData/StaticMethod_FromSupplyPlanning\043662.qbl"
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod FromSupplyPlanning (
-  GlobalOTDTable otdTable,
+  const GlobalOTDTable otdTable,
   MacroPlan macroPlan,
   ProductInStockingPointInPeriod pispip,
   String userId
@@ -22,7 +22,9 @@
     mappingOperation := Global_MappingOperation::GetByProductId( otdTable, product.ID() );
     // QID15
     mappingProviderCapacity := Global_MappingProviderCapacity::GetByProductId( otdTable, product.ID() );
-    matAttrSetting := MatAttrSettingAndPlanStrategy::GetExistByMatCode( otdTable, product.ID() );
+    
+    // 鐗╂枡鏍囩璁剧疆
+    matAttrSetting := MatAttrSettingAndPlanStrategy::GetByMatCode( otdTable, product.ID() );
     
     // 鏍规嵁pispip
     result.MRPCalverNo( ifexpr( pispip.MRPCalverNo() = "", "鏆傛棤", pispip.MRPCalverNo() ) );
diff --git a/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl b/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl
index 736d231..4446b4d 100644
--- a/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl
+++ b/_Main/BL/Type_PRHistoryData/Method_PrintCall.qbl
@@ -7,7 +7,7 @@
   TextBody:
   [*
     // yypsybs Sep-20-2023 (created)
-    result := this.GlobalOTDTable().PRHistoryData( relcopy, this );
+    result := this.GlobalOTDSOP().PRHistoryData( relcopy, this );
     
     // 鏇存柊閮ㄥ垎
     result.PRDataReleaseDate( Date::Today() );
diff --git a/_Main/BL/Type_PRHistoryData/Method_Recall.qbl b/_Main/BL/Type_PRHistoryData/Method_Recall.qbl
index 065fdb0..6640bef 100644
--- a/_Main/BL/Type_PRHistoryData/Method_Recall.qbl
+++ b/_Main/BL/Type_PRHistoryData/Method_Recall.qbl
@@ -8,7 +8,7 @@
   TextBody:
   [*
     // yypsybs Sep-11-2023 (created)
-    result := this.GlobalOTDTable().PRHistoryData( relcopy, this );
+    result := this.GlobalOTDSOP().PRHistoryData( relcopy, this );
     
     // 鏇存柊閮ㄥ垎
     result.PRDataReleaseDate( Date::Today() );
diff --git a/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl b/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
index 132c301..02ee2f6 100644
--- a/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_PRHistoryData/StaticMethod_Export.qbl
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  GlobalOTDTable parent
+  GlobalOTDSOP parent
 ) as String
 {
   TextBody:
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl b/_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl
deleted file mode 100644
index 7a1e8b7..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestBoolean.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestBoolean
-{
-  #keys: '3[414384.0.915854691][414384.0.915854690][414384.0.915854692]'
-  ValueType: Boolean
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestDate.qbl b/_Main/BL/Type_YuxTest/Attribute_TestDate.qbl
deleted file mode 100644
index f96d5cd..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestDate.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestDate
-{
-  #keys: '3[414384.0.915854704][414384.0.915854703][414384.0.915854705]'
-  ValueType: Date
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl b/_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl
deleted file mode 100644
index 4ebf668..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestDateTime.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestDateTime
-{
-  #keys: '3[414384.0.915854714][414384.0.915854713][414384.0.915854715]'
-  ValueType: DateTime
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl b/_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl
deleted file mode 100644
index 95e5da0..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestNumber.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestNumber
-{
-  #keys: '3[414384.0.915854681][414384.0.915854680][414384.0.915854682]'
-  ValueType: Number
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestReal.qbl b/_Main/BL/Type_YuxTest/Attribute_TestReal.qbl
deleted file mode 100644
index 1852888..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestReal.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestReal
-{
-  #keys: '3[414384.0.915854668][414384.0.915854667][414384.0.915854669]'
-  ValueType: Real
-}
diff --git a/_Main/BL/Type_YuxTest/Attribute_TestString.qbl b/_Main/BL/Type_YuxTest/Attribute_TestString.qbl
deleted file mode 100644
index 5965156..0000000
--- a/_Main/BL/Type_YuxTest/Attribute_TestString.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Attribute TestString
-{
-  #keys: '3[414384.0.915854658][414384.0.915854657][414384.0.915854659]'
-  ValueType: String
-}
diff --git a/_Main/BL/Type_YuxTest/StaticMethod_Export.qbl b/_Main/BL/Type_YuxTest/StaticMethod_Export.qbl
deleted file mode 100644
index d6f5aaf..0000000
--- a/_Main/BL/Type_YuxTest/StaticMethod_Export.qbl
+++ /dev/null
@@ -1,85 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod Export (
-  YuxTests toExportList
-) as String
-{
-  TextBody:
-  [*
-    // generate by generate_export_method.py
-    xmlTemplate := '<?xml version="1.0" encoding="UTF-16"?>
-    <table>
-      <name>YuxTest</name>
-    ';
-    convDateToString := DateToString::StandardConverter();
-    convDateToString.SetCustomConversion();
-    convDateToString.CustomFormatString( 'yyyy-MM-dd' );
-    convDateTimeToString := DateTimeToString::StandardConverter();
-    convDateTimeToString.SetCustomConversion();
-    convDateTimeToString.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
-    info( "export start" );
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯鏁板瓧</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testNumber := toExportItem.TestNumber();
-      cellStr := '<cell value="' + [String]testNumber + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯灏忔暟</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testReal := toExportItem.TestReal();
-      cellStr := '<cell value="' + [String]testReal + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯瀛楃涓�</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testString := toExportItem.TestString();
-      cellStr := '<cell value="' + testString + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯甯冨皵</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testBoolean := toExportItem.TestBoolean();
-      cellStr := '<cell value="' + [String]testBoolean + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯鏃ユ湡</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testDate := toExportItem.TestDate();
-      cellStr := '<cell value="' + ifexpr( testDate = Date::MinDate(), "", convDateToString.Convert( testDate )) + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    columnStr := "<column><name>娴嬭瘯鏃ユ湡鏃堕棿</name><type>String</type>";
-    traverse( toExportList, Elements, toExportItem ) {
-      testDateTime := toExportItem.TestDateTime();
-      cellStr := '<cell value="' + ifexpr( testDateTime = DateTime::MinDateTime(), "", convDateTimeToString.Convert( testDateTime )) + '"/>';
-      columnStr := columnStr + cellStr;
-    }
-    columnStr := columnStr + "</column>";
-    xmlTemplate := xmlTemplate + columnStr;
-    //---------------------------------------------------------------------------------------------
-    xmlTemplate := xmlTemplate + "</table>";
-    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlTemplate ) );
-    XLS::SaveTable( tableHandle, OS::TempPath() + "YuxTest.xlsx" );
-    file := OSFile::Construct();
-    file.Open( OS::TempPath() + "YuxTest.xlsx", "Read", true );
-    data := file.ReadBinary()
-    info( "export end" );
-    return data.AsBase64EncodedString();
-  *]
-}
diff --git "a/_Main/BL/Type_YuxTest/StaticMethod_ExportTest\043887.qbl" "b/_Main/BL/Type_YuxTest/StaticMethod_ExportTest\043887.qbl"
deleted file mode 100644
index f77f7ce..0000000
--- "a/_Main/BL/Type_YuxTest/StaticMethod_ExportTest\043887.qbl"
+++ /dev/null
@@ -1,26 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod ExportTest (
-  MPSync parent
-) as String
-{
-  TextBody:
-  [*
-    // yypsybs Sep-25-2023 (created)
-    list := selectset( parent, YuxTest, item, true );
-    if( list.Size() = 0 ) {
-      for( i := 0; i < 100; i := i + 1 ) {
-        parent.YuxTest( relnew, 
-                        TestBoolean := ifexpr( Number::Random( 0, 1 ) = 1, true, false ), 
-                        TestDate :=   ifexpr( Number::Random( 0, 1 ) = 1, Date::MinDate(), Date::ActualDate() ), 
-                        TestDateTime :=   ifexpr( Number::Random( 0, 1 ) = 1,DateTime::MinDateTime(), DateTime::ActualTime() ),
-                        TestNumber :=  Number::Random( 100, 200 ),
-                        TestReal := Real::Random( 10.0, 20.0 ), 
-                        TestString := [String]Number::Random( 1000, 2000 ) 
-                        );
-      }
-    }
-    list := selectset( parent, YuxTest, item, true );
-    return YuxTest::Export( list );
-  *]
-}
diff --git a/_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl b/_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl
deleted file mode 100644
index 13ff536..0000000
--- a/_Main/BL/Type_YuxTest/_ROOT_Type_YuxTest.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type YuxTest
-{
-  #keys: '5[414384.0.915854638][414384.0.915854636][0.0.0][414384.0.915854637][414384.0.915854639]'
-  BaseType: Object
-  StructuredName: 'YuxTests'
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def
index 8411a9a..30d9313 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuCall_OnClick.def
@@ -19,10 +19,10 @@
       productIdsOver14Days := PRData::ProductIdOver14Days( selection );
       if( productIdsOver14Days <> "" ) {
         if( WebMessageBox::Question( "璇ユ壒娆′腑鐨勭墿鏂欏彿" + productIdsOver14Days + "璁㈠崟搴旇鍦�2鍛ㄥ悗閲婃斁锛岃纭鏄惁鐜板湪閲婃斁锛燂紙宸查噴鏀剧殑灏嗚璺宠繃锛�" ) = 0 ) {
-          PRData::DoCall( GlobalOTDTable, selection, ApplicationMacroPlanner.GetUserName() );
+          PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, selection, ApplicationMacroPlanner.GetUserName() );
         }
       } else if( WebMessageBox::Question( "鏄惁鍙戦�侀�変腑鐨勬暟鎹紵锛堝凡閲婃斁鐨勫皢琚烦杩囷級" ) = 0 ) {
-        PRData::DoCall( GlobalOTDTable, selection, ApplicationMacroPlanner.GetUserName() );
+        PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, selection, ApplicationMacroPlanner.GetUserName() );
       }
     *]
     GroupServerCalls: false
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
index 6e0a043..99a850c 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_ListPRData_844_MenuPrintRequest_OnClick\043623.def"
@@ -12,7 +12,7 @@
   {
     Body:
     [*
-      info( selection.PrintCall( GlobalOTDTable, ApplicationMacroPlanner.GetUserName() ) )
+      info( selection.PrintCall( GlobalOTDTable, GlobalOTDSOP, ApplicationMacroPlanner.GetUserName() ) )
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def
index c885be4..a3ef10a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_Form633/Response_PanelPRDataButton_ButtonSendPR_OnClick.def
@@ -16,10 +16,10 @@
       productIdsOver14Days := PRData::ProductIdOver14Days( DataHolderChecked.Data() );
       if( productIdsOver14Days <> "" ) {
         if( WebMessageBox::Question( "璇ユ壒娆′腑鐨勭墿鏂欏彿" + productIdsOver14Days + "璁㈠崟搴旇鍦�2鍛ㄥ悗閲婃斁锛岃纭鏄惁鐜板湪閲婃斁锛燂紙宸查噴鏀剧殑灏嗚璺宠繃锛�" ) = 0 ) {
-          PRData::DoCall( GlobalOTDTable, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
+          PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
         }
       } else if( WebMessageBox::Question( "鏄惁鍙戦�侀�変腑鐨勬暟鎹紵锛堝凡閲婃斁鐨勫皢琚烦杩囷級" ) = 0 ) {
-        PRData::DoCall( GlobalOTDTable, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
+        PRData::DoCall( GlobalOTDTable, GlobalOTDSOP, DataHolderChecked.Data(), ApplicationMacroPlanner.GetUserName() );
       }
     *]
     GroupServerCalls: false
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
index a0f1d91..4af954a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Component_ListCapacityAndSaleBudge.def
@@ -38,6 +38,6 @@
   ]
   Properties:
   [
-    Taborder: 3
+    Taborder: 2
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def
deleted file mode 100644
index 990eb11..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonExportTest_OnClick.def
+++ /dev/null
@@ -1,21 +0,0 @@
-Quintiq file version 2.0
-#parent: ButtonExportTest
-Response OnClick () id:Response_FormCapacityAndSaleBudge_ButtonExportTest_OnClick
-{
-  #keys: '[414384.0.914711825]'
-  CanBindMultiple: false
-  DefinitionID: 'Responsedef_WebButton_OnClick'
-  Precondition:
-  [*
-    return not isnull( MPSync );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      base64 := YuxTest::ExportTest( MPSync );
-      Application.Download( "result.xlsx", base64 );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
index e7dcebd..7b8522f 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_ButtonGenerateTestData_OnClick.def
@@ -15,10 +15,10 @@
     [*
       GlobalOTDTable.InitTestDataByYear( MacroPlan, DataHolderCapacityAndSaleBudgeFilterYear.Data() );
       Global_MappingAnnualBudgetData::SetOrgCodeFromForecast( GlobalOTDTable );
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
-      CapacityAndSaleBudgeFilterItem::Initial( GlobalOTDTable );
-      CapacityAndSaleBudgeFilterYear::Initial( GlobalOTDTable );
-      CapacityAndSaleBudgeFilterMonth::Initial( GlobalOTDTable );
+      GlobalOTDSOP::RefreshCapacityAndSaleBudgeFilter( true, GlobalOTDTable, GlobalOTDSOP );
+      CapacityAndSaleBudgeFilterItem::Initial( GlobalOTDSOP );
+      CapacityAndSaleBudgeFilterYear::Initial( GlobalOTDSOP );
+      CapacityAndSaleBudgeFilterMonth::Initial( GlobalOTDSOP );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
index 995281a..7fa918d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/_ROOT_Component_FormCapacityAndSaleBudge.def
@@ -19,18 +19,6 @@
         Taborder: 1
       ]
     }
-    Component ButtonExportTest
-    {
-      #keys: '[414384.0.914711826]'
-      BaseType: 'WebButton'
-      Properties:
-      [
-        Image: 'EXPORT1'
-        Label: '瀵煎嚭娴嬭瘯'
-        Taborder: 2
-        Visible: false
-      ]
-    }
     Component ButtonGenerateTestData
     {
       #keys: '[414384.0.971540693]'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
index 71754e3..8c71c5c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
@@ -17,8 +17,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeChartElement'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
index 692a6ad..cbd7ff2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_ButtonCapacityAndSaleBudgeChartTest_OnClick.def
@@ -12,15 +12,15 @@
     [*
       //CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
       
-      GlobalOTDTable.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                DropDownSaleOrCapacity.Text(),
-                                                DropDownTimeGroup.Text(),
-                                                DropDownByBusinessTypeOrByOrgCode.Text(),
-                                                DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
-                                                DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
-                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(),
-                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                GlobalOTDTable );
+      GlobalOTDSOP.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                              DropDownSaleOrCapacity.Text(),
+                                              DropDownTimeGroup.Text(),
+                                              DropDownByBusinessTypeOrByOrgCode.Text(),
+                                              DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
+                                              DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
+                                              DataHolderCapacityAndSaleBudgeFilterYear.Data(),
+                                              DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
+                                              GlobalOTDTable );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
index 5dd68bd..d59a144 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_MatrixEditorCapacityAndSaleBudgeCompare.def
@@ -17,8 +17,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeCompareItemColumn.CapacityAndSaleBudgeCompareItemCell'
           ]
@@ -44,8 +44,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeCompareItemRow'
           ]
@@ -70,8 +70,8 @@
           BaseType: 'WebDataExtractor'
           Properties:
           [
-            DataType: 'GlobalOTDTable'
-            Source: 'GlobalOTDTable'
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
             Taborder: 0
             Transformation: 'CapacityAndSaleBudgeCompareItemColumn'
           ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
index 872c802..7f559d2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonCapacityAndSaleBudgeCompare_OnClick.def
@@ -14,11 +14,11 @@
       info( DataHolderCapacityAndSaleBudgeFilterItem.Data().Size() );
       info( DataHolderCapacityAndSaleBudgeFilterYear.Data().Size() );
       info( DataHolderCapacityAndSaleBudgeFilterMonth.Data().Size() );
-      GlobalOTDTable.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                  DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
-                                                  DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
-                                                  DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                  GlobalOTDTable );
+      GlobalOTDSOP.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                                DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
+                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
+                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
+                                                GlobalOTDTable );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
index a01173d..f98be27 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_ButtonExportCompare_OnClick.def
@@ -13,8 +13,7 @@
   {
     Body:
     [*
-      tableBinaryData := GlobalOTDTable.CapacityAndSaleBudgeCompareExport().AsBinaryData();
-      Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", tableBinaryData );
+      Application.Download( "骞村害浜ч攢棰勭畻瀵规瘮.xlsx", GlobalOTDSOP.CapacityAndSaleBudgeCompareExport().AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
index cbe6b9e..e04971e 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Component_ListCapacityAndSaleBudgeFilterBusinessType.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterBusinessType'
       ]
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
index c240052..a9b41c6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterBusinessType/Response_listContextMenuCapacityAndSaleBudgeFilterYear_1_MenuRefresh_OnClick.def
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
+      GlobalOTDSOP::RefreshCapacityAndSaleBudgeFilter( true, GlobalOTDTable, GlobalOTDSOP );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
index ea63655..0ca80fc 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Component_ListCapacityAndSaleBudgeFilterItem.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterItem'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
index 577ebb4..e56959a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Component_ListCapacityAndSaleBudgeFilterMonth.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterMonth'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
index ae0a48a..bc46349 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray/Component_ListCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterPlaceOfProductionOfArray'
       ]
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"
index 7b8154d..4ea2f47 100644
--- "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"
@@ -10,7 +10,7 @@
   {
     Body:
     [*
-      GlobalOTDTable.RefreshCapacityAndSaleBudgeFilter( true );
+      GlobalOTDSOP::RefreshCapacityAndSaleBudgeFilter( true, GlobalOTDTable, GlobalOTDSOP );
     *]
   }
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
index c89499c..3bb5087 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Component_ListCapacityAndSaleBudgeFilterYear.def
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'CapacityAndSaleBudgeFilterYear'
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
index fe57fb1..a0e1f6e 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Component_ListPRHistoryData\043844.def"
@@ -11,8 +11,8 @@
       BaseType: 'WebDataExtractor'
       Properties:
       [
-        DataType: 'GlobalOTDTable'
-        Source: 'GlobalOTDTable'
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
         Taborder: 0
         Transformation: 'PRHistoryData'
       ]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def
index e83383e..3b3157a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPRHistoryData/Response_PanelPRHistoryButton_ButtonExportPRHistory_OnClick.def
@@ -13,7 +13,7 @@
   {
     Body:
     [*
-      Application.Download( "PRHistoryData.xlsx", PRHistoryData::Export( GlobalOTDTable ) );
+      Application.Download( "PRHistoryData.xlsx", PRHistoryData::Export( GlobalOTDSOP ) );
     *]
     GroupServerCalls: false
   }

--
Gitblit v1.9.3