From 2713c338a98325cad21ebec2085802a5e49a98ef Mon Sep 17 00:00:00 2001
From: hongji.li <hongji.a.li@capgemini.com>
Date: 星期日, 05 十一月 2023 17:47:41 +0800
Subject: [PATCH] Pegging&年度产销优化

---
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeleteModule.qbl                                                                                      |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase#886.def                            |   16 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleStockingPointID.qbl                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def                                                           |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def                                                       |   16 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/_ROOT_Type_PeggingProductInStockingPoint_MP.qbl                                                             |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick.def                               |   19 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProduc.qbl                                                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModuleCorrespondence.def                                                 |   42 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GeneratePeggingResult.qbl                                                                |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase#1.def                   |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModulePanelCorrespondence#1.def                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/_ROOT_Component_FormModulePanelCorrespondence.def                                      |   44 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_UnitOfMeasurementName.qbl                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Views/模组_面板关系.vw                                                                                                               |  194 +++
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def                                       |    8 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ProductID.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelSalesDemand_411_OnActivate.def                                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def                          |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_Panel655.def                                                                 |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint#1.def                                                       |   12 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelStockingPointID.qbl                                                                                 |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def                                                              |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def                                            |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuRight.def                                                                 |   25 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForProductInStocking_MP.qbl                                                                         |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick.def                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProduct_MP#1.def                                                   |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingAllResult_103_MenuSelectAll_OnClick.def                                        |   17 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductIn.qbl                                                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageRight.def                                                               |   10 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleProductID.qbl                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Views/Pegging分析.vw                                                                                                             |  311 ++++-
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelRight#520.def                                                                       |   16 
 _Main/BL/Relations/Relation_ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorr.qbl                                                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bDeletePanel_OnClick.def                    |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bDeleteModule_OnClick#462.def                                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def                                                  |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelStockingPoint_569_OnActivate.def                                                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModuleCorrespondence.def                                    |   10 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StartDate.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase#1.def                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageBelow.def                                                               |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelSalesDemand#411.def                                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_pButton#407.def                                                                          |   37 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelBelow.def                                                                           |   16 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyQuantity.qbl                                                                          |    7 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeletePanel.qbl                                                                                       |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def |   23 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateData.qbl                                                                                                |   18 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreateModule.qbl                                                                                      |   19 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                          |   63 -
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick#19.def                                      |    3 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StockingPointID.qbl                                                                               |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResultProductInStockingPoint_MP.def                                           |   63 +
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuBelow.def                                                                 |   10 
 _var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw                                                                                   |    2 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoin.qbl                                                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def                       |    6 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ActualFulfillmentQuantity.qbl                                                               |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bAddPanel_OnClick.def                       |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelAbove.def                                                                           |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelLeft#865.def                                                                        |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelPeggingResult570.def                                                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnModulePanelCorrespondence_OnClick.def                 |   16 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateInventorySupply.qbl                                                              |   31 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl                                                                                            |  254 ----
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def                                                           |   16 
 _Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl                                                                                         |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResult#103.def                                                             |   60 +
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelProductID.qbl                                                                                       |    7 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateData.qbl                                                                           |   32 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelContent#807.def                                                                     |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def                                     |    2 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_FulfillmentQuantity.qbl                                                                     |    8 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StockingPointID.qbl                                                                         |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Method_CreateCapacityAndSaleBudgeCompareData.def                                     |   32 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def    |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResultProductInStockingPoint_MP.def                                        |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListStockingPoint#140.def                                                                |   60 +
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProduct_MP#1.def                                                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnCl.def                   |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def                    |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bAddModule_OnClick#61.def                                      |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bCreate_OnClick.def                                                           |   23 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyType.qbl                                                                              |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageStockingPoint#1.def                                                     |   10 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StartDate.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProduct_MP#34.def                                                             |   59 +
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreatePanel.qbl                                                                                       |   23 
 _Main/BL/Type_ModulePanelCorrespondence/_ROOT_Type_ModulePanelCorrespondence.qbl                                                                           |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def                                                                |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def                                                                    |   10 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/_ROOT_Type_PeggingResultProductInStockingPoint_MP.qbl                                                 |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def                                                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def                                                                  |   11 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule.def                                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def                                                  |   42 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl                                                                                                    |   21 
 _Main/BL/Relations/Relation_ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module.qbl                                                           |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bRunPeggingAlgorithm_OnClick.def                                              |   22 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def                                                         |    4 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateAllChildRelation.qbl                                                               |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick#231.def                   |   26 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl                                               |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelPanel.def                                                               |   15 
 _Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl                                                                                             |   14 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_NumberOfPlies.qbl                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingAllResult#1.def                                                  |   10 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_ProductID.qbl                                                                                     |    7 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateNewSupply.qbl                                                                    |   70 +
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModulePanelCorrespondence#1.def                               |   25 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetParentChildRelationship.qbl                                                           |   14 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_IsModule.qbl                                                                                             |    7 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForSalesDemandBase.qbl                                                                              |   21 
 _Main/BL/Relations/Relation_PeggingProductInStockingPoint_MP_PeggingProduct_MP_PeggingProduct_M.qbl                                                        |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def                                                       |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingAllResult#1.def                                                    |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def                                                           |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProduct_MP_34_MenuSelectionAll852_OnClick.def                                  |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelStockingPoint#569.def                                                               |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModulePanelCorrespondence#612.def                                        |   75 +
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_Create.qbl                                                                               |   31 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetAllChildRelation.qbl                                                                  |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModuleCorrespondence.def                                      |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def                                                   |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def                                                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_MenuSelectionAll506_OnClick.def                                     |   17 
 131 files changed, 2,610 insertions(+), 476 deletions(-)

diff --git a/_Main/BL/Relations/Relation_ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorr.qbl b/_Main/BL/Relations/Relation_ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorr.qbl
new file mode 100644
index 0000000..58a68fb
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorr.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorrespondence
+{
+  #keys: '1[414702.1.376546995]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.376546997][414702.1.376546996][414702.1.376546998]'
+    Cardinality: '0to1'
+    ObjectDefinition: ModulePanelCorrespondence
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide ModulePanelCorrespondence
+  {
+    #keys: '3[414702.1.376547000][414702.1.376546999][414702.1.376547001]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module.qbl b/_Main/BL/Relations/Relation_ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module.qbl
new file mode 100644
index 0000000..c65eeaf
--- /dev/null
+++ b/_Main/BL/Relations/Relation_ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module
+{
+  #keys: '1[414702.1.376547033]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Panel
+  {
+    #keys: '3[414702.1.376547035][414702.1.376547034][414702.1.376547036]'
+    Cardinality: '1toN'
+    ObjectDefinition: ModulePanelCorrespondence
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Module
+  {
+    #keys: '3[414702.1.376547038][414702.1.376547037][414702.1.376547039]'
+    Cardinality: '0to1'
+    ObjectDefinition: ModulePanelCorrespondence
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingProductInStockingPoint_MP_PeggingProduct_MP_PeggingProduct_M.qbl b/_Main/BL/Relations/Relation_PeggingProductInStockingPoint_MP_PeggingProduct_MP_PeggingProduct_M.qbl
new file mode 100644
index 0000000..ad607ec
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingProductInStockingPoint_MP_PeggingProduct_MP_PeggingProduct_M.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingProductInStockingPoint_MP_PeggingProduct_MP_PeggingProduct_MP_PeggingProductInStockingPoint_MP
+{
+  #keys: '1[414702.1.364041917]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PeggingProduct_MP
+  {
+    #keys: '3[414702.1.364041919][414702.1.364041918][414702.1.364041920]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingProductInStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingProductInStockingPoint_MP
+  {
+    #keys: '3[414702.1.364041922][414702.1.364041921][414702.1.364041923]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingProduct_MP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProduc.qbl b/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProduc.qbl
new file mode 100644
index 0000000..9853043
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProduc.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProductInStockingPoint_MP_AllParent
+{
+  #keys: '1[414702.1.364041995]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide AllChild
+  {
+    #keys: '3[414702.1.364041997][414702.1.364041996][414702.1.364041998]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResultProductInStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide AllParent
+  {
+    #keys: '3[414702.1.364042000][414702.1.364041999][414702.1.364042001]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResultProductInStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductIn.qbl b/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductIn.qbl
new file mode 100644
index 0000000..dec1590
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductIn.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductInStockingPoint_MP_Parent
+{
+  #keys: '1[414702.1.364041982]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Child
+  {
+    #keys: '3[414702.1.364041984][414702.1.364041983][414702.1.364041985]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingResultProductInStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Parent
+  {
+    #keys: '3[414702.1.364041987][414702.1.364041986][414702.1.364041988]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResultProductInStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoin.qbl b/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoin.qbl
new file mode 100644
index 0000000..5401191
--- /dev/null
+++ b/_Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoin.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoint_MP_PeggingProductInStockingPoint_MP_PeggingResultProductInStockingPoint_MP
+{
+  #keys: '1[414702.1.364041967]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide PeggingProductInStockingPoint_MP
+  {
+    #keys: '3[414702.1.364041969][414702.1.364041968][414702.1.364041970]'
+    Cardinality: '0to1'
+    ObjectDefinition: PeggingResultProductInStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide PeggingResultProductInStockingPoint_MP
+  {
+    #keys: '3[414702.1.364041972][414702.1.364041971][414702.1.364041973]'
+    Cardinality: '1toN'
+    ObjectDefinition: PeggingProductInStockingPoint_MP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl
index f976af5..4d9a817 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl
@@ -15,7 +15,7 @@
     
     rowNr := 0;
     
-    info( "缁勭粐鍩哄湴涓暟锛�", casbfpopoas.Size(), "    浜嬩笟閮ㄤ釜鏁帮細", casbfbts.Size() );
+    //info( "缁勭粐鍩哄湴涓暟锛�", casbfpopoas.Size(), "    浜嬩笟閮ㄤ釜鏁帮細", casbfbts.Size() );
     
     traverse ( casbfpopoas, Elements, casbfpopoa ) {
       traverse ( casbfbts, Elements, casbfbt ) {
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
index fd760c1..7e62097 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
@@ -22,259 +22,5 @@
     casbcirs := CapacityAndSaleBudgeChartElement::SelectGenerateChartRows( this, &items, &placeOfProductionOfArrays, &businessTypes, &years, &months );
     
     CapacityAndSaleBudgeChartElement::CreateData( this, macroPlans, casbcirs, popoa, groupBy, saleOrCapacity, years, months );
-    
-    //// 骞翠唤涓嶉�夋椂鍏ㄩ��
-    //if ( years.Size() = 0 ) {
-    //  years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
-    //}
-    //// 鏈堜唤涓嶉�夋椂鍏ㄩ��
-    //if ( months.Size() = 0 ) {
-    //  months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, true, item.MonthNo() );
-    //}
-    //
-    //// ====娓呯悊鏃ф暟鎹�====
-    //
-    //// ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    //targeGlobal_MappingAnnualBudgetDatas := selectset( otdTable, Global_MappingAnnualBudgetData, tempGMABD, true );
-    //if ( businessTypes.Size() > 0 ) {
-    //  businessTypeStrings := selectuniquevalues( businessTypes, Elements, item, true, item.BusinessType() );
-    //  targeGlobal_MappingAnnualBudgetDatas := selectset( targeGlobal_MappingAnnualBudgetDatas, Elements, item, businessTypeStrings.Find( item.BusinessType() ) > -1 );
-    //}
-    //if ( placeOfProductionOfArrays.Size() > 0 ) {
-    //  placeOfProductionOfArrayStrings := selectuniquevalues( placeOfProductionOfArrays, Elements, item, true, item.PlaceOfProductionOfArray() );
-    //  targeGlobal_MappingAnnualBudgetDatas := selectset( targeGlobal_MappingAnnualBudgetDatas, Elements, item, placeOfProductionOfArrayStrings.Find( item.OrganCode() ) > -1 );
-    //}
-    ////info( "閫変腑鐨勪釜鏁�:", targeGlobal_MappingAnnualBudgetDatas.Size() );
-    //
-    //traverse ( targeGlobal_MappingAnnualBudgetDatas, Elements, gmabd ) {
-    //  row := CapacityAndSaleBudgeChartRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
-    //  // 璁板綍姣忚鍖呭惈鍝簺product
-    //  CapacityAndSaleBudgeChartRowProduct::CreateIfNotExist( row, gmabd.ProductID() );
-    //}
-    //
-    //rows := selectset( this, CapacityAndSaleBudgeChartRow, item, true );
-    //placeOfProductionOfArrayList := selectuniquevalues( targeGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, tempGMABD.OrganCode() );
-    //businessTypeList := selectuniquevalues( targeGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, tempGMABD.BusinessType() );
-    //
-    //// 鐢熸垚鍥捐〃鍏冪礌
-    //traverse ( years, Elements, year ) {
-    //  if ( popoa = "闈㈡澘鍩哄湴" and groupBy = "骞�" ) {
-    //    // 鐩爣
-    //    traverse ( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-    //      productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-    //      this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                             TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
-    //                                             BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                             Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                 Global_MappingAnnualBudgetData::GetSaleByYear( productCodeList, otdTable, year.YearNo() ),
-    //                                                                 Global_MappingForecast::GetQuantityByYear( productCodeList, otdTable, year.YearNo() ) )
-    //                                            );
-    //      // S&OP
-    //      traverse ( macroPlans, Elements, macroPlan ) {
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Forecast::GetFulfilledBalanceByYear( productCodeList, macroPlan, year.YearNo() ),
-    //                                                                   Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() ) 
-    //                                                                   )
-    //                                               ); 
-    //      }                    
-    //    }
-    //  } 
-    //  if ( popoa = "闈㈡澘鍩哄湴" and groupBy = "鍗婂勾" ) {
-    //    for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
-    //      traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-    //        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Global_MappingAnnualBudgetData::GetSaleByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ),
-    //                                                                   Global_MappingForecast::GetQuantityByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ) )
-    //                                               );  
-    //        // S&OP
-    //        traverse( macroPlans, Elements, macroPlan ) {
-    //          this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
-    //                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                     Forecast::GetFulfilledBalanceByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ),
-    //                                                                     Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
-    //                                                                     )
-    //                                                 ); 
-    //        }                    
-    //      }
-    //    }
-    //  }
-    //  if ( popoa = "闈㈡澘鍩哄湴" and groupBy = "瀛e害" ) {
-    //    for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
-    //      traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-    //        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Global_MappingAnnualBudgetData::GetSaleBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ),
-    //                                                                   Global_MappingForecast::GetQuantityBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ) )
-    //                                               );  
-    //  //      info( "productCodeList : " + [String]productCodeList.Size() );
-    //        // S&OP
-    //        traverse( macroPlans, Elements, macroPlan ) {
-    //          this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
-    //                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                     Forecast::GetFulfilledBalanceBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) ,
-    //                                                                     Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo )
-    //                                                                     )
-    //                                                 ); 
-    //        }                    
-    //      }
-    //    }
-    //  }
-    //  if ( popoa = "闈㈡澘鍩哄湴" and groupBy = "鏈�" ) {
-    //    traverse( months, Elements, month ) {
-    ////      info( "process month start : " + [String]month.MonthNo() );
-    //      monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
-    //      traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-    //        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Global_MappingAnnualBudgetData::GetSaleByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ),
-    //                                                                   Global_MappingForecast::GetQuantityByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ) )
-    //                                               );  
-    //        // S&OP
-    //        traverse( macroPlans, Elements, macroPlan ) {
-    //          this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
-    //                                                 BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-    //                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                     Forecast::GetFulfilledBalanceByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ),
-    //                                                                     Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) 
-    //                                                                     )
-    //                                                 ); 
-    //        }
-    //      }
-    ////      info( "process month end : " + [String]month.MonthNo() );
-    //    }
-    //  }
-    //  if( popoa = "浜嬩笟閮�" and groupBy = "骞�" ) {
-    //    // 鐩爣
-    //    traverse( businessTypeList, Elements, businessType ) {
-    //      productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-    //      this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                             TimeStringAndScenarioName := [String]year.YearNo() + "骞�-鐩爣",
-    //                                             BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                             Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                 Global_MappingAnnualBudgetData::GetSaleByYear( productCodeList, otdTable, year.YearNo() ),
-    //                                                                 Global_MappingForecast::GetQuantityByYear( productCodeList, otdTable, year.YearNo() ) )
-    //                                             );  
-    //      // S&OP
-    //      traverse( macroPlans, Elements, macroPlan ) {
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + macroPlan.ScenarioName(),
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Forecast::GetFulfilledBalanceByYear( productCodeList, macroPlan, year.YearNo() ) ,
-    //                                                                   Product_MP::GetNewSupplyByYear( productCodeList, macroPlan, year.YearNo() )
-    //                                                                   )
-    //                                               ); 
-    //      }                    
-    //    }
-    //  } 
-    //  if ( popoa = "浜嬩笟閮�" and groupBy = "鍗婂勾" ) {
-    //    for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
-    //      traverse( businessTypeList, Elements, businessType ) {
-    //        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Global_MappingAnnualBudgetData::GetSaleByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ),
-    //                                                                   Global_MappingForecast::GetQuantityByHalfYear( productCodeList, otdTable, year.YearNo(), halfNo ) )
-    //                                               );  
-    //        // S&OP
-    //        traverse( macroPlans, Elements, macroPlan ) {
-    //          this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-" + macroPlan.ScenarioName(),
-    //                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                     Forecast::GetFulfilledBalanceByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo ) ,
-    //                                                                     Product_MP::GetNewSupplyByHalfYear( productCodeList, macroPlan, year.YearNo(), halfNo )
-    //                                                                     )
-    //                                                 ); 
-    //        }                    
-    //      }
-    //    }
-    //  }
-    //  if ( popoa = "浜嬩笟閮�" and groupBy = "瀛e害" ) {
-    //    for( seasonNo := 1; seasonNo <= 4; seasonNo := seasonNo + 1 ) {
-    ////      debuginfo( "process season start : " + [String]seasonNo );
-    //      traverse( businessTypeList, Elements, businessType ) {
-    //        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-鐩爣",
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Global_MappingAnnualBudgetData::GetSaleBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ),
-    //                                                                   Global_MappingForecast::GetQuantityBySeason( productCodeList, otdTable, year.YearNo(), seasonNo ) )
-    //                                               );  
-    //        // S&OP
-    //        traverse( macroPlans, Elements, macroPlan ) {
-    //          this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + [String]seasonNo + "瀛e害-" + macroPlan.ScenarioName(),
-    //                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                     Forecast::GetFulfilledBalanceBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ),
-    //                                                                     Product_MP::GetNewSupplyBySeason( productCodeList, macroPlan, year.YearNo(), seasonNo ) 
-    //                                                                     )
-    //                                                 ); 
-    //        }                    
-    //      }
-    ////      info( "process season end : " + [String]seasonNo );
-    //    }
-    //  }
-    //  if ( popoa = "浜嬩笟閮�" and groupBy = "鏈�" ) {
-    //    traverse( months, Elements, month ) {
-    ////      debuginfo( "process month start : " + [String]month.MonthNo() );
-    //      monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
-    //      traverse( businessTypeList, Elements, businessType ) {
-    //        productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-    //        this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                               TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
-    //                                               BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                               Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                   Global_MappingAnnualBudgetData::GetSaleByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ),
-    //                                                                   Global_MappingForecast::GetQuantityByMonth( productCodeList, otdTable, year.YearNo(), month.MonthNo() ) )
-    //                                               );  
-    //        // S&OP
-    //        traverse( macroPlans, Elements, macroPlan ) {
-    //          this.CapacityAndSaleBudgeChartElement( relnew, 
-    //                                                 TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-" + macroPlan.ScenarioName(),
-    //                                                 BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-    //                                                 Quantity := ifexpr( saleOrCapacity = "閿�鍞",
-    //                                                                     Forecast::GetFulfilledBalanceByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() ) ,
-    //                                                                     Product_MP::GetNewSupplyByMonth( productCodeList, macroPlan, year.YearNo(), month.MonthNo() )
-    //                                                                     )
-    //                                                 ); 
-    //        }            
-    //      }
-    ////      debuginfo( "process month end : " + [String]month.MonthNo() );
-    //    }
-    //  }
-    //}
-    ////info( "CapacityAndSaleBudgeChartElement : " + [String]selectset( this, CapacityAndSaleBudgeChartElement, item, true ).Size() );
-    ////traverse( this, CapacityAndSaleBudgeChartRow, row ) {
-    ////  info( "==鈫�==" );
-    ////  info( row.BusinessType() );
-    ////  info( row.PlaceOfProductionOfArray() );
-    ////  elements := selectset( row, CapacityAndSaleBudgeChartRowProduct, cell, true );
-    ////  info( elements.Size() );
-    ////  info( row.GetProductCodes().Concatenate( " | " ) );
-    ////  info( "==鈫�==" );
-    ////}
   *]
 }
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index 5215a43..3c6bcf9 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -23,68 +23,5 @@
     CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeData( macroPlans, globalOTDTable, this, items, years, months );
     
     CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocation( macroPlans, globalOTDTable, this, items, years, months );
-    
-    //if ( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
-    //  traverse ( years, Elements, year ) {
-    //    CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationBudget( this, months, year, globalOTDTable );
-    //    CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationByScenario( macroPlans, this, months, year );
-    //  }
-    //}
-    //
-    //if ( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) {
-    //  traverse ( years, Elements, year ) {
-    //    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 );
-    //    }
-    //  }
-    //}
-    
-    // 璁剧疆rowNo鍜宑olumnNo
-    //rowNo := 1;
-    //rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.PlaceOfProductionOfArray() + "_" + item.BusinessType() );
-    //traverse( rowSorted, Elements, item ) {
-    //  item.RowNo( rowNo );
-    //  rowNo := rowNo + 1;
-    //}
-    //columnNo := 1;
-    //traverse( this, CapacityAndSaleBudgeCompareItemColumn, item ) {
-    //  item.ColumnNo( columnNo );
-    //  columnNo := columnNo + 1;
-    //}
   *]
 }
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/Attribute_IsModule.qbl b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_IsModule.qbl
new file mode 100644
index 0000000..41a8d2f
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_IsModule.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsModule
+{
+  #keys: '3[414702.1.376024042][414702.1.376024041][414702.1.376024043]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleProductID.qbl b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleProductID.qbl
new file mode 100644
index 0000000..5a225e5
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ModuleProductID
+{
+  #keys: '3[414702.1.376547011][414702.1.376547010][414702.1.376547012]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleStockingPointID.qbl b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleStockingPointID.qbl
new file mode 100644
index 0000000..fa9d8e9
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleStockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ModuleStockingPointID
+{
+  #keys: '3[414702.1.376547021][414702.1.376547020][414702.1.376547022]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelProductID.qbl b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelProductID.qbl
new file mode 100644
index 0000000..f2e4198
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelProductID
+{
+  #keys: '3[414702.1.376547074][414702.1.376547073][414702.1.376547075]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelStockingPointID.qbl b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelStockingPointID.qbl
new file mode 100644
index 0000000..956fb72
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelStockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PanelStockingPointID
+{
+  #keys: '3[414702.1.376547084][414702.1.376547083][414702.1.376547085]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreateModule.qbl b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreateModule.qbl
new file mode 100644
index 0000000..93a7d86
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreateModule.qbl
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateModule (
+  GlobalOTDSOP globalOTDSOP,
+  ProductInStockingPoint_MPs pisps
+)
+{
+  TextBody:
+  [*
+    traverse ( pisps, Elements, pisp ) {
+      targetModulePanelCorrespondence := select( globalOTDSOP, ModulePanelCorrespondence, tempMPC, 
+                                                 tempMPC.ModuleProductID() = pisp.ProductID() and 
+                                                 tempMPC.ModuleStockingPointID() = pisp.StockingPointID() );
+      if ( isnull( targetModulePanelCorrespondence ) ) { 
+        globalOTDSOP.ModulePanelCorrespondence( relnew, ModuleProductID := pisp.ProductID(), ModuleStockingPointID := pisp.StockingPointID(), IsModule := true );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreatePanel.qbl b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreatePanel.qbl
new file mode 100644
index 0000000..e4ab37b
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreatePanel.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanel (
+  GlobalOTDSOP globalOTDSOP,
+  ModulePanelCorrespondences modulePanelCorrespondences,
+  ProductInStockingPoint_MPs pisps
+)
+{
+  TextBody:
+  [*
+    traverse ( modulePanelCorrespondences, Elements, mpc ) {
+      traverse ( pisps, Elements, pisp ) {
+        targetPanel := select( mpc, Panel, tempP, 
+                               tempP.PanelProductID() = pisp.ProductID() and 
+                               tempP.PanelStockingPointID() = pisp.StockingPointID() );
+        if ( isnull( targetPanel ) ) {
+          targetPanel := globalOTDSOP.ModulePanelCorrespondence( relnew, PanelProductID := pisp.ProductID(), PanelStockingPointID := pisp.StockingPointID() );
+          targetPanel.Module( relset, mpc );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeleteModule.qbl b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeleteModule.qbl
new file mode 100644
index 0000000..22ceadb
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeleteModule.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeleteModule (
+  GlobalOTDSOP globalOTDSOP,
+  ProductInStockingPoint_MPs pisps
+)
+{
+  TextBody:
+  [*
+    traverse ( pisps, Elements, pisp ) {
+      targetModulePanelCorrespondence := select( globalOTDSOP, ModulePanelCorrespondence, tempMPC,
+                                                 tempMPC.ModuleProductID() = pisp.ProductID() and
+                                                 tempMPC.ModuleStockingPointID() = pisp.StockingPointID() and
+                                                 tempMPC.IsModule() );
+      if ( not isnull( targetModulePanelCorrespondence ) ) {
+        targetModulePanelCorrespondence.Delete();
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeletePanel.qbl b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeletePanel.qbl
new file mode 100644
index 0000000..e52e516
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeletePanel.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DeletePanel (
+  ModulePanelCorrespondences modulePanelCorrespondences,
+  ProductInStockingPoint_MPs pisps
+)
+{
+  TextBody:
+  [*
+    traverse ( modulePanelCorrespondences, Elements, mpc ) {
+      traverse ( pisps, Elements, pisp ) {
+        targetPanel := select( mpc, Panel, tempP, 
+                               tempP.PanelProductID() = pisp.ProductID() and 
+                               tempP.PanelStockingPointID() = pisp.StockingPointID() );
+        if ( not isnull( targetPanel ) ) {
+          targetPanel.Delete();
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_ModulePanelCorrespondence/_ROOT_Type_ModulePanelCorrespondence.qbl b/_Main/BL/Type_ModulePanelCorrespondence/_ROOT_Type_ModulePanelCorrespondence.qbl
new file mode 100644
index 0000000..3761682
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/_ROOT_Type_ModulePanelCorrespondence.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type ModulePanelCorrespondence
+{
+  #keys: '5[414702.1.376546992][414702.1.376546990][0.0.0][414702.1.376546991][414702.1.376546993]'
+  BaseType: Object
+  StructuredName: 'ModulePanelCorrespondences'
+}
diff --git a/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_ProductID.qbl b/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_ProductID.qbl
new file mode 100644
index 0000000..054b669
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.364041933][414702.1.364041932][414702.1.364041934]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StartDate.qbl b/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StartDate.qbl
new file mode 100644
index 0000000..6ed2a80
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.1.364041953][414702.1.364041952][414702.1.364041954]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StockingPointID.qbl b/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..442b3b1
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.1.364041943][414702.1.364041942][414702.1.364041944]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingProductInStockingPoint_MP/_ROOT_Type_PeggingProductInStockingPoint_MP.qbl b/_Main/BL/Type_PeggingProductInStockingPoint_MP/_ROOT_Type_PeggingProductInStockingPoint_MP.qbl
new file mode 100644
index 0000000..3a79593
--- /dev/null
+++ b/_Main/BL/Type_PeggingProductInStockingPoint_MP/_ROOT_Type_PeggingProductInStockingPoint_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingProductInStockingPoint_MP
+{
+  #keys: '5[414702.1.364041911][414702.1.364041909][0.0.0][414702.1.364041910][414702.1.364041912]'
+  BaseType: Object
+  StructuredName: 'PeggingProductInStockingPoint_MPs'
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
index c64e4ba..8eaaed9 100644
--- a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
+++ b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl
@@ -2,24 +2,17 @@
 #parent: #root
 StaticMethod Create (
   GlobalOTDSOP globalOTDSOP,
-  Product_MPs product_MPs
-)
+  String productID
+) as PeggingProduct_MP
 {
   TextBody:
   [*
-    globalOTDSOP.PeggingProduct_MP( relflush );
+    targetPeggingProduct_MP := select( globalOTDSOP, PeggingProduct_MP, tempPPMP, tempPPMP.ProductID() = productID );
     
-    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() );
-      }
+    if ( isnull( targetPeggingProduct_MP ) ) { 
+      targetPeggingProduct_MP := globalOTDSOP.PeggingProduct_MP( relnew, ProductID := productID );
     }
+    
+    return targetPeggingProduct_MP;
   *]
 }
diff --git a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateData.qbl b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..a7296aa
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  GlobalOTDSOP globalOTDSOP,
+  Product_MPs product_MPs
+)
+{
+  TextBody:
+  [*
+    globalOTDSOP.PeggingProduct_MP( relflush );
+    
+    product_MPs := selectset( product_MPs, Elements, tempPMP, tempPMP.IsLeaf() );
+    
+    PeggingProduct_MP::CreateDataForSalesDemandBase( globalOTDSOP, product_MPs );
+    
+    PeggingProduct_MP::CreateDataForProductInStocking_MP( globalOTDSOP, product_MPs );
+  *]
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForProductInStocking_MP.qbl b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForProductInStocking_MP.qbl
new file mode 100644
index 0000000..992f927
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForProductInStocking_MP.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDataForProductInStocking_MP (
+  GlobalOTDSOP globalOTDSOP,
+  Product_MPs product_MPs
+)
+{
+  TextBody:
+  [*
+    traverse ( product_MPs, Elements.ProductInStockingPoint_MP, pisp ) {
+      targetPeggingProduct_MP := PeggingProduct_MP::Create( globalOTDSOP, pisp.ProductID() );
+    //  traverse ( pisp, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl, not pispippl.IsPeriodFrozen() ) {
+        targetPeggingProduct_MP.PeggingProductInStockingPoint_MP( relnew,
+                                                                  ProductID       := pisp.ProductID(),
+                                                                  StockingPointID := pisp.StockingPointID()
+    //                                                              StartDate       := pispippl.Start().Date() 
+                                                                 );
+    //  }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForSalesDemandBase.qbl b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForSalesDemandBase.qbl
new file mode 100644
index 0000000..96df9b1
--- /dev/null
+++ b/_Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForSalesDemandBase.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDataForSalesDemandBase (
+  GlobalOTDSOP globalOTDSOP,
+  Product_MPs product_MPs
+)
+{
+  TextBody:
+  [*
+    traverse ( product_MPs, Elements, pmp ) {
+      targetPeggingProduct_MP := PeggingProduct_MP::Create( globalOTDSOP, 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_PeggingResult/StaticMethod_GenerateNewSupply.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
index 24adf59..269e335 100644
--- a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
@@ -11,7 +11,7 @@
 {
   TextBody:
   [*
-    info( "渚涘簲绫诲瀷锛圢ewSupply锛�", "    渚涘簲閲忥細", ns.Quantity(), "    婊¤冻锛�", fulfillmentQuantity );
+    //info( "渚涘簲绫诲瀷锛圢ewSupply锛�", "    渚涘簲閲忥細", ns.Quantity(), "    婊¤冻锛�", fulfillmentQuantity );
     
     pisp := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
     
@@ -30,8 +30,8 @@
     ontype ( ns.PeriodTask_MP() ) {
       PeriodTaskOperation as pto : {
         childPeggingResult.SupplyType( "浜х嚎渚涘簲" );
-        info( "鎿嶄綔鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", pto.Key(), "    ",
-              ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
+    //    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 ) {
             fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
@@ -40,7 +40,7 @@
             actualFulfillmentQuantity := f.Quantity();
             smp1 := f.Supply_MP();
             numberOfPlies++;
-            info( "--------------------------------------------------------------" );
+    //        info( "--------------------------------------------------------------" );
             PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResult );
             numberOfPlies--;
           }
@@ -52,15 +52,15 @@
         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() );
+    //    info( "杞﹂亾鍛ㄦ湡浠诲姟    ", "渚涘簲鏃堕棿锛�", ns.Start().Format( "Y-M2-D2" ), "    鍛ㄦ湡浠诲姟KEY锛�", ptll.Key(), "    ", 
+    //          ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP().Name() );
         traverse ( targetDependentDemand, Fulfillment, f ) {
           totalSupply := sum( targetDependentDemand, Fulfillment, tempF, tempF.Quantity() );
           orderFulfillmentQuantity := ( f.Quantity() / totalSupply ) * fulfillmentQuantity;
           actualFulfillmentQuantity := f.Quantity();
           smp1 := f.Supply_MP();
           numberOfPlies++;
-          info( "--------------------------------------------------------------" );
+    //      info( "--------------------------------------------------------------" );
           PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResult );
           numberOfPlies--;
         }
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
index 67eb1e4..3e6f64e 100644
--- a/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GeneratePeggingResult.qbl
@@ -11,7 +11,7 @@
 {
   TextBody:
   [*
-    info( "灞傛暟锛�", numberOfPlies );
+    //info( "灞傛暟锛�", numberOfPlies );
     ontype ( smp ) {
       NewSupply as ns : {
         PeggingResult::GenerateNewSupply( peggingProductInSalesDemandBase, numberOfPlies, ns, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResult );
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ActualFulfillmentQuantity.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ActualFulfillmentQuantity.qbl
new file mode 100644
index 0000000..d501639
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ActualFulfillmentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ActualFulfillmentQuantity
+{
+  #keys: '3[414702.1.362210027][414702.1.362210026][414702.1.362210028]'
+  Description: '瀹為檯婊¤冻鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_FulfillmentQuantity.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_FulfillmentQuantity.qbl
new file mode 100644
index 0000000..d23f549
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_FulfillmentQuantity.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FulfillmentQuantity
+{
+  #keys: '3[414702.1.362210037][414702.1.362210036][414702.1.362210038]'
+  Description: '瀹為檯闇�瑕佹弧瓒崇殑鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_NumberOfPlies.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_NumberOfPlies.qbl
new file mode 100644
index 0000000..a5c217f
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_NumberOfPlies.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute NumberOfPlies
+{
+  #keys: '3[414702.1.362210053][414702.1.362210052][414702.1.362210054]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ProductID.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ProductID.qbl
new file mode 100644
index 0000000..b8fdbd0
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ProductID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.1.362210063][414702.1.362210062][414702.1.362210064]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StartDate.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StartDate.qbl
new file mode 100644
index 0000000..16c356c
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StartDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StartDate
+{
+  #keys: '3[414702.1.362210073][414702.1.362210072][414702.1.362210074]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StockingPointID.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StockingPointID.qbl
new file mode 100644
index 0000000..99ae7fd
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StockingPointID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute StockingPointID
+{
+  #keys: '3[414702.1.362210083][414702.1.362210082][414702.1.362210084]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyQuantity.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyQuantity.qbl
new file mode 100644
index 0000000..19e7b3c
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyQuantity.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SupplyQuantity
+{
+  #keys: '3[414702.1.362210096][414702.1.362210095][414702.1.362210097]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyType.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyType.qbl
new file mode 100644
index 0000000..d602de2
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SupplyType
+{
+  #keys: '3[414702.1.362210106][414702.1.362210105][414702.1.362210107]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_UnitOfMeasurementName.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_UnitOfMeasurementName.qbl
new file mode 100644
index 0000000..2ecbb4a
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_UnitOfMeasurementName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasurementName
+{
+  #keys: '3[414702.1.362210116][414702.1.362210115][414702.1.362210117]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_Create.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_Create.qbl
new file mode 100644
index 0000000..49d905b
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_Create.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  PeggingProductInStockingPoint_MP peggingProductInStockingPoint_MP,
+  String productID,
+  String stockingPointID,
+  Date startDate,
+  Real supplyQuantity,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  String supplyType,
+  Number numberOfPlies,
+  String unitOfMeasurementName
+) as PeggingResultProductInStockingPoint_MP
+{
+  TextBody:
+  [*
+    peggingResult := peggingProductInStockingPoint_MP.PeggingResultProductInStockingPoint_MP( 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_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateAllChildRelation.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateAllChildRelation.qbl
new file mode 100644
index 0000000..29dab2e
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateAllChildRelation.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateAllChildRelation (
+  PeggingProductInStockingPoint_MP ppisp
+)
+{
+  TextBody:
+  [*
+    targetPeggingResults := selectset( ppisp, PeggingResultProductInStockingPoint_MP, tempPRPISP, tempPRPISP.NumberOfPlies() = 0 );
+    
+    traverse ( targetPeggingResults, Elements, pr ) {
+      parentPeggingResult := pr;
+      childPeggingResult  := pr;
+      PeggingResultProductInStockingPoint_MP::SetAllChildRelation( ppisp, parentPeggingResult, childPeggingResult );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateData.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..558d852
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateData.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  PeggingProductInStockingPoint_MPs peggingProductInStockingPoint_MPs,
+  const MacroPlan macroPlan
+)
+{
+  TextBody:
+  [*
+    traverse ( peggingProductInStockingPoint_MPs, Elements, ppispmp ) {
+      ppispmp.PeggingResultProductInStockingPoint_MP( relflush );
+    
+      targetPISP := select( macroPlan, Product_MP.ProductInStockingPoint_MP, tempPISP, 
+                            tempPISP.ProductID() = ppispmp.ProductID() and 
+                            tempPISP.StockingPointID() = ppispmp.StockingPointID()
+                           );
+      traverse ( targetPISP, ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), pispippl,
+                 not pispippl.IsPeriodFrozen() and pispippl.Supply_MP( relsize ) > 0 ) {
+        traverse ( pispippl, Supply_MP, smp, smp.Quantity() > 0 ) {
+          PeggingResultProductInStockingPoint_MP::GeneratePeggingResult( ppispmp, 
+                                                                         0,
+                                                                         smp,
+                                                                         smp.Quantity(),
+                                                                         smp.Quantity(),
+                                                                         null( PeggingResultProductInStockingPoint_MP ) );
+        }
+      }
+      
+      PeggingResultProductInStockingPoint_MP::CreateAllChildRelation( ppispmp );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateInventorySupply.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateInventorySupply.qbl
new file mode 100644
index 0000000..d89a77d
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateInventorySupply.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateInventorySupply (
+  PeggingProductInStockingPoint_MP peggingProductInStockingPoint_MP,
+  Number numberOfPlies,
+  const InventorySupply is,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResultProductInStockingPoint_MP parentPeggingResultProductInStockingPoint_MP
+)
+{
+  TextBody:
+  [*
+    //info( "渚涘簲绫诲瀷锛圛nventorySupply锛�    ", "渚涘簲鏃堕棿锛�", is.Date().Format( "Y-M2-D2" ), "    渚涘簲閲忥細", is.Quantity(), 
+    //      "    瀹為檯鐢ㄩ噺锛�", fulfillmentQuantity, "    ", is.ProductInStockingPoint_MP().Name() );
+    pisp := is.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    childPeggingResultProductInStockingPoint_MP := PeggingResultProductInStockingPoint_MP::Create( peggingProductInStockingPoint_MP, 
+                                                                                                   pisp.ProductID(), 
+                                                                                                   pisp.StockingPointID(), 
+                                                                                                   is.Date(), 
+                                                                                                   is.Quantity(), 
+                                                                                                   actualFulfillmentQuantity,
+                                                                                                   fulfillmentQuantity, 
+                                                                                                   "搴撳瓨渚涘簲", 
+                                                                                                   numberOfPlies,
+                                                                                                   pisp.UnitOfMeasureName()
+                                                                                                  );
+    
+    PeggingResultProductInStockingPoint_MP::SetParentChildRelationship( parentPeggingResultProductInStockingPoint_MP, childPeggingResultProductInStockingPoint_MP );
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateNewSupply.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateNewSupply.qbl
new file mode 100644
index 0000000..51f7846
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateNewSupply.qbl
@@ -0,0 +1,70 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateNewSupply (
+  PeggingProductInStockingPoint_MP peggingProductInStockingPoint_MP,
+  Number numberOfPlies,
+  const NewSupply ns,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResultProductInStockingPoint_MP parentPeggingResultProductInStockingPoint_MP
+)
+{
+  TextBody:
+  [*
+    //info( "渚涘簲绫诲瀷锛圢ewSupply锛�", "    渚涘簲閲忥細", ns.Quantity(), "    婊¤冻锛�", fulfillmentQuantity );
+    
+    pisp := ns.ProductInStockingPointInPeriodPlanningLeaf().ProductInStockingPoint_MP();
+    
+    childPeggingResultProductInStockingPoint_MP := PeggingResultProductInStockingPoint_MP::Create( peggingProductInStockingPoint_MP, 
+                                                                                                   pisp.ProductID(), 
+                                                                                                   pisp.StockingPointID(), 
+                                                                                                   ns.Start().Date(), 
+                                                                                                   ns.Quantity(),
+                                                                                                   actualFulfillmentQuantity, 
+                                                                                                   fulfillmentQuantity, 
+                                                                                                   "", 
+                                                                                                   numberOfPlies, 
+                                                                                                   pisp.UnitOfMeasureName() );
+    PeggingResultProductInStockingPoint_MP::SetParentChildRelationship( parentPeggingResultProductInStockingPoint_MP, childPeggingResultProductInStockingPoint_MP );
+    
+    ontype ( ns.PeriodTask_MP() ) {
+      PeriodTaskOperation as pto : {
+        childPeggingResultProductInStockingPoint_MP.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 ) {
+            fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
+            totalSupply := sum( dd, Fulfillment, tempF, tempF.Quantity() );
+            orderFulfillmentQuantity := ( f.Quantity() / totalSupply ) * fulfillmentQuantity;
+            actualFulfillmentQuantity := f.Quantity();
+            smp1 := f.Supply_MP();
+            numberOfPlies++;
+    //        info( "--------------------------------------------------------------" );
+            PeggingResultProductInStockingPoint_MP::GeneratePeggingResult( peggingProductInStockingPoint_MP, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResultProductInStockingPoint_MP );
+            numberOfPlies--;
+          }
+        }
+      }
+           
+      PeriodTaskLaneLeg as ptll : {
+        childPeggingResultProductInStockingPoint_MP.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 ) {
+          totalSupply := sum( targetDependentDemand, Fulfillment, tempF, tempF.Quantity() );
+          orderFulfillmentQuantity := ( f.Quantity() / totalSupply ) * fulfillmentQuantity;
+          actualFulfillmentQuantity := f.Quantity();
+          smp1 := f.Supply_MP();
+          numberOfPlies++;
+    //      info( "--------------------------------------------------------------" );
+          PeggingResultProductInStockingPoint_MP::GeneratePeggingResult( peggingProductInStockingPoint_MP, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResultProductInStockingPoint_MP );
+          numberOfPlies--;
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GeneratePeggingResult.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GeneratePeggingResult.qbl
new file mode 100644
index 0000000..aa6f022
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GeneratePeggingResult.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GeneratePeggingResult (
+  PeggingProductInStockingPoint_MP peggingProductInStockingPoint_MP,
+  Number numberOfPlies,
+  const Supply_MP smp,
+  Real actualFulfillmentQuantity,
+  Real fulfillmentQuantity,
+  PeggingResultProductInStockingPoint_MP parentPeggingResultProductInStockingPoint_MP
+)
+{
+  TextBody:
+  [*
+    //info( "灞傛暟锛�", numberOfPlies );
+    ontype ( smp ) {
+      NewSupply as ns : {
+        PeggingResultProductInStockingPoint_MP::GenerateNewSupply( peggingProductInStockingPoint_MP, numberOfPlies, ns, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResultProductInStockingPoint_MP );
+      }
+    
+      InventorySupply as is : {
+        PeggingResultProductInStockingPoint_MP::GenerateInventorySupply( peggingProductInStockingPoint_MP, numberOfPlies, is, actualFulfillmentQuantity, fulfillmentQuantity, parentPeggingResultProductInStockingPoint_MP );
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetAllChildRelation.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetAllChildRelation.qbl
new file mode 100644
index 0000000..70cdfb4
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetAllChildRelation.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetAllChildRelation (
+  PeggingProductInStockingPoint_MP peggingProductInStockingPoint_MP,
+  PeggingResultProductInStockingPoint_MP parentPeggingResultProductInStockingPoint_MP,
+  PeggingResultProductInStockingPoint_MP childPeggingResultProductInStockingPoint_MP
+)
+{
+  TextBody:
+  [*
+    if ( childPeggingResultProductInStockingPoint_MP.Child( relsize ) = 0 ) {
+      childPeggingResultProductInStockingPoint_MP.AllParent( relset, parentPeggingResultProductInStockingPoint_MP ); 
+    }
+    
+    traverse ( childPeggingResultProductInStockingPoint_MP, Child, pr ) {
+      pr.AllParent( relset, parentPeggingResultProductInStockingPoint_MP );
+      PeggingResultProductInStockingPoint_MP::SetAllChildRelation( peggingProductInStockingPoint_MP, parentPeggingResultProductInStockingPoint_MP, pr );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetParentChildRelationship.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetParentChildRelationship.qbl
new file mode 100644
index 0000000..f01da3b
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetParentChildRelationship.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetParentChildRelationship (
+  PeggingResultProductInStockingPoint_MP parentPeggingResultProductInStockingPoint_MP,
+  PeggingResultProductInStockingPoint_MP childPeggingResultProductInStockingPoint_MP
+)
+{
+  TextBody:
+  [*
+    if ( not isnull( parentPeggingResultProductInStockingPoint_MP ) and not isnull( childPeggingResultProductInStockingPoint_MP ) ) {
+      childPeggingResultProductInStockingPoint_MP.Parent( relset, parentPeggingResultProductInStockingPoint_MP );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/_ROOT_Type_PeggingResultProductInStockingPoint_MP.qbl b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/_ROOT_Type_PeggingResultProductInStockingPoint_MP.qbl
new file mode 100644
index 0000000..dd96563
--- /dev/null
+++ b/_Main/BL/Type_PeggingResultProductInStockingPoint_MP/_ROOT_Type_PeggingResultProductInStockingPoint_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type PeggingResultProductInStockingPoint_MP
+{
+  #keys: '5[414702.1.364041964][414702.1.364041962][0.0.0][414702.1.364041963][414702.1.364041965]'
+  BaseType: Object
+  StructuredName: 'PeggingResultProductInStockingPoint_MPs'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
index 6d1c1b0..a5d6f33 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_cmTestAttempt.def
@@ -103,6 +103,17 @@
         Title: 'Pegging鍒嗘瀽'
       ]
     }
+    Component mnModulePanelCorrespondence
+    {
+      #keys: '[414702.1.378230928]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'APPLE'
+        Taborder: 9
+        Title: '妯$粍&闈㈡澘鍏崇郴'
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnModulePanelCorrespondence_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnModulePanelCorrespondence_OnClick.def
new file mode 100644
index 0000000..9825997
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnModulePanelCorrespondence_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: cmTestAttempt/mnModulePanelCorrespondence
+Response OnClick () id:Response_TIANMA_JITUAN_cmTestAttempt_mnModulePanelCorrespondence_OnClick
+{
+  #keys: '[414702.1.378281115]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebMenu_OnClick'
+  GroupServerCalls: true
+  QuillAction
+  {
+    Body:
+    [*
+      ApplicationScope.ViewManager().ResetUserViewById( "妯$粍_闈㈡澘鍏崇郴", true );
+    *]
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick\04319.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick\04319.def"
index a8c2ccc..c2f17ad 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick\04319.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick\04319.def"
@@ -13,9 +13,6 @@
   {
     Body:
     [*
-      CapacityAndSaleBudgeFilterItem::InitializedData( GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterYear::InitializedData( GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterMonth::InitializedData( GlobalOTDSOP );
       CapacityAndSaleBudgeFilterBusinessType::InitializedData( GlobalOTDSOP, GlobalOTDTable );
       CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::InitializedData( GlobalOTDSOP, GlobalOTDTable );
     *]
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
index 52b3f21..17752fe 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
@@ -27,6 +27,17 @@
         Taborder: 1
       ]
     }
+    Component Image116
+    {
+      #keys: '[414702.1.375948796]'
+      BaseType: 'WebImage'
+      Properties:
+      [
+        Image: 'CHECK'
+        Taborder: 2
+        Visible: false
+      ]
+    }
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Method_CreateCapacityAndSaleBudgeCompareData.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Method_CreateCapacityAndSaleBudgeCompareData.def
new file mode 100644
index 0000000..a5f829e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Method_CreateCapacityAndSaleBudgeCompareData.def
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateCapacityAndSaleBudgeCompareData () id:Method_FormCapacityAndSaleBudgeCompare_CreateCapacityAndSaleBudgeCompareData
+{
+  #keys: '[414702.1.376413209]'
+  Body:
+  [*
+    targetCapacityAndSaleBudgeFilterItem := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterItem, tempCASBFI, 
+                                                       exists( DataHolderCapacityAndSaleBudgeFilterItem.Data(), Elements, tempCASBFI1, tempCASBFI1 = tempCASBFI ) );
+    
+    targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, tempCASBFPOPOA, 
+                                                       exists( DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(), Elements, tempCASBFPOPOA1, tempCASBFPOPOA1 = tempCASBFPOPOA ) );
+    
+    targetCapacityAndSaleBudgeFilterBusinessType := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterBusinessType, tempCASBFBT, 
+                                                       exists( DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(), Elements, tempCASBFBT1, tempCASBFBT1 = tempCASBFBT ) );
+    
+    targetCapacityAndSaleBudgeFilterYear := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterYear, tempCASBFY, 
+                                                       exists( DataHolderCapacityAndSaleBudgeFilterYear.Data(), Elements, tempCASBFY1, tempCASBFY1 = tempCASBFY ) );
+    
+    targetCapacityAndSaleBudgeFilterMonth := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterMonth, tempCASBFM, 
+                                                       exists( DataHolderCapacityAndSaleBudgeFilterMonth.Data(), Elements, tempCASBFM1, tempCASBFM1 = tempCASBFM ) );
+    
+    
+    GlobalOTDSOP.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                              &targetCapacityAndSaleBudgeFilterItem,
+                                              &targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray,
+                                              &targetCapacityAndSaleBudgeFilterBusinessType,
+                                              &targetCapacityAndSaleBudgeFilterYear, 
+                                              &targetCapacityAndSaleBudgeFilterMonth,
+                                              GlobalOTDTable );
+  *]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick\043231.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick\043231.def"
index 2b22dca..0362709 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick\043231.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick\043231.def"
@@ -9,29 +9,13 @@
   {
     Body:
     [*
-      targetCapacityAndSaleBudgeFilterItem := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterItem, tempCASBFI, 
-                                                         exists( DataHolderCapacityAndSaleBudgeFilterItem.Data(), Elements, tempCASBFI1, tempCASBFI1 = tempCASBFI ) );
+      GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relflush );
+      GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relnew, RunStatus := 1 );
       
-      targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, tempCASBFPOPOA, 
-                                                         exists( DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(), Elements, tempCASBFPOPOA1, tempCASBFPOPOA1 = tempCASBFPOPOA ) );
+      Form.CreateCapacityAndSaleBudgeCompareData();
       
-      targetCapacityAndSaleBudgeFilterBusinessType := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterBusinessType, tempCASBFBT, 
-                                                         exists( DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(), Elements, tempCASBFBT1, tempCASBFBT1 = tempCASBFBT ) );
-      
-      targetCapacityAndSaleBudgeFilterYear := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterYear, tempCASBFY, 
-                                                         exists( DataHolderCapacityAndSaleBudgeFilterYear.Data(), Elements, tempCASBFY1, tempCASBFY1 = tempCASBFY ) );
-      
-      targetCapacityAndSaleBudgeFilterMonth := selectset( GlobalOTDSOP, CapacityAndSaleBudgeFilterMonth, tempCASBFM, 
-                                                         exists( DataHolderCapacityAndSaleBudgeFilterMonth.Data(), Elements, tempCASBFM1, tempCASBFM1 = tempCASBFM ) );
-      
-      
-      GlobalOTDSOP.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                &targetCapacityAndSaleBudgeFilterItem,
-                                                &targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray,
-                                                &targetCapacityAndSaleBudgeFilterBusinessType,
-                                                &targetCapacityAndSaleBudgeFilterYear, 
-                                                &targetCapacityAndSaleBudgeFilterMonth,
-                                                GlobalOTDTable );
+      //GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relflush );
+      //GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relnew, RunStatus := 0 );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def
new file mode 100644
index 0000000..5d461bc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterItem/Response_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormCapacityAndSaleBudgeFilterItem_OnCreated
+{
+  #keys: '[414702.1.353022415]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAndSaleBudgeFilterItem::InitializedData( GlobalOTDSOP );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def
new file mode 100644
index 0000000..c376f47
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormCapacityAndSaleBudgeFilterMonth_OnCreated
+{
+  #keys: '[414702.1.353022171]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAndSaleBudgeFilterMonth::InitializedData( GlobalOTDSOP );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def
new file mode 100644
index 0000000..8523243
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Response OnCreated () id:Response_FormCapacityAndSaleBudgeFilterYear_OnCreated
+{
+  #keys: '[414702.1.353022002]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnCreated'
+  QuillAction
+  {
+    Body:
+    [*
+      CapacityAndSaleBudgeFilterYear::InitializedData( GlobalOTDSOP );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModuleCorrespondence.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModuleCorrespondence.def
new file mode 100644
index 0000000..215a4bb
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModuleCorrespondence.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListModuleCorrespondence
+{
+  #keys: '[414702.1.377958446]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorModuleCorrespondence
+    {
+      #keys: '[414702.1.377958447]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'ModulePanelCorrespondence'
+        ExtractionMode: 'Selected'
+        Source: 'ListModulePanelCorrespondence'
+        Taborder: 0
+        Transformation: 'Panel'
+      ]
+    }
+    #child: listActionBarPageModuleCorrespondence
+    Component DataSetLevelModuleCorrespondence
+    {
+      #keys: '[414702.1.377958452]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuModuleCorrespondence
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelProductID","title":"闈㈡澘浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PanelStockingPointID","title":"闈㈡澘搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PanelStockingPointID"}}]'
+        ContextMenu: 'listContextMenuModuleCorrespondence'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModulePanelCorrespondence\043612.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModulePanelCorrespondence\043612.def"
new file mode 100644
index 0000000..fa5f646
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModulePanelCorrespondence\043612.def"
@@ -0,0 +1,75 @@
+Quintiq file version 2.0
+Component ListModulePanelCorrespondence id:ListModulePanelCorrespondence_612
+{
+  #keys: '[414702.1.376801881]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorModulePanelCorrespondence
+    {
+      #keys: '[414702.1.376801882]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDSOP'
+        FixedFilter: 'object.IsModule()'
+        Source: 'GlobalOTDSOP'
+        Taborder: 0
+        Transformation: 'ModulePanelCorrespondence'
+      ]
+    }
+    #child: listActionBarPageModulePanelCorrespondence_1
+    Component DataSetLevelModulePanelCorrespondence
+    {
+      #keys: '[414702.1.376801884]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuModulePanelCorrespondence_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleProductID","title":"妯$粍浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ModuleStockingPointID","title":"妯$粍搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ModuleStockingPointID"}}]'
+        ContextMenu: 'listContextMenuModulePanelCorrespondence'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListModulePanelCorrespondence_612_WebButton_OnClick
+    {
+      #keys: '[414702.1.379607377]'
+      Initiator: 'WebButton'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[749.0.26546720]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+    DelegatedResponseDefinition OnClick id:Responsedef_ListModulePanelCorrespondence_612_WebMenu_OnClick
+    {
+      #keys: '[414702.1.379530536]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[749.0.41950766]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_Panel655.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_Panel655.def
new file mode 100644
index 0000000..ffda6f0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_Panel655.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component Panel655
+{
+  #keys: '[414702.1.380172392]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bAddPanel id:bAddPanel_662
+    {
+      #keys: '[414702.1.381249855]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ADD'
+        Label: '娣诲姞闈㈡澘'
+        Taborder: 0
+      ]
+    }
+    Component bDeletePanel id:bDeletePanel_254
+    {
+      #keys: '[414702.1.381203006]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DELETE2'
+        Label: '鍒犻櫎妯$粍'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule.def
new file mode 100644
index 0000000..4624180
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelModule
+{
+  #keys: '[414702.1.377900594]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListModulePanelCorrespondence_612
+    #child: PanelModule116
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def
new file mode 100644
index 0000000..45990d7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component PanelModule116
+{
+  #keys: '[414702.1.380132983]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bAddModule id:bAddModule_100
+    {
+      #keys: '[414702.1.381202718]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ADD'
+        Label: '娣诲姞妯$粍'
+        Taborder: 0
+      ]
+    }
+    Component bDeleteModule id:bDeleteModule_801
+    {
+      #keys: '[414702.1.381202749]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'DELETE2'
+        Label: '鍒犻櫎妯$粍'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelPanel.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelPanel.def
new file mode 100644
index 0000000..fa01494
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelPanel.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelPanel
+{
+  #keys: '[414702.1.376861496]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListModuleCorrespondence
+    #child: Panel655
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModuleCorrespondence.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModuleCorrespondence.def
new file mode 100644
index 0000000..2d9a203
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModuleCorrespondence.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageModuleCorrespondence
+{
+  #keys: '[414702.1.377958449]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModulePanelCorrespondence\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModulePanelCorrespondence\0431.def"
new file mode 100644
index 0000000..50dc333
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModulePanelCorrespondence\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageModulePanelCorrespondence id:listActionBarPageModulePanelCorrespondence_1
+{
+  #keys: '[414702.1.376801883]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModuleCorrespondence.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModuleCorrespondence.def
new file mode 100644
index 0000000..3ce3009
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModuleCorrespondence.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuModuleCorrespondence
+{
+  #keys: '[414702.1.377958454]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModulePanelCorrespondence\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModulePanelCorrespondence\0431.def"
new file mode 100644
index 0000000..f4d87f1
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModulePanelCorrespondence\0431.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuModulePanelCorrespondence id:listContextMenuModulePanelCorrespondence_1
+{
+  #keys: '[414702.1.376801885]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectAll id:MenuSelectAll_958
+    {
+      #keys: '[414702.1.379687162]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..1159f2b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListModulePanelCorrespondence_612
+Response OnClick () id:Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick
+{
+  #keys: '[414702.1.378245513]'
+  CanBindMultiple: false
+  DefinitionID => /ListModulePanelCorrespondence_612/Responsedef_ListModulePanelCorrespondence_612_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bAddPanel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bAddPanel_OnClick.def
new file mode 100644
index 0000000..7a74f72
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bAddPanel_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListModulePanelCorrespondence_612
+Response OnClick (
+  structured[ModulePanelCorrespondence] selection
+) id:Response_ListModulePanelCorrespondence_612_bAddPanel_OnClick
+{
+  #keys: '[414702.1.379686642]'
+  CanBindMultiple: false
+  DefinitionID => /ListModulePanelCorrespondence_612/Responsedef_ListModulePanelCorrespondence_612_WebButton_OnClick
+  Initiator: 'bAddPanel'
+  QuillAction
+  {
+    Body:
+    [*
+      ModulePanelCorrespondence::CreatePanel( GlobalOTDSOP, selection, DataHolderSelectedProductInStocking_MP.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bDeletePanel_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bDeletePanel_OnClick.def
new file mode 100644
index 0000000..147bf0f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bDeletePanel_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListModulePanelCorrespondence_612
+Response OnClick (
+  structured[ModulePanelCorrespondence] selection
+) id:Response_ListModulePanelCorrespondence_612_bDeletePanel_OnClick
+{
+  #keys: '[414702.1.381349481]'
+  CanBindMultiple: false
+  DefinitionID => /ListModulePanelCorrespondence_612/Responsedef_ListModulePanelCorrespondence_612_WebButton_OnClick
+  Initiator: 'bDeletePanel'
+  QuillAction
+  {
+    Body:
+    [*
+      ModulePanelCorrespondence::DeletePanel( selection, DataHolderSelectedProductInStocking_MP.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bAddModule_OnClick\04361.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bAddModule_OnClick\04361.def"
new file mode 100644
index 0000000..d58737e
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bAddModule_OnClick\04361.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelModule116/bAddModule_100
+Response OnClick () id:Response_PanelModule_bAddModule_OnClick_61
+{
+  #keys: '[414702.1.381202717]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ModulePanelCorrespondence::CreateModule( GlobalOTDSOP, DataHolderSelectedProductInStocking_MP.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bDeleteModule_OnClick\043462.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bDeleteModule_OnClick\043462.def"
new file mode 100644
index 0000000..f4ae16b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bDeleteModule_OnClick\043462.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelModule116/bDeleteModule_801
+Response OnClick () id:Response_PanelModule_bDeleteModule_OnClick_462
+{
+  #keys: '[414702.1.381202748]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ModulePanelCorrespondence::DeleteModule( GlobalOTDSOP, DataHolderSelectedProductInStocking_MP.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/_ROOT_Component_FormModulePanelCorrespondence.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/_ROOT_Component_FormModulePanelCorrespondence.def
new file mode 100644
index 0000000..6338ca0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/_ROOT_Component_FormModulePanelCorrespondence.def
@@ -0,0 +1,44 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormModulePanelCorrespondence
+{
+  #keys: '[414702.1.377988264]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: PanelModule
+    #child: PanelPanel
+    Component DataHolderSelectedProductInStocking_MP
+    {
+      #keys: '[414702.1.378291666]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'structured[ProductInStockingPoint_MP]*'
+      Children:
+      [
+        Component DataExtractor666
+        {
+          #keys: '[414702.1.378291704]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'ProductInStockingPoint_MP'
+            ExtractionMode: 'Selected'
+            Source: 'FormProductInStockingPoints.ListProductInStockingPointsForProductsView'
+            Taborder: 0
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Image: 'BRUSH2'
+    Orientation: 'horizontal'
+    Title: '妯$粍&闈㈡澘瀵瑰簲鍏崇郴'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\043886.def"
similarity index 82%
copy from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
copy to "_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\043886.def"
index 31d1862..9c7b5bf 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\043886.def"
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component ListPeggingProductInSalesDemandBase
+Component ListPeggingProductInSalesDemandBase id:ListPeggingProductInSalesDemandBase_886
 {
-  #keys: '[414702.1.294477745]'
+  #keys: '[414702.1.361001747]'
   BaseType: 'WebList'
   Children:
   [
     Component DataExtractorPeggingProductInSalesDemandBase
     {
-      #keys: '[414702.1.294477746]'
+      #keys: '[414702.1.361001748]'
       BaseType: 'WebDataExtractor'
       Properties:
       [
@@ -18,14 +18,14 @@
         Transformation: 'PeggingProductInSalesDemandBase'
       ]
     }
-    #child: listActionBarPagePeggingProductInSalesDemandBase
+    #child: listActionBarPagePeggingProductInSalesDemandBase_1
     Component DataSetLevelPeggingProductInSalesDemandBase
     {
-      #keys: '[414702.1.294477751]'
+      #keys: '[414702.1.361001750]'
       BaseType: 'WebDataSetLevel'
       Children:
       [
-        #child: listContextMenuPeggingProductInSalesDemandBase
+        #child: listContextMenuPeggingProductInSalesDemandBase_1
       ]
       Properties:
       [
@@ -41,9 +41,9 @@
   ]
   ResponseDefinitions:
   [
-    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_886_WebMenu_OnClick
     {
-      #keys: '[414702.1.298881590]'
+      #keys: '[414702.1.361001742]'
       Initiator: 'WebMenu'
       IsInherited: false
       ResponseType: 'OnClick'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def
new file mode 100644
index 0000000..f311e9d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListStockingPoint
+{
+  #keys: '[414702.1.361033206]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorStockingPoint
+    {
+      #keys: '[414702.1.361033207]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProduct_MP'
+        ExtractionMode: 'Selected'
+        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
+        Taborder: 0
+        Transformation: 'PeggingProductInStockingPoint_MP'
+      ]
+    }
+    #child: listActionBarPageStockingPoint
+    Component DataSetLevelStockingPoint
+    {
+      #keys: '[414702.1.361033212]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuStockingPoint
+      ]
+      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":"搴撳瓨鐐�","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"}}]'
+        ContextMenu: 'listContextMenuStockingPoint'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def
new file mode 100644
index 0000000..048d9ff
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelContent
+{
+  #keys: '[414702.1.361001581]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelSalesDemand
+    #child: PanelStockingPoint
+  ]
+  Properties:
+  [
+    Orientation: 'tab'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def
new file mode 100644
index 0000000..4bd57ae
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelSalesDemand
+{
+  #keys: '[414702.1.361001594]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPeggingProductInSalesDemandBase_886
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '璁㈠崟'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def
new file mode 100644
index 0000000..8cc9f76
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelStockingPoint
+{
+  #keys: '[414702.1.361001613]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListStockingPoint
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '搴撳瓨鐐�'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase\0431.def"
new file mode 100644
index 0000000..258747b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProductInSalesDemandBase id:listActionBarPagePeggingProductInSalesDemandBase_1
+{
+  #keys: '[414702.1.361001749]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def
new file mode 100644
index 0000000..2cb4b65
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageStockingPoint
+{
+  #keys: '[414702.1.361033209]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase\0431.def"
similarity index 70%
copy from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
copy to "_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase\0431.def"
index 07fe2f0..596fa52 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase\0431.def"
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component listContextMenuPeggingProductInSalesDemandBase
+Component listContextMenuPeggingProductInSalesDemandBase id:listContextMenuPeggingProductInSalesDemandBase_1
 {
-  #keys: '[414702.1.294477753]'
+  #keys: '[414702.1.361001751]'
   BaseType: 'listContextMenu'
   Children:
   [
     Component mGeneratePeggingResult
     {
-      #keys: '[414702.1.298700850]'
+      #keys: '[414702.1.361001752]'
       BaseType: 'WebMenu'
       Properties:
       [
@@ -18,7 +18,7 @@
     }
     Component MenuSelectionAll
     {
-      #keys: '[414702.1.300701803]'
+      #keys: '[414702.1.361001753]'
       BaseType: 'WebMenu'
       Properties:
       [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def
new file mode 100644
index 0000000..0e32704
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuStockingPoint
+{
+  #keys: '[414702.1.361033214]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def
new file mode 100644
index 0000000..e759b98
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase_886
+Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_886_MenuSelectionAll_OnClick
+{
+  #keys: '[414702.1.361001745]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase_886/Responsedef_ListPeggingProductInSalesDemandBase_886_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def
new file mode 100644
index 0000000..a3e741d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase_886
+Response OnClick (
+  structured[PeggingProductInSalesDemandBase] selection
+) id:Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnClick
+{
+  #keys: '[414702.1.361001744]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase_886/Responsedef_ListPeggingProductInSalesDemandBase_886_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
index abac889..23460c0 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
@@ -7,7 +7,7 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: ListPeggingProductInSalesDemandBase
+    #child: PanelContent
   ]
   Properties:
   [
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
index 84c4002..c88c351 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProduct_MP/Response_pButton_bCreate_OnClick.def
@@ -16,7 +16,7 @@
       form := construct( FormNavigationPanel );
       form.ShowDockLeft();
       
-      PeggingProduct_MP::Create( GlobalOTDSOP, DataHolderCheckedProduct.Data() );
+      PeggingProduct_MP::CreateData( GlobalOTDSOP, DataHolderCheckedProduct.Data() );
     *]
     GroupServerCalls: false
   }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResult\043103.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResult\043103.def"
new file mode 100644
index 0000000..3677be0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResult\043103.def"
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListPeggingAllResult id:ListPeggingAllResult_103
+{
+  #keys: '[414702.1.368006795]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingAllResult
+    {
+      #keys: '[414702.1.368006796]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingResult'
+        ExtractionMode: 'Selected'
+        Source: 'ListPeggingResult'
+        Taborder: 0
+        Transformation: 'AllChild'
+      ]
+    }
+    #child: listActionBarPagePeggingAllResult_1
+    Component DataSetLevelPeggingAllResult
+    {
+      #keys: '[414702.1.368006798]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingAllResult_1
+      ]
+      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"}}]'
+        ContextMenu: 'listContextMenuPeggingAllResult'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingAllResult_103_WebMenu_OnClick
+    {
+      #keys: '[414702.1.368006791]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[639.0.20605876]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResultProductInStockingPoint_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResultProductInStockingPoint_MP.def
new file mode 100644
index 0000000..78098c7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResultProductInStockingPoint_MP.def
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+Component ListPeggingAllResultProductInStockingPoint_MP
+{
+  #keys: '[414702.1.369986051]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorBelow
+    {
+      #keys: '[414702.1.369986052]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingResultProductInStockingPoint_MP'
+        ExtractionMode: 'Selected'
+        Source: 'ListPeggingResultProductInStockingPoint_MP'
+        Taborder: 0
+        Transformation: 'AllChild'
+      ]
+    }
+    #child: listActionBarPageBelow
+    Component DataSetLevelBelow
+    {
+      #keys: '[414702.1.369986057]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuBelow
+      ]
+      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"}},{"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"}}]'
+        ContextMenu: 'listContextMenuBelow'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
similarity index 91%
rename from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
index 31d1862..8e70246 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
@@ -1,19 +1,19 @@
 Quintiq file version 2.0
 Component ListPeggingProductInSalesDemandBase
 {
-  #keys: '[414702.1.294477745]'
+  #keys: '[414702.1.367969253]'
   BaseType: 'WebList'
   Children:
   [
     Component DataExtractorPeggingProductInSalesDemandBase
     {
-      #keys: '[414702.1.294477746]'
+      #keys: '[414702.1.367969254]'
       BaseType: 'WebDataExtractor'
       Properties:
       [
         DataType: 'PeggingProduct_MP'
         ExtractionMode: 'Selected'
-        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
+        Source: 'ListPeggingProduct_MP'
         Taborder: 0
         Transformation: 'PeggingProductInSalesDemandBase'
       ]
@@ -21,7 +21,7 @@
     #child: listActionBarPagePeggingProductInSalesDemandBase
     Component DataSetLevelPeggingProductInSalesDemandBase
     {
-      #keys: '[414702.1.294477751]'
+      #keys: '[414702.1.367969256]'
       BaseType: 'WebDataSetLevel'
       Children:
       [
@@ -43,7 +43,7 @@
   [
     DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
     {
-      #keys: '[414702.1.298881590]'
+      #keys: '[414702.1.367969244]'
       Initiator: 'WebMenu'
       IsInherited: false
       ResponseType: 'OnClick'
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProduct_MP\04334.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProduct_MP\04334.def"
new file mode 100644
index 0000000..ad4c8e1
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProduct_MP\04334.def"
@@ -0,0 +1,59 @@
+Quintiq file version 2.0
+Component ListPeggingProduct_MP id:ListPeggingProduct_MP_34
+{
+  #keys: '[414702.1.367969270]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingProduct_MP
+    {
+      #keys: '[414702.1.367969271]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
+        Taborder: 0
+        Transformation: 'PeggingProduct_MP'
+      ]
+    }
+    #child: listActionBarPagePeggingProduct_MP_1
+    Component DataSetLevelPeggingProduct_MP
+    {
+      #keys: '[414702.1.367969273]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingProduct_MP_1
+      ]
+      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_34_WebMenu_OnClick
+    {
+      #keys: '[414702.1.367969235]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[645.0.18569723]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
index ea8def8..3dc3dec 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResult.def
@@ -1,20 +1,20 @@
 Quintiq file version 2.0
 Component ListPeggingResult
 {
-  #keys: '[414702.1.296178342]'
+  #keys: '[414702.1.367969368]'
   BaseType: 'WebList'
   Children:
   [
     Component DataExtractorPeggingResult
     {
-      #keys: '[414702.1.296178343]'
+      #keys: '[414702.1.367969369]'
       BaseType: 'WebDataExtractor'
       Properties:
       [
         DataType: 'PeggingProductInSalesDemandBase'
         ExtractionMode: 'Selected'
         FixedFilter: 'object.NumberOfPlies() = 0'
-        Source: 'FormPeggingProductInSalesDemandBase.ListPeggingProductInSalesDemandBase'
+        Source: 'ListPeggingProductInSalesDemandBase'
         Taborder: 0
         Transformation: 'PeggingResult'
       ]
@@ -22,7 +22,7 @@
     #child: listActionBarPagePeggingResult
     Component DataSetLevelPeggingResult
     {
-      #keys: '[414702.1.296178348]'
+      #keys: '[414702.1.367969371]'
       BaseType: 'WebDataSetLevel'
       Children:
       [
@@ -46,7 +46,7 @@
   [
     DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingResult_WebMenu_OnClick
     {
-      #keys: '[414702.1.302148620]'
+      #keys: '[414702.1.367969363]'
       Initiator: 'WebMenu'
       IsInherited: false
       ResponseType: 'OnClick'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResultProductInStockingPoint_MP.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResultProductInStockingPoint_MP.def
new file mode 100644
index 0000000..eddc967
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResultProductInStockingPoint_MP.def
@@ -0,0 +1,63 @@
+Quintiq file version 2.0
+Component ListPeggingResultProductInStockingPoint_MP
+{
+  #keys: '[414702.1.369908729]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorRight
+    {
+      #keys: '[414702.1.369908730]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProductInStockingPoint_MP'
+        ExtractionMode: 'Selected'
+        FixedFilter: 'object.NumberOfPlies() = 0'
+        Source: 'ListStockingPoint'
+        Taborder: 0
+        Transformation: 'PeggingResultProductInStockingPoint_MP'
+      ]
+    }
+    #child: listActionBarPageRight
+    Component DataSetLevelRight
+    {
+      #keys: '[414702.1.369908735]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuRight
+      ]
+      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"}},{"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: 'listContextMenuRight'
+        RelationFromParent: 'Child'
+        RelationRepeating: 'Child'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingResultProductInStockingPoint_MP_WebMenu_OnClick
+    {
+      #keys: '[414702.1.372190299]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[743.0.10232769]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListStockingPoint\043140.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListStockingPoint\043140.def"
new file mode 100644
index 0000000..1d0c584
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListStockingPoint\043140.def"
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListStockingPoint id:ListStockingPoint_140
+{
+  #keys: '[414702.1.367969261]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorStockingPoint
+    {
+      #keys: '[414702.1.367969262]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProduct_MP'
+        ExtractionMode: 'Selected'
+        Source: 'ListPeggingProduct_MP'
+        Taborder: 0
+        Transformation: 'PeggingProductInStockingPoint_MP'
+      ]
+    }
+    #child: listActionBarPageStockingPoint_1
+    Component DataSetLevelStockingPoint
+    {
+      #keys: '[414702.1.367969264]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuStockingPoint_1
+      ]
+      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":"搴撳瓨鐐�","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"}}]'
+        ContextMenu: 'listContextMenuStockingPoint'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListStockingPoint_140_WebMenu_OnClick
+    {
+      #keys: '[414702.1.371828990]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[739.0.19241406]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelAbove.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelAbove.def
new file mode 100644
index 0000000..3b54ed8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelAbove.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelAbove
+{
+  #keys: '[414702.1.367522096]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelLeft_865
+    #child: PanelRight_520
+  ]
+  Properties:
+  [
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelBelow.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelBelow.def
new file mode 100644
index 0000000..b690ea9
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelBelow.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelBelow
+{
+  #keys: '[414702.1.367522127]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPeggingAllResult_103
+    #child: ListPeggingAllResultProductInStockingPoint_MP
+  ]
+  Properties:
+  [
+    Border: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelContent\043807.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelContent\043807.def"
new file mode 100644
index 0000000..5c8ac6b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelContent\043807.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelContent id:PanelContent_807
+{
+  #keys: '[414702.1.367969251]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelSalesDemand_411
+    #child: PanelStockingPoint_569
+  ]
+  Properties:
+  [
+    Orientation: 'tab'
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelLeft\043865.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelLeft\043865.def"
new file mode 100644
index 0000000..6585095
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelLeft\043865.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelLeft id:PanelLeft_865
+{
+  #keys: '[414702.1.367969250]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: PanelPeggingResult570
+    #child: PanelContent_807
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelPeggingResult570.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelPeggingResult570.def
new file mode 100644
index 0000000..1c7a198
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelPeggingResult570.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelPeggingResult570
+{
+  #keys: '[414702.1.367969266]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: pButton_407
+    #child: ListPeggingProduct_MP_34
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelRight\043520.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelRight\043520.def"
new file mode 100644
index 0000000..d231871
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelRight\043520.def"
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelRight id:PanelRight_520
+{
+  #keys: '[414702.1.367969367]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPeggingResult
+    #child: ListPeggingResultProductInStockingPoint_MP
+  ]
+  Properties:
+  [
+    Border: true
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelSalesDemand\043411.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelSalesDemand\043411.def"
new file mode 100644
index 0000000..b32611a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelSalesDemand\043411.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelSalesDemand id:PanelSalesDemand_411
+{
+  #keys: '[414702.1.367969252]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListPeggingProductInSalesDemandBase
+  ]
+  Properties:
+  [
+    Taborder: 0
+    Title: '璁㈠崟'
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelStockingPoint\043569.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelStockingPoint\043569.def"
new file mode 100644
index 0000000..f391fc0
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelStockingPoint\043569.def"
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelStockingPoint id:PanelStockingPoint_569
+{
+  #keys: '[414702.1.367969260]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListStockingPoint_140
+  ]
+  Properties:
+  [
+    Taborder: 1
+    Title: '搴撳瓨鐐�'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageBelow.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageBelow.def
new file mode 100644
index 0000000..c19ab53
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageBelow.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageBelow
+{
+  #keys: '[414702.1.369986054]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingAllResult\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingAllResult\0431.def"
new file mode 100644
index 0000000..8565400
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingAllResult\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingAllResult id:listActionBarPagePeggingAllResult_1
+{
+  #keys: '[414702.1.368006797]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def
similarity index 82%
rename from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def
index 0a23391..624975c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component listActionBarPagePeggingProductInSalesDemandBase
 {
-  #keys: '[414702.1.294477748]'
+  #keys: '[414702.1.367969255]'
   BaseType: 'listActionBarPage'
   Properties:
   [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProduct_MP\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProduct_MP\0431.def"
new file mode 100644
index 0000000..ae064a6
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProduct_MP\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProduct_MP id:listActionBarPagePeggingProduct_MP_1
+{
+  #keys: '[414702.1.367969272]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
index 0cf5674..33f19b2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingResult.def
@@ -1,7 +1,7 @@
 Quintiq file version 2.0
 Component listActionBarPagePeggingResult
 {
-  #keys: '[414702.1.296178345]'
+  #keys: '[414702.1.367969370]'
   BaseType: 'listActionBarPage'
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageRight.def
new file mode 100644
index 0000000..0c41972
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageRight.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageRight
+{
+  #keys: '[414702.1.369908732]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageStockingPoint\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageStockingPoint\0431.def"
new file mode 100644
index 0000000..aba9f58
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageStockingPoint\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageStockingPoint id:listActionBarPageStockingPoint_1
+{
+  #keys: '[414702.1.367969263]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuBelow.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuBelow.def
new file mode 100644
index 0000000..d3a880a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuBelow.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuBelow
+{
+  #keys: '[414702.1.369986059]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingAllResult\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingAllResult\0431.def"
new file mode 100644
index 0000000..14b20f8
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingAllResult\0431.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingAllResult id:listContextMenuPeggingAllResult_1
+{
+  #keys: '[414702.1.368006799]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectAll
+    {
+      #keys: '[414702.1.368006800]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'DOCUMENT_SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def
similarity index 79%
rename from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def
index 07fe2f0..392a02a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component listContextMenuPeggingProductInSalesDemandBase
 {
-  #keys: '[414702.1.294477753]'
+  #keys: '[414702.1.367969257]'
   BaseType: 'listContextMenu'
   Children:
   [
     Component mGeneratePeggingResult
     {
-      #keys: '[414702.1.298700850]'
+      #keys: '[414702.1.367969258]'
       BaseType: 'WebMenu'
       Properties:
       [
@@ -16,9 +16,9 @@
         Title: '鐢熸垚Pegging缁撴灉'
       ]
     }
-    Component MenuSelectionAll
+    Component MenuSelectionAll508
     {
-      #keys: '[414702.1.300701803]'
+      #keys: '[414702.1.367969259]'
       BaseType: 'WebMenu'
       Properties:
       [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProduct_MP\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProduct_MP\0431.def"
new file mode 100644
index 0000000..d8e318f
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProduct_MP\0431.def"
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingProduct_MP id:listContextMenuPeggingProduct_MP_1
+{
+  #keys: '[414702.1.367969274]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectionAll852
+    {
+      #keys: '[414702.1.367969275]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
index 8534bcc..968020c 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
 Component listContextMenuPeggingResult
 {
-  #keys: '[414702.1.296178350]'
+  #keys: '[414702.1.367969372]'
   BaseType: 'listContextMenu'
   Children:
   [
     Component MenuSelectionAll
     {
-      #keys: '[414702.1.302117859]'
+      #keys: '[414702.1.367969373]'
       BaseType: 'WebMenu'
       Properties:
       [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuRight.def
new file mode 100644
index 0000000..b37411d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuRight.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+Component listContextMenuRight
+{
+  #keys: '[414702.1.369908737]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component MenuSelectionAll666
+    {
+      #keys: '[414702.1.372161014]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 3
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint\0431.def"
similarity index 63%
copy from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
copy to "_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint\0431.def"
index 07fe2f0..d01c55a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint\0431.def"
@@ -1,13 +1,13 @@
 Quintiq file version 2.0
-Component listContextMenuPeggingProductInSalesDemandBase
+Component listContextMenuStockingPoint id:listContextMenuStockingPoint_1
 {
-  #keys: '[414702.1.294477753]'
+  #keys: '[414702.1.367969265]'
   BaseType: 'listContextMenu'
   Children:
   [
-    Component mGeneratePeggingResult
+    Component mGeneratePeggingResult266
     {
-      #keys: '[414702.1.298700850]'
+      #keys: '[414702.1.370691806]'
       BaseType: 'WebMenu'
       Properties:
       [
@@ -16,9 +16,9 @@
         Title: '鐢熸垚Pegging缁撴灉'
       ]
     }
-    Component MenuSelectionAll
+    Component MenuSelectionAll506
     {
-      #keys: '[414702.1.300701803]'
+      #keys: '[414702.1.370691827]'
       BaseType: 'WebMenu'
       Properties:
       [
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_pButton\043407.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_pButton\043407.def"
new file mode 100644
index 0000000..49daa41
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_pButton\043407.def"
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component pButton id:pButton_407
+{
+  #keys: '[414702.1.367969267]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bCreate
+    {
+      #keys: '[414702.1.367969268]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'BOMB'
+        Label: '鍒涘缓Pegging浜у搧'
+        Taborder: 1
+      ]
+    }
+    Component bRunPeggingAlgorithm
+    {
+      #keys: '[414702.1.367969269]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'TREE'
+        Label: '杩愯Pegging绠楁硶'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingAllResult_103_MenuSelectAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingAllResult_103_MenuSelectAll_OnClick.def
new file mode 100644
index 0000000..06ce73b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingAllResult_103_MenuSelectAll_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingAllResult_103
+Response OnClick () id:Response_ListPeggingAllResult_103_MenuSelectAll_OnClick
+{
+  #keys: '[414702.1.368006793]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingAllResult_103/Responsedef_ListPeggingAllResult_103_WebMenu_OnClick
+  Initiator: 'MenuSelectAll'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def
similarity index 78%
rename from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def
index 5f3082e..90d1387 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def
@@ -1,11 +1,11 @@
 Quintiq file version 2.0
 #parent: ListPeggingProductInSalesDemandBase
-Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick
+Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick
 {
-  #keys: '[414702.1.300762760]'
+  #keys: '[414702.1.367969247]'
   CanBindMultiple: false
   DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
-  Initiator: 'MenuSelectionAll'
+  Initiator: 'MenuSelectionAll508'
   QuillAction
   {
     Body:
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
similarity index 94%
rename from _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
rename to _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
index 09b333a..3f30965 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
@@ -4,7 +4,7 @@
   structured[PeggingProductInSalesDemandBase] selection
 ) id:Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick
 {
-  #keys: '[414702.1.298700997]'
+  #keys: '[414702.1.367969246]'
   CanBindMultiple: false
   DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
   Initiator: 'mGeneratePeggingResult'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProduct_MP_34_MenuSelectionAll852_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProduct_MP_34_MenuSelectionAll852_OnClick.def
new file mode 100644
index 0000000..71cccf5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProduct_MP_34_MenuSelectionAll852_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProduct_MP_34
+Response OnClick () id:Response_ListPeggingProduct_MP_34_MenuSelectionAll852_OnClick
+{
+  #keys: '[414702.1.367969239]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProduct_MP_34/Responsedef_ListPeggingProduct_MP_34_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll852'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnCl.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnCl.def
new file mode 100644
index 0000000..3c824a0
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnCl.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingResultProductInStockingPoint_MP
+Response OnClick () id:Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnClick
+{
+  #keys: '[414702.1.372190318]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingResultProductInStockingPoint_MP/Responsedef_ListPeggingResultProductInStockingPoint_MP_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll666'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
index 5498502..bf29879 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResult_MenuSelectionAll_OnClick.def
@@ -2,7 +2,7 @@
 #parent: ListPeggingResult
 Response OnClick () id:Response_ListPeggingResult_MenuSelectionAll_OnClick
 {
-  #keys: '[414702.1.302148638]'
+  #keys: '[414702.1.367969365]'
   CanBindMultiple: false
   DefinitionID => /ListPeggingResult/Responsedef_ListPeggingResult_WebMenu_OnClick
   Initiator: 'MenuSelectionAll'
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_MenuSelectionAll506_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_MenuSelectionAll506_OnClick.def
new file mode 100644
index 0000000..1b95cb7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_MenuSelectionAll506_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListStockingPoint_140
+Response OnClick () id:Response_ListStockingPoint_140_MenuSelectionAll506_OnClick
+{
+  #keys: '[414702.1.371829177]'
+  CanBindMultiple: false
+  DefinitionID => /ListStockingPoint_140/Responsedef_ListStockingPoint_140_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll506'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick.def
new file mode 100644
index 0000000..04ac97c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick.def
@@ -0,0 +1,19 @@
+Quintiq file version 2.0
+#parent: ListStockingPoint_140
+Response OnClick (
+  structured[PeggingProductInStockingPoint_MP] selection
+) id:Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick
+{
+  #keys: '[414702.1.370662191]'
+  CanBindMultiple: false
+  DefinitionID => /ListStockingPoint_140/Responsedef_ListStockingPoint_140_WebMenu_OnClick
+  Initiator: 'mGeneratePeggingResult266'
+  QuillAction
+  {
+    Body:
+    [*
+      PeggingResultProductInStockingPoint_MP::CreateData( selection, MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelSalesDemand_411_OnActivate.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelSalesDemand_411_OnActivate.def
new file mode 100644
index 0000000..6d709dc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelSalesDemand_411_OnActivate.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelSalesDemand_411
+Response OnActivate () id:Response_PanelSalesDemand_411_OnActivate
+{
+  #keys: '[414702.1.367969238]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebPanel_OnActivate'
+  QuillAction
+  {
+    Body:
+    [*
+      ListPeggingResultProductInStockingPoint_MP.Visible( false );
+      ListPeggingAllResultProductInStockingPoint_MP.Visible( false );
+      
+      ListPeggingResult.Visible( true );
+      ListPeggingAllResult.Visible( true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelStockingPoint_569_OnActivate.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelStockingPoint_569_OnActivate.def
new file mode 100644
index 0000000..1cb6b85
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelStockingPoint_569_OnActivate.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelStockingPoint_569
+Response OnActivate () id:Response_PanelStockingPoint_569_OnActivate
+{
+  #keys: '[414702.1.367969237]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebPanel_OnActivate'
+  QuillAction
+  {
+    Body:
+    [*
+      ListPeggingResult.Visible( false );
+      ListPeggingAllResult.Visible( false );
+      
+      ListPeggingResultProductInStockingPoint_MP.Visible( true );
+      ListPeggingAllResultProductInStockingPoint_MP.Visible( true );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bCreate_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bCreate_OnClick.def
new file mode 100644
index 0000000..f92ba3a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bCreate_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: pButton_407/bCreate
+Response OnClick () id:Response_pButton_407_bCreate_OnClick
+{
+  #keys: '[414702.1.367969242]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  Precondition:
+  [*
+    return not isnull( GlobalOTDSOP ) and not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      form := construct( FormNavigationPanel );
+      form.ShowDockLeft();
+      
+      PeggingProduct_MP::CreateData( GlobalOTDSOP, DataHolderCheckedProduct.Data() );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bRunPeggingAlgorithm_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bRunPeggingAlgorithm_OnClick.def
new file mode 100644
index 0000000..ac9bb92
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bRunPeggingAlgorithm_OnClick.def
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: pButton_407/bRunPeggingAlgorithm
+Response OnClick () id:Response_pButton_407_bRunPeggingAlgorithm_OnClick
+{
+  #keys: '[414702.1.367969241]'
+  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_FormPeggingResult/_ROOT_Component_FormPeggingResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
index 9268901..39af8e4 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/_ROOT_Component_FormPeggingResult.def
@@ -7,11 +7,13 @@
   BaseType: 'WebForm'
   Children:
   [
-    #child: ListPeggingResult
+    #child: PanelAbove
+    #child: PanelBelow
   ]
   Properties:
   [
     Image: 'CUP'
+    SizeableChildren: true
     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"
index 7477409..7311b81 100644
--- "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"
@@ -4,29 +4,41 @@
   {
     forms
     {
-      form_FormPeggingProduct_MP
+      form_FormPeggingResult
       {
-        title: 'QTIANMA_JITUAN::FormPeggingProduct_MP'
+        title: 'QTIANMA_JITUAN::FormPeggingResult'
         shown: true
-        componentID: 'QTIANMA_JITUAN::FormPeggingProduct_MP'
+        componentID: 'QTIANMA_JITUAN::FormPeggingResult'
         layout
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 7
+          rowSpan: 26
           columnPosition: 1
-          columnSpan: 3
+          columnSpan: 12
         }
         components
         {
-          FormPeggingProduct_MP_pButton
+          FormPeggingResult_PanelAbove
+          {
+            sizeRatio: 0.956634174600973
+          }
+          FormPeggingResult_PanelLeft
+          {
+            sizeRatio: 0.432843330645635
+          }
+          FormPeggingResult_PanelPeggingResult570
           {
             sizeRatio: 1
           }
-          FormPeggingProduct_MP_ListPeggingProduct_MP
+          FormPeggingResult_pButton
+          {
+            sizeRatio: 1
+          }
+          FormPeggingResult_ListPeggingProduct_MP
           {
           }
-          FormPeggingProduct_MP_DataSetLevelPeggingProduct_MP
+          FormPeggingResult_DataSetLevelPeggingProduct_MP
           {
             groupDepth: -1
             sort: 'ProductID'
@@ -40,27 +52,19 @@
               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
+          FormPeggingResult_PanelContent
+          {
+            sizeRatio: 1
+            activeChild: 'PanelSalesDemand'
+          }
+          FormPeggingResult_PanelSalesDemand
+          {
+            sizeRatio: 1
+          }
+          FormPeggingResult_ListPeggingProductInSalesDemandBase
           {
           }
-          FormPeggingProductInSalesDemandBase_DataSetLevelPeggingProductInSalesDemandBase
+          FormPeggingResult_DataSetLevelPeggingProductInSalesDemandBase
           {
             groupDepth: -1
             sort: 'StartDate'
@@ -71,7 +75,7 @@
               dataType: 'string'
               index: 0
               subtotals: 'count'
-              width: 61
+              width: 62
             }
             column_StockingPointID
             {
@@ -80,7 +84,7 @@
               dataType: 'string'
               index: 1
               subtotals: ''
-              width: 94
+              width: 74
             }
             column_Quantity
             {
@@ -89,7 +93,7 @@
               dataType: 'real'
               index: 2
               subtotals: 'sum'
-              width: 59
+              width: 50
             }
             column_StartDate
             {
@@ -98,26 +102,43 @@
               dataType: 'date'
               index: 3
               subtotals: ''
-              width: 82
+              width: 83
             }
           }
-        }
-      }
-      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_PanelStockingPoint
+          {
+            sizeRatio: 1
+          }
+          FormPeggingResult_ListStockingPoint
+          {
+          }
+          FormPeggingResult_DataSetLevelStockingPoint
+          {
+            groupDepth: -1
+            sort: 'ProductID,StockingPointID'
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 141
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 113
+            }
+          }
+          FormPeggingResult_PanelRight
+          {
+            sizeRatio: 1.56715666935437
+          }
           FormPeggingResult_ListPeggingResult
           {
           }
@@ -216,27 +237,103 @@
               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
+          FormPeggingResult_ListPeggingResultProductInStockingPoint_MP
           {
           }
-          FormPeggingAllResult_DataSetLevelPeggingAllResult
+          FormPeggingResult_DataSetLevelRight
+          {
+            groupDepth: -1
+            sort: 'ProductID,StockingPointID,StartDate'
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: 'count'
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 2
+              subtotals: ''
+              width: 117
+            }
+            column_SupplyQuantity
+            {
+              columnId: 'SupplyQuantity'
+              dataPath: 'SupplyQuantity'
+              dataType: 'real'
+              index: 3
+              subtotals: 'sum'
+              width: 95
+            }
+            column_ActualFulfillmentQuantity
+            {
+              columnId: 'ActualFulfillmentQuantity'
+              dataPath: 'ActualFulfillmentQuantity'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 109
+            }
+            column_FulfillmentQuantity
+            {
+              columnId: 'FulfillmentQuantity'
+              dataPath: 'FulfillmentQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: 'sum'
+              width: 137
+            }
+            column_SupplyType
+            {
+              columnId: 'SupplyType'
+              dataPath: 'SupplyType'
+              dataType: 'string'
+              index: 6
+              subtotals: ''
+              width: 93
+            }
+            column_UnitOfMeasurementName
+            {
+              columnId: 'UnitOfMeasurementName'
+              dataPath: 'UnitOfMeasurementName'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 57
+            }
+            column_NumberOfPlies
+            {
+              columnId: 'NumberOfPlies'
+              dataPath: 'NumberOfPlies'
+              dataType: 'number'
+              index: 8
+              subtotals: ''
+              width: 56
+            }
+          }
+          FormPeggingResult_PanelBelow
+          {
+            sizeRatio: 1.04336582539903
+          }
+          FormPeggingResult_ListPeggingAllResult
+          {
+          }
+          FormPeggingResult_DataSetLevelPeggingAllResult
           {
             groupDepth: 2
             sort: 'ProductID,StockingPointID,StartDate'
@@ -322,6 +419,86 @@
               width: 150
             }
           }
+          FormPeggingResult_ListPeggingAllResultProductInStockingPoint_MP
+          {
+          }
+          FormPeggingResult_DataSetLevelBelow
+          {
+            groupDepth: 2
+            sort: 'ProductID,StockingPointID,StartDate'
+            column_ProductID
+            {
+              columnId: 'ProductID'
+              dataPath: 'ProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_StockingPointID
+            {
+              columnId: 'StockingPointID'
+              dataPath: 'StockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_StartDate
+            {
+              columnId: 'StartDate'
+              dataPath: 'StartDate'
+              dataType: 'date'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_SupplyQuantity
+            {
+              columnId: 'SupplyQuantity'
+              dataPath: 'SupplyQuantity'
+              dataType: 'real'
+              index: 3
+              subtotals: 'max'
+              width: 150
+            }
+            column_ActualFulfillmentQuantity
+            {
+              columnId: 'ActualFulfillmentQuantity'
+              dataPath: 'ActualFulfillmentQuantity'
+              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
+            }
+          }
         }
       }
     }
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\346\250\241\347\273\204_\351\235\242\346\235\277\345\205\263\347\263\273.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\346\250\241\347\273\204_\351\235\242\346\235\277\345\205\263\347\263\273.vw"
new file mode 100644
index 0000000..002540c
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\346\250\241\347\273\204_\351\235\242\346\235\277\345\205\263\347\263\273.vw"
@@ -0,0 +1,194 @@
+Quintiq file version 2.0
+{
+  viewcontents
+  {
+    forms
+    {
+      form_legacy_3
+      {
+        title: 'Products'
+        shown: true
+        componentID: 'FormProducts'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 3
+        }
+        components
+        {
+          FormProducts_PanelList
+          {
+            sizeRatio: 1
+          }
+          FormProducts_ListProduct
+          {
+          }
+          FormProducts_DataSetLevelRootProduct
+          {
+            groupDepth: -1
+            sort: 'Name'
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 0
+              subtotals: ''
+              width: 271
+            }
+          }
+          FormProducts_DataSetLevelChildProduct
+          {
+            groupDepth: -1
+            column_Name
+            {
+              columnId: 'Name'
+              dataPath: 'Name'
+              dataType: 'string'
+              title: '鍚嶇О'
+              index: 0
+              subtotals: ''
+              width: 202
+            }
+          }
+        }
+      }
+      form_FormProductInStockingPoints_1
+      {
+        title: 'Assigned to stocking points'
+        shown: true
+        componentID: 'FormProductInStockingPoints'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 7
+          rowSpan: 6
+          columnPosition: 1
+          columnSpan: 3
+        }
+        components
+        {
+          FormProductInStockingPoints_ListProductInStockingPointsForProductsView
+          {
+          }
+          FormProductInStockingPoints_ListProductInStockingPointsForProductsView_DataSetLevelProductInStockingPoints
+          {
+            groupDepth: -1
+            column_Product_MP_Name
+            {
+              columnId: 'Product_MP.Name'
+              dataPath: 'Product_MP.Name'
+              dataType: 'string'
+              title: 'Product name'
+              index: 0
+              subtotals: ''
+              width: 134
+            }
+            column_StockingPoint_MP_Name
+            {
+              columnId: 'StockingPoint_MP.Name'
+              dataPath: 'StockingPoint_MP.Name'
+              dataType: 'string'
+              title: 'Stocking point name'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+      form_FormModulePanelCorrespondence
+      {
+        title: 'QTIANMA_JITUAN::FormModulePanelCorrespondence'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormModulePanelCorrespondence'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 1
+          rowSpan: 12
+          columnPosition: 4
+          columnSpan: 9
+        }
+        components
+        {
+          FormModulePanelCorrespondence_PanelModule
+          {
+            sizeRatio: 1
+          }
+          FormModulePanelCorrespondence_ListModulePanelCorrespondence
+          {
+          }
+          FormModulePanelCorrespondence_DataSetLevelModulePanelCorrespondence
+          {
+            groupDepth: -1
+            column_ModuleProductID
+            {
+              columnId: 'ModuleProductID'
+              dataPath: 'ModuleProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_ModuleStockingPointID
+            {
+              columnId: 'ModuleStockingPointID'
+              dataPath: 'ModuleStockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+          }
+          FormModulePanelCorrespondence_PanelPanel
+          {
+            sizeRatio: 1
+          }
+          FormModulePanelCorrespondence_ListModuleCorrespondence
+          {
+          }
+          FormModulePanelCorrespondence_DataSetLevelModuleCorrespondence
+          {
+            groupDepth: -1
+            column_PanelProductID
+            {
+              columnId: 'PanelProductID'
+              dataPath: 'PanelProductID'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_PanelStockingPointID
+            {
+              columnId: 'PanelStockingPointID'
+              dataPath: 'PanelStockingPointID'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
+    }
+    userconfigurableinformation
+    {
+    }
+    page: ''
+    group: ''
+    index: 0
+    image: 'LAPTOP'
+    description: ''
+  }
+  formatversion: 2
+  id: '妯$粍_闈㈡澘鍏崇郴'
+  name: '妯$粍_闈㈡澘鍏崇郴'
+  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 2db39ee..e810f17 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"
@@ -16,7 +16,7 @@
   CREATIONUSER 'quintiq/hongjli'
   UPDATEDATETIME '2023-11-01T11:42:14'
   UPDATEUSER 'quintiq/hongjli'
-  LASTACCESSDATE '2023-11-03'
+  LASTACCESSDATE '2023-11-05'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS

--
Gitblit v1.9.3