From 879b0d420555704579c76cf3234c61010539d6fc Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期二, 07 十一月 2023 17:15:29 +0800
Subject: [PATCH] Merge branch 'dev' into dev_lrs

---
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeleteModule.qbl                                                                                      |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick#603.def           |   27 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total8.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase#886.def                            |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelContent.def                                                       |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionDate.qbl                                                                               |    8 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_AllChild_PeggingResultProduc.qbl                                                        |   23 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganCode.qbl                                                                                          |    8 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AnnualBudgetData.qbl                                                              |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModuleCorrespondence.def                                                 |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase#1.def                   |   36 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModulePanelCorrespondence#1.def                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/_ROOT_Component_FormModulePanelCorrespondence.def                                      |   44 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantity.qbl                                                              |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def                                       |   36 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_ProductID.qbl                                                                               |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total11.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def                          |    2 
 _Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl                                                                                                    |   80 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_Panel655.def                                                                 |   37 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_PanelStockingPointID.qbl                                                                                 |    7 
 _Main/BL/EDI/Broker_GlobalOTDTable_Operation.qbl                                                                                                           |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuRight.def                                                                 |   25 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateDataForProductInStocking_MP.qbl                                                                         |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProduct_MP#1.def                                                   |   25 
 _Main/BL/Type_GlobalOTDSOP/Method_AsyncCapacityAndSaleBudgeCompare.qbl                                                                                     |   24 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageRight.def                                                               |   10 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleProductID.qbl                                                                                      |    7 
 _Main/UI/MacroPlannerWebApp/Views/年度产销复盘.vw                                                                                                                |  178 +
 _Main/BL/Relations/Relation_ModulePanelCorrespondence_GlobalOTDSOP_GlobalOTDSOP_ModulePanelCorr.qbl                                                        |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocation.qbl                                                                   |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuStockingPoint.def                                       |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_bDeletePanel_OnClick.def                    |   19 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForBudget.qbl                                                          |   49 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption5.def                                                                |   35 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listActionBarPageModuleCorrespondence.def                                    |   10 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByYear.qbl                                                                           |   38 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_StartDate.qbl                                                                               |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetAnnualSalesQuantity.qbl                                                                  |   62 
 _Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl                                                          |    2 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total4.qbl                                                                                             |    7 
 _Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1.qbl                                                                                          |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelSalesDemand#411.def                                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_pButton#407.def                                                                          |   37 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyQuantity.qbl                                                                          |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForScenario.qbl                                                    |   42 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_DeletePanel.qbl                                                                                       |   21 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganName.qbl                                                                                     |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_886_mGeneratePeggingResult_OnCl.def |   23 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SynchronizeInterfaceData.qbl                                                                     |   18 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionQTY.qbl                                                                                |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def                                  |   25 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl                                                                                          |   95 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StockingPointID.qbl                                                                               |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_PlantName.qbl                                                                                          |    8 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingResultProductInStockingPoint_MP.def                                           |   63 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantityForBudget.qbl                                                     |   62 
 _Main/BL/Type_GlobalOTDSOP/Method_SetCapacityAndSaleBudgeRunStatus.qbl                                                                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def                       |   17 
 _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_PanelPeggingResult570.def                                                                |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def                                                 |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Response_pButton_bFlushData_OnClick.def                                              |   16 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateInventorySupply.qbl                                                              |   31 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListSummaryOfInboundTransaction.def                                                  |   41 
 _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_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def                                                              |    1 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total9.qbl                                                                                             |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ColumnType.qbl                                                                               |    7 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByQuarter.qbl                                                                        |   45 
 _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/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateData.qbl                                                                                 |   28 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingResultProductInStockingPoint_MP_MenuSelectionAll666_OnCl.def                   |   17 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/_ROOT_Type_Global_MappingSummaryOfInboundTransaction.qbl                                                    |    9 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total5.qbl                                                                                             |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ScenarioName.qbl                                                                             |    7 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_PlantName.qbl                                                                                     |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bCreate_OnClick.def                                                           |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_SetFilterCriteria.qbl                                                                       |   38 
 _Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_CreateData.qbl                                                                                   |    9 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_SupplyType.qbl                                                                              |    7 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl                                                                      |   12 
 _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                                                                |   10 
 _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/BL/Type_PeggingProduct_MP/StaticMethod_Create.qbl                                                                                                    |   21 
 _Main/BL/Relations/Relation_ModulePanelCorrespondence_Panel_ModulePanelCorrespondence_Module.qbl                                                           |   23 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_CreateAllChildRelation.qbl                                                               |   17 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_FilterCalculationRows.qbl                                                                      |   21 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl                                               |   41 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_NumberOfPlies.qbl                                                                           |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingAllResult#1.def                                                  |   10 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SummaryOfInboundTransaction.qbl                                                          |    6 
 _Main/BL/Type_MacroPlan/StaticMethod_DoASync#253.qbl                                                                                                       |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPageStockingPoint.def                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_listContextMenuModulePanelCorrespondence#1.def                               |   25 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeData.qbl                                                                   |   18 
 _Main/BL/Type_SummaryOfInboundTransaction/_ROOT_Type_SummaryOfInboundTransaction.qbl                                                                       |    9 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByHalfAYear.qbl                                                                      |   42 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_SetParentChildRelationship.qbl                                                           |   14 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_IsModule.qbl                                                                                             |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganName.qbl                                                                                          |    8 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl                                                                                       |    3 
 _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/BL/Type_CapacityAndSaleBudgeRunStatus/_ROOT_Type_CapacityAndSaleBudgeRunStatus.qbl                                                                   |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_pButton.def                                                                |   26 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total1.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def                                                              |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelStockingPoint#569.def                                                               |   15 
 _Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl                                                                                                    |    2 
 _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_FormCapacityAndSaleBudgeFilterYear/Response_OnCreated.def                                                            |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_MenuSelectionAll506_OnClick.def                                     |   17 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuSummaryOfInboundTransaction.def                                       |   10 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Year.qbl                                                                                     |    7 
 _Main/BL/Type_ModulePanelCorrespondence/Attribute_ModuleStockingPointID.qbl                                                                                |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def                                                           |   48 
 _var/_Main/ModelSettings/Common/Live-25/_ROOT_Role_Live-25.properties                                                                                      |  575 ++++
 _Main/BL/Type_PeggingProductInStockingPoint_MP/_ROOT_Type_PeggingProductInStockingPoint_MP.qbl                                                             |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListStockingPoint_140_mGeneratePeggingResult266_OnClick.def                               |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bPullCapacityAllocationRule_OnClick.def                        |   16 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GeneratePeggingResult.qbl                                                                |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_ListSummaryOfInboundTransaction.def                                        |   41 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/Attribute_UnitOfMeasurementName.qbl                                                                   |    7 
 _Main/UI/MacroPlannerWebApp/Views/模组_面板关系.vw                                                                                                               |  194 +
 _Main/BL/EDI/Broker_GlobalOTDTable_SummaryOfInboundTransaction.qbl                                                                                         |  127 +
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def                                               |   21 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelSalesDemand_411_OnActivate.def                                                       |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint#1.def                                                       |   36 
 _var/_Main/ModelSettings/Common/Live-27/_ROOT_Role_Live-27.properties                                                                                      |  575 ++++
 _Main/BL/Relations/Relation_Global_MappingSummaryOfInboundTransaction_GlobalOTDTable_GlobalOTDT.qbl                                                        |   23 
 _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_FormModulePanelCorrespondence/Response_ListModulePanelCorrespondence_612_MenuSelectAll_OnClick.def                   |   17 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/TypeIndex_Global_MappingSummaryOfInboundTransactionTypeIndex.qbl                                            |   28 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingAllResult_103_MenuSelectAll_OnClick.def                                        |   17 
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_Child_PeggingResultProductIn.qbl                                                        |   23 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total6.qbl                                                                                             |    7 
 _Main/BL/Relations/Relation_CapacityAndSaleBudgeRunStatus_GlobalOTDSOP_GlobalOTDSOP_CapacityAnd.qbl                                                        |   23 
 _Main/BL/Type_GlobalDTOTable/Method_CreateCapacityAndSaleBudgeTestData#500.qbl                                                                             |   74 
 _Main/UI/MacroPlannerWebApp/Views/Pegging分析.vw                                                                                                             |  327 ++
 _Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl                                                                      |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelRight#520.def                                                                       |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType493.def                                                      |   10 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Month.qbl                                                                                    |    7 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForScenario.qbl                                                        |   47 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bDeleteModule_OnClick#462.def                                  |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def                                                  |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_PanelStockingPoint_569_OnActivate.def                                                     |   20 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def                                                              |    3 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase#1.def                 |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSummaryOfInboundTransaction.def                                                 |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageBelow.def                                                               |   10 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByMonth.qbl                                                                          |   42 
 _Main/BL/Type_GlobalOTDSOP/StaticMethod_Test.qbl                                                                                                           |   14 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_dhStatus_OnDataChanged.def                                                  |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType423.def                                                    |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelBelow.def                                                                           |   16 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/StaticMethod_SynchronizeInterfaceData.qbl                                                                   |   18 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AnnualBudgetData.qbl                                                                     |    6 
 _Main/BL/Type_PeggingProduct_MP/StaticMethod_CreateData.qbl                                                                                                |   18 
 _Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SummaryOfInboundTransaction.qbl                                                   |    9 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_CreateModule.qbl                                                                                      |   19 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonGenerateTestData_OnClick#19.def                                      |    5 
 _Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType713.def                                                                 |   37 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total12.qbl                                                                                            |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def             |    4 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganCode.qbl                                                                                     |    9 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuBelow.def                                                                 |   10 
 _var/_Main/ProjSettings/MacroPlanner/Views/X_分析视图_[414702.1.50321581].vw                                                                                   |  525 +--
 _Main/BL/Relations/Relation_PeggingResultProductInStockingPoint_MP_PeggingProductInStockingPoin.qbl                                                        |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_ExecuteAsyncCapacityAndSaleBudgeCompare.qbl                                                 |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelAbove.def                                                                           |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_PanelLeft#865.def                                                                        |   15 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total2.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_cmTestAttempt_mnModulePanelCorrespondence_OnClick.def                 |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog#981.def                                            |    2 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total10.qbl                                                                                            |    7 
 _Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl                                                                                            |  265 --
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeFilterMonth/Response_OnCreated.def                                                           |   16 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total7.qbl                                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingAllResult#103.def                                                             |   60 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def                                     |   10 
 _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                                     |   40 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl                                                                                     |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProduct_MP#1.def                                                 |   10 
 _Main/BL/Type_ModulePanelCorrespondence/StaticMethod_PullCapacityAllocationRule.qbl                                                                        |   29 
 _Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1#809.qbl                                                                                      |   29 
 _Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageSummaryOfInboundTransaction.def                                     |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def                    |   23 
 _Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForBudget.qbl                                                      |   48 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bAddModule_OnClick#61.def                                      |   16 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPageStockingPoint#1.def                                                     |   10 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_StartDate.qbl                                                                                     |    7 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def                                           |    1 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listActionBarPageSummaryOfInboundTransaction.def                           |   10 
 _Main/BL/Type_CapacityAndSaleBudgeRunStatus/Attribute_RunSataus.qbl                                                                                        |    7 
 _Main/BL/Type_SummaryOfInboundTransaction/StaticMethod_FlushData.qbl                                                                                       |   55 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule.def                                                              |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListStockingPoint.def                                                  |   42 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/_ROOT_Component_FormSummaryOfInboundTransaction.def                                  |   18 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_pButton_407_bRunPeggingAlgorithm_OnClick.def                                              |   22 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_SelectGenerateChartRows.qbl                                                                    |   25 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingResult.def                                                         |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_pButton_ButtonCapacityAndSaleBudgeCompare_OnClick#231.def                   |   12 
 _Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listContextMenuSummaryOfInboundTransaction.def                             |   10 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelPanel.def                                                               |   15 
 _Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl                                                                                             |   10 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total3.qbl                                                                                             |    7 
 _Main/BL/Type_PeggingProductInStockingPoint_MP/Attribute_ProductID.qbl                                                                                     |    7 
 _Main/BL/Type_PeggingResultProductInStockingPoint_MP/StaticMethod_GenerateNewSupply.qbl                                                                    |   70 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def                                                                   |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def                   |    4 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingAllResult#1.def                                                    |   25 
 _Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_GetQuantity.qbl                                                                                |   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 
 /dev/null                                                                                                                                                  |   23 
 _Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_ListModulePanelCorrespondence#612.def                                        |   75 
 _Main/BL/Relations/Relation_SummaryOfInboundTransaction_GlobalOTDSOP_GlobalOTDSOP_SummaryOfInbo.qbl                                                        |   23 
 _Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan#127.qbl                                                                                     |    2 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelSalesDemand.def                                                   |   15 
 _Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_PanelStockingPoint.def                                                 |   15 
 _Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_Item.qbl                                                                                          |    9 
 _Main/BL/Type_SummaryOfInboundTransaction/Attribute_Item.qbl                                                                                               |    8 
 241 files changed, 6,500 insertions(+), 799 deletions(-)

diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl
index a2e490d..17c0b8c 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_AnnualBudgetData.qbl
@@ -77,7 +77,7 @@
       OthersMayDropTable: true
       OthersMayFlushTable: true
       OthersMayInsertRow: true
-      Parameters: '/owner="YUXTEST"'
+      Parameters: '/owner="OTD"'
       RecordModificationHintStrategy: 'None'
       EDIODBCLinkColumn BUSINESSSORT
       {
@@ -304,11 +304,6 @@
         OthersMayUpdateColumn: true
         ValueType: String
       }
-      EDIODBCLinkColumn PLANTNAME
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
       EDIODBCLinkColumn PRODUCTID
       {
         OthersMayUpdateColumn: true
@@ -319,17 +314,67 @@
         OthersMayUpdateColumn: true
         ValueType: String
       }
-      EDIODBCLinkColumn RESOLUTIONRATIO
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
-      EDIODBCLinkColumn SHIPPINGFORM
-      {
-        OthersMayUpdateColumn: true
-        ValueType: String
-      }
       EDIODBCLinkColumn YEARNO
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD1
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD10
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD11
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD12
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD2
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD3
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD4
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD5
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD6
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD7
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD8
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn YIELD9
       {
         OthersMayUpdateColumn: true
         ValueType: String
@@ -387,11 +432,8 @@
       EDIColumnMatch { InputColumn: MONTHLYSHEETCAPACITY9 OutputColumn: MonthlySheetCapacity9 }
       EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
       EDIColumnMatch { InputColumn: ORGANNAME OutputColumn: OrganName }
-      EDIColumnMatch { InputColumn: PLANTNAME OutputColumn: PlantName }
       EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
       EDIColumnMatch { InputColumn: PRODUCTLINEANDSPECIFICATION OutputColumn: ProductLineAndSpecification }
-      EDIColumnMatch { InputColumn: RESOLUTIONRATIO OutputColumn: ResolutionRatio }
-      EDIColumnMatch { InputColumn: SHIPPINGFORM OutputColumn: ShippingForm }
       EDIColumnMatch { InputColumn: YEARNO OutputColumn: YearNo }
     }
   }
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_Operation.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_Operation.qbl
index 0501f22..8439598 100644
--- a/_Main/BL/EDI/Broker_GlobalOTDTable_Operation.qbl
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_Operation.qbl
@@ -20,10 +20,12 @@
       TypeIndex: GlobalOTDTable_OperationTypeIndex
       EDIMLColumn ActualCapacity { Attribute: ActualCapacity ValueType: Real }
       EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
+      EDIMLColumn DestinationOrganizationId { Attribute: DestinationOrganizationId ValueType: String }
       EDIMLColumn Line { Attribute: Line ValueType: String }
       EDIMLColumn MaximumQuantity { Attribute: MaximumQuantity ValueType: Number }
       EDIMLColumn MinimumQuantity { Attribute: MinimumQuantity ValueType: Number }
       EDIMLColumn OrganCode { Attribute: OrganCode ValueType: String }
+      EDIMLColumn OrganId { Attribute: OrganId ValueType: String }
       EDIMLColumn OrganName { Attribute: OrganName ValueType: String }
       EDIMLColumn PlantName { Attribute: PlantName ValueType: String }
       EDIMLColumn ProcessSection { Attribute: ProcessSection ValueType: String }
@@ -56,6 +58,11 @@
         OthersMayUpdateColumn: true
         ValueType: String
       }
+      EDIODBCLinkColumn DESTINATIONORGANIZATIONID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
       EDIODBCLinkColumn LINE
       {
         OthersMayUpdateColumn: true
@@ -77,6 +84,11 @@
         ValueType: String
       }
       EDIODBCLinkColumn ORGANNAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ORGID
       {
         OthersMayUpdateColumn: true
         ValueType: String
@@ -121,6 +133,7 @@
       OutputTable: Global_MappingOperation
       EDIColumnMatch { InputColumn: ACTUALCAPACITY OutputColumn: ActualCapacity }
       EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
+      EDIColumnMatch { InputColumn: DESTINATIONORGANIZATIONID OutputColumn: DestinationOrganizationId }
       EDIColumnMatch { InputColumn: LINE OutputColumn: Line }
       EDIColumnMatch
       {
@@ -168,6 +181,7 @@
       }
       EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
       EDIColumnMatch { InputColumn: ORGANNAME OutputColumn: OrganName }
+      EDIColumnMatch { InputColumn: ORGID OutputColumn: OrganId }
       EDIColumnMatch { InputColumn: PLANTNAME OutputColumn: PlantName }
       EDIColumnMatch { InputColumn: PROCESSSECTION OutputColumn: ProcessSection }
       EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_SummaryOfInboundTransaction.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_SummaryOfInboundTransaction.qbl
new file mode 100644
index 0000000..90d1882
--- /dev/null
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_SummaryOfInboundTransaction.qbl
@@ -0,0 +1,127 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker GlobalOTDTable_SummaryOfInboundTransaction
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination Destination17
+  {
+    EDIMLTable Global_MappingSummaryOfInboundTransaction
+    {
+      PrimaryKeyColumns: Item
+      PrimaryKeyColumns: OrganCode
+      PrimaryKeyColumns: OrganName
+      PrimaryKeyColumns: PlantName
+      PrimaryKeyColumns: TransactionDate
+      TargetType: Global_MappingSummaryOfInboundTransaction
+      TypeIndex: Global_MappingSummaryOfInboundTransactionTypeIndex
+      EDIMLColumn Item { Attribute: Item ValueType: String }
+      EDIMLColumn OrganCode { Attribute: OrganCode ValueType: String }
+      EDIMLColumn OrganName { Attribute: OrganName ValueType: String }
+      EDIMLColumn PlantName { Attribute: PlantName ValueType: String }
+      EDIMLColumn TransactionDate { Attribute: TransactionDate ValueType: Date }
+      EDIMLColumn TransactionQTY { Attribute: TransactionQTY ValueType: Real }
+    }
+  }
+  EDIODBCLink.Source Source16
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
+    EDIODBCLinkTable MID_ANNUAL_BUDGET_REVIEW
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="OTD"'
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn ITEM
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ORGANCODE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn ORGANNAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PLANTNAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn TRANSACTIONDATE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn TRANSACTIONQTY
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation Transformation16
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_ANNUAL_BUDGET_REVIEW
+      OutputTable: Global_MappingSummaryOfInboundTransaction
+      EDIColumnMatch { InputColumn: ITEM OutputColumn: Item }
+      EDIColumnMatch { InputColumn: ORGANCODE OutputColumn: OrganCode }
+      EDIColumnMatch { InputColumn: ORGANNAME OutputColumn: OrganName }
+      EDIColumnMatch { InputColumn: PLANTNAME OutputColumn: PlantName }
+      EDIColumnMatch
+      {
+        InputColumn: TRANSACTIONDATE
+        OutputColumn: TransactionDate
+        Converter
+        {
+          XMLDefinition:
+          [*
+            <?xml version="1.0" encoding="UTF-16"?>
+            <StringToDate xmlns="http://www.quintiq.com/GEB/StringToDate" Key="@1">
+              <IsStandard>true</IsStandard>
+              <IsISO>false</IsISO>
+              <IsCustom>false</IsCustom>
+              <ConversionType>0</ConversionType>
+              <DateFormatString>DefaultDate</DateFormatString>
+              <LocaleString>Chinese (China)</LocaleString>
+              <CustomFormatString></CustomFormatString>
+            </StringToDate>
+          *]
+        }
+      }
+      EDIColumnMatch
+      {
+        InputColumn: TRANSACTIONQTY
+        OutputColumn: TransactionQTY
+        Converter
+        {
+          XMLDefinition:
+          [*
+            <?xml version="1.0" encoding="UTF-16"?>
+            <StringToReal xmlns="http://www.quintiq.com/GEB/StringToReal" Key="@1">
+              <IsStandard>true</IsStandard>
+              <IsISO>false</IsISO>
+              <IsCustom>false</IsCustom>
+              <ConversionType>0</ConversionType>
+              <NumericFormatString>Standard</NumericFormatString>
+              <LocaleString>Chinese (China)</LocaleString>
+              <CurrencyString></CurrencyString>
+              <CustomFormatString></CustomFormatString>
+            </StringToReal>
+          *]
+        }
+      }
+    }
+  }
+}
diff --git a/_Main/BL/Relations/Relation_CapacityAndSaleBudgeRunStatus_GlobalOTDSOP_GlobalOTDSOP_CapacityAnd.qbl b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeRunStatus_GlobalOTDSOP_GlobalOTDSOP_CapacityAnd.qbl
new file mode 100644
index 0000000..8f4f50d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_CapacityAndSaleBudgeRunStatus_GlobalOTDSOP_GlobalOTDSOP_CapacityAnd.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation CapacityAndSaleBudgeRunStatus_GlobalOTDSOP_GlobalOTDSOP_CapacityAndSaleBudgeRunStatus
+{
+  #keys: '1[414702.1.385990039]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.385990041][414702.1.385990040][414702.1.385990042]'
+    Cardinality: '0to1'
+    ObjectDefinition: CapacityAndSaleBudgeRunStatus
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide CapacityAndSaleBudgeRunStatus
+  {
+    #keys: '3[414702.1.385990044][414702.1.385990043][414702.1.385990045]'
+    Cardinality: '0to1'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_Global_MappingSummaryOfInboundTransaction_GlobalOTDTable_GlobalOTDT.qbl b/_Main/BL/Relations/Relation_Global_MappingSummaryOfInboundTransaction_GlobalOTDTable_GlobalOTDT.qbl
new file mode 100644
index 0000000..9ff8834
--- /dev/null
+++ b/_Main/BL/Relations/Relation_Global_MappingSummaryOfInboundTransaction_GlobalOTDTable_GlobalOTDT.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation Global_MappingSummaryOfInboundTransaction_GlobalOTDTable_GlobalOTDTable_Global_MappingSummaryOfInboundTransaction
+{
+  #keys: '1[414702.1.390426987]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDTable
+  {
+    #keys: '3[414702.1.390426989][414702.1.390426988][414702.1.390426990]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingSummaryOfInboundTransaction
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide Global_MappingSummaryOfInboundTransaction
+  {
+    #keys: '3[414702.1.390426992][414702.1.390426991][414702.1.390426993]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+}
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/Relations/Relation_SummaryOfInboundTransaction_GlobalOTDSOP_GlobalOTDSOP_SummaryOfInbo.qbl b/_Main/BL/Relations/Relation_SummaryOfInboundTransaction_GlobalOTDSOP_GlobalOTDSOP_SummaryOfInbo.qbl
new file mode 100644
index 0000000..b06730d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_SummaryOfInboundTransaction_GlobalOTDSOP_GlobalOTDSOP_SummaryOfInbo.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation SummaryOfInboundTransaction_GlobalOTDSOP_GlobalOTDSOP_SummaryOfInboundTransaction
+{
+  #keys: '1[414702.1.391291474]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide GlobalOTDSOP
+  {
+    #keys: '3[414702.1.391291476][414702.1.391291475][414702.1.391291477]'
+    Cardinality: '0to1'
+    ObjectDefinition: SummaryOfInboundTransaction
+    OwningSide: 'Reference'
+  }
+  RelationSide.RightSide SummaryOfInboundTransaction
+  {
+    #keys: '3[414702.1.391291479][414702.1.391291478][414702.1.391291480]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDSOP
+    OwningSide: 'Owned'
+  }
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl
new file mode 100644
index 0000000..ee9147b
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_Create.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Create (
+  GlobalOTDSOP this,
+  String businessTypeOrPlaceOfProductionOfArray,
+  String timeStringAndScenarioName,
+  Real quantity
+)
+{
+  TextBody:
+  [*
+    this.CapacityAndSaleBudgeChartElement( relnew, 
+                                           BusinessTypeOrPlaceOfProductionOfArray := businessTypeOrPlaceOfProductionOfArray, 
+                                           TimeStringAndScenarioName := timeStringAndScenarioName,
+                                           Quantity := quantity
+                                          );
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..b5c063f
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateData.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  GlobalOTDSOP this,
+  MacroPlans macroPlans,
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String popoa,
+  String groupBy,
+  String saleOrCapacity,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    //info( "浜ц兘/閿�鍞锛�", saleOrCapacity, "    鏃堕棿鍒嗙粍锛�", groupBy, "    鍩哄湴/浜嬩笟閮細", popoa );
+    
+    if ( groupBy = "骞�" ) {
+      CapacityAndSaleBudgeChartElement::CreateDataByYear( this, macroPlans, casbcirs, popoa, saleOrCapacity, years, months );
+    } else if ( groupBy = "鏈�" ) {
+      CapacityAndSaleBudgeChartElement::CreateDataByMonth( this, macroPlans, casbcirs, popoa, saleOrCapacity, years, months );
+    } else if ( groupBy = "瀛e害" ) {
+      CapacityAndSaleBudgeChartElement::CreateDataByQuarter( this, macroPlans, casbcirs, popoa, saleOrCapacity, years, months );
+    } else if ( groupBy = "鍗婂勾" ) {
+      CapacityAndSaleBudgeChartElement::CreateDataByHalfAYear( this, macroPlans, casbcirs, popoa, saleOrCapacity, years, months );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByHalfAYear.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByHalfAYear.qbl
new file mode 100644
index 0000000..ca7db25
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByHalfAYear.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDataByHalfAYear (
+  GlobalOTDSOP this,
+  MacroPlans macroPlans,
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String popoa,
+  String saleOrCapacity,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    calculationConditions := ifexpr( saleOrCapacity = "浜ц兘", "PanelAllocation", "SalesVolume" );
+    categories := construct( Strings );
+    if ( popoa = "闈㈡澘鍩哄湴" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.PlaceOfProductionOfArray() );
+    } else if ( popoa = "浜嬩笟閮�" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.BusinessType() );
+    }
+    
+    traverse ( years, Elements, y ) {
+      traverse ( categories, Elements, c ) {
+        for ( i := 0; i < 2; i ++ ) {
+          timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + ifexpr( i = 0, "涓婂崐骞�", "涓嬪崐骞�" ) + "-" + "鐩爣";
+          targetMonth               := selectset( months, Elements, tempM, tempM.MonthNo() >= ( ( i * 6 ) + 1  ) and 
+                                                  tempM.MonthNo() <= ( ( i + 1 ) * 6 ) );
+          filterCASBCIR             := CapacityAndSaleBudgeChartElement::FilterCalculationRows( casbcirs, c, popoa );
+          quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, "", y.YearNo(), targetMonth );
+          CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+          
+          traverse ( macroPlans, Elements, mp ) {
+            timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + ifexpr( i = 0, "涓婂崐骞�", "涓嬪崐骞�" ) + "-" + mp.ScenarioName();
+            quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, mp.ScenarioName(), y.YearNo(), targetMonth );
+            CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByMonth.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByMonth.qbl
new file mode 100644
index 0000000..ab7379c
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByMonth.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDataByMonth (
+  GlobalOTDSOP this,
+  MacroPlans macroPlans,
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String popoa,
+  String saleOrCapacity,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    calculationConditions := ifexpr( saleOrCapacity = "浜ц兘", "PanelAllocation", "SalesVolume" );
+    categories := construct( Strings );
+    if ( popoa = "闈㈡澘鍩哄湴" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.PlaceOfProductionOfArray() );
+    } else if ( popoa = "浜嬩笟閮�" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.BusinessType() );
+    }
+    
+    traverse ( years, Elements, y ) {
+      traverse ( categories, Elements, c ) {
+        traverse ( months, Elements, m ) {
+          filterCASBCIR := CapacityAndSaleBudgeChartElement::FilterCalculationRows( casbcirs, c, popoa );
+          timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + [String]m.MonthNo() + "鏈�" + "-" + "鐩爣";
+          targetMonths := construct( CapacityAndSaleBudgeFilterMonths );
+          targetMonths.Add( m );
+          quantity  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, "", y.YearNo(), targetMonths );
+          CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+         
+          traverse ( macroPlans, Elements, mp ) {
+            timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + [String]m.MonthNo() + "鏈�" + "-" + mp.ScenarioName();
+            quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, mp.ScenarioName(), y.YearNo(), targetMonths );
+            CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByQuarter.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByQuarter.qbl
new file mode 100644
index 0000000..889033f
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByQuarter.qbl
@@ -0,0 +1,45 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDataByQuarter (
+  GlobalOTDSOP this,
+  MacroPlans macroPlans,
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String popoa,
+  String saleOrCapacity,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    calculationConditions := ifexpr( saleOrCapacity = "浜ц兘", "PanelAllocation", "SalesVolume" );
+    categories := construct( Strings );
+    if ( popoa = "闈㈡澘鍩哄湴" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.PlaceOfProductionOfArray() );
+    } else if ( popoa = "浜嬩笟閮�" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.BusinessType() );
+    }
+    
+    traverse ( years, Elements, y ) {
+      traverse ( categories, Elements, c ) {
+        for ( i := 1; i < 5; i ++ ) {
+          targetMonth := selectset( months, Elements, tempM, tempM.MonthNo() >= ( ( i - 1 ) * 3 + 1  ) and 
+                                    tempM.MonthNo() <= ( i * 3 ) );
+          if ( targetMonth.Size() > 0 ) {                                              
+            timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + "绗�" + [String]i + "瀛e害" + "-" + "鐩爣";
+            info( targetMonth.Size() );
+            filterCASBCIR             := CapacityAndSaleBudgeChartElement::FilterCalculationRows( casbcirs, c, popoa );
+            quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, "", y.YearNo(), targetMonth );
+            CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+           
+            traverse ( macroPlans, Elements, mp ) {
+              timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + "绗�" + [String]i + "瀛e害" + "-" + mp.ScenarioName();
+              quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, mp.ScenarioName(), y.YearNo(), targetMonth );
+              CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+            }
+          }
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByYear.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByYear.qbl
new file mode 100644
index 0000000..d7c9acd
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_CreateDataByYear.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateDataByYear (
+  GlobalOTDSOP this,
+  MacroPlans macroPlans,
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String popoa,
+  String saleOrCapacity,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    calculationConditions := ifexpr( saleOrCapacity = "浜ц兘", "PanelAllocation", "SalesVolume" );
+    categories := construct( Strings );
+    if ( popoa = "闈㈡澘鍩哄湴" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.PlaceOfProductionOfArray() );
+    } else if ( popoa = "浜嬩笟閮�" ) {
+      categories := selectuniquevalues( casbcirs, Elements, tempCASBCIR, true, tempCASBCIR.BusinessType() );
+    }
+    
+    traverse ( years, Elements, y ) {
+      traverse ( categories, Elements, c ) {
+        timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + "鐩爣";
+        filterCASBCIR             := CapacityAndSaleBudgeChartElement::FilterCalculationRows( casbcirs, c, popoa );
+        quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, "", y.YearNo(), months );
+        CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+        
+        traverse ( macroPlans, Elements, mp ) {
+          timeStringAndScenarioName := [String]y.YearNo() + "骞�" + "-" + mp.ScenarioName();
+          quantity                  := CapacityAndSaleBudgeChartElement::GetQuantity( filterCASBCIR, calculationConditions, mp.ScenarioName(), y.YearNo(), months );
+          CapacityAndSaleBudgeChartElement::Create( this, c, timeStringAndScenarioName, quantity );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_FilterCalculationRows.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_FilterCalculationRows.qbl
new file mode 100644
index 0000000..42c90f3
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_FilterCalculationRows.qbl
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FilterCalculationRows (
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String category,
+  String popoa
+) as owning CapacityAndSaleBudgeCompareItemRows
+{
+  TextBody:
+  [*
+    resultCASBCIR := construct( CapacityAndSaleBudgeCompareItemRows );
+    
+    if ( popoa = "闈㈡澘鍩哄湴" ) {
+      resultCASBCIR := selectset( casbcirs, Elements, tempCASBCIR, tempCASBCIR.PlaceOfProductionOfArray() = category );
+    } else if ( popoa = "浜嬩笟閮�" ) {
+      resultCASBCIR := selectset( casbcirs, Elements, tempCASBCIR, tempCASBCIR.BusinessType() = category );
+    }
+    
+    return &resultCASBCIR;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_GetQuantity.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_GetQuantity.qbl
new file mode 100644
index 0000000..ae1ad4d
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_GetQuantity.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetQuantity (
+  CapacityAndSaleBudgeCompareItemRows casbcirs,
+  String calculationConditions,
+  String scenarioName,
+  Number year,
+  CapacityAndSaleBudgeFilterMonths months
+) as Real
+{
+  TextBody:
+  [*
+    total := 0.0;
+    
+    total := sum( casbcirs, Elements.CapacityAndSaleBudgeCompareItemCell, tempCASBCIC,
+                  tempCASBCIC.CapacityAndSaleBudgeCompareItemColumn().ColumnType() = calculationConditions and
+                  tempCASBCIC.CapacityAndSaleBudgeCompareItemColumn().ScenarioName() = scenarioName        and
+                  tempCASBCIC.CapacityAndSaleBudgeCompareItemColumn().Year() = year                        and
+                  exists( months, Elements, tempM, tempM.MonthNo() = tempCASBCIC.CapacityAndSaleBudgeCompareItemColumn().Month() ),
+                  [Real]tempCASBCIC.CellContent()
+                 );
+    
+    return total;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_SelectGenerateChartRows.qbl b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_SelectGenerateChartRows.qbl
new file mode 100644
index 0000000..c01c3ad
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeChartElement/StaticMethod_SelectGenerateChartRows.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SelectGenerateChartRows (
+  GlobalOTDSOP this,
+  owning CapacityAndSaleBudgeFilterItems items,
+  owning CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  owning CapacityAndSaleBudgeFilterBusinessTypes casbfbts,
+  owning CapacityAndSaleBudgeFilterYears years,
+  owning CapacityAndSaleBudgeFilterMonths months
+) as owning CapacityAndSaleBudgeCompareItemRows
+{
+  TextBody:
+  [*
+    casbcirs := construct( CapacityAndSaleBudgeCompareItemRows );
+    
+    CapacityAndSaleBudgeCompareItemCell::SetFilterCriteria( this, &items, &casbfpopoas, &casbfbts, &years, &months );
+    
+    casbcirs := selectset( this, CapacityAndSaleBudgeCompareItemRow, tempCASBCIR,
+                           exists( casbfpopoas, Elements, tempCASBFPOPOA, tempCASBFPOPOA.PlaceOfProductionOfArray() = tempCASBCIR.PlaceOfProductionOfArray() ) and
+                           exists( casbfbts, Elements, tempCASBFBT, tempCASBFBT.BusinessType() = tempCASBCIR.BusinessType() )
+                          ); 
+    
+    return &casbcirs;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
deleted file mode 100644
index 51e9eb4..0000000
--- a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateData.qbl
+++ /dev/null
@@ -1,25 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod CreateData (
-  const GlobalOTDTable globalOTDTable,
-  GlobalOTDSOP this
-)
-{
-  TextBody:
-  [*
-    traverse ( globalOTDTable, Global_MappingAnnualBudgetData, gmabd ) {
-      productCode := gmabd.ProductID();
-      row         := CapacityAndSaleBudgeCompareItemRow::CreateIfNotExist( this, gmabd.BusinessType(), gmabd.OrganCode() );
-      CapacityAndSaleBudgeCompareItemRowProduct::CreateIfNotExist( row, productCode );
-    }
-    
-    columnBusinessType             := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "浜嬩笟閮�" );
-    columnPlaceOfProductionOfArray := CapacityAndSaleBudgeCompareItemColumn::CreateIfNotExist( this, "闈㈡澘鍩哄湴" );
-    traverse( this, CapacityAndSaleBudgeCompareItemRow, row ) {
-      cell := columnBusinessType.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.BusinessType() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-      cell := columnPlaceOfProductionOfArray.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := row.PlaceOfProductionOfArray() );
-      cell.CapacityAndSaleBudgeCompareItemRow( relset, row );
-    }
-  *]
-}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocation.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocation.qbl
new file mode 100644
index 0000000..ae7cb61
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocation.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocation (
+  MacroPlans macroPlans,
+  const GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterItems capacityAndSaleBudgeFilterItems,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationDataForBudget( globalOTDTable, this, capacityAndSaleBudgeFilterItems, years, months );
+    
+    CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationDataForScenario( macroPlans, this, capacityAndSaleBudgeFilterItems, years, months );
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForBudget.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForBudget.qbl
new file mode 100644
index 0000000..02ff695
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForBudget.qbl
@@ -0,0 +1,48 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationDataForBudget (
+  const GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterItems capacityAndSaleBudgeFilterItems,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    if ( exists( capacityAndSaleBudgeFilterItems, Elements, tempCASBFI, tempCASBFI.ItemName() = "闈㈡澘鍒嗛厤閲�" ) ) {
+      columnNo := max( this, CapacityAndSaleBudgeCompareItemColumn, tempCASBCIC, true, tempCASBCIC.ColumnNo() ) + 1;
+      traverse ( years, Elements, y ) {
+        traverse ( months, Elements, m ) {
+          columnMonthName  := "闈㈡澘鍒嗛厤閲�" + "-" + [String]y.YearNo() + "骞�" + "-" + [String]m.MonthNo() + "鏈�" + "-" + "骞村害棰勭畻";
+          columnMonth      := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnMonthName, ColumnNo := columnNo, Year := y.YearNo(), Month := m.MonthNo(), ColumnType := "PanelAllocation" );
+          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+    //        info( "褰撳墠琛岋細", casbcir.RowNo(), "    琛岀粍缁囷細", casbcir.PlaceOfProductionOfArray(), "    琛屼簨涓氶儴锛�", casbcir.BusinessType() ); 
+            annualPanelAllocationQuantity := CapacityAndSaleBudgeCompareItemCell::GetPanelAllocationQuantityForBudget( globalOTDTable,
+                                                                                                                       y.YearNo(), 
+                                                                                                                       m.MonthNo(),
+                                                                                                                       casbcir.PlaceOfProductionOfArray(),
+                                                                                                                       casbcir.BusinessType()  
+                                                                                                                      );
+            monthCell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]annualPanelAllocationQuantity );
+            monthCell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+          }
+          columnNo++;
+        }
+        
+        columnYearName  := "闈㈡澘鍒嗛厤閲�" + "-" + [String]y.YearNo() + "骞�" + "-" + "total" + "-" + "骞村害棰勭畻";
+        columnYear      := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnYearName, ColumnNo := columnNo, Year := y.YearNo(), ColumnType := "PanelAllocation" );
+        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir  ) {
+          annualPanelAllocationQuantity := CapacityAndSaleBudgeCompareItemCell::GetPanelAllocationQuantityForBudget( globalOTDTable,
+                                                                                                                     y.YearNo(), 
+                                                                                                                     0,
+                                                                                                                     casbcir.PlaceOfProductionOfArray(),
+                                                                                                                     casbcir.BusinessType()
+                                                                                                                    );
+          yearCell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]annualPanelAllocationQuantity );
+          yearCell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForScenario.qbl
new file mode 100644
index 0000000..d64a23a
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreatePanelAllocationDataForScenario.qbl
@@ -0,0 +1,42 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreatePanelAllocationDataForScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterItems capacityAndSaleBudgeFilterItems,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    if ( exists( capacityAndSaleBudgeFilterItems, Elements, tempCASBFI, tempCASBFI.ItemName() = "闈㈡澘鍒嗛厤閲�" ) ) {
+      columnNo := max( this, CapacityAndSaleBudgeCompareItemColumn, tempCASBCIC, true, tempCASBCIC.ColumnNo() ) + 1;
+      traverse ( macroPlans, Elements, mp ) {
+        traverse ( years, Elements, y ) {
+          traverse ( months, Elements, m ) {
+            columnMonthName  := "闈㈡澘鍒嗛厤閲�" + "-" + [String]y.YearNo() + "骞�" + "-" + [String]m.MonthNo() + "鏈�" + "-" + mp.ScenarioName();
+            columnMonth      := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnMonthName, ColumnNo := columnNo, Year := y.YearNo(), Month := m.MonthNo(), ColumnType := "PanelAllocation", ScenarioName := mp.ScenarioName() );
+            traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+              productIDs := selectuniquevalues( casbcir, CapacityAndSaleBudgeCompareItemRowProduct, tempCASBCIRP, true, tempCASBCIRP.ProductCode() );
+              total      := CapacityAndSaleBudgeCompareItemCell::GetPanelAllocationQuantity( this, productIDs, y.YearNo(), m.MonthNo() );
+              cellMonth  := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+              cellMonth.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+              columnNo++;
+            }
+          }
+          
+          columnMonthName  := "闈㈡澘鍒嗛厤閲�" + "-" + [String]y.YearNo() + "骞�" + "-" + "total" + "-" + mp.ScenarioName();
+          columnYear       := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnMonthName, ColumnNo := columnNo, Year := y.YearNo(), ColumnType := "PanelAllocation", ScenarioName := mp.ScenarioName() );
+          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+            productIDs := selectuniquevalues( casbcir, CapacityAndSaleBudgeCompareItemRowProduct, tempCASBCIRP, true, tempCASBCIRP.ProductCode() );
+            total      := CapacityAndSaleBudgeCompareItemCell::GetPanelAllocationQuantity( this, productIDs, y.YearNo(), 0 );
+            cellYear := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+            cellYear.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+          }
+          columnNo++;
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeData.qbl
new file mode 100644
index 0000000..cb8b77f
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolumeData (
+  MacroPlans macroPlans,
+  const GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterItems capacityAndSaleBudgeFilterItems,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeDataForBudget( globalOTDTable, this, capacityAndSaleBudgeFilterItems, years, months );
+    
+    CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeDataForScenario( macroPlans, this, capacityAndSaleBudgeFilterItems, years, months );
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForBudget.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForBudget.qbl
new file mode 100644
index 0000000..3ce767b
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForBudget.qbl
@@ -0,0 +1,49 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolumeDataForBudget (
+  const GlobalOTDTable globalOTDTable,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterItems capacityAndSaleBudgeFilterItems,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    if ( exists( capacityAndSaleBudgeFilterItems, Elements, tempCASBFI, tempCASBFI.ItemName() = "閿�鍞" ) ) {
+      columnNo := max( this, CapacityAndSaleBudgeCompareItemColumn, tempCASBCIC, true, tempCASBCIC.ColumnNo() ) + 1;
+      traverse ( years, Elements, y ) {
+        traverse ( months, Elements, m ) {
+          columnMonthName  := "瀵瑰閿�鍞" + "-" + [String]y.YearNo() + "骞�" + "-" + [String]m.MonthNo() + "鏈�" + "-" + "骞村害棰勭畻";
+          columnMonth      := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnMonthName, ColumnNo := columnNo, Year := y.YearNo(), Month := m.MonthNo(), ColumnType := "SalesVolume" );
+          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+    //        info( "褰撳墠琛岋細", casbcir.RowNo(), "    琛岀粍缁囷細", casbcir.PlaceOfProductionOfArray(), "    琛屼簨涓氶儴锛�", casbcir.BusinessType() ); 
+            annualSalesQuantity := CapacityAndSaleBudgeCompareItemCell::GetAnnualSalesQuantity( globalOTDTable,
+                                                                                                y.YearNo(), 
+                                                                                                m.MonthNo(),
+                                                                                                casbcir.PlaceOfProductionOfArray(),
+                                                                                                casbcir.BusinessType()  
+                                                                                               );
+            monthCell := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]annualSalesQuantity );
+            monthCell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+          }
+          columnNo++;
+        }
+        
+        columnYearName  := "瀵瑰閿�鍞" + "-" + [String]y.YearNo() + "骞�" + "-" + "total" + "-" + "骞村害棰勭畻";
+        columnYear      := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnYearName, ColumnNo := columnNo, Year := y.YearNo(), ColumnType := "SalesVolume" );
+        traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir  ) {
+          annualSalesQuantity := CapacityAndSaleBudgeCompareItemCell::GetAnnualSalesQuantity( globalOTDTable,
+                                                                                              y.YearNo(), 
+                                                                                              0,
+                                                                                              casbcir.PlaceOfProductionOfArray(),
+                                                                                              casbcir.BusinessType()
+                                                                                             );
+          yearCell := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]annualSalesQuantity );
+          yearCell.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+        }
+        columnNo++;
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForScenario.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForScenario.qbl
new file mode 100644
index 0000000..cc0516c
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_CreateSalesVolumeDataForScenario.qbl
@@ -0,0 +1,47 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateSalesVolumeDataForScenario (
+  MacroPlans macroPlans,
+  GlobalOTDSOP this,
+  CapacityAndSaleBudgeFilterItems capacityAndSaleBudgeFilterItems,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    if ( exists( capacityAndSaleBudgeFilterItems, Elements, tempCASBFI, tempCASBFI.ItemName() = "閿�鍞" ) ) {
+      columnNo := max( this, CapacityAndSaleBudgeCompareItemColumn, tempCASBCIC, true, tempCASBCIC.ColumnNo() ) + 1;
+      traverse ( macroPlans, Elements, mp ) {
+        traverse ( years, Elements, y ) {
+          traverse ( months, Elements, m ) {
+            columnMonthName  := "瀵瑰閿�鍞" + "-" + [String]y.YearNo() + "骞�" + "-" + [String]m.MonthNo() + "鏈�" + "-" + mp.ScenarioName();
+            columnMonth      := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnMonthName, ColumnNo := columnNo, Year := y.YearNo(), Month := m.MonthNo(), ColumnType := "SalesVolume", ScenarioName := mp.ScenarioName() );
+            traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+              productIDs := selectuniquevalues( casbcir, CapacityAndSaleBudgeCompareItemRowProduct, tempCASBCIRP, true, tempCASBCIRP.ProductCode() );
+              total      := sum( mp, SalesDemand, tempSD, productIDs.Find( tempSD.ProductID() ) >= 0       and
+                                                          tempSD.StartDate().Year()  = [Number]y.YearNo()  and
+                                                          tempSD.StartDate().Month() = [Number]m.MonthNo(),
+                                                          tempSD.Quantity() * tempSD.Price() );
+              cellMonth := columnMonth.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+              cellMonth.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+              columnNo++;
+            }
+          }
+          
+          columnMonthName  := "瀵瑰閿�鍞" + "-" + [String]y.YearNo() + "骞�" + "-" + "total" + "-" + mp.ScenarioName();
+          columnYear       := this.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := columnMonthName, ColumnNo := columnNo, Year := y.YearNo(), ColumnType := "SalesVolume", ScenarioName := mp.ScenarioName() );
+          traverse ( this, CapacityAndSaleBudgeCompareItemRow, casbcir ) {
+            productIDs := selectuniquevalues( casbcir, CapacityAndSaleBudgeCompareItemRowProduct, tempCASBCIRP, true, tempCASBCIRP.ProductCode() );
+            total := sum( mp, SalesDemand, tempSD, productIDs.Find( tempSD.ProductID() ) >= 0       and
+                                                   tempSD.StartDate().Year()  = [Number]y.YearNo(),
+                                                   tempSD.Quantity() * tempSD.Price() );
+            cellYear := columnYear.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := [String]total );
+            cellYear.CapacityAndSaleBudgeCompareItemRow( relset, casbcir );
+          }
+          columnNo++;
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_ExecuteAsyncCapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_ExecuteAsyncCapacityAndSaleBudgeCompare.qbl
new file mode 100644
index 0000000..b4c7ae8
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_ExecuteAsyncCapacityAndSaleBudgeCompare.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod ExecuteAsyncCapacityAndSaleBudgeCompare (
+  GlobalOTDSOP globalOTDSOP,
+  MacroPlans macroPlans
+)
+{
+  TextBody:
+  [*
+    // hongjli Nov-6-2023 (created)
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl
new file mode 100644
index 0000000..4d9a817
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GenerateBasicDataBasedOnFilteringCriteria.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateBasicDataBasedOnFilteringCriteria (
+  GlobalOTDSOP globalOTDSOP,
+  const GlobalOTDTable globalOTDTable,
+  CapacityAndSaleBudgeFilterItems items,
+  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  CapacityAndSaleBudgeFilterBusinessTypes casbfbts
+)
+{
+  TextBody:
+  [*
+    columnPOPOA := globalOTDSOP.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := "闈㈡澘鍩哄湴", ColumnNo := 0 );
+    columnBT    := globalOTDSOP.CapacityAndSaleBudgeCompareItemColumn( relnew, ColumnName := "浜嬩笟閮�", ColumnNo := 1 );
+    
+    rowNr := 0;
+    
+    //info( "缁勭粐鍩哄湴涓暟锛�", casbfpopoas.Size(), "    浜嬩笟閮ㄤ釜鏁帮細", casbfbts.Size() );
+    
+    traverse ( casbfpopoas, Elements, casbfpopoa ) {
+      traverse ( casbfbts, Elements, casbfbt ) {
+        targetGlobal_MappingAnnualBudgetData := selectset( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, tempGMABD.OrganCode() = casbfpopoa.PlaceOfProductionOfArray() and 
+                                                           tempGMABD.BusinessType() = casbfbt.BusinessType() );
+        if ( targetGlobal_MappingAnnualBudgetData.Size() > 0 ) {
+          targetCapacityAndSaleBudgeCompareItemRow := globalOTDSOP.CapacityAndSaleBudgeCompareItemRow( relnew, 
+                                                      PlaceOfProductionOfArray := casbfpopoa.PlaceOfProductionOfArray(), 
+                                                      BusinessType             := casbfbt.BusinessType(),
+                                                      RowNo                    := rowNr );
+          rowNr++;
+          traverse ( targetGlobal_MappingAnnualBudgetData, Elements, gmabd ) {
+            targetCapacityAndSaleBudgeCompareItemRow.CapacityAndSaleBudgeCompareItemRowProduct( relnew, ProductCode := gmabd.ProductID() );   
+          }
+          cellPOPOA := columnPOPOA.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := casbfpopoa.PlaceOfProductionOfArray() );
+          cellBT    := columnBT.CapacityAndSaleBudgeCompareItemCell( relnew, CellContent := casbfbt.BusinessType() );
+          cellPOPOA.CapacityAndSaleBudgeCompareItemRow( relset, targetCapacityAndSaleBudgeCompareItemRow );
+          cellBT.CapacityAndSaleBudgeCompareItemRow( relset, targetCapacityAndSaleBudgeCompareItemRow );
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetAnnualSalesQuantity.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetAnnualSalesQuantity.qbl
new file mode 100644
index 0000000..db9e694
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetAnnualSalesQuantity.qbl
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetAnnualSalesQuantity (
+  const GlobalOTDTable globalOTDTable,
+  Number year,
+  Number month,
+  String placeOfProductionOfArray,
+  String businessType
+) as Real
+{
+  TextBody:
+  [*
+    total := 0.0;
+    
+    targetGlobal_MappingAnnualBudgetDatas := selectset( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, 
+                                                        tempGMABD.YearNo()       = [String]year             and
+                                                        tempGMABD.OrganCode()    = placeOfProductionOfArray and
+                                                        tempGMABD.BusinessType() = businessType             
+                                                       );
+    
+    if ( month = 0 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales1() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales2() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales3() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales4() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales5() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales6() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales7() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales8() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales9() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales10() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales11() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales12() );
+    } else if ( month = 1 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales1() );
+    } else if ( month = 2 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales2() );
+    } else if ( month = 3 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales3() );
+    } else if ( month = 4 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales4() );
+    } else if ( month = 5 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales5() );
+    } else if ( month = 6 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales6() );
+    } else if ( month = 7 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales7() );
+    } else if ( month = 8 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales8() );
+    } else if ( month = 9 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales9() );
+    } else if ( month = 10 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales10() );
+    } else if ( month = 11 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales11() );
+    } else if ( month = 12 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySales12() );
+    } 
+    
+    return total;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantity.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantity.qbl
new file mode 100644
index 0000000..58dc15c
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantity.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetPanelAllocationQuantity (
+  GlobalOTDSOP globalOTDSOP,
+  Strings productIDs,
+  Number year,
+  Number month
+) as Real
+{
+  TextBody:
+  [*
+    total := 0.0;
+    
+    traverse ( productIDs, Elements, pid ) {
+      targetPRPISPMPs := selectset( globalOTDSOP, PeggingProduct_MP.PeggingProductInStockingPoint_MP.PeggingResultProductInStockingPoint_MP, tempPRPISPMP, 
+                                    tempPRPISPMP.ProductID() = pid and 
+                                    tempPRPISPMP.NumberOfPlies() = 0 );                         
+      total := total + 
+               sum( targetPRPISPMPs, Elements.AllChild, tempAC, 
+                    exists( globalOTDSOP, ModulePanelCorrespondence.Panel, tempP, 
+                            tempP.Module().ModuleProductID() = pid and
+                            tempP.PanelProductID() = tempAC.ProductID() ) and
+                    tempAC.StartDate().Year() = year and
+                    ifexpr( month <> 0, tempAC.StartDate().Month() = month, true ),
+                    tempAC.FulfillmentQuantity()
+                   );
+    }
+    
+    return total;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantityForBudget.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantityForBudget.qbl
new file mode 100644
index 0000000..c615dd1
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_GetPanelAllocationQuantityForBudget.qbl
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetPanelAllocationQuantityForBudget (
+  const GlobalOTDTable globalOTDTable,
+  Number year,
+  Number month,
+  String placeOfProductionOfArray,
+  String businessType
+) as Real
+{
+  TextBody:
+  [*
+    total := 0.0;
+    
+    targetGlobal_MappingAnnualBudgetDatas := selectset( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, 
+                                                        tempGMABD.YearNo()       = [String]year             and
+                                                        tempGMABD.OrganCode()    = placeOfProductionOfArray and
+                                                        tempGMABD.BusinessType() = businessType             
+                                                       );
+    
+    if ( month = 0 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity1() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity2() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity3() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity4() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity5() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity6() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity7() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity8() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity9() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity10() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity11() )
+             + sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity12() );
+    } else if ( month = 1 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity1() );
+    } else if ( month = 2 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity2() );
+    } else if ( month = 3 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity3() );
+    } else if ( month = 4 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity4() );
+    } else if ( month = 5 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity5() );
+    } else if ( month = 6 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity6() );
+    } else if ( month = 7 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity7() );
+    } else if ( month = 8 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity8() );
+    } else if ( month = 9 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity9() );
+    } else if ( month = 10 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity10() );
+    } else if ( month = 11 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity11() );
+    } else if ( month = 12 ) {
+      total := sum( targetGlobal_MappingAnnualBudgetDatas, Elements, tempGMABD, true, [Real]tempGMABD.MonthlySheetCapacity12() );
+    } 
+    
+    return total;
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_SetFilterCriteria.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_SetFilterCriteria.qbl
new file mode 100644
index 0000000..2b671f2
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemCell/StaticMethod_SetFilterCriteria.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetFilterCriteria (
+  GlobalOTDSOP this,
+  output owning CapacityAndSaleBudgeFilterItems items,
+  output owning CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  output owning CapacityAndSaleBudgeFilterBusinessTypes casbfbts,
+  output owning CapacityAndSaleBudgeFilterYears years,
+  output owning CapacityAndSaleBudgeFilterMonths months
+)
+{
+  TextBody:
+  [*
+    if ( items.Size() = 0 ) {
+      items := selectset( this, CapacityAndSaleBudgeFilterItem, tempCASBFI, tempCASBFI.ItemName() = "閿�鍞" );
+    }
+    
+    if ( casbfpopoas.Size() = 0 ) {
+      casbfpopoas := selectset( this, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, tempCASBFPOPOA, true );
+    }
+    
+    if ( casbfbts.Size() = 0 ) {
+      casbfbts := selectset( this, CapacityAndSaleBudgeFilterBusinessType, tempCASBFBT, true );
+    }
+    
+    if ( years.Size() = 0 ) {
+      years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
+    } else {
+      years := selectsortedset( years, Elements, tempCASBFY, true, tempCASBFY.YearNo() );
+    }
+    
+    if ( months.Size() = 0 ) {
+      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, tempCASBFM, true, tempCASBFM.MonthNo() );
+    } else {
+      months := selectsortedset( months, Elements, tempCASBFM, true, tempCASBFM.MonthNo() );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ColumnType.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ColumnType.qbl
new file mode 100644
index 0000000..548bc7e
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ColumnType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ColumnType
+{
+  #keys: '3[414702.1.340387451][414702.1.340387450][414702.1.340387452]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Month.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Month.qbl
new file mode 100644
index 0000000..d88acda
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Month.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Month
+{
+  #keys: '3[414702.1.339609433][414702.1.339609432][414702.1.339609434]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ScenarioName.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ScenarioName.qbl
new file mode 100644
index 0000000..7056338
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_ScenarioName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ScenarioName
+{
+  #keys: '3[414702.1.339085005][414702.1.339085004][414702.1.339085006]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Year.qbl b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Year.qbl
new file mode 100644
index 0000000..ddcd77c
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeCompareItemColumn/Attribute_Year.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Year
+{
+  #keys: '3[414702.1.339609423][414702.1.339609422][414702.1.339609424]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl
index a41d703..7a77229 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterBusinessType/StaticMethod_InitializedData.qbl
@@ -9,7 +9,7 @@
   [*
     globalOTDSOP.CapacityAndSaleBudgeFilterBusinessType( relflush );
     
-    businessTypes := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, tempGMPMP, true, tempGMPMP.BusinessType() );
+    businessTypes := selectuniquevalues( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, true, tempGMABD.BusinessType() );
     
     traverse ( businessTypes, Elements, bt ) {
       globalOTDSOP.CapacityAndSaleBudgeFilterBusinessType( relnew, BusinessType := bt );
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl
index 3c65d07..53f41ff 100644
--- a/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl
+++ b/_Main/BL/Type_CapacityAndSaleBudgeFilterPlaceOfProductionOfArray/StaticMethod_InitializedData.qbl
@@ -9,7 +9,7 @@
   [*
     globalOTDSOP.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relflush );
     
-    organCodes := selectuniquevalues( globalOTDTable, Global_MappingOperation, tempGMO, true, tempGMO.OrganCode() );
+    organCodes := selectuniquevalues( globalOTDTable, Global_MappingAnnualBudgetData, tempGMABD, true, tempGMABD.OrganCode() );
     
     traverse ( organCodes, Elements, oc ) {
       globalOTDSOP.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relnew, PlaceOfProductionOfArray := oc );
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeRunStatus/Attribute_RunSataus.qbl b/_Main/BL/Type_CapacityAndSaleBudgeRunStatus/Attribute_RunSataus.qbl
new file mode 100644
index 0000000..9dd2404
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeRunStatus/Attribute_RunSataus.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RunSataus
+{
+  #keys: '3[414702.1.385990030][414702.1.385990029][414702.1.385990031]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_CapacityAndSaleBudgeRunStatus/_ROOT_Type_CapacityAndSaleBudgeRunStatus.qbl b/_Main/BL/Type_CapacityAndSaleBudgeRunStatus/_ROOT_Type_CapacityAndSaleBudgeRunStatus.qbl
new file mode 100644
index 0000000..83963ff
--- /dev/null
+++ b/_Main/BL/Type_CapacityAndSaleBudgeRunStatus/_ROOT_Type_CapacityAndSaleBudgeRunStatus.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type CapacityAndSaleBudgeRunStatus
+{
+  #keys: '5[414702.1.385990024][414702.1.385990022][0.0.0][414702.1.385990023][414702.1.385990025]'
+  BaseType: Object
+  StructuredName: 'CapacityAndSaleBudgeRunStatuss'
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_CreateCapacityAndSaleBudgeTestData\043500.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_CreateCapacityAndSaleBudgeTestData\043500.qbl"
new file mode 100644
index 0000000..06ec0cb
--- /dev/null
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_CreateCapacityAndSaleBudgeTestData\043500.qbl"
@@ -0,0 +1,74 @@
+Quintiq file version 2.0
+#parent: #root
+Method CreateCapacityAndSaleBudgeTestData (
+  GlobalOTDSOP globalOTDSOP,
+  const GlobalOTDTable globalOTDTable,
+  CapacityAndSaleBudgeFilterYears years,
+  Product_MPs product_MPs
+)
+{
+  TextBody:
+  [*
+    this.Global_MappingAnnualBudgetData( relflush );
+    
+    product_MPs := selectset( product_MPs, Elements, tempPMP, tempPMP.IsLeaf() and not tempPMP.IsSystem() );
+    if ( years.Size() = 0 ) {
+      years := selectset( globalOTDSOP, CapacityAndSaleBudgeFilterYear, tempCASBFY, 
+                          tempCASBFY.YearNo() = Date::ActualDate().Year()
+                         );
+    }
+    businessTypes             := selectuniquevalues( globalOTDTable, Global_MappingProduct_MP, tempGMPMP, true, tempGMPMP.BusinessType() );
+    placeOfProductionOfArrays := selectuniquevalues( globalOTDTable, Global_MappingOperation, tempGMO, true, tempGMO.OrganCode() );
+    
+    traverse ( years, Elements, year, businessTypes.Size() > 0 and placeOfProductionOfArrays.Size() > 0 ) {
+      traverse ( product_MPs, Elements, pmp ) {
+        businessType             := businessTypes.Element( Number::Random( 0, businessTypes.Size() - 1 ) );
+        placeOfProductionOfArray := placeOfProductionOfArrays.Element( Number::Random( 0, placeOfProductionOfArrays.Size() - 1 ) );
+        mappingAnnualBudget := this.Global_MappingAnnualBudgetData( relnew, 
+                                                                    ID           := OS::GenerateGUIDAsString(),
+                                                                    YearNo       := [String]year.YearNo(),
+                                                                    BusinessType := businessType,
+                                                                    OrganCode    := placeOfProductionOfArray,
+                                                                    ProductID    := pmp.ID()
+                                                                   );
+                                                                   
+        mappingAnnualBudget.MonthlyModCapacity1( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity2( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity3( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity4( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity5( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity6( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity7( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity8( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity9( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity10( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity11( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlyModCapacity12( [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity1(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity2(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity3(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity4(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity5(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity6(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity7(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity8(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity9(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity10(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity11(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySheetCapacity12(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales1(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales2(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales3(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales4(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales5(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales6(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales7(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales8(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales9(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales10(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales11(  [String]Real::Random( 20000.0, 30000.0 ) );
+        mappingAnnualBudget.MonthlySales12(  [String]Real::Random( 20000.0, 30000.0 ) );
+      }
+    }
+  *]
+}
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
deleted file mode 100644
index b83e909..0000000
--- "a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData\04312.qbl"
+++ /dev/null
@@ -1,40 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method InitTestData (
-  MacroPlan macroPlan
-)
-{
-  TextBody:
-  [*
-    //// yypsybs Oct-7-2023 (created)
-    //productCodeList := selectuniquevalues( macroPlan, Product_MP, item, item.ID() );
-    //debuginfo( "productCodeList : " + [String]productCodeList.Size() );
-    //
-    //this.Global_MappingAnnualBudgetData( relflush );
-    //if( this.Global_MappingAnnualBudgetData( relsize ) = 0 ) {
-    //  debuginfo( "create Global_MappingAnnualBudgetData test data" );
-    //  id := 1;
-    //  for( year := Date::ActualDate().Year() - 10; year <= Date::ActualDate().Year() + 5; year := year + 1 ) {
-    //    for( i := 1; i <= productCodeList.Size(); i := i + 1 ) {
-    //      productCode := productCodeList.Element( i - 1 );
-    //      mappingAnnualBudget := this.Global_MappingAnnualBudgetData( relnew, 
-    //                                                                  ID := [String]id,
-    //                                                                  YearNo := [String]year,
-    //                                                                  BusinessType := "浜嬩笟閮�" + [String](productCode.Length() mod 3),
-    //                                                                  ProductID := productCode);
-    //      id := id + 1;
-    //      for( month := 1; month <= 12; month := month + 1 ) {
-    //        field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlyModCapacity" + [String]month );
-    //        field.Set( mappingAnnualBudget, [String]Real::Random( 20000.0, 30000.0 ) );
-    //        field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySheetCapacity" + [String]month );
-    //        field.Set( mappingAnnualBudget, [String]Real::Random( 20000.0, 30000.0 ) );
-    //        field := Reflection::FindAttribute( "Global_MappingAnnualBudgetData", "MonthlySales" + [String]month );
-    //        field.Set( mappingAnnualBudget, [String]Real::Random( 20000.0, 30000.0 ) );
-    //      }
-    //    }
-    //  }
-    //  result2 := selectset( this, Global_MappingAnnualBudgetData, item, true );
-    //  debuginfo( "test MappingAnnualBudget size : " + [String]result2.Size() );
-    //}
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
deleted file mode 100644
index abebe3c..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestData.qbl
+++ /dev/null
@@ -1,20 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method InitTestData
-{
-  TextBody:
-  [*
-    //this.MatAttrSettingAndPlanStrategy( relflush );
-    
-    // yypsybs Sep-8-2023 (created)
-    //debuginfo( "CapacityAndSaleBudge::InitTestData" )
-    //mat1 := MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 1, "鎵嬫満浜嬩笟閮�", "MAT_1", "MAT_1", "TYPE_1", 233.0, "閫氱敤", "闀垮懆鏈�" );
-    //MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat1, "PROD_1", 666.0, "PROD_1_DESC" );
-    //MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat1, "PROD_2", 777.0, "PROD_2_DESC" );
-    //mat2 := MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 2, "鎵嬫満浜嬩笟閮�", "MAT_2", "MAT_2", "TYPE_2", 233.0, "涓撶敤", "闀垮懆鏈�" );
-    //MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat2, "PROD_1", 1666.0, "PROD_1_DESC" );
-    //MatAttrSettingAndPlanStrategyDetail::CreateIfNotExist( mat2, "PROD_2", 1777.0, "PROD_2_DESC" );
-    //MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 3, "鎵嬫満浜嬩笟閮�", "MAT_3", "MAT_3", "TYPE_1", 233.0, "閫氱敤", "鐭懆鏈�" );
-    //MatAttrSettingAndPlanStrategy::CreateIfNotExist( this, 4, "鎵嬫満浜嬩笟閮�", "MAT_4", "MAT_4", "TYPE_2", 233.0, "涓撶敤", "鐭懆鏈�" );
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_InitTestDataByYear.qbl b/_Main/BL/Type_GlobalDTOTable/Method_InitTestDataByYear.qbl
deleted file mode 100644
index 98dddf0..0000000
--- a/_Main/BL/Type_GlobalDTOTable/Method_InitTestDataByYear.qbl
+++ /dev/null
@@ -1,83 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-Method InitTestDataByYear (
-  MacroPlan macroPlan,
-  GlobalOTDSOP globalOTDSOP,
-  CapacityAndSaleBudgeFilterYears years,
-  CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
-  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
-  Product_MPs product_MPs
-)
-{
-  TextBody:
-  [*
-    product_MPs := selectset( product_MPs, Elements, tempPMP, tempPMP.IsLeaf() and not tempPMP.IsSystem() );
-    
-    this.Global_MappingAnnualBudgetData( relflush );
-    
-    if ( years.Size() = 0 ) {
-      years := selectset( globalOTDSOP, CapacityAndSaleBudgeFilterYear, tempCASBFY, 
-                          tempCASBFY.YearNo() = Date::ActualDate().Year()     or
-                          tempCASBFY.YearNo() = Date::ActualDate().Year() - 1 or
-                          tempCASBFY.YearNo() = Date::ActualDate().Year() + 1
-                         );
-    }
-    if ( businessTypes.Size() = 0 ) {
-      businessTypes := selectset( globalOTDSOP, CapacityAndSaleBudgeFilterBusinessType, tempCASBFBT, true );
-    }
-    if ( placeOfProductionOfArrays.Size() = 0 ) {
-      placeOfProductionOfArrays := selectset( globalOTDSOP, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, tempCASBFPOPOA, true );
-    }
-    
-    traverse ( years, Elements, year ) {
-      traverse ( product_MPs, Elements, pmp ) {
-        businessType             := businessTypes.Element( Number::Random( 0, businessTypes.Size() - 1 ) ).BusinessType();
-        placeOfProductionOfArray := placeOfProductionOfArrays.Element( Number::Random( 0, placeOfProductionOfArrays.Size() - 1 ) ).PlaceOfProductionOfArray();
-        mappingAnnualBudget := this.Global_MappingAnnualBudgetData( relnew, 
-                                                                    ID           := OS::GenerateGUIDAsString(),
-                                                                    YearNo       := [String]year.YearNo(),
-                                                                    BusinessType := businessType,
-                                                                    OrganCode    := placeOfProductionOfArray,
-                                                                    ProductID    := pmp.ID()
-                                                                   );
-                                                                   
-        mappingAnnualBudget.MonthlyModCapacity1( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity2( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity3( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity4( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity5( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity6( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity7( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity8( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity9( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity10( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity11( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlyModCapacity12( [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity1(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity2(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity3(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity4(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity5(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity6(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity7(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity8(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity9(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity10(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity11(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySheetCapacity12(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales1(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales2(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales3(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales4(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales5(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales6(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales7(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales8(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales9(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales10(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales11(  [String]Real::Random( 20000.0, 30000.0 ) );
-        mappingAnnualBudget.MonthlySales12(  [String]Real::Random( 20000.0, 30000.0 ) );
-      }
-    }
-  *]
-}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AnnualBudgetData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AnnualBudgetData.qbl
new file mode 100644
index 0000000..4794c79
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_AnnualBudgetData.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnAsyncExecuteFailure_GlobalOTDTable_AnnualBudgetData (
+  Number errorNo,
+  String errorMessage
+)
+{
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "Global_MappingAnnualBudgetData", "骞村害棰勭畻鏁版嵁" );'
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SummaryOfInboundTransaction.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SummaryOfInboundTransaction.qbl
new file mode 100644
index 0000000..cb43c89
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecuteFailure_GlobalOTDTable_SummaryOfInboundTransaction.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnAsyncExecuteFailure_GlobalOTDTable_SummaryOfInboundTransaction (
+  Number errorNo,
+  String errorMessage
+)
+{
+  TextBody: 'this.SettingFailureDetails( errorNo, errorMessage, "Global_MappingSummaryOfInboundTransaction", "鍏ュ簱浜ゆ槗姹囨��" );'
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AnnualBudgetData.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AnnualBudgetData.qbl
new file mode 100644
index 0000000..2ac19a0
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_AnnualBudgetData.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnAsyncExecute_GlobalOTDTable_AnnualBudgetData
+{
+  TextBody: 'this.SettingSuccessfulDetails( "Global_MappingAnnualBudgetData", "骞村害棰勭畻鏁版嵁", this.Global_MappingAnnualBudgetData( relsize ) );'
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SummaryOfInboundTransaction.qbl b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SummaryOfInboundTransaction.qbl
new file mode 100644
index 0000000..aabd21c
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_OnAsyncExecute_GlobalOTDTable_SummaryOfInboundTransaction.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+Method OnAsyncExecute_GlobalOTDTable_SummaryOfInboundTransaction
+{
+  TextBody: 'this.SettingSuccessfulDetails( "Global_MappingSummaryOfInboundTransaction", "鍏ュ簱浜ゆ槗姹囨��", this.Global_MappingSummaryOfInboundTransaction( relsize ) );'
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
index 8c6686f..46121bf 100644
--- a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
+++ b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizationAllMappingBrokerAndAPIByOption.qbl
@@ -21,7 +21,9 @@
   Boolean isCurrency_MP,
   Boolean isCurrencyRate_MP,
   Boolean isLane,
-  Boolean isLaneLeg
+  Boolean isLaneLeg,
+  Boolean isSummaryOfInboundTransaction,
+  Boolean isAnnualBudgetData
 )
 {
   TextBody:
@@ -115,5 +117,13 @@
       Global_BrokerExecuteLog::CreateInOperation( this, "LaneLeg", executionUser );
       this -> Global_MappingLaneLeg::CreateByAPI() -> Exception() -> Global_MappingLaneLeg::OnException( this );
     }
+    
+    if ( isSummaryOfInboundTransaction ) {
+      Global_MappingSummaryOfInboundTransaction::SynchronizeInterfaceData( this, executionUser, "Global_MappingSummaryOfInboundTransaction" );
+    }
+    
+    if ( isAnnualBudgetData ) {
+      Global_MappingAnnualBudgetData::SynchronizeInterfaceData( this, executionUser, "Global_MappingAnnualBudgetData" );
+    }
   *]
 }
diff --git "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl" "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
index 254563a..d4f4029 100644
--- "a/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
+++ "b/_Main/BL/Type_GlobalDTOTable/Method_SynchronizeDataToMacroPlan\043127.qbl"
@@ -44,7 +44,7 @@
       }
     
     if( organcodelist.Size() = 0 ){
-      organcodelist := selectvalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+      organcodelist := selectuniquevalues( this, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
       }
     
     macroPlan.InitialUnitAndStockingPoint();
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_AsyncCapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_AsyncCapacityAndSaleBudgeCompare.qbl
new file mode 100644
index 0000000..2794ebb
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_AsyncCapacityAndSaleBudgeCompare.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+Method AsyncCapacityAndSaleBudgeCompare (
+  MacroPlans macroPlans,
+  CapacityAndSaleBudgeFilterItems items,
+  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  CapacityAndSaleBudgeFilterBusinessTypes casbfbts,
+  CapacityAndSaleBudgeFilterYears years,
+  CapacityAndSaleBudgeFilterMonths months,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    this -> CapacityAndSaleBudgeCompare( macroPlans,
+                                         items,
+                                         casbfpopoas,
+                                         casbfbts,
+                                         years,
+                                         months,
+                                         globalOTDTable )
+         -> SetCapacityAndSaleBudgeRunStatus();
+  *]
+}
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
index b96a8a8..7e62097 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeChart.qbl
@@ -4,272 +4,23 @@
   MacroPlans macroPlans,
   String saleOrCapacity,
   String groupBy,
-  String byBusinessTypeOrByOrgCode,
-  CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
-  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
-  CapacityAndSaleBudgeFilterYears years,
-  CapacityAndSaleBudgeFilterMonths months,
+  String popoa,
+  owning CapacityAndSaleBudgeFilterItems items,
+  owning CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays placeOfProductionOfArrays,
+  owning CapacityAndSaleBudgeFilterBusinessTypes businessTypes,
+  owning CapacityAndSaleBudgeFilterYears years,
+  owning CapacityAndSaleBudgeFilterMonths months,
   GlobalOTDTable otdTable
 )
 {
   Description: '鎸夊叆鍙傚鐞嗘暟鎹紝浜х敓闇�瑕佺殑CapacityAndSaleBudgeChartElement'
   TextBody:
   [*
-    info( "浜ц兘/閿�鍞锛�", saleOrCapacity, "    鏃堕棿鍒嗙粍锛�", groupBy, "    鍩哄湴/浜嬩笟閮細", byBusinessTypeOrByOrgCode );
-    // 骞翠唤涓嶉�夋椂鍏ㄩ��
-    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() );
-    }
-    
-    // ====娓呯悊鏃ф暟鎹�====
     this.CapacityAndSaleBudgeChartRow( relflush );
     this.CapacityAndSaleBudgeChartElement( relflush );
     
-    // ====鎸夐潰鏉垮熀鍦板拰浜嬩笟閮ㄥ浜у搧杩涜绛涢�夊垎缁�====
-    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() );
+    casbcirs := CapacityAndSaleBudgeChartElement::SelectGenerateChartRows( this, &items, &placeOfProductionOfArrays, &businessTypes, &years, &months );
     
-    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 ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" 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 ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鍗婂勾" ) {
-        for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
-          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( 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 ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" 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 ( byBusinessTypeOrByOrgCode = "闈㈡澘鍩哄湴" and groupBy = "鏈�" ) {
-        traverse( months, Elements, month ) {
-    //      info( "process month start : " + [String]month.MonthNo() );
-          monthNoString := ifexpr( month.MonthNo() <= 9, "0" + [String]month.MonthNo(), [String]month.MonthNo() );
-          traverse( placeOfProductionOfArrayList, Elements, placeOfProductionOfArray ) {
-            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByPlaceOfProductionOfArray( rows, placeOfProductionOfArray );
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-绗�" + monthNoString + "鏈�-鐩爣",
-                                                   BusinessTypeOrPlaceOfProductionOfArray := placeOfProductionOfArray, 
-                                                   Quantity := ifexpr( 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( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" 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 ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" and groupBy = "鍗婂勾" ) {
-        for( halfNo := 1; halfNo <= 2; halfNo := halfNo + 1 ) {
-          traverse( businessTypeList, Elements, businessType ) {
-            productCodeList := CapacityAndSaleBudgeChartRow::GetProductCodesByBusinessType( rows, businessType );
-            this.CapacityAndSaleBudgeChartElement( relnew, 
-                                                   TimeStringAndScenarioName := [String]year.YearNo() + "骞�-" + ifexpr( halfNo = 1, "涓�", "涓�" ) + "鍗婂勾-鐩爣",
-                                                   BusinessTypeOrPlaceOfProductionOfArray := businessType, 
-                                                   Quantity := ifexpr( 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 ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" 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 ( byBusinessTypeOrByOrgCode = "浜嬩笟閮�" 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( "==鈫�==" );
-    ////}
+    CapacityAndSaleBudgeChartElement::CreateData( this, macroPlans, casbcirs, popoa, groupBy, saleOrCapacity, years, months );
   *]
 }
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
index 8b53f33..8a96743 100644
--- a/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_CapacityAndSaleBudgeCompare.qbl
@@ -3,87 +3,52 @@
 Method CapacityAndSaleBudgeCompare (
   MacroPlans macroPlans,
   CapacityAndSaleBudgeFilterItems items,
+  CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  CapacityAndSaleBudgeFilterBusinessTypes casbfbts,
   CapacityAndSaleBudgeFilterYears years,
   CapacityAndSaleBudgeFilterMonths months,
   const GlobalOTDTable globalOTDTable
-)
+) as stream[GlobalOTDSOP]
 {
   Description: 'todo : mappingParent鏀逛负mpSync, random鍒犱簡'
   TextBody:
   [*
-    if ( years.Size() = 0 ) {
-      years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
-    }
-    if ( months.Size() = 0 ) {
-      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, item, item.MonthNo() );
-    }
-    
     this.CapacityAndSaleBudgeCompareItemRow( relflush );
     this.CapacityAndSaleBudgeCompareItemColumn( relflush );
     
-    CapacityAndSaleBudgeCompareItemCell::CreateData( globalOTDTable, this );
-    
-    if ( CapacityAndSaleBudgeFilterItem::Contains( items, "闈㈡澘鍒嗛厤閲�" ) ) {
-      traverse ( years, Elements, year ) {
-        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationBudget( this, months, year, globalOTDTable );
-        CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocationByScenario( macroPlans, this, months, year );
-      }
+    //CapacityAndSaleBudgeCompareItemCell::SetFilterCriteria( this, &items, &casbfpopoas, &casbfbts, &years, &months );
+    //---------------------------------------------------------------------------
+    if ( items.Size() = 0 ) {
+      items := selectset( this, CapacityAndSaleBudgeFilterItem, tempCASBFI, tempCASBFI.ItemName() = "閿�鍞" );
     }
     
-    if ( CapacityAndSaleBudgeFilterItem::Contains( items, "閿�鍞" ) ) {
-      traverse ( years, Elements, year ) {
-        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolume( this, months, year, globalOTDTable );
-        CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeByScenario( macroPlans, this, months, year );
-      }
+    if ( casbfpopoas.Size() = 0 ) {
+      casbfpopoas := selectset( this, CapacityAndSaleBudgeFilterPlaceOfProductionOfArray, tempCASBFPOPOA, true );
     }
     
-    // 澶у紶鐩堝埄棰�
-    //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 );
-    //    }
-    //  }
-    //}
+    if ( casbfbts.Size() = 0 ) {
+      casbfbts := selectset( this, CapacityAndSaleBudgeFilterBusinessType, tempCASBFBT, true );
+    }
     
-    // 璁剧疆rowNo鍜宑olumnNo
-    rowNo := 1;
-    rowSorted := selectsortedset( this, CapacityAndSaleBudgeCompareItemRow, item, item.PlaceOfProductionOfArray() + "_" + item.BusinessType() );
-    traverse( rowSorted, Elements, item ) {
-      item.RowNo( rowNo );
-      rowNo := rowNo + 1;
+    if ( years.Size() = 0 ) {
+      years := selectset( this, CapacityAndSaleBudgeFilterYear, tempCASBFY, tempCASBFY.YearNo() = Date::ActualDate().Year() );
+    } else {
+      years := selectsortedset( years, Elements, tempCASBFY, true, tempCASBFY.YearNo() );
     }
-    columnNo := 1;
-    traverse( this, CapacityAndSaleBudgeCompareItemColumn, item ) {
-      item.ColumnNo( columnNo );
-      columnNo := columnNo + 1;
+    
+    if ( months.Size() = 0 ) {
+      months := selectsortedset( this, CapacityAndSaleBudgeFilterMonth, tempCASBFM, true, tempCASBFM.MonthNo() );
+    } else {
+      months := selectsortedset( months, Elements, tempCASBFM, true, tempCASBFM.MonthNo() );
     }
+    //---------------------------------------------------------------------------
+    
+    CapacityAndSaleBudgeCompareItemCell::GenerateBasicDataBasedOnFilteringCriteria( this, globalOTDTable, items, casbfpopoas, casbfbts );
+    
+    CapacityAndSaleBudgeCompareItemCell::CreateSalesVolumeData( macroPlans, globalOTDTable, this, items, years, months );
+    
+    CapacityAndSaleBudgeCompareItemCell::CreatePanelAllocation( macroPlans, globalOTDTable, this, items, years, months );
+    
+    return emit( this );
   *]
 }
diff --git a/_Main/BL/Type_GlobalOTDSOP/Method_SetCapacityAndSaleBudgeRunStatus.qbl b/_Main/BL/Type_GlobalOTDSOP/Method_SetCapacityAndSaleBudgeRunStatus.qbl
new file mode 100644
index 0000000..e51a52c
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/Method_SetCapacityAndSaleBudgeRunStatus.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+Method SetCapacityAndSaleBudgeRunStatus
+{
+  TextBody:
+  [*
+    this.CapacityAndSaleBudgeRunStatus( relflush );
+    this.CapacityAndSaleBudgeRunStatus( relnew, RunSataus := 0 );
+  *]
+}
diff --git a/_Main/BL/Type_GlobalOTDSOP/StaticMethod_Test.qbl b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_Test.qbl
new file mode 100644
index 0000000..4845329
--- /dev/null
+++ b/_Main/BL/Type_GlobalOTDSOP/StaticMethod_Test.qbl
@@ -0,0 +1,14 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Test (
+  GlobalOTDSOP this,
+  MacroPlans macroPlans,
+  owning CapacityAndSaleBudgeFilterItems items,
+  owning CapacityAndSaleBudgeFilterPlaceOfProductionOfArrays casbfpopoas,
+  owning CapacityAndSaleBudgeFilterBusinessTypes casbfbts,
+  owning CapacityAndSaleBudgeFilterYears years,
+  owning CapacityAndSaleBudgeFilterMonths months,
+  const GlobalOTDTable globalOTDTable
+)
+{
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_CreateData.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_CreateData.qbl
new file mode 100644
index 0000000..6905cec
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_CreateData.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateData (
+  GlobalOTDTable this,
+  String executionUser
+)
+{
+  TextBody: 'Global_MappingAnnualBudgetData::SynchronizeInterfaceData( this, executionUser, "Global_MappingAnnualBudgetData" );'
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..7c8452d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetData/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingAnnualBudgetData( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_AnnualBudgetData().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_Item.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_Item.qbl
new file mode 100644
index 0000000..3e56d2f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_Item.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Item
+{
+  #keys: '3[414702.1.390427039][414702.1.390427038][414702.1.390427040]'
+  Description: '鐗╂枡'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganCode.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganCode.qbl
new file mode 100644
index 0000000..23c3a79
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganCode.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganCode
+{
+  #keys: '3[414702.1.390427006][414702.1.390427005][414702.1.390427007]'
+  Description: '缁勭粐缂栫爜'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganName.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganName.qbl
new file mode 100644
index 0000000..9a7761f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_OrganName.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganName
+{
+  #keys: '3[414702.1.390427016][414702.1.390427015][414702.1.390427017]'
+  Description: '缁勭粐鍚嶇О'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_PlantName.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_PlantName.qbl
new file mode 100644
index 0000000..1541f58
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_PlantName.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlantName
+{
+  #keys: '3[414702.1.390427026][414702.1.390427025][414702.1.390427027]'
+  Description: '宸ュ巶鍚嶇О'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionDate.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionDate.qbl
new file mode 100644
index 0000000..648a6a8
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionDate.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TransactionDate
+{
+  #keys: '3[414702.1.390427059][414702.1.390427058][414702.1.390427060]'
+  IsReadOnly: true
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionQTY.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionQTY.qbl
new file mode 100644
index 0000000..99766dd
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/Attribute_TransactionQTY.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TransactionQTY
+{
+  #keys: '3[414702.1.390427049][414702.1.390427048][414702.1.390427050]'
+  Description: '鍏ュ簱鏁伴噺'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/StaticMethod_SynchronizeInterfaceData.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/StaticMethod_SynchronizeInterfaceData.qbl
new file mode 100644
index 0000000..aa3fb6b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/StaticMethod_SynchronizeInterfaceData.qbl
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizeInterfaceData (
+  GlobalOTDTable globalOTDTable,
+  String executionUser,
+  String brokerName
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingSummaryOfInboundTransaction( relflush );
+    isCanRun := Global_BrokerExecuteLog::CanRun( globalOTDTable, brokerName );
+    if ( not isCanRun ) {  
+      Global_BrokerExecuteLog::CreateInOperation( globalOTDTable, brokerName, executionUser );
+      globalOTDTable.GlobalOTDTable_SummaryOfInboundTransaction().AsyncExecute();
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/TypeIndex_Global_MappingSummaryOfInboundTransactionTypeIndex.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/TypeIndex_Global_MappingSummaryOfInboundTransactionTypeIndex.qbl
new file mode 100644
index 0000000..5cbba27
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/TypeIndex_Global_MappingSummaryOfInboundTransactionTypeIndex.qbl
@@ -0,0 +1,28 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex Global_MappingSummaryOfInboundTransactionTypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: OrganCode
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: PlantName
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: OrganName
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: Item
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: TransactionDate
+    }
+  ]
+}
diff --git a/_Main/BL/Type_Global_MappingAnnualBudgetReview/_ROOT_Type_Global_MappingSummaryOfInboundTransaction.qbl b/_Main/BL/Type_Global_MappingAnnualBudgetReview/_ROOT_Type_Global_MappingSummaryOfInboundTransaction.qbl
new file mode 100644
index 0000000..f5f75de
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingAnnualBudgetReview/_ROOT_Type_Global_MappingSummaryOfInboundTransaction.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingSummaryOfInboundTransaction
+{
+  #keys: '5[414702.1.390426984][414702.1.390426982][0.0.0][414702.1.390426983][414702.1.390426985]'
+  BaseType: Object
+  StructuredName: 'Global_MappingSummaryOfInboundTransactions'
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
index cf9ba2f..4370c77 100644
--- a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -31,7 +31,8 @@
       globalOTDTable.Global_MappingCurrency_MP( relnew,
                                                 ID     := guard( datalist.Get( j ).Get( "id" ).GetString(), "" ),
                                                 Name   := guard( datalist.Get( j ).Get( "name" ).GetString(), "" ),
-                                                IsBase := guard( datalist.Get( j ).Get( "isbase" ).GetBoolean(), false )
+    //                                            IsBase := guard( datalist.Get( j ).Get( "isbase" ).GetBoolean(), false )
+                                                IsBase := ifexpr( datalist.Get( j ).Get( "isbase" ).GetString() = "TRUE", true, false )
                                                );
     }
     
diff --git "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl" "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
index 70b4b76..f3ad992 100644
--- "a/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
+++ "b/_Main/BL/Type_MacroPlan/StaticMethod_DoASync\043253.qbl"
@@ -22,9 +22,10 @@
     organcodelist := selectvalues( businessType, OrganCode, organ, true, organ.OrganCodeName() );
     
     if( organcodelist.Size() = 0 ){
-      organcodelist := selectvalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
+      organcodelist := selectuniquevalues( globalOTDTable, Global_MappingOperationBOM, bom,true, bom.OrganCode() );
       }
     
+    info( "Organcode list : " + organcodelist.ToString( "-" ) );
     info( "KeyProduct : " + [String]isKeyProduct )
     info( "Create purchase supply material : " + [String]createPurchaseSupplyMaterial )
     
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/StaticMethod_PullCapacityAllocationRule.qbl b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_PullCapacityAllocationRule.qbl
new file mode 100644
index 0000000..978a5a5
--- /dev/null
+++ b/_Main/BL/Type_ModulePanelCorrespondence/StaticMethod_PullCapacityAllocationRule.qbl
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod PullCapacityAllocationRule (
+  GlobalOTDSOP globalOTDSOP
+)
+{
+  TextBody:
+  [*
+    globalOTDSOP.ModulePanelCorrespondence( relflush );
+    
+    traverse ( globalOTDSOP, CapacityAllocationResultsRuleConfiguration, carrc ) {
+      module := select( globalOTDSOP, ModulePanelCorrespondence, tempMPC, 
+                        tempMPC.ModuleProductID() = carrc.ModuleMaterialCode() and 
+                        tempMPC.ModuleStockingPointID() = carrc.StockingPointID() );
+      if ( isnull( module ) ) {
+        module := globalOTDSOP.ModulePanelCorrespondence( relnew, 
+                                                          ModuleProductID       := carrc.ModuleMaterialCode(),
+                                                          ModuleStockingPointID := carrc.StockingPointID(),
+                                                          IsModule              := true );
+      }
+      
+      isExists := exists( module, Panel, tempP, tempP.PanelProductID() = carrc.PanelMaterialCode() );
+      if ( not isExists ) {
+        panel := globalOTDSOP.ModulePanelCorrespondence( relnew, PanelProductID := carrc.PanelMaterialCode() );
+        panel.Module( relset, module );
+      }
+    }
+  *]
+}
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_CreateAllGroupChildRelation.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl
deleted file mode 100644
index 3e19eca..0000000
--- a/_Main/BL/Type_PeggingResult/StaticMethod_CreateAllGroupChildRelation.qbl
+++ /dev/null
@@ -1,7 +0,0 @@
-Quintiq file version 2.0
-#parent: #root
-StaticMethod CreateAllGroupChildRelation (
-  PeggingProductInSalesDemandBase ppisdb
-)
-{
-}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
index b121c0d..59d58f3 100644
--- a/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_CreateData.qbl
@@ -22,7 +22,7 @@
       }
       
       PeggingResult::CreateAllChildRelation( ppisdb );
-      PeggingResult::CreateAllGroupChildRelation( ppisdb );
+      PeggingResult::SetAllChildRelation1( ppisdb );
     }
   *]
 }
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
index cc10732..269e335 100644
--- a/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_GenerateNewSupply.qbl
@@ -34,12 +34,14 @@
     //          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++;
-            fulfillmentQuantity := ( dd.Quantity() / ns.Quantity() ) * fulfillmentQuantity;
     //        info( "--------------------------------------------------------------" );
-            PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, fulfillmentQuantity, childPeggingResult );
+            PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResult );
             numberOfPlies--;
           }
         }
@@ -53,11 +55,13 @@
     //    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( "--------------------------------------------------------------" );
-          PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, fulfillmentQuantity, childPeggingResult );
+          PeggingResult::GeneratePeggingResult( peggingProductInSalesDemandBase, numberOfPlies, smp1, actualFulfillmentQuantity, orderFulfillmentQuantity, childPeggingResult );
           numberOfPlies--;
         }
       }
diff --git "a/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1\043809.qbl" "b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1\043809.qbl"
new file mode 100644
index 0000000..19a86a9
--- /dev/null
+++ "b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1\043809.qbl"
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetAllChildRelation1 (
+  PeggingProductInSalesDemandBase ppisdb
+)
+{
+  TextBody:
+  [*
+    traverse ( ppisdb, PeggingResult, pr, pr.NumberOfPlies() = 0 ) {
+      targetPeggingResults := selectset( pr, AllChild, tempPR, tempPR.SupplyType() = "搴撳瓨渚涘簲" );
+      traverse ( targetPeggingResults, Elements, cpr ) {
+        targetChild := select( pr, AllChild, tempPR,
+                               tempPR.PeggingProductInSalesDemandBase().SalesDemandBaseID() = cpr.PeggingProductInSalesDemandBase().SalesDemandBaseID() and
+                               tempPR.ProductID() = cpr.ProductID()                                                                                     and
+                               tempPR.StockingPointID() = cpr.StockingPointID()                                                                         and
+                               tempPR.StartDate() = cpr.StartDate()                                                                                     and
+                               tempPR.SupplyType() <> "搴撳瓨渚涘簲"
+                              );
+        if ( not isnull( targetChild ) ) {
+          info( "搴撳瓨渚涘簲鏁伴噺锛�", cpr.SupplyQuantity(), "    鍏朵粬渚涘簲鏁伴噺锛�", targetChild.SupplyQuantity() );
+          targetChild.SupplyQuantity( targetChild.SupplyQuantity() + cpr.SupplyQuantity() );
+          targetChild.FulfillmentQuantity( targetChild.FulfillmentQuantity() + cpr.FulfillmentQuantity() );
+          targetChild.SupplyType( targetChild.SupplyType() + " + " + cpr.SupplyType() );
+          cpr.Delete();
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1.qbl b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1.qbl
new file mode 100644
index 0000000..c10c59e
--- /dev/null
+++ b/_Main/BL/Type_PeggingResult/StaticMethod_SetAllChildRelation1.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SetAllChildRelation1
+{
+  TextBody:
+  [*
+    // hongjli Nov-1-2023 (created)
+  *]
+}
diff --git a/_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl b/_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl
deleted file mode 100644
index d7fa0eb..0000000
--- a/_Main/BL/Type_PeggingResultGroup/_ROOT_Type_PeggingResultGroup.qbl
+++ /dev/null
@@ -1,9 +0,0 @@
-Quintiq file version 2.0
-#root
-#parent: #DomainModel
-Type PeggingResultGroup
-{
-  #keys: '5[414702.1.320753704][414702.1.320753702][0.0.0][414702.1.320753703][414702.1.320753705]'
-  BaseType: Object
-  StructuredName: 'PeggingResultGroups'
-}
diff --git a/_Main/BL/Type_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/BL/Type_SummaryOfInboundTransaction/Attribute_Item.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Item.qbl
new file mode 100644
index 0000000..0f6af0b
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Item.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Item
+{
+  #keys: '3[414702.1.391291493][414702.1.391291492][414702.1.391291494]'
+  Description: '鐗╂枡缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganCode.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganCode.qbl
new file mode 100644
index 0000000..7c0b6b2
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganCode.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganCode
+{
+  #keys: '3[414702.1.391291503][414702.1.391291502][414702.1.391291504]'
+  Description: '缁勭粐缂栫爜'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganName.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganName.qbl
new file mode 100644
index 0000000..c56d968
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_OrganName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute OrganName
+{
+  #keys: '3[414702.1.391291513][414702.1.391291512][414702.1.391291514]'
+  Description: '缁勭粐鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_PlantName.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_PlantName.qbl
new file mode 100644
index 0000000..fa433f0
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_PlantName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute PlantName
+{
+  #keys: '3[414702.1.391291523][414702.1.391291522][414702.1.391291524]'
+  Description: '宸ュ巶鍚嶇О'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total1.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total1.qbl
new file mode 100644
index 0000000..2a0c629
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total1.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total1
+{
+  #keys: '3[414702.1.391291539][414702.1.391291538][414702.1.391291540]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total10.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total10.qbl
new file mode 100644
index 0000000..ee5439a
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total10.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total10
+{
+  #keys: '3[414702.1.391291650][414702.1.391291649][414702.1.391291651]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total11.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total11.qbl
new file mode 100644
index 0000000..23c5821
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total11.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total11
+{
+  #keys: '3[414702.1.391291663][414702.1.391291662][414702.1.391291664]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total12.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total12.qbl
new file mode 100644
index 0000000..293c6fc
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total12.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total12
+{
+  #keys: '3[414702.1.391291673][414702.1.391291672][414702.1.391291674]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total2.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total2.qbl
new file mode 100644
index 0000000..06dcf1a
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total2.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total2
+{
+  #keys: '3[414702.1.391291552][414702.1.391291551][414702.1.391291553]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total3.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total3.qbl
new file mode 100644
index 0000000..0b4bb14
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total3.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total3
+{
+  #keys: '3[414702.1.391291565][414702.1.391291564][414702.1.391291566]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total4.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total4.qbl
new file mode 100644
index 0000000..6976c0b
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total4.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total4
+{
+  #keys: '3[414702.1.391291575][414702.1.391291574][414702.1.391291576]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total5.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total5.qbl
new file mode 100644
index 0000000..05d49ea
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total5.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total5
+{
+  #keys: '3[414702.1.391291585][414702.1.391291584][414702.1.391291586]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total6.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total6.qbl
new file mode 100644
index 0000000..6d9ddcf
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total6.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total6
+{
+  #keys: '3[414702.1.391291598][414702.1.391291597][414702.1.391291599]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total7.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total7.qbl
new file mode 100644
index 0000000..95515f6
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total7.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total7
+{
+  #keys: '3[414702.1.391291611][414702.1.391291610][414702.1.391291612]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total8.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total8.qbl
new file mode 100644
index 0000000..a381589
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total8.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total8
+{
+  #keys: '3[414702.1.391291624][414702.1.391291623][414702.1.391291625]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total9.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total9.qbl
new file mode 100644
index 0000000..23b43ce
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/Attribute_Total9.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Total9
+{
+  #keys: '3[414702.1.391291637][414702.1.391291636][414702.1.391291638]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/StaticMethod_FlushData.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/StaticMethod_FlushData.qbl
new file mode 100644
index 0000000..b7bf786
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/StaticMethod_FlushData.qbl
@@ -0,0 +1,55 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FlushData (
+  GlobalOTDSOP globalOTDSOP,
+  const GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    globalOTDSOP.SummaryOfInboundTransaction( relflush );
+    
+    traverse ( globalOTDTable, Global_MappingSummaryOfInboundTransaction, gmsoit ) {
+      targetSummaryOfInboundTransaction := select( globalOTDSOP, SummaryOfInboundTransaction, tempSOIBT, 
+                                                   tempSOIBT.Item()      =  gmsoit.Item()     and
+                                                   tempSOIBT.OrganCode() = gmsoit.OrganCode() and
+                                                   tempSOIBT.OrganName() = gmsoit.OrganName() and
+                                                   tempSOIBT.PlantName() = gmsoit.PlantName() );
+      
+      if ( isnull( targetSummaryOfInboundTransaction ) ) {
+        targetSummaryOfInboundTransaction := globalOTDSOP.SummaryOfInboundTransaction( relnew, Item      := gmsoit.Item(),
+                                                                                               OrganCode := gmsoit.OrganCode(),
+                                                                                               OrganName := gmsoit.OrganName(),
+                                                                                               PlantName := gmsoit.PlantName()
+                                                                                      );
+      }
+      
+      if ( gmsoit.TransactionDate().Month() = 1 ) {
+        targetSummaryOfInboundTransaction.Total1( targetSummaryOfInboundTransaction.Total1() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 2 ) {
+        targetSummaryOfInboundTransaction.Total2( targetSummaryOfInboundTransaction.Total2() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 3 ) {
+        targetSummaryOfInboundTransaction.Total3( targetSummaryOfInboundTransaction.Total3() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 4 ) {
+        targetSummaryOfInboundTransaction.Total4( targetSummaryOfInboundTransaction.Total4() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 5 ) {
+        targetSummaryOfInboundTransaction.Total5( targetSummaryOfInboundTransaction.Total5() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 6 ) {
+        targetSummaryOfInboundTransaction.Total6( targetSummaryOfInboundTransaction.Total6() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 7 ) {
+        targetSummaryOfInboundTransaction.Total7( targetSummaryOfInboundTransaction.Total7() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 8 ) {
+        targetSummaryOfInboundTransaction.Total8( targetSummaryOfInboundTransaction.Total8() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 9 ) {
+        targetSummaryOfInboundTransaction.Total9( targetSummaryOfInboundTransaction.Total9() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 10 ) {
+        targetSummaryOfInboundTransaction.Total10( targetSummaryOfInboundTransaction.Total10() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 11 ) {
+        targetSummaryOfInboundTransaction.Total11( targetSummaryOfInboundTransaction.Total11() + gmsoit.TransactionQTY() );
+      } else if ( gmsoit.TransactionDate().Month() = 12 ) {
+        targetSummaryOfInboundTransaction.Total12( targetSummaryOfInboundTransaction.Total2() + gmsoit.TransactionQTY() );
+      }
+      
+    }
+  *]
+}
diff --git a/_Main/BL/Type_SummaryOfInboundTransaction/_ROOT_Type_SummaryOfInboundTransaction.qbl b/_Main/BL/Type_SummaryOfInboundTransaction/_ROOT_Type_SummaryOfInboundTransaction.qbl
new file mode 100644
index 0000000..1f74037
--- /dev/null
+++ b/_Main/BL/Type_SummaryOfInboundTransaction/_ROOT_Type_SummaryOfInboundTransaction.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type SummaryOfInboundTransaction
+{
+  #keys: '5[414702.1.391291471][414702.1.391291469][0.0.0][414702.1.391291470][414702.1.391291472]'
+  BaseType: Object
+  StructuredName: 'SummaryOfInboundTransactions'
+}
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_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def
index 52c5931..36968d6 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_TIANMA_JITUAN_ActionBarGroupScenarioComparisonViews_ButtonAnnualPro.def
@@ -6,10 +6,6 @@
   CanBindMultiple: false
   DefinitionID: 'Responsedef_WebButton_OnClick'
   GroupServerCalls: true
-  Precondition:
-  [*
-    
-  *]
   QuillAction
   {
     Body:
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_ButtonCreateData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def
index 55bdd70..7b3ca1a 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudge/Response_pButton_ButtonCreateData_OnClick.def
@@ -7,13 +7,7 @@
   DefinitionID: 'Responsedef_WebButton_OnClick'
   Precondition:
   [*
-    flag := true;
-    
-    flag := GlobalOTDSOP.CapacityAndSaleBudgeFilterYear( relsize ) > 0                     and
-            GlobalOTDSOP.CapacityAndSaleBudgeFilterBusinessType( relsize ) > 0             and
-            GlobalOTDSOP.CapacityAndSaleBudgeFilterPlaceOfProductionOfArray( relsize ) > 0;
-    
-    return flag;
+    return not isnull( GlobalOTDSOP ) and not isnull( GlobalOTDTable );
   *]
   QuillAction
   {
@@ -22,17 +16,16 @@
       option := WebMessageBox::Question( "璇烽�夋嫨鏁版嵁婧�", "鏁版嵁婀東娴嬭瘯鏁版嵁|鍙栨秷" );
       
       if ( option = 0 ) {
-        WebMessageBox::Error( "鏁版嵁婀栨殏鏃犳暟鎹�", true );
+        WebMessageBox::Success( "寮�濮嬫媺鍙栦腑锛岃鏌ョ湅鎷夊彇鏃ュ織", true );
+        Global_MappingAnnualBudgetData::CreateData( GlobalOTDTable, ApplicationMacroPlanner.GetUserName() );
       } else if ( option = 1 ) {
         if ( DataHolderCheckedProduct.Data().Size() = 0 ) {
           WebMessageBox::Error( "璇峰厛鍦ㄥ乏渚у鑸爮閫夋嫨瑕佺敓鎴愭祴璇曟暟鎹殑浜у搧锛�", true );
         } else {
-          GlobalOTDTable.InitTestDataByYear( MacroPlan, 
-                                             GlobalOTDSOP,
-                                             DataHolderCapacityAndSaleBudgeFilterYear.Data(),
-                                             DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
-                                             DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
-                                             DataHolderCheckedProduct.Data() );
+          GlobalOTDTable.CreateCapacityAndSaleBudgeTestData( GlobalOTDSOP,
+                                                             GlobalOTDTable,
+                                                             DataHolderCapacityAndSaleBudgeFilterYear.Data(),
+                                                             DataHolderCheckedProduct.Data() );
         }
       }
     *]
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 6af89c3..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,13 +13,8 @@
   {
     Body:
     [*
-      CapacityAndSaleBudgeFilterItem::InitializedData( GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterYear::InitializedData( GlobalOTDSOP );
-      CapacityAndSaleBudgeFilterMonth::InitializedData( GlobalOTDSOP );
       CapacityAndSaleBudgeFilterBusinessType::InitializedData( GlobalOTDSOP, GlobalOTDTable );
       CapacityAndSaleBudgeFilterPlaceOfProductionOfArray::InitializedData( GlobalOTDSOP, GlobalOTDTable );
-      
-      GlobalOTDTable.Global_MappingAnnualBudgetData( relflush );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
index f3f605d..09249e2 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Component_ChartCapacityAndSaleBudgeChart.def
@@ -81,5 +81,6 @@
   [
     ContextMenu: 'chartContextMenuCapacityAndSaleBudge'
     Taborder: 4
+    Title: '骞村害浜ч攢棰勭畻澶嶇洏'
   ]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def"
index 761a489..8ff52d7 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeChart/Response_pFilterCriteria_ButtonCapacityAndSaleBudgeChartTest_OnClick\043603.def"
@@ -9,17 +9,32 @@
   {
     Body:
     [*
-      //CapacityAndSaleBudgeChartElement::TestData( GlobalOTDTable );
+      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.CapacityAndSaleBudgeChart( DataHolderMacroPlansForScenarioComparison.Data(), 
                                               DropDownSaleOrCapacity.Text(),
                                               DropDownTimeGroup.Text(),
                                               DropDownByBusinessTypeOrByOrgCode.Text(),
-                                              DataHolderCapacityAndSaleBudgeFilterBusinessType.Data(),
-                                              DataHolderCapacityAndSaleBudgeFilterPlaceOfProductionOfArray.Data(),
-                                              DataHolderCapacityAndSaleBudgeFilterYear.Data(),
-                                              DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                              GlobalOTDTable );
+                                              &targetCapacityAndSaleBudgeFilterItem,
+                                              &targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray,
+                                              &targetCapacityAndSaleBudgeFilterBusinessType,
+                                              &targetCapacityAndSaleBudgeFilterYear,
+                                              &targetCapacityAndSaleBudgeFilterMonth,
+                                              GlobalOTDTable 
+                                             );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
index 52b3f21..9c37840 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Component_pButton.def
@@ -27,6 +27,16 @@
         Taborder: 1
       ]
     }
+    Component Image116
+    {
+      #keys: '[414702.1.375948796]'
+      BaseType: 'WebImage'
+      Properties:
+      [
+        Image: 'CHECK'
+        Taborder: 2
+      ]
+    }
   ]
   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..209916a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Method_CreateCapacityAndSaleBudgeCompareData.def
@@ -0,0 +1,40 @@
+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 );
+    
+    GlobalOTDSOP.AsyncCapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
+                                                   targetCapacityAndSaleBudgeFilterItem,
+                                                   targetCapacityAndSaleBudgeFilterPlaceOfProductionOfArray,
+                                                   targetCapacityAndSaleBudgeFilterBusinessType,
+                                                   targetCapacityAndSaleBudgeFilterYear, 
+                                                   targetCapacityAndSaleBudgeFilterMonth,
+                                                   GlobalOTDTable );
+  *]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_dhStatus_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_dhStatus_OnDataChanged.def
new file mode 100644
index 0000000..3b2161a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/Response_dhStatus_OnDataChanged.def
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: dhStatus
+Response OnDataChanged () id:Response_FormCapacityAndSaleBudgeCompare_dhStatus_OnDataChanged
+{
+  #keys: '[414702.1.383710704]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+  QuillAction
+  {
+    Body:
+    [*
+      if ( guard( this.Data().RunSataus() = 1, false ) ) {
+        ButtonCapacityAndSaleBudgeCompare.Enabled( false, "姝e湪杩愯" );
+        Image116.Image( "MEDIA_PLAY_GREEN" );
+      } else if ( guard( this.Data().RunSataus() = 0, false ) ) {
+        ButtonCapacityAndSaleBudgeCompare.Enabled( true, "姝e湪杩愯" );
+        Image116.Image( "CHECK" );
+      } else {
+        ButtonCapacityAndSaleBudgeCompare.Enabled( true, "姝e湪杩愯" );
+        Image116.Image( "CHECK" );
+      }
+    *]
+    GroupServerCalls: false
+  }
+}
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 a683e63..3e8cd8f 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,11 +9,13 @@
   {
     Body:
     [*
-      GlobalOTDSOP.CapacityAndSaleBudgeCompare( DataHolderMacroPlansForScenarioComparison.Data(), 
-                                                DataHolderCapacityAndSaleBudgeFilterItem.Data(), 
-                                                DataHolderCapacityAndSaleBudgeFilterYear.Data(), 
-                                                DataHolderCapacityAndSaleBudgeFilterMonth.Data(),
-                                                GlobalOTDTable );
+      GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relflush );
+      GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relnew, RunSataus := 1 );
+      
+      Form.CreateCapacityAndSaleBudgeCompareData();
+      
+      //GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relflush );
+      //GlobalOTDSOP.CapacityAndSaleBudgeRunStatus( relnew, RunStatus := 0 );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
index d5e9525..fd88e20 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormCapacityAndSaleBudgeCompare/_ROOT_Component_FormCapacityAndSaleBudgeCompare.def
@@ -9,6 +9,31 @@
   [
     #child: MatrixEditorCapacityAndSaleBudgeCompare
     #child: pButton
+    Component dhStatus
+    {
+      #keys: '[414702.1.386200525]'
+      BaseType: 'WebDataHolder'
+      Databinding: 'CapacityAndSaleBudgeRunStatus'
+      Children:
+      [
+        Component deStatus
+        {
+          #keys: '[414702.1.386200546]'
+          BaseType: 'WebDataExtractor'
+          Properties:
+          [
+            DataType: 'GlobalOTDSOP'
+            Source: 'GlobalOTDSOP'
+            Taborder: 0
+            Transformation: 'CapacityAndSaleBudgeRunStatus'
+          ]
+        }
+      ]
+      Properties:
+      [
+        Taborder: 2
+      ]
+    }
   ]
   Properties:
   [
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_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
index 436d5f1..475b6b8 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceGlobal_BrokerExecuteLog\043981.def"
@@ -9,6 +9,6 @@
   ]
   Properties:
   [
-    Taborder: 6
+    Taborder: 7
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption5.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption5.def
new file mode 100644
index 0000000..543cdb8
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceOption5.def
@@ -0,0 +1,35 @@
+Quintiq file version 2.0
+Component PanelInterfaceOption5
+{
+  #keys: '[414702.1.387670593]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component CheckboxSummaryOfInboundTransaction
+    {
+      #keys: '[414702.1.387622319]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'SummaryOfInboundTransaction'
+        Taborder: 0
+      ]
+    }
+    Component CheckAnnualBudgetData
+    {
+      #keys: '[414702.1.400711162]'
+      BaseType: 'WebCheckbox'
+      Properties:
+      [
+        Label: 'AnnualBudgetData'
+        Taborder: 1
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 5
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
index 4799d94..9d865e7 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Component_PanelInterfaceTest.def
@@ -32,6 +32,6 @@
   [
     FixedSize: true
     Orientation: 'horizontal'
-    Taborder: 5
+    Taborder: 6
   ]
 }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
index c8b3ff8..03e2d62 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/Response_PanelInterfaceTest_ButtonPullInterfaceDataToIntermediateTable_OnCli.def
@@ -41,7 +41,9 @@
                                                                     CheckboxCurrency_MP.Checked(),
                                                                     CheckboxCurrencyRate_MP.Checked(),
                                                                     CheckboxLane.Checked(),
-                                                                    CheckboxLaneLeg.Checked() );
+                                                                    CheckboxLaneLeg.Checked(),
+                                                                    CheckboxSummaryOfInboundTransaction.Checked(),
+                                                                    CheckAnnualBudgetData.Checked() );
     *]
     GroupServerCalls: false
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
index 97b6783..b3a5a50 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormInterfaceTest/_ROOT_Component_FormInterfaceTest.def
@@ -30,9 +30,10 @@
       Databinding: 'Scenario'
       Properties:
       [
-        Taborder: 7
+        Taborder: 8
       ]
     }
+    #child: PanelInterfaceOption5
   ]
   Properties:
   [
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..5bb5674
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Component_PanelModule116.def
@@ -0,0 +1,48 @@
+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
+      ]
+    }
+    Component bPullCapacityAllocationRule
+    {
+      #keys: '[414702.1.402246903]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'THICK_ARROW_DOWN_LIGHT_BLUE'
+        Label: '鎷夊彇浜ц兘鍒嗛厤瑙勫垯'
+        Taborder: 2
+      ]
+    }
+  ]
+  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/Response_PanelModule116_bPullCapacityAllocationRule_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bPullCapacityAllocationRule_OnClick.def
new file mode 100644
index 0000000..47bd96b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormModulePanelCorrespondence/Response_PanelModule116_bPullCapacityAllocationRule_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelModule116/bPullCapacityAllocationRule
+Response OnClick () id:Response_PanelModule116_bPullCapacityAllocationRule_OnClick
+{
+  #keys: '[414702.1.400703767]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      ModulePanelCorrespondence::PullCapacityAllocationRule( GlobalOTDSOP );
+    *]
+    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_FormPeggingAllResult/Component_ListPeggingAllResult.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
index f6acc5b..3fba853 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingAllResult/Component_ListPeggingAllResult.def
@@ -29,7 +29,7 @@
       ]
       Properties:
       [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PeggingProductInSalesDemandBase.SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PeggingProductInSalesDemandBase.SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ProductID","title":"浜у搧ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ProductID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyQuantity","title":"渚涘簲鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FulfillmentQuantity","title":"瀹為檯闇�瑕佹暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FulfillmentQuantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SupplyType","title":"渚涘簲绫诲瀷","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SupplyType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"UnitOfMeasurementName","title":"鍗曚綅","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"UnitOfMeasurementName"}}]'
+        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
       ]
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\043886.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\043886.def"
new file mode 100644
index 0000000..9c7b5bf
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase\043886.def"
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListPeggingProductInSalesDemandBase id:ListPeggingProductInSalesDemandBase_886
+{
+  #keys: '[414702.1.361001747]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingProductInSalesDemandBase
+    {
+      #keys: '[414702.1.361001748]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProduct_MP'
+        ExtractionMode: 'Selected'
+        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
+        Taborder: 0
+        Transformation: 'PeggingProductInSalesDemandBase'
+      ]
+    }
+    #child: listActionBarPagePeggingProductInSalesDemandBase_1
+    Component DataSetLevelPeggingProductInSalesDemandBase
+    {
+      #keys: '[414702.1.361001750]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingProductInSalesDemandBase_1
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}}]'
+        ContextMenu: 'listContextMenuPeggingProductInSalesDemandBase'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_886_WebMenu_OnClick
+    {
+      #keys: '[414702.1.361001742]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[619.0.10848847]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
deleted file mode 100644
index 31d1862..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_ListPeggingProductInSalesDemandBase.def
+++ /dev/null
@@ -1,60 +0,0 @@
-Quintiq file version 2.0
-Component ListPeggingProductInSalesDemandBase
-{
-  #keys: '[414702.1.294477745]'
-  BaseType: 'WebList'
-  Children:
-  [
-    Component DataExtractorPeggingProductInSalesDemandBase
-    {
-      #keys: '[414702.1.294477746]'
-      BaseType: 'WebDataExtractor'
-      Properties:
-      [
-        DataType: 'PeggingProduct_MP'
-        ExtractionMode: 'Selected'
-        Source: 'FormPeggingProduct_MP.ListPeggingProduct_MP'
-        Taborder: 0
-        Transformation: 'PeggingProductInSalesDemandBase'
-      ]
-    }
-    #child: listActionBarPagePeggingProductInSalesDemandBase
-    Component DataSetLevelPeggingProductInSalesDemandBase
-    {
-      #keys: '[414702.1.294477751]'
-      BaseType: 'WebDataSetLevel'
-      Children:
-      [
-        #child: listContextMenuPeggingProductInSalesDemandBase
-      ]
-      Properties:
-      [
-        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}}]'
-        ContextMenu: 'listContextMenuPeggingProductInSalesDemandBase'
-        Taborder: 2
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-  ResponseDefinitions:
-  [
-    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
-    {
-      #keys: '[414702.1.298881590]'
-      Initiator: 'WebMenu'
-      IsInherited: false
-      ResponseType: 'OnClick'
-      Arguments:
-      [
-        ResponseDefinitionArgument selection
-        {
-          #keys: '[619.0.10848847]'
-          Binding: 'this.Selection()'
-        }
-      ]
-    }
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_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_listActionBarPagePeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
deleted file mode 100644
index 0a23391..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listActionBarPagePeggingProductInSalesDemandBase.def
+++ /dev/null
@@ -1,10 +0,0 @@
-Quintiq file version 2.0
-Component listActionBarPagePeggingProductInSalesDemandBase
-{
-  #keys: '[414702.1.294477748]'
-  BaseType: 'listActionBarPage'
-  Properties:
-  [
-    Taborder: 1
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_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\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase\0431.def"
new file mode 100644
index 0000000..596fa52
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase\0431.def"
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingProductInSalesDemandBase id:listContextMenuPeggingProductInSalesDemandBase_1
+{
+  #keys: '[414702.1.361001751]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component mGeneratePeggingResult
+    {
+      #keys: '[414702.1.361001752]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PUMPKIN_HALLOWEEN'
+        Taborder: 3
+        Title: '鐢熸垚Pegging缁撴灉'
+      ]
+    }
+    Component MenuSelectionAll
+    {
+      #keys: '[414702.1.361001753]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
deleted file mode 100644
index 07fe2f0..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Component_listContextMenuPeggingProductInSalesDemandBase.def
+++ /dev/null
@@ -1,36 +0,0 @@
-Quintiq file version 2.0
-Component listContextMenuPeggingProductInSalesDemandBase
-{
-  #keys: '[414702.1.294477753]'
-  BaseType: 'listContextMenu'
-  Children:
-  [
-    Component mGeneratePeggingResult
-    {
-      #keys: '[414702.1.298700850]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'PUMPKIN_HALLOWEEN'
-        Taborder: 3
-        Title: '鐢熸垚Pegging缁撴灉'
-      ]
-    }
-    Component MenuSelectionAll
-    {
-      #keys: '[414702.1.300701803]'
-      BaseType: 'WebMenu'
-      Properties:
-      [
-        Image: 'SELECTION'
-        Shortcut: 'Ctrl+A'
-        Taborder: 4
-        Title: '鍏ㄩ��'
-      ]
-    }
-  ]
-  Properties:
-  [
-    Taborder: 0
-  ]
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/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/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
deleted file mode 100644
index 5f3082e..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick.def
+++ /dev/null
@@ -1,17 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPeggingProductInSalesDemandBase
-Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll_OnClick
-{
-  #keys: '[414702.1.300762760]'
-  CanBindMultiple: false
-  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
-  Initiator: 'MenuSelectionAll'
-  QuillAction
-  {
-    Body:
-    [*
-      this.SelectAll();
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
deleted file mode 100644
index 09b333a..0000000
--- a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
+++ /dev/null
@@ -1,23 +0,0 @@
-Quintiq file version 2.0
-#parent: ListPeggingProductInSalesDemandBase
-Response OnClick (
-  structured[PeggingProductInSalesDemandBase] selection
-) id:Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick
-{
-  #keys: '[414702.1.298700997]'
-  CanBindMultiple: false
-  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
-  Initiator: 'mGeneratePeggingResult'
-  Precondition:
-  [*
-    return not isnull( MacroPlan );
-  *]
-  QuillAction
-  {
-    Body:
-    [*
-      PeggingResult::CreateData( selection, MacroPlan );
-    *]
-    GroupServerCalls: false
-  }
-}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingProductInSalesDemandBase/_ROOT_Component_FormPeggingProductInSalesDemandBase.def
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_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..8e70246
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_ListPeggingProductInSalesDemandBase.def
@@ -0,0 +1,60 @@
+Quintiq file version 2.0
+Component ListPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.367969253]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorPeggingProductInSalesDemandBase
+    {
+      #keys: '[414702.1.367969254]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'PeggingProduct_MP'
+        ExtractionMode: 'Selected'
+        Source: 'ListPeggingProduct_MP'
+        Taborder: 0
+        Transformation: 'PeggingProductInSalesDemandBase'
+      ]
+    }
+    #child: listActionBarPagePeggingProductInSalesDemandBase
+    Component DataSetLevelPeggingProductInSalesDemandBase
+    {
+      #keys: '[414702.1.367969256]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuPeggingProductInSalesDemandBase
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SalesDemandBaseID","title":"璁㈠崟ID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SalesDemandBaseID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StockingPointID","title":"搴撳瓨鐐笽D","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StockingPointID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Quantity","title":"鏁伴噺","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Quantity"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"寮�濮嬫椂闂�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"StartDate"}}]'
+        ContextMenu: 'listContextMenuPeggingProductInSalesDemandBase'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+  ResponseDefinitions:
+  [
+    DelegatedResponseDefinition OnClick id:Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+    {
+      #keys: '[414702.1.367969244]'
+      Initiator: 'WebMenu'
+      IsInherited: false
+      ResponseType: 'OnClick'
+      Arguments:
+      [
+        ResponseDefinitionArgument selection
+        {
+          #keys: '[619.0.10848847]'
+          Binding: 'this.Selection()'
+        }
+      ]
+    }
+  ]
+}
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_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..624975c
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listActionBarPagePeggingProductInSalesDemandBase.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPagePeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.367969255]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
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_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def
new file mode 100644
index 0000000..392a02a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuPeggingProductInSalesDemandBase.def
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component listContextMenuPeggingProductInSalesDemandBase
+{
+  #keys: '[414702.1.367969257]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component mGeneratePeggingResult
+    {
+      #keys: '[414702.1.367969258]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PUMPKIN_HALLOWEEN'
+        Taborder: 3
+        Title: '鐢熸垚Pegging缁撴灉'
+      ]
+    }
+    Component MenuSelectionAll508
+    {
+      #keys: '[414702.1.367969259]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
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_FormPeggingResult/Component_listContextMenuStockingPoint\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint\0431.def"
new file mode 100644
index 0000000..d01c55a
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Component_listContextMenuStockingPoint\0431.def"
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+Component listContextMenuStockingPoint id:listContextMenuStockingPoint_1
+{
+  #keys: '[414702.1.367969265]'
+  BaseType: 'listContextMenu'
+  Children:
+  [
+    Component mGeneratePeggingResult266
+    {
+      #keys: '[414702.1.370691806]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'PUMPKIN_HALLOWEEN'
+        Taborder: 3
+        Title: '鐢熸垚Pegging缁撴灉'
+      ]
+    }
+    Component MenuSelectionAll506
+    {
+      #keys: '[414702.1.370691827]'
+      BaseType: 'WebMenu'
+      Properties:
+      [
+        Image: 'SELECTION'
+        Shortcut: 'Ctrl+A'
+        Taborder: 4
+        Title: '鍏ㄩ��'
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
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_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def
new file mode 100644
index 0000000..90d1387
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase
+Response OnClick () id:Response_ListPeggingProductInSalesDemandBase_MenuSelectionAll508_OnClick
+{
+  #keys: '[414702.1.367969247]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+  Initiator: 'MenuSelectionAll508'
+  QuillAction
+  {
+    Body:
+    [*
+      this.SelectAll();
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
new file mode 100644
index 0000000..3f30965
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormPeggingResult/Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick.def
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: ListPeggingProductInSalesDemandBase
+Response OnClick (
+  structured[PeggingProductInSalesDemandBase] selection
+) id:Response_ListPeggingProductInSalesDemandBase_mGeneratePeggingResult_OnClick
+{
+  #keys: '[414702.1.367969246]'
+  CanBindMultiple: false
+  DefinitionID => /ListPeggingProductInSalesDemandBase/Responsedef_ListPeggingProductInSalesDemandBase_WebMenu_OnClick
+  Initiator: 'mGeneratePeggingResult'
+  Precondition:
+  [*
+    return not isnull( MacroPlan );
+  *]
+  QuillAction
+  {
+    Body:
+    [*
+      PeggingResult::CreateData( selection, MacroPlan );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_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/Component_FormShowInterfaceData/Component_ListSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..b7fe794
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_ListSummaryOfInboundTransaction.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387622982]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorSummaryOfInboundTransaction
+    {
+      #keys: '[414702.1.387622983]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDTable'
+        Source: 'GlobalOTDTable'
+        Taborder: 0
+        Transformation: 'Global_MappingSummaryOfInboundTransaction'
+      ]
+    }
+    #child: listActionBarPageSummaryOfInboundTransaction
+    Component DataSetLevelSummaryOfInboundTransaction
+    {
+      #keys: '[414702.1.387622988]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuSummaryOfInboundTransaction
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Item","title":"Item","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"Item"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"OrganCode","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganName","title":"OrganName","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"OrganName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlantName","title":"PlantName","subtotals":"","tooltip":"","width":-1,"display":"shown","attribute":"PlantName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TransactionDate","title":"TransactionDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TransactionDate"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TransactionQTY","title":"TransactionQTY","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TransactionQTY"}}]'
+        ContextMenu: 'listContextMenuSummaryOfInboundTransaction'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
index 6547519..40d992d 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelInterfaceDataDisplayContent.def
@@ -13,6 +13,7 @@
     #child: PanelConversionFactor
     #child: PanelOperation
     #child: PanelOperationBOM
+    #child: PanelSummaryOfInboundTransaction
   ]
   Properties:
   [
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..ac64034
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_PanelSummaryOfInboundTransaction.def
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+Component PanelSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.390708893]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    #child: ListSummaryOfInboundTransaction
+  ]
+  Properties:
+  [
+    Taborder: 8
+    Title: 'SummaryOfInboundTransaction'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..d76ed8a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listActionBarPageSummaryOfInboundTransaction.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387622985]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..90f4b6d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormShowInterfaceData/Component_listContextMenuSummaryOfInboundTransaction.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387622990]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_ListSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_ListSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..21a5163
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_ListSummaryOfInboundTransaction.def
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+Component ListSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387623860]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorSummaryOfInboundTransaction
+    {
+      #keys: '[414702.1.387623861]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        DataType: 'GlobalOTDSOP'
+        Source: 'GlobalOTDSOP'
+        Taborder: 0
+        Transformation: 'SummaryOfInboundTransaction'
+      ]
+    }
+    #child: listActionBarPageSummaryOfInboundTransaction
+    Component DataSetLevelSummaryOfInboundTransaction
+    {
+      #keys: '[414702.1.387623866]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuSummaryOfInboundTransaction
+      ]
+      Properties:
+      [
+        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Item","title":"鐗╂枡缂栫爜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Item"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganCode","title":"缁勭粐缂栫爜","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"OrganName","title":"缁勭粐鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"OrganName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"PlantName","title":"宸ュ巶鍚嶇О","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"PlantName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total1","title":"1鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total1"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total2","title":"2鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total2"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total3","title":"3鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total3"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total4","title":"4鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total4"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total5","title":"5鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total5"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total6","title":"6鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total6"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total7","title":"7鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total7"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total8","title":"8鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total8"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total9","title":"9鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total9"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total10","title":"10鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total10"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total11","title":"11鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total11"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total12","title":"12鏈堟眹鎬绘暟閲�","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total12"}}]'
+        ContextMenu: 'listContextMenuSummaryOfInboundTransaction'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listActionBarPageSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listActionBarPageSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..76892c2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listActionBarPageSummaryOfInboundTransaction.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387623863]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listContextMenuSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listContextMenuSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..3a5efee
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_listContextMenuSummaryOfInboundTransaction.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387623868]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_pButton.def b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_pButton.def
new file mode 100644
index 0000000..61a40cd
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Component_pButton.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+Component pButton
+{
+  #keys: '[414702.1.387623978]'
+  BaseType: 'WebPanel'
+  Children:
+  [
+    Component bFlushData
+    {
+      #keys: '[414702.1.387624225]'
+      BaseType: 'WebButton'
+      Properties:
+      [
+        Image: 'ARROW_CIRCLE2'
+        Label: '鍒锋柊鏁版嵁'
+        Taborder: 0
+      ]
+    }
+  ]
+  Properties:
+  [
+    FixedSize: true
+    Orientation: 'horizontal'
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Response_pButton_bFlushData_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Response_pButton_bFlushData_OnClick.def
new file mode 100644
index 0000000..bbf38d2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/Response_pButton_bFlushData_OnClick.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: pButton/bFlushData
+Response OnClick () id:Response_pButton_bFlushData_OnClick
+{
+  #keys: '[414702.1.391560055]'
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_WebButton_OnClick'
+  QuillAction
+  {
+    Body:
+    [*
+      SummaryOfInboundTransaction::FlushData( GlobalOTDSOP, GlobalOTDTable );
+    *]
+    GroupServerCalls: false
+  }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/_ROOT_Component_FormSummaryOfInboundTransaction.def b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/_ROOT_Component_FormSummaryOfInboundTransaction.def
new file mode 100644
index 0000000..fa43e06
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormSummaryOfInboundTransaction/_ROOT_Component_FormSummaryOfInboundTransaction.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormSummaryOfInboundTransaction
+{
+  #keys: '[414702.1.387623720]'
+  BaseType: 'WebForm'
+  Children:
+  [
+    #child: ListSummaryOfInboundTransaction
+    #child: pButton
+  ]
+  Properties:
+  [
+    Image: 'CLIPBOARD'
+    Title: '鍏ュ簱浜ゆ槗姹囨��'
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType713.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType713.def
new file mode 100644
index 0000000..a96240b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_ListWorkOrderType713.def
@@ -0,0 +1,37 @@
+Quintiq file version 2.0
+Component ListWorkOrderType713
+{
+  #keys: '[414702.1.387623773]'
+  BaseType: 'WebList'
+  Children:
+  [
+    Component DataExtractorWorkOrderType504
+    {
+      #keys: '[414702.1.387623774]'
+      BaseType: 'WebDataExtractor'
+      Properties:
+      [
+        Taborder: 0
+      ]
+    }
+    #child: listActionBarPageWorkOrderType423
+    Component DataSetLevelWorkOrderType651
+    {
+      #keys: '[414702.1.387623779]'
+      BaseType: 'WebDataSetLevel'
+      Children:
+      [
+        #child: listContextMenuWorkOrderType493
+      ]
+      Properties:
+      [
+        ContextMenu: 'listContextMenuWorkOrderType493'
+        Taborder: 2
+      ]
+    }
+  ]
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType423.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType423.def
new file mode 100644
index 0000000..5e4366d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listActionBarPageWorkOrderType423.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listActionBarPageWorkOrderType423
+{
+  #keys: '[414702.1.387623776]'
+  BaseType: 'listActionBarPage'
+  Properties:
+  [
+    Taborder: 1
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType493.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType493.def
new file mode 100644
index 0000000..d391db7
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/Component_listContextMenuWorkOrderType493.def
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component listContextMenuWorkOrderType493
+{
+  #keys: '[414702.1.387623781]'
+  BaseType: 'listContextMenu'
+  Properties:
+  [
+    Taborder: 0
+  ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def
index 93e4dc2..7b27004 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormWorkOrderType/_ROOT_Component_FormWorkOrderType.def
@@ -8,6 +8,7 @@
   Children:
   [
     #child: ListWorkOrderType
+    #child: ListWorkOrderType713
   ]
   Properties:
   [
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 cf84f9c..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,31 +4,44 @@
   {
     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'
             column_ProductID
             {
               columnId: 'ProductID'
@@ -39,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'
@@ -70,7 +75,7 @@
               dataType: 'string'
               index: 0
               subtotals: 'count'
-              width: 61
+              width: 62
             }
             column_StockingPointID
             {
@@ -79,7 +84,7 @@
               dataType: 'string'
               index: 1
               subtotals: ''
-              width: 95
+              width: 74
             }
             column_Quantity
             {
@@ -87,8 +92,8 @@
               dataPath: 'Quantity'
               dataType: 'real'
               index: 2
-              subtotals: ''
-              width: 51
+              subtotals: 'sum'
+              width: 50
             }
             column_StartDate
             {
@@ -97,26 +102,43 @@
               dataType: 'date'
               index: 3
               subtotals: ''
-              width: 76
+              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
           {
           }
@@ -184,7 +206,7 @@
               dataPath: 'FulfillmentQuantity'
               dataType: 'real'
               index: 6
-              subtotals: ''
+              subtotals: 'sum'
               width: 108
             }
             column_SupplyType
@@ -215,30 +237,106 @@
               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,DESC:PeggingProductInSalesDemandBase.SalesDemandBaseID'
+            sort: 'ProductID,StockingPointID,StartDate'
             column_PeggingProductInSalesDemandBase_SalesDemandBaseID
             {
               columnId: 'PeggingProductInSalesDemandBase.SalesDemandBaseID'
@@ -281,6 +379,95 @@
               dataPath: 'SupplyQuantity'
               dataType: 'real'
               index: 4
+              subtotals: 'max'
+              width: 150
+            }
+            column_ActualFulfillmentQuantity
+            {
+              columnId: 'ActualFulfillmentQuantity'
+              dataPath: 'ActualFulfillmentQuantity'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_FulfillmentQuantity
+            {
+              columnId: 'FulfillmentQuantity'
+              dataPath: 'FulfillmentQuantity'
+              dataType: 'real'
+              index: 6
+              subtotals: 'sum'
+              width: 150
+            }
+            column_SupplyType
+            {
+              columnId: 'SupplyType'
+              dataPath: 'SupplyType'
+              dataType: 'string'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_UnitOfMeasurementName
+            {
+              columnId: 'UnitOfMeasurementName'
+              dataPath: 'UnitOfMeasurementName'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              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
             }
diff --git "a/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw" "b/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
index 0516c1b..d6fafb3 100644
--- "a/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
+++ "b/_Main/UI/MacroPlannerWebApp/Views/\345\271\264\345\272\246\344\272\247\351\224\200\345\244\215\347\233\230.vw"
@@ -156,7 +156,7 @@
           FormCapacityAndSaleBudgeFilterItem_DataSetLevelCapacityAndSaleBudgeFilterItem
           {
             groupDepth: -1
-            sort: 'ItemName'
+            sort: 'DESC:ItemName'
             column_ItemName
             {
               columnId: 'ItemName'
@@ -221,6 +221,7 @@
           FormCapacityAndSaleBudgeFilterPlaceOfProductionOfArray_DataSetLevelCapacityAndSaleBudgeFilterPlaceOfProductionOfArray
           {
             groupDepth: -1
+            sort: 'DESC:PlaceOfProductionOfArray'
             column_PlaceOfProductionOfArray
             {
               columnId: 'PlaceOfProductionOfArray'
@@ -287,6 +288,7 @@
           FormCapacityAndSaleBudgeFilterBusinessType_DataSetLevelCapacityAndSaleBudgeFilterBusinessType
           {
             groupDepth: -1
+            sort: 'DESC:BusinessType'
             column_BusinessType
             {
               columnId: 'BusinessType'
@@ -365,14 +367,186 @@
           }
         }
       }
+      form_FormSummaryOfInboundTransaction
+      {
+        title: 'QTIANMA_JITUAN::FormSummaryOfInboundTransaction'
+        shown: true
+        componentID: 'QTIANMA_JITUAN::FormSummaryOfInboundTransaction'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 35
+          rowSpan: 12
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormSummaryOfInboundTransaction_pButton
+          {
+            sizeRatio: 1
+          }
+          FormSummaryOfInboundTransaction_ListSummaryOfInboundTransaction
+          {
+          }
+          FormSummaryOfInboundTransaction_DataSetLevelSummaryOfInboundTransaction
+          {
+            groupDepth: -1
+            column_Item
+            {
+              columnId: 'Item'
+              dataPath: 'Item'
+              dataType: 'string'
+              index: 0
+              subtotals: ''
+              width: 150
+            }
+            column_OrganCode
+            {
+              columnId: 'OrganCode'
+              dataPath: 'OrganCode'
+              dataType: 'string'
+              index: 1
+              subtotals: ''
+              width: 150
+            }
+            column_OrganName
+            {
+              columnId: 'OrganName'
+              dataPath: 'OrganName'
+              dataType: 'string'
+              index: 2
+              subtotals: ''
+              width: 150
+            }
+            column_PlantName
+            {
+              columnId: 'PlantName'
+              dataPath: 'PlantName'
+              dataType: 'string'
+              index: 3
+              subtotals: ''
+              width: 150
+            }
+            column_Total1
+            {
+              columnId: 'Total1'
+              dataPath: 'Total1'
+              dataType: 'real'
+              index: 4
+              subtotals: ''
+              width: 150
+            }
+            column_Total2
+            {
+              columnId: 'Total2'
+              dataPath: 'Total2'
+              dataType: 'real'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
+            column_Total3
+            {
+              columnId: 'Total3'
+              dataPath: 'Total3'
+              dataType: 'real'
+              index: 6
+              subtotals: ''
+              width: 150
+            }
+            column_Total4
+            {
+              columnId: 'Total4'
+              dataPath: 'Total4'
+              dataType: 'real'
+              index: 7
+              subtotals: ''
+              width: 150
+            }
+            column_Total5
+            {
+              columnId: 'Total5'
+              dataPath: 'Total5'
+              dataType: 'real'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
+            column_Total6
+            {
+              columnId: 'Total6'
+              dataPath: 'Total6'
+              dataType: 'real'
+              index: 9
+              subtotals: ''
+              width: 150
+            }
+            column_Total7
+            {
+              columnId: 'Total7'
+              dataPath: 'Total7'
+              dataType: 'real'
+              index: 10
+              subtotals: ''
+              width: 150
+            }
+            column_Total8
+            {
+              columnId: 'Total8'
+              dataPath: 'Total8'
+              dataType: 'real'
+              index: 11
+              subtotals: ''
+              width: 150
+            }
+            column_Total9
+            {
+              columnId: 'Total9'
+              dataPath: 'Total9'
+              dataType: 'real'
+              index: 12
+              subtotals: ''
+              width: 150
+            }
+            column_Total10
+            {
+              columnId: 'Total10'
+              dataPath: 'Total10'
+              dataType: 'real'
+              index: 13
+              subtotals: ''
+              width: 150
+            }
+            column_Total11
+            {
+              columnId: 'Total11'
+              dataPath: 'Total11'
+              dataType: 'real'
+              index: 14
+              subtotals: ''
+              width: 150
+            }
+            column_Total12
+            {
+              columnId: 'Total12'
+              dataPath: 'Total12'
+              dataType: 'real'
+              index: 15
+              subtotals: ''
+              width: 150
+            }
+          }
+        }
+      }
     }
     userconfigurableinformation
     {
     }
-    image: 'PIG'
     page: ''
     group: ''
     index: 0
+    image: 'PIG'
     description: ''
   }
   formatversion: 2
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/ModelSettings/Common/Live-25/_ROOT_Role_Live-25.properties b/_var/_Main/ModelSettings/Common/Live-25/_ROOT_Role_Live-25.properties
new file mode 100644
index 0000000..49b6471
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Live-25/_ROOT_Role_Live-25.properties
@@ -0,0 +1,575 @@
+#The properties belonging to _meta and _self groups are reserved. Please do not change them. Comments on these properties will not be preserved.
+_meta.application=server
+_meta.kind=Quintiq Property File
+_meta.type=model
+_meta.version.config=1.3
+_self.configsettype=Role
+_self.name=Live-25
+arg=template:serverargs
+arg.architectdependencies=
+arg.custom=""
+arg.versioncontrolmode=true
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.connection=DBODBC1
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.parameters=/datasource=CIM_Carco /owner=dbo /user=quintiq
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.connection=dbodbc1
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.parameters=/datasource=orclpdb /owner=TIANMA /chardatatypeforstring /characterencoding=UTF-8 /appdatatypeforstring=wchar
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.password=1 E9FE769DABE91891284EBBA6CEA8F41B 479d6f99-cffb-41e6-94f1-d35bdf20703c
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.connection=dbodbc1
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.parameters=/datasource=otd /owner=OTD /chardatatypeforstring /characterencoding=UTF-8 /appdatatypeforstring=wchar
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.password=1 A205E2668CFBD9365E030C36BB0A4297 730524bf-f9c9-426f-94a0-953687be1178
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject.parameters=/datasource=MPERPIntegrationDataSource /owner=dbo /user=quintiq
+domainmodel.fileprovider.qdrive=template:domainmodel.fileprovider.qdrive
+domainmodel.fileprovider.qdrive.enabled=true
+domainmodel.fileprovider.qdrive.readonly=false
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint=template:domainmodel.integratorconfig.dsendpoint
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.connectiontimeout=0
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dspassword=1 D27640F00F09F1085D52409202B71B4E 2a9f48ef-2467-4394-afcb-75e45a1c40d9
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dsserviceurl=https://vdemopro1342dsy.extranet.3ds.com/3DSpace/resources/v1/model/
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dsuser=Push
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.maxconnections=10
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.receivecontentcharset=ASCII
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.requesttimeout=60
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sendingcontentcharset=UTF-8
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sockettimeout=0
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.trustmanagername=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.integratorid=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationparam1=
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationparam2=
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationtype=None
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.connectiontimeout=0
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.contenttype=JSON
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.enablehttpmessagelogging=true
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.includerawcontent=false
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.maxconnections=10
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.passonvalidationerrors=false
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.portnumber=8080
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.proxyportnumber=0
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.receivecontentcharset=ASCII
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.requesttimeout=60
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.restschemaurl="C:\\Users\\hongjli\\Desktop\\integratorrestexample\\openapi.yaml"
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.sendingcontentcharset=utf-8
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.sockettimeout=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationparam1=
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationparam2=
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationtype=None
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.connectiontimeout=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.contenttype=JSON
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.enablehttpmessagelogging=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.includerawcontent=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.maxconnections=10
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.passonvalidationerrors=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.portnumber=8080
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.proxyportnumber=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.receivecontentcharset=ASCII
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.requesttimeout=60
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.restschemaurl="C:\\Users\\hongjli\\Desktop\\integratorrestexample\\openapi.yaml"
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.sendingcontentcharset=utf-8
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.sockettimeout=0
+domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
+domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
+domainmodel.mdsstoragedefinitionmanager.audittraillocation=
+domainmodel.mdsstoragedefinitionmanager.databaseenabled=false
+domainmodel.mdsstoragedefinitionmanager.datasetstoredatasource=MacroPlanner
+domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
+domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
+domainmodel.mdsstoragedefinitionmanager.dbformat=Legacy
+domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
+#domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
+domainmodel.mdsstoragedefinitionmanager.driver=OCI
+domainmodel.mdsstoragedefinitionmanager.dssfilesystemenabled=false
+domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
+domainmodel.mdsstoragedefinitionmanager.maxtablename=0
+domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=potddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1522
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=potddb_zx
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=OTDGONGQUE
+domainmodel.mdsstoragedefinitionmanager.password=1 463752FBAC1C9172263ADBF875F4CBF3 d5a0fc9a-a372-4807-9f03-34bcf85e582d
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.groupname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.hostname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.idescription=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.password=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.timeout=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.username=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.groupname=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.idescription=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.password=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.timeout=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.username=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.groupname=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.idescription=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.password=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.username=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.groupname=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.idescription=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.url=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.encodingstrategy=UseSameAsRequest
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.exporttzoffset=false
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.forssl=false
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.groupname=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.idescription=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.securecommunication.protocols=TLSv1,TLSv1.1,TLSv1.2
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.timezone=GMT
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.useoslocaltimezone=true
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.groupname=
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.idescription=
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.url=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.groupname=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.idescription=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.url=
+domainmodel.soapserverinterfacedefinition.interface.utf=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.utf.groupname=
+domainmodel.soapserverinterfacedefinition.interface.utf.idescription=
+user=template:user
+user.increasestartofplanning=false
+user.sizingparameter=false
diff --git a/_var/_Main/ModelSettings/Common/Live-27/_ROOT_Role_Live-27.properties b/_var/_Main/ModelSettings/Common/Live-27/_ROOT_Role_Live-27.properties
new file mode 100644
index 0000000..bff9082
--- /dev/null
+++ b/_var/_Main/ModelSettings/Common/Live-27/_ROOT_Role_Live-27.properties
@@ -0,0 +1,575 @@
+#The properties belonging to _meta and _self groups are reserved. Please do not change them. Comments on these properties will not be preserved.
+_meta.application=server
+_meta.kind=Quintiq Property File
+_meta.type=model
+_meta.version.config=1.3
+_self.configsettype=Role
+_self.name=Live-27
+arg=template:serverargs
+arg.architectdependencies=
+arg.custom=""
+arg.versioncontrolmode=true
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.destination.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.exportcim.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.connection=DBODBC1
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.parameters=/datasource=CIM_Carco /owner=dbo /user=quintiq
+domainmodel.ediremotedatasourcedefinition.remotestorage.importcim.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcampaignsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputcurrenciesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputentitycostsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputglobalparametersfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputgroupsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventoryspecificationsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputinventorysuppliesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputlanesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputperioddefinitionsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputpostponementsandfulfillmentsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputprioritiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputproductsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputrecipesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputroutingsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalesdemandsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsalessegmentsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputshiftpatternsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputstockingpointsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputsupplyspecificationsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitavailabilitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcalendarelementsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitcapacitiesfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitofmeasuresfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfromexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.inputunitsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.connection=dbodbc1
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.parameters=/datasource=orclpdb /owner=TIANMA /chardatatypeforstring /characterencoding=UTF-8 /appdatatypeforstring=wchar
+domainmodel.ediremotedatasourcedefinition.remotestorage.localoracle.password=1 E9FE769DABE91891284EBBA6CEA8F41B 479d6f99-cffb-41e6-94f1-d35bdf20703c
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.connection=dbodbc1
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.parameters=/datasource=otd /owner=OTD /chardatatypeforstring /characterencoding=UTF-8 /appdatatypeforstring=wchar
+domainmodel.ediremotedatasourcedefinition.remotestorage.oracle.password=1 A205E2668CFBD9365E030C36BB0A4297 730524bf-f9c9-426f-94a0-953687be1178
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcampaignstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputcurrenciestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputentitycoststomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputforecaststoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparameterstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputglobalparamterstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputgroupstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventoryspecificationstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputinventorysuppliestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputlanestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionsfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputperioddefinitionstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.maxcolumnnamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.maxtablenamelength=0
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputpostponementsandfulfillmentstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputprioritiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputproductstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputrecipestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputroutingstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalesdemandstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsalessegmentstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputshiftpatternstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointcapacitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputstockingpointstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputsupplyspecificationstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputtransportcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitavailabilitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcalendarelementstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiesfrommodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitcapacitiestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitofmeasurestomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstoexcel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.connection=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.parameters=
+domainmodel.ediremotedatasourcedefinition.remotestorage.outputunitstomodel.password=
+domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject=template:domainmodel.ediremotedatasourcedefinition
+domainmodel.ediremotedatasourcedefinition.remotestorage.syncobject.parameters=/datasource=MPERPIntegrationDataSource /owner=dbo /user=quintiq
+domainmodel.fileprovider.qdrive=template:domainmodel.fileprovider.qdrive
+domainmodel.fileprovider.qdrive.enabled=true
+domainmodel.fileprovider.qdrive.readonly=false
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint=template:domainmodel.integratorconfig.dsendpoint
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.connectiontimeout=0
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dspassword=1 D27640F00F09F1085D52409202B71B4E 2a9f48ef-2467-4394-afcb-75e45a1c40d9
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dsserviceurl=https://vdemopro1342dsy.extranet.3ds.com/3DSpace/resources/v1/model/
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.dsuser=Push
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.maxconnections=10
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.receivecontentcharset=ASCII
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.requesttimeout=60
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sendingcontentcharset=UTF-8
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.sockettimeout=0
+domainmodel.integratorconfig.dsendpoint.q3dspace_3dsendpoint.trustmanagername=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.jtmbrestserver_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.panelmaterialrestserver_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint=template:domainmodel.integratorconfig.quintiqendpoint
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.connectiongroupname=SERVER
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.integratorid=Q3DSpace
+domainmodel.integratorconfig.quintiqendpoint.q3dspace_quintiqendpoint.outboundrequesttimeout=60
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationparam1=
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationparam2=
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.authenticationtype=None
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.connectiontimeout=0
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.contenttype=JSON
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.enablehttpmessagelogging=true
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.includerawcontent=false
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.maxconnections=10
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.passonvalidationerrors=false
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.portnumber=8080
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.proxyportnumber=0
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.receivecontentcharset=ASCII
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.requesttimeout=60
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.restschemaurl="C:\\Users\\hongjli\\Desktop\\integratorrestexample\\openapi.yaml"
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.sendingcontentcharset=utf-8
+domainmodel.integratorconfig.restendpoint.jtmbrestserver_restserver.sockettimeout=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial=template:domainmodel.integratorconfig.restendpoint
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationparam1=
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationparam2=
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.authenticationtype=None
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.connectiontimeout=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.contenttype=JSON
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.enablehttpmessagelogging=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.includerawcontent=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.maxconnections=10
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.passonvalidationerrors=false
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.portnumber=8080
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.proxyportnumber=0
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.receivecontentcharset=ASCII
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.requesttimeout=60
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.restschemaurl="C:\\Users\\hongjli\\Desktop\\integratorrestexample\\openapi.yaml"
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.sendingcontentcharset=utf-8
+domainmodel.integratorconfig.restendpoint.panelmaterialrestserver_restendpointpanelmaterial.sockettimeout=0
+domainmodel.mdsstoragedefinitionmanager=template:domainmodel.mdsstoragedefinitionmanager
+domainmodel.mdsstoragedefinitionmanager.audittrailenabled=false
+domainmodel.mdsstoragedefinitionmanager.audittraillocation=
+domainmodel.mdsstoragedefinitionmanager.databaseenabled=false
+domainmodel.mdsstoragedefinitionmanager.datasetstoredatasource=MacroPlanner
+domainmodel.mdsstoragedefinitionmanager.datasetstoreenabled=false
+domainmodel.mdsstoragedefinitionmanager.datasetstoreislocal=false
+domainmodel.mdsstoragedefinitionmanager.dbformat=Legacy
+domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
+#domainmodel.mdsstoragedefinitionmanager.defaultencryptioncertificate=
+domainmodel.mdsstoragedefinitionmanager.driver=OCI
+domainmodel.mdsstoragedefinitionmanager.dssfilesystemenabled=false
+domainmodel.mdsstoragedefinitionmanager.maxcolumnname=0
+domainmodel.mdsstoragedefinitionmanager.maxtablename=0
+domainmodel.mdsstoragedefinitionmanager.name=dbodbc1
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasichost=potddb.tianma.cn
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicport=1522
+domainmodel.mdsstoragedefinitionmanager.ociconnectionbasicservice=potddb_qcdz
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontnsname=
+domainmodel.mdsstoragedefinitionmanager.ociconnectiontype=Basic
+domainmodel.mdsstoragedefinitionmanager.parameters=/datasource=MacroPlannerInternalDB /user=OTDLANYUE
+domainmodel.mdsstoragedefinitionmanager.password=1 463752FBAC1C9172263ADBF875F4CBF3 d5a0fc9a-a372-4807-9f03-34bcf85e582d
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetkind=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.datasetname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.groupname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.hostname=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.idescription=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.password=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.timeout=
+domainmodel.soapclientinterfacedefinition.interface.libdef_soapclients.username=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.groupname=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.idescription=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.password=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.timeout=
+domainmodel.soapclientinterfacedefinition.interface.sopdsscclientinterfaces.username=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients=template:domainmodel.soapclientinterfacedefinition
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.endpoint=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.groupname=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.idescription=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.password=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.sslkeystore=
+domainmodel.soapclientinterfacedefinition.interface.sopworkflowclients.username=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.groupname=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.idescription=
+domainmodel.soapserverinterfacedefinition.interface.libdef_soapserver.url=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.encodingstrategy=UseSameAsRequest
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.exporttzoffset=false
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.forssl=false
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.groupname=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.idescription=
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.securecommunication.protocols=TLSv1,TLSv1.1,TLSv1.2
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.timezone=GMT
+domainmodel.soapserverinterfacedefinition.interface.monitoringlibrarysoap.useoslocaltimezone=true
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.groupname=
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.idescription=
+domainmodel.soapserverinterfacedefinition.interface.sopdsscserverinterface.url=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.groupname=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.idescription=
+domainmodel.soapserverinterfacedefinition.interface.sopworkflowserver.url=
+domainmodel.soapserverinterfacedefinition.interface.utf=template:domainmodel.soapserverinterfacedefinition
+domainmodel.soapserverinterfacedefinition.interface.utf.groupname=
+domainmodel.soapserverinterfacedefinition.interface.utf.idescription=
+user=template:user
+user.increasestartofplanning=false
+user.sizingparameter=false
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 31640c2..450a6cd 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-01'
+  LASTACCESSDATE '2023-11-06'
   VIEWSCOPE 0
 }
 AUTHORIZATIONS
@@ -42,13 +42,13 @@
 INFOOBJECT
 {
   KEY [626.0.4514905]
-  OBJECTTYPE Application // ApplicationLibMacroPlanner
+  OBJECTTYPE Application
   BASEINFOOBJECTS
   {
    BASEINFOOBJECT
    {
     KEY [626.0.4514905]
-    OBJECTTYPE GUIComponent // ApplicationLibMacroPlanner
+    OBJECTTYPE GUIComponent
     CONTENTS
     {
      SETTINGS_MDS_WITH_FOLDER
@@ -80,19 +80,19 @@
    INFOOBJECT
    {
     KEY [514.0.2180]
-    OBJECTTYPE Frame // Frame
+    OBJECTTYPE Frame
     CONTENTS
     {
      State := maximized
      (200,0,1536,809)
-     WorkspaceLocation := 
+     WorkspaceLocation :=
     }
     INFOOBJECTS
     {
      INFOOBJECT
      {
       KEY [113694.2.1024236755]
-      OBJECTTYPE ValueHolder // ValueHolderViewLayout
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -101,7 +101,7 @@
      INFOOBJECT
      {
       KEY [127710.1.721401771]
-      OBJECTTYPE ValueHolder // ValueHolderActiveMacroPlan
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '[414702.1.314120528]'
@@ -110,7 +110,7 @@
      INFOOBJECT
      {
       KEY [132448.0.224582518]
-      OBJECTTYPE ValueHolder // ValueHolderSetMPDefaultViewForFirstLogin
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -119,7 +119,7 @@
      INFOOBJECT
      {
       KEY [146450.2.1404665746]
-      OBJECTTYPE ValueHolder // vhConfiguration
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -128,7 +128,7 @@
      INFOOBJECT
      {
       KEY [146874.1.233869144]
-      OBJECTTYPE ValueHolder // vhConfigurationMatrix
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -137,7 +137,7 @@
      INFOOBJECT
      {
       KEY [132894.0.1007052496]
-      OBJECTTYPE ValueHolder // ValueHolderSetDataHolderSelectedPISPIPExtractor
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -146,7 +146,7 @@
      INFOOBJECT
      {
       KEY [108684.0.1782661552]
-      OBJECTTYPE ValueHolder // ValueHolderLastSelected3DDriveDirectory
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -155,7 +155,7 @@
      INFOOBJECT
      {
       KEY [107654.0.557163713]
-      OBJECTTYPE ValueHolder // ValueHolderUserGroup
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ';Administrator;Developer;AggregatedPlanning;MRPPlanning;ProductionPlan;BusinessUnitOM;Web_BlendingPlan;Web_Plan;Web_TripPlan;Web_PurchasingPlan;Web_ProductionPlan;KpiTrackerAdmin;Web_SafetyStock;Web_Inventory;Web_CapacitySmoothing;Web_ShelfLife;Web_LotSizes;Web_Optimizer;Web_SupplyDashboard;Web_OptimizerBenchmarking;Web_Integration;Web_MyActivities;Web_WorkFlowConfiguration;Web_SafetyStockCalculation;Web_InventoryMixBalancing;Web_Feedbacks;Web_Financials;Web_Allocation;Web_DemandPostponement;Web_Blending;Web_ScenariosAndSettings;Web;Web_Development;Web_Sales;Web_CampaignPlanning;Web_SupplyChainData;Web_SupplyPlanning;SOAPServerUserGroup;CollaborativeForecasting;DemandPlanner;SupplyPlanner;SupplyChainDirector;OnPremise;Cloud;SOP;Software;Functionalities;Workflow;TransportationPlanning;SupplySpecifications;SupplyChainMap;ShelfLife;SalesDemandPostponement;SafetyStockCalculation;ProductPlanningGanttChart;Pegging;OptimizerBenchmarking;LotSizes;InventorySupplies;InventorySpecifications;InventoryMixBalancing;Groups;Feedback;Development;DatabaseIntegration;CapacitySmoothing;CampaignPlanning;Blending;AppConfigurators;Implementors'
@@ -164,7 +164,7 @@
      INFOOBJECT
      {
       KEY [113694.1.227882923]
-      OBJECTTYPE ValueHolder // ValueHolderShowSanityCheck
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -173,7 +173,7 @@
      INFOOBJECT
      {
       KEY [126224.0.581715]
-      OBJECTTYPE ValueHolder // ValueHolder
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'Feasible'
@@ -182,7 +182,7 @@
      INFOOBJECT
      {
       KEY [132894.0.388222255]
-      OBJECTTYPE ValueHolder // ValueHolderImportProfileMessage
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value ''
@@ -191,7 +191,7 @@
      INFOOBJECT
      {
       KEY [127238.1.80067038]
-      OBJECTTYPE ValueHolder // ValueHolderSizing
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'true'
@@ -200,7 +200,7 @@
      INFOOBJECT
      {
       KEY [122192.0.103731718]
-      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverityMsgCount
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '39'
@@ -209,7 +209,7 @@
      INFOOBJECT
      {
       KEY [113694.2.1085093394]
-      OBJECTTYPE ValueHolder // ValueHolderIsImportSucceed
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'true'
@@ -218,7 +218,7 @@
      INFOOBJECT
      {
       KEY [132448.0.331221783]
-      OBJECTTYPE ValueHolder // ValueHolderScenarioMPSize
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '1'
@@ -227,7 +227,7 @@
      INFOOBJECT
      {
       KEY [127238.1.502176570]
-      OBJECTTYPE ValueHolder // ValueHolderPeriodRollStatus
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value 'false'
@@ -236,7 +236,7 @@
      INFOOBJECT
      {
       KEY [112884.1.706803944]
-      OBJECTTYPE ValueHolder // ValueHolderSanityCheckHighestSeverity
+      OBJECTTYPE ValueHolder
       CONTENTS
       {
        Value '2'
@@ -245,7 +245,7 @@
      INFOOBJECT
      {
       KEY [132448.0.662420775]
-      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+      OBJECTTYPE GUIDataSetLevel
       CONTENTS
       {
        Columns
@@ -285,13 +285,13 @@
      INFOOBJECT
      {
       KEY [136682.0.314428046]
-      OBJECTTYPE GUIComponent // PTFPanelTestController
+      OBJECTTYPE GUIComponent
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [105690.0.246954464]
-        OBJECTTYPE ValueHolder // vhLogging
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -300,7 +300,7 @@
        INFOOBJECT
        {
         KEY [104342.0.773994982]
-        OBJECTTYPE ValueHolder // vhDoActionInfoReturn
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -309,7 +309,7 @@
        INFOOBJECT
        {
         KEY [104342.0.867521338]
-        OBJECTTYPE ValueHolder // vhPendingActions
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -318,7 +318,7 @@
        INFOOBJECT
        {
         KEY [104342.0.867524820]
-        OBJECTTYPE ValueHolder // vhSharedRepository
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value '\\\\CNLEN1845000693\\PTF_Repository\\'
@@ -327,7 +327,7 @@
        INFOOBJECT
        {
         KEY [105690.0.892938783]
-        OBJECTTYPE ValueHolder // vhAsyncActionStatus
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -336,7 +336,7 @@
        INFOOBJECT
        {
         KEY [105690.0.247211998]
-        OBJECTTYPE ValueHolder // vhResultLogPath
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -345,7 +345,7 @@
        INFOOBJECT
        {
         KEY [105690.0.892939622]
-        OBJECTTYPE ValueHolder // vhPTFExecutionStatus
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value 'Inactive'
@@ -354,7 +354,7 @@
        INFOOBJECT
        {
         KEY [103546.0.81355542]
-        OBJECTTYPE ValueHolder // vhAutoClose
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -363,7 +363,7 @@
        INFOOBJECT
        {
         KEY [103546.0.54652306]
-        OBJECTTYPE ValueHolder // vhLogStart
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value ''
@@ -374,7 +374,7 @@
      INFOOBJECT
      {
       KEY [113694.2.1146370710]
-      OBJECTTYPE Toolbar // ToolbarWorkflow
+      OBJECTTYPE Toolbar
       CONTENTS
       {
        'vertical' '50' '0'
@@ -384,16 +384,13 @@
        INFOOBJECT
        {
         KEY [113694.2.1146375645]
-        OBJECTTYPE CustomDrawComponent // SWF_MP_CustomDrawComponentProcessDashboard
-        BASEINFOOBJECTS
-        {
-        }
+        OBJECTTYPE CustomDrawComponent
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [132478.0.288924864]
-          OBJECTTYPE ValueHolder // ValueHolderLastSyncDateTime
+          OBJECTTYPE ValueHolder
           CONTENTS
           {
            Value '01-11-2023, 10:05:04'
@@ -406,7 +403,7 @@
      INFOOBJECT
      {
       KEY [11660.0.360702312]
-      OBJECTTYPE Toolbar // ToolbarSupplyChainPanel
+      OBJECTTYPE Toolbar
       CONTENTS
       {
        'horizontal' '50' '320'
@@ -416,7 +413,7 @@
        INFOOBJECT
        {
         KEY [113694.2.1070869880]
-        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelState
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value 'true'
@@ -425,7 +422,7 @@
        INFOOBJECT
        {
         KEY [113694.2.1070870209]
-        OBJECTTYPE ValueHolder // ValueHolderNavigationPanelSize
+        OBJECTTYPE ValueHolder
         CONTENTS
         {
          Value '320'
@@ -434,13 +431,13 @@
        INFOOBJECT
        {
         KEY [113694.2.1033284312]
-        OBJECTTYPE SplitterWnd // SplitterWnd
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [113694.2.1033284313]
-          OBJECTTYPE SplitterPane // SplitterPane
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -450,7 +447,7 @@
            INFOOBJECT
            {
             KEY [127238.0.1883499282]
-            OBJECTTYPE TabComponent // TabComponent
+            OBJECTTYPE TabComponent
             CONTENTS
             {
              ActivePageIndex 0
@@ -460,7 +457,7 @@
              INFOOBJECT
              {
               KEY [132448.0.71838188]
-              OBJECTTYPE List // ListNavigationPanelSelection
+              OBJECTTYPE List
               CONTENTS
               {
                Quantorrow := false
@@ -470,7 +467,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883514459]
-                OBJECTTYPE ValueHolder // ValueHolderListSelections
+                OBJECTTYPE ValueHolder
                 CONTENTS
                 {
                  Value 'Stocking points and units'
@@ -479,7 +476,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883514458]
-                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel288
+                OBJECTTYPE GUIDataSetLevel
                 CONTENTS
                 {
                  Columns
@@ -510,13 +507,13 @@
              INFOOBJECT
              {
               KEY [127238.0.1883516525]
-              OBJECTTYPE SplitterWnd // SplitterWnd516
+              OBJECTTYPE SplitterWnd
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [127238.0.1883516526]
-                OBJECTTYPE SplitterPane // SplitterPaneEntities
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 100
@@ -527,20 +524,17 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516528]
-                  OBJECTTYPE List // ListEntityTreeInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
-                  }
-                  BASEINFOOBJECTS
-                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [113694.2.1026852831]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelUnit
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -575,7 +569,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883516541]
-                OBJECTTYPE SplitterPane // SplitterPaneProducts
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 0
@@ -586,20 +580,17 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516544]
-                  OBJECTTYPE List // ListProductInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
-                  }
-                  BASEINFOOBJECTS
-                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [113694.2.1025678105]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelProducts
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -632,7 +623,7 @@
                INFOOBJECT
                {
                 KEY [127238.0.1883516552]
-                OBJECTTYPE SplitterPane // SplitterPaneSalesSegment
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 0
@@ -643,20 +634,17 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1883516554]
-                  OBJECTTYPE List // ListSalesSegmentInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
-                  }
-                  BASEINFOOBJECTS
-                  {
                   }
                   INFOOBJECTS
                   {
                    INFOOBJECT
                    {
                     KEY [11660.0.1616690288]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesSegment
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -689,7 +677,7 @@
                INFOOBJECT
                {
                 KEY [131438.0.356639347]
-                OBJECTTYPE SplitterPane // SplitterPanePeriods
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 0
@@ -700,7 +688,7 @@
                  INFOOBJECT
                  {
                   KEY [131438.0.353247249]
-                  OBJECTTYPE List // ListPeriodSpecificationInPanel
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
@@ -710,7 +698,7 @@
                    INFOOBJECT
                    {
                     KEY [131438.0.371333408]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriodSpecifications
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -742,7 +730,7 @@
                      INFOOBJECT
                      {
                       KEY [131438.0.402834330]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriods
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -791,13 +779,13 @@
              INFOOBJECT
              {
               KEY [127238.0.1884468404]
-              OBJECTTYPE SplitterWnd // SplitterWnd466
+              OBJECTTYPE SplitterWnd
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [127238.0.1884468405]
-                OBJECTTYPE SplitterPane // SplitterPane252
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  VISIBLE true
@@ -807,7 +795,7 @@
                  INFOOBJECT
                  {
                   KEY [127238.0.1884468597]
-                  OBJECTTYPE List // ListBookmarks
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
@@ -817,7 +805,7 @@
                    INFOOBJECT
                    {
                     KEY [130238.0.368320209]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarks
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -848,7 +836,7 @@
                      INFOOBJECT
                      {
                       KEY [130238.0.368320210]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelBookmarkChildren
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -897,7 +885,7 @@
       SINGLEINSTANCE false
       ID '閿�鍞渶姹�'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormSalesDemands
+      OBJECTTYPE Form
       CREATETYPE FormSalesDemands
       CONTENTS
       {
@@ -905,21 +893,18 @@
        (1344,0,192,928)
        DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[0]Selection[NONE]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [124112.0.87054864]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [124112.0.87054865]
-          OBJECTTYPE SplitterPane // SplitterPaneSalesDemand
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 72.2642807983482
@@ -930,7 +915,7 @@
            INFOOBJECT
            {
             KEY [124112.0.87250426]
-            OBJECTTYPE List // ListSalesDemand
+            OBJECTTYPE List
             CONTENTS
             {
              Quantorrow := false
@@ -940,7 +925,7 @@
              INFOOBJECT
              {
               KEY [124112.0.87253131]
-              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemand
+              OBJECTTYPE GUIDataSetLevel
               CONTENTS
               {
                Columns
@@ -1075,7 +1060,7 @@
          INFOOBJECT
          {
           KEY [124112.0.87054866]
-          OBJECTTYPE SplitterPane // SplitterPaneSalesDemandInPeriod
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 27.7357192016518
@@ -1086,13 +1071,13 @@
            INFOOBJECT
            {
             KEY [116826.1.6886965]
-            OBJECTTYPE SplitterWnd // SplitterWnd
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [116826.1.6886966]
-              OBJECTTYPE SplitterPane // SplitterPane
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -1102,7 +1087,7 @@
                INFOOBJECT
                {
                 KEY [116826.1.6887229]
-                OBJECTTYPE List // ListAggregatedSalesDemandInPeriod
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1112,7 +1097,7 @@
                  INFOOBJECT
                  {
                   KEY [116826.1.6887235]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSalesDemandInPeriod
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1205,7 +1190,7 @@
              INFOOBJECT
              {
               KEY [116826.1.6886967]
-              OBJECTTYPE SplitterPane // SplitterPane552
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -1215,7 +1200,7 @@
                INFOOBJECT
                {
                 KEY [116826.1.6889558]
-                OBJECTTYPE List // ListDisaggregatedSalesDemandInPeriod
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1225,7 +1210,7 @@
                  INFOOBJECT
                  {
                   KEY [116826.1.6889563]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1330,7 +1315,7 @@
       SINGLEINSTANCE false
       ID 'Pegging'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormPegging
+      OBJECTTYPE Form
       CREATETYPE FormPegging
       CONTENTS
       {
@@ -1338,21 +1323,18 @@
        (354,421,990,664)
        DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[0]Selection[NONE]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [108486.1.1171911809]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [108486.1.1171911810]
-          OBJECTTYPE SplitterPane // SplitterPane
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 50.132802124834
@@ -1363,13 +1345,13 @@
            INFOOBJECT
            {
             KEY [108486.1.1171921411]
-            OBJECTTYPE SplitterWnd // SplitterWndDemand_MP_Pegging
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [108486.1.1171921412]
-              OBJECTTYPE SplitterPane // SplitterPane2
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 52.6515151515151
@@ -1380,7 +1362,7 @@
                INFOOBJECT
                {
                 KEY [108486.1.1171921414]
-                OBJECTTYPE List // ListDemand
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1390,7 +1372,7 @@
                  INFOOBJECT
                  {
                   KEY [108486.1.1171924299]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelDemand_MP
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1536,7 +1518,7 @@
              INFOOBJECT
              {
               KEY [108486.1.1171921413]
-              OBJECTTYPE SplitterPane // SplitterPane3
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 47.3484848484849
@@ -1547,7 +1529,7 @@
                INFOOBJECT
                {
                 KEY [113694.0.1490022148]
-                OBJECTTYPE List // ListDemandPegging
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1557,7 +1539,7 @@
                  INFOOBJECT
                  {
                   KEY [113694.0.1490022154]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1658,7 +1640,7 @@
          INFOOBJECT
          {
           KEY [108486.1.1171911811]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 49.867197875166
@@ -1669,13 +1651,13 @@
            INFOOBJECT
            {
             KEY [108486.1.1175693802]
-            OBJECTTYPE SplitterWnd // SplitterWndSupply_MP_Pegging
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [108486.1.1175693803]
-              OBJECTTYPE SplitterPane // SplitterPane4
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 52.6315789473684
@@ -1686,7 +1668,7 @@
                INFOOBJECT
                {
                 KEY [108486.1.1175693804]
-                OBJECTTYPE List // ListSupply
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1696,7 +1678,7 @@
                  INFOOBJECT
                  {
                   KEY [108486.1.1175693807]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelSupply_MP
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1820,7 +1802,7 @@
              INFOOBJECT
              {
               KEY [108486.1.1175693810]
-              OBJECTTYPE SplitterPane // SplitterPane5
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 47.3684210526316
@@ -1831,7 +1813,7 @@
                INFOOBJECT
                {
                 KEY [108486.1.1175693811]
-                OBJECTTYPE List // ListSupplyPegging
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -1841,7 +1823,7 @@
                  INFOOBJECT
                  {
                   KEY [108486.1.1175693814]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -1948,7 +1930,7 @@
       SINGLEINSTANCE false
       ID '浜у搧瑙勫垝鏁版嵁鐭╅樀'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormProductPlanningMatrix
+      OBJECTTYPE Form
       CREATETYPE FormProductPlanningMatrix
       CONTENTS
       {
@@ -1956,15 +1938,12 @@
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[1]Selection[NONE]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [127710.1.821866707]
-        OBJECTTYPE CheckBox // CheckBoxFilterByProductLevel
+        OBJECTTYPE CheckBox
         CONTENTS
         {
          Checkstate 1
@@ -1973,19 +1952,16 @@
        INFOOBJECT
        {
         KEY [127710.1.821866918]
-        OBJECTTYPE StringSelection // StringSelectionProductLevel
+        OBJECTTYPE StringSelection
         CONTENTS
         {
          BoundValue '[Leaf product]'
-        }
-        INFOOBJECTS
-        {
         }
        }
        INFOOBJECT
        {
         KEY [127710.1.818312567]
-        OBJECTTYPE MatrixEditor // MatrixEditorProductPlanning
+        OBJECTTYPE MatrixEditor
         CONTENTS
         {
          RowHeight 29
@@ -1998,13 +1974,13 @@
          INFOOBJECT
          {
           KEY [127710.1.819572713]
-          OBJECTTYPE GUIScaleView // MatrixEditorColumns
+          OBJECTTYPE GUIScaleView
           INFOOBJECTS
           {
            INFOOBJECT
            {
             KEY [127710.1.820829335]
-            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPeriod
+            OBJECTTYPE UserConfigurableInformation
             CONTENTS
             {
              ObjectText 'VALUE(object.Start())'
@@ -2015,13 +1991,13 @@
          INFOOBJECT
          {
           KEY [127710.1.819572710]
-          OBJECTTYPE GUIScaleView // MatrixEditorRows
+          OBJECTTYPE GUIScaleView
           INFOOBJECTS
           {
            INFOOBJECT
            {
             KEY [127710.1.820300549]
-            OBJECTTYPE UserConfigurableInformation // UserConfigurableInformationPISP
+            OBJECTTYPE UserConfigurableInformation
             CONTENTS
             {
              ObjectText 'VALUE( object.Name() ) (VALUE( object.UnitOfMeasureName() ))'
@@ -2039,7 +2015,7 @@
       SINGLEINSTANCE false
       ID '鍔犲伐璺緞'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormRoutings
+      OBJECTTYPE Form
       CREATETYPE FormRoutings
       CONTENTS
       {
@@ -2047,21 +2023,18 @@
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[1]Selection[NONE]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [136682.0.365497231]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [136682.0.365497232]
-          OBJECTTYPE SplitterPane // SplitterPane
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2071,7 +2044,7 @@
            INFOOBJECT
            {
             KEY [136682.0.365497233]
-            OBJECTTYPE List // ListRouting
+            OBJECTTYPE List
             CONTENTS
             {
              Quantorrow := false
@@ -2081,7 +2054,7 @@
              INFOOBJECT
              {
               KEY [136682.0.365497235]
-              OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelRouting
+              OBJECTTYPE GUIDataSetLevel
               CONTENTS
               {
                Columns
@@ -2326,7 +2299,7 @@
          INFOOBJECT
          {
           KEY [136682.0.365497250]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2336,19 +2309,16 @@
            INFOOBJECT
            {
             KEY [136682.0.365497251]
-            OBJECTTYPE SplitterWnd // SplitterWnd2
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [136682.0.365497252]
-              OBJECTTYPE SplitterPane // SplitterPane2
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
-              }
-              INFOOBJECTS
-              {
               }
              }
             }
@@ -2360,7 +2330,7 @@
        INFOOBJECT
        {
         KEY [136682.0.365502343]
-        OBJECTTYPE CheckBox // CheckBoxFilterProduct
+        OBJECTTYPE CheckBox
         CONTENTS
         {
          Checkstate 1
@@ -2374,16 +2344,13 @@
       SINGLEINSTANCE false
       ID '鍔熻兘娴嬭瘯鎸夐挳'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormTestButtonCollection
+      OBJECTTYPE Form
       CREATETYPE FormTestButtonCollection
       CONTENTS
       {
        State := normal
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[2]Selection[NONE]
-      }
-      BASEINFOOBJECTS
-      {
       }
      }
      INFOOBJECT
@@ -2392,7 +2359,7 @@
       SINGLEINSTANCE false
       ID '鍚庡彴杈撳嚭'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Dialog // dlgServerMessages
+      OBJECTTYPE Dialog
       CREATETYPE dlgServerMessages
       CONTENTS
       {
@@ -2400,15 +2367,12 @@
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[3]Selection[FRONT]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [514.0.2141287]
-        OBJECTTYPE List // List1
+        OBJECTTYPE List
         CONTENTS
         {
          Quantorrow := false
@@ -2418,7 +2382,7 @@
          INFOOBJECT
          {
           KEY [536.0.860799]
-          OBJECTTYPE GUIDataSetLevel // dslServerMessages
+          OBJECTTYPE GUIDataSetLevel
           CONTENTS
           {
            Columns
@@ -2456,7 +2420,7 @@
       SINGLEINSTANCE false
       ID 'Analysis GlobalOTDTable'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // frmStandardAnalysisGlobalOTDTable
+      OBJECTTYPE Form
       CREATETYPE frmStandardAnalysisGlobalOTDTable
       CONTENTS
       {
@@ -2464,21 +2428,18 @@
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[2]Selection[NONE]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [530.0.3531801]
-        OBJECTTYPE SplitterWnd // swTopMost
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [530.0.3531802]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2488,13 +2449,13 @@
            INFOOBJECT
            {
             KEY [530.0.3531806]
-            OBJECTTYPE SplitterWnd // swTop
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [530.0.3531807]
-              OBJECTTYPE SplitterPane // spTopLeft
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -2504,14 +2465,14 @@
                INFOOBJECT
                {
                 KEY [530.0.3532065]
-                OBJECTTYPE GUIAnalysis // Analysis
+                OBJECTTYPE GUIAnalysis
                 CONTENTS
                 {
                  START(0,0,0,0,false)
                  ANALYSIS(0,0,0,0,false,'Analysis1')
                  {
                    SOURCE 'Types' '[414702.0.340560328]' 0
-                   
+                 
                    NAME 'Analysis1'
                  }
                  COLUMNSETTINGS
@@ -2701,7 +2662,7 @@
                INFOOBJECT
                {
                 KEY [530.1.25480335]
-                OBJECTTYPE List // ListGUIAnalysisData
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -2711,7 +2672,7 @@
                  INFOOBJECT
                  {
                   KEY [530.1.25480340]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -2756,7 +2717,7 @@
              INFOOBJECT
              {
               KEY [530.0.3531808]
-              OBJECTTYPE SplitterPane // spTopRight
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -2766,7 +2727,7 @@
                INFOOBJECT
                {
                 KEY [530.0.3532013]
-                OBJECTTYPE GUIAnalysisGrid // AnalysisGrid
+                OBJECTTYPE GUIAnalysisGrid
                 CONTENTS
                 {
                  NEWFORMAT
@@ -2794,7 +2755,7 @@
          INFOOBJECT
          {
           KEY [530.0.3531803]
-          OBJECTTYPE SplitterPane // SplitterPane2
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -2804,13 +2765,13 @@
            INFOOBJECT
            {
             KEY [530.0.3531811]
-            OBJECTTYPE SplitterWnd // swBottom
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [530.0.3531812]
-              OBJECTTYPE SplitterPane // spBottomLeft
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 44.6569920844327
@@ -2821,13 +2782,13 @@
                INFOOBJECT
                {
                 KEY [530.0.3532136]
-                OBJECTTYPE SplitterWnd // SplitterWnd4
+                OBJECTTYPE SplitterWnd
                 INFOOBJECTS
                 {
                  INFOOBJECT
                  {
                   KEY [530.0.3532137]
-                  OBJECTTYPE SplitterPane // SplitterPane7
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    VISIBLE true
@@ -2837,13 +2798,13 @@
                    INFOOBJECT
                    {
                     KEY [530.0.3532138]
-                    OBJECTTYPE SplitterWnd // SplitterWnd5
+                    OBJECTTYPE SplitterWnd
                     INFOOBJECTS
                     {
                      INFOOBJECT
                      {
                       KEY [530.0.3532139]
-                      OBJECTTYPE SplitterPane // SplitterPane9
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -2853,7 +2814,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532140]
-                        OBJECTTYPE List // lstAttributes
+                        OBJECTTYPE List
                         CONTENTS
                         {
                          Quantorrow := false
@@ -2863,7 +2824,7 @@
                          INFOOBJECT
                          {
                           KEY [530.0.3532156]
-                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                          OBJECTTYPE GUIDataSetLevel
                           CONTENTS
                           {
                            Columns
@@ -2919,7 +2880,7 @@
                      INFOOBJECT
                      {
                       KEY [530.0.3532169]
-                      OBJECTTYPE SplitterPane // SplitterPane10
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -2929,7 +2890,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532170]
-                        OBJECTTYPE List // List3
+                        OBJECTTYPE List
                         CONTENTS
                         {
                          Quantorrow := false
@@ -2939,7 +2900,7 @@
                          INFOOBJECT
                          {
                           KEY [530.0.3532175]
-                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel3
+                          OBJECTTYPE GUIDataSetLevel
                           CONTENTS
                           {
                            Columns
@@ -2999,7 +2960,7 @@
                  INFOOBJECT
                  {
                   KEY [530.0.3532181]
-                  OBJECTTYPE SplitterPane // SplitterPane8
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    VISIBLE true
@@ -3009,13 +2970,13 @@
                    INFOOBJECT
                    {
                     KEY [530.1.8006303]
-                    OBJECTTYPE SplitterWnd // SplitterWnd1
+                    OBJECTTYPE SplitterWnd
                     INFOOBJECTS
                     {
                      INFOOBJECT
                      {
                       KEY [530.1.8006304]
-                      OBJECTTYPE SplitterPane // SplitterPane3
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -3024,7 +2985,7 @@
                      INFOOBJECT
                      {
                       KEY [530.1.8006305]
-                      OBJECTTYPE SplitterPane // SplitterPane4
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -3034,7 +2995,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532182]
-                        OBJECTTYPE GUIAnalysisBarChart // AnalysisBarChart
+                        OBJECTTYPE GUIAnalysisBarChart
                         CONTENTS
                         {
                          LeftSize 207
@@ -3053,7 +3014,7 @@
              INFOOBJECT
              {
               KEY [530.0.3531813]
-              OBJECTTYPE SplitterPane // spBottomRight
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 55.3430079155673
@@ -3064,7 +3025,7 @@
                INFOOBJECT
                {
                 KEY [530.0.3531950]
-                OBJECTTYPE List // List1
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -3074,7 +3035,7 @@
                  INFOOBJECT
                  {
                   KEY [530.0.3531958]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -3270,7 +3231,7 @@
       SINGLEINSTANCE false
       ID 'PeggingResult'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormPeggingResult
+      OBJECTTYPE Form
       CREATETYPE FormPeggingResult
       CONTENTS
       {
@@ -3278,15 +3239,12 @@
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[T0.4484;]TabIdx[4]Selection[FOCUS]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [414702.1.299084152]
-        OBJECTTYPE List // ListPeggingProductInSalesDemandBase
+        OBJECTTYPE List
         CONTENTS
         {
          Quantorrow := false
@@ -3296,7 +3254,7 @@
          INFOOBJECT
          {
           KEY [414702.1.299084219]
-          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel641
+          OBJECTTYPE GUIDataSetLevel
           CONTENTS
           {
            Columns
@@ -3359,7 +3317,7 @@
       SINGLEINSTANCE false
       ID 'Analysis GlobalOTDSOP'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // frmStandardAnalysis633
+      OBJECTTYPE Form
       CREATETYPE frmStandardAnalysis633
       CONTENTS
       {
@@ -3367,21 +3325,18 @@
        (0,0,0,0)
        DockableLocation := Station[MAIN]State[NORM]TreePath[B0.5516;]TabIdx[4]Selection[NONE]
       }
-      BASEINFOOBJECTS
-      {
-      }
       INFOOBJECTS
       {
        INFOOBJECT
        {
         KEY [530.0.3531801]
-        OBJECTTYPE SplitterWnd // swTopMost
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [530.0.3531802]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 0
@@ -3392,13 +3347,13 @@
            INFOOBJECT
            {
             KEY [530.0.3531806]
-            OBJECTTYPE SplitterWnd // swTop
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [530.0.3531807]
-              OBJECTTYPE SplitterPane // spTopLeft
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -3408,14 +3363,14 @@
                INFOOBJECT
                {
                 KEY [530.0.3532065]
-                OBJECTTYPE GUIAnalysis // Analysis
+                OBJECTTYPE GUIAnalysis
                 CONTENTS
                 {
                  START(0,0,0,0,false)
                  ANALYSIS(0,0,0,0,false,'Analysis1')
                  {
                    SOURCE 'Types' '[414702.1.290710093]' 0
-                   
+                 
                    GROUP 'NumberOfPlies'
                    NAME 'Analysis1'
                  }
@@ -3654,7 +3609,7 @@
                INFOOBJECT
                {
                 KEY [530.1.25480335]
-                OBJECTTYPE List // ListGUIAnalysisData
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -3664,7 +3619,7 @@
                  INFOOBJECT
                  {
                   KEY [530.1.25480340]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -3709,7 +3664,7 @@
              INFOOBJECT
              {
               KEY [530.0.3531808]
-              OBJECTTYPE SplitterPane // spTopRight
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -3719,7 +3674,7 @@
                INFOOBJECT
                {
                 KEY [530.0.3532013]
-                OBJECTTYPE GUIAnalysisGrid // AnalysisGrid
+                OBJECTTYPE GUIAnalysisGrid
                 CONTENTS
                 {
                  NEWFORMAT
@@ -3743,7 +3698,7 @@
          INFOOBJECT
          {
           KEY [530.0.3531803]
-          OBJECTTYPE SplitterPane // SplitterPane2
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            Size 100
@@ -3754,13 +3709,13 @@
            INFOOBJECT
            {
             KEY [530.0.3531811]
-            OBJECTTYPE SplitterWnd // swBottom
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [530.0.3531812]
-              OBJECTTYPE SplitterPane // spBottomLeft
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 44.5645263827082
@@ -3771,13 +3726,13 @@
                INFOOBJECT
                {
                 KEY [530.0.3532136]
-                OBJECTTYPE SplitterWnd // SplitterWnd4
+                OBJECTTYPE SplitterWnd
                 INFOOBJECTS
                 {
                  INFOOBJECT
                  {
                   KEY [530.0.3532137]
-                  OBJECTTYPE SplitterPane // SplitterPane7
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    Size 34.7701149425287
@@ -3788,13 +3743,13 @@
                    INFOOBJECT
                    {
                     KEY [530.0.3532138]
-                    OBJECTTYPE SplitterWnd // SplitterWnd5
+                    OBJECTTYPE SplitterWnd
                     INFOOBJECTS
                     {
                      INFOOBJECT
                      {
                       KEY [530.0.3532139]
-                      OBJECTTYPE SplitterPane // SplitterPane9
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -3804,7 +3759,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532140]
-                        OBJECTTYPE List // lstAttributes
+                        OBJECTTYPE List
                         CONTENTS
                         {
                          Quantorrow := false
@@ -3814,7 +3769,7 @@
                          INFOOBJECT
                          {
                           KEY [530.0.3532156]
-                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                          OBJECTTYPE GUIDataSetLevel
                           CONTENTS
                           {
                            Columns
@@ -3870,7 +3825,7 @@
                      INFOOBJECT
                      {
                       KEY [530.0.3532169]
-                      OBJECTTYPE SplitterPane // SplitterPane10
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -3880,7 +3835,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532170]
-                        OBJECTTYPE List // List3
+                        OBJECTTYPE List
                         CONTENTS
                         {
                          Quantorrow := false
@@ -3890,7 +3845,7 @@
                          INFOOBJECT
                          {
                           KEY [530.0.3532175]
-                          OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel3
+                          OBJECTTYPE GUIDataSetLevel
                           CONTENTS
                           {
                            Columns
@@ -3950,7 +3905,7 @@
                  INFOOBJECT
                  {
                   KEY [530.0.3532181]
-                  OBJECTTYPE SplitterPane // SplitterPane8
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    Size 65.2298850574713
@@ -3961,13 +3916,13 @@
                    INFOOBJECT
                    {
                     KEY [530.1.8006303]
-                    OBJECTTYPE SplitterWnd // SplitterWnd1
+                    OBJECTTYPE SplitterWnd
                     INFOOBJECTS
                     {
                      INFOOBJECT
                      {
                       KEY [530.1.8006304]
-                      OBJECTTYPE SplitterPane // SplitterPane3
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -3976,7 +3931,7 @@
                      INFOOBJECT
                      {
                       KEY [530.1.8006305]
-                      OBJECTTYPE SplitterPane // SplitterPane4
+                      OBJECTTYPE SplitterPane
                       CONTENTS
                       {
                        VISIBLE true
@@ -3986,7 +3941,7 @@
                        INFOOBJECT
                        {
                         KEY [530.0.3532182]
-                        OBJECTTYPE GUIAnalysisBarChart // AnalysisBarChart
+                        OBJECTTYPE GUIAnalysisBarChart
                         CONTENTS
                         {
                          LeftSize 257
@@ -4005,7 +3960,7 @@
              INFOOBJECT
              {
               KEY [530.0.3531813]
-              OBJECTTYPE SplitterPane // spBottomRight
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                Size 55.4354736172919
@@ -4016,7 +3971,7 @@
                INFOOBJECT
                {
                 KEY [530.0.3531950]
-                OBJECTTYPE List // List1
+                OBJECTTYPE List
                 CONTENTS
                 {
                  Quantorrow := false
@@ -4026,7 +3981,7 @@
                  INFOOBJECT
                  {
                   KEY [530.0.3531958]
-                  OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                  OBJECTTYPE GUIDataSetLevel
                   CONTENTS
                   {
                    Columns
@@ -4124,7 +4079,7 @@
       SINGLEINSTANCE false
       ID '鏃舵浠诲姟'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Form // FormPeriodTasks
+      OBJECTTYPE Form
       CREATETYPE FormPeriodTasks
       CONTENTS
       {
@@ -4137,7 +4092,7 @@
        BASEINFOOBJECT
        {
         KEY [107654.0.148565389]
-        OBJECTTYPE GUIContainerComponent // FormPeriodTasks
+        OBJECTTYPE GUIContainerComponent
         COMPONENTDATA
         {
          [107654.0.148565389]:[110880.4.1427962314]:[110880.4.1427962316]:[110880.4.1427968321]:[110880.4.1427968322]:[110880.4.1427969404]:[110880.4.1427969405]:[110880.4.1427973280]:[11766.0.1791753774]:[514.0.129466]:[104128.0.40995014]:[127710.1.1037824422] STR 'false'
@@ -4150,13 +4105,13 @@
        INFOOBJECT
        {
         KEY [110880.4.1427962314]
-        OBJECTTYPE SplitterWnd // SplitterWnd1
+        OBJECTTYPE SplitterWnd
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [110880.4.1427962316]
-          OBJECTTYPE SplitterPane // SplitterPane1
+          OBJECTTYPE SplitterPane
           CONTENTS
           {
            VISIBLE true
@@ -4166,13 +4121,13 @@
            INFOOBJECT
            {
             KEY [110880.4.1427968321]
-            OBJECTTYPE SplitterWnd // SplitterWnd2
+            OBJECTTYPE SplitterWnd
             INFOOBJECTS
             {
              INFOOBJECT
              {
               KEY [110880.4.1427968322]
-              OBJECTTYPE SplitterPane // SplitterPane2
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -4182,13 +4137,13 @@
                INFOOBJECT
                {
                 KEY [110880.4.1427969404]
-                OBJECTTYPE SplitterWnd // SplitterWnd3
+                OBJECTTYPE SplitterWnd
                 INFOOBJECTS
                 {
                  INFOOBJECT
                  {
                   KEY [110880.4.1427969405]
-                  OBJECTTYPE SplitterPane // SplitterPane4
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    VISIBLE true
@@ -4198,7 +4153,7 @@
                    INFOOBJECT
                    {
                     KEY [110880.4.1427973280]
-                    OBJECTTYPE List // ListPeriodTask_MP
+                    OBJECTTYPE List
                     CONTENTS
                     {
                      Quantorrow := false
@@ -4208,7 +4163,7 @@
                      INFOOBJECT
                      {
                       KEY [11766.0.1791753776]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevelPeriodTask_MP
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -4288,13 +4243,10 @@
                  INFOOBJECT
                  {
                   KEY [110880.4.1427969406]
-                  OBJECTTYPE SplitterPane // SplitterPane5
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    VISIBLE true
-                  }
-                  INFOOBJECTS
-                  {
                   }
                  }
                 }
@@ -4304,7 +4256,7 @@
              INFOOBJECT
              {
               KEY [110880.4.1427968323]
-              OBJECTTYPE SplitterPane // SplitterPane3
+              OBJECTTYPE SplitterPane
               CONTENTS
               {
                VISIBLE true
@@ -4314,13 +4266,13 @@
                INFOOBJECT
                {
                 KEY [110880.4.1427969947]
-                OBJECTTYPE SplitterWnd // SplitterWnd4
+                OBJECTTYPE SplitterWnd
                 INFOOBJECTS
                 {
                  INFOOBJECT
                  {
                   KEY [110880.4.1427969948]
-                  OBJECTTYPE SplitterPane // SplitterPane6
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    Size 31.659249841068
@@ -4331,7 +4283,7 @@
                    INFOOBJECT
                    {
                     KEY [110880.4.1427981196]
-                    OBJECTTYPE List // ListInputInputDemand
+                    OBJECTTYPE List
                     CONTENTS
                     {
                      Quantorrow := false
@@ -4341,7 +4293,7 @@
                      INFOOBJECT
                      {
                       KEY [11766.0.1791753785]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -4388,7 +4340,7 @@
                  INFOOBJECT
                  {
                   KEY [110880.4.1427969949]
-                  OBJECTTYPE SplitterPane // SplitterPane7
+                  OBJECTTYPE SplitterPane
                   CONTENTS
                   {
                    Size 68.340750158932
@@ -4399,7 +4351,7 @@
                    INFOOBJECT
                    {
                     KEY [110880.4.1427985019]
-                    OBJECTTYPE List // ListInputOutputSupply1
+                    OBJECTTYPE List
                     CONTENTS
                     {
                      Quantorrow := false
@@ -4409,7 +4361,7 @@
                      INFOOBJECT
                      {
                       KEY [11766.0.1791753792]
-                      OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel3
+                      OBJECTTYPE GUIDataSetLevel
                       CONTENTS
                       {
                        Columns
@@ -4510,7 +4462,7 @@
       SINGLEINSTANCE false
       ID '杩囨护'
       PARENTKEY [514.0.2180]
-      OBJECTTYPE Dialog // tlpFiltering
+      OBJECTTYPE Dialog
       CREATETYPE tlpFiltering
       CONTENTS
       {
@@ -4523,7 +4475,7 @@
        BASEINFOOBJECT
        {
         KEY [666.6.1042075]
-        OBJECTTYPE GUIContainerComponent // tlpFiltering
+        OBJECTTYPE GUIContainerComponent
         COMPONENTDATA
         {
          [666.6.1042075]:[101180.0.423432963]:[101180.0.423434508]:[666.6.33523821]:[101180.0.674802547]:[100664.0.672641496] STR 'true'
@@ -4536,19 +4488,19 @@
        INFOOBJECT
        {
         KEY [101180.0.423434508]
-        OBJECTTYPE GUIComponent // dpGUIListFiltering
+        OBJECTTYPE GUIComponent
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [100664.0.634694330]
-          OBJECTTYPE SplitterWnd // SplitterWnd
+          OBJECTTYPE SplitterWnd
           INFOOBJECTS
           {
            INFOOBJECT
            {
             KEY [100664.0.634694331]
-            OBJECTTYPE SplitterPane // SplitterPaneStoredFilters
+            OBJECTTYPE SplitterPane
             CONTENTS
             {
              VISIBLE true
@@ -4558,7 +4510,7 @@
              INFOOBJECT
              {
               KEY [100664.0.681599437]
-              OBJECTTYPE List // ListStoredFilters
+              OBJECTTYPE List
               CONTENTS
               {
                Quantorrow := false
@@ -4568,7 +4520,7 @@
                INFOOBJECT
                {
                 KEY [100664.0.681599439]
-                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                OBJECTTYPE GUIDataSetLevel
                 CONTENTS
                 {
                  Columns
@@ -4601,7 +4553,7 @@
            INFOOBJECT
            {
             KEY [100664.0.634694332]
-            OBJECTTYPE SplitterPane // SplitterPane1
+            OBJECTTYPE SplitterPane
             CONTENTS
             {
              VISIBLE true
@@ -4611,13 +4563,13 @@
              INFOOBJECT
              {
               KEY [100664.0.634737763]
-              OBJECTTYPE SplitterWnd // SplitterWndI
+              OBJECTTYPE SplitterWnd
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [100664.0.634737764]
-                OBJECTTYPE SplitterPane // SplitPaneColumnBasedFilters
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 99.921052631579
@@ -4628,7 +4580,7 @@
                  INFOOBJECT
                  {
                   KEY [100664.0.634737766]
-                  OBJECTTYPE Selection // selFilterColumn
+                  OBJECTTYPE Selection
                   CONTENTS
                   {
                    BoundValue 'Quantity'
@@ -4638,7 +4590,7 @@
                    INFOOBJECT
                    {
                     KEY [100664.0.634737768]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -4670,7 +4622,7 @@
                  INFOOBJECT
                  {
                   KEY [101180.0.650773001]
-                  OBJECTTYPE Selection // selRelationalValues
+                  OBJECTTYPE Selection
                   CONTENTS
                   {
                    BoundValue '='
@@ -4680,7 +4632,7 @@
                    INFOOBJECT
                    {
                     KEY [101180.0.650773003]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -4712,7 +4664,7 @@
                  INFOOBJECT
                  {
                   KEY [666.6.40803406]
-                  OBJECTTYPE Selection // SelectionValues
+                  OBJECTTYPE Selection
                   CONTENTS
                   {
                    BoundValue '12'
@@ -4722,7 +4674,7 @@
                    INFOOBJECT
                    {
                     KEY [666.6.40803422]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -4754,7 +4706,7 @@
                  INFOOBJECT
                  {
                   KEY [100664.0.634737776]
-                  OBJECTTYPE List // ListGEBUIFilterColumnMatches
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
@@ -4764,7 +4716,7 @@
                    INFOOBJECT
                    {
                     KEY [100664.0.634737791]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -4818,7 +4770,7 @@
                INFOOBJECT
                {
                 KEY [100664.0.634737792]
-                OBJECTTYPE SplitterPane // PaneFreeFilter
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  VISIBLE false
@@ -4828,7 +4780,7 @@
                  INFOOBJECT
                  {
                   KEY [112950.0.657398972]
-                  OBJECTTYPE CheckBox // chkEnabled
+                  OBJECTTYPE CheckBox
                   CONTENTS
                   {
                    Checkstate 1
@@ -4847,19 +4799,19 @@
        INFOOBJECT
        {
         KEY [101180.0.423439415]
-        OBJECTTYPE GUIComponent // dpGEBListFiltering
+        OBJECTTYPE GUIComponent
         INFOOBJECTS
         {
          INFOOBJECT
          {
           KEY [100664.0.634694330]
-          OBJECTTYPE SplitterWnd // SplitterWnd
+          OBJECTTYPE SplitterWnd
           INFOOBJECTS
           {
            INFOOBJECT
            {
             KEY [100664.0.634694331]
-            OBJECTTYPE SplitterPane // SplitterPaneStoredFilters
+            OBJECTTYPE SplitterPane
             CONTENTS
             {
              VISIBLE false
@@ -4869,7 +4821,7 @@
              INFOOBJECT
              {
               KEY [100664.0.681599437]
-              OBJECTTYPE List // ListStoredFilters
+              OBJECTTYPE List
               CONTENTS
               {
                Quantorrow := false
@@ -4879,7 +4831,7 @@
                INFOOBJECT
                {
                 KEY [100664.0.681599439]
-                OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel2
+                OBJECTTYPE GUIDataSetLevel
                 CONTENTS
                 {
                  Columns
@@ -4912,7 +4864,7 @@
            INFOOBJECT
            {
             KEY [100664.0.634694332]
-            OBJECTTYPE SplitterPane // SplitterPane1
+            OBJECTTYPE SplitterPane
             CONTENTS
             {
              Size 99.8686947373494
@@ -4923,13 +4875,13 @@
              INFOOBJECT
              {
               KEY [100664.0.634737763]
-              OBJECTTYPE SplitterWnd // SplitterWndI
+              OBJECTTYPE SplitterWnd
               INFOOBJECTS
               {
                INFOOBJECT
                {
                 KEY [100664.0.634737764]
-                OBJECTTYPE SplitterPane // SplitPaneColumnBasedFilters
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  Size 99.921052631579
@@ -4940,7 +4892,7 @@
                  INFOOBJECT
                  {
                   KEY [100664.0.634737766]
-                  OBJECTTYPE Selection // selFilterColumn
+                  OBJECTTYPE Selection
                   CONTENTS
                   {
                    BoundValue ''
@@ -4950,7 +4902,7 @@
                    INFOOBJECT
                    {
                     KEY [100664.0.634737768]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel1
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -4982,7 +4934,7 @@
                  INFOOBJECT
                  {
                   KEY [101180.0.650773001]
-                  OBJECTTYPE Selection // selRelationalValues
+                  OBJECTTYPE Selection
                   CONTENTS
                   {
                    BoundValue ''
@@ -4992,7 +4944,7 @@
                    INFOOBJECT
                    {
                     KEY [101180.0.650773003]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -5024,7 +4976,7 @@
                  INFOOBJECT
                  {
                   KEY [666.6.40803406]
-                  OBJECTTYPE Selection // SelectionValues
+                  OBJECTTYPE Selection
                   CONTENTS
                   {
                    BoundValue ''
@@ -5034,7 +4986,7 @@
                    INFOOBJECT
                    {
                     KEY [666.6.40803422]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -5066,7 +5018,7 @@
                  INFOOBJECT
                  {
                   KEY [100664.0.634737776]
-                  OBJECTTYPE List // ListGEBUIFilterColumnMatches
+                  OBJECTTYPE List
                   CONTENTS
                   {
                    Quantorrow := false
@@ -5076,7 +5028,7 @@
                    INFOOBJECT
                    {
                     KEY [100664.0.634737791]
-                    OBJECTTYPE GUIDataSetLevel // GUIDataSetLevel4
+                    OBJECTTYPE GUIDataSetLevel
                     CONTENTS
                     {
                      Columns
@@ -5130,13 +5082,10 @@
                INFOOBJECT
                {
                 KEY [100664.0.634737792]
-                OBJECTTYPE SplitterPane // PaneFreeFilter
+                OBJECTTYPE SplitterPane
                 CONTENTS
                 {
                  VISIBLE false
-                }
-                INFOOBJECTS
-                {
                 }
                }
               }

--
Gitblit v1.9.3