From 30c02e0c981b16be0918483543f4b812956c45d4 Mon Sep 17 00:00:00 2001
From: Lai,Risheng <risheng.lai@capgemini.com>
Date: 星期四, 02 十一月 2023 10:50:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'refs/remotes/origin/dev'

---
 _Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl                                                                                                     |   16 
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                    |   24 
 _Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl                                                                                   |   14 
 _Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl                                                                                              |    3 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def                           |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def                                                                         |   37 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl                                                            |   28 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                         |   20 
 _Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl                                                                                                        |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def                                                       |   17 
 _Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl                                                                                              |   27 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                    |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def                                                  |   25 
 _Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl                                                                                         |   28 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def                                                                   |   41 
 _Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl                                                                                      |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def                         |   17 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def                                                       |  117 +
 _Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl                                                       |   23 
 _Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl                                                                       |    6 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl                                                                                       |    2 
 _Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl                                                                                                          |    4 
 _Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl                                                                            |   23 
 _Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl                                                                            |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def                                                             |   17 
 _Main/BL/Type_Lane/StaticMethod_FindById.qbl                                                                                                              |   15 
 _Main/BL/Type_Lane/StaticMethod_CreateLane.qbl                                                                                                            |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def                                           |   17 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl                                                                                           |   17 
 _Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl                                                                                               |    6 
 _Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl                                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def                  |   10 
 _Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl                                                                         |    7 
 _Main/BL/Type_PeggingResult/StaticMethod_Create.qbl                                                                                                       |   31 
 _Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl                                                                           |    5 
 _Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl                                                                    |    5 
 _Main/UI/MacroPlannerWebApp/Views/Pegging分析.vw                                                                                                            |  332 +++
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl                                                                                       |    8 
 _Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl                                                                                       |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def       |   17 
 _Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl                                                                                                   |    7 
 _Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl                                                                                        |    2 
 _Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl                                                                                                  |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                                             |   10 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl                                                                                      |    7 
 _Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl                                                                                                    |   17 
 _Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl                                                                                  |    7 
 _Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl                                                                                |   52 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def                    |   36 
 _Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl                                                                                                 |    2 
 _Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl                                                                                                  |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def                                                     |   18 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                         |  243 -
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def                                             |   22 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                     |   20 
 _Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl                                                                     |    5 
 _var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw                                                                                  | 3645 +++++++++++++++++++++++++-------
 _Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl                                                       |   23 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl                                                                                          |   27 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def                            |    6 
 _Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl                                                                  |   23 
 _Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl                                                                                        |   14 
 _Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl                                                                             |   35 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def                                                |   25 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl                                                        |   30 
 _Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl                                                                                                         |    2 
 _Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl                                                                                             |    8 
 _Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl                                                                                        |   25 
 _Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl                                                                        |    5 
 _Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl                                                                                          |   20 
 _Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def                                                                       |    4 
 _Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl                                                                                                   |    7 
 _Main/BL/Type_PeggingResult/Attribute_ProductID.qbl                                                                                                       |    7 
 _Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl                                                                                       |    2 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def                        |   15 
 _Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl                                                                                           |    4 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl                                                                                         |    5 
 _Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl                                                                   |    6 
 _Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def                                                                           |   18 
 _Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl                                                                            |    5 
 _Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl                                                                                                 |    7 
 _Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl                                                                                                  |    7 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl                                                                               |    7 
 _Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl                                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def                                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def                               |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def                                                                   |   63 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def                                                                 |   24 
 _Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl                                                                             |    7 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl                                                                                                   |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def                                              |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def                                                        |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def                                                           |   59 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def |   23 
 _Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl                                                                                  |   23 
 _Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                     |    5 
 _Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl                                                                                        |   10 
 _Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl                                                                                            |   66 
 _Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl                                                                                        |    9 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl                                                                                                      |   59 
 _Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl                                                                                       |    8 
 _Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl                                                             |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def                                                |   10 
 _Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl                                                                          |    5 
 _Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl                                                                                             |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def                                        |   17 
 _Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl                                                |    5 
 _Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl                                                                                 |    3 
 _Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl                                                                                                    |    3 
 _Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl                                                                                          |    9 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl                                                            |   30 
 _Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl                                                                                                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def                                                      |   10 
 _Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl                                                                                                       |   16 
 _Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl                                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def                                                          |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def                                                             |   60 
 _Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl                                                              |    9 
 _Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl                                                                                                   |   28 
 /dev/null                                                                                                                                                 |    6 
 _Main/BL/Type_PeggingResult/Attribute_StartDate.qbl                                                                                                       |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl                                                                      |   28 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                                    |    8 
 _Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl                                                                                                    |   59 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl                                                                             |   25 
 126 files changed, 5,137 insertions(+), 1,308 deletions(-)

diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
index 571fce9..f201682 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_CAR_Export.qbl
@@ -2,7 +2,7 @@
 #parent: #root
 EDIBroker GlobalOTDTable_CAR_Export
 {
-  MDSDefinition: GlobalOTDTable
+  MDSDefinition: GlobalOTDSOP
   TimeZone: 'ACT'
   UseOSTimeZone: false
   EDIModelLink.Source Source13
diff --git a/_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl b/_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl
new file mode 100644
index 0000000..aabfffd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingProductInSalesDemandBase_PeggingProduct_MP_PeggingProduct_MP_PeggingProductInSalesDemandBase
+{
+  #keys: '1[414702.1.290710058]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PeggingProduct_MP
+  {
+    #keys: '3[414702.1.290710060][414702.1.290710059][414702.1.290710061]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingProductInSalesDemandBase
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingProductInSalesDemandBase
+  {
+    #keys: '3[414702.1.290710063][414702.1.290710062][414702.1.290710064]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingProduct_MP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl b/_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl
new file mode 100644
index 0000000..17eff95
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingProduct_MP_GlobalOTDSOP_GlobalOTDSOP_PeggingProduct_MP
+{
+  #keys: '1[414702.1.290710038]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.290710040][414702.1.290710039][414702.1.290710041]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingProduct_MP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingProduct_MP
+  {
+    #keys: '3[414702.1.290710043][414702.1.290710042][414702.1.290710044]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl b/_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl
new file mode 100644
index 0000000..485b308
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_AllChild_PeggingResult_AllParent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_AllChild_PeggingResult_AllParent
+{
+  #keys: '1[414702.1.294852003]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide AllChild
+  {
+    #keys: '3[414702.1.294852005][414702.1.294852004][414702.1.294852006]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AllParent
+  {
+    #keys: '3[414702.1.294852008][414702.1.294852007][414702.1.294852009]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl b/_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl
new file mode 100644
index 0000000..edc59bb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_AllGroupChild_PeggingResult_AllGroupParent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_AllGroupChild_PeggingResult_AllGroupParent
+{
+  #keys: '1[414702.1.320753677]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide AllGroupChild
+  {
+    #keys: '3[414702.1.320753679][414702.1.320753678][414702.1.320753680]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AllGroupParent
+  {
+    #keys: '3[414702.1.320753682][414702.1.320753681][414702.1.320753683]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl b/_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl
new file mode 100644
index 0000000..c36e77b
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_Child_PeggingResult_Parent.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_Child_PeggingResult_Parent
+{
+  #keys: '1[414702.1.290710113]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Child
+  {
+    #keys: '3[414702.1.290710115][414702.1.290710114][414702.1.290710116]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Parent
+  {
+    #keys: '3[414702.1.290710118][414702.1.290710117][414702.1.290710119]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl b/_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl
new file mode 100644
index 0000000..b399e75
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSales.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResult_PeggingProductInSalesDemandBase_PeggingProductInSalesDemandBase_PeggingResult
+{
+  #keys: '1[414702.1.290710098]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PeggingProductInSalesDemandBase
+  {
+    #keys: '3[414702.1.290710100][414702.1.290710099][414702.1.290710101]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResult
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingResult
+  {
+    #keys: '3[414702.1.290710103][414702.1.290710102][414702.1.290710104]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingProductInSalesDemandBase
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
index cd44e09..2e4ee74 100644
--- a/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_BaseConversionFactor/StaticMethod_CreateOrUpdate.qbl
@@ -26,6 +26,20 @@
       if( productId <> "" ) {
         product := Product_MP::FindById( macroPlan, productId );
       }else{
+    //    info( productId );
+    //    cf := select( source,
+    //              AsSourceUnitOfMeasure,
+    //              cf,
+    //              ( cf.TargetUnitOfMeasure() = target
+    //                or cf.TargetUnitOfMeasure() = source )
+    //              and cf.Product_MP() = product
+    //              );
+    //    info( isnull( cf ) );
+    //    info( "sourceuomname: " + cf.astype( BaseConversionFactor ).SourceUnitOfMeasureName() );
+    //    info( "targetuomname: " + target.Name() );
+    //    info( "cf.targetuomname: " + cf.astype( BaseConversionFactor ).TargetUnitOfMeasureName() );
+    //    info( "productid: " + guard( product.ID(), "" ) );
+    //    info( "cf.product: " + cf.astype( BaseConversionFactor ).ProductID() );
         result := BaseConversionFactor::CreateUpdate( source, target, factor, product, isEnable )
       }
     
diff --git a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
index 14045dd..1b8028f 100644
--- a/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
+++ b/_Main/BL/Type_CapacityAllocationResults/StaticMethod_Export.qbl
@@ -1,12 +1,12 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod Export (
-  GlobalOTDTable globalOTDTable
+  GlobalOTDSOP globalOTDSOP
 ) as BinaryValue
 {
   TextBody:
   [*
-    binaryData := globalOTDTable.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
+    binaryData := globalOTDSOP.GlobalOTDTable_CAR_Export().ExecuteToXLS( true );
     
     return binaryData.AsBinaryValue();
   *]
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..51e9eb4
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  const GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP this
+)
+{
+  TextBody:
+  [*
+    traverse ( globalOTDTable, Global_MappingAnnualBudgetData, gmabd ) {
+      productCode := gmabd.ProductID();
+      row         := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
+      CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
+    }
+    
+    columnBusinessType             := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
+    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
+    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
new file mode 100644
index 0000000..da29213
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationBudget.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationBudget (
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+      total := 0.0;
+      traverse ( months, Elements, m ) {
+        columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+        cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), globalOTDTable, DateTime::Now().Year(), m.MonthNo() );
+        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+        total       := total + cellReal;
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
+      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+      columnYear.TotalIdentification( year.YearNo() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
new file mode 100644
index 0000000..4cf1bf3
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationByScenario.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationByScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlans, Elements, mp ) {
+      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+        total := 0.0;
+        traverse ( months, Elements, m ) {
+          columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+          cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
+          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          total       := total + cellReal;
+          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
+        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+        columnYear.TotalIdentification( year.YearNo() );
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
new file mode 100644
index 0000000..6741062
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolume.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolume (
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+      total := 0.0;
+      traverse ( months, Elements, m ) {
+        columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
+        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+        cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), globalOTDTable, year.YearNo(), m.MonthNo() );
+        cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+        total       := total + cellReal;
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
+      cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+      columnYear.TotalIdentification( year.YearNo() );
+      cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
new file mode 100644
index 0000000..4335178
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeByScenario.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolumeByScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterMonths months,
+  CapacityAndSaleBudgeFilterYear year
+)
+{
+  TextBody:
+  [*
+    traverse ( macroPlans, Elements, mp ) {
+      traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+        total := 0.0;
+        traverse ( months, Elements, m ) {
+          columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
+          columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
+          cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
+          cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
+          total       := total + cellReal;
+          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
+        cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+        columnYear.TotalIdentification( year.YearNo() );
+        cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
index b3244e0..272b16c 100644
--- a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRate.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateCurrencyRate (
+  MacroPlan mp,
   String currencyid,
   Date start,
   Real rate
@@ -11,10 +12,10 @@
   [*
     // Administrator Jul-19-2023 (created)
     isfromdb := true;
-    currency := Currency_MP::FindCurrencyTypeIndex( currencyid );
+    currency := Currency_MP::FindById( mp, currencyid );
     
     //create new currency
-    result := CurrencyRate_MP::FindCurrencyRateTypeIndex( currencyid, start );
+    result := CurrencyRate_MP::FindByIdAndStart( currency, currencyid, start );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
index 67cd2c8..97a01d2 100644
--- a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateCurrencyRateFromJson.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateCurrencyRateFromJson (
+  MacroPlan mp,
   JSON datarow
 ) as CurrencyRate_MP
 {
@@ -16,7 +17,7 @@
     day := [Number]startstring.SubString( 8, 2 );
     
     start := Date::Construct( years, month, day );
-    result := CurrencyRate_MP::CreateCurrencyRate( currencyid, start, rate );
+    result := CurrencyRate_MP::CreateCurrencyRate( mp, currencyid, start, rate );
     
     return result;
   *]
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..82dc0fa
--- /dev/null
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( CurrencyRate_MPs );
+    traverse( globalOTDTable, Global_MappingCurrencyRate_MP, gcr, true )
+    {
+      a := CurrencyRate_MP::CreateCurrencyRate( macroPlan, gcr.CurrencyID(), gcr.Start(), gcr.Rate() );
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Currency_MP.CurrencyRate_MP, cr, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl
new file mode 100644
index 0000000..2c39de8
--- /dev/null
+++ b/_Main/BL/Type_CurrencyRate_MP/StaticMethod_FindByIdAndStart.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByIdAndStart (
+  Currency_MP owner,
+  String id,
+  Date start
+) as CurrencyRate_MP
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    
+    result := select(  owner, CurrencyRate_MP, item, true, item.CurrencyID() = id and item.Start() = start );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl b/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
index ade128e..155abb3 100644
--- a/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
+++ b/_Main/BL/Type_Currency_MP/StaticMethod_CreateCurrency.qbl
@@ -16,7 +16,7 @@
     isfromdb := true;
     
     //create new currency
-    result := Currency_MP::FindCurrencyTypeIndex( id );
+    result := Currency_MP::FindById( mp, id );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..dbda48a
--- /dev/null
+++ b/_Main/BL/Type_Currency_MP/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( Currency_MPs );
+    traverse( globalOTDTable, Global_MappingCurrency_MP, gc, true )
+    {
+      a := Currency_MP::CreateCurrency( macroPlan, gc.ID(), gc.Name(), " ", gc.IsBase() );
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Currency_MP, c, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
index 2d3b108..ac48151 100644
--- a/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
+++ b/_Main/BL/Type_Forecast/StaticMethod_GetFulfilledBalanceByMonth.qbl
@@ -12,11 +12,11 @@
     // yypsybs Sep-18-2023 (created)
     result := sum( macroPlan, 
                    Product_MP.SalesDemand,
-                   item, 
-                   item.istype( Forecast ) and productNo.Find( item.ProductID() ) > -1 
-                   and item.StartDate().Year() = yearNo
-                   and item.StartDate().Month() = monthNo,
-                   item.FulfilledQuantity() * item.Price() );
+                   tempSD, 
+                   productNo.Find( tempSD.ProductID() ) > -1 
+                   and tempSD.StartDate().Year() = yearNo
+                   and tempSD.StartDate().Month() = monthNo,
+                   tempSD.FulfilledQuantity() * tempSD.Price() );
     return result;
   *]
 }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index 66ff081..254563a 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -50,11 +50,11 @@
     macroPlan.InitialUnitAndStockingPoint();
     
     if ( isUnitOfMeasure_MP ) {
-      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan );
+      Global_MappingUnitOfMeasure_MP::SynchronizeMacroPlanData( this, macroPlan, executionUser );
     }
     
     if ( isCustomOrder ) {
-      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+      Global_MappingCustomOrder::SynchronizeMacroPlanData( this, macroPlan, businessTypes, organcodelist, executionUser );
     }
     
     if ( isForeacst ) {
@@ -82,7 +82,7 @@
     }
     
     if ( isProductInLane ) {
-      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+      Global_MappingProductInLane::SynchronizeMacroPlanData( this, macroPlan, businessTypes, executionUser );
     }
     
     if ( isAIPISPIP ) {
@@ -94,7 +94,7 @@
     }
     
     if ( isStockingPointCost ) {
-      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, executionUser );
+      Global_MappingStockingPointCost::SynchronizeMacroPlanData( this, macroPlan, businessTypes, executionUser );
     }
     
     if ( isOperationCost ) {
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index 0ba67ec..8b53f33 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -5,13 +5,12 @@
   CapacityAndSaleBudgeFilterItems items,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
-  const GlobalOTDTable otdTable
+  const GlobalOTDTable globalOTDTable
 )
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
   TextBody:
   [*
-    // ====涓嶉�夋椂榛樿鍏ㄩ��====
     if ( years.Size() = 0 ) {
       years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
     }
@@ -22,219 +21,57 @@
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     
-    // ====姹囨�绘墍鏈夊嚭鐜扮殑浜у搧====
-    targetglobal_MappingAnnualBudgetData := selectset( otdTable, Global_MappingAnnualBudgetData, item, true );
+    CapacityAndSaleBudgeCompareItemCell::CreateData( globalOTDTable, this );
     
-    traverse ( targetglobal_MappingAnnualBudgetData, Elements, gmabd ) {
-      productCode := gmabd.ProductID();
-    //  Global_MappingOperationBOM::CreateTestData( otdTable, "浜嬩笟閮�" + [String](productCode.Length() mod 3), "闈㈡澘鍩哄湴" + [String](productCode.Length() mod 4), productCode );
-    //  boms := selectset( otdTable, Global_MappingOperationBOM, bom, bom.ProductCode() = productCode );
-    //  if( boms.Size() > 0 ) {
-    //    bom := boms.First();
-    //    businessType := bom.BusinessType();
-    //    placeOfProductionOfArray := bom.OrganCode();
-        // 鐩稿悓闈㈡澘鍩哄湴鍜屼簨涓氶儴鐨勬斁涓�琛�
-        row := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
-        // 璁板綍姣忚鍖呭惈鍝簺product
-        CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
-    //  } else {
-    //    debuginfo( "no boms for product : " + productCode );
-    //  }
-    }
-    
-    // ====浠庡乏鍚戝彸鐢熸垚鍒楀ご涓庡唴瀹�====
-    // 浜嬩笟閮紝闈㈡澘鍩哄湴
-    columnBusinessType := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
-    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
-    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    }
-    
-    // 闈㈡澘鍒嗛厤閲� - 骞村害棰勭畻 (sheets)
-    // 鏍煎紡锛� 闈㈡澘鍒嗛厤閲� - 骞� - 鏈堬紙1-12 & total锛� - 骞村害棰勭畻/scenarioName
     if ( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
       traverse ( years, Elements, year ) {
-        // 鍘嗗彶鏁版嵁
-    //    traverse ( months, Elements, month ) {
-    //      columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
-    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        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(), otdTable, year.YearNo() );
-    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //    }
-        
-        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-          total := 0.0;
-          traverse ( months, Elements, m ) {
-            columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
-            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-            cellReal    := Global_MappingForecast::GetQuantityByMonth( casbcir.GetProductCodes(), otdTable, DateTime::Now().Year(), m.MonthNo() );
-            cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            total       := total + cellReal;
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
-          cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-          columnYear.TotalIdentification( year.YearNo() );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-        }
-        
-        // S&OP鏁版嵁
-    //    traverse ( macroPlans, Elements, macroPlan ) {
-    //      traverse ( months, Elements, month ) {
-    //        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
-    //                                                                                "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
-    //        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //          cellReal := Product_MP::GetNewSupplyByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-    //          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //        }
-    //      }
-    //      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, 
-    //                                                                             "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
-    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        cellReal := Product_MP::GetNewSupplyByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-    //        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //      }
-    //    }
-        traverse ( macroPlans, Elements, mp ) {
-          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-            total := 0.0;
-            traverse ( months, Elements, m ) {
-              columnName  := "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
-              columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-              cellReal    := Product_MP::GetNewSupplyByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
-              cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-              total       := total + cellReal;
-              cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-            }
-            columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍒嗛厤閲�-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
-            cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-            columnYear.TotalIdentification( year.YearNo() );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-        }
+        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationBudget( this, months, year, globalOTDTable );
+        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationByScenario( macroPlans, this, months, year );
       }
     }
     
-    // 骞村害閿�鍞
     if ( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) {
       traverse ( years, Elements, year ) {
-        // 鍘嗗彶鏁版嵁
-    //    traverse ( months, Elements, month ) {
-    //      columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-骞村害棰勭畻" );
-    //      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        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(), otdTable, year.YearNo() );
-    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //    }
-        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-          total := 0.0;
-          traverse ( months, Elements, m ) {
-            columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-骞村害棰勭畻";
-            columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-            cellReal    := Global_MappingAnnualBudgetData::GetSaleByMonth( casbcir.GetProductCodes(), otdTable, year.YearNo(), m.MonthNo() );
-            cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-            total       := total + cellReal;
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-          columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-骞村害棰勭畻" );
-          cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-          columnYear.TotalIdentification( year.YearNo() );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-        }
-        
-        // S&OP鏁版嵁
-    //    traverse ( macroPlans, Elements, macroPlan ) {
-    //      traverse ( months, Elements, month ) {
-    //        columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]month.MonthNo() + "鏈�-" + macroPlan.ScenarioName() );
-    //        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //          cellReal := Forecast::GetFulfilledBalanceByMonth( row.GetProductCodes(), macroPlan, year.YearNo(), month.MonthNo() );
-    //          cell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //        }
-    //      }
-    //      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + macroPlan.ScenarioName() );
-    //      traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-    //        // QID 23
-    //        cellReal := Forecast::GetFulfilledBalanceByYear( row.GetProductCodes(), macroPlan, year.YearNo() );
-    //        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-    //        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    //      }
-    //    }
-        traverse ( macroPlans, Elements, mp ) {
-          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
-            total := 0.0;
-            traverse ( months, Elements, m ) {
-              columnName  := "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-" + [String]m.MonthNo() + "鏈�-" + mp.ScenarioName();
-              columnMonth := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, columnName );
-              cellReal    := Forecast::GetFulfilledBalanceByMonth( casbcir.GetProductCodes(), mp, year.YearNo(), m.MonthNo() );
-              cell        := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]cellReal );
-              total       := total + cellReal;
-              cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-            }
-            columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "瀵瑰閿�鍞-" + [String]year.YearNo() + "骞�-total-" + mp.ScenarioName() );
-            cell       := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
-            columnYear.TotalIdentification( year.YearNo() );
-            cell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
-          }
-        }
+        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolume( this, months, year, globalOTDTable );
+        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeByScenario( macroPlans, this, months, year );
       }
     }
     
     // 澶у紶鐩堝埄棰�
-    traverse ( years, Elements, year ) {
-      // 鍘嗗彶鏁版嵁
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      }
-      // S&OP鏁版嵁
-      traverse( macroPlans, Elements, macroPlan ) {
-        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
-        traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-        }
-      }
-    }
-    // 浜у搧鐩堝埄棰�
-    traverse ( years, Elements, year ) {
-      // 鍘嗗彶鏁版嵁
-      columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
-      traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-        cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-        cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      }
-      // S&OP鏁版嵁
-      traverse ( macroPlans, Elements, macroPlan ) {
-        columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
-        traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-          // todo
-          cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
-          cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-        }
-      }
-    }
+    //traverse ( years, Elements, year ) {
+    //  // 鍘嗗彶鏁版嵁
+    //  columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
+    //  traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //    cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //    cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //  }
+    //  // S&OP鏁版嵁
+    //  traverse( macroPlans, Elements, macroPlan ) {
+    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "澶у紶鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
+    //    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //    }
+    //  }
+    //}
+    //// 浜у搧鐩堝埄棰�
+    //traverse ( years, Elements, year ) {
+    //  // 鍘嗗彶鏁版嵁
+    //  columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-骞村害棰勭畻" );
+    //  traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //    cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //    cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //  }
+    //  // S&OP鏁版嵁
+    //  traverse ( macroPlans, Elements, macroPlan ) {
+    //    columnYear := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜у搧鐩堝埄棰�-" + [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName() );
+    //    traverse ( this, CapacityAndSaleBudgeCompareItemRow, row ) {
+    //      // todo
+    //      cell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]Number::Random( 0, 0 ) );
+    //      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
+    //    }
+    //  }
+    //}
     
     // 璁剧疆rowNo鍜宑olumnNo
     rowNo := 1;
diff --git a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
index 984a0eb..ad249d7 100644
--- a/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingActualProductInStockingPointInPeriod/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -12,14 +12,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾瀹為檯搴撳瓨鏁版嵁",
+                                                                       BrokerName := "鍚屾瀹為檯搴撳瓨鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
+      macroPlan.DoASyncMappingActualPISPIPData( businessTypes, globalOTDTable, isKeyProduct, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
index 9467117..51aa067 100644
--- a/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingConversionFactor/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,14 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾鍗曚綅杞崲鏁版嵁",
+                                                                       BrokerName := "鍚屾鍗曚綅杞崲鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingBaseConversionFactorData(globalOTDTable);
+      macroPlan.DoASyncMappingBaseConversionFactorData(globalOTDTable);
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 5913ebe..e30d9ef 100644
--- a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾璐у竵姹囩巼鏁版嵁",
+                                                                       BrokerName := "鍚屾璐у竵姹囩巼鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( CurrencyRate_MPs );
-      traverse( globalOTDTable, Global_MappingCurrencyRate_MP, gcr, true )
-      {
-        a := CurrencyRate_MP::CreateCurrencyRate( gcr.CurrencyID(), gcr.Start(), gcr.Rate() );
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Currency_MP.CurrencyRate_MP, cr, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      CurrencyRate_MP::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 38ac6bb..31f2109 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾璐у竵鏁版嵁",
+                                                                       BrokerName := "鍚屾璐у竵鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( Currency_MPs );
-      traverse( globalOTDTable, Global_MappingCurrency_MP, gc, true )
-      {
-        a := Currency_MP::CreateCurrency( macroPlan, gc.ID(), gc.Name(), " ", gc.IsBase() );
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Currency_MP, c, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      Currency_MP::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
index 9a69cf5..7e2f51f 100644
--- a/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingCustomOrder/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,23 @@
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
   MacroPlan macroPlan,
+  Strings businessTypes,
+  Strings organcodelist,
   String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾璁㈠崟鏁版嵁",
+                                                                       BrokerName := "鍚屾璁㈠崟鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      Global_MappingCustomOrder::CreateCustomOrder( globalOTDTable, macroPlan );
+      macroPlan.DoASyncMappingCustomerOrderData( businessTypes, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
index ef72e85..cb14755 100644
--- a/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingForecast/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾棰勬祴鏁版嵁",
+                                                                       BrokerName := "鍚屾棰勬祴鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingForecastData( businessTypes, globalOTDTable, organcodelist );
+      macroPlan.DoASyncMappingForecastData( businessTypes, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
index 06d00c5..7de7b35 100644
--- a/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingInventorySupply/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -12,14 +12,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾鍦ㄩ�斿簱瀛樻暟鎹�",
+                                                                       BrokerName := "鍚屾鍦ㄩ�斿簱瀛樻暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingExternalSupplyData( businessTypes, isKeyProduct ,globalOTDTable, organcodelist );
+      macroPlan.DoASyncMappingExternalSupplyData( businessTypes, isKeyProduct, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
index 60224b2..6cfc45e 100644
--- a/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,61 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾杞﹂亾鏁版嵁",
+                                                                       BrokerName := "鍚屾杞﹂亾鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( Lanes );
-      traverse( globalOTDTable, Global_MappingLane, gl, true )
-      {
-        id := gl.ID();
-        unitid := gl.UnitID();
-        name := gl.Name();
-        userleadtime := gl.UserLeadTime();
-        processingtime := Duration::Zero();
-        
-        unitofmeasurename := "PCS";
-        currencyid := "CNY";
-        startdate := Date::Date( 1900, 1, 1 );
-        enddate := Date::Date( 9999, 12, 31 );
-        capacitytype := "Transport quantity";
-        if( userleadtime.Length() = 0 )
-        {
-          processingtime := Duration::Zero(); 
-          }
-        else
-        {
-          processingtime := Duration::Hours( [Number]userleadtime );
-          };
-        
-        unit := Unit::FindUnitTypeIndex( unitid );
-        if( isnull( unit)){
-          unit :=macroPlan.Unit( relnew, 
-                                 ID := unitid, 
-                                 Name := unitid, 
-                                 UnitOfMeasureName := unitofmeasurename, 
-                                 CurrencyID := currencyid, 
-                                 StartDate := startdate, 
-                                 EndDate := enddate, 
-                                 CapacityType := capacitytype );
-        }
-        
-        a := Lane::CreateLane( unit, id, name, processingtime);
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Unit.Lane, l, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      Lane::CreasteFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
index d1743ec..dacd193 100644
--- a/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingLaneLeg/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,44 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾杞﹂亾璺嚎鏁版嵁",
+                                                                       BrokerName := "鍚屾杞﹂亾璺嚎鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( LaneLegs );
-      traverse( globalOTDTable, Global_MappingLaneLeg, gll, true )
-      {
-        processingtime := Duration::Zero();
-        hasprocessingtime := true;
-        userleadtime := gll.UserLeadTime();
-        if( userleadtime.Length() = 0 )
-        {
-          hasprocessingtime := false;
-          processingtime := Duration::Zero(); 
-          }
-        else
-        {
-          hasprocessingtime := true;
-          processingtime := Duration::Hours( [Number]userleadtime );
-          };
-        
-        lane := Lane::FindLaneTypeIndex( gll.LaneID() );
-        a := LaneLeg::CreateLaneleg(lane, gll.LaneID(), gll.OriginStockingPointID(), gll.DestinationStockingPointID(), gll.Name(), hasprocessingtime, processingtime);
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, Unit.Lane.LaneLeg, ll, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      LaneLeg::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
index 6a663dd..59d2808 100644
--- a/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingOperation/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾宸ヨ壓璺嚎鏁版嵁",
+                                                                       BrokerName := "鍚屾宸ヨ壓璺嚎鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingOperationData( businessTypes ,globalOTDTable, organcodelist );  
+      macroPlan.DoASyncMappingOperationData( businessTypes, globalOTDTable, organcodelist ); 
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
index 3198fd5..86e1e89 100644
--- a/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingOperationBOM/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -13,14 +13,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾BOM鏁版嵁",
+                                                                       BrokerName := "鍚屾BOM鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
+      macroPlan.DoASyncMappingOperationBOMData( businessTypes, isKeyProduct, createPurchaseSupplyMaterial, globalOTDTable, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
index 9e722b5..00eddb8 100644
--- a/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingProductInLane/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,22 @@
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
   MacroPlan macroPlan,
+  Strings businessTypes,
   String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾杩愯緭璺嚎浜у搧鏁版嵁",
+                                                                       BrokerName := "鍚屾杩愯緭璺嚎浜у搧鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingProductInLaneData(globalOTDTable);
+      macroPlan.DoASyncMappingProductInLaneData( globalOTDTable, businessTypes );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 8c10d2f..47d8f21 100644
--- a/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingProduct_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾浜у搧鏁版嵁",
+                                                                       BrokerName := "鍚屾浜у搧鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingProductData( businessTypes, globalOTDTable,isKeyProduct );
+      macroPlan.DoASyncMappingProductData( businessTypes, globalOTDTable, isKeyProduct );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index fc881d2..636f6a8 100644
--- a/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -10,14 +10,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾閿�鍞儴闂ㄦ暟鎹�",
+                                                                       BrokerName := "鍚屾閿�鍞儴闂ㄦ暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingSalesSegmentData( businessTypes, globalOTDTable );
+      macroPlan.DoASyncMappingSalesSegmentData( businessTypes, globalOTDTable );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
index df0cc31..adfe937 100644
--- a/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPointCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -3,20 +3,22 @@
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
   MacroPlan macroPlan,
+  Strings businessTypes,
   String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾搴撳瓨鎴愭湰鏁版嵁",
+                                                                       BrokerName := "鍚屾搴撳瓨鎴愭湰鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingInventoryValueAndCostData(globalOTDTable);
+      macroPlan.DoASyncMappingInventoryValueAndCostData( globalOTDTable, businessTypes );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index 7db4814..a388711 100644
--- a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -9,29 +9,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾搴撳瓨鐐规暟鎹�",
+                                                                       BrokerName := "鍚屾搴撳瓨鐐规暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      updates := construct( StockingPoint_MPs );
-      traverse( globalOTDTable, Global_MappingStockingPoint_MP, sp, true )
-      {
-        a := StockingPoint_MP::CreateStockingpoint( macroPlan, sp.ID(), sp.UnitID(), sp.Name() );
-        updates.Add( a );
-        }
-      origindataset := selectset( macroPlan, StockingPoint_MP, sp, true );
-      obsoletes := origindataset.Difference( updates );
-      // delete obsoleted
-      difflength := obsoletes.Size();
-      for( j:=0; j<difflength; j++ )
-      {
-        obsolete := obsoletes.Element( j );
-        obsolete.Delete();
-        }
-      
+      StockingPoint_MP::CreateFromMapping( globalOTDTable, macroPlan );
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
diff --git a/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
index 8f08b84..2b7b644 100644
--- a/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingUnitCost/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -11,14 +11,15 @@
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name        := "鍚屾鍒堕�犳垚鏈暟鎹�",
+                                                                       BrokerName := "鍚屾鍒堕�犳垚鏈暟鎹�",
+                                                                       ExecutionStatus := "InOperation",
                                                                        IsSuccess   := true,
                                                                        ExecuteUser := executionUser
                                                                       );
                                             
       
     try {
-      macroPlan.MappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
+      macroPlan.DoASyncMappingOperationCostData( globalOTDTable, businessTypes, organcodelist );
       
       global_BrokerExecuteLog.ExecutionStatus( "Complete" );
       global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
index d31811e..30bfa48 100644
--- a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/StaticMethod_SynchronizeMacroPlanData.qbl
@@ -2,30 +2,30 @@
 #parent: #root
 StaticMethod SynchronizeMacroPlanData (
   GlobalOTDTable globalOTDTable,
-  MacroPlan macroPlan
+  MacroPlan macroPlan,
+  String executionUser
 )
 {
   TextBody:
   [*
     global_BrokerExecuteLog := globalOTDTable.Global_BrokerExecuteLog( relnew,
-                                                                       Name := "鍚屾鍗曚綅鏁版嵁",
-                                                                       IsSuccess := true
+                                                                       BrokerName := "鍚屾鍗曚綅鏁版嵁",
+                                                                       ExecutionStatus := "InOperation",
+                                                                       IsSuccess   := true,
+                                                                       ExecuteUser := executionUser
                                                                       );
                                             
     try {
-      traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, gmuommp ) {
-        unitOfMeasure_MP := select( macroPlan, UnitOfMeasure_MP, tempUOMMP, tempUOMMP.Name() = gmuommp.Name() );
-        if ( isnull( unitOfMeasure_MP ) ) {  
-          unitOfMeasure_MP := UnitOfMeasure_MP::Create( macroPlan, gmuommp.Name(), false, false );
-        }
-        if ( gmuommp.IsDefault() ) {
-          unitOfMeasure_MP.SetAsDefault();
-        }
-      }
+      macroPlan.DoASyncMappingUnitOfMeasureData(globalOTDTable);
+      
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
+      global_BrokerExecuteLog.SuccessDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
     } onerror {
       global_BrokerExecuteLog.IsSuccess( false );
       global_BrokerExecuteLog.ErrorNo( e.ErrorNr() );
       global_BrokerExecuteLog.ErrorMessage( e.GeneralInformation() );
+      global_BrokerExecuteLog.ErrorDateTime( DateTime::ActualTime().Format( "Y-M-D H2:m:s" ) );
+      global_BrokerExecuteLog.ExecutionStatus( "Complete" );
     }
   *]
 }
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
index 4116cce..9dec2cd 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_CreateOrUpdate.qbl
@@ -32,16 +32,16 @@
     //if( isnull( account ) ) {
     //    error( "account not found" );  
     //}
-    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId,productId,start,id );
+    result := InventoryValueAndCost::FindById( macroPlan, stockingPointId, productId, start, id );
     if( not isnull( product) and not isnull( stockingPoint) and not isnull( account)){
       if( isnull( result ) ) {
         result := InventoryValueAndCost::Create( id, product, stockingPoint, account, costDriver, start, cost, true ).astype( InventoryValueAndCost );
       } else if( result.ProductID() <> productId ) {
         info( "cannot change product of inventory value and cost" )
       } 
-    //  else {
-    //    result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
-    //  }
+      else {
+        result.Update( account, costDriver, start, account.DefaultTimeUnit(), account.DefaultLengthOfTime(), cost, true );
+      }
     }
     
     return result;
diff --git a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
index 133145d..e49e111 100644
--- a/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
+++ b/_Main/BL/Type_InventoryValueAndCost/StaticMethod_FindById.qbl
@@ -12,6 +12,9 @@
   [*
     // yypsybs Aug-16-2023 (created)
     value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ProductID()=productId and item.StockingPointID() = stockPointId and item.Start() = start );
+    if( isnull( value ) ){
+      value := select( macroPlan, Product_MP.InventoryValueAndCost, item, true, item.ID() = id );
+      }
     return value;
   *]
 }
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl b/_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl
new file mode 100644
index 0000000..ab95433
--- /dev/null
+++ b/_Main/BL/Type_Lane/StaticMethod_CreasteFromMapping.qbl
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreasteFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( Lanes );
+    traverse( globalOTDTable, Global_MappingLane, gl, true )
+    {
+      id := gl.ID();
+      unitid := gl.UnitID();
+      name := gl.Name();
+      userleadtime := gl.UserLeadTime();
+      processingtime := Duration::Zero();
+      
+      unitofmeasurename := "PCS";
+      currencyid := "CNY";
+      startdate := Date::Date( 1900, 1, 1 );
+      enddate := Date::Date( 9999, 12, 31 );
+      capacitytype := "Transport quantity";
+      if( userleadtime.Length() = 0 )
+      {
+        processingtime := Duration::Zero(); 
+        }
+      else
+      {
+        processingtime := Duration::Hours( [Number]userleadtime );
+        };
+      
+      unit := Unit::FindById( macroPlan, unitid );
+      if( isnull( unit)){
+        unit :=macroPlan.Unit( relnew, 
+                               ID := unitid, 
+                               Name := unitid, 
+                               UnitOfMeasureName := unitofmeasurename, 
+                               CurrencyID := currencyid, 
+                               StartDate := startdate, 
+                               EndDate := enddate, 
+                               CapacityType := capacitytype );
+      }
+      
+      a := Lane::CreateLane( macroPlan, unit, id, name, processingtime);
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Unit.Lane, l, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl b/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
index 64c72eb..286b75f 100644
--- a/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
+++ b/_Main/BL/Type_Lane/StaticMethod_CreateLane.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateLane (
+  MacroPlan mp,
   Unit unit,
   String id,
   String name,
@@ -19,7 +20,7 @@
     isfromdb := true;
     
     //create new stockingpoint
-    result := Lane::FindLaneTypeIndex( id );
+    result := Lane::FindById( mp, id );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl b/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
index 060eabc..d4e9b77 100644
--- a/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
+++ b/_Main/BL/Type_Lane/StaticMethod_CreateLaneFromJson.qbl
@@ -40,7 +40,7 @@
                    EndDate := enddate );
     }
     
-    result := Lane::CreateLane( unit, id, name, processingtime);
+    result := Lane::CreateLane( macroplan, unit, id, name, processingtime);
     
     return result;
   *]
diff --git a/_Main/BL/Type_Lane/StaticMethod_FindById.qbl b/_Main/BL/Type_Lane/StaticMethod_FindById.qbl
new file mode 100644
index 0000000..05cf40a
--- /dev/null
+++ b/_Main/BL/Type_Lane/StaticMethod_FindById.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindById (
+  MacroPlan mp,
+  String id
+) as Lane
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    result := select( mp, Unit.Lane, lane, true, lane.ID() = id );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl b/_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl
new file mode 100644
index 0000000..b60c9e4
--- /dev/null
+++ b/_Main/BL/Type_Lane/StaticMethod_FindByIdAndUnit.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByIdAndUnit (
+  Unit unit,
+  String id
+) as Lane
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    
+    result := select(  unit, Lane, item, true, item.ID() = id );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..f15c486
--- /dev/null
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( LaneLegs );
+    traverse( globalOTDTable, Global_MappingLaneLeg, gll, true )
+    {
+      processingtime := Duration::Zero();
+      hasprocessingtime := true;
+      userleadtime := gll.UserLeadTime();
+      if( userleadtime.Length() = 0 )
+      {
+        hasprocessingtime := false;
+        processingtime := Duration::Zero(); 
+        }
+      else
+      {
+        hasprocessingtime := true;
+        processingtime := Duration::Hours( [Number]userleadtime );
+        };
+      
+      lane := Lane::FindById( macroPlan, gll.LaneID() );
+      a := LaneLeg::CreateLaneleg( macroPlan, lane, gll.LaneID(), gll.OriginStockingPointID(), gll.DestinationStockingPointID(), gll.Name(), hasprocessingtime, processingtime);
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, Unit.Lane.LaneLeg, ll, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
index ed77c9e..021a0f6 100644
--- a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneLegFromJson.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateLaneLegFromJson (
+  MacroPlan mp,
   JSON datarow
 ) as LaneLeg
 {
@@ -29,7 +30,7 @@
     
     lane := Lane::FindLaneTypeIndex( laneid );
     
-    result := LaneLeg::CreateLaneleg(lane, laneid, originstockingpointid, destinationstockingpointid, name, hasprocessingtime, processingtime);
+    result := LaneLeg::CreateLaneleg( mp, lane, laneid, originstockingpointid, destinationstockingpointid, name, hasprocessingtime, processingtime);
     
     return result;
   *]
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
index c72fe3d..6ca8d7e 100644
--- a/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_CreateLaneleg.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 StaticMethod CreateLaneleg (
+  MacroPlan mp,
   Lane lane,
   String laneid,
   String originstockingpointid,
@@ -25,16 +26,16 @@
     isfromdb := true;
     
     //create new stockingpoint
-    originstockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( originstockingpointid );
+    originstockingpoint := StockingPoint_MP::FindById( mp, originstockingpointid );
     lane.AddStockingPoint( originstockingpoint, true, isfromdb );
     Transaction::Transaction().Propagate();
     
-    destinationstockingpoint := StockingPoint_MP::FindStockingPointTypeIndex( destinationstockingpointid );
+    destinationstockingpoint := StockingPoint_MP::FindById( mp, destinationstockingpointid );
     lane.AddStockingPoint( destinationstockingpoint, false, isfromdb );
     
     Transaction::Transaction().Propagate();
     
-    result := LaneLeg::FindLaneLegTypeIndex( laneid, originstockingpointid, destinationstockingpointid );
+    result := LaneLeg::FindByIdAndLane( lane, originstockingpointid, destinationstockingpointid );
     
     if( isnull( result ) )
     {
diff --git a/_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl b/_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl
new file mode 100644
index 0000000..a6a90ec
--- /dev/null
+++ b/_Main/BL/Type_LaneLeg/StaticMethod_FindByIdAndLane.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindByIdAndLane (
+  Lane lane,
+  String originstockingpointid,
+  String destinationstockingpointid
+) as LaneLeg
+{
+  TextBody:
+  [*
+    // yypsybs Aug-14-2023 (created)
+    
+    result := select(  lane, LaneLeg, item, true, item.OriginStockingPointID() = originstockingpointid and item.DestinationStockingPointID() = destinationstockingpointid );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl b/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
deleted file mode 100644
index 1672b03..0000000
--- a/_Main/BL/Type_MacroPlan/DefaultValue_BusinessType.qbl
+++ /dev/null
@@ -1,6 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-DefaultValue
-{
-  TargetAttribute: BusinessType
-}
diff --git a/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl b/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
index 9f5c492..e4ee8c5 100644
--- a/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_ApiCurencyRatesData.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method ApiCurencyRatesData (
+  MacroPlan mp,
   JSON data
 )
 {
@@ -14,7 +15,7 @@
     for( i:=0; i<data_length; i++ )
     {
       datarow := data.Get( i );
-      a := CurrencyRate_MP::CreateCurrencyRateFromJson( datarow );
+      a := CurrencyRate_MP::CreateCurrencyRateFromJson( mp, datarow );
       updates.Add( a );
       }
     origindataset := selectset( this, Currency_MP.CurrencyRate_MP, cr, true );
diff --git a/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl b/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
index 450d6ae..c3e7b0c 100644
--- a/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_ApiLaneLegsData.qbl
@@ -1,6 +1,7 @@
 Quintiq file version 2.0
 #parent: #root
 Method ApiLaneLegsData (
+  MacroPlan mp,
   JSON data
 )
 {
@@ -14,7 +15,7 @@
     for( i:=0; i<data_length; i++ )
     {
       datarow := data.Get( i );
-      a := LaneLeg::CreateLaneLegFromJson( datarow );
+      a := LaneLeg::CreateLaneLegFromJson( mp, datarow );
       updates.Add( a );
       }
     origindataset := selectset( this, Unit.Lane.LaneLeg, ll, true );
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
index e56a4f7..16ec956 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingCustomerOrderData.qbl
@@ -22,7 +22,7 @@
                                  ( organcodelist.Find( item.StockingPointID().SubString( 0, 3 ) ) >= 0 ) );
     }
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
-    queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
+    //queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
     listToDeal := selectset( listToDeal, Elements, item, item.OrderDate() >= queryStartDate /*and item.OrderDate() <= queryEndDate*/, not isnull( Product_MP::FindById( this, item.ProductID() ) ) and not isnull( StockingPoint_MP::FindById( this, item.StockingPointID() ) ) and not isnull( SalesSegment_MP::FindByName( this, item.SalesSegmentName() ) ) );
     
     totalcount := listToDeal.Size();
diff --git a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
index ad47aed..6b2f316 100644
--- a/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_DoASyncMappingExternalSupplyData.qbl
@@ -11,7 +11,7 @@
   [*
     // renhao Aug-14-2023 (created)
     queryStartDate := guard( min( this, Period_MP, item, true, item.StartDate() ) - Duration::Days( 30 ), DateTime::MinDateTime() ).Date();
-    queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
+    //queryEndDate := guard( max( this, Period_MP, item, true, item.EndDate() ), Date::MaxDate() );
     
     listtodeal := construct( Global_MappingInventorySupplys, constcontent );
     if ( businessTypes.Size() > 0 ) {
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
index 0c397f4..70b4b76 100644
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
@@ -17,6 +17,8 @@
     info( "Prepare to do sync" )
     info( "Get organ code list" )
     businessTypeName := businessType.BusinessTypeName().Tokenize( "," );
+    macroPlan.BusinessType( businessType.BusinessTypeName() );
+    
     organcodelist := selectvalues( businessType, OrganCode, organ, true, organ.OrganCodeName() );
     
     if( organcodelist.Size() = 0 ){
@@ -44,34 +46,23 @@
     macroPlan.DoASyncMappingUnitData( businessTypeName ,globalOTDTable, organcodelist);
     
     // 搴撳瓨鐐�-3
-    info( "Sales Segment Finished, Start Get StockingPoint From Api" )
-    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
-    postrequestbody := parameter.PostRequestBody();
-    address := parameter.Address();
-    url := parameter.AttributeValue();
-    port := [Number]parameter.Port();
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiStockingPointData( data );
+    info( "Sales Segment Finished, Start Get StockingPoint From Mapping" )
+    StockingPoint_MP::CreateFromMapping( globalOTDTable, macroPlan );
+    //parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "StockingPoint" );
+    //postrequestbody := parameter.PostRequestBody();
+    //address := parameter.Address();
+    //url := parameter.AttributeValue();
+    //port := [Number]parameter.Port();
+    //data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
+    //macroPlan.ApiStockingPointData( data );
     
     // 璐у竵淇℃伅-4
-    info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Api" )
-    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyInfo" );
-    postrequestbody := parameter.PostRequestBody();
-    address := parameter.Address();
-    url := parameter.AttributeValue();
-    port := [Number]parameter.Port();
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiCurenciesData( data );
+    info( "Get StockingPoint From Api Finished, Start Get CurrencyInfo From Mapping" )
+    Currency_MP::CreateFromMapping( globalOTDTable, macroPlan );
     
     //璐у竵姹囩巼淇℃伅-5
-    info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Api" )
-    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "CurrencyRates" );
-    postrequestbody := parameter.PostRequestBody();
-    address := parameter.Address();
-    url := parameter.AttributeValue();
-    port := [Number]parameter.Port();
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiCurencyRatesData( data );
+    info( "Get CurrencyInfo From Api Finished, Start Get CurrencyRates From Mapping" )
+    CurrencyRate_MP::CreateFromMapping( globalOTDTable, macroPlan );
     
     // 浜у搧鐗╂枡-6
     //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
@@ -92,24 +83,12 @@
     macroPlan.DoASyncMappingOperationBOMData( businessTypeName, isKeyProduct, createPurchaseSupplyMaterial,globalOTDTable, organcodelist );
     
     //杞﹂亾淇℃伅-10
-    info( "BOM Finished, Start Get Lanes From Api" );
-    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "Lanes" );
-    postrequestbody := parameter.PostRequestBody();
-    address := parameter.Address();
-    url := parameter.AttributeValue();
-    port := [Number]parameter.Port();
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiLanesData( data );
+    info( "BOM Finished, Start Get Lanes From Mapping" );
+    Lane::CreasteFromMapping( globalOTDTable, macroPlan );
     
     //杞﹂亾杩愯緭娈�-11
-    info( "Get Lanes From Api Finished, Start Get LaneLegs From Api" );
-    parameter := select( globalOTDTable, GlobalParameters, param, param.AttributeName() = "LaneLegs" );
-    postrequestbody := parameter.PostRequestBody();
-    address := parameter.Address();
-    url := parameter.AttributeValue();
-    port := [Number]parameter.Port();
-    data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiLaneLegsData( data );
+    info( "Get Lanes From Api Finished, Start Get LaneLegs From Mapping" );
+    LaneLeg::CreateFromMapping( globalOTDTable, macroPlan );
     
     // 渚涘簲缃戠粶锛堣溅閬擄級-12
     //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
diff --git a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
index 8cb5656..25df795 100644
--- a/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
+++ b/_Main/BL/Type_MacroPlan/StaticMethod_DoSync0.qbl
@@ -71,7 +71,7 @@
     url := "/otdService/https/GetCurrencyRatesInfo";
     port := 443;
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiCurencyRatesData( data );
+    macroPlan.ApiCurencyRatesData( macroPlan, data );
     
     // 浜у搧鐗╂枡-6
     //info( "Get CurrencyRates From Api Finished, Start Product Data Broker" )
@@ -109,7 +109,7 @@
     url := "/otdService/https/GetLaneLegsInfo";
     port := 443;
     data := macroPlan.ApiResponesCheck( address, url, port, postrequestbody );
-    macroPlan.ApiLaneLegsData( data );
+    macroPlan.ApiLaneLegsData( macroPlan, data );
     
     // 渚涘簲缃戠粶锛堣溅閬擄級-12
     //info( "Get Lanelegs From Api Finished, Start ProductInLane Data Broker" );
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl
new file mode 100644
index 0000000..47736bd
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_Quantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Quantity
+{
+  #keys: '3[414702.1.294748144][414702.1.294748143][414702.1.294748145]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl
new file mode 100644
index 0000000..1df641d
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_SalesDemandBaseID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SalesDemandBaseID
+{
+  #keys: '3[414702.1.294144484][414702.1.294144483][414702.1.294144485]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl
new file mode 100644
index 0000000..76121f8
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.1.294179414][414702.1.294179413][414702.1.294179415]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..7571b1e
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.1.294179270][414702.1.294179269][414702.1.294179271]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl b/_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl
new file mode 100644
index 0000000..1563969
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInSalesDemandBase/_ROOT_Type_PeggingProductInSalesDemandBase.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingProductInSalesDemandBase
+{
+  #keys: '5[414702.1.290710055][414702.1.290710053][0.0.0][414702.1.290710054][414702.1.290710056]'
+  BaseType: Object
+  StructuredName: 'PeggingProductInSalesDemandBases'
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl b/_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl
new file mode 100644
index 0000000..1aa0e94
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.290710074][414702.1.290710073][414702.1.290710075]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
new file mode 100644
index 0000000..c64e4ba
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDSOP globalOTDSOP,
+  Product_MPs product_MPs
+)
+{
+  TextBody:
+  [*
+    globalOTDSOP.PeggingProduct_MP( relflush );
+    
+    product_MPs := selectset( product_MPs, Elements, tempPMP, tempPMP.IsLeaf() );
+    
+    traverse ( product_MPs, Elements, pmp ) {
+      targetPeggingProduct_MP := globalOTDSOP.PeggingProduct_MP( relnew, ProductID := pmp.ID() );
+      traverse ( pmp, SalesDemand, sd ) {
+        targetPeggingProduct_MP.PeggingProductInSalesDemandBase( relnew, 
+                                                                 StockingPointID   := sd.StockingPointID(), 
+                                                                 SalesDemandBaseID := sd.ID(),
+                                                                 Quantity          := sd.Quantity(),
+                                                                 StartDate         := sd.StartDate() );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl b/_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl
new file mode 100644
index 0000000..6b2219e
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/_ROOT_Type_PeggingProduct_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingProduct_MP
+{
+  #keys: '5[414702.1.290710035][414702.1.290710033][0.0.0][414702.1.290710034][414702.1.290710036]'
+  BaseType: Object
+  StructuredName: 'PeggingProduct_MPs'
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl b/_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl
new file mode 100644
index 0000000..54dd8e4
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_ActualFulfillmentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ActualFulfillmentQuantity
+{
+  #keys: '3[414702.1.314092328][414702.1.314092327][414702.1.314092329]'
+  Description: '瀹為檯浜や粯鐨勬暟閲�'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl b/_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl
new file mode 100644
index 0000000..36ca7a2
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_FulfillmentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FulfillmentQuantity
+{
+  #keys: '3[414702.1.294201083][414702.1.294201082][414702.1.294201084]'
+  Description: '璁㈠崟鎵�闇�瑕佺殑鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl b/_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl
new file mode 100644
index 0000000..610302a
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_NumberOfPlies.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfPlies
+{
+  #keys: '3[414702.1.294145595][414702.1.294145594][414702.1.294145596]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl b/_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl
new file mode 100644
index 0000000..d0beff9
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.294201096][414702.1.294201095][414702.1.294201097]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl b/_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl
new file mode 100644
index 0000000..62f0fec
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.1.294201063][414702.1.294201062][414702.1.294201064]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl b/_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..6a9dcad
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.1.294201106][414702.1.294201105][414702.1.294201107]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl b/_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl
new file mode 100644
index 0000000..053a461
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_SupplyQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SupplyQuantity
+{
+  #keys: '3[414702.1.294201073][414702.1.294201072][414702.1.294201074]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl b/_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl
new file mode 100644
index 0000000..fcfb218
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_SupplyType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SupplyType
+{
+  #keys: '3[414702.1.294201053][414702.1.294201052][414702.1.294201054]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl b/_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl
new file mode 100644
index 0000000..1d741f1
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/Attribute_UnitOfMeasurementName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasurementName
+{
+  #keys: '3[414702.1.294852022][414702.1.294852021][414702.1.294852023]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl
new file mode 100644
index 0000000..35370aa
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_Create.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  String productID,
+  String stockingPointID,
+  Date startDate,
+  Real supplyQuantity,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  String supplyType,
+  Number numberOfPlies,
+  String unitOfMeasurementName
+) as PeggingResult
+{
+  TextBody:
+  [*
+    peggingResult := peggingProductInSalesDemandBase.PeggingResult( relnew, 
+                                                                    ProductID                 := productID,
+                                                                    StockingPointID           := stockingPointID,
+                                                                    StartDate                 := startDate,
+                                                                    SupplyQuantity            := supplyQuantity,
+                                                                    ActualFulfillmentQuantity := actualFulfillmentQuantity,
+                                                                    FulfillmentQuantity       := fulfillmentQuantity,
+                                                                    SupplyType                := supplyType,
+                                                                    NumberOfPlies             := numberOfPlies,
+                                                                    UnitOfMeasurementName     := unitOfMeasurementName
+                                                                   );
+    return peggingResult;
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl
new file mode 100644
index 0000000..b435f3b
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllChildRelation.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateAllChildRelation (
+  PeggingProductInSalesDemandBase ppisdb
+)
+{
+  TextBody:
+  [*
+    targetPeggingResults := selectset( ppisdb, PeggingResult, tempPR, tempPR.NumberOfPlies() = 0 );
+    
+    traverse ( targetPeggingResults, Elements, pr ) {
+      parentPeggingResult := pr;
+      childPeggingResult  := pr;
+      PeggingResult::SetAllChildRelation( ppisdb, parentPeggingResult, childPeggingResult );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl
new file mode 100644
index 0000000..3e19eca
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateAllGroupChildRelation (
+  PeggingProductInSalesDemandBase ppisdb
+)
+{
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..b121c0d
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  PeggingProductInSalesDemandBases peggingProductInSalesDemandBases,
+  const MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( peggingProductInSalesDemandBases, Elements, ppisdb ) {
+      ppisdb.PeggingResult( relflush );
+      targetSalesDemand := select( macroPlan, SalesDemand, tempSD, tempSD.ID() = ppisdb.SalesDemandBaseID() );
+      traverse ( targetSalesDemand, SalesDemandInPeriod.Fulfillment, f ) {
+        smp                 := f.Supply_MP();
+        fulfillmentQuantity := f.Quantity();
+        PeggingResult::GeneratePeggingResult( ppisdb, 
+                                              0,
+                                              smp,
+                                              fulfillmentQuantity,
+                                              fulfillmentQuantity,
+                                              null( PeggingResult ) );
+      }
+      
+      PeggingResult::CreateAllChildRelation( ppisdb );
+      PeggingResult::CreateAllGroupChildRelation( ppisdb );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl
new file mode 100644
index 0000000..6d10ac1
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateInventorySupply.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateInventorySupply (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  Number numberOfPlies,
+  const InventorySupply is,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResult parentPeggingResult
+)
+{
+  TextBody:
+  [*
+    //info( "渚涘簲绫诲瀷锛圛nventorySupply锛�    ", "渚涘簲鏃堕棿锛�", is.Date().Format( "Y-M2-D2" ), "    渚涘簲閲忥細", is.Quantity(), 
+    //      "    瀹為檯鐢ㄩ噺锛�", fulfillmentQuantity, "    ", is.ProductInStockingPoint_MP().Name() );
+    pisp := is.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    childPeggingResult := PeggingResult::Create( peggingProductInSalesDemandBase, 
+                                                 pisp.ProductID(), 
+                                                 pisp.StockingPointID(), 
+                                                 is.Date(), 
+                                                 is.Quantity(), 
+                                                 actualFulfillmentQuantity,
+                                                 fulfillmentQuantity, 
+                                                 "搴撳瓨渚涘簲", 
+                                                 numberOfPlies,
+                                                 pisp.UnitOfMeasureName()
+                                                );
+    
+    PeggingResult::SetParentChildRelationship( parentPeggingResult, childPeggingResult );
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
new file mode 100644
index 0000000..cc10732
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
@@ -0,0 +1,66 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateNewSupply (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  Number numberOfPlies,
+  const NewSupply ns,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResult parentPeggingResult
+)
+{
+  TextBody:
+  [*
+    //info( "渚涘簲绫诲瀷锛圢ewSupply锛�", "    渚涘簲閲忥細", ns.Quantity(), "    婊¤冻锛�", fulfillmentQuantity );
+    
+    pisp := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    
+    childPeggingResult := PeggingResult::Create( peggingProductInSalesDemandBase, 
+                                                 pisp.ProductID(), 
+                                                 pisp.StockingPointID(), 
+                                                 ns.Start().Date(), 
+                                                 ns.Quantity(),
+                                                 actualFulfillmentQuantity, 
+                                                 fulfillmentQuantity, 
+                                                 "", 
+                                                 numberOfPlies, 
+                                                 pisp.UnitOfMeasureName() );
+    PeggingResult::SetParentChildRelationship( parentPeggingResult, childPeggingResult );
+    
+    ontype ( ns.PeriodTask_MP() ) {
+      PeriodTaskOperation as pto : {
+        childPeggingResult.SupplyType( "浜х嚎渚涘簲" );
+    //    info( "鎿嶄綔鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", pto.Key(), "    ",
+    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+        traverse ( pto, DependentDemand, dd, dd.Quantity() > 0 ) {
+          traverse ( dd, Fulfillment, f ) {
+            actualFulfillmentQuantity := f.Quantity();
+            smp1 := f.Supply_MP();
+            numberOfPlies++;
+            fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
+    //        info( "--------------------------------------------------------------" );
+            PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, fulfillmentQuantity, childPeggingResult );
+            numberOfPlies--;
+          }
+        }
+      }
+           
+      PeriodTaskLaneLeg as ptll : {
+        childPeggingResult.SupplyType( "杞﹂亾渚涘簲" );
+        targetDependentDemand := select( ptll, DependentDemand, dd, 
+                                         dd.ProcessInput().ProductInStockingPoint_MP().ProductID() = ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().ProductID() and
+                                         dd.Quantity() = ns.Quantity() );
+    //    info( "杞﹂亾鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", ptll.Key(), "    ", 
+    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+        traverse ( targetDependentDemand, Fulfillment, f ) {
+          actualFulfillmentQuantity := f.Quantity();
+          smp1 := f.Supply_MP();
+          numberOfPlies++;
+    //      info( "--------------------------------------------------------------" );
+          PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, fulfillmentQuantity, childPeggingResult );
+          numberOfPlies--;
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
new file mode 100644
index 0000000..3e6f64e
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GeneratePeggingResult (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  Number numberOfPlies,
+  const Supply_MP smp,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResult parentPeggingResult
+)
+{
+  TextBody:
+  [*
+    //info( "灞傛暟锛�", numberOfPlies );
+    ontype ( smp ) {
+      NewSupply as ns : {
+        PeggingResult::GenerateNewSupply( peggingProductInSalesDemandBase, numberOfPlies, ns, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
+      }
+    
+      InventorySupply as is : {
+        PeggingResult::GenerateInventorySupply( peggingProductInSalesDemandBase, numberOfPlies, is, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl
new file mode 100644
index 0000000..caee0aa
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetAllChildRelation (
+  PeggingProductInSalesDemandBase peggingProductInSalesDemandBase,
+  PeggingResult parentPeggingResult,
+  PeggingResult childPeggingResult
+)
+{
+  TextBody:
+  [*
+    if ( childPeggingResult.Child( relsize ) = 0 ) {
+      childPeggingResult.AllParent( relset, parentPeggingResult ); 
+    }
+    
+    traverse ( childPeggingResult, Child, pr ) {
+      pr.AllParent( relset, parentPeggingResult );
+      PeggingResult::SetAllChildRelation( peggingProductInSalesDemandBase, parentPeggingResult, pr );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl
new file mode 100644
index 0000000..144505c
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_SetParentChildRelationship.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetParentChildRelationship (
+  PeggingResult parentPeggingResult,
+  PeggingResult childPeggingResult
+)
+{
+  TextBody:
+  [*
+    if ( not isnull( parentPeggingResult ) and not isnull( childPeggingResult ) ) {
+      childPeggingResult.Parent( relset, parentPeggingResult );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl b/_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl
new file mode 100644
index 0000000..cd1bb3b
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/_ROOT_Type_PeggingResult.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingResult
+{
+  #keys: '5[414702.1.290710095][414702.1.290710093][0.0.0][414702.1.290710094][414702.1.290710096]'
+  BaseType: Object
+  StructuredName: 'PeggingResults'
+}
diff --git a/_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl b/_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl
new file mode 100644
index 0000000..d7fa0eb
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingResultGroup
+{
+  #keys: '5[414702.1.320753704][414702.1.320753702][0.0.0][414702.1.320753703][414702.1.320753705]'
+  BaseType: Object
+  StructuredName: 'PeggingResultGroups'
+}
diff --git a/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl b/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
index 0359b3f..8fd36c2 100644
--- a/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
+++ b/_Main/BL/Type_ProductInLane/StaticMethod_CreateOrUpdate.qbl
@@ -15,15 +15,15 @@
     
     // Get product&line
     product :=  Product_MP::FindById( owner, productid );
-    line :=  Lane::FindLaneTypeIndex( lineid );
+    line :=  Lane::FindById( owner, lineid );
     
     if( not isnull( product) and not isnull( line)){
-      productinline := ProductInLane::FindProductInLaneTypeIndex( lineid, productid );
+      productinline := ProductInLane::FindById( owner, productid, lineid );
     
       if( isnull( productinline ) ){
       ProductInLane::Create( product, line, isexcluded, isfromdb );
       }else{
-       productinline.Update( productid, lineid, isexcluded, isfromdb );
+        productinline.Update( lineid, productid, isexcluded, isfromdb );
         }
     }
   *]
diff --git a/_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl b/_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl
new file mode 100644
index 0000000..e0065ed
--- /dev/null
+++ b/_Main/BL/Type_ProductInLane/StaticMethod_FindById.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FindById (
+  MacroPlan mp,
+  String id,
+  String laneid
+) as ProductInLane
+{
+  TextBody:
+  [*
+    // yy 2023-11-01
+    result := select( mp, Product_MP.ProductInLane, pil, true, pil.ProductID() = id and pil.LaneID() = laneid );
+    
+    return result;
+  *]
+}
diff --git a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl
new file mode 100644
index 0000000..f56738d
--- /dev/null
+++ b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateFromMapping.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateFromMapping (
+  const GlobalOTDTable globalOTDTable,
+  MacroPlan macroPlan
+)
+{
+  Description: '浠巑apping琛ㄥ垱寤哄簱瀛樼偣'
+  TextBody:
+  [*
+    // Administrator Oct-31-2023 (created)
+    updates := construct( StockingPoint_MPs );
+    traverse( globalOTDTable, Global_MappingStockingPoint_MP, sp, true )
+    {
+      a := StockingPoint_MP::CreateStockingpoint( macroPlan, sp.ID(), sp.UnitID(), sp.Name() );
+      updates.Add( a );
+      }
+    origindataset := selectset( macroPlan, StockingPoint_MP, sp, true );
+    obsoletes := origindataset.Difference( updates );
+    // delete obsoleted
+    difflength := obsoletes.Size();
+    for( j:=0; j<difflength; j++ )
+    {
+      obsolete := obsoletes.Element( j );
+      obsolete.Delete();
+      }
+  *]
+}
diff --git a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
index 857199b..3e2a601 100644
--- a/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
+++ b/_Main/BL/Type_StockingPoint_MP/StaticMethod_CreateStockingpoint.qbl
@@ -22,7 +22,7 @@
     isfromdb := true;
     
     //create new stockingpoint
-    result := StockingPoint_MP::FindStockingPointTypeIndex( id );
+    result := StockingPoint_MP::FindById( mp, id );
     
     if( isnull( result ) )
     {
diff --git a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
index 2cd8ea3..07ca890 100644
--- a/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
+++ b/_Main/UI/MacroPlanner/Component_ApplicationLibMacroPlanner/Component_mbMainMenu.def
@@ -145,6 +145,8 @@
         Component ComponentMenu666 { #keys: '[414702.0.265704260]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormBrokerExecuteLog' Text: '' ] }
         Component menuSeparator822 { #keys: '[414702.0.340555024]' BaseType: 'Menu' Properties: [ Separator: true ] }
         Component ComponentMenu783 { #keys: '[414702.0.340555035]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormTestButtonCollection' Text: '' ] }
+        Component menuSeparator432 { #keys: '[414702.1.299084028]' BaseType: 'Menu' Properties: [ Separator: true ] }
+        Component ComponentMenu420 { #keys: '[414702.1.299224194]' BaseType: 'ComponentMenu' Properties: [ ComponentType: 'FormPeggingResult' Text: '' ] }
       ]
       Properties:
       [
@@ -165,6 +167,8 @@
           c: ComponentMenu666
           c: menuSeparator822
           c: ComponentMenu783
+          c: menuSeparator432
+          c: ComponentMenu420
         }
       ]
     }
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def
new file mode 100644
index 0000000..b2a7bab
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ColumnTitles552.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+Component ColumnTitles552
+{
+  #keys: '[414702.1.299084155]'
+  BaseType: 'ColumnTitles'
+  Children:
+  [
+    Component popupColumnTitles881
+    {
+      #keys: '[414702.1.299084158]'
+      BaseType: 'popupColumnTitles'
+    }
+  ]
+  Properties:
+  [
+    ContextMenu: 'popupColumnTitles881'
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..7e94c7c
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
@@ -0,0 +1,117 @@
+Quintiq file version 2.0
+Component ListPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.299084152]'
+  BaseType: 'List'
+  Children:
+  [
+    #child: ColumnTitles552
+    Component popupList809
+    {
+      #keys: '[414702.1.299084184]'
+      BaseType: 'popupList'
+      Children:
+      [
+        Component PopupParent
+        {
+          #keys: '[514.0.129466]'
+          BaseType: 'PopupParent'
+          IsDerived: true
+          Children:
+          [
+            Component menuSeparator { #keys: '[414702.1.299084264]' BaseType: 'Menu' Properties: [ Separator: true ] }
+            Component MenuGeneratePeggingResult { #keys: '[414702.1.299084327]' BaseType: 'Menu' Properties: [ Image: 'BEER_GLASS' Text: 'GeneratePeggingResult' ] }
+          ]
+          Properties:
+          [
+            ModeledStringList ChildOrdering
+            {
+              c: MenuActions
+              c: MenuFilter
+              c: menuListQuintiqSetQuantor
+              c: menuSeparator
+              c: MenuGeneratePeggingResult
+            }
+          ]
+        }
+      ]
+      Properties:
+      [
+        PosX: 35
+        PosY: 60
+      ]
+    }
+    Component GUIDataExtractor968
+    {
+      #keys: '[414702.1.299084216]'
+      BaseType: 'GUIDataExtractor'
+      Properties:
+      [
+        DataSet: 'GlobalOTDSOP'
+        DataType: 'GlobalOTDSOP'
+        PosX: 5
+        PosY: 30
+        Transformation: 'PeggingProduct_MP.PeggingProductInSalesDemandBase'
+      ]
+    }
+    Component GUIDataSetLevel641
+    {
+      #keys: '[414702.1.299084219]'
+      BaseType: 'GUIDataSetLevel'
+      Properties:
+      [
+        DataExtractor: 'GUIDataExtractor968'
+        PosX: 35
+        PosY: 30
+      ]
+    }
+  ]
+  Properties:
+  [
+    AutoDrag: true
+    BackgroundColor: 'Window'
+    Border: true
+    ContextMenu: 'popupList809'
+    FullRowSelect: true
+    ModeledStringList ChildOrdering
+    {
+      c: ColumnTitles552
+      c: popupList809
+      c: GUIDataExtractor968
+      c: GUIDataSetLevel641
+    }
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_Menu_OnClick
+    {
+      #keys: '[414702.1.299084225]'
+      Initiator: 'Menu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[621.0.8331282]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_GUIButtonBase_OnClick
+    {
+      #keys: '[414702.1.299084226]'
+      Initiator: 'GUIButtonBase'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[621.0.8331327]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def
new file mode 100644
index 0000000..16ee6ba
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnCli.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase
+Response OnClick (
+  structured[PeggingProductInSalesDemandBase] selection
+) id:Response_ListPeggingProductInSalesDemandBase_MenuGeneratePeggingResult_OnClick
+{
+  #keys: '[414702.1.299224579]'
+  Body:
+  [*
+    PeggingResult::CreateData( selection, MacroPlan );
+  *]
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_Menu_OnClick
+  Initiator: 'MenuGeneratePeggingResult'
+}
diff --git a/_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def b/_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
new file mode 100644
index 0000000..bebc147
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlanner
+OrphanComponent FormPeggingResult
+{
+  #keys: '[414702.1.299084054]'
+  BaseType: 'Form'
+  GBLayout
+  {
+    Type: 'internal[GBLayoutDefinition]'
+    Columns:
+    [
+      GBFlow.Column { grow: 128 id: 199 parent: 0 }
+    ]
+    Elements:
+    [
+      GBElement
+      {
+        Component => ListPeggingProductInSalesDemandBase
+        Position { startcolumn: 199 startrow: 785 endcolumn: 199 endrow: 785 }
+      }
+    ]
+    Gaps: [ left: 0 right: 0 top: 0 bottom: 0 inner: 5 ]
+    Rows:
+    [
+      GBFlow.Row { grow: 128 id: 785 parent: 0 }
+    ]
+  }
+  Children:
+  [
+    #child: ListPeggingProductInSalesDemandBase
+  ]
+  Properties:
+  [
+    Height: 270
+    Image: 'FISH_BOWL'
+    IncludeInView: true
+    Title: 'PeggingResult'
+    Width: 494
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
index 3103966..6d1c1b0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -49,7 +49,7 @@
         Title: '闈㈡澘鎷夋枡_闆嗗洟鎿嶄綔'
       ]
     }
-    Component mn224
+    Component mn222
     {
       #keys: '[414702.1.5593849]'
       BaseType: 'WebMenu'
@@ -81,6 +81,28 @@
         Title: '鏁版嵁鍒嗗彂'
       ]
     }
+    Component mn666
+    {
+      #keys: '[414702.1.293023106]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Separator: true
+        Taborder: 7
+      ]
+    }
+    Component mnPeggingAnalyse
+    {
+      #keys: '[414702.1.293023171]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Description: 'Pegging鍒嗘瀽'
+        Image: 'COCKTAIL'
+        Taborder: 8
+        Title: 'Pegging鍒嗘瀽'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def
new file mode 100644
index 0000000..eecfc42
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnPeggingAnalyse
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnPeggingAnalyse_OnClick
+{
+  #keys: '[414702.1.294401302]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "Pegging鍒嗘瀽", true );
+    *]
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
index 4428575..fd5f58b 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAllocationResults/Response_PanelCapacityAllocationResults_Export_OnClick.def
@@ -5,11 +5,15 @@
   #keys: '[414702.0.391791234]'
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP );
+  *]
   QuillAction
   {
     Body:
     [*
-      Application.Download( "浜ц兘鍒嗛厤缁撴灉.xlsx", CapacityAllocationResults::Export( GlobalOTDTable ).AsBinaryData() );
+      Application.Download( "浜ц兘鍒嗛厤缁撴灉.xlsx", CapacityAllocationResults::Export( GlobalOTDSOP ).AsBinaryData() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
index 087a1e2..97b6783 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -23,6 +23,16 @@
         Taborder: 0
       ]
     }
+    Component DataHolderInterfaceTest
+    {
+      #keys: '[414502.0.443241895]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'Scenario'
+      Properties:
+      [
+        Taborder: 7
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
new file mode 100644
index 0000000..f6acc5b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListPeggingAllResult
+{
+  #keys: '[414702.1.306657922]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingAllResult
+    {
+      #keys: '[414702.1.306657923]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingResult'
+        ExtractionMode: 'Selected'
+        Source: 'FormPeggingResult.ListPeggingResult'
+        Taborder: 0
+        Transformation: 'AllChild'
+      ]
+    }
+    #child: listActionBarPagePeggingAllResult
+    Component DataSetLevelPeggingAllResult
+    {
+      #keys: '[414702.1.306657928]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingAllResult
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"渚涘簲鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfillmentQuantity","title":"瀹為檯闇�瑕佹暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyType","title":"渚涘簲绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasurementName","title":"鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasurementName"}}]'
+        ContextMenu: 'listContextMenuPeggingAllResult'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingAllResult_WebMenu_OnClick
+    {
+      #keys: '[414702.1.305581888]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[639.0.20605876]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def
new file mode 100644
index 0000000..73bb8e7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listActionBarPagePeggingAllResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingAllResult
+{
+  #keys: '[414702.1.306657925]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def
new file mode 100644
index 0000000..261fbc7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_listContextMenuPeggingAllResult.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingAllResult
+{
+  #keys: '[414702.1.306657930]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectAll
+    {
+      #keys: '[414702.1.305511008]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..9f80468
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Response_ListPeggingAllResult_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingAllResult
+Response OnClick () id:Response_ListPeggingAllResult_MenuSelectAll_OnClick
+{
+  #keys: '[414702.1.306792785]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingAllResult/Responsedef_ListPeggingAllResult_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def
new file mode 100644
index 0000000..7fd5a9c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/_ROOT_Component_FormPeggingAllResult.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingAllResult
+{
+  #keys: '[414702.1.305404879]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListPeggingAllResult
+  ]
+  Properties:
+  [
+    Image: 'DIAMOND'
+    Title: 'Pegging鎵�鏈夊瓙缁撴灉'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..31d1862
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.294477745]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingProductInSalesDemandBase
+    {
+      #keys: '[414702.1.294477746]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProduct_MP'
+        ExtractionMode: 'Selected'
+        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
+        Taborder: 0
+        Transformation: 'PeggingProductInSalesDemandBase'
+      ]
+    }
+    #child: listActionBarPagePeggingProductInSalesDemandBase
+    Component DataSetLevelPeggingProductInSalesDemandBase
+    {
+      #keys: '[414702.1.294477751]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingProductInSalesDemandBase
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}}]'
+        ContextMenu: 'listContextMenuPeggingProductInSalesDemandBase'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+    {
+      #keys: '[414702.1.298881590]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[619.0.10848847]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..0a23391
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.294477748]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..07fe2f0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.294477753]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component mGeneratePeggingResult
+    {
+      #keys: '[414702.1.298700850]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PUMPKIN_HALLOWEEN'
+        Taborder: 3
+        Title: '鐢熸垚Pegging缁撴灉'
+      ]
+    }
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.300701803]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..5f3082e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase
+Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.300762760]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
new file mode 100644
index 0000000..09b333a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase
+Response OnClick (
+  structured[PeggingProductInSalesDemandBase] selection
+) id:Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick
+{
+  #keys: '[414702.1.298700997]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+  Initiator: 'mGeneratePeggingResult'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      PeggingResult::CreateData( selection, MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..abac889
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.291680100]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListPeggingProductInSalesDemandBase
+  ]
+  Properties:
+  [
+    Image: 'BANANA'
+    Title: 'Pegging浜у搧鐨勮鍗�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def
new file mode 100644
index 0000000..6cd63a5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_ListPeggingProduct_MP.def
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPeggingProduct_MP
+{
+  #keys: '[414702.1.291408736]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingProduct_MP
+    {
+      #keys: '[414702.1.291408737]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
+        Taborder: 0
+        Transformation: 'PeggingProduct_MP'
+      ]
+    }
+    #child: listActionBarPagePeggingProduct_MP
+    Component DataSetLevelPeggingProduct_MP
+    {
+      #keys: '[414702.1.291408742]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingProduct_MP
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}}]'
+        ContextMenu: 'listContextMenuPeggingProduct_MP'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProduct_MP_WebMenu_OnClick
+    {
+      #keys: '[414702.1.309521164]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[645.0.18569723]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def
new file mode 100644
index 0000000..66424ec
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listActionBarPagePeggingProduct_MP.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProduct_MP
+{
+  #keys: '[414702.1.291408739]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def
new file mode 100644
index 0000000..2a8c05a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_listContextMenuPeggingProduct_MP.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingProduct_MP
+{
+  #keys: '[414702.1.291408744]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.308101396]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def
new file mode 100644
index 0000000..ff6359c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Component_pButton.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component pButton
+{
+  #keys: '[414702.1.288412503]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bCreate
+    {
+      #keys: '[414702.1.288443069]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BOMB'
+        Label: '鍒涘缓Pegging浜у搧'
+        Taborder: 1
+      ]
+    }
+    Component bRunPeggingAlgorithm
+    {
+      #keys: '[414702.1.302382530]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'TREE'
+        Label: '杩愯Pegging绠楁硶'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..e9aae6b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProduct_MP
+Response OnClick () id:Response_ListPeggingProduct_MP_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.309596514]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProduct_MP/Responsedef_ListPeggingProduct_MP_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
new file mode 100644
index 0000000..84c4002
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: pButton/bCreate
+Response OnClick () id:Response_pButton_bCreate_OnClick
+{
+  #keys: '[414702.1.288443717]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP ) and not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      form := construct( FormNavigationPanel );
+      form.ShowDockLeft();
+      
+      PeggingProduct_MP::Create( GlobalOTDSOP, DataHolderCheckedProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def
new file mode 100644
index 0000000..6218f0f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bRunPeggingAlgorithm_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pButton/bRunPeggingAlgorithm
+Response OnClick () id:Response_pButton_bRunPeggingAlgorithm_OnClick
+{
+  #keys: '[414702.1.304801095]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      MacroPlan.RunPeggingAlgorithm();
+      
+      WebMessageBox::Success( "杩愯鎴愬姛锛�", true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def
new file mode 100644
index 0000000..0cbaf23
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/_ROOT_Component_FormPeggingProduct_MP.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingProduct_MP
+{
+  #keys: '[414702.1.290901529]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListPeggingProduct_MP
+    #child: pButton
+  ]
+  Properties:
+  [
+    Image: 'ORANGE'
+    Title: 'Pegging浜у搧鍒嗘瀽'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
new file mode 100644
index 0000000..ea8def8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+Component ListPeggingResult
+{
+  #keys: '[414702.1.296178342]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingResult
+    {
+      #keys: '[414702.1.296178343]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProductInSalesDemandBase'
+        ExtractionMode: 'Selected'
+        FixedFilter: 'object.NumberOfPlies() = 0'
+        Source: 'FormPeggingProductInSalesDemandBase.ListPeggingProductInSalesDemandBase'
+        Taborder: 0
+        Transformation: 'PeggingResult'
+      ]
+    }
+    #child: listActionBarPagePeggingResult
+    Component DataSetLevelPeggingResult
+    {
+      #keys: '[414702.1.296178348]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingResult
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"渚涘簲鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ActualFulfillmentQuantity","title":"瀹為檯闇�瑕佹暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ActualFulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfillmentQuantity","title":"璁㈠崟闇�瑕佹暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyType","title":"渚涘簲绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasurementName","title":"鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasurementName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"NumberOfPlies","title":"灞傛暟","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"NumberOfPlies"}}]'
+        ContextMenu: 'listContextMenuPeggingResult'
+        RelationFromParent: 'Child'
+        RelationRepeating: 'Child'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingResult_WebMenu_OnClick
+    {
+      #keys: '[414702.1.302148620]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[627.0.29218476]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
new file mode 100644
index 0000000..0cf5674
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingResult
+{
+  #keys: '[414702.1.296178345]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
new file mode 100644
index 0000000..8534bcc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingResult
+{
+  #keys: '[414702.1.296178350]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.302117859]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..5498502
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingResult
+Response OnClick () id:Response_ListPeggingResult_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.302148638]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingResult/Responsedef_ListPeggingResult_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
new file mode 100644
index 0000000..9268901
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormPeggingResult
+{
+  #keys: '[414702.1.295031324]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListPeggingResult
+  ]
+  Properties:
+  [
+    Image: 'CUP'
+    Title: 'Pegging缁撴灉'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/Pegging\345\210\206\346\236\220.vw" "b/_Main/UI/MacroPlannerWebApp/Views/Pegging\345\210\206\346\236\220.vw"
new file mode 100644
index 0000000..cf84f9c
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/Pegging\345\210\206\346\236\220.vw"
@@ -0,0 +1,332 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_FormPeggingProduct_MP
+      {
+        title: 'QTIANMA_JITUAN::FormPeggingProduct_MP'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPeggingProduct_MP'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 7
+          columnPosition: 1
+          columnSpan: 3
+        }
+        components
+        {
+          FormPeggingProduct_MP_pButton
+          {
+            sizeRatio: 1
+          }
+          FormPeggingProduct_MP_ListPeggingProduct_MP
+          {
+          }
+          FormPeggingProduct_MP_DataSetLevelPeggingProduct_MP
+          {
+            groupDepth: -1
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormPeggingProductInSalesDemandBase_1
+      {
+        title: 'QTIANMA_JITUAN::FormPeggingProductInSalesDemandBase'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPeggingProductInSalesDemandBase'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 8
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 3
+        }
+        components
+        {
+          FormPeggingProductInSalesDemandBase_ListPeggingProductInSalesDemandBase
+          {
+          }
+          FormPeggingProductInSalesDemandBase_DataSetLevelPeggingProductInSalesDemandBase
+          {
+            groupDepth: -1
+            sort: 'StartDate'
+            column_SalesDemandBaseID
+            {
+              columnId: 'SalesDemandBaseID'
+              dataPath: 'SalesDemandBaseID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 61
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 95
+            }
+            column_Quantity
+            {
+              columnId: 'Quantity'
+              dataPath: 'Quantity'
+              dataType: 'real'
+              index: 2
+              subtotals: ''
+              width: 51
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 76
+            }
+          }
+        }
+      }
+      form_FormPeggingResult
+      {
+        title: 'QTIANMA_JITUAN::FormPeggingResult'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPeggingResult'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 13
+          columnPosition: 4
+          columnSpan: 9
+        }
+        components
+        {
+          FormPeggingResult_ListPeggingResult
+          {
+          }
+          FormPeggingResult_DataSetLevelPeggingResult
+          {
+            groupDepth: -1
+            sort: 'ProductID'
+            column_PeggingProductInSalesDemandBase_SalesDemandBaseID
+            {
+              columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataPath: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 122
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 164
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 92
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 82
+            }
+            column_SupplyQuantity
+            {
+              columnId: 'SupplyQuantity'
+              dataPath: 'SupplyQuantity'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 86
+            }
+            column_ActualFulfillmentQuantity
+            {
+              columnId: 'ActualFulfillmentQuantity'
+              dataPath: 'ActualFulfillmentQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 97
+            }
+            column_FulfillmentQuantity
+            {
+              columnId: 'FulfillmentQuantity'
+              dataPath: 'FulfillmentQuantity'
+              dataType: 'real'
+              index: 6
+              subtotals: ''
+              width: 108
+            }
+            column_SupplyType
+            {
+              columnId: 'SupplyType'
+              dataPath: 'SupplyType'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 78
+            }
+            column_UnitOfMeasurementName
+            {
+              columnId: 'UnitOfMeasurementName'
+              dataPath: 'UnitOfMeasurementName'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 50
+            }
+            column_NumberOfPlies
+            {
+              columnId: 'NumberOfPlies'
+              dataPath: 'NumberOfPlies'
+              dataType: 'number'
+              index: 9
+              subtotals: ''
+              width: 56
+            }
+          }
+        }
+      }
+      form_FormPeggingAllResult
+      {
+        title: 'QTIANMA_JITUAN::FormPeggingAllResult'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormPeggingAllResult'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 14
+          rowSpan: 12
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormPeggingAllResult_ListPeggingAllResult
+          {
+          }
+          FormPeggingAllResult_DataSetLevelPeggingAllResult
+          {
+            groupDepth: 2
+            sort: 'ProductID,StockingPointID,StartDate,DESC:PeggingProductInSalesDemandBase.SalesDemandBaseID'
+            column_PeggingProductInSalesDemandBase_SalesDemandBaseID
+            {
+              columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataPath: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 150
+            }
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_SupplyQuantity
+            {
+              columnId: 'SupplyQuantity'
+              dataPath: 'SupplyQuantity'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_FulfillmentQuantity
+            {
+              columnId: 'FulfillmentQuantity'
+              dataPath: 'FulfillmentQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: 'sum'
+              width: 150
+            }
+            column_SupplyType
+            {
+              columnId: 'SupplyType'
+              dataPath: 'SupplyType'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasurementName
+            {
+              columnId: 'UnitOfMeasurementName'
+              dataPath: 'UnitOfMeasurementName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'VIEW'
+    description: ''
+  }
+  formatversion: 2
+  id: 'Pegging鍒嗘瀽'
+  name: '鍒嗘瀽Pegging'
+  isglobal: false
+  isroot: true
+}
diff --git "a/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw" "b/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw"
index 3c61315..31640c2 100644
--- "a/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw"
+++ "b/_var/_Main/ProjSettings/MacroPlanner/Views/X_\345\210\206\346\236\220\350\247\206\345\233\276_\133414702.1.50321581\135.vw"
@@ -14,9 +14,9 @@
   ICONIMAGE 'WINDOWS'
   CREATIONDATETIME '2023-10-12T10:00:44'
   CREATIONUSER 'quintiq/hongjli'
-  UPDATEDATETIME '2023-10-12T23:32:10'
+  UPDATEDATETIME '2023-11-01T11:42:14'
   UPDATEUSER 'quintiq/hongjli'
-  LASTACCESSDATE '2023-10-13'
+  LASTACCESSDATE '2023-11-01'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS
@@ -42,33 +42,35 @@
 INFOOBJECT
 {
   KEY [626.0.4514905]
-  OBJECTTYPE Application
+  OBJECTTYPE Application // ApplicationLibMacroPlanner
   BASEINFOOBJECTS
   {
    BASEINFOOBJECT
    {
     KEY [626.0.4514905]
-    OBJECTTYPE GUIComponent
+    OBJECTTYPE GUIComponent // ApplicationLibMacroPlanner
     CONTENTS
     {
      SETTINGS_MDS_WITH_FOLDER
      {
-       [414702.1.62804981]:LibInt_IntegratorProxy:/root:LibInt_IntegratorProxy
-       [414702.1.62833373]:SWF_CommunicationDataset:/root:SWF_CommunicationDataset
-       [414702.1.62828776]:SWF_WorkflowDataset:/root:SWF_WorkflowDataset
-       [414702.1.62800409]:LibDEF_DataBroker:/root:LibDEF_DataBroker
-       [414702.1.61685849]:LibDEF_DataRepository:/root:LibDEF_DataRepository
-       [414702.1.61676708]:DMF_ConvertorDataset:/root:DMF_ConvertorDataset
-       [414702.1.62842521]:LibMon_Monitor:/root:LibMon_Monitor
-       [414702.1.62837950]:LibUTF:/root:UTF
-       [414702.1.62860001]:Lib3DS_RootDataset:/root:Lib3DS_RootDataset
-       [414702.1.62850001]:KpiTracker:/root:KpiTracker
-       [414702.1.62875363]:MacroPlan:/root:MacroPlan
-       [414702.1.61681280]:MPDomainHandler:/root:MPDomainHandler
-       [414702.1.62880001]:MPSync:/root:MPSync
-       [414702.1.62809550]:ScenarioManager:/root:ScenarioManager
-       [414702.1.62870001]:LibSCIIntegrationInterface:/root:LibSCIIntegrationInterface
-       [414702.1.62819619]:GlobalOTDTable:/root:GlobalOTDTable
+       [414702.1.311783034]:LibInt_IntegratorProxy:/root:LibInt_IntegratorProxy
+       [414702.1.314030658]:SWF_CommunicationDataset:/root:SWF_CommunicationDataset
+       [414702.1.314026045]:SWF_WorkflowDataset:/root:SWF_WorkflowDataset
+       [414702.1.311778446]:LibDEF_DataBroker:/root:LibDEF_DataBroker
+       [414702.1.311773861]:LibDEF_DataRepository:/root:LibDEF_DataRepository
+       [414702.1.311764688]:DMF_ConvertorDataset:/root:DMF_ConvertorDataset
+       [414702.1.314039838]:LibMon_Monitor:/root:LibMon_Monitor
+       [414702.1.314035251]:LibUTF:/root:UTF
+       [414702.1.314050001]:Lib3DS_RootDataset:/root:Lib3DS_RootDataset
+       [414702.1.314070001]:KpiTracker:/root:KpiTracker
+       [414702.1.314075378]:MacroPlan:/root:MacroPlan
+       [414702.1.311769276]:MPDomainHandler:/root:MPDomainHandler
+       [414702.1.314060001]:MPSync:/root:MPSync
+       [414702.1.311787619]:ScenarioManager:/root:ScenarioManager
+       [414702.1.314080001]:LibSCIIntegrationInterface:/root:LibSCIIntegrationInterface
+       [414702.1.314007695]:GlobalOTDTable:/root:GlobalOTDTable
+       [414702.1.314016865]:GlobalOTDLog:/root:GlobalOTDLog
+       [414702.1.314012280]:GlobalOTDSOP:/root:GlobalOTDSOP
      }
     }
    }
@@ -78,19 +80,19 @@
    INFOOBJECT
    {
     KEY [514.0.2180]
-    OBJECTTYPE Frame
+    OBJECTTYPE Frame // Frame
     CONTENTS
     {
      State := maximized
      (200,0,1536,809)
-     WorkspaceLocation :=
+     WorkspaceLocation := 
     }
     INFOOBJECTS
     {
      INFOOBJECT
      {
       KEY [113694.2.1024236755]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderViewLayout
       CONTENTS
       {
        Value ''
@@ -99,16 +101,16 @@
      INFOOBJECT
      {
       KEY [127710.1.721401771]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderActiveMacroPlan
       CONTENTS
       {
-       Value '[414702.1.64020493]'
+       Value '[414702.1.314120528]'
       }
      }
      INFOOBJECT
      {
       KEY [132448.0.224582518]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderSetMPDefaultViewForFirstLogin
       CONTENTS
       {
        Value 'false'
@@ -117,7 +119,7 @@
      INFOOBJECT
      {
       KEY [146450.2.1404665746]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // vhConfiguration
       CONTENTS
       {
        Value 'false'
@@ -126,7 +128,7 @@
      INFOOBJECT
      {
       KEY [146874.1.233869144]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // vhConfigurationMatrix
       CONTENTS
       {
        Value 'false'
@@ -135,7 +137,7 @@
      INFOOBJECT
      {
       KEY [132894.0.1007052496]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderSetDataHolderSelectedPISPIPExtractor
       CONTENTS
       {
        Value 'false'
@@ -144,7 +146,7 @@
      INFOOBJECT
      {
       KEY [108684.0.1782661552]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderLastSelected3DDriveDirectory
       CONTENTS
       {
        Value ''
@@ -153,16 +155,16 @@
      INFOOBJECT
      {
       KEY [107654.0.557163713]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderUserGroup
       CONTENTS
       {
-       Value ';MRPPlanning;ProductionPlan;BusinessUnitOM;Web_BlendingPlan;Web_Plan;Web_TripPlan;Web_PurchasingPlan;Web_ProductionPlan;KpiTrackerAdmin;Web_SafetyStock;Web_Inventory;Web_CapacitySmoothing;Web_ShelfLife;Web_LotSizes;Web_Optimizer;Web_SupplyDashboard;Web_OptimizerBenchmarking;Web_Integration;Web_MyActivities;Web_WorkFlowConfiguration;Web_SafetyStockCalculation;Web_InventoryMixBalancing;Web_Feedbacks;Web_Financials;Web_Allocation;Web_DemandPostponement;Web_Blending;Web_ScenariosAndSettings;Web;Web_Development;Web_Sales;Web_CampaignPlanning;Web_SupplyChainData;Web_SupplyPlanning;SOAPServerUserGroup;CollaborativeForecasting;DemandPlanner;SupplyPlanner;SupplyChainDirector;OnPremise;Cloud;SOP;Software;Functionalities;Workflow;TransportationPlanning;SupplySpecifications;SupplyChainMap;ShelfLife;SalesDemandPostponement;SafetyStockCalculation;ProductPlanningGanttChart;Pegging;OptimizerBenchmarking;LotSizes;InventorySupplies;InventorySpecifications;InventoryMixBalancing;Groups;Feedback;Development;DatabaseIntegration;CapacitySmoothing;CampaignPlanning;Blending;AggregatedPlanning;Developer;Administrator;Implementors;AppConfigurators'
+       Value ';Administrator;Developer;AggregatedPlanning;MRPPlanning;ProductionPlan;BusinessUnitOM;Web_BlendingPlan;Web_Plan;Web_TripPlan;Web_PurchasingPlan;Web_ProductionPlan;KpiTrackerAdmin;Web_SafetyStock;Web_Inventory;Web_CapacitySmoothing;Web_ShelfLife;Web_LotSizes;Web_Optimizer;Web_SupplyDashboard;Web_OptimizerBenchmarking;Web_Integration;Web_MyActivities;Web_WorkFlowConfiguration;Web_SafetyStockCalculation;Web_InventoryMixBalancing;Web_Feedbacks;Web_Financials;Web_Allocation;Web_DemandPostponement;Web_Blending;Web_ScenariosAndSettings;Web;Web_Development;Web_Sales;Web_CampaignPlanning;Web_SupplyChainData;Web_SupplyPlanning;SOAPServerUserGroup;CollaborativeForecasting;DemandPlanner;SupplyPlanner;SupplyChainDirector;OnPremise;Cloud;SOP;Software;Functionalities;Workflow;TransportationPlanning;SupplySpecifications;SupplyChainMap;ShelfLife;SalesDemandPostponement;SafetyStockCalculation;ProductPlanningGanttChart;Pegging;OptimizerBenchmarking;LotSizes;InventorySupplies;InventorySpecifications;InventoryMixBalancing;Groups;Feedback;Development;DatabaseIntegration;CapacitySmoothing;CampaignPlanning;Blending;AppConfigurators;Implementors'
       }
      }
      INFOOBJECT
      {
       KEY [113694.1.227882923]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderShowSanityCheck
       CONTENTS
       {
        Value ''
@@ -171,7 +173,7 @@
      INFOOBJECT
      {
       KEY [126224.0.581715]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolder
       CONTENTS
       {
        Value 'Feasible'
@@ -180,7 +182,7 @@
      INFOOBJECT
      {
       KEY [132894.0.388222255]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderImportProfileMessage
       CONTENTS
       {
        Value ''
@@ -189,7 +191,7 @@
      INFOOBJECT
      {
       KEY [127238.1.80067038]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderSizing
       CONTENTS
       {
        Value 'true'
@@ -198,7 +200,7 @@
      INFOOBJECT
      {
       KEY [122192.0.103731718]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverityMsgCount
       CONTENTS
       {
        Value '39'
@@ -207,7 +209,7 @@
      INFOOBJECT
      {
       KEY [113694.2.1085093394]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderIsImportSucceed
       CONTENTS
       {
        Value 'true'
@@ -216,7 +218,7 @@
      INFOOBJECT
      {
       KEY [132448.0.331221783]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderScenarioMPSize
       CONTENTS
       {
        Value '1'
@@ -225,7 +227,7 @@
      INFOOBJECT
      {
       KEY [127238.1.502176570]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderPeriodRollStatus
       CONTENTS
       {
        Value 'false'
@@ -234,7 +236,7 @@
      INFOOBJECT
      {
       KEY [112884.1.706803944]
-      OBJECTTYPE ValueHolder
+      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverity
       CONTENTS
       {
        Value '2'
@@ -243,7 +245,7 @@
      INFOOBJECT
      {
       KEY [132448.0.662420775]
-      OBJECTTYPE GUIDataSetLevel
+      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
       CONTENTS
       {
        Columns
@@ -283,13 +285,13 @@
      INFOOBJECT
      {
       KEY [136682.0.314428046]
-      OBJECTTYPE GUIComponent
+      OBJECTTYPE GUIComponent // PTFPanelTestController
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [105690.0.246954464]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhLogging
         CONTENTS
         {
          Value ''
@@ -298,7 +300,7 @@
        INFOOBJECT
        {
         KEY [104342.0.773994982]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhDoActionInfoReturn
         CONTENTS
         {
          Value ''
@@ -307,7 +309,7 @@
        INFOOBJECT
        {
         KEY [104342.0.867521338]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhPendingActions
         CONTENTS
         {
          Value ''
@@ -316,7 +318,7 @@
        INFOOBJECT
        {
         KEY [104342.0.867524820]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhSharedRepository
         CONTENTS
         {
          Value '\\\\CNLEN1845000693\\PTF_Repository\\'
@@ -325,7 +327,7 @@
        INFOOBJECT
        {
         KEY [105690.0.892938783]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhAsyncActionStatus
         CONTENTS
         {
          Value ''
@@ -334,7 +336,7 @@
        INFOOBJECT
        {
         KEY [105690.0.247211998]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhResultLogPath
         CONTENTS
         {
          Value ''
@@ -343,7 +345,7 @@
        INFOOBJECT
        {
         KEY [105690.0.892939622]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhPTFExecutionStatus
         CONTENTS
         {
          Value 'Inactive'
@@ -352,7 +354,7 @@
        INFOOBJECT
        {
         KEY [103546.0.81355542]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhAutoClose
         CONTENTS
         {
          Value ''
@@ -361,7 +363,7 @@
        INFOOBJECT
        {
         KEY [103546.0.54652306]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // vhLogStart
         CONTENTS
         {
          Value ''
@@ -372,7 +374,7 @@
      INFOOBJECT
      {
       KEY [113694.2.1146370710]
-      OBJECTTYPE Toolbar
+      OBJECTTYPE Toolbar // ToolbarWorkflow
       CONTENTS
       {
        'vertical' '50' '0'
@@ -382,16 +384,19 @@
        INFOOBJECT
        {
         KEY [113694.2.1146375645]
-        OBJECTTYPE CustomDrawComponent
+        OBJECTTYPE CustomDrawComponent // SWF_MP_CustomDrawComponentProcessDashboard
+        BASEINFOOBJECTS
+        {
+        }
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [132478.0.288924864]
-          OBJECTTYPE ValueHolder
+          OBJECTTYPE ValueHolder // ValueHolderLastSyncDateTime
           CONTENTS
           {
-           Value '12-10-2023, 20:12:19'
+           Value '01-11-2023, 10:05:04'
           }
          }
         }
@@ -401,17 +406,17 @@
      INFOOBJECT
      {
       KEY [11660.0.360702312]
-      OBJECTTYPE Toolbar
+      OBJECTTYPE Toolbar // ToolbarSupplyChainPanel
       CONTENTS
       {
-       'horizontal' '50' '336'
+       'horizontal' '50' '320'
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [113694.2.1070869880]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelState
         CONTENTS
         {
          Value 'true'
@@ -420,22 +425,22 @@
        INFOOBJECT
        {
         KEY [113694.2.1070870209]
-        OBJECTTYPE ValueHolder
+        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelSize
         CONTENTS
         {
-         Value '336'
+         Value '320'
         }
        }
        INFOOBJECT
        {
         KEY [113694.2.1033284312]
-        OBJECTTYPE SplitterWnd
+        OBJECTTYPE SplitterWnd // SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [113694.2.1033284313]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -445,7 +450,7 @@
            INFOOBJECT
            {
             KEY [127238.0.1883499282]
-            OBJECTTYPE TabComponent
+            OBJECTTYPE TabComponent // TabComponent
             CONTENTS
             {
              ActivePageIndex 0
@@ -455,7 +460,7 @@
              INFOOBJECT
              {
               KEY [132448.0.71838188]
-              OBJECTTYPE List
+              OBJECTTYPE List // ListNavigationPanelSelection
               CONTENTS
               {
                Quantorrow := false
@@ -465,16 +470,16 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883514459]
-                OBJECTTYPE ValueHolder
+                OBJECTTYPE ValueHolder // ValueHolderListSelections
                 CONTENTS
                 {
-                 Value 'Products'
+                 Value 'Stocking points and units'
                 }
                }
                INFOOBJECT
                {
                 KEY [127238.0.1883514458]
-                OBJECTTYPE GUIDataSetLevel
+                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel288
                 CONTENTS
                 {
                  Columns
@@ -505,13 +510,13 @@
              INFOOBJECT
              {
               KEY [127238.0.1883516525]
-              OBJECTTYPE SplitterWnd
+              OBJECTTYPE SplitterWnd // SplitterWnd516
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [127238.0.1883516526]
-                OBJECTTYPE SplitterPane
+                OBJECTTYPE SplitterPane // SplitterPaneEntities
                 CONTENTS
                 {
                  Size 100
@@ -522,17 +527,20 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516528]
-                  OBJECTTYPE List
+                  OBJECTTYPE List // ListEntityTreeInPanel
                   CONTENTS
                   {
                    Quantorrow := false
+                  }
+                  BASEINFOOBJECTS
+                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [113694.2.1026852831]
-                    OBJECTTYPE GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelUnit
                     CONTENTS
                     {
                      Columns
@@ -567,7 +575,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883516541]
-                OBJECTTYPE SplitterPane
+                OBJECTTYPE SplitterPane // SplitterPaneProducts
                 CONTENTS
                 {
                  Size 0
@@ -578,17 +586,20 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516544]
-                  OBJECTTYPE List
+                  OBJECTTYPE List // ListProductInPanel
                   CONTENTS
                   {
                    Quantorrow := false
+                  }
+                  BASEINFOOBJECTS
+                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [113694.2.1025678105]
-                    OBJECTTYPE GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelProducts
                     CONTENTS
                     {
                      Columns
@@ -621,7 +632,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883516552]
-                OBJECTTYPE SplitterPane
+                OBJECTTYPE SplitterPane // SplitterPaneSalesSegment
                 CONTENTS
                 {
                  Size 0
@@ -632,17 +643,20 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516554]
-                  OBJECTTYPE List
+                  OBJECTTYPE List // ListSalesSegmentInPanel
                   CONTENTS
                   {
                    Quantorrow := false
+                  }
+                  BASEINFOOBJECTS
+                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [11660.0.1616690288]
-                    OBJECTTYPE GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesSegment
                     CONTENTS
                     {
                      Columns
@@ -675,7 +689,7 @@
                INFOOBJECT
                {
                 KEY [131438.0.356639347]
-                OBJECTTYPE SplitterPane
+                OBJECTTYPE SplitterPane // SplitterPanePeriods
                 CONTENTS
                 {
                  Size 0
@@ -686,7 +700,7 @@
                  INFOOBJECT
                  {
                   KEY [131438.0.353247249]
-                  OBJECTTYPE List
+                  OBJECTTYPE List // ListPeriodSpecificationInPanel
                   CONTENTS
                   {
                    Quantorrow := false
@@ -696,7 +710,7 @@
                    INFOOBJECT
                    {
                     KEY [131438.0.371333408]
-                    OBJECTTYPE GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriodSpecifications
                     CONTENTS
                     {
                      Columns
@@ -728,7 +742,7 @@
                      INFOOBJECT
                      {
                       KEY [131438.0.402834330]
-                      OBJECTTYPE GUIDataSetLevel
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriods
                       CONTENTS
                       {
                        Columns
@@ -777,13 +791,13 @@
              INFOOBJECT
              {
               KEY [127238.0.1884468404]
-              OBJECTTYPE SplitterWnd
+              OBJECTTYPE SplitterWnd // SplitterWnd466
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [127238.0.1884468405]
-                OBJECTTYPE SplitterPane
+                OBJECTTYPE SplitterPane // SplitterPane252
                 CONTENTS
                 {
                  VISIBLE true
@@ -793,7 +807,7 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1884468597]
-                  OBJECTTYPE List
+                  OBJECTTYPE List // ListBookmarks
                   CONTENTS
                   {
                    Quantorrow := false
@@ -803,7 +817,7 @@
                    INFOOBJECT
                    {
                     KEY [130238.0.368320209]
-                    OBJECTTYPE GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarks
                     CONTENTS
                     {
                      Columns
@@ -834,7 +848,7 @@
                      INFOOBJECT
                      {
                       KEY [130238.0.368320210]
-                      OBJECTTYPE GUIDataSetLevel
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarkChildren
                       CONTENTS
                       {
                        Columns
@@ -879,728 +893,33 @@
      }
      INFOOBJECT
      {
-      KEY [108486.1.1170974339]
-      SINGLEINSTANCE false
-      ID 'Pegging'
-      PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
-      CREATETYPE FormPegging
-      CONTENTS
-      {
-       State := normal
-       (354,421,990,664)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[0]Selection[NONE]
-      }
-      INFOOBJECTS
-      {
-       INFOOBJECT
-       {
-        KEY [108486.1.1171911809]
-        OBJECTTYPE SplitterWnd
-        INFOOBJECTS
-        {
-         INFOOBJECT
-         {
-          KEY [108486.1.1171911810]
-          OBJECTTYPE SplitterPane
-          CONTENTS
-          {
-           Size 50.132802124834
-           VISIBLE true
-          }
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [108486.1.1171921411]
-            OBJECTTYPE SplitterWnd
-            INFOOBJECTS
-            {
-             INFOOBJECT
-             {
-              KEY [108486.1.1171921412]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 52.6515151515151
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [108486.1.1171921414]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [108486.1.1171924299]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [11766.0.1025088210]
-                     {
-                       [11766.1.490215920]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [108486.1.2111697545]
-                       {
-                         Width := 19
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'DemandType [11660.0.340434965]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [108486.2.15728337]
-                       {
-                         Header := 'HasValidPeggedQuantity'
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasValidPeggedQuantity [108486.2.15494714]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [127710.1.1139010297]
-                       {
-                         Header := 'Stocking point'
-                         Width := 137
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|AsPlanningProductInStockingPoint [134266.1.8545642]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122000]
-                       {
-                         Header := 'Product'
-                         Width := 184
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|ProductInStockingPoint_MP [134266.1.5798354]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [108486.1.2112140291]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetPeriodStart() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [11766.1.490215920]
-                       {
-                         Width := 80
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Quantity [101320.0.110374989]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122001]
-                       {
-                         Header := 'Fulfilled'
-                         Width := 82
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [110880.2.1142677800]
-                       {
-                         Header := 'Available'
-                         Width := 79
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetChartColumn] [108486.1.2112734746]
-                       {
-                         Header := 'Fulfillment'
-                         Width := 104
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           Type := 'Stacked Bar'
-                           Relative := true
-                           Points
-                           {
-                             PointDefinition
-                             {
-                               Text := 'minvalue( object.GetPeggedQuantity(), object.FulfilledQuantity() )'
-                               Color := 'Green'
-                               NegativeColor := 'Red'
-                               Description := 'Fulfilled pegged quantity'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'maxvalue( object.FulfilledQuantity() - object.GetPeggedQuantity(), 0 )'
-                               Color := '$FF9900'
-                               NegativeColor := 'Red'
-                               Description := 'Unpegged quantity'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'maxvalue( object.GetPeggedQuantity() - object.FulfilledQuantity(), 0 )'
-                               Color := 'Red'
-                               NegativeColor := 'Red'
-                               Description := 'Overpegged quantity'
-                             }
-                           }
-                         }
-                       }
-                     }
-                   }
-                   ColumnSort [108486.1.2112140291] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-             INFOOBJECT
-             {
-              KEY [108486.1.1171921413]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 47.3484848484849
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [113694.0.1490022148]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [113694.0.1490022154]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [108486.1.1171928381]
-                     {
-                       [108486.1.1171960868]
-                       [108486.1.1320715923]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [135072.0.40676723]
-                       {
-                         Width := 22
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Supply_MP [134266.1.11843917]|SupplyType [108486.1.1185051348]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [110880.9.1181376772]
-                       {
-                         Header := 'HasUserQuantity'
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [113694.0.1490534244]
-                       {
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasSupply [108486.2.16148330]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [113694.0.1490809329]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.Supply_MP().GetPeriodStart() )'
-                           Alignment := 'Default'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [113694.0.1490521540]
-                       {
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
-                         }
-                         Specific
-                         {
-                           DataPath := 'Quantity [134266.1.8545959]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [112884.0.2032524903]
-                       {
-                         Header := 'Cost'
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Expression := 'sum' 'object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()'
-                         }
-                         Specific
-                         {
-                           Text := 'VALUE( object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity() )'
-                           Alignment := 'Default'
-                         }
-                       }
-                     }
-                   }
-                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[112610.0.1005221707]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1005221707]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
-                   ColumnSort [113694.0.1490809329] true false
-                   ColumnSort [113694.0.1490521540] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-            }
-           }
-          }
-         }
-         INFOOBJECT
-         {
-          KEY [108486.1.1171911811]
-          OBJECTTYPE SplitterPane
-          CONTENTS
-          {
-           Size 49.867197875166
-           VISIBLE true
-          }
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [108486.1.1175693802]
-            OBJECTTYPE SplitterWnd
-            INFOOBJECTS
-            {
-             INFOOBJECT
-             {
-              KEY [108486.1.1175693803]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 52.6315789473684
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [108486.1.1175693804]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [108486.1.1175693807]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [108486.1.1175456932]
-                     {
-                       [108486.1.1175896212]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [108486.1.2113319927]
-                       {
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'SupplyType [108486.1.1185051348]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [108486.2.521730743]
-                       {
-                         Header := 'HasValidPegging'
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasValidPegging [108486.2.479981617]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [108486.2.14534947]
-                       {
-                         Header := 'HasValidPeggedQuantity'
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasValidPeggedQuantity [108486.1.2146810434]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [108486.1.2113344305]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetPeriodStart() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122007]
-                       {
-                         Width := 116
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Quantity [112884.1.1160030032]'
-                         }
-                       }
-                       Column internal[DataSetChartColumn] [108486.1.2113393570]
-                       {
-                         Header := 'Supply'
-                         Width := 72
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           Type := 'Stacked Bar'
-                           Relative := true
-                           Points
-                           {
-                             PointDefinition
-                             {
-                               Text := 'minvalue( object.GetPeggedQuantity(), object.Quantity() )'
-                               Color := '$CCCCCC'
-                               NegativeColor := 'Red'
-                               Description := 'Used quantity for pegging'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'object.GetAvailableQuantityForPegging()'
-                               Color := 'Green'
-                               NegativeColor := 'Red'
-                               Description := 'Available quantity for pegging'
-                             }
-                             PointDefinition
-                             {
-                               Text := 'maxvalue( object.GetPeggedQuantity() - object.Quantity(), 0 )'
-                               Color := 'Red'
-                               NegativeColor := 'Red'
-                               Description := 'Overused quantity'
-                             }
-                           }
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [110880.2.1142925855]
-                       {
-                         Header := 'Available'
-                         Width := 79
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
-                           Alignment := ''
-                         }
-                       }
-                     }
-                   }
-                   ColumnSort [108486.1.2113344305] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-             INFOOBJECT
-             {
-              KEY [108486.1.1175693810]
-              OBJECTTYPE SplitterPane
-              CONTENTS
-              {
-               Size 47.3684210526316
-               VISIBLE true
-              }
-              INFOOBJECTS
-              {
-               INFOOBJECT
-               {
-                KEY [108486.1.1175693811]
-                OBJECTTYPE List
-                CONTENTS
-                {
-                 Quantorrow := false
-                }
-                INFOOBJECTS
-                {
-                 INFOOBJECT
-                 {
-                  KEY [108486.1.1175693814]
-                  OBJECTTYPE GUIDataSetLevel
-                  CONTENTS
-                  {
-                   Columns
-                   {
-                     Definition := [108486.1.1175456935]
-                     {
-                       [108486.1.1175896215]
-                       [108486.1.1320715924]
-                     }
-                     SubTotals := true
-                     Visible
-                     {
-                       Column internal[DataSetImageColumn] [108486.1.2113733284]
-                       {
-                         Header := 'DemandType'
-                         Width := 23
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'Demand_MP [134266.1.16794407]|DemandType [11660.0.340434965]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [110880.9.1181425511]
-                       {
-                         Header := 'HasUserQuantity'
-                         Width := 25
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
-                         }
-                       }
-                       Column internal[DataSetImageColumn] [113694.0.1488690244]
-                       {
-                         Width := 21
-                         SizedByUser := true
-                         Subtotals := false
-                         Specific
-                         {
-                           DataPath := 'ImgHasDemand [113694.0.1488476421]'
-                         }
-                       }
-                       Column internal[DataSetConfigurableColumn] [108486.1.2113843687]
-                       {
-                         Header := 'Period start'
-                         Width := 115
-                         Subtotals := false
-                         Specific
-                         {
-                           Text := 'VALUE( object.Demand_MP().GetPeriodStart() )'
-                           Alignment := ''
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122012]
-                       {
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
-                         }
-                         Specific
-                         {
-                           DataPath := 'Quantity [134266.1.8545959]'
-                         }
-                       }
-                       Column internal[DataSetDataColumn] [108486.1.2110122013]
-                       {
-                         Header := 'Cost'
-                         Width := 100
-                         Subtotals := false
-                         Quantor
-                         {
-                           Simple := 'sum' DataMemberString := 'BaseCost [134266.1.8545935]'
-                         }
-                         Specific
-                         {
-                           DataPath := 'BaseCost [134266.1.8545935]'
-                         }
-                       }
-                     }
-                   }
-                   ColumnSort [108486.1.2113843687] true false
-                  }
-                 }
-                }
-               }
-              }
-             }
-            }
-           }
-          }
-         }
-        }
-       }
-      }
-     }
-     INFOOBJECT
-     {
-      KEY [127710.1.818301225]
-      SINGLEINSTANCE false
-      ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
-      PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
-      CREATETYPE FormProductPlanningMatrix
-      CONTENTS
-      {
-       State := normal
-       (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[0]Selection[FRONT]
-      }
-      INFOOBJECTS
-      {
-       INFOOBJECT
-       {
-        KEY [127710.1.821866707]
-        OBJECTTYPE CheckBox
-        CONTENTS
-        {
-         Checkstate 1
-        }
-       }
-       INFOOBJECT
-       {
-        KEY [127710.1.821866918]
-        OBJECTTYPE StringSelection
-        CONTENTS
-        {
-         BoundValue '[Leaf product]'
-        }
-       }
-       INFOOBJECT
-       {
-        KEY [127710.1.818312567]
-        OBJECTTYPE MatrixEditor
-        CONTENTS
-        {
-         RowHeight 29
-         ColumnWidth 82
-         FirstColumnWidth 433
-         Attributes 'SupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
-        }
-        INFOOBJECTS
-        {
-         INFOOBJECT
-         {
-          KEY [127710.1.819572713]
-          OBJECTTYPE GUIScaleView
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [127710.1.820829335]
-            OBJECTTYPE UserConfigurableInformation
-            CONTENTS
-            {
-             ObjectText 'VALUE(object.Start())'
-            }
-           }
-          }
-         }
-         INFOOBJECT
-         {
-          KEY [127710.1.819572710]
-          OBJECTTYPE GUIScaleView
-          INFOOBJECTS
-          {
-           INFOOBJECT
-           {
-            KEY [127710.1.820300549]
-            OBJECTTYPE UserConfigurableInformation
-            CONTENTS
-            {
-             ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
-            }
-           }
-          }
-         }
-        }
-       }
-      }
-     }
-     INFOOBJECT
-     {
       KEY [107654.0.139602704]
       SINGLEINSTANCE false
       ID '閿�鍞渶姹�'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
+      OBJECTTYPE Form // FormSalesDemands
       CREATETYPE FormSalesDemands
       CONTENTS
       {
        State := normal
        (1344,0,192,928)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[1]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[0]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [124112.0.87054864]
-        OBJECTTYPE SplitterWnd
+        OBJECTTYPE SplitterWnd // SplitterWnd1
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [124112.0.87054865]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPaneSalesDemand
           CONTENTS
           {
            Size 72.2642807983482
@@ -1611,7 +930,7 @@
            INFOOBJECT
            {
             KEY [124112.0.87250426]
-            OBJECTTYPE List
+            OBJECTTYPE List // ListSalesDemand
             CONTENTS
             {
              Quantorrow := false
@@ -1621,7 +940,7 @@
              INFOOBJECT
              {
               KEY [124112.0.87253131]
-              OBJECTTYPE GUIDataSetLevel
+              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemand
               CONTENTS
               {
                Columns
@@ -1745,7 +1064,7 @@
                    }
                  }
                }
-               Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212345820]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@FulfilledQuantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212349003]</ColumnID>\n        <BaseName>FulfilledQuantity</BaseName>\n        <Name>FulfilledQuantity</Name>\n        <Title>FulfilledQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1212345820]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@5" Column="@FulfilledQuantity1">\n          <ColumnID>[112610.0.1212349003]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@6">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+               Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Forecast Q124112_0_61686821">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@StartDate1" ElementType="Forecast Q124112_0_61686821" ValueType="Date">\n        <ColumnID>[414702.1.317510867]</ColumnID>\n        <BaseName>StartDate</BaseName>\n        <Name>StartDate</Name>\n        <Title>StartDate</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>StartDate</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ImgNotLinkedToPeriod1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510868]</ColumnID>\n        <BaseName>ImgNotLinkedToPeriod</BaseName>\n        <Name>ImgNotLinkedToPeriod</Name>\n        <Title>ImgNotLinkedToPeriod</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgNotLinkedToPeriod</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ImgIsPostponed1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510869]</ColumnID>\n        <BaseName>ImgIsPostponed</BaseName>\n        <Name>ImgIsPostponed</Name>\n        <Title>ImgIsPostponed</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgIsPostponed</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Sales_segment1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510870]</ColumnID>\n        <BaseName>Sales_segment</BaseName>\n        <Name>Sales_segment</Name>\n        <Title>Sales segment</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>SalesSegment_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Product1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510871]</ColumnID>\n        <BaseName>Product</BaseName>\n        <Name>Product</Name>\n        <Title>Product</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPoint_MP.Product_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Stocking_point1" ElementType="Forecast Q124112_0_61686821" ValueType="String">\n        <ColumnID>[414702.1.317510872]</ColumnID>\n        <BaseName>Stocking_point</BaseName>\n        <Name>Stocking_point</Name>\n        <Title>Stocking point</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPoint_MP.StockingPoint_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212345820]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Price1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[414702.1.317510873]</ColumnID>\n        <BaseName>Price</BaseName>\n        <Name>Price</Name>\n        <Title>Price</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Price</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@FulfilledQuantity1" ElementType="Forecast Q124112_0_61686821" ValueType="Real">\n        <ColumnID>[112610.0.1212349003]</ColumnID>\n        <BaseName>FulfilledQuantity</BaseName>\n        <Name>FulfilledQuantity</Name>\n        <Title>FulfilledQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[112610.0.1212345820]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@5" Column="@FulfilledQuantity1">\n          <ColumnID>[112610.0.1212349003]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@6">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
                ColumnSort [414702.1.48371364] true false
               }
              }
@@ -1756,7 +1075,7 @@
          INFOOBJECT
          {
           KEY [124112.0.87054866]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPaneSalesDemandInPeriod
           CONTENTS
           {
            Size 27.7357192016518
@@ -1767,13 +1086,13 @@
            INFOOBJECT
            {
             KEY [116826.1.6886965]
-            OBJECTTYPE SplitterWnd
+            OBJECTTYPE SplitterWnd // SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [116826.1.6886966]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -1783,7 +1102,7 @@
                INFOOBJECT
                {
                 KEY [116826.1.6887229]
-                OBJECTTYPE List
+                OBJECTTYPE List // ListAggregatedSalesDemandInPeriod
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1793,7 +1112,7 @@
                  INFOOBJECT
                  {
                   KEY [116826.1.6887235]
-                  OBJECTTYPE GUIDataSetLevel
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemandInPeriod
                   CONTENTS
                   {
                    Columns
@@ -1886,7 +1205,7 @@
              INFOOBJECT
              {
               KEY [116826.1.6886967]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // SplitterPane552
               CONTENTS
               {
                VISIBLE true
@@ -1896,7 +1215,7 @@
                INFOOBJECT
                {
                 KEY [116826.1.6889558]
-                OBJECTTYPE List
+                OBJECTTYPE List // ListDisaggregatedSalesDemandInPeriod
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1906,7 +1225,7 @@
                  INFOOBJECT
                  {
                   KEY [116826.1.6889563]
-                  OBJECTTYPE GUIDataSetLevel
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -2007,30 +1326,742 @@
      }
      INFOOBJECT
      {
+      KEY [108486.1.1170974339]
+      SINGLEINSTANCE false
+      ID 'Pegging'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormPegging
+      CREATETYPE FormPegging
+      CONTENTS
+      {
+       State := normal
+       (354,421,990,664)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[0]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [108486.1.1171911809]
+        OBJECTTYPE SplitterWnd // SplitterWnd1
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [108486.1.1171911810]
+          OBJECTTYPE SplitterPane // SplitterPane
+          CONTENTS
+          {
+           Size 50.132802124834
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [108486.1.1171921411]
+            OBJECTTYPE SplitterWnd // SplitterWndDemand_MP_Pegging
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [108486.1.1171921412]
+              OBJECTTYPE SplitterPane // SplitterPane2
+              CONTENTS
+              {
+               Size 52.6515151515151
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1171921414]
+                OBJECTTYPE List // ListDemand
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1171924299]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelDemand_MP
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [11766.0.1025088210]
+                     {
+                       [11766.1.490215920]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2111697545]
+                       {
+                         Width := 19
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'DemandType [11660.0.340434965]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.15728337]
+                       {
+                         Header := 'HasValidPeggedQuantity'
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPeggedQuantity [108486.2.15494714]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [127710.1.1139010297]
+                       {
+                         Header := 'Stocking point'
+                         Width := 137
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|AsPlanningProductInStockingPoint [134266.1.8545642]|StockingPoint_MP [11660.0.488414369]|Name [101472.1.1554218718]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122000]
+                       {
+                         Header := 'Product'
+                         Width := 184
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductInStockingPointInPeriodPlanning [134266.1.219045427]|ProductInStockingPoint_MP [134266.1.5798354]|Product_MP [11660.0.486228287]|Name [101472.1.1551142288]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2112140291]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [11766.1.490215920]
+                       {
+                         Width := 91
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Quantity [101320.0.110374989]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122001]
+                       {
+                         Header := 'Fulfilled'
+                         Width := 82
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfilledQuantity [11660.0.157649047]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [110880.2.1142677800]
+                       {
+                         Header := 'Available'
+                         Width := 79
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetChartColumn] [108486.1.2112734746]
+                       {
+                         Header := 'Fulfillment'
+                         Width := 104
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           Type := 'Stacked Bar'
+                           Relative := true
+                           Points
+                           {
+                             PointDefinition
+                             {
+                               Text := 'minvalue( object.GetPeggedQuantity(), object.FulfilledQuantity() )'
+                               Color := 'Green'
+                               NegativeColor := 'Red'
+                               Description := 'Fulfilled pegged quantity'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.FulfilledQuantity() - object.GetPeggedQuantity(), 0 )'
+                               Color := '$FF9900'
+                               NegativeColor := 'Red'
+                               Description := 'Unpegged quantity'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.GetPeggedQuantity() - object.FulfilledQuantity(), 0 )'
+                               Color := 'Red'
+                               NegativeColor := 'Red'
+                               Description := 'Overpegged quantity'
+                             }
+                           }
+                         }
+                       }
+                     }
+                   }
+                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Demand_MP Q11660_0_96892572">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Demand_MP Q11660_0_96892572">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@DemandType1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[108486.2.847961104]</ColumnID>\n        <BaseName>DemandType</BaseName>\n        <Name>DemandType</Name>\n        <Title>DemandType</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>DemandType</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@HasValidPeggedQuantity1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[108486.2.847961073]</ColumnID>\n        <BaseName>HasValidPeggedQuantity</BaseName>\n        <Name>HasValidPeggedQuantity</Name>\n        <Title>HasValidPeggedQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgHasValidPeggedQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Stocking_point1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[414702.1.317581380]</ColumnID>\n        <BaseName>Stocking_point</BaseName>\n        <Name>Stocking_point</Name>\n        <Title>Stocking point</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPointInPeriodPlanning.AsPlanningProductInStockingPoint.StockingPoint_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Product1" ElementType="Demand_MP Q11660_0_96892572" ValueType="String">\n        <ColumnID>[414702.1.317581381]</ColumnID>\n        <BaseName>Product</BaseName>\n        <Name>Product</Name>\n        <Title>Product</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProductInStockingPointInPeriodPlanning.ProductInStockingPoint_MP.Product_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Period_start1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Date">\n        <ColumnID>[414702.1.317581382]</ColumnID>\n        <BaseName>Period_start</BaseName>\n        <Name>Period_start</Name>\n        <Title>Period start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@3">\n          <GEBDerivationBase Key="@4" TargetType="Demand_MP Q11660_0_96892572">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@5">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@6">\n                <GEBNodeDerivationExpressionBody Key="@7">\n                  <ExpressionText>object.GetPeriodStart()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@8">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Real">\n        <ColumnID>[414702.1.317581383]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Fulfilled1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Real">\n        <ColumnID>[108486.2.847961228]</ColumnID>\n        <BaseName>Fulfilled</BaseName>\n        <Name>Fulfilled</Name>\n        <Title>Fulfilled</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>FulfilledQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Available1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Real">\n        <ColumnID>[414702.1.317581384]</ColumnID>\n        <BaseName>Available</BaseName>\n        <Name>Available</Name>\n        <Title>Available</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@9">\n          <GEBDerivationBase Key="@10" TargetType="Demand_MP Q11660_0_96892572">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@11">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@12">\n                <GEBNodeDerivationExpressionBody Key="@13">\n                  <ExpressionText>object.GetAvailableQuantityForPegging()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@14">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBProcessColumn Key="@Date1" ElementType="Demand_MP Q11660_0_96892572" ValueType="Date">\n        <ColumnID>[108486.1.1930448455]</ColumnID>\n        <BaseName>Date</BaseName>\n        <Name>Date</Name>\n        <Title>Date</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@15">\n          <GEBDerivationBase Key="@16" TargetType="Demand_MP Q11660_0_96892572">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@17">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@18">\n                <GEBNodeDerivationExpressionBody Key="@19">\n                  <ExpressionText>object.GetDate()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@20">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBFilter Key="@21">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@22" Column="@Fulfilled1">\n          <ColumnID>[108486.2.847961228]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@23" Column="@Product1">\n          <ColumnID>[414702.1.317581381]</ColumnID>\n          <GEBFilterColumnMatch Key="@24">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSFreeValue Key="@25">\n                <StringValue></StringValue>\n                <Value>UString:120 kW Motor</Value>\n              </RHSFreeValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFilterColumn Key="@26" Column="@Period_start1">\n          <ColumnID>[414702.1.317581382]</ColumnID>\n          <GEBFilterColumnMatch Key="@27">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSFreeValue Key="@28">\n                <StringValue></StringValue>\n                <Value>Date:2020-04-01</Value>\n              </RHSFreeValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@29">\n          <ExpressionText></ExpressionText>\n          <Converter>\n            <ZeroConverter Key="@30">\n              <IsStandard>true</IsStandard>\n              <IsISO>false</IsISO>\n              <IsCustom>false</IsCustom>\n              <ConversionType>0</ConversionType>\n            </ZeroConverter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                   ColumnSort [11766.1.490215920] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [108486.1.1171921413]
+              OBJECTTYPE SplitterPane // SplitterPane3
+              CONTENTS
+              {
+               Size 47.3484848484849
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [113694.0.1490022148]
+                OBJECTTYPE List // ListDemandPegging
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [113694.0.1490022154]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1171928381]
+                     {
+                       [108486.1.1171960868]
+                       [108486.1.1320715923]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [135072.0.40676723]
+                       {
+                         Width := 22
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Supply_MP [134266.1.11843917]|SupplyType [108486.1.1185051348]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [110880.9.1181376772]
+                       {
+                         Header := 'HasUserQuantity'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [113694.0.1490534244]
+                       {
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasSupply [108486.2.16148330]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [113694.0.1490809329]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.Supply_MP().GetPeriodStart() )'
+                           Alignment := 'Default'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [113694.0.1490521540]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'Quantity [134266.1.8545959]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [112884.0.2032524903]
+                       {
+                         Header := 'Cost'
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Expression := 'sum' 'object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()'
+                         }
+                         Specific
+                         {
+                           Text := 'VALUE( object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity() )'
+                           Alignment := 'Default'
+                         }
+                       }
+                     }
+                   }
+                   Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n  <GEBFiltering Key="@Default_Filter1" TargetType="Fulfillment Q134266_1_8545931">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Supply_MPSupplyType1" ElementType="Fulfillment Q134266_1_8545931" ValueType="String">\n        <ColumnID>[414702.1.317581385]</ColumnID>\n        <BaseName>Supply_MPSupplyType</BaseName>\n        <Name>Supply_MPSupplyType</Name>\n        <Title>SupplyType</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Supply_MP.SupplyType</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@HasUserQuantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="String">\n        <ColumnID>[414702.1.317581386]</ColumnID>\n        <BaseName>HasUserQuantity</BaseName>\n        <Name>HasUserQuantity</Name>\n        <Title>HasUserQuantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>true</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgHasUserQuantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@ImgHasSupply1" ElementType="Fulfillment Q134266_1_8545931" ValueType="String">\n        <ColumnID>[414702.1.317581387]</ColumnID>\n        <BaseName>ImgHasSupply</BaseName>\n        <Name>ImgHasSupply</Name>\n        <Title>ImgHasSupply</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ImgHasSupply</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Period_start1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Date">\n        <ColumnID>[414702.1.317581388]</ColumnID>\n        <BaseName>Period_start</BaseName>\n        <Name>Period_start</Name>\n        <Title>Period start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@3">\n          <GEBDerivationBase Key="@4" TargetType="Fulfillment Q134266_1_8545931">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@5">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@6">\n                <GEBNodeDerivationExpressionBody Key="@7">\n                  <ExpressionText>object.Supply_MP().GetPeriodStart()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@8">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[112610.0.1005221707]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@Cost1" ElementType="Fulfillment Q134266_1_8545931" ValueType="Real">\n        <ColumnID>[414702.1.317581389]</ColumnID>\n        <BaseName>Cost</BaseName>\n        <Name>Cost</Name>\n        <Title>Cost</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@9">\n          <GEBDerivationBase Key="@10" TargetType="Fulfillment Q134266_1_8545931">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@11">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@12">\n                <GEBNodeDerivationExpressionBody Key="@13">\n                  <ExpressionText>object.Supply_MP().GetBaseCostPerQuantity() * object.Quantity()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@14">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBFilter Key="@15">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@16" Column="@Quantity1">\n          <ColumnID>[112610.0.1005221707]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@17">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                   ColumnSort [113694.0.1490809329] true false
+                   ColumnSort [113694.0.1490521540] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [108486.1.1171911811]
+          OBJECTTYPE SplitterPane // SplitterPane1
+          CONTENTS
+          {
+           Size 49.867197875166
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [108486.1.1175693802]
+            OBJECTTYPE SplitterWnd // SplitterWndSupply_MP_Pegging
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [108486.1.1175693803]
+              OBJECTTYPE SplitterPane // SplitterPane4
+              CONTENTS
+              {
+               Size 52.6315789473684
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1175693804]
+                OBJECTTYPE List // ListSupply
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1175693807]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSupply_MP
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1175456932]
+                     {
+                       [108486.1.1175896212]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2113319927]
+                       {
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyType [108486.1.1185051348]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.521730743]
+                       {
+                         Header := 'HasValidPegging'
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPegging [108486.2.479981617]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [108486.2.14534947]
+                       {
+                         Header := 'HasValidPeggedQuantity'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasValidPeggedQuantity [108486.1.2146810434]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2113344305]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122007]
+                       {
+                         Width := 116
+                         SizedByUser := true
+                         Subtotals := true
+                         Specific
+                         {
+                           DataPath := 'Quantity [112884.1.1160030032]'
+                         }
+                       }
+                       Column internal[DataSetChartColumn] [108486.1.2113393570]
+                       {
+                         Header := 'Supply'
+                         Width := 72
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           Type := 'Stacked Bar'
+                           Relative := true
+                           Points
+                           {
+                             PointDefinition
+                             {
+                               Text := 'minvalue( object.GetPeggedQuantity(), object.Quantity() )'
+                               Color := '$CCCCCC'
+                               NegativeColor := 'Red'
+                               Description := 'Used quantity for pegging'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'object.GetAvailableQuantityForPegging()'
+                               Color := 'Green'
+                               NegativeColor := 'Red'
+                               Description := 'Available quantity for pegging'
+                             }
+                             PointDefinition
+                             {
+                               Text := 'maxvalue( object.GetPeggedQuantity() - object.Quantity(), 0 )'
+                               Color := 'Red'
+                               NegativeColor := 'Red'
+                               Description := 'Overused quantity'
+                             }
+                           }
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [110880.2.1142925855]
+                       {
+                         Header := 'Available'
+                         Width := 79
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.GetAvailableQuantityForPegging() )'
+                           Alignment := ''
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2113344305] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [108486.1.1175693810]
+              OBJECTTYPE SplitterPane // SplitterPane5
+              CONTENTS
+              {
+               Size 47.3684210526316
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [108486.1.1175693811]
+                OBJECTTYPE List // ListSupplyPegging
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [108486.1.1175693814]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [108486.1.1175456935]
+                     {
+                       [108486.1.1175896215]
+                       [108486.1.1320715924]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetImageColumn] [108486.1.2113733284]
+                       {
+                         Header := 'DemandType'
+                         Width := 23
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Demand_MP [134266.1.16794407]|DemandType [11660.0.340434965]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [110880.9.1181425511]
+                       {
+                         Header := 'HasUserQuantity'
+                         Width := 25
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasUserQuantity [108486.1.1707654857]'
+                         }
+                       }
+                       Column internal[DataSetImageColumn] [113694.0.1488690244]
+                       {
+                         Width := 21
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ImgHasDemand [113694.0.1488476421]'
+                         }
+                       }
+                       Column internal[DataSetConfigurableColumn] [108486.1.2113843687]
+                       {
+                         Header := 'Period start'
+                         Width := 115
+                         Subtotals := false
+                         Specific
+                         {
+                           Text := 'VALUE( object.Demand_MP().GetPeriodStart() )'
+                           Alignment := ''
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122012]
+                       {
+                         Width := 150
+                         SizedByUser := true
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'Quantity [134266.1.8545959]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'Quantity [134266.1.8545959]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [108486.1.2110122013]
+                       {
+                         Header := 'Cost'
+                         Width := 100
+                         Subtotals := false
+                         Quantor
+                         {
+                           Simple := 'sum' DataMemberString := 'BaseCost [134266.1.8545935]'
+                         }
+                         Specific
+                         {
+                           DataPath := 'BaseCost [134266.1.8545935]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [108486.1.2113843687] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [127710.1.818301225]
+      SINGLEINSTANCE false
+      ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormProductPlanningMatrix
+      CREATETYPE FormProductPlanningMatrix
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[1]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [127710.1.821866707]
+        OBJECTTYPE CheckBox // CheckBoxFilterByProductLevel
+        CONTENTS
+        {
+         Checkstate 1
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [127710.1.821866918]
+        OBJECTTYPE StringSelection // StringSelectionProductLevel
+        CONTENTS
+        {
+         BoundValue '[Leaf product]'
+        }
+        INFOOBJECTS
+        {
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [127710.1.818312567]
+        OBJECTTYPE MatrixEditor // MatrixEditorProductPlanning
+        CONTENTS
+        {
+         RowHeight 29
+         ColumnWidth 82
+         FirstColumnWidth 433
+         Attributes 'SupplyQuantity;DependentDemandAndSalesDemandQuantity;TargetInventoryLevel;InventoryLevelEnd;StockLevelInDays'
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [127710.1.819572713]
+          OBJECTTYPE GUIScaleView // MatrixEditorColumns
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127710.1.820829335]
+            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPeriod
+            CONTENTS
+            {
+             ObjectText 'VALUE(object.Start())'
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [127710.1.819572710]
+          OBJECTTYPE GUIScaleView // MatrixEditorRows
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [127710.1.820300549]
+            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPISP
+            CONTENTS
+            {
+             ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
       KEY [136682.0.365472357]
       SINGLEINSTANCE false
       ID '鍔犲伐璺緞'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
+      OBJECTTYPE Form // FormRoutings
       CREATETYPE FormRoutings
       CONTENTS
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[1]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[1]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [136682.0.365497231]
-        OBJECTTYPE SplitterWnd
+        OBJECTTYPE SplitterWnd // SplitterWnd1
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [136682.0.365497232]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2040,7 +2071,7 @@
            INFOOBJECT
            {
             KEY [136682.0.365497233]
-            OBJECTTYPE List
+            OBJECTTYPE List // ListRouting
             CONTENTS
             {
              Quantorrow := false
@@ -2050,7 +2081,7 @@
              INFOOBJECT
              {
               KEY [136682.0.365497235]
-              OBJECTTYPE GUIDataSetLevel
+              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelRouting
               CONTENTS
               {
                Columns
@@ -2295,7 +2326,7 @@
          INFOOBJECT
          {
           KEY [136682.0.365497250]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPane1
           CONTENTS
           {
            VISIBLE true
@@ -2305,16 +2336,19 @@
            INFOOBJECT
            {
             KEY [136682.0.365497251]
-            OBJECTTYPE SplitterWnd
+            OBJECTTYPE SplitterWnd // SplitterWnd2
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [136682.0.365497252]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // SplitterPane2
               CONTENTS
               {
                VISIBLE true
+              }
+              INFOOBJECTS
+              {
               }
              }
             }
@@ -2326,7 +2360,7 @@
        INFOOBJECT
        {
         KEY [136682.0.365502343]
-        OBJECTTYPE CheckBox
+        OBJECTTYPE CheckBox // CheckBoxFilterProduct
         CONTENTS
         {
          Checkstate 1
@@ -2340,13 +2374,16 @@
       SINGLEINSTANCE false
       ID '鍔熻兘娴嬭瘯鎸夐挳'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
+      OBJECTTYPE Form // FormTestButtonCollection
       CREATETYPE FormTestButtonCollection
       CONTENTS
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[3]Selection[FOCUS]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[2]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
       }
      }
      INFOOBJECT
@@ -2355,20 +2392,23 @@
       SINGLEINSTANCE false
       ID '鍚庡彴杈撳嚭'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Dialog
+      OBJECTTYPE Dialog // dlgServerMessages
       CREATETYPE dlgServerMessages
       CONTENTS
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5507;]TabIdx[2]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[3]Selection[FRONT]
+      }
+      BASEINFOOBJECTS
+      {
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [514.0.2141287]
-        OBJECTTYPE List
+        OBJECTTYPE List // List1
         CONTENTS
         {
          Quantorrow := false
@@ -2378,7 +2418,7 @@
          INFOOBJECT
          {
           KEY [536.0.860799]
-          OBJECTTYPE GUIDataSetLevel
+          OBJECTTYPE GUIDataSetLevel // dslServerMessages
           CONTENTS
           {
            Columns
@@ -2416,26 +2456,29 @@
       SINGLEINSTANCE false
       ID 'Analysis GlobalOTDTable'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form
+      OBJECTTYPE Form // frmStandardAnalysisGlobalOTDTable
       CREATETYPE frmStandardAnalysisGlobalOTDTable
       CONTENTS
       {
        State := normal
        (0,0,0,0)
-       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4493;]TabIdx[2]Selection[NONE]
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[2]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
       }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [530.0.3531801]
-        OBJECTTYPE SplitterWnd
+        OBJECTTYPE SplitterWnd // swTopMost
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [530.0.3531802]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPane1
           CONTENTS
           {
            VISIBLE true
@@ -2445,13 +2488,13 @@
            INFOOBJECT
            {
             KEY [530.0.3531806]
-            OBJECTTYPE SplitterWnd
+            OBJECTTYPE SplitterWnd // swTop
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [530.0.3531807]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // spTopLeft
               CONTENTS
               {
                VISIBLE true
@@ -2461,14 +2504,14 @@
                INFOOBJECT
                {
                 KEY [530.0.3532065]
-                OBJECTTYPE GUIAnalysis
+                OBJECTTYPE GUIAnalysis // Analysis
                 CONTENTS
                 {
                  START(0,0,0,0,false)
                  ANALYSIS(0,0,0,0,false,'Analysis1')
                  {
                    SOURCE 'Types' '[414702.0.340560328]' 0
-                 
+                   
                    NAME 'Analysis1'
                  }
                  COLUMNSETTINGS
@@ -2658,7 +2701,7 @@
                INFOOBJECT
                {
                 KEY [530.1.25480335]
-                OBJECTTYPE List
+                OBJECTTYPE List // ListGUIAnalysisData
                 CONTENTS
                 {
                  Quantorrow := false
@@ -2668,7 +2711,7 @@
                  INFOOBJECT
                  {
                   KEY [530.1.25480340]
-                  OBJECTTYPE GUIDataSetLevel
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
                   CONTENTS
                   {
                    Columns
@@ -2684,7 +2727,7 @@
                        Column internal[DataSetDataColumn] [530.1.25480393]
                        {
                          Header := 'Name'
-                         Width := 100
+                         Width := 68
                          Subtotals := false
                          Specific
                          {
@@ -2694,7 +2737,7 @@
                        Column internal[DataSetDataColumn] [530.1.25480394]
                        {
                          Header := 'Description'
-                         Width := 100
+                         Width := 105
                          Subtotals := false
                          Specific
                          {
@@ -2713,7 +2756,7 @@
              INFOOBJECT
              {
               KEY [530.0.3531808]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // spTopRight
               CONTENTS
               {
                VISIBLE true
@@ -2723,10 +2766,21 @@
                INFOOBJECT
                {
                 KEY [530.0.3532013]
-                OBJECTTYPE GUIAnalysisGrid
+                OBJECTTYPE GUIAnalysisGrid // AnalysisGrid
                 CONTENTS
                 {
                  NEWFORMAT
+                 COLUMN 91 50
+                 COLUMN 92 50
+                 COLUMN 93 50
+                 COLUMN 94 50
+                 COLUMN 95 50
+                 COLUMN 96 50
+                 COLUMN 97 50
+                 COLUMN 98 50
+                 COLUMN 99 50
+                 COLUMN 100 50
+                 COLUMN 101 50
                  COLUMN 102 50
                  COLUMN 103 50
                 }
@@ -2740,7 +2794,7 @@
          INFOOBJECT
          {
           KEY [530.0.3531803]
-          OBJECTTYPE SplitterPane
+          OBJECTTYPE SplitterPane // SplitterPane2
           CONTENTS
           {
            VISIBLE true
@@ -2750,13 +2804,13 @@
            INFOOBJECT
            {
             KEY [530.0.3531811]
-            OBJECTTYPE SplitterWnd
+            OBJECTTYPE SplitterWnd // swBottom
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [530.0.3531812]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // spBottomLeft
               CONTENTS
               {
                Size 44.6569920844327
@@ -2767,13 +2821,13 @@
                INFOOBJECT
                {
                 KEY [530.0.3532136]
-                OBJECTTYPE SplitterWnd
+                OBJECTTYPE SplitterWnd // SplitterWnd4
                 INFOOBJECTS
                 {
                  INFOOBJECT
                  {
                   KEY [530.0.3532137]
-                  OBJECTTYPE SplitterPane
+                  OBJECTTYPE SplitterPane // SplitterPane7
                   CONTENTS
                   {
                    VISIBLE true
@@ -2783,13 +2837,13 @@
                    INFOOBJECT
                    {
                     KEY [530.0.3532138]
-                    OBJECTTYPE SplitterWnd
+                    OBJECTTYPE SplitterWnd // SplitterWnd5
                     INFOOBJECTS
                     {
                      INFOOBJECT
                      {
                       KEY [530.0.3532139]
-                      OBJECTTYPE SplitterPane
+                      OBJECTTYPE SplitterPane // SplitterPane9
                       CONTENTS
                       {
                        VISIBLE true
@@ -2799,7 +2853,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532140]
-                        OBJECTTYPE List
+                        OBJECTTYPE List // lstAttributes
                         CONTENTS
                         {
                          Quantorrow := false
@@ -2809,7 +2863,7 @@
                          INFOOBJECT
                          {
                           KEY [530.0.3532156]
-                          OBJECTTYPE GUIDataSetLevel
+                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
                           CONTENTS
                           {
                            Columns
@@ -2865,7 +2919,7 @@
                      INFOOBJECT
                      {
                       KEY [530.0.3532169]
-                      OBJECTTYPE SplitterPane
+                      OBJECTTYPE SplitterPane // SplitterPane10
                       CONTENTS
                       {
                        VISIBLE true
@@ -2875,7 +2929,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532170]
-                        OBJECTTYPE List
+                        OBJECTTYPE List // List3
                         CONTENTS
                         {
                          Quantorrow := false
@@ -2885,7 +2939,7 @@
                          INFOOBJECT
                          {
                           KEY [530.0.3532175]
-                          OBJECTTYPE GUIDataSetLevel
+                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel3
                           CONTENTS
                           {
                            Columns
@@ -2902,7 +2956,7 @@
                                Column internal[DataSetDataColumn] [514.0.499730]
                                {
                                  Header := 'Name'
-                                 Width := 100
+                                 Width := 68
                                  Subtotals := false
                                  Specific
                                  {
@@ -2912,7 +2966,7 @@
                                Column internal[DataSetDataColumn] [530.1.32701549]
                                {
                                  Header := 'Description'
-                                 Width := 100
+                                 Width := 105
                                  Subtotals := false
                                  Specific
                                  {
@@ -2922,7 +2976,7 @@
                                Column internal[DataSetDataColumn] [678.0.64301138]
                                {
                                  Header := 'astype(UITypeDataMember).DataType.FullName'
-                                 Width := 100
+                                 Width := 404
                                  Subtotals := false
                                  Specific
                                  {
@@ -2945,7 +2999,7 @@
                  INFOOBJECT
                  {
                   KEY [530.0.3532181]
-                  OBJECTTYPE SplitterPane
+                  OBJECTTYPE SplitterPane // SplitterPane8
                   CONTENTS
                   {
                    VISIBLE true
@@ -2955,13 +3009,13 @@
                    INFOOBJECT
                    {
                     KEY [530.1.8006303]
-                    OBJECTTYPE SplitterWnd
+                    OBJECTTYPE SplitterWnd // SplitterWnd1
                     INFOOBJECTS
                     {
                      INFOOBJECT
                      {
                       KEY [530.1.8006304]
-                      OBJECTTYPE SplitterPane
+                      OBJECTTYPE SplitterPane // SplitterPane3
                       CONTENTS
                       {
                        VISIBLE true
@@ -2970,7 +3024,7 @@
                      INFOOBJECT
                      {
                       KEY [530.1.8006305]
-                      OBJECTTYPE SplitterPane
+                      OBJECTTYPE SplitterPane // SplitterPane4
                       CONTENTS
                       {
                        VISIBLE true
@@ -2980,7 +3034,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532182]
-                        OBJECTTYPE GUIAnalysisBarChart
+                        OBJECTTYPE GUIAnalysisBarChart // AnalysisBarChart
                         CONTENTS
                         {
                          LeftSize 207
@@ -2999,7 +3053,7 @@
              INFOOBJECT
              {
               KEY [530.0.3531813]
-              OBJECTTYPE SplitterPane
+              OBJECTTYPE SplitterPane // spBottomRight
               CONTENTS
               {
                Size 55.3430079155673
@@ -3010,7 +3064,7 @@
                INFOOBJECT
                {
                 KEY [530.0.3531950]
-                OBJECTTYPE List
+                OBJECTTYPE List // List1
                 CONTENTS
                 {
                  Quantorrow := false
@@ -3020,7 +3074,7 @@
                  INFOOBJECT
                  {
                   KEY [530.0.3531958]
-                  OBJECTTYPE GUIDataSetLevel
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
                   CONTENTS
                   {
                    Columns
@@ -3210,6 +3264,1891 @@
        }
       }
      }
+     INFOOBJECT
+     {
+      KEY [414702.1.299084054]
+      SINGLEINSTANCE false
+      ID 'PeggingResult'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormPeggingResult
+      CREATETYPE FormPeggingResult
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[4]Selection[FOCUS]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [414702.1.299084152]
+        OBJECTTYPE List // ListPeggingProductInSalesDemandBase
+        CONTENTS
+        {
+         Quantorrow := false
+        }
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [414702.1.299084219]
+          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel641
+          CONTENTS
+          {
+           Columns
+           {
+             SubTotals := true
+             Visible
+             {
+               Column internal[DataSetDataColumn] [414702.1.299300693]
+               {
+                 Width := 197
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'SalesDemandBaseID [414702.1.294144483]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [414702.1.299300692]
+               {
+                 Width := 83
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'Quantity [414702.1.294748143]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [414702.1.299300694]
+               {
+                 Width := 163
+                 SizedByUser := true
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'StartDate [414702.1.294179413]'
+                 }
+               }
+               Column internal[DataSetDataColumn] [414702.1.299300695]
+               {
+                 Width := 100
+                 Subtotals := false
+                 Specific
+                 {
+                   DataPath := 'StockingPointID [414702.1.294179269]'
+                 }
+               }
+             }
+           }
+           Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="PeggingProductInSalesDemandBase Q414702_1_290710053">\n  <GEBFiltering Key="@Default_Filter1" TargetType="PeggingProductInSalesDemandBase Q414702_1_290710053">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@SalesDemandBaseID1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="String">\n        <ColumnID>[414702.1.317561783]</ColumnID>\n        <BaseName>SalesDemandBaseID</BaseName>\n        <Name>SalesDemandBaseID</Name>\n        <Title>SalesDemandBaseID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>SalesDemandBaseID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Quantity1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="Real">\n        <ColumnID>[414702.1.300710952]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@StartDate1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="Date">\n        <ColumnID>[414702.1.317561784]</ColumnID>\n        <BaseName>StartDate</BaseName>\n        <Name>StartDate</Name>\n        <Title>StartDate</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>StartDate</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@StockingPointID1" ElementType="PeggingProductInSalesDemandBase Q414702_1_290710053" ValueType="String">\n        <ColumnID>[414702.1.317561785]</ColumnID>\n        <BaseName>StockingPointID</BaseName>\n        <Name>StockingPointID</Name>\n        <Title>StockingPointID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>StockingPointID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Quantity1">\n          <ColumnID>[414702.1.300710952]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@5">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+           ColumnSort [414702.1.299300693] true false
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [414702.1.273394023]
+      SINGLEINSTANCE false
+      ID 'Analysis GlobalOTDSOP'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // frmStandardAnalysis633
+      CREATETYPE frmStandardAnalysis633
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[4]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [530.0.3531801]
+        OBJECTTYPE SplitterWnd // swTopMost
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [530.0.3531802]
+          OBJECTTYPE SplitterPane // SplitterPane1
+          CONTENTS
+          {
+           Size 0
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [530.0.3531806]
+            OBJECTTYPE SplitterWnd // swTop
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [530.0.3531807]
+              OBJECTTYPE SplitterPane // spTopLeft
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532065]
+                OBJECTTYPE GUIAnalysis // Analysis
+                CONTENTS
+                {
+                 START(0,0,0,0,false)
+                 ANALYSIS(0,0,0,0,false,'Analysis1')
+                 {
+                   SOURCE 'Types' '[414702.1.290710093]' 0
+                   
+                   GROUP 'NumberOfPlies'
+                   NAME 'Analysis1'
+                 }
+                 ANALYSIS(0,0,0,0,false,'Analysis2')
+                 {
+                   SOURCE 'Analysis1' '0' 1
+                   N[0]
+                   TRAVERSE 'AllChild'
+                   NAME 'Analysis2'
+                 }
+                 COLUMNSETTINGS
+                 {
+                   CapacityAndSaleBudgeCompareItemRow
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.272348160]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RowNo [414384.0.829650683]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.272348159]
+                         {
+                           Width := 78
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'PlaceOfProductionOfArray [414384.0.864360343]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.272348158]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'BusinessType [414384.0.819696514]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.272348160] true false
+                   }
+                   CapacityAndSaleBudgeCompareItemRowProduct
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.272348161]
+                         {
+                           Width := 272
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ProductCode [414384.0.819696603]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.272348161] true false
+                   }
+                   CapacityAndSaleBudgeChartElement
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.276292160]
+                         {
+                           Width := 368
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'BusinessTypeOrPlaceOfProductionOfArray [414384.0.852466561]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.276292162]
+                         {
+                           Width := 312
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'TimeStringAndScenarioName [414384.0.852466528]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.276292161]
+                         {
+                           Width := 210
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Quantity [414384.0.852466538]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.276292160] true false
+                   }
+                   CapacityAndSaleBudgeCompareItemColumn
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.286540437]
+                         {
+                           Width := 287
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ColumnName [414384.0.816630974]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.286540438]
+                         {
+                           Width := 126
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ColumnNo [414384.0.829650696]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.286540439]
+                         {
+                           Width := 191
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'TotalIdentification [414702.1.286051924]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.286540438] true false
+                   }
+                   PeggingResult
+                   {
+                     Columns
+                     {
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [414702.1.301867879]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'FulfillmentQuantity [414702.1.294201082]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867880]
+                         {
+                           Width := 150
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'NumberOfPlies [414702.1.294145594]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867881]
+                         {
+                           Width := 157
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'ProductID [414702.1.294201095]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867882]
+                         {
+                           Width := 110
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'StartDate [414702.1.294201062]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867883]
+                         {
+                           Width := 188
+                           SizedByUser := true
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'StockingPointID [414702.1.294201105]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867884]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'SupplyQuantity [414702.1.294201072]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [414702.1.301867885]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'SupplyType [414702.1.294201052]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [414702.1.301867885] false false
+                   }
+                 }
+                 CURRENT 'Analysis2'
+                 HOME 'Types'
+                 FIXEDANALYSIS
+                 {
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [530.1.25480335]
+                OBJECTTYPE List // ListGUIAnalysisData
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.1.25480340]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     Definition := [530.1.25480345]
+                     {
+                       [530.1.25480393]
+                       [530.1.25480394]
+                     }
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetDataColumn] [530.1.25480393]
+                       {
+                         Header := 'Name'
+                         Width := 68
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Name [1.2.2366]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [530.1.25480394]
+                       {
+                         Header := 'Description'
+                         Width := 105
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'Description [1.2.1211]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [530.1.25480393] true false
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [530.0.3531808]
+              OBJECTTYPE SplitterPane // spTopRight
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532013]
+                OBJECTTYPE GUIAnalysisGrid // AnalysisGrid
+                CONTENTS
+                {
+                 NEWFORMAT
+                 COLUMN 95 50
+                 COLUMN 96 50
+                 COLUMN 97 50
+                 COLUMN 98 50
+                 COLUMN 99 50
+                 COLUMN 100 50
+                 COLUMN 101 50
+                 COLUMN 102 50
+                 COLUMN 103 50
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+         INFOOBJECT
+         {
+          KEY [530.0.3531803]
+          OBJECTTYPE SplitterPane // SplitterPane2
+          CONTENTS
+          {
+           Size 100
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [530.0.3531811]
+            OBJECTTYPE SplitterWnd // swBottom
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [530.0.3531812]
+              OBJECTTYPE SplitterPane // spBottomLeft
+              CONTENTS
+              {
+               Size 44.5645263827082
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3532136]
+                OBJECTTYPE SplitterWnd // SplitterWnd4
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3532137]
+                  OBJECTTYPE SplitterPane // SplitterPane7
+                  CONTENTS
+                  {
+                   Size 34.7701149425287
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [530.0.3532138]
+                    OBJECTTYPE SplitterWnd // SplitterWnd5
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [530.0.3532139]
+                      OBJECTTYPE SplitterPane // SplitterPane9
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                      INFOOBJECTS
+                      {
+                       INFOOBJECT
+                       {
+                        KEY [530.0.3532140]
+                        OBJECTTYPE List // lstAttributes
+                        CONTENTS
+                        {
+                         Quantorrow := false
+                        }
+                        INFOOBJECTS
+                        {
+                         INFOOBJECT
+                         {
+                          KEY [530.0.3532156]
+                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                          CONTENTS
+                          {
+                           Columns
+                           {
+                             Definition := [514.0.499727]
+                             {
+                               [514.0.499730]
+                               [530.1.32701549]
+                               [678.0.64301138]
+                             }
+                             SubTotals := true
+                             Visible
+                             {
+                               Column internal[DataSetDataColumn] [514.0.499730]
+                               {
+                                 Header := 'Name'
+                                 Width := 68
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Name [1.2.34]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [530.1.32701549]
+                               {
+                                 Header := 'Description'
+                                 Width := 105
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Description [1.2.2564]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [678.0.64301138]
+                               {
+                                 Header := 'astype(UITypeDataMember).DataType.FullName'
+                                 Width := 404
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'downcast(internal[UITypeDataMember]) [1.1.1409]|DataType [1.3.1182]|FullName [1.2.8615]'
+                                 }
+                               }
+                             }
+                           }
+                           ColumnSort [514.0.499730] true false
+                          }
+                         }
+                        }
+                       }
+                      }
+                     }
+                     INFOOBJECT
+                     {
+                      KEY [530.0.3532169]
+                      OBJECTTYPE SplitterPane // SplitterPane10
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                      INFOOBJECTS
+                      {
+                       INFOOBJECT
+                       {
+                        KEY [530.0.3532170]
+                        OBJECTTYPE List // List3
+                        CONTENTS
+                        {
+                         Quantorrow := false
+                        }
+                        INFOOBJECTS
+                        {
+                         INFOOBJECT
+                         {
+                          KEY [530.0.3532175]
+                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel3
+                          CONTENTS
+                          {
+                           Columns
+                           {
+                             Definition := [514.0.499727]
+                             {
+                               [514.0.499730]
+                               [530.1.32701549]
+                               [678.0.64301138]
+                             }
+                             SubTotals := true
+                             Visible
+                             {
+                               Column internal[DataSetDataColumn] [514.0.499730]
+                               {
+                                 Header := 'Name'
+                                 Width := 68
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Name [1.2.34]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [530.1.32701549]
+                               {
+                                 Header := 'Description'
+                                 Width := 105
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'Description [1.2.2564]'
+                                 }
+                               }
+                               Column internal[DataSetDataColumn] [678.0.64301138]
+                               {
+                                 Header := 'astype(UITypeDataMember).DataType.FullName'
+                                 Width := 404
+                                 Subtotals := false
+                                 Specific
+                                 {
+                                   DataPath := 'downcast(internal[UITypeDataMember]) [1.1.1409]|DataType [1.3.1182]|FullName [1.2.8615]'
+                                 }
+                               }
+                             }
+                           }
+                           ColumnSort [514.0.499730] true false
+                          }
+                         }
+                        }
+                       }
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3532181]
+                  OBJECTTYPE SplitterPane // SplitterPane8
+                  CONTENTS
+                  {
+                   Size 65.2298850574713
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [530.1.8006303]
+                    OBJECTTYPE SplitterWnd // SplitterWnd1
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [530.1.8006304]
+                      OBJECTTYPE SplitterPane // SplitterPane3
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                     }
+                     INFOOBJECT
+                     {
+                      KEY [530.1.8006305]
+                      OBJECTTYPE SplitterPane // SplitterPane4
+                      CONTENTS
+                      {
+                       VISIBLE true
+                      }
+                      INFOOBJECTS
+                      {
+                       INFOOBJECT
+                       {
+                        KEY [530.0.3532182]
+                        OBJECTTYPE GUIAnalysisBarChart // AnalysisBarChart
+                        CONTENTS
+                        {
+                         LeftSize 257
+                        }
+                       }
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [530.0.3531813]
+              OBJECTTYPE SplitterPane // spBottomRight
+              CONTENTS
+              {
+               Size 55.4354736172919
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [530.0.3531950]
+                OBJECTTYPE List // List1
+                CONTENTS
+                {
+                 Quantorrow := false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [530.0.3531958]
+                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                  CONTENTS
+                  {
+                   Columns
+                   {
+                     SubTotals := true
+                     Visible
+                     {
+                       Column internal[DataSetDataColumn] [414702.1.301867879]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'FulfillmentQuantity [414702.1.294201082]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867880]
+                       {
+                         Width := 150
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'NumberOfPlies [414702.1.294145594]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867881]
+                       {
+                         Width := 157
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'ProductID [414702.1.294201095]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867882]
+                       {
+                         Width := 110
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StartDate [414702.1.294201062]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867883]
+                       {
+                         Width := 188
+                         SizedByUser := true
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'StockingPointID [414702.1.294201105]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867884]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyQuantity [414702.1.294201072]'
+                         }
+                       }
+                       Column internal[DataSetDataColumn] [414702.1.301867885]
+                       {
+                         Width := 100
+                         Subtotals := false
+                         Specific
+                         {
+                           DataPath := 'SupplyType [414702.1.294201052]'
+                         }
+                       }
+                     }
+                   }
+                   ColumnSort [414702.1.301867885] false false
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [107654.0.148565389]
+      SINGLEINSTANCE false
+      ID '鏃舵浠诲姟'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Form // FormPeriodTasks
+      CREATETYPE FormPeriodTasks
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[3]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+       BASEINFOOBJECT
+       {
+        KEY [107654.0.148565389]
+        OBJECTTYPE GUIContainerComponent // FormPeriodTasks
+        COMPONENTDATA
+        {
+         [107654.0.148565389]:[110880.4.1427962314]:[110880.4.1427962316]:[110880.4.1427968321]:[110880.4.1427968322]:[110880.4.1427969404]:[110880.4.1427969405]:[110880.4.1427973280]:[11766.0.1791753774]:[514.0.129466]:[104128.0.40995014]:[127710.1.1037824422] STR 'false'
+         [107654.0.148565389]:[110880.4.1427962314]:[110880.4.1427962316]:[110880.4.1427968321]:[110880.4.1427968322]:[110880.4.1427969404]:[110880.4.1427969405]:[110880.4.1427973280]:[11766.0.1791753774]:[514.0.129466]:[104128.0.40995014]:[127710.1.1037824123] STR 'false'
+        }
+       }
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [110880.4.1427962314]
+        OBJECTTYPE SplitterWnd // SplitterWnd1
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [110880.4.1427962316]
+          OBJECTTYPE SplitterPane // SplitterPane1
+          CONTENTS
+          {
+           VISIBLE true
+          }
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [110880.4.1427968321]
+            OBJECTTYPE SplitterWnd // SplitterWnd2
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [110880.4.1427968322]
+              OBJECTTYPE SplitterPane // SplitterPane2
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [110880.4.1427969404]
+                OBJECTTYPE SplitterWnd // SplitterWnd3
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969405]
+                  OBJECTTYPE SplitterPane // SplitterPane4
+                  CONTENTS
+                  {
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [110880.4.1427973280]
+                    OBJECTTYPE List // ListPeriodTask_MP
+                    CONTENTS
+                    {
+                     Quantorrow := false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [11766.0.1791753776]
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriodTask_MP
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [11766.0.1176668425]
+                         {
+                           [112884.0.420632428]
+                           [11766.1.490571536]
+                           [11766.1.490571537]
+                           [11766.0.1176668437]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [112884.0.420632428]
+                           {
+                             Width := 195
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Process_MP [110880.2.1152117000]|Name [110702.0.510655046]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [11766.1.490571536]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'UnitPeriod [11766.0.881988410]|Start [101472.1.1929377045]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [11766.1.490571537]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'UnitPeriod [11766.0.881988410]|End [101472.1.1929377307]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [11766.0.1176668437]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'QuantityToProcess [11766.0.1140253578]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.53972253]
+                           {
+                             Width := 175
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Key [1.2.81]'
+                               AttributePathIdentifier := "StartType('external[PeriodTask_MP]')
+                               Attribute([1.2.81])"
+                             }
+                           }
+                         }
+                       }
+                       Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="PeriodTask_MP Q11766_0_874292114">\n  <GEBFiltering Key="@Default_Filter1" TargetType="PeriodTask_MP Q11766_0_874292114">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Process_MPName1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="String">\n        <ColumnID>[414702.1.317561778]</ColumnID>\n        <BaseName>Process_MPName</BaseName>\n        <Name>Process_MPName</Name>\n        <Title>Name</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Process_MP.Name</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@UnitPeriodStart1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="DateTime">\n        <ColumnID>[414702.1.317561779]</ColumnID>\n        <BaseName>UnitPeriodStart</BaseName>\n        <Name>UnitPeriodStart</Name>\n        <Title>Start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>UnitPeriod.Start</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@UnitPeriodEnd1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="DateTime">\n        <ColumnID>[414702.1.317561780]</ColumnID>\n        <BaseName>UnitPeriodEnd</BaseName>\n        <Name>UnitPeriodEnd</Name>\n        <Title>End</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>UnitPeriod.End</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@QuantityToProcess1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="Real">\n        <ColumnID>[414702.1.317561781]</ColumnID>\n        <BaseName>QuantityToProcess</BaseName>\n        <Name>QuantityToProcess</Name>\n        <Title>QuantityToProcess</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>QuantityToProcess</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Key1" ElementType="PeriodTask_MP Q11766_0_874292114" ValueType="Key">\n        <ColumnID>[414702.1.317561782]</ColumnID>\n        <BaseName>Key</BaseName>\n        <Name>Key</Name>\n        <Title>Key</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Key</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBFilter Key="@3">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@4" Column="@Key1">\n          <ColumnID>[414702.1.317561782]</ColumnID>\n          <GEBFilterColumnMatch Key="@5">\n            <Operation>=</Operation>\n            <Enabled>true</Enabled>\n            <RHSValue>\n              <RHSFreeValue Key="@6">\n                <StringValue></StringValue>\n                <Value>Key:[414702.1.314706304]</Value>\n              </RHSFreeValue>\n            </RHSValue>\n          </GEBFilterColumnMatch>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@7">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                       ColumnSort [112884.0.420632428] true false
+                       ColumnSort [11766.1.490571536] true false
+                       ColumnSort [11766.1.490571537] true false
+                       ColumnSort [11766.0.1176668437] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969406]
+                  OBJECTTYPE SplitterPane // SplitterPane5
+                  CONTENTS
+                  {
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                  }
+                 }
+                }
+               }
+              }
+             }
+             INFOOBJECT
+             {
+              KEY [110880.4.1427968323]
+              OBJECTTYPE SplitterPane // SplitterPane3
+              CONTENTS
+              {
+               VISIBLE true
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [110880.4.1427969947]
+                OBJECTTYPE SplitterWnd // SplitterWnd4
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969948]
+                  OBJECTTYPE SplitterPane // SplitterPane6
+                  CONTENTS
+                  {
+                   Size 31.659249841068
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [110880.4.1427981196]
+                    OBJECTTYPE List // ListInputInputDemand
+                    CONTENTS
+                    {
+                     Quantorrow := false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [11766.0.1791753785]
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [11766.0.1025088210]
+                         {
+                           [11766.1.490215920]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [11766.1.490215920]
+                           {
+                             Width := 145
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Quantity [101320.0.110374989]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.19001156]
+                           {
+                             Width := 259
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'ProcessInput [110880.8.886850132]|downcast(OperationInput) [108486.1.157418918]|ProductID [113694.1.2134238792]'
+                               AttributePathIdentifier := "StartType('external[DependentDemand]')
+                               Node(R[110880.8.886850132], TT[108486.1.157418918], nondistinctive)
+                               Attribute([113694.1.2134238792])"
+                             }
+                           }
+                         }
+                       }
+                       ColumnSort [11766.1.490215920] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [110880.4.1427969949]
+                  OBJECTTYPE SplitterPane // SplitterPane7
+                  CONTENTS
+                  {
+                   Size 68.340750158932
+                   VISIBLE true
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [110880.4.1427985019]
+                    OBJECTTYPE List // ListInputOutputSupply1
+                    CONTENTS
+                    {
+                     Quantorrow := false
+                    }
+                    INFOOBJECTS
+                    {
+                     INFOOBJECT
+                     {
+                      KEY [11766.0.1791753792]
+                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel3
+                      CONTENTS
+                      {
+                       Columns
+                       {
+                         Definition := [11766.0.1025296083]
+                         {
+                           [11766.0.1025296085]
+                         }
+                         SubTotals := true
+                         Visible
+                         {
+                           Column internal[DataSetDataColumn] [11766.0.1025296085]
+                           {
+                             Width := 100
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Quantity [112884.1.1160030032]'
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.19001111]
+                           {
+                             Width := 266
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'ProcessOutput [110880.8.945109647]|downcast(OperationOutput) [101318.0.90160276]|ProductID [113694.1.2134238792]'
+                               AttributePathIdentifier := "StartType('external[NewSupply]')
+                               Node(R[110880.8.945109647], TT[101318.0.90160276], nondistinctive)
+                               Attribute([113694.1.2134238792])"
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.55207096]
+                           {
+                             Width := 173
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'Start [108486.2.80172755]'
+                               AttributePathIdentifier := "StartType('external[NewSupply]')
+                               Attribute([108486.2.80172755])"
+                             }
+                           }
+                           Column internal[DataSetDataColumn] [414702.1.55207125]
+                           {
+                             Width := 194
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               DataPath := 'AsProductionSupply [134266.1.5797947]|ProductInStockingPoint_MP [134266.1.5798354]|StockingPointID [108486.0.343831378]'
+                               AttributePathIdentifier := "StartType('external[NewSupply]')
+                               Node(R[134266.1.5797947], TT[134266.1.852406], distinctive)
+                               Node(R[134266.1.5798354], TT[11660.0.485565014], distinctive)
+                               Attribute([108486.0.343831378])"
+                             }
+                           }
+                           Column internal[DataSetConfigurableColumn] [414702.1.305339206]
+                           {
+                             Header := 'PeriodKey'
+                             Width := 243
+                             SizedByUser := true
+                             Subtotals := false
+                             Specific
+                             {
+                               Text := 'VALUE( object.PeriodTask_MP().Key() )'
+                               Alignment := '榛樿'
+                             }
+                           }
+                         }
+                       }
+                       Filter := '<?xml version="1.0" encoding="UTF-16"?>\n<GEBObjectsFilter xmlns="http://www.quintiq.com/GEB/GEBObjectsFilter" Key="@1" CurrentFilter="@Default_Filter1" TargetType="NewSupply Q11660_0_958335014">\n  <GEBFiltering Key="@Default_Filter1" TargetType="NewSupply Q11660_0_958335014">\n    <CurrentFilter>true</CurrentFilter>\n    <Name>Default Filter</Name>\n    <Active>true</Active>\n    <IsFavorite>false</IsFavorite>\n    <SortIndex>0</SortIndex>\n    <GEBFilteringData Key="@2">\n      <DefaultColumnPrefix></DefaultColumnPrefix>\n      <ColumnPostfix></ColumnPostfix>\n      <GEBSelectColumn Key="@Quantity1" ElementType="NewSupply Q11660_0_958335014" ValueType="Real">\n        <ColumnID>[414702.1.317561786]</ColumnID>\n        <BaseName>Quantity</BaseName>\n        <Name>Quantity</Name>\n        <Title>Quantity</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Quantity</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@OperationOutputProductID1" ElementType="NewSupply Q11660_0_958335014" ValueType="String">\n        <ColumnID>[414702.1.317561787]</ColumnID>\n        <BaseName>OperationOutputProductID</BaseName>\n        <Name>OperationOutputProductID</Name>\n        <Title>ProductID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>ProcessOutput.astype(OperationOutput).ProductID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@Start1" ElementType="NewSupply Q11660_0_958335014" ValueType="DateTime">\n        <ColumnID>[414702.1.317561788]</ColumnID>\n        <BaseName>Start</BaseName>\n        <Name>Start</Name>\n        <Title>Start</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>Start</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBSelectColumn Key="@AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID1" ElementType="NewSupply Q11660_0_958335014" ValueType="String">\n        <ColumnID>[414702.1.317561789]</ColumnID>\n        <BaseName>AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID</BaseName>\n        <Name>AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID</Name>\n        <Title>StockingPointID</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <AttributePathText>AsProductionSupply.ProductInStockingPoint_MP.StockingPointID</AttributePathText>\n        <AttributePathIdentifier>\n        </AttributePathIdentifier>\n      </GEBSelectColumn>\n      <GEBProcessColumn Key="@PeriodKey1" ElementType="NewSupply Q11660_0_958335014" ValueType="Key">\n        <ColumnID>[414702.1.317561790]</ColumnID>\n        <BaseName>PeriodKey</BaseName>\n        <Name>PeriodKey</Name>\n        <Title>PeriodKey</Title>\n        <IsTarget>false</IsTarget>\n        <NameHasBeenSet>false</NameHasBeenSet>\n        <ColumnFinal>Fail</ColumnFinal>\n        <GEBDerivation Key="@3">\n          <GEBDerivationBase Key="@4" TargetType="NewSupply Q11660_0_958335014">\n            <ColumnID>[0.0.0]</ColumnID>\n            <GEBNodeDerivation Key="@5">\n              <Operation>FirstExpression</Operation>\n              <Conditional>false</Conditional>\n              <Multiple>false</Multiple>\n              <AllowWildcards>false</AllowWildcards>\n              <GEBNodeDerivationExpression Key="@6">\n                <GEBNodeDerivationExpressionBody Key="@7">\n                  <ExpressionText>object.PeriodTask_MP().Key()</ExpressionText>\n                  <Converter>\n                    <ZeroConverter Key="@8">\n                      <IsStandard>true</IsStandard>\n                      <IsISO>false</IsISO>\n                      <IsCustom>false</IsCustom>\n                      <ConversionType>0</ConversionType>\n                    </ZeroConverter>\n                  </Converter>\n                </GEBNodeDerivationExpressionBody>\n              </GEBNodeDerivationExpression>\n            </GEBNodeDerivation>\n          </GEBDerivationBase>\n        </GEBDerivation>\n      </GEBProcessColumn>\n      <GEBFilter Key="@9">\n        <FreeFilterEnabled>true</FreeFilterEnabled>\n        <GEBFilterColumn Key="@10" Column="@AsProductionSupplyProductInStockingPointInPeriodProductInStockingPoint_MPStockingPointID1">\n          <ColumnID>[414702.1.317561789]</ColumnID>\n        </GEBFilterColumn>\n        <GEBFreeFilterBody Key="@11">\n          <ExpressionText></ExpressionText>\n          <Converter>\n          </Converter>\n        </GEBFreeFilterBody>\n      </GEBFilter>\n    </GEBFilteringData>\n  </GEBFiltering>\n</GEBObjectsFilter>\n'
+                       ColumnSort [414702.1.19001111] true false
+                       ColumnSort [414702.1.55207096] true false
+                      }
+                     }
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
+     INFOOBJECT
+     {
+      KEY [666.6.1042075]
+      SINGLEINSTANCE false
+      ID '杩囨护'
+      PARENTKEY [514.0.2180]
+      OBJECTTYPE Dialog // tlpFiltering
+      CREATETYPE tlpFiltering
+      CONTENTS
+      {
+       State := normal
+       (0,0,0,0)
+       DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[5]Selection[NONE]
+      }
+      BASEINFOOBJECTS
+      {
+       BASEINFOOBJECT
+       {
+        KEY [666.6.1042075]
+        OBJECTTYPE GUIContainerComponent // tlpFiltering
+        COMPONENTDATA
+        {
+         [666.6.1042075]:[101180.0.423432963]:[101180.0.423434508]:[666.6.33523821]:[101180.0.674802547]:[100664.0.672641496] STR 'true'
+         [666.6.1042075]:[101180.0.423432963]:[101180.0.423439415]:[666.6.33523821]:[101180.0.674802547]:[100664.0.672641496] STR 'true'
+        }
+       }
+      }
+      INFOOBJECTS
+      {
+       INFOOBJECT
+       {
+        KEY [101180.0.423434508]
+        OBJECTTYPE GUIComponent // dpGUIListFiltering
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [100664.0.634694330]
+          OBJECTTYPE SplitterWnd // SplitterWnd
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [100664.0.634694331]
+            OBJECTTYPE SplitterPane // SplitterPaneStoredFilters
+            CONTENTS
+            {
+             VISIBLE true
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.681599437]
+              OBJECTTYPE List // ListStoredFilters
+              CONTENTS
+              {
+               Quantorrow := false
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.681599439]
+                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                CONTENTS
+                {
+                 Columns
+                 {
+                   Definition := [121918.0.881777301]
+                   {
+                     [121918.0.881787967]
+                   }
+                   SubTotals := true
+                   Visible
+                   {
+                     Column internal[DataSetDataColumn] [121918.0.881787967]
+                     {
+                       Width := 100
+                       Subtotals := false
+                       Specific
+                       {
+                         DataPath := 'Name [1.2.5343]'
+                       }
+                     }
+                   }
+                 }
+                 DataMemberSort 'SortIndex [1.2.7432]' true true
+                }
+               }
+              }
+             }
+            }
+           }
+           INFOOBJECT
+           {
+            KEY [100664.0.634694332]
+            OBJECTTYPE SplitterPane // SplitterPane1
+            CONTENTS
+            {
+             VISIBLE true
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.634737763]
+              OBJECTTYPE SplitterWnd // SplitterWndI
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.634737764]
+                OBJECTTYPE SplitterPane // SplitPaneColumnBasedFilters
+                CONTENTS
+                {
+                 Size 99.921052631579
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737766]
+                  OBJECTTYPE Selection // selFilterColumn
+                  CONTENTS
+                  {
+                   BoundValue 'Quantity'
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737768]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.33522193]
+                       {
+                         [666.6.36059183]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [666.6.36059183]
+                         {
+                           Header := 'Name'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [1.2.3778]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [666.6.36059183] true false
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [101180.0.650773001]
+                  OBJECTTYPE Selection // selRelationalValues
+                  CONTENTS
+                  {
+                   BoundValue '='
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [101180.0.650773003]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.37024730]
+                       {
+                         [101180.0.649255714]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.649255714]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Operation [1.2.3779]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3780]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [666.6.40803406]
+                  OBJECTTYPE Selection // SelectionValues
+                  CONTENTS
+                  {
+                   BoundValue '12'
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [666.6.40803422]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647865904]
+                       {
+                         [101180.0.647981465]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[RHSValueDataSetColumn] [101180.0.647981465]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.3305]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3781]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737776]
+                  OBJECTTYPE List // ListGEBUIFilterColumnMatches
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737791]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647784541]
+                       {
+                         [101180.0.647785023]
+                         [101180.0.648130649]
+                         [101180.0.667481201]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.647785023]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'GEBUIFilterColumn [1.3.3296]|Name [1.2.3778]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [101180.0.648130649]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'OperationDisplay [1.2.3770]'
+                           }
+                         }
+                         Column internal[RHSValueDataSetColumn] [101180.0.667481201]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.4449]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [101180.0.647785023] true false
+                     DataMemberSort 'Position [1.2.3820]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [100664.0.634737792]
+                OBJECTTYPE SplitterPane // PaneFreeFilter
+                CONTENTS
+                {
+                 VISIBLE false
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [112950.0.657398972]
+                  OBJECTTYPE CheckBox // chkEnabled
+                  CONTENTS
+                  {
+                   Checkstate 1
+                  }
+                 }
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+       INFOOBJECT
+       {
+        KEY [101180.0.423439415]
+        OBJECTTYPE GUIComponent // dpGEBListFiltering
+        INFOOBJECTS
+        {
+         INFOOBJECT
+         {
+          KEY [100664.0.634694330]
+          OBJECTTYPE SplitterWnd // SplitterWnd
+          INFOOBJECTS
+          {
+           INFOOBJECT
+           {
+            KEY [100664.0.634694331]
+            OBJECTTYPE SplitterPane // SplitterPaneStoredFilters
+            CONTENTS
+            {
+             VISIBLE false
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.681599437]
+              OBJECTTYPE List // ListStoredFilters
+              CONTENTS
+              {
+               Quantorrow := false
+              }
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.681599439]
+                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                CONTENTS
+                {
+                 Columns
+                 {
+                   Definition := [121918.0.881777301]
+                   {
+                     [121918.0.881787967]
+                   }
+                   SubTotals := true
+                   Visible
+                   {
+                     Column internal[DataSetDataColumn] [121918.0.881787967]
+                     {
+                       Width := 100
+                       Subtotals := false
+                       Specific
+                       {
+                         DataPath := 'Name [1.2.5343]'
+                       }
+                     }
+                   }
+                 }
+                 DataMemberSort 'SortIndex [1.2.7432]' true true
+                }
+               }
+              }
+             }
+            }
+           }
+           INFOOBJECT
+           {
+            KEY [100664.0.634694332]
+            OBJECTTYPE SplitterPane // SplitterPane1
+            CONTENTS
+            {
+             Size 99.8686947373494
+             VISIBLE true
+            }
+            INFOOBJECTS
+            {
+             INFOOBJECT
+             {
+              KEY [100664.0.634737763]
+              OBJECTTYPE SplitterWnd // SplitterWndI
+              INFOOBJECTS
+              {
+               INFOOBJECT
+               {
+                KEY [100664.0.634737764]
+                OBJECTTYPE SplitterPane // SplitPaneColumnBasedFilters
+                CONTENTS
+                {
+                 Size 99.921052631579
+                 VISIBLE true
+                }
+                INFOOBJECTS
+                {
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737766]
+                  OBJECTTYPE Selection // selFilterColumn
+                  CONTENTS
+                  {
+                   BoundValue ''
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737768]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.33522193]
+                       {
+                         [666.6.36059183]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [666.6.36059183]
+                         {
+                           Header := 'Name'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Name [1.2.3778]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [666.6.36059183] true false
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [101180.0.650773001]
+                  OBJECTTYPE Selection // selRelationalValues
+                  CONTENTS
+                  {
+                   BoundValue ''
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [101180.0.650773003]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [666.6.37024730]
+                       {
+                         [101180.0.649255714]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.649255714]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'Operation [1.2.3779]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3780]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [666.6.40803406]
+                  OBJECTTYPE Selection // SelectionValues
+                  CONTENTS
+                  {
+                   BoundValue ''
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [666.6.40803422]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647865904]
+                       {
+                         [101180.0.647981465]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[RHSValueDataSetColumn] [101180.0.647981465]
+                         {
+                           Header := 'x'
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.3305]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     DataMemberSort 'Position [1.2.3781]' true true
+                    }
+                   }
+                  }
+                 }
+                 INFOOBJECT
+                 {
+                  KEY [100664.0.634737776]
+                  OBJECTTYPE List // ListGEBUIFilterColumnMatches
+                  CONTENTS
+                  {
+                   Quantorrow := false
+                  }
+                  INFOOBJECTS
+                  {
+                   INFOOBJECT
+                   {
+                    KEY [100664.0.634737791]
+                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                    CONTENTS
+                    {
+                     Columns
+                     {
+                       Definition := [101180.0.647784541]
+                       {
+                         [101180.0.647785023]
+                         [101180.0.648130649]
+                         [101180.0.667481201]
+                       }
+                       SubTotals := true
+                       Visible
+                       {
+                         Column internal[DataSetDataColumn] [101180.0.647785023]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'GEBUIFilterColumn [1.3.3296]|Name [1.2.3778]'
+                           }
+                         }
+                         Column internal[DataSetDataColumn] [101180.0.648130649]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'OperationDisplay [1.2.3770]'
+                           }
+                         }
+                         Column internal[RHSValueDataSetColumn] [101180.0.667481201]
+                         {
+                           Width := 100
+                           Subtotals := false
+                           Specific
+                           {
+                             DataPath := 'RHSValue [1.3.4449]|StringValue [1.2.5531]'
+                           }
+                         }
+                       }
+                     }
+                     ColumnSort [101180.0.647785023] true false
+                     DataMemberSort 'Position [1.2.3820]' true true
+                    }
+                   }
+                  }
+                 }
+                }
+               }
+               INFOOBJECT
+               {
+                KEY [100664.0.634737792]
+                OBJECTTYPE SplitterPane // PaneFreeFilter
+                CONTENTS
+                {
+                 VISIBLE false
+                }
+                INFOOBJECTS
+                {
+                }
+               }
+              }
+             }
+            }
+           }
+          }
+         }
+        }
+       }
+      }
+     }
     }
    }
   }

--
Gitblit v1.9.3